From c2165821154185e334a206341c48849cfe59caed Mon Sep 17 00:00:00 2001 From: NaiboWang-Alienware Date: Tue, 7 Feb 2023 21:07:16 +0800 Subject: [PATCH] Multi-Platform Support --- Extension/EasySpider_mac.crx | Bin 0 -> 276640 bytes Extension/EasySpider_mac.pem | 28 + .../EasySpider_mac/_locales/en/messages.json | 18 + .../EasySpider_mac/images/api_thumb_450.jpg | Bin 0 -> 13973 bytes Extension/EasySpider_mac/images/icon-128.png | Bin 0 -> 19077 bytes Extension/EasySpider_mac/images/icon-16.png | Bin 0 -> 3706 bytes Extension/EasySpider_mac/images/icon-19.png | Bin 0 -> 4031 bytes Extension/EasySpider_mac/images/icon-38.png | Bin 0 -> 5969 bytes Extension/EasySpider_mac/manifest.json | 78 + Extension/EasySpider_mac/manifest.json.bak | 78 + Extension/EasySpider_mac/pages/devtools.html | 14 + Extension/EasySpider_mac/pages/options.html | 17 + Extension/EasySpider_mac/pages/popup.html | 15 + .../EasySpider_mac/scripts/background.js | 68 + .../EasySpider_mac/scripts/baozhuangscript.js | 276 + .../EasySpider_mac/scripts/contentscript.js | 933 ++ Extension/EasySpider_mac/scripts/devtools.js | 1 + .../scripts/jquery-3.4.1.min.js | 2 + Extension/EasySpider_mac/scripts/jquery.js | 10598 ++++++++++++++ .../scripts/messageInteraction.js | 165 + Extension/EasySpider_mac/scripts/options.js | 1 + Extension/EasySpider_mac/scripts/popup.js | 1 + Extension/EasySpider_mac/scripts/vue.js | 11965 ++++++++++++++++ .../EasySpider_mac/styles/contentscript.css | 139 + Extension/EasySpider_mac/styles/devtools.css | 0 Extension/EasySpider_mac/styles/options.css | 0 Extension/EasySpider_mac/styles/popup.css | 0 27 files changed, 24397 insertions(+) create mode 100644 Extension/EasySpider_mac.crx create mode 100644 Extension/EasySpider_mac.pem create mode 100644 Extension/EasySpider_mac/_locales/en/messages.json create mode 100644 Extension/EasySpider_mac/images/api_thumb_450.jpg create mode 100644 Extension/EasySpider_mac/images/icon-128.png create mode 100644 Extension/EasySpider_mac/images/icon-16.png create mode 100644 Extension/EasySpider_mac/images/icon-19.png create mode 100644 Extension/EasySpider_mac/images/icon-38.png create mode 100644 Extension/EasySpider_mac/manifest.json create mode 100644 Extension/EasySpider_mac/manifest.json.bak create mode 100644 Extension/EasySpider_mac/pages/devtools.html create mode 100644 Extension/EasySpider_mac/pages/options.html create mode 100644 Extension/EasySpider_mac/pages/popup.html create mode 100644 Extension/EasySpider_mac/scripts/background.js create mode 100644 Extension/EasySpider_mac/scripts/baozhuangscript.js create mode 100644 Extension/EasySpider_mac/scripts/contentscript.js create mode 100644 Extension/EasySpider_mac/scripts/devtools.js create mode 100644 Extension/EasySpider_mac/scripts/jquery-3.4.1.min.js create mode 100644 Extension/EasySpider_mac/scripts/jquery.js create mode 100644 Extension/EasySpider_mac/scripts/messageInteraction.js create mode 100644 Extension/EasySpider_mac/scripts/options.js create mode 100644 Extension/EasySpider_mac/scripts/popup.js create mode 100644 Extension/EasySpider_mac/scripts/vue.js create mode 100644 Extension/EasySpider_mac/styles/contentscript.css create mode 100644 Extension/EasySpider_mac/styles/devtools.css create mode 100644 Extension/EasySpider_mac/styles/options.css create mode 100644 Extension/EasySpider_mac/styles/popup.css diff --git a/Extension/EasySpider_mac.crx b/Extension/EasySpider_mac.crx new file mode 100644 index 0000000000000000000000000000000000000000..ed0a127fba4c3c24bad5afe97da8c46ab012ee05 GIT binary patch literal 276640 zcmc$F1ymegvUg({+}&M*1`h!S3Bf{;-~bLvVMOK?naP zEAQ>@`Ma4BJuwUCLBMe?nG4kgEt zAjr7h&>rQH#&jF=SJ=D`Ad_^m_@=en`;9$>WWPX_wM;$EAtbn{HnMx}>iBZ&nf1a? zeS`(64y#|roWksdZs83?w7pJ7>}> zCXDm#TXtRZEV2NqkJaT7nizcE{Tu=w*?MjGs0}pcWY}2lmY^N7o12>k5 zkVA6PBc3AQ%D#v}Z0}4K>wmN{xyima7s=7Gw}VzdlEb}RMvXk-M@DWQ{Mg#6g~_+} zqnO2W*MbHvFIrzp#K{$-qZ3{;PWJCD0Z?Roblj&Q{aQ#obi_O%wFDk7+YnR~k&rn7 z02LLe^pe(0?Cfy+4i~L!5CC8Sgn+G)o#i_-Cuc4zCwn^t02eNKf4>E3C@E7s!EMso zg-CckFQ1bL0yGkJ=`_SzKd)%g^*8L+;Gwz%ytlvg8hemdDy+8i99*t%K^ zVYp>yBr2{Ie~em}@j$Cy_zW49?NxWJPC)g#pTMQV3)@sneyyaym$gC!)D=Q6(_^m+ zJ0GU}vg5c@Dol+(DKQcMI!`(q84+hSJ`so&qQx>E?%47hJVxJxJ($xAB*_g+qHKjhIN~Jr7JAU*z zHF!%-USBI>vHI9v0CyOtUMxEO;{>A%XN}K#fNsYm&mE^+(`AKagM239M#Avx&&Duq zu9EH39jW6`x=bOctaEQ~VU)S_HN-AkKoQHrz{Kq{QxR2vCn{H+LqOy}Z|RTe63#ho zKXH<#5WWei6LM<4KI`hafQzWd#Bv4LCBMt1s-Jwr{F2r;!ydS(F7_;e3 zJ{N}SHaZ{8=illZtXW#TYu$OLO&IlM^?g?w?Wusw6V6(wVEF0F$4-Xk+NjAlWWSDyoc|P)boDJ*b4_b95)q zYmYP_uW?4D&QW&miOLUfIY#(0pm7w^4BJjW8K!naOX7xQ(`%ISFO9rQHabqB5B^9Y zFY)W>NUWQqeqHP1gIg?l!$zfy z!@;T1U6{$~3CZ6J{OP58NG)98(NO^a?;i!8%h<^JkA&VwL&<)Q2eS!h8p8UXL)Y9g zIOo7t!rv(5qWnw{Gk}Ay8ej2@@hJ`G^^$DgE89NX_}A1~owDNL9#_{Jk>Y%VL<5II z?;^#DeR&u8qmg+88@AV~rPiiDRGm0Takio}P_U@V&fg%=RJgsh8NN*#z2wZUO|mYJ z!iwC8F&>h2Yr#SMf2M61=%8+bidZee%=)sYaLD+g>QT_JTR)5e{oU%_)uqisCS#Pc3m5e8yW5H{$XLw%e zNra*O@*4e)swQ-*1}yqw@1F_P=AZZ?7b=Sj){sPTey4b6KJnY**Kj<8PlpA7$5E| z1}1NApAt!73y(yd$4gd%*T%!2sY?10FtBf>HC)|#`-(%SLu_a$q#!*Ps5grllT_A^ z%cg$G{}eqB)Dt{17#oId8e(j^*9|nAM?_v9u-qA=9_h-(d|Gpwc&~pEwr0WcIEt-2 zDe_7NbG#{YMMvp*x+dRYBMnNp=G7*W*us;bDFHnSUDM`ffiljs(hRP&13L3Js6W}A z(tMDJ^%&l+8WLvv4t`nmL%n8DWyoTn#8$7QQDTnZN_$)wQ*Dg&LVnLfKj(DuPDoRV zbV}iFwvAvo9@`<;26-b?uWL|H@{T^HzHuu`)_-}bP0Y{E7QeOR11Y;hne}=X$Rc>K zd`!9k`D{;|GF$yr|p#`qsIna^tOM3PTfx zUL4j6Gm}yqcS;?}A;-PPVYY=^le`fASYik!yBK_CJ z*PrwwU+kZQ|6TO`EMzr*D{{Ex|7iokMc>la$lT0{`;P=33Ha-+z@N-S!M&_+q96eL zCenYu)yTop(AmPp*4U6=fQQStK}ANE)>V*~jf2+F#mL6e*@IS$R!9K- zVGfW6P#--4JwibRfk0?zsOXr4SeO_Xm}K|_ID}N>G}Kh&l$5lLTr9No91N6{tU_!Y zJWu%f`Ds|5iV5?Ia`Ex={(cAo8X6iV1|}&M7AY?sB^~d7d3$ID@K6!j5!#Uu=mA7L z1SC9!hfaV7&Lj%lFN1G?8EpUo5eXUP5eO9x9RuE=3Ku{`Kte)9MnXYBMuxZcfnNuZ z@lf#To=83-P&ES4I}-Bx$9_g-kg8}SQX4&He@#qIP0!4(tgfwZY;JAu>_SgY&(1F{ zVOQ6``9c7Y{>;|DarO^<;lcSrL`FtJ2L0v>0nzO@<9Ns@bWa}POR9p590}-o{ZR>} zVn0{3p)v5O9TOS9A4Ml-Te{$}k@oc(Kz1^l--`!~k^ov&E{6Yeh};vwMyVBqqa zHOCMAZwNnJmlc7{A}<>yCobvluKaDQfAttYDV!C^`Bx||9MENBvjB2_AN);!{?#}A zm)j}mDgeLvL`?e4r^4@7|116c@3#3zwiNy}%zqwx+$pjZ zWAp(eTSn~pvvZ<`)e;qpW`c<-UI*I}##qQAy5sd~Bjmz%T&{e|#f{AJouZ4$eJ{t- zHEuSJ+n>0|jantsA7e9dl@38~O%%URWC93PW&Q(tnWViO*~bw^&aLU%N)wh18dcKL zQt53=hz!7%%vS*ktYwkv!Du?{i{H%2zeg^_?;-;#?48E_thJ;kIlU!wbap3SDpk!( zJ)eI{w(rx{d&`~-Yx?p4Slx0@=3*oV(>XMEp_*JHX@h@U6kR+3Auk5gxs6;HB_Q9Y z9j_~H3y>xXa>4=De?sstrVFsvKg%MufbQxlwZ`#vbkB<_-Az(OUlDySv`o_N&JYX!Y)jQu zyjLx^PKFH0JU@Na@YNcEY9f<|F?Qd)Ji%tqVH z&UXDn^kqWyo&m~@;4U+#q5fFP+FDd&JlgRaylv+q7LazokRql5B60W1WbY@Aa39yc;~Q45+y*UZgC=_MwrJ`x#xw0=o9s$|sSadoa@PHCJfQW*o&a3S{^tW%cSPZ? zJJ&5v*fhq1PA#*5`~gyw;4^s(6YrdomI1u8j^n$vs2@RdcgW-UHA$R&GB+rfrCFaz z-@HBcX--UEX&43duq!5tidXk%nJ1Lp4{C}FS?uL`ziP3VvT-X&mcY>@wZHX{zqO7% zZY-gRTSW+{8hAjPB{KH-gv zqPw;EygxF4*_#WT9XUE8f0r10+RyVkHhzBDUxGSNhA4W~p1?8_e`Ir_N+;44x{RWl z6dNt0I-dqi=hSf{dP|PoLQGs7^JPSFtX7!99fUCN#@iS`pp(+-KQ?)AZ4KnX70$m| zrY@*mKqm9?*DtxxP;S(j@S=}fG{Aufdg>~mE(7eT!&`*42Ctc1XTcx*Br%t48Ko_% zzr6en&2{zLe9W;HDvLM>Xyb%lcd(H?f(!Tqu$(krm2#_UMsm%$gXT==)91I+90}UQ zDba_KL7#98_~K8R&tcSDBM-T2f=_z0q&&T#I}+6WYghM!$CsVFQK;jaJ*ywIqVETG zMIQisA)o5C^SCChRbS-}Zrru9=|#A~ux?PFs+!~VwY1Gmz%ez(xesPV+TMj5TXFTf z?1Zw;fvnZ~UTW}aK{k z@Trm^Q~_n&I;bq6Re4`npgsUCh1xVf5^ip>3Zx(#nb}LxxGE1X?x8~(NaH>T{2VTVhUHbz+U%Pls;}+ z#oljV@g#x#niUlZf;Fxmp66!KDL<0F6H^{*_Jp~tP()M0h871etG?A_d9jHxfHHlw zp|Gtgz-y`19-}#E+5Uhch~4R1Z5F5?)FCU2^8r94+D)WyvFvs`L*|z2rKtAux1w;q+MS^=<~=i zB@+(8nyol_H6qhn$5UV5s-NDBP<(gmRly7=z7N&4%#-g}0QO_F3#`g}q9ON)j{2;i zs?^FR&4tgkq0qZ2gMs{7@v6izKk@r7WlXSVP;ngmotSOU;@z}~?gurQ6Nyn^yha*{MtVn&96t;{{1k^-I z{7Pj_L43=yd@Fgj-G zWYB?mV8u7v@%LdhAbQMP#@x%&9Fw12|HY+<^CSKb%?dkrr{{n;&GF{vqE|2a<;Y)B zuVaH&9l+$k)w4D1VgX1vd1vTM)I!&{2cQ*r{QyMUm2mrA8@0ePte?L5l7K(tQ#%dT zDif}&jXT`6PED!&@l0;ttKunhbMRgI83T4=(cX71tj-8qJn({Q(rrJ^&8DB&SU7tU zbSlbu7|Fuk$9?yb3$?lm>vZ4&7{T7EnIc43r>TU5##t|Lca+yM19thqnK4h`-p3v& zQ6Su)B|&iRsr2V&UvRlJ^w-2PfZsFCej^+9m29Q?;!#>vv}k=jxL5>XNp*3di=C?} zr*3_VW28YBtd}~5%HUxZ8<0aEH=ry5>{=k6cXb!7X1MqB4f+%={sa|0qXv-9kg9y_ zkNaC4U?d&vHYp` z{N{QP;3QO)K>05a5e)<7$X^P&PY##eIHA$S7@hQn|a`cU!f?%Usftk@E7T`^WIW{*CFU`>N zn8(yv__3@Mj)}p_vi zl0R@8eM$KMFyHRApJRz!Dm29nt5l^;Zt?|(t3U2I=0~`=__)eR(0Re^!=h5t6ckL# z@Sblb;Y9p{R!=7Qc+UNG_iR#PWvH6kF~K7921Gi#Kp@1Vz`!zD-o?a4pmOKZG*~JU zjHfG32Q?^Jjkjk0Au>O&_rgRmz~9t#NWxfTEmK)E4LA^g9I5sO}9ChAwGz2 zjejbAwE=#;lvu4&Y5V5Y_|@;g!+zqhlzD2Or8e&Q-9md& zg|M;qlUv_6BcK*FRUPWbztUxolgbKmZN03Yno4iCy#l{cdGtvOcj%2Y|9jFo>kn^T zv!tVfzm#P@0PotIxN=vY1t-pO#vEZf)%Cr{nF_p`8gT|H|LW!TnMI+d>FBEoki9eU z1J&hEeY$-gT6>?VS#|w+Lw*nLAy@9T8r~hFkhDBaV&!Y`t z;dc}vtGw(47hV&G0yv0oX5T1`QLuMMiS;})G1EjkU67!zF`&A64lB^JBsL(ciNCC| z;o_1IV|aZMcy0$-7C0ceoV=!^8@0G77$+-6B+(}T6^ith2S<2oL5hcCxB6}> z!EK}~TE~Fz(`-y_~NB515#K|ldrjm`u z>Px&&qH3QtUms%m9BCUc9oq%2&M7nKjOTpv|By^!8htlO8J({Hz&xwH!K+Pf?KR9k zBx;$XDFM47tg!o&Oq^BrF>lLb46V`5o>D#a(mF%ksX*Upd*&}?IXc3yy1xc2N* z+(c8yfIL@vKQZ6SwS;E+;}=EQd-d*m4e3slTAGb)cDe5}Q+re(=>0If(w^K~nW$Me zG~!$gJw#=S6EX;I?XC5IB~+0SKd<5$V`y7q!g3)MDnG*Ih69-F2rH|-#56GQaS!eT z;4hbbpIQtKf{+||zeXk(tfJT3Q$Q@LXxBHXJ%gw&)nq4M1f=vFkH38Yl4>g0Zc`or z1)$?DZ52s!>fPbxld|=^2VfsQC01H~sJB&$d1CK4QQTX}-uD}9z`u=}3gU0yPm2Po zizn26gv&<7S>sFRf1fy`MFur60<|yUK0UJiaew``WztV{>cX;dK%DkFOOS;b(q1ji zI{T9KX4y==aWnfQ-TsAS3kwolKa`n6mpZ8!TGI@(+*hsp5N^cMgof$P#Upkh8Gy&u z0ZnNScG#C~*5yIbCCgaJ?Qm4G>m=}HUzs?}3HkyjWRd(=$y&MBpwyuQG}yKxC#YNd zT=aq_!;zW^O8t4Y#C1*U*Ow*Hp6r`~+?;}a6w?uq;c8h}CL7c}j#F0E^oMVC(gV;C zLHz++56WDJ&ORbaa2(R<`{d-%yKMhXpzcPaJu3xL-lTU%eTL8q$OD-1Bj{&Ypj$$y zP}prldM(_^ET#Yr*1c{DxnY|+Z7uUTc5BbVggsTW_L6k-ZL;T*FbCbmjzX|~_G+@R zx#5rmhBx2xguE>$${=jd<2_Pe)`b`Mihc=U!k@LGn%W403=`*{;haDH`ID>om#cr( zoBzq4$R^CAr)0KW5nABCJ7>)Mq;ut@}Gi13{f|+?Ni#=CD^ZH2c z+DU@^KIA6)=xFJb5TP}<(yla8BViraL9$F@%9nWomcLSIKr<<%SfIPm!>DC=I>}Rv zYJU+dD|X-HeGv}8aiW9;U-L{qT%9aZVeNp3ADn!c@$yj$4#wbA5%WWDu;UW$5RpYOc|03^h}fExcmBo`Cll|^bX1yIb%s*d8eeev2C+d$P z7SRn!V1n-gXkFL=^J?1n(=@!kw7ze(dRYR)fjG3h>e?vxl)Tt-XQN-Z@3DM_R|bv2 zxbF6^CUUyx8k`gSr(=6>v1L~b(Y3~xehjtTeO~S_p_d(~w|M|)AAqm+r#QFnV0f_G z@t24QksQ{u8r<{%ppkUy8$fBC*|=v`&Ze`tY1Ghet#_BGtaCdIP$$k++DwBNJ{X>l zHp5Yrp3t(;=_F%$#`riTfJwW&qVCtx!M@FkWvLw_UJv>CI~K&Esh0a;UvxDVsLQ_2 zQy%SLs%Oul?~oy_1xUZdsoe30TQjK?<=W*TJUAW>Ag=qsyVwz5pS|+`;z<8>#Q$jD z0fmH4wfmAaOlA)0)gA;Shcg4qF?_>ct-B5%087g-`r!`L=8pm^;B3j;y@jfeyj0dQ zP2*gkL%U^n!)YD{f#dEkM&ikZ3znDc)n1mmY@l4WwtIDiy}0`^Y9^DL5(Wjy`;pj| z3!|6O7tv6Knj`)ax{z#n(EYH%QyIYPBK<}oW4As(eF5(cUfKuL+ z;q;rkZlyw|o$ijLm+}poHzYt-u)Wo-U{KIK?NS@MO=Sbv$`7Gci-p#Q!r|Juxw{Pa zF854Q-2cm-MOI_gr@3BZl)hrDNQY@`D1TO%?jdlSLE(d>ILcrnFyHL~ z-0xyy-g91S4W92VRT52fF5x5d7HVhz2s0Xf0pd{Jl)GjBX@NMIZX{mxO?T&_zuqfV zleOpOr2{y_r!RYl`1(lIfre0=an2n_96PKm&}KSW&*L4w84M-=)OGA)JyAs9?5r%RXs;!p znMwrI5y6ruIKLF{#w;srhYMMvQ(m<|8vP^D{(TM(qy6X5BRud%E=z$};Gk2ncR5;* z$VTWZLEI%)-l+y&Mbea7?_6(*I;|)|$Y5$ma_JZhr7$M&$&l)$@_5Asv!6IaPRXvP z*n+N) z%n2$GuXvJaWykn<-Q3A|f7D&1fD(UR(RZEG8aJD9L~;hZOx2ekqQVhMYaxR%=Mrm~ z+KS1~QF>@3ykQg;fYT>vq{-9bB^3AZm(b=Q>fE<0rlfiiu3%B_ZJ#C_&p}v?r;RVk zUSvKFhaw^z9+>7nVfK4k2R2_q)~69fI~QKFlL+5XxJNF$clrFqTj&_nF_$>WoWODH zJvvQL-}E= znK5tuqHTquFT1lrIXGA5lv#9_kKMtEfKSoI@C8_RRa65S(jiV5zkf1dZ;xbDa)A0i zvmsjYY{+_ZP5AQh$*L#S4D!NNRLQLRM;hNBRH^+rz=1l19Uj77|B%@Os!5 zEbVs-rbaFG!y{^%z($IdGBim?l8_aNL#cTMvs0?jZPKl%CgDAO8F%yj6?e#w^8>Lg z*FNKnSDwMh1P?$|_(g`S>W?w!tD~|*{KZKWZpKmvLX}65@J1!06>c1TtLwm3VXbuu zUrWlnU)1Xlz(;SxRb|{ISiV91#5tMJ@H2Cy9Bwn}RxKqcc$ITFTA*#iK0>~VQMcWl zWnvoQejgb9<~ZRm$S3I_;OvWhJdnu+jmpZS&w4D6G|zKSnw$hqMw$=5dB+-us>YhY zXz^J?Rstkxpm7XtuVnjKsfeK0)VYhz@1P_BqB1L%i(-0;nS`(XMM}5Rx7WgNd}9jU zN&2GsGI*= z@!_{zjvfGevpIVbVxEOzkSmz#TX+@;96^=!;CfGMsjqgZKPo=VkRoANO< zO_Vdz2O}pN6rHbojetsT#bG)o%fcn+O^Uj;A*vQVnK@?R2(fV=Xquv(ewl~wR2>oA zf+uXTvx=>Cl?EsRNtJrv%I#b#!BcyW61|Gt$%hWxi8Cn_qs8sHGb$1o+(yjL%ThTZ zYa3vi4G9|AAlTz|HW5~;A#L9(c9_ueWNCxVq4NscHr+4utlpZlvQ#U173KkgQ&ubB z8b|dmtCGETAniqki=AHLDdIrZSDd{!Tt&z1-Nd|E6+N~Eo#1dZsTi>ile0kw-FJ0G z7Gq(~3ktiVr&;qq)oBW-tVhn4qMEtKIZeXXXLb>S6_tr6d+gMsHzWx8j{-BFG$ycI zDCm_sm^Gwo$S$LSzqr-Q?%&xE>FG@bW=HQr8-J1(Ps92{ACr9O;6eN=2 z8P34kSt)@IG%HM0V(>1%cws2yUgs+P_5Bqo%@@FH2WEX-^y2kJe}t>cO}|IMN(*hr zmAbfcn>8d^gs$fX?q!uKdCx|vc3|gZhy*1Z+~k?6fF?7^C!0yOUz&|pank?PNj6DL zf47XIoHDUQ1T&X_W#xbQ4hwh@#hpsrzC$Gh@klUt@%CrA^^%0++4nAcEkC+rA>5Ir z0?z(jABcxB23`<05Vc3Y?)E7_8obq8X(&U5rCrK2I5NzY&(TMM)ObsxW{@?RyzDz$ zP^}HbU_ZRDgG|lBXIVdIZrp3fR<8#v<}&!lALwKI-w5x-(D#+?jxQ+w>as$%5UZh# zzg7Va@oP;_8iH;?#@WpNn0XMw!xQsU;gTYIB$(PrASn1OkKywTJ;7D11PzI$Cs$#~ ze1s3Ta$RG>C);4&>Fc%pHG`|;;bqHlyU&x}>J?3$rlQ0^u)1B>u#{}}+TK`GGljct zE?yh{^T3>(Af#g=PJoH?UxVoX6&N2uPJ#j1RBcoOSKbmi$=+g=J7zRx;H_h2qzQFO zS*XBAdVQp>n(LRXA(gdp9GT1JASfyLqtBqBn77-pOsDR?ILCMY%vn=B146Qsc}#X1 zV;;U;v2CO_E9>Yhvj^Z!m$ceYTVo@xgC98%-sH915@6dX{Y|lW*R{~m$ec7vctgMU zBum9zn5s#xjD6gBuE|g}puHWGx#@;RX~8QG2Uk6>jW6^JKeV9AgewH9IS$+8;^az zN!J%OV$cnz6Zo86wlUtJot3dbw*u{M$yT2he~}fm>pEaz2xB-HF4%@#pCR=Bnxf?8 zc9Fos>&Eqn!(`olR`q;9zn}W6A5;9jST;Ohf{5HOthfd~0H~K8CGsuB4DM>dx&_t}`btNa1x$t(541jiW4j z;zuIFxK7p{#`UbBtiQ#d{>R5me~)+b%8gmfKE=}~HA)PYr2g=FI~#{}@*WpPp#IA& z$cR`dLx*Dv)nnV0(jSJPBYz_fGkA2$(mX-_qz{Xp_4Z;?>wqS=lFwrH3?-)4T0ZsF zQyN|f9N0~Cmo``s?szjG``Jl?<|V}P_9@KJn&rY%>axK>ZTjl8rNSm7cUPhe13Da8 zWk_iawrL2lfiwEWpxCnwHKf2r`pqZRwxErlHJIV${AShuS^UXre>Nk zYipox?Ii*%&(`Y4@B6{OxRaI&1WvH4^5!jc7Y>tMYcnU`h1Ko_PHlU_;{~a|W~-V` zFRaH-9ZPqM8z1-Bd^~4Lzv6VK@_`&XbquZy2Vc-T&p3Ld_xZ0;RMb2GR2bJIAV*s- zd-w5Te30NtiYXH84d8f%cQp}y934dcjAV(hQ7K=Z%l2F^)z0=kBn*v|1|CR{STAh< zAC*ce{3*YV-~0kLu?m67HPh)!6C75K%g)fZEti9z!ZX6(!3c&g-S;{bR}3FndDhX& zV=@_m8b6+t?aFw|Gk)aw$WUQ!tdnxic$tlp-D0jx#Gq#gGgy5o_wk}gMOi~sB>HpP ztr885Hv&_uA<0g8lEnzqHSLzg&39iaoN6&FcY}};19vaI%8AM=(S~$Oq|f_4k{1lL zch>u5AXtqebSrr5e#!{DS%2`ya!NX75%${nFE~O{snu}%9ERgW)j6C0!34jx^T*Em zO3VW=&g&U%0*~H1?QOXE=aQ{nYlA3=x1z@s|J@;?S#3*49X=&1A00J!r-_j&h{9J|4!NRLvmtnPEkl&4@dx0?R#;1wD4lo&-=+_*atuLV*oo}A8_rKZ zv4B5`CmSn*#s4Bs@@MFa4Gl0o%f`w2Q$&lmQQ3mkev7&I2Jrm`w**q)M0YIbCETjh zRYPj4>lE8j(M@5bBc{vB%x;gjN$) zJ>6|vpQL_7A)vcq`d>I>#>`C>5-;8I@=bzp30cA&%R}Z=7-Yjl$^QM_}Aet z#NsmiLOR7eBeL&W0^Le3FX2#`tJGB_5yhG~`_H7hIkP-|#MiSXLG7jg0JOE>!IPrT zpv0}cH@0Ohqs)D4TMU-)NgHrq)%rSi_9@Y5czuj|RQ3pHsZx_B@VpDk@`1nP4X*Cy zg6>OK#}1sEZSwg)2zLHCX7JDIz!2-oLdn}kypc+*9?zMEPbBeeAHa1+d%f;S^ejGX z&RbZ|MfgTz-?980;DZPdBAm4RuJjQPze_7Y+!49k6t`pv=eT)X0mr2G7OcBk-mQXH za3^{oa6Nh;P-dBpZQZqqGSX=I7OpH+-eH86<|3FyY%gZ^gkJ^stZ3Gh!lKp3D<6el z47IOh+e!{6<1y5T#-9zZ%lHJ+G7F+R$O#KSre^i3b=&veM?a4-g{=KN-%mW1-Cy!HhPoD+WyN{XF^i3MgI@@o zHT?&LsQ*!c>c4iLX!QZ845&D^OXxU^xQ86gX;o@{@^&1f(1e+ILrZr!@)WZ{*~0dH z+F9*>;<7p6@Zu-%%-1WWmQW6~tHhO5*#da3O7Uu{v5#JcLNux%oL46bAUZCMSfw)T zsNsEMasA=qwOpoNBWFPWr{#O~1Le;8&B`Z*dn8j4cQc1%zkHEb{lt@?!#!9S9p(Mj zx$@LSg=+9ZUaLd7 z>Pm9H78V;W=6njOtu+Vk(8_FJF3?5PlI$^2P04_&^iKwXji$VS_F)-&Q)E6twNAaKt>*fR5i|Gzm6OG=b8qiC~~P z!QD6}A7w+)`@uA6fs3jV-rF#8-R{M_jKM2g!=dKj|C`DCxuGifddOPw0}k?N<$Jd6 zpD$2vzrn|A6^Gp2c&nZIantA_5>eQtG#$+zgJ=;>M_Da>-Sze9YEMTVv^#*gQbXT( zfEaG|Ql51yx7bUc3!KOdHclq<&b@gKRU#ma6CyP;YD4xMLH;ewe_JO_#E9GPBZ`3btRbLbF#ukHY6w+MdY{63$g~vzj5z9*`(>pex zS;x)!@+0>55H8S)zQ+Gzr1+18VFt=jlNCk-&am?gGJGmqlC4(}&LETR#gJq1+(~%4 z+rPBLj>GOtRejJ(CNmr3doD7$UDN{Wy(PFWfnGUGIY&`Yt+U5k8@0}j@5$lkLVYK@ zW5^B*>_{sMI@jSpFc>{JB#6zbU%UC~iFYJH_HU!4UVU+@KQC)m z5SbbUWBQ`Xeob*HBYGaU5Gg9ivMCpBe3#l(kK@}4ua#*x418}D4GI-iL{LNsss7;@ z2+kGWZ(g|1@Qu+>SNR60@Bmb-@Z}=^^YsURyei=L;)cI?_Ql+U?y@hS!AXx(~wyv1?tMal30)IvVoP>UxZoPKepCOm#uwI(K~ zvqSvlST>yxN+~^&e(fT#-3)@E6#n4ZqyIop*hIuH~|0#!EZtU(muhl6?7#_X=xP| z3wvjKCkuNAT6t+{T8H=c?<{T10Kk1VFn*o{USv*Lhzfi}08&|H84)EKfVUd{Y8;5I?Lc<11U(mW zYbk=CPBpJAqF)mV;2NbJgCp@4@Jp5A7yxL65dmpxfV=c>th7LisatJ_c zf8t=W;us%cZQ=;I+sX0rD&1|IPa$86*hcE$v{A#rAUKkv+ zwYk2s`EJYR=&UQ}-ul>{9$rMabl(_>hz#Jq8a|pe+}M~za_B)QcWJRM)B|QU0gI(8 zeZD!gY+dvb&#MRz;adsn%+D&lqEwXV7#Igk#-E#b)*{3o_*U$fBYZF5SMTRMj{(Ot ziPVzT+`v0WBRkhpwWzIrWT_{1mssv1<)Z`0~~h=3S@tv%)nNcf&|Mv`O10=VY6?NCl9%1^)y>bd{U4W0f-u_%i(9cjwNW*;k{}vAdM<&< z*eZ%E^=RFX68$r2k|ddWtH?BRRXGxQHeT8aZe`mOVXUoX{5Sr44kVA>l4iD(HU^_1 zOZK7?7}1G@;u%Lx(+{DNq(&jr8_Ds<`Q_2>gc7RKclEx{LoAfCiq)56IN^Lx`1Io& ziR+lTURvJp+wex&Ckg)FRgr!nx=7R&(2$3BXFH8L^W*6ICFNL;l2=lT`BmrSk1B4v zI0HW6Q6_$)Pq5!b&KSLk43T*orcKV=Lu|64Eua}KU_zxW8R;4 znG9I42@K=q7_s}})?cC1F~#u8W5`>}&B<}*z0MOK!?pbMl6f!2wr_DA^}Am&ZE|c) z3{H%4+)ZD{dJUmSSLo_Xv>ZmYyaap&0WIB;a>RV;W2+mhR8v%$*oXvoyE7wBX)xu18x4q?Sn@NglJ_2JLL^1fIEJVg+Lb z_Q)Btl39~^k>!)tka4HJ{E9N3oZ73-GsR1hYMz3VVy~h7_~NlQQS49rM3F?zMBl`% zZ|WLO8sG_!Zy4%D8aPD;nm%7&X#7xFD@6N6Tr^QgrO{9*SURNUrWUO-tZJCsY^teUNfk+)Z}|jq&*Jn6eVN5?^pXTT~Tf*T)DkozLs|S z_OAF{?7NIj$3X<_?uzB(r!$`vhUkW{hP*hDIKiA1lU60~N_fq`C*`Qqu~zWu1D6Q8Uzjhbf~ z=Wag+eUbUpr4S()(UUZrwq?B}7oT4eN>7jY9IaMq_`DTw}&vsJFMukEv9Wz}d zy}!DkB)z25HQjcJaFsBcZH(>wwcYHK{o8%?{j~i@2Tw1IE|@NCFNUcGDDkN#pE*DC ze(&ru;A-R0xRG|!aF67LpA%<{|%Y5v+wza-Yo;5+G?>I=Hf zym@xre-{mFS@Ad_hQ301i_nI!fzaen?*9YH8i@uu75NKD0Ocb}!y|4?aUv;9G%OvO z_wn|vBqtPCCVcbe9BHFOKT$J?bSbWR2AE$`PvS)d52G&O`r3cJdbu-DjT*WvYZF>a zV@Z}ua^*wF_L%n@*RE>iYiCF2OODCnb)6gYrYLB1VPxI2IjidTuI9y7HflB|`{}iQ zwcl#}-9un9&}4jP0!Flhu=URAPO-2xC&VqAG`>&kY3fPNCZ!wmIdvqPJ45}MZlXE@ zIx*hDK`Hpj-@zM!v{EYEq{RL{Luu1QY!7vIvm``s%B zi~wTqrkHY-+VUUMweC95W%?GG24aSY*CcLSPxRI5P2DYz$9(!N`oAaLsjOSvGa&l?ns+5dHO({3vy&|gZeFL@fmB4#7LOA48>`se zwXBEF1gXhvh>y4YfWYQ^H9fp$KX;bq~;uTPtJpVOr*u7m^0Tl zTkLbw(RO5R29*JoY;(%{?y8~WkPd411l z_p;mO*}GlPHO?-i^1i~X)pi;7w)O3BhYrpWHd;vLeZs?d$jX@Pfb0ar3x7`QP&ihJX5MK6vao6>Tlut==dOYu`>EV_ZcHx0HGmp1waSDl8M}Vd$Z0 z9P$u@e!VRjn)5lTJ*r>oX`)GGy_L9EIUT(=>B%2az7*f`zQ5(Z{BU~1G?v8&_coEu zC6y!rpd!lqMl~M(pVmZ9O$h)znc!Y&AOKuF!1p@<;KBm{yKezNBn1FS?Bfi(UH||% zNB+5_y8GnA*4#$BmelK*87ULvbtKz z-Cfv%pZqQ9Blu&GC0mUvkPVtV&*O>MHE%U&arsC2#kP;)`%K|)8sW!clt+|NGT%bLcd!FLTtzB5(jGd2>q zowiGJ*?`12f9P}iRvt`#ax4d7N_cO1Fpu1IYa2nm1^8=q{~vo_8jf|_cY7H^B_x#) zl1fq(na6~XsU(@noH_G66om*$g@lk~PUa~jAtCdeq%vp9yqD+QU-sU|{_uW#Kje5i zp8LM5>-rDp`5V?+zjbc^t&`E8GG&wJ9(Pgf+)0$FvHL*C4m^lJLtGrIyn`xjq{j*B z6m`zT($Y0D0)9tIN~&sney#jSP`AwMjEs7@ix(epMk{z-y}D18ZU>(diHus+h#eMG zy*&*D>GJpY^DCZJ_WdhO!tqp=mX`QfT)wn8uws`#zD!j0D@GCB0|R^R-o5*x{nsikfokCzXLN*~ zp5BdX*RC1x$NJTeN=Zuk?js0>Nz2POT#b&7wpS5f`QC`XEd14(pwwQuFGJdx#BOPN zVC}hb+O24Xl!V*GI>AXC!}BXNhY#;D%|CSK!Vyw3vI9Crc7__aZ{MZ}s!5-kS$U&z z>T)dqo?4@`FF1ayAEodY6lgRca}lhK&(7wqt*aA~QJ;~bAyvP2Z3hD-8Q0mfxmsKY zV8DCN>+(}h+s(zn@we>NEA!7A%R`lS>qmQfCa4Q?`M-wDJk;R}s!60eEd2H~ zJG-&Gq-0gpg~XiC20W79-r`s-tQ5qg#8T&F)Hn!t9vtFL?X==wb`uLuV&&tbd!#V- zaB%z~iEpaK!%OU6dV6=p$H#jm?W^H=m7T5P{IfuTPUgt*<7C(|c%}*|4s9wD8w=c# z?DxkSV_Fn1UlujW)g&|d-v3*#&giVGt7}!f=CGGFF;o51dKRB`r*gf7D6HwVC>8PI zrt$fh;^N}?**|~$ckVmxdx_ou+qZ8MrOs3SB_$fhQ@)i+4s9yqZN*DbK8zg50oy;$;n+W zU;Ul28$XPv4>aa5n7^4i`zRoZgNNb4@YtBspLP`qrM^6qMn8c;*U_K9J2I{}KNnjo zO-()CU1-blq}g=8KdZsHr%4CT=umha^5>7;pmiHV6kw|`vj&Npj`gTotqOaN+#A< z=7)d$aBguY9FN+GmD#)XC#JH=edO*z@6B%^+)E{;rP?v4wVe$^LlQzpnp`;ZhRETNBo56?4Xc*tVw;}gLp<&a z=3ZJ_438c^PPOWLH|25vVq1mF%%BV|P50QbV>N%ixZKW(WMyN!PHn!8IaA?-e#l=NZ%~A6nkE0;VU~}^x zSJA;4J)JYxP5EOt&QkJXUs;Sf6xZ+OF3agM;JMeCslEI%EzK7=tr zQQjTt6^7}$7=;uBrC~uTylUNv&PkJr{9_ zbW)Ln&cC!&56oweSK?2?5gVP z$(h~0?;Un1MvyTt(9*;n_BJ#e2_qq=dNWkvwf3V+-^XizaFTQBKp2y-K`7C1t?o#4St9wtf5dA%0~=Cvi~h-W@R2S19sSDw2H! zx9Q}uvDhV*-1^sh^;cRc-rTduNQWz|G>;Gz_bBk?N40(V0-Gfw8ag`Ctda%O1ja8H z?Tfz*3{3SubuRUiOqkkWj%pyy&CT6oVPR2!+rfc(b$!02(wL~y@z<5PPtm8O(%Ok? zc&bL{s<4*u1$MnO0^nnmkf@F4A^5nGQrAvZI8X46FJd|1t_v?(l znDf!l)4TQ!ANsjgR$h)L{VFr_@ItLN*MUp;qmi+(YpQZ`L08ESQIc7>xCs1QbjLDa zU|@KWkVdE9rDazb%os=H}*h z@W)zzNxYHYLy6ah&6UI8LRsURmX^lrAoOIdKr55x;6ayY#C@gX`(p5=GHR$ET$PlR z4EPv`q-efOEE?eR9kZ3wYSifN1_uYTW9J|tn?DPbk2)@N&0jBj*>ybL#X00+(zL$! zib?ZBqT%k`o4e05D9xrNc&`p^Z$K@4Khjv1ekGNzt}g19w*>`mM1+^Asm|DazI8@K zbTWx=-+n!G-qCJG=ekQo{b)Ku#_vm!Ob@%KLt1xJQIYvc62`{HYAk!&`Syr1Q(w7y zHSxs@0!MI(wfyisr?;~!p2ZEuyNr(|57@|MYMes&GUzZfH|Id4ud-*-($*H?x9%lf zTwJ7mmRfDaACQp1g4KZ=MC>(Ko*u|f5chIFA|I(s;Bh3-OL(tGym|BHL7H;BRp--@iUf8E{?Ct?tl@`{v5{F()S{)&n7n)6>(+1bjPBY_sxQ?T8)6b;7+mqk)l{ zpk}Yu7bLn5&)@1KB(zkXst{vbX=-T+>h0A^8}W$ECFYfn)QVPE6uDn_JROmt$a_N= z+lxNX?@IdDc0Ow$Jj}5Iwq%HNbTWQ=+2sDL$X?`TCMKCggiFfG;=(UEhZ{~Lth0%T ztep(0d%uN%zj>?go%Ja@Ci2+kAE8QpQ_d^|-*EBOkDs*i>13({sKqIc965sYFU3mZ zTUuJ$(_wd%;yn{1wP!oan9eON zkp)z5S2EVtr_26+3lSJTOt5k;)&0TiB9`atZcGJ@vJesDGFj(mLtL+Aph)5wiA-AVDi?9ZoDuc{5IGBPsG#x|QW zp0}h!R;k(CSZh~_7hc3}mzDj{T5zlD2lYw9cL$-%_>UXOa^YuQa0IW<)=+Q#nwkA`kLP&v);L<1r-u`}Z#)rf~;TePU4&y@P`Tp(aPW zIQkAAaBkNH8qz<1{*)lASDWVhHJb)}{CMeJSeSE(A4jmlp}>(IEB-JAxLyh}#Y(dJ zCMB^gi+Lc2V5(G5GU$(j-8KhVb`sWiA8tSbafQ(iU*wbkxCtUAR8tfdjIhm zUCuxA^H-M(qwJZ2`ulZg?qB4&`GGPm<7J0sVn)U-P0c*NOMXa5X|bp1b|t2#?~II! zGW^l>^ou@SRLzL5LJHgb{JdDtkRd%8ySy{Hs1t7LdU{mYV#+G%$;n4QR_nEK1fN4> z!vmGr{5u+d{`~o!1Ojep;OV1B>VjX&{D?@Z(1h_&1|XK(er{~kex=G`l%-qBKbl!M z*t0Exx_k!{QmtriI{{Wf2}dpg#Jg?#7Z?)e$S-3 z&qjo$iHS)BKGtN9WUgkv)|D%5)&3MUJmYb>2@NeR3A+fWelzy(+A-HGFy!g|t@eHg zmF#0Jl+>~;ED4|SlW0baJDeZK<&Ei8dT%UltS$T8OXAQ$5n_1#de_PO7yStYR8ncA zv*ZCx>aV(0GtY+Nnz7m>;bLSi+KXhE8 z7Yqvs3L@v@=U+NWWW~>ju2|VHK#j6S($UdT#?tb2hXIdZN~$K;c63BGKt@eMb`h^j zTzWs`v$e4gsUk{~)&ff`_D6H9%U8<+;_!M#cS4aKofM7hkEdqh=NKNGMM>)IUo#?! z`cMlYZO!*Ds+5gCo1~rxEp1x73O5#xX+SL{AvJoF1-mv_)A?b&xi zc|Dz5Yhkh{UonhDqN1&_aW`UtRHAAXT8_lmuXiaZD4^{8KDXkz+oJ|e*Aa(e&$3(H z+o?S`Niy<#&asP>iRepn61l5X z)cnnRqg^;{A87bw_rWt_Rj2A z8J@fSc)EXnyk)3*kidAH|LNuT0p!%14u8HkEMgT=_-}_yyDtfj4i0||mo^B5t}I<` zU)FoIc+R4tqH)3$B=+fRc_bwd<*~|s*SqFl@%4&9<8=rH_IpX3x$KpEdx8bwaH}sf|qK%iH%;^$gn8JV%Hu_lT_K!E)cQ$nA zLgL+y4y=X-W41!;zNH>H7Ow?fLM`5C+9mzB=B=ou7vH$NQ04Gci4)9yI3R{@TOhAMq*RaC-HFrH80*hS%=)AE#eyi(6?EL!d?W&2RWx1qVk2(|i%PWRi| z+B#&DTjRaXbb3TK7%zs4{`r`1Z*RZF&+tGx^0@d*AwN7V<8wVvm16moHdiOIhs1CH zXcB&ws^*+WNfz)bC&$j~+O>{-2-9-O$;p-5uXX!1-tVxi16GBd@$&ok?@do7d^V3D z@@Qoq=I@sQdOrfxK*5dU~5NpFb;a2Umf&TBoHW+3y4ep$)w|IXSro*dZjP0@BrNlyjszjfW}eB&mauKrG&>+zAR_obiH zSr%wXvC}#!Jr{Mmsj1nWjcRsPPFlK#v}?eWkKuk&QWAN#Zs`(MhqdF$7&3zIK&i{t zX)&=43Z?d?Z{Li}&CL-uTu&&+xvFtSGYHu9|3v{s7dEP@sYy{E&O*){PRapLYY`>xy?5E7^Y?gukekO6Wm6hnEqdP3`zIefECU!KYQ3iF)^VeBf zVH6Y;-Jyn00+TrI-M>#Ho^FAbtgeg@qY7OWokfUH(2Xp`C|p zDR7Lo!4TMixwZA-HlrTHhFz%~yMQKzGMxWi8z*$z;jPwGJ1)>iK3zS`LCN%O-xO<1 zqugQ^Bgg5}N)leH3jwtEzssR5$R>vMtxwTz66L9S-1K9B&iTPq@;YK0CTK3x6gR{iJ0 z1mBpL>uU?Y+6!q&=iFRfi}VszDR=J^wz3#`vnH$d=)9PiS7~A4vfrmqpPa5|>kS|d z7-wnlWKiqgUX)my%vU;e=uq73?Cep8VjZ8w-`8jf6!FSIre(3xBfDFG5x0t_OBgG9xNyjuaqQQx8wzT4np_9WzJ(0f9L(sj zbfJ@J{r%h0FQ92}957;8l=2>wHLO{YK?9UwE&c&5*VA6UoJ8mQ*9=>wulV+O;Q7I` zZwLklJ0r?o#bMWoL>*UJ{XJYAzzF2Eb75h@H9uQ}b-tsA;A~BQ*uZz55{{83meLU)tMA9E#(Vp8j!p8I)chdWiQ0CU)J9( zbh}EUA|sbXm-}xgWT?L``SeKvA5b&BNhLziVd>7j+G}KFq(@CfHQ3YJTaucW_va)k z{s9lQZlmBIKYrZvT3fPye2E?KQYaDO``FlNC2Z9_QZ(BT$c=ncKUCu_5?i9PKU8NJgd48gI{OCRS@%^> zPuo1tm>RXbm9zU4?R|Bm*Zzr#iBhFZjV|B=MB4PX1wQDK_)Y|foO5S5%EmUhy|;jr zcSS#boHg<5m;LQ)jifdvdLjTRM7U0ENa+h z?N{^^*Js?fZ~ofFi?wFAy0S9M?M8^v@((QD8`mY5v}IML>kvfTy^i#{*5NYbwfqe= z`*mO>&rbz?(H6s!t1g|XD3#-k7WYs3xq?W9lI6?b;4~TGOKaF@+(EJU;kzZsPoW!vs`X zXl8%~0mNQLMM=`DL~@!|Mvab-;laV(gmOJMmB;*y>($({{cf2vWc{98z zUSzo(;Iz)8#xX0^N$U752_`}ob3m&(X|ATH)33G^YL!_2sVbz^d1au@Z!$OyWH|g; zfd|*&=?qjJS9!iZnIscZ!Exq{sqV>{U+rns78dkUG_%0%6`6F%9kw=>r8P7J-PA8IIjet;8x5GIP@V ztaKUszD+uRB@Q$kxSFOs@FXtI({TKAyf(7%b&0(K#t69DGHiSI5WpTVRPltmNJ>i1 zPuUS|DAUI5W_a)+zqr_qjv%R|)cid!FKWeEVvA8iI&ToD&4^!XQMWrh8!k9+i65oz+s z$jQwhM~}azW)jTFe)o<)l9dAdmjK}tT5pAv3y0aXzIJqMH_=}`Gw!=wJ0)<`?~#H@ zT(!Y0mZ@cdxh-eUe$tAHie?qD#jk&m9Oi*O3FwN-U9LLRZ=_w$Nw*6a2WpnM`H!h> zr4A>ujN5YfgXwnNtt_=iBD|9RXnzmhk*mAAu=f1ogePQU56G;;`uY2a6W z{`^TuRQ(x8c$bruo!B*TgpDm}m}Tp4edr!We$VU<%M<-?$d4$sBckvbeh59ZRdH=f zBDTYWmo<`o=jqd@M{SQQb&BpAyz;xs8dmFnw@_K2#=|L8y0spn;+GGx=Z}WuNDfew^ z27REwLam|8W84lmH@EAbh7)6eee_Cf21=q3G>NQibY{%86crnvl$DjKMqE<&Ikh(d zOZVz>ixt1e7M`Gd`N>hJCAuCCyTtN>3oG!i@yp*HxVN`?HGxaMscQVya zdF^mw@^ae&koKzP&i1YlEN&?puEwr$MXmz@7ZN|B$=sSKliQ|%@B1yXXZ*^`8|0?WZ z6%7pyn@xZbn}b878tUpz<;c-4L!nm1(WEu@OxplULNr1M<`VCVYp^L4@v>Q3&NppdUHpg4~ci}J#^^CTdSTtAN%5MKuqA$eqg5? zPMZ}chllQr&hM3v#763FxabB`hIkqV8c~Or3Ax-41iTOkIvCYvd1rdv17bPLRMw)1)u|H z6t_=fe~!r}pEX}wnmQM)uphL*MYIz@JM9Sup|Z&x#^-)%ffFRWxRd(pwx6HhU5?-@ zR$uO%e)7_S0Z458Za*xgl(wVztq#N)welIMbagV6jr^y9>KN-A@66cpP(hWk9hpji z@s)75az|X!GC9{%-5A3yB2|ANH~3-_qo9vm7tO^?jc}V=w_?jYmZvYKTshR%+B#yx z$KXb&qNgO&M)R7ImL}(gJj!3LHw48+EBHencKItpIy>2LQ`?B(+Bej<$keO?0xlWK zX-Adg1Y5_~D9K11U0iCgN@i|frr*!RD`TJl>b-v`Ih@6h! z1m90D=DrXCSg!IDPt%O!H8;1FS~+Gn(rWuS!<`JIQj&?Pgz$Qjlq)-tp_K2xci4w* zwp@IsWP%=T-jR2K30~pqoK8!$&W=lT)7`nFK7fGAOnF2E+1S2?UPyf9u%m7&w6?Z3 zkpxk6X3kXMNnYtX{J(v zE(=-T*vJ4gbJIgVJ30C00&0*ARXS^F8d7Xj5I9JpG)zpBla1GPb@z}3_$_uF!;LqT z7Zb}>W!yL(rTcqw(lN8w-uWjx1#y!p@78Fz#OCI=x{%wt`LQ-;we|HZru2c#pGkOa zGNeBmkjbb$eDdVU81ha}d;8Jy_;+t6E76QC+ji%SG!_oJPqcphs*da~1p&^Zm>6jl z6>7#P9-Pv0u!z`KS1^+O8u&u8qay8QzKBiQN62U;u(gnNV%RVki7e-5bV1|mPi zCkcbgKW1k1+j@G^O>V8Mc#4Cp0A7Fl&w7IAp9YDZI+oBQCuk_%g2${B?w#10BS7qO zXd&hydyhRTzKu0>VA@WlXUX2R6`|P};WhhAmztJlYg#P`VBL(w3}g^ngeUfD1EL{% zy!z4kl_fNO9~z=g*#22sny$8I0sst<&&;d*lvk)BJs{UAFmvEv=^u05$UA=O)C3Cv z_GmiN|m@R`cS#>U?6?yEx1e{>r^0r6D8k}CQ> zkzGkvuGf;n@d*HaxU`ws31h&}*kLzi*jn9~>en9CQSA-WD{-_43<{F-t1~KIZ{lrf z+5|{NliYf*jZf*cZV4UExv}9euD0*DcwuT{@?Zcg4f#e7RUvT&32771EpZkr?r#uP z^lh5tNVC%DC__zhMOAfncEEz!p1wa?uGgyoWwWY+UUL^edm`iJRAMR zw|z2Sy(*GmWgRX7?0fM3{rf_AxlWKzxGzoKI42+=U<@F=0Cb_{JNpBS>*?9q2d$wH zORF>5o4ebk^aG1hI}PCVeN0So1Ng|vMWTWrFv;AKA@S zhw9_Xaev#9f0+;5zxYTmI|#UD04O1>!$;eV1juLYLi}i8kE2^TL7>q&)8)o>SUwUR zsMj$bo*Y(4f(o*-J{M+X*%)DG(e_OTMvIb4`Bql?oFZs?xVzs$r9Cm@v$e*Bh!|P$ z_Qw9%-dovTvC+{5f2eM#tPZ#g#fzIZJ((0Sp*?t7i_ei3B9L!ktp^Sra+`xTWlPk3 z;pgoDCBtuaf_5M*>ar_0S5vn;K3ifxLa6LfoNEMty`6(jMlGs=-P+3PQQq#43N()| zInX@|y~-Iq3SKEblrc8(`>xA!l@)}puNffot00RoV@fP2*gxnt9$)z%>BCg;#^B9r z{~beIdS!wh9Ew#zqy(>cI`JoU+QklIu~_Np9UUF}Yz~rUJ+DSDzTO3(U@h{P;^2)6 z&*JpV%stz&T`;4=U9q#Rpo^-{hh9dlsAr@(DQ(A?QJsN#m4ns=8C zXp-0PY;$N!5Fu+%)5s7*3M0CbzVH)8?rZtTw}{wpDk}8Mb2UYe;^)+n7+RC4l}=!;SnIYmD+)8H-6H zBG@ZYvrs(LY5!?_?#3c0;J-PNtUsN_j#+n;Sd(ldNe5Bwkyl3;yP&4F_aXZ)FTAHM zAwXm`8X3{IOG|M`n!MaLaDELi)c~?Y4loK}@2WR$>;x$ZDFxQ{w)zT!lG){Da;ADW zlqhrf^>qLK{k&*XXfH)BT%@VRveTudp?P>7WY#_~cc+UTe?se<-Fw=rPFAN%n9d-w6-+)^{7Ds7bK zr4zq@PjBl-UgJPTB0_dn)|o45?IWa8-N;Z6@FlwG>ik^V@7{bc&5y=S?Z;&u~ zJ|5Me%R#sL(HP}X%9TH^qO(g&f$<_PWY{+!@SU;^#^-zp6c)C&2cf$QWtU%rxUGPR zDlH>5HPz(nE4AxauU^e34A&sGi#9zEY&&SKMrTr_lQlRnpgaESSI>{>Y45W_LM!#d z!^5}T%QvZavTPZypcVJ)u_B|U4qt!x@ZtLGtQ|y+w9yL3JRzzP%hD_V{WLy)s(yT) zkOtzzZlRMpapLk5 zJ0_`z!RWWXuCA?xK*_Y-VK;%LvA`z6D_5)SJ)Kn=F~+PJ{YoQ4q~`s5;f1N-I~eOd`G; zdq=5NC=xk7$@BJEy|amAF9q@*3uz2!@ft8)iN(c-fK-cy%8q&guA2DN*vP^I>J0oo z#D&4DtE*~MS=Bwy12-fHf)7NJTQ5D1iAjsbFRaya!~C9-70-%R1D=N(86ElAGH5|TC(}loC|8^Aq`1x}nplb?B z%CbZkz%qAB(`V$^39D=uxDJHm{|TBpcuDP%Fb~h{EF^o><3E0!*|lpI8_?F_^t9*h zStTW_MH(54KdpsI|IB9j?Avu02ym70IeBoK@84OwcyTN4EA8Z8p!)HUJ>6re$4mgv zrbmb=%nA`L+|<~Z31G9skLmn5V&`hP-Xb#x;v0R{M!CKT2}3Ou{&9^hE#!%+u0p7+ zUG-}tGlcCHS-Z7L#}j-u=W2qe<;pjf`V{eT%>{dI>7TJ;k=4k8iY{!xCa9j-WAc5G z{V3Iw%g50fFJCrm_t-_qI&-py=WR^PL9lBe9h-iaH`?+8I|5+x1LD=Fq2Ri2StgB- zH?S>hc?IT0SBYip?CdmTWOkspn_XCVOC7knK}{e#+r5yp{oHo$^g~jOqYJ4MD=!Y- zBvkWIa%sK&>4VlbPS}a_8ar*ZG_}}*g?_?Kl5>*wg=0CHOv!tb`2f{ z)HM-eH?F3u`>S$TvGAHU%~d$Q$(Z=K$;8B@gRa@VEHks&1EAv2kFl}4bss)3Q&Uq{ zehl{De^N6(?-Mg&icY!EKL^d$} z99MjoT|V{{g^o3$Yjp!XW#!>Rhb%yl>$if`a2l@ii%CvO`iTOhq8hrN&U0pspLA~i zK}X$|q9}lJUs_X>9*o4NLwn1*$d>gU5uQGM3e>}!L@XY{H+c@aEYF$pWpPj|-dWQu zr_PfS``OHWtJ~7dF{o~Vz~Kn=GE=vZD8rb=O58zGdYCmob1KQrwci*l_ZSjjc%TP< zT1BO0&k!_f`?n>JCUwF4g|e!E8XdpcWB2vs&b^uI4iOLMayJGOCP|Nf4uAAd_f-kRZ?>FK_wq8(8_w zx`SLh2O^C%;MU&Oo}S{P92_5i)#FDRi3gIIp{+&G?{+A{?6bOFy?!0+Ggo&|1t7+1 zN{V6(^Lrkvt2#PNSc1gCN!v64Gy+%BN&Q)?40!qQJYoFjwAGNFa#Y<$(U z#kR5-usZ>GGOBSq{=n&$-V+r57PoHA_W;A!csKJIX~1W^bFu!D(C0JH?9jCCv`XSo zYPXyFCZkzk*`Z%kQ}ZZ-3F7YwgQqi_0r;(ZR+(A3vsIp?=P=0CPYqZ)#XvnXfN_ zV$Yr(5tqJSuC9poLuY1ybmW9eybB_V=WW_Dl#ene;s-`2COpJAIe!cHWt+1Gh@E~3 z?5aUGl&{a=B9ZUuEz^O*w{Q6%j6ggjzdSGOPVoic%XJ;V8@4r0K&)c0&$@+}sPKQ3 z=0|$o?|XMKBvXP(zL`yql+ev%Wo*n292ttx`kEwk-TJIpyVtL0M30Wja^Mb*!Hx8fJK!ua&vIdy&6*EWdK3 z4OR}kyj1_Rq#7hoE~ymLZVHMbf5RsoHie@k`_}{*uclr;`5Phxv`!6p##6NSU#>bw z2}12}YipZkEfx9l>hC@8MtjA`30-FrIf5_P+2zc?Du7@`N-nV`e>kLr+~O^{HF&VG)6X$SIUWMri3 z`K{q+E_MQLcZf)!mv{W=>|N{Sril$+(c^pY{kE}-6!DG%gO!sFJin?c&4wQ>W0dlnvrg3$CsiZ zlBV0gKcXvJpQXL0=TKZ!6z^GJA5E&JD@Dw-Lf_O0+J?Ne1SBQ{LsYl$8DI8X6aXVaQ&;ex0X=NA=pZ#ai_5-ljzv zE^?FvS*-*QXFQRIjbnP_EeZOcHmAY+XCPbU>Y}IG+*aYWU?-V%ef|1!=(Cf>Gcp9i zPUthooG_aMssmD(=fE+w1*igWk8otpb8II{k`1PHG}YMf$*w=9$g2uF9P%^NbDc^Nm>~l z!RXW0z9@2+FEmWe(k*iln1UF?U-_|83=4*Bt_^K@mn|E4ug}%bU{vDA+k}J!RG!K1 z5FGCgJ1nvUiJ&f1#^@R`aSe}THL%Mic>Ob@xV-4 zf&v3=khgg)o-ylRy*hdv{FT#4kn2&Ldi)Av@pesN5g|Is z$?5Kh0w`_f+D*Hv4B>7KlbZ8PM|4}U|5zrcu9W;B`T=baw0C87MsvJ_gM&^0&t9~e z|3k zrS#7uM7~$jnbZV6kIsRMHh89UhQ;YrXYSj#ju^g~zYCd`6|}iS$n39E^7HqB2t^6t zuay}H?bv?66UawJ9i5$@H&(_I^et>`l#6Z@aQm}<>F79yg%~deS-tJF%t^G0KOIZ< zI*no)Bul3_?`5`(p$A$1oR6GB%rXeXO>GW3@z{qC?TBPrcjF;Cq4<3U68plLn4on? zSCTzCsgrR)%Np+*Kd>O z4S;?-W51culY#emgfM%mt-T%H=8-w5Q7kMA+;@2_WZWX>b{_FqK5F-MHbDU#N!KsO zyXZz8@s9#iQ&WCf20-?jO!JFgzWh#f|6<;#UKBA28Nq|8{}MfB!=Sr~+hmVUOB*kE z`}S=V%1%f#M0=L`x|`)@JteIjN+v@%MXsx1hSwzjn<@-{jff6lfyWGmeMFu*a4Nd~hRq2R6lbeS!syWybEU!^6z4CL>oyVin3nU6O zuU?Jn1T+0%eE$5=jYkiqh+b4`%(!?6y3c*!jQ-^9(Y5_)PAJ~Ch4j{AJvVP+>vN-i z_W3yWCljPX@3V*qHEnfuI=i1=631~j3xlY~^KRX`6`%G9oHzwFbr3{gbXX&88oIgz z<1Wxr4nY&cuCG577r`Jx~fygWUXp?BVo@iM>)ZIBwB$kdo1dX}1q6pOfN&|hTlYejm8iU7P-1J;cKCXIKHt zq}F!~=F_sWvKrJD`4a5fKdN899+LxrEPV^AI;b5WJ{z8x*bU*0*g8lQ&nm>Q`-kuy3X>V(zhjJ9V8ljyG0{73#Nl@dshV;$v+`U`+WN^}!BSDpe?x^gJ zCzn%WBWc0wc;lMT3bCI!Aq^!1dQwzX+d2%d?;j)5a6?hpPtu#;T1@-w)IAsmD&z;s1O7Oc9`ZrZ66rGh}dciIV8sCjM#zpm!>~eQd8gVP)9K4 zLiC@JOn=#Adte?=Xw8jgFD@*6)T9j(bD3MuC_ z)77)MIXSgj#^;|x$`jjaUTf=Yi*yq`x!2K0Siml){=*(}0@ne>>Fvow{f((}klC8^ z(N4CU(OCDbtS=D!YLv@LSu*NhMkF0S1u zbDh%<@b?#PGM&HoDVF}qex9~n2*!Rpb{}9W_ug0~-&R5w6i!!aO9ImGKa0AJ1rbBG z|J#QTAE*u!Fo@&!bIidIz1dbut2vv)?b`>bmyd*a{p~q{H92;$ysT_k?=&@I&K^}A z9Z@zGUyPSR9ckTPG^e`F$lkIY9x?ddJ%NwY8$|g+f<*l~;@J*5W@hh+@#4ew0<`*& z*xNC6mCt_`2>~*uLbY(`Pxb4=&r*+|W&gIV2l@iaGo@=HUg+-8sq?IoH3Tl+09*=U$JzP1xI0xvoYU{BLLhu@x)aSbB&3G}j>v+N@ zad)MGZiVMc<93P8klbpHsOuA4x7AKm)uDk+zBZ1uI8MG}N5`JW>`5HE5KFbLBYq2_ znUW?HrI`6A zq&8KEeGiAJXZ^rXmHP;;M-PJxZTi#~x~ldjv=laj7oWn2P16yIr0H^ld~sS z!aDQ6f;SY$xKPDgvzF(Xs3CT4++Rms^BUviqAc|EPf|28M)bH=Hp5AO-gH3|NwI6! zCqUvW-=SNxb~zT>9r5hh>SFNzQ>kE?OhJXL4mYIlzqP-@<=o~LL5lC?T{FGQ+L*p2$jc~S%(`IU|9?7J zk?$3Cai_w>KYq~?=m-|phGr(Wx&O<_ivPc1WJQCop!tuH70djVA^zo`k<~vVtA9pT z|BS5u8Cm@^vifIa_0P!apOMu+Bdha^3FJ3PE=Ckm7Pct1``_-pp`eC6+e zPj4?g%Xr1Sl$TZ>DmIxS7P=!hXsAzUd;|tmfM1DVi4hPH5n*PUzp^hliROXq-UqVw zc6NkksrC*I{y@UQJ1iITf%b(%I_Y1{3cHX&SVpM8+d;;|V~v_r%9EZdNJ@>4ikdn? zA;r$yJFL81tY~0*8RJrE-HMs(f z&tZ<%FF&8RXuu})!2?K?F(iN37Icf3x%tmy__JxA;y#f2l|zQ*AtE8M#Vn)N-P>yf z#x^)9r?Rr;5<6{73ar zsjN&85EkC`KsKPFLR=4ON$!xk-mLU=`-ZVUR2dzgE~T|gazD2==~UCO*ljuI1b352mUsgv(<+Z9)mRoH*b=7SF-H7`|Z5%8Z0L&p$@U^ z>+P*Lc>kh8y1MY!-riNrUS?u~Vw0q*{6ZoR#F2Mu467y<{n_PdNF$CwZ79Ic@7)Kj z;TcX&g}k0g`kGvZ%un>V>p|h(CGpOz!9+gCP z)Wa2U;VNkV)dZ>rW6m&axO6<~9*&V{BR1Q%?sUOMC10xFq8yhOy!7?cfH>zyUBOeH7U zq(NTKpFUj~_knsOv=TN>A?loWM@L8H9$r4abs}E5#(>8YTK6BP&YYq8wdlTt(dew~ zYj}jz=zNY54Eg9WHXeR$Z-K&=%^t6qLum8H&f8Fc9?)86U_e$FTzq{9P?MvF^Odl$5-xt0e zTJLT|E2`Og$dWgSx?tC7l9|tUh0Ri~6h3yI;E11+Hi;@wIs8VIgYuD>bwz0L1Eb9R zu->QSCr>}teDI)Fv8=W`@JTZ7@%kU%oj><9-s$n0Engp59$(ul+QJROx=cbu#KXbF zBqcRJe_k=rP!+ymFptaQ+O~@02qu1PviJVQ*}ro)?V6V|Z`{=DWIRsJ=`& zCs2?D?6_!a%Z+wuH(0^6kdP2F=mAW^M&X33-33*BN{>|qOL%?6C3exZx(4Gb zwuOD!kmtpKLhnTjGNX~C#dEK zNFe8#>LbVki11JFpxSR!SlVNnzu^F>6*XMf%s|QJuo%P{)MsTrx7o<3v#O!nNbpB&=^Nz+mMkvi)j>&&wqNo4q2IcRb#=K3eN?Ykf8ua9JGE$t;nCga% zldlGT=NJrsY!VS2y(5zS2*m|{DH;s&azvXP5)l!R&F>K%TXa|4y=&J2xHaE-^M(tL z{$jEk26Mh)7?6OwM{jL>14cDJXJ)p3Lp+xTZKN#J%_{axg>IAGXVFee4E6PCr*v2z zef^r40CxoSYdgwIN`kinSt&l|#ff9%V8HiKaFV9$a~IfphlYoD!7{rI@X->m7jOAU zs+{keNgJstDb+K}+pa&Jkkl<|z-&k;pgPBzk729CVNBtsv-8pr$bA<1$UB-`&MzD> zCFnN;X%OU}y9sAvG9al?oN*MEFun0klsTO7n7sRmrLp4Bca@C|;he7yqExZ_IHn~Rr*xY8{|^C_HQ4s59V8I8fBoMO0Plb2B&Or|j^qD<0A7jx%K8TZ z{5y&1-$_jWPGb6Z64SqvnEsu_^zS65ePbwLHva_yG--O+?OTrDn#|HD zb?5lwu$`{$#Mf$;;H6w{&&N z)+b>@TtZ@R9@o*}*RMHeMZ;m01{)q6vP2pnrHgLM&D7L1sB7YMUf)#0nHzbvCn$(h zr5~HnKahn_)WsoCsRa0`!MCyrn*9xXcw6>#c6OdfaQ~eiuzgZc0RyN}oP==^eoL6E zArOLpahuVT!TAN>szqkH1QFq4jjW=)KF2q28zIpKZ zxV3kszL2PBC{)io0}WmMSr;%Ef$>+IVglpV9ZKy_n3LO&P!Pk6ZWgBo z11pPQTS zHk*c6zsBKJsvMZn20W$Io?FdxxhZMaU1FTz7=h(a`Y?$Ed2Y-iyE$}IUjDgAv6E!MtG;_aQffZHQCH4!t zuuVAu$A@icJkw0s{O2}E>IY`mHePU8ni{DoVq4LHW;cTeRSFEdD(7JqKlzA#Cq{hM z-oASEa|lM3yj%wwqX8#nwVCr>hf~5;_!?h00%QUb6F@#I@QQ02`~IC0<8qss0KNt> z=Cd4FWB9JTyc|*m&!7%Vv8R!dY&dpe?Y-pOi@(Ee%$(7dm~a@Az|1ep%EqPu<`kA- zj((8*^6~arSY?zoG{|Sx8STWVEp9cB3-ftb(rdqbdB}JEe9F}C-@RYEyNfCk6AjB7 zj2&Qtv0nD##W3(Qs>P)xHro45MO&c5tequUdpTVpZ$%&<;<|4x$i z;RTvn>M7?nr|08mv46uxVJKgwH}f9mUGX=QSs&sIE+36HzCDjk4EbXX&pl;r+@5+F9%hBh3?NYams+^P3_Fz$Z0Zv* zezftXYoe~UmK0A=HdzXuC$`qsx+DakZCgbcS<#nkRK%G!!XhHo^P-s6(#Y5$qlWeI z1OtP`$7D_waRk%I?1km7j2hoVc8mQot*r92#y4bHX=vWr46I%aPO8ny%8KSwYH9fN z$-mY74o>92PdMCT9j;utvIXmw`EE$w+pbmjZ{;TA~+NKk|{e@A#8XVbaK` z3z1Pd?RGodhQ$xaMBp4HPyFrVW>XLDQ>QY-;c@i8_`2vg3dJz(S+3 z=j2nO4dhY3;LPj+wFkYRuZ76)-h+oDZv3Smbn5SHGt2ao0-{BQ*(2(a;j+;Pj>Z` zQJse_gT^*sWAb&mJq4^5-JAeKm`w$-BMxVx-d%wPV-+xlB21ewb>sS0L7EUDpGXEs z{EQC)PDnTK1oJR6I}+2=R{;^{7?8(Rj!#Yfhg6IYFj-O4CQ_V$(phPjUd>_b9tvP` z=MJDMasghzr%bA;amJM%%0kZpfR}KWQ^p95jD+RNmIwSFC=ZX0C;&a@!7X2|F;Kky zkG%?Qs;OtHX(^x})p_vpH3w9T1pu)RK?y^xo(^57*=7x>9=-|n;NtFuO(1usXyNo7 zaNfAh{|^o88i;t1ARL*OuK@DtKY+4#1{9dy>nBna7{1zd1?WgE5@{wB7{Q9A0sshM z0AS9-@4Y@|0r3nEP%MpITwWIF0^*-9KuX$&aoBw99p0g%k+ zk55f}FB79DKe#WD zIc^e-3=ad}1;{Kwd!9#5+{4~!*G)owBAFC`@BqY70FVRFfDVoVy;cYa2tW_o@s}k} z9TlK^^9JbY8NlL~n~?!nLIPY{fb;?^+uufpc&0=m0gLB1!dB86pwLX$B$X&ihNcA6 z(f=h?>9l+{0%|@=!Z=Fub~8W?pF)vD4Qvk#Jw0A-JQ>IC8;x|9Spl-^xg8?Bccn<5 z>vX@{d@48qYl;-U9}X=0aryvmcmY6RNCONjJe;uK+O-Bkhk!}PPFZE;CSVhxe|Goc zf-o>h=ApVR>b>7(EFKMT4rXYWmaN!;O@RhP5I}wVas^axe*xWK9RS*lP72NW`QPpi zz?t9!1^JJmRs(Qkgh+MQ9MgEmbp2Ev2x-GW64e7r4D46{J(UyeHTn6wEFizh#teW- z1erPIwtVQ6!okj7r31*W9QjBvp2knZ0b*tUsmmvT2_l`S{|O)zcXm2Go#)RVt^fd$ zBM=(s0eqm^$H&JxAoWyV2bd;hg@qzA3yuEG>=yz?KswRjWDLlkvv{S5%T;NBbQB`E zPbrbi9$=~e7+?ZU!U6(R(J`{+IXQuO=gWcVFK)zoTJZZP^|sWE16L(Cz(=hBVF6UT zdb^%_KouPj(uc(YNV}r#F;OXuAqT)*Mqk#Z#L1Bn*lhp+9;9MQ^~5kH02?I#^bYug z%K!rqeC`dHO!!(_T3tcJo33^~WJVN8mg>>KqsR;FZanz|yrCYC(ZXBWn$Fv30O@h# zpOS(wFlhzgN&lm>-GPSyI|9XE`nCr><@1XtnvUx4cPqA10wKSoCBASM#5)w1V5apQV21OCXiP!HZ(Mx1LyJ{+`lOT z@-kf-YHH5~tEO!P2ryuKi4`v7i`8gu$|DEZnW&MKlF|YQkRK}mIOg@2dPTMmM&zBM z<;NH77b^&V=kgJ`F@ySlSCoeV39yj(A4kCca~SwQ0je^G{~;;^1^JIi?7x1%LH=Jo z8VpFIw}^VOPdEvn8w5cB1sd}H*Dp;>-CXSLZJZe_Tx@OryVJCLc zYK{!492(tnV-!4!@pjWBx|!PMRc3i3cltPoMa{+Ns6a`jyX)%EEz*~M^UYiG)2JYDtz99%3ZA(|Z52S?;Vl26SHz7+(WxaS@6 zzh3RM==dPu_5`8>TpEhao2)3+fU&68r|#3_p^PQfzp95bpJT~Gt*?41@vCjrk5v)#W9Yt z`x+TW8pj*Sg-_yfBC9D;Q|jLxI$9_pt9@WSsS(6B$-^iha^)s%6@4P?kRKy&l2myL zvxi?|yRVJW`K@dV1?MUQ>le#t*R`DBi!>3%lv!?~J%tgx`dwAp*xTbzjG)D(TF(%> zX{L|K=vb7&udlE;lClj;cH1y9Ex&)z|8+E~tBrj7fYFcwMg!%4jfR80gR8^;^~U?g zGb0Bvp@h1le+{hZ;&F!e7fkcu{4%C46@zEHL>*SOSy`*Y=g8-o9H;=lky;B4$<>EPnb z_}@MA|L4@9NQ|G{g#ZEBh64e?{NH|SWN2({?qu(3XTo6R{NJ6ZSY1~EUjjo-pZ?{C z?BkgFSVr8RC|OSneVRWUK##cqF(KA9jyiM4)fG-qJh_O-3mXL(7(E0oT3Kk2Bc3Eo z^X`a?`K9k3_jH>(2U=Y$!0t-rPphcHo{Uaee`IZcU0>(P zuLyTx)~`{Yir%R_E?y^6xa?wm8~SuL&0(0)mZ@3$J4Z3q)rhrhLGG-p)mlxrFo0|A z4&B_a^VSj2+htMTHhvyc`|u zRVP}3{|*unFaj#GTSId9>kr3G65A%@fINGOt1qYLJd-_Jy0a!~XEtY9uW$5<5G%uw1|4 zGJrffk&acqF6u#%ueiUpB#g_e2XCeSmx(V1hdJ)go=KKnl0|iCmr{f5)KjCt=w1wi zjTA1pw%bTJ<98*##Q=mtZ{HKYH236dE{#kb_s3g;Qv(n-gD+6yYTiB^XNf$5BJnGH zW?d<(ho}(NIwv+J+&VfLoqa)z*E(3>O1dfYCGW+rrw<;OLUW?5+F{ewN zI7TM!`}a?3<$7K3cW6i)>@X-uF|4ru6Iyf9f70guRoO>VcXa&QU{+dHlY~r3$+;Yc zYYPE#B{6f&>0MI~rwWI^`9Bx?*6HS`&MpM|)0x4RvATy2a{j*JOXI-dR$Ar|v8TI( z333_!Z4Pm5^JFy1zdfgXdo;Td*Lt_6(nT3>O_mgLB=%qP^^)A8$D?2pGTx+{QvX~2 zH)M7T6x#9MdM3-3Zcy{GZL0qA6WpU$U2~UO&rfh%otE}=B}sjc7|L*VsWj+_X{zj3 zI{t?#L2bd@LU9{Gjt~U9aBd!*T2^?Q(CjfyPa+}9Tsu8*bV`H-X6#qHzjGoM8tnzK zR5xSs_=2mne>QMW+xlP(K_6ZQ?g*wRvekFjC(U_E-LvQeD;wLP3OL^$37)Sk2i%d5 zGgpv%Oedqs8{VriiIHr3>+H$q$K2BoG0*8VzMOMD_44k>&u!Y(H48S<0@e<7c4K*H zHDoTif|ZA28{9?l{nGfb zTG8fan!yhAYVd+==~B6=9q{_>^Xd?Cp1GK0YlNcJIY9B#hCmjwFj-p`*8}e`{Jw(n zxK19RX|2`JzOcER+@j_t=GMn$Icjg(a?KG!Rygiok<>kAz={|r$|ui9xXUTa9Y6b( z$J!qN!-%9D45dED1hoQQ#DGv2gvA57?Y@;&b*bVJxA$ws3wgz}TkfrE06q>~vPb&4 zt&@L%{n#J=HgCZ;DVCfKeCG(C=WThL&rHu&^C1ks6|)!JrwXX{ls=LE*Jb8mB9A5r zkh{-Qfq>xsmpEzfW#MXQXZ}Bf?*AoNR^eGYqpv*hvc89#{up#pBHMt4?Q>iYA+t5Z z87GrXirpWpY@+p!u3V~I)p)p6bigBHQs%!c zj8k~ol4b|67yesuk-c12#uk`3BRX%lJ-E}yeH3Fg^|7^X%QCE(8kZoDmT7Q0Jwb)k zldrKwq_WBZ{aE90ZPJyZ7)zqP8t`;?o62TPJcl>2YpZ`Vw%y%%zV6$z=S?#4sqR#A zq0CXorWiZV9UDC_lnDFh1^hezuuXpplNbTgbJZ*R_@=4KV*I6Z4H^xOz!YJ5XRkm} zTkq!fb_n=ShHoCyQiS}8S2HE?%tIV(ADPY|MEm!9QLO2#$wU2(X<6eoZ!Eo(LJ3#r#)+j) zbC)VQ4lk*nZYa!0p-nk?jE}O{SIO3h%IR&=+@EM!CsHn`GEJX8mXlSiVQ+&<7 zP^w%j!cz$}$taCpk*rZC%%Rq|F{n9!V*&U#c#7BtBC# zrclPE&;3#HfZGdS?=;p@@dDefwVm!rBnOUspP2}$iNbV|${EH#-CCz4^y-kfdhRKu zwbq%!-221J=ue!pv=Vu0=Q(@Jii+SrzEyPs2a?>0ba`2|MXJU|Q`)-djH>j2jd>({ zA{OPyn1oA5FT=yr-u#Id~j6N0vFK9)IcYce|d(Q%%P-%}$v zW36an4Q&_`K_qk8eV0^3>x4g78?H~YjJ zSA^sE$G?OrmpWI$5;lbb+qG=7RLG)#pm8O~Z>HwF%G`OEajko66|6l;u{e^y2TbEb z&#EmA_bI(f?u!H#Getz)O^gac)r)%?hmQZzT+@ZDX6C6**))fbHyvH&!1Wi**(OeM z_mTE&;59b$J`hYXjzQ0RR(1+yoI6hg$J*so9Z*zD`M|*T46Hk1~0PdOKhK4hX&y?`H-mJ zkgwz{eDG32DUkBwB_rizwMZbI38$3*(sK9Ut?n?_V^)Xft-a=VFv$sYBu*=TQ1T8K zsHUV@AH42MTBjAI2olcR;r&tbJg3h$?<*mbuM1%y7{ZT6z8Xh!{&zd9?rGh~@z$@a zMJDs~rvg4@siSr;)h;n1clVF%X;Fx@FEpJ5CnL-7=(@b?1-Vuiw4F-k?~3XwP;Tz& zgyZ6~$!cCm_Ms4SC&A)dr-abb*K;8(l&m>nStV%AoA+{0rIZ(>tDKcJw_t!<|C5QJ zNePY_ek4vJy)Qq(S2B>0c!@T%21Y_EC0NjMd)msG#jl6s9ftvK9wL7wOo)Q^XX1hi z)yYUro#fBop{*|WFzxIh6Jl;~oqfz6aB=K?3{~KN`4ilszVrHjK|X#DxOLMx@3`*q zzRiBx_SFZ$nI4HX&fNNlMODdPihvfyFG^~-rMLtY46|%7II%M5*r4$-^_$uIwQjrC zZrFopZAko60%ptUn|P4pVJEJRJcK@IbCw9h#kYP=cD!pcZE6GXKsE<4M8aK7?oG=v zOksTRl34Png6@TR<(>`ebp9^+fy*pYGlGH73z9IEka2CT0c^G0rCiR}%4l&;m-O1~ zWn!jhITGBBeuk8F6#LU=f6?$wya%QU9nSHMn${Y5yJhhxlx5-}@9l`C!GGVxsbM4+ ztW(Tq#&wcXO2yngK_}~Y9x^Vr9vZOJi0?{=c~r|y0+pa}66xu9%or3hb)OzMLVlRN z2)qkPqjzsI>_DB4?Ku*~scEcO^9p*#K$`xeZec^5`rW~#z1_+X?@C(rV4iiAv!FgK zY;9Zb-QJ|Bqhp=*`NNT9JCSQ`GeneDVYhms{^XAaY(>jvO71JD4NKR^CcJS-ooYVQ%;OplGiT?ZS?j2ZJ7Am(+gX$xJrF7 z4$BMb5A95?s?;N?8;Z8l_hXkY}+LC$A?ecE+BJu;99~Zc|-WN+D zbo6i-|4bL-&PW3j#<&$umXg{_&KJ*>B*m9&jsG0i8(bN|q2EQ3RziX85-W0aNlEU$ zMEIh74|##{fM$g0a}t-xyVwuCo|3XFmYLbw*hfeiM?Bw-uH@(3z07p;w`Xd6a<@dT z*0Koo-91(3L7es*mgE)6>+{OHQ)dt@qfbOhcI_LgVHOM@T`2^6;hF52{kwHVn-_r2 zHw?Z=0(m%qBs)z4Wo9#ok2*F5t zJiH^rWuMt;2^Kx<99_owdD35MSI}how@;%;@{zpQzHS`IqwTC@ENi$NtSSuTi{ZP!PQ=RFh((;-b3Uy&p4<3Yydv zv-Nov6f2hThwZ7EK-wG>DOxH@@AZUV;3VhbWF~XYfIeNka)QlNEgnwv?%UhpW$q@g zqVO+h=_2@HVhp2I1CR3G;=0#_-+MH;gE%XOCygT}%ijM5_Y;wM?hL44KAKT>K1`=F zP$%Q0o5nzVbIuq^US3Y3gP^)P2)TWE>-MQ#9`z7mx9mg_I{+7lu<-Glr%V{f$@mx+ zUDx&@A$k@Ca;YMr>X+Vlg$u!<_;!?4*ohS3GRIhyc6ndQX=T!$OnbNjYGjw){m#h{ z%u{Y0?3^O=SHWmXInS*h&09MAkD1Kh7=MpRJ$|K=iabDcBTcCCv2|-Y98>1ym``Z} z8CEt`V!7?(QcJ7xeNpd=CM~oXr4V7)vAM}RVZ6~Dnf>i(J4=lUNV#_*i>CR4M7_Y7 zJi@>ORr-(eLp*$~YF%A7^Tz;|9r!7=a*Hm~Gm|HZTYk}DC8yMoZ?7kiPC1pQwGxt` zTD^V54q{U*lJP-VE%9+U1RKEKEz$RP8Tw#`$9g$!*zHMV^QiCkkaLD6Qn@OvZ|uEm3l^kRN@ zXtq7V5lJfJC+AAN&VIME2zf;d9n}0MdS(~1c-3RXSzft~Xaw6LbMSiCRVQ=*MvWS~ z7ZsJLuAn3mN6W{aV}#2aJHWV|UqKklMq0=V=bIh_DzG^Hl|ac;{N3tjKC+gAl#0W( zks<^_C_S-gNjF(iIQoNOA15^Ph+&DK|7Spb$LBafH=Vir>QADo>8%QzOOgFiLO<^+ zGFAO}iHVLvo4vpBQaVl@@rc17K z>q&4rS*>u#15|v1$zOXcxf1T2UuSpG3AHhYwX}pvXM7GEm|FE+jgFW|()&CDoH_80 z9bh`S`=mq!hf5hiPlaru3?1zvLyy+`OH^+>nsRFNZ}t-mS@^{mW;E<(Jf&9gA?jmv zb$iaX{UYPiL}vu2>O1Qor?A=5@9~3#A4`9j{JGkxVUT5EE2k>h5-x0q!4_M$!@0si ziCg>g&cz0|6}JL57k$Y>W2R-#GLM?4nx-$Nzw%7d7c`m4S6>qtLP7shsBFJ=C;uKP zJ08(AIDjN$3$Cj7Vj3+6hEt%=q{;mWQXD!{(nryon)d}S5;TPiHr>@JnHnYAZ~<+# zZ9muQJ6Bi3#bRNU#reHCV7)j4@m0|>exg3!ox#U+HC%H9zbwtVk5>z=q-R+%qyBim zh8XR+m84?C0Zf8?-0wvEBjSx5$xIWJOCVf9&0gM!6uv2`WiEh%;Jk@*-DEKHg=>TP z4WZ-X$N%>>n*@~Fg&ez~ih}xx^#c5W3~2>th=N9mZv;qs?evrOBm0d?w9T($cPaQ@VzsS_|Jic0M$Dt9;*IW9QF&CC5hLxD(zuj6Xkn*X_bnl?Yxl*c_ z$C@vU%%65@Q~4AfK{qA8N(ua)D1XuHnxCs?TcJJH^Op;Zn@d{>Pu2{?diB+l8HuHm zlRIk3)p57eT3M;oVLdt|cQ!0;{202LM}BsGvlC{f#EQaaT|W4@oo{?O$l-oGcvumy zb(fPPLN2osztm_LKCeNfxPxQ!1`c>FRc0vQS(R3sPg{t0e!`^E`+odlXP(LF`qZ8g z#Tt+HO>I82UAh;ukPm5fwl&TSJkSPnYh7L{w#huxpQ+-%CpxO^!%=ec@hu@4;^;8w(W=LCy{-ogEEHP!(R<}KYy5&JXe~thPo3k!wmF~$=kK;J(G{~+q zZw#7CpJFpxw5ge+>}OmR7?Q z*MuccQ%d@GYtc7)zP269w^tE(|IY&5n*!{VFhI!+lfUM`L2C8k^Nv&A(IZYSODVkL z!9?Jf92N`<=9I-fa$7%>zyfqKh9cS!9@wzj7%y0@x9e-jF9a#^?a?-8ZFN=ysJ#bL zQo=@f3_L>`?IM-kWX}3AKXyI;ye3!&McRKJ2V*W{{qLTcywZP9OZ+XF_ zRfXqVA$(jZkap()xOEun$M5Q~EADJPFC_~njy!FUViPo450yd=U|ou@OD1k*3KM1H z@qg|?GWV;PnP$I{BA80DzQPE=gQQflS#-f>UgMOo&QlO2xAr#CIS`G(Aq!=DtBz;d z(?C;M39uv%3xci~&-a)}MH>G`pktA?{P$s@QXjlGF^fP(pI3UGX@gJ?i+qycg;lbr z+Z3-XL}c6sTF5bQdx|MiDUArLjIyaM^Wdp3kW218aoV@3*8qUd5I z9?8K9ef_>LV>BSH(Z*gJF}o8S5fN=KoLR+!3O#^-C85qeoflcU!TM;hmEF0e)2*hJ z*;G#Mih=(Zla92Ah$JVUh>MruU$|OcVxjIE!rLcJ=$Aql;T!&h*iKTw{oveuLUBG? zZ>cxTm|$cE?}co#v-aXVzoX0#ZJK5k$eK z{QaS3Iv6g37xd8BO(98DOXZ$$T@5sW(M)^GV!-sEvqI2Yw1n9Xk<j&rzzA~dV0t?S>7H7Qjwut9Fw4y74)Au+GpT~YGiZae?WSs5oc!{g+iw)&{ zn+zA|%dE%M8Y6;^8LX*obcf1>nV@nHN0c z)@hTG{ucu23^mz|^f^1u`)UyqkuEVb2$$SxRc`zng@* zxS`gf=c*6)M%bmf}s4?qt6FE5JmQ7*~Ll`HbOQo4^NebR-ZgOw(Y&dEP#q{mB~)!~Dp z$)<9Dle<>!htRPZpWBIp^Oeoy@ko6i&T1lb{M;6vin0|2xTa*_q-7i=3m;sejsmiV zGE9sBj$T|2v{~>K1quJdPbBY(?5N#~k#>hi!`_tdZQok$cVT$9L#f$S%W{#_kosTY z>{0QB><`Pl&LQ(?u7xp6!&RnqW5{SM^)aL~M7ZfmHlZA^vJjtLL}XT|5&aTiVMOxq z+r57kk0B^#Bgxt>JvKan7;<1V_LSL5TU%dUfL8q|J^p2~%(W-`H(^n*JMVbIDeoY_ zGI;yZ4#m@!Y!EEM0_5Y&zgp~s0AoypzsC?R@0so_!`43Tz#J3X>fC+}09@bLG~Y~; z!Uyb=a(Cr@54M(Z!@ft*jFx~1Z({<-Z5pw#enDJxFe^VqVJHL1Aw@L%ma0LVk`BI2 zd7Y@G$=Pa0%_^`i3a<`9`b^$txEESwCPZ|mHYb%T@^KnmG=~lLBR#BcH}Ww8tk1MOY%s z`_4f?{?kc0sDas|hSk1r5aDo(D~^hwq)e7F$?)$5h^|7GWcCiMF57EJ*+>Mw;#3-K z;=_TXPPj`>o8jlDui<|*0+L5g(!7W+cf6Ic$_(jFO_7SNdwET z^yxX~`6K_`uIt@h%I%~3@}#b_U$e`;5t2bV`pUQrtsMy6*;>gx87m~FkmkzDGGK=ut%z%I%)2lv+lQ~6i}oYy??mm3g_VNQr~)0+v+*y!(|`d@=;5LjM5=u zkj|56Ok>{W-DdvRmF&z1fOE$FRMAjBth zg=VTcvqgOsC!gBDO*~gcBv1=g?+2m}XK9Vmb zzM#`t*9{J?Fn&y|`cbs>y9e7E>PtZ2``f)sAEyb{8fLqeg1CLv)b9;_?)!NgWP$wJ zqUbsEbW9eXLut+;qWTW7WBRs5sfy`Fs_$v6?dMl$CfxtVe+`FTaHm_g_pM-1j zGx%NJx!xXw-#wVV(* z=>z|GmzN|lvc+Y!Pp8ho*Y0`C`bAVKRoxjqQO*-@U~!2*E+l-V6cZp(-V-ojD7x1M z3Xa0&K}kst3TI>3aZ^_`fDJ?%x-&h`v9nb&p%Mm*t772$!E&MJfo9RFuR0ki5 z0^dF)by2>IQYbZ`$ZJrhBy#wuI6pcRqZ#}ynUe`3O#4HBl^~Zv;KS@`+2Up6u4A87 zabDdkC>irJ;n|QW4NCPTz%f41xeAfuD%qysA_%n@#t(+okxeWrV}5F6`GWt5JUBlP zOTPeqCa$ZdikfIpn9R1$O41c=V#ABU zI8S!xYMOxc4B4(BL>ZRda5-Ia!pLzD0UV>aMW~=82b)`&AvXyYPeqA+?j|fBU0%dB zD>#A;s;Hm^Srd75ja)?M-H9X03S>4A3KBmu_PP`rObFEZ?+T0sT=s;7V)gF^|=T#eNbTr zA#13V_@PW<=-Uq6RCREyExiD3jec!4U$fn>j0p|ce)X2ADf*X>B)NuDdPp%mb#8KDhk z$UR0i)3Ls;2U=701V5BEN@>w73cH&HgvxrD96QKYf!1%JjW~oYqDUalT0$-U*i`5X zLEO?5yHKvQ7ic&BwM{7ieilh(XG6k?RLdXQy|EJ*m^~Z5_|7{Pw26piHy;Vi?UMS; zB;>?N*!m-t}bqzppb|4i_5L6|pI3rz#;wxpq~13XCwFNdjG4C%`DrCN=2YQi-S#l;irUiaMBvct4=R^W6`nyRmpQ#m1#IseQ*-8{Wt7}iEeSyaB8Om)7`03GKNg~E@? z9;KB+mVr_v@kL1b>O@~CoXx0l>{2ha3Ggg>4s!{wkBdZRP99f6H!qj-DUduxdq*pV zX5E#X)Ju?ULfly(e}%3T=LZ1lM2RNZ?t0;Ipfl>7v{-P!!tUZHM;}K}BQA`|Vbs85b{{CO9X6FXxo)BN1;ADboX|iqB zHi~xv=R%MO4G5G(c9_<;*S+ikE13(KM~C*~*v;rs?Cqh)aPgcrH?}eTdw1g~&*HS> zl!ag#j+tPh-8~3qj0`ZXcPj|7Dc|_Hy;Zm#w3p0)^{Hz5@$+bq9J8|6|_3Gy$|pxhQ6HKfn-9u zQqRN4UP$@E^sxAf=5c)+e6L*9O=PLF(e;Ia!iM$LM*cF}-e{JJOJ(8gVW`<6z1hZf z_QT7W@D3yrWUFSq2*~0BQ}=#maU(`g7h-x8{NA|$npZf_dTD4YnEn?UrHpv)o7g-h zf(mrN;5&n=Y!JH>pA%Ur_JtH^(uZvp0{zCDyg0b<8w!rEfy2t~)&!TLRMOceV` zIf2`Nmjd!?ynh}tGEH5UYM^^CF@pp$gi)wCWWZ@SRoesD2VPx9{;?+gJ67Gi{2L0# zU)0dC>!s_g9{5u=jF`SgzejAAv{61WBn;xwKKbtjD!qobh8aP>BLaG~DsJZye z%G!dVi)rvQX|j3NzJ-Mf^983Qky}Y8dkiI#(M*DEjqYcHU3U}GSX;!s+Y*nkplpQv z{=*GRbK@uit_6a84f?>@_&hO-uDpk!EVdgxWTgAxMibA@9Yq@{C1x|IG!*1T$P|8J ziYO_Pct4b#+}KeotI<-0cf}AIQb9^>M)*`M5JVBLL~dLzO$%~?=0^2w5QK%6@rFG-Df0tD=#Q=CO3vPZc8V#j znwjhy8T$bO*ChMVD$w4wW<$Yexi3Vz|@@i5qhdvND`gu=|7K2e%pju>UWakKC)yS-T{PcFh`5? zyjd^)C8jKTG-j-J^8waIKg<;dDJ>9XTv@ZuNJzHgJeNE8^YHTdDa6@T@|=<9s|SB= zTH+Lp+|+?z_0rk46pCI^Q%=Ot5#VF1lEli*+LFiWHn)dZ zXa(eCq?uVP5}j!I>_c6ixspCoW`^Msk^Qq|i`omYWo%ReCBcjWT@lrXcHNlAM*WLl z6i5YWS-4$a9}F?{)Jv(Dw^xlp{2lfa-X7UqxkivL^}ekskB1_unxEcodY+2F6(yy) zySM1?jV%pMlE>@l0D&xmpWbG>_U0>+IPz#ooO_xdi1&QP`?wFs8Mwkv?^UtBt~Aum z7Ud_x#r?)G)47^sfx8SbLfZ6+|&a_9cb67XibP(6zZNRiyss zHa!V6gsBd9!JC3OO+qJ3E+TDg#Po&7WVVP>qP zqF#5BNlZO8RzlX31FJy%a+&u5#Z@=$^sEvV*TAl0HR*V3nF^ye!Cc1ldRokU^NP)@ z^r(n|Arl00(U1#9vh&Mm0__p9{=~ zf8tDN*x3y?FwDRtVH>#vqQ5v>8VQ}c?3I{MN%Civ=Sixf;?pUxTvB+7G#8RO^sCVp zkd5E@f*2Pa)I4aFA;)ls`&kN)6O5iT`^l%e`=O~cFEOc{)biUWutj2QzEg89rLDZp z=@bVGR3{eZvr^&jA3LB!kRAtqauh>C23N^jhpk`h@jMb%jCxbn;zP(6t|lr5(EXg> z4fLbIxS3GWKfoiB2_Y^2?KXrC^=hloEP-XVK;$tnT~y0ANvC_=7AQ=V_p9F?Jc8Jh zAT|*B{U_x9OuDksj{>BK9cJWGk}CE+%mbED!gz`I)-gjKUByQ%F+Fp^AV%f`t*}_W z@8i{P;(VD$FRJyL4w{r6Dog@|2^Hz(CY%Tk9_@sedJHwknt>os5nBqw z-)T%PJiKLZqpVI?>(5bWMT-M8WmQF<&-(^I|zAFiA3TPljO}8YZ zZ0!K&um&MaX3IYt$aUX8VWFzV)|pF1>ri-|CM}Xf>x0_!P?4i|I>v%IWm#17g&e(S zn%-8WA(tV86Q^t1w$cb{kbB=I3kH9{G}FsT4ZVM-OM(dm73RU*Kb9vZwzjK&_u=nf z6(H9ZoCR5X6@etF^n9?X|BjRA?!>pC*Ild`34{6kp!`+(Pj zl$2HKiw9;CX$S@i;W`H;)?^zr-7D)8xdZDYgr+})o08*sjtkLrbbajTGy!LI`?s{8 zFx`4lJRic|w6=N0XHZsH1xtnwMC5zX>33bVOCOgCc?-hN+5-t<)rC>-b74^>+66{dGkB)ihgGP}q4A zq1LfwJ(2A?Q)gNcRwds#XmBc*%FX#5RjT6~yq?mT=OOmTHdvdQ zl7cF2iP<`g6WoU|{?+^&Bg#P-u|ZqnoFt;hKA-y>IzlrcqnDt-m5qhM^|-@3sZ=~We$S9hha6qb5sJzeo#GL9_nDdW zhFj7(ScLI$$vX&PN9$#;)=6c#++P__{FM>5Aw{m)r2b&Yze(Mgtzk|0_}LaR^n_ls zI^dFVz2+GmJdZ)Z?eSh%!cJgZX)@}R$0^7D(g;42crEjNCUuo~I9 z_GkGRY_(-8g3!0ljI3ESKQFdF5VR|fR%@~hhXkE6RJfnqNGk^COeoFSh7xTs|Fv0_ znCK?YuU$(ZO((M2A?6iaE|E3t2vJBE<9>mn95^0X2oT=#>5h)DWQm`3V7qR_`dd1r zzzO6rn0-T0MmjDzArW?GO0ZP_NH*zEr!voc85`9xVWVz^!cFMM+x2wuNcpD{6v5}2 zc-K6vv63b@N-qys#-j{8r}*`u<@#DEs#7IK#;u?D{Qgk5%uoLW4F+$QUk#}Z zBsJLK9D&OO*1aM!LY6gSFOJ+Vu~Fs-`Dkxst{Vk8Sjy*eX8xJ#tK~|aKeEE#i65D_ zGitl_>lpTYMFiU(b4;=2=DM7w`_T3ts6{0T!_P$fHgh&Z7!=tLn_J_t371U!tEb2> z&d?7c3M@Cr)wf1J9z_nNF-+ZBsf|MUz1V15&{AzgwxNeO#wI>uM{j4k>5iqjV~Tui zQ|o}tN`|ZuymD>i4D1fQsx<>EjZcowZKky27KhAxe!K6n zXJ&dKmp@*>?=e)G)|4ml_RCE5l@$f?2QoFv(%47RSRnsF%DaS*6L@ek+)Wc-^g>ZXgo}hj~6+@D;6R;UA%%YsMV1jvorK@PK zD5O%+^WW4Tsao1MX13oE*#DUFfGSt%_8-gYj$)M7C~>#nNg-q2=zU`*MCPbD<3|bm z_6SNmYJxp@?*4=!MmneaL-q|5Ih5U7?{9*VyuSbOg6R5BPVseJKDiDLycx0JAM*>d zWje##-3r&IjdqNfEq=1Iv)^D4Wbr^u7$yrFygrm1jl*6{7^h~P>;7_=fxSPPJKI2V zsh?iwz(bC%LApfvWhHQ$2xW;{@b^FsfuucJFzN9V$uDW7ZaO! zmiI;y@ZVngmA=QDA=FJrP;av9^%~bDe?oM+t0Av;T*MPfKzSt4^F2R#geW~tW3}Ae zL?0wh$#C-XOy&HI)>h8a_MfT@_RE6RmsCHg@}E|A>sY_YW9zoSg=d0ZIjUkEm7@zR z!YBlk(r(t{oY{q&vbo-3BEiq z?FbNh?a!ooKWp6}{j$0fH49B#re~!&iS{p#12SOET^hq5BUkB=o_#jfe-89VE1Wtr zg;s`>=s0DwQ#$3H;4+1Hmq8A6Waq7|$rAs(7>HA{&Zpdv`$^;5AtnvVlA^-w^e#yf zCK1w4^v%y%qq5@Nr%&6*NFd8yd(ceLlUoQms__NaUm~{Zsrz29b)bV_lx;{IXRLvy zTgJUp0yzrua-TziyJeo+QO{^9nQ(_a7nFd{xkh9~(E|BG3id==CXL`W)^*o2(PINw z=y5Z6J|%Q-7$ZL8Tv?erGoEehZ+pGrVAI(c=&_Z5Y(k(fOp4BgLtjjR`9E~@OYMVg zQcBSo`R9YxLW%j5TpxWufh)q;Y**4ln^kA*F*Xj4_KaeQw1Kni)dJes$#Rc?Tx5i< z{PO%E?)#rCV_@UTUjCe;nnt%HV&gKcyYr+?k<&s7pXBEwppmQz8t}voL+Gk%2i>h9 zp3$&xx&N(Bc{M4ka6etJUm^ufR)6+6Xh4tPwed1@b_Cz{0_aqvndiM#vGal-Lz`j+JC)U z0Rl@)C#)-;961jUNa^l_9sL}~uwebX-C60%n8K!Qc+?1yX@|ti!WMM&OxF6CA(1=> zqV^dD16`6aitioRTjPvvxJpj`;m(rO*zN+RaVCGbv2PT&Db-*-NkN}H#%^a0&Tu(A z0|f7y_BZ8Ewi+d>_v)_k^N#^{?<5$E5Qc2QXz?h^`uMI?oNwQ!GY_lLy83#?)z5}|?YhT^;4~Mrrxq=(8BL((GvcIKGv_j`>hWQk9{d8bA$>wRx2G$4} zRrC?s{G(AO;(zjCwV9#O$}po9v#y~rXRmiTYmm<3B*>RVr%pf?b~k-!Q0}QAF2O*M zJB$L+Qpls%nZ8vtwB9UTHDR8IQ`dI*xGxnzKKSIfdMNzN1UarQ=Z;VnzQlVO|nwwu1^?c*CK4Q@HVRxGi zJ2!IZ*E$z)Rw}8F7#8aLhiCHcS&b&;<<8_Gl?XnLbkA#x!tNP*A@b7R=^RMzFpmkl zEWqv33*PUYS%uXXF@)ZA%((U{d3ycX1!2M$Bs1xt`#^ISi;AAOdFAEB_(G`w2Q-g}0oWNzvo;JgQTTjR!n0@dVSpU)=GJEShT&~8veC2hW)`OTkedmw+} z%&eJmpag?sG`-1j_aKdZ4!H>tIKC5(WNYU7V%C^c%bpzwBed*8qL*r{OkL7i{6RB3 z;?U&Y?!q3(h`Z|T4~4X%7Z9@FIQj;ov?oSe!;qq06X+(GJ7--Hy|J@!@;NWCe=f;>S%hU1{)rx)xdYX7dwRTKNAS3yOcI_p|S z77JrdNKV?o^2)B6+XI^JQgIbzd#xcqF9q0|j_K4?gSB*3dByS~$ByZPc;|FCdqs73 z!e%|ftK0J0!QSfsL)Sep3Bv>Jf*#wpZQHhO+qP}nwr$(C?RmyN?{~HqwYB>jQmG`J z`|1WD$XXrKX;S}L5%iIxx6ruJwN1Fm7^J0txhY%du%Ijll=WaAFIR{W3`B%nodhjR zg38}S<$F?LaGB%E%1XjywI8_^ySl|&M&EPGAr9Vapr1A>9_KDIEk6I@lKxC4a&JFE zxM7R$n1+Qu9Xp|263S-#+~R1hW5^5dZ%suF`Y!)N}Ka ztJ9P6>k@I^O%`^WJ3r zzTL_1!;{zGMSZd4qb#hJrq|V5vX=tBLe(Gla1x5Y- zqvpdk{W!fO)0}EaAfK22+y5(X-z$~&xs+A}i{FdOLx0|FdM?v@{Y95VS5)D%F>T}P zoK)+My?Kl8!I=EAO-moG@xz{6q|&~#GtrupvMOVT8>(78VATBTt&&jCJKfxsq`H^W zJNHcc%ENP^^WP=yq>(#H?k3Sy%$fg#cf1MCN3!EE{N!r)nMID(%jGZ>lF7f>XLF)mNMy+;LxVMzU+m z)*Hc>swi?@VRl21wn%IR;ccvVBK=*$qEJcKcd}Z3J-o8w@el8Sbm;&wIWszB?6zF7 zYrh{(Y+7fm)TcKwLw%n*&9iCL2ua7JSZOaEQNUTYAR(XRa+2x667BrMsQ-M@Uz3WV zTyE|DhX>;G$3|r(FOno_FX?AKpXpwEM5?FsRB*w`zc~|P`%plxx zJp(H%ITOc2Z(|G5ssCOpSd(jh1!*b(%zzJi_6zvT9M`jFkk=7+wY}Uji*5YHA{U8* zl(e5S!q(+;`MaoN!}s53vOL|LejIwR@A2>ErD-b>HH>JWTRr&3#>8_|&p(T>#vNi; zX@Mxl>)6%q!fU^N_j&$4^mET|f#PAIxXbbqL`#HbVY;uMN6a6}aO4_1TghjhE_Kdi@lxTpma*b{*B(xB8;Y&#oT=y5n6QKNLvvf z*;dx&yfNU6c?Kuq7CLfAJ~G(&3U7(B7CH^^vkmQw_DrBm&U@#ZVq9{v1}#|QoH$6XXaR!mTCE0Qz%({h)yR!^sp*8|VPQsB zKR@C{N)TpKLbGNbz<#|ROm*~Pop|~lg9GG(Z^`te{+^FkFH0YK1V~2RT>^LxdXfp0 ztO|BW3>tEmX|}r_By!!uSN5QYSUJ)oh=r=1TieL1zJZ?X;E@iF^7O?ls4lqNEz;~+ z?~wC=Z}kG0mpujEvW6spgHmM!{QCMf)8NNHIb92dT|JDv_{d^EQm#o6F@lHgT!01#LiN(&dgbKp(4DIaYVeVBBTmnBk~D6 z{$p%G% zR}bWlb2EX-QS}B}3Z#`698sqTb}mziRq!KH)aY#6DVN0Rr#Bst$iO&Addu&MD#g?p zO{=xX zsNlRUi1@};$Yr|%$-yG5NH#V3W-BOT5h8a=u9%0E zR3PmU?Ghm*p=C3J%JzQ*-tLv~>seMXT&C$XLy;A4+6*#=z=c+EM~=6{v)?wu7O%N- ztGgAIrg+M7qd)BUphC*1dg50Vo&KRBo0CW7a(s*|1i_G#*GE9{f5_?e_3c}+6eDEV zZ5$8BLp&o31-KqaoTKr320I@zbx)SKE1E&B#uMQ$LmkEv(VI=&*4zngRNQ5~tgaqK6fJ&FJ{pe)QQF8Eb>% zwg{vlC6q#$OBQJ_gbvuq!jcb93i_aXPE&XGq*eP8va^i3Afm%xI^iQ*_m?fA`-noE z8_x6iw^6>1{G0OWmx_A-3FGUKQlrkiOAc}y^%FK<{55N*OuiMnvvj%4L)fK~W{3Bl zHBr`<_Gr9F^oN~@?fA&9V`JXG3j@B= zhDQ$sSpFNq6CK^z{^4}M`_4O<9hkm={`u$oLw^3X_fK!8NPs^x)c>^_%YW!TAARuY zVEzlb{^Mw9I2+o&{u=hRD=ixOYO6Wop~3dyXz1<7zyHc$-{%;dWp32y9@eiQDBhVowN}zc00GAXJ)PQou!}xmsbAs! zgcizYpP55wsG zU)32g`aTQuZ}`72!RQC}&R9?{84bHXCcch;{cF)b^23<4KtDXo9t!=KdN+K9e+;lA z+$2q30959CqZmObL`3v%*DqeDp-Q;qzZwYrJO!Hnz?@oEdc7qy{|>=)Iw=GjcF*qsrnLQoppKYl6an} z4l~88MF8$>Pe>Ux@NmCPe;?j65h+CUsg0h@MzE3fQ35OWQ=Q-TBFv~XPnqZ2@+Z&|7^NG{4lgOXrA>dQ5~#EzU~e6U`UBxiEh!W+!ur~ow2a`rp6!KJ?%MYM zvOhB)Y(?nD(|Y7xdVlFY(H}>gA}N7n zlSH~dOa@JV(F$qPmcJNhS4wGGTV9XD*{O-FgSEtu6q}0Zk-iiZ`x!Hk$TBKtvPu!I z~j54~1tWjrNVJ)NoqPc|B!=;`fll2&KQE@@Rr+FZu73ob%$Ns!eo1281Pge-y3{ z;0&^(ku&w^h$T|1U!^rC#pkl7k)n%G(^fKjz%}YmrYB5pLsI611U{Ta9~6+t;s%zv zdv&I`)>e5A^2(XW>}tTNIRd9Y6lJIHG;-?LL*-9Cf)K4$w%XOP|DCd05WSno;1Ei? z>2tiT*|+~neSlTB8eHxh`kk94oyTeduiy+f5aY_)C%<3~HPSq|bk-e=N>Q67B{=$& zQVqE9u^SF9wlbo;t`bDTHJ1fzIh{R8aVPz>G5l)Sc4hmm(7n(_TOM<_^Pnx$`~2tt_$)IDv*7|KX^0&dYQ%d zpQOJJvL@iZ=iM#~+b$#5t`?Ns^Nm>MfJvZ`kjhn67St4siX%vmK+EpO>H8zN4kP>M z+d_W({_bKWi2G%!K-BVzu-Te+{HZ)5_Z1-~+6R?SMuL zHw7yKjwW({^4PmaPlEmNPHW+!*A?j>=Oas0R2T91@fUZ-x@G^n7w&;x_+{E&+D5e( zd$fAV;;4U!Dy1ZSvRd;8Ar6v7Us}wRT*wA7fT|JO%$F(@I$wKhYN3`VTaQvC$d?dl zxh3wktVj#9ii}i8>OFn8)mxS+8l#)w)NZdjXCt5RbSsiWEP{4*vJHY<28KPkRj18G z{?-{Be`Ac6^nnDrmqa_(MuUWiyz55m6$^pd>&pLJo3Sr$%=q(bk!LHN6|>iKy#*73 zNfiN6_1d1}v`tcmnt*IcsK1~Ea9_AwZmpOGpWMFbZy(o7!m8^^nTH4ueH=MJ43Uec z{uU}$KH`sZx)nhEwC7hsHc)9MAhbW4mCtAYby6x$Ezd;;Izp^Vd~tIx3GQ8$8HYKL z3%O>kRIvz<0Ed4}7l}Oj{%Im-ot&UDKRw=^mMgx^**esIa{T62I`Q56$pAxTJ{7#t zCTU^eT9R|q;Ly%2PBnss5PBTMhmA~Wd>{uHNmxVVNS>}NE@ULH4?#~OWiy{RnEbIZ ztn&NYMhqE?YA9+O9JId|ceFuuvX&=gwt?|k6E~&A!RI6-x})VIXni%aci?&W|6bg% z{9edF?p2KoLu~x{I4L8f=IzoR)4r&S`Ijwis!e01fCc2|R)xD1;`yH-#x7}D*z48b zk$<`wE_(I*SF4Q$i{xc+QOATkdeYv@j1^%JxH z)@@zrzPT5!MZ5SY_g;N7{UWood+a@4UdR^%j->c3u%)T9tvyktTW8H7OS}JW>a3!7 z{3p+PmCZlO#4~tA&ymB|4^{#HjaX8j!ojbG_AyzYfWL^3>f>sI^~9^`HVo=hVYaSr zE6~zwh%GiUFr5mzt(fRT(z7@VvbMg)<}x0I#oY}25F8LBLCEmz08{=x4;wPQd|Q;Pd5h}6I?CapGv7| zHNtyjZIzj?mgWopx|Ur3{GQbR6x(llReHKCC8}6y3S)NWf*>k#fe6|2v@&5nQc;=L zdX-eeg=uNUlv^cviGQ)&q>k%payj+CksCyIY4BSu(Pzg`8@Tx(O%ddPu=G;5C3%w$ z0t-4jwBSd@%9~^CaccZ%SwBC39qnTi0%w$_RH=B@puE^3-I?vbbAK8{;9o6pd`t6> zt|!;MaB|hJWt3{Mmigvvb7W0}LWCs2ihDuE@<8LfbGPS~`H^-^c5!i-UV5Qy+P9+E zNR528AgOX5Aji8^A`z8QsJf+7?I=}=@XQ-(C=BF8R%lB5%(h+S9}JqijpjUhof#iht3!4zQfJnA)Fgx^Zv5Ru5TxezPQxPekdi0t3uIlkg-)xV z+z#Ku@kXwrlykGBL)Sdb@*!I%ck;uQE-I)WM!qMY-YJb-M6oCIy+(KkgkAUmW$!h_ z4&vHG65-t%Ovs4n8M+~g<=;muSk~a6P3b3Ce-Qddg@8S5l$zL75B)BXNxlJ@&|?kV zJdoHcZCiIEd`Cxy#^+A65>BcImWeC-%k81*0z2?TW5n_>e<6JdSD3qf|5xTm=2MN) zoEA&;<=Aj5Y_({AOSqjVWfgXdlL41AMTyrz^yPwJYOoxG^$5KBtgpjbcy-ASKwG85 zYCp5!jB84&#R>7(i=<1%qbw31M@0VZK!d{hD@*8JO;gf45JCB^qOuLVHgRD1m^}@v zEfx~LC$6`#7Do;2g)uIqxbGz&5B};%XP<1NesQ?o_j7L?3I{G2&u56J_&$Ngri)bj z0g`k%Swu*O{y*jl6`u-~Xa{H&H@b>3kEfA6K*S~o*s6pjwn~RrKzAMvgY;e1bI3LJW&=H5} zW;6kuRcNA;|1Y88F}}(p3b-z&?i)oswo5XWK2v_Cm0_#h5EEwBbpV=KtoPUoPC6z7 zOFEbQ&dOJyg%&_75W%LyPv2{+vUusJFsiRMMiwqN!2lInAb9tRp4MG8&HUES_B;s^ zggTcbsl8?s`-5K-n3Jk1CdPm?RC0Hza&56*sa6nNPrC~Z_%&?p&ONkRcCZTVpEuw= zYsS#}8=bUpz5=>c7C?)}fmZVH7h$4B&F`J&iyZdI=kSO?vDH<-E8-{G+DNbz^&g}Ikv0QptJK>SG?>@e zdugbu@|(d>D|}Dk_`>!8n>x_RRB4Cm@(Ti^Q(>bXrvkkl5j>jP-P57If%J{#mmruq zb2rBW-Rk$w+?K-fb?45=VFzm$BYG5`7eNp2`N$I&T%c*Lw5IsmID7PlST72mw-IPR zQAX?oIpicBF6~Rho*?G4%pK*s7{sv)uRVQkY~+g z1AF}gkMq51U^S>rHPFEzg_m>)DNXjnlaZi~?&3W?u5+_zW5Y5d#=>;Qul%x*YJCwA z*7EPpAlQyMbLFSZ^H(t7V}D~(B>9R1i@$Vqx0X!mS7fP}nMl7*|6Cx;787ZLNg zoy_-a8YC-+jm@vPj z0=~?wC8fER7>ZvVDVz%ll;1>qugD-vi(Ly)D)>6W46jeOpZGNn6(#Ur!Zf)oSJ3NDvMw_0f7$&9XHPQg23ufyV}pw?AK0`oRlTb;=%R z)_2IR)9Y$0{87{TQ>reS8DdxQ&u{;w;CCME`i5mDD(YeBvv;xp#wh51JS0J?Qgt$h z|B}i~BZ@G+fmj_+RK)D26*=?M6vZpSo`U*rNS8H%TJtMY{$oK%8&$nk>H}G=>PI+- z|AZZ_M9xp^^t#GRVR1XJH(5-FtJ*UWP{>U8*lXw6{7udfG#c`T>ic%w&=ku3pF<{2 zFdr~WUF^PK1Gc0$^Pgk32t2FG%P>aNCTN5dR(6i0{wpopK1+KiB#gr~0VA_yNFL@m zs~)$}yeDT)LCklnX3@~k)3XhaG`MMolcdr4b}MI{+wyZZ45FFYRWNTzjhQDf$ znPb(YLET*U->)0I^^pVTi8R{ATzAdBAy+44eW#nW0n(BpRBRuN?%{Exw_mbA0;!Xv zh&;CsYSq0A?!AGkt|q^pbhG_xUq&=maG3e*r5@SoL4pZz97h32f9h>S?Pc#v^r0nr z?lz^_$YiC7V2x7P#m*5TLt#!KHlPF2MzJ_4k>Y$!XVeyIh!>-FhUY#Pm1t{XH=1Yk zRm&HYVel>YZiThUS~f1M%Qx8{wa^PF_WUb+>+A@T^eB<^G?8>zB;7Shm&VICc6ovX z0ahvV%@q%01m@(K^r%)R&ZLP))ks1Qpz~53#tIJ2(81p1=91~# z@_$g$Tdx;29ogs6V#afvNMr-*ZKLi>3hfDf7#XLeAelU9-B2#fF@pd^)SFEul6yhAXLw6sy*RxACg#)#Z;!R(z=h252+o`K`=8g1 zs-^ajnsIxDdqQz{-yv0N^-N?j0=}RcM}{gu=!MC$lYs?sDYj(Y3A4iOEf58zE1jk-_IiiCG2Pbu;44pY z+fa?@K~M{BT^=2b*?Iz}MI2*33Mcu8-XNzh0%R50N2DFi!} zcix#A(_rOWskj3I#zE*YVW8N-1ZsCzTC|}Bg}ywU)SkbpuzezvSD+Z6JA$eroPUdz z(wCANkcu(-6jbLd$iwp79fr0r)GL%w%tK1_)K$?k7zA@w=*!G)+aF(>fRX@84xSKE z8Mbc&a}#N(GY}$%>XoWIu<+8UY^EZ&3D#h>O68g=!N`SQn3so?=gfiPtV@U}6NEF+=AYFBIxq-np)WDdhdeK1GTUJ61%=I>cFA~B;S~PL5BZq6pc8qsb z%|IJeEUM3OyaRz2oHR=%?p3#x5oKat4!Odp5vhWcz zH#H*RKgz?~Q5&&%I{0s)C;Id$kjLm?!SJfKC#!964Z4? z?ZFd|TH8XXtryE)zZOMw#Hg7W226wooY66@D}MMO%S22BUJ8z9O%|b?zAnQQARCZc zvjpq-(Gu8OXUZ$k{%|SaftJ_D3<@Ib&Kuc0=p$q(4@qROe;C!U_m}E?&G>mvb_~%QC*JeQBQ5+cON(9pzGONilouB z>r)@F_!sM^1V9OU*Em4e2M2L%J2j94kl&>xV%FEf9G%**c{aMUPQg}<2Q=elcMyB2 z(!d>oDamnj8eW^hfD(B$uwv7uvfx?-N>AbOT*FUOKzJVZ$SUI4+AuZlJK_!tZqm(| zjnedT7H{YUE$DGi?G!MFz3lY>zmQwZ7g(+7{_J7(r`7=!yT1$^E$ip%O zK!$NC16FBPeKUtaS|Q%=U^s_cQU5Cu$?P^8kvPdNR5yp@M=x%)Pv?G zYyKtG`{X)vlvvLufKlaB=x%`sJjFR90>>wtr2@uo~}S71fi3(O&~@{TApd5VOI4eo=A#T+ZZ=5AUNr<n z%+>Tv&@V;59Cp9islM%q%kIct^1oe zOW&nCw^KO`xi5=Lv@*>z-5e83FttJFb&j(O2F^#~)kcEXr^4&oy73FDXv4AWN-_tN z3d$3U1tS1=wpMx)dKyesDQcP2i0%y_rBCwA2h-7X5p&(XZxu&Ep2 zv59Yh=vRp006)4FeBHgr4mL+{Je3&b%6B9Q6`*%PXgg9!f5io7VJysuNaG`XpgMMm zq|={okQC10Q5A6NB221DAYgx&E+oFW%H4c@gw%hkg0ju5nk~*UOrI`*8qx=2-$C0E zH~So--^>gNA4-ehoDQ-s?1oLu7OBsc+g*U9=vGq^*O4X4iN!{gy;V6dq088WH~9f> z{Sg|e$yY5ugJ`6~H~UN{Tw8q8uh1yFKG0=cj&^empgibU#D3>Sa0$basVA(A^O3!XeH?S?Qdt0uwz?#&y}EY_cDkZHZv;pdnERu@Pj!fB+ zy5zkNvS=4_0gwF#ra|b&w*fF7kK2Ync2aapZI#ollT(2k{p@#lb;YtH;Jcf#XeCVEFj`yg{>)^(x@W9-X(#A?|sp7 zk&Moo4T0I^XVU2WYE;wgsb6_d&*5Pgsli8xO8t+Ut?cu5NkJ8XBPMbfwM{BawW#D1 zo(Nk_r>Qd4K~muwR-L&-WCt6TErNl_w)D2CMTL6tbCpGJEKcM1%n9>dtl8v!*2cjVWs8piSC9}O8%*7Xm*zx7IDY9Ln<2hK(d!;UB;2#E^f=7A;Hf^6(ABjD86K#JxZFp z_GZYUp2ACR&M+HQnQmlD1KLHqVp(O+$2>C7{uBXG2*z?tM|E+3cHw1;Wpk$H+;e?p zM^+&5R8Ybz%P`t8Ex@8Ph; z;bqNMd!jWFGowGH`8l;gyD&sixV1PTkeREV=j5aupt;lpxT{a;;VX8o3Fjr_Ub_Wb zPGb7}S||yi)~8w_`&^+gC&x(GeB;KxN@Lab`3R>AUfhELKe`Zpu`EZ2vqC=5I=T8z zKIfJxIE}DEhUgEd3DDD~t0@aUn`5FjW05dxo^p%GgARw}rzPb=@l7{bKP>Os1I&uR zES&kJk4qN`yPGRA8NlUoy_XdSXNED06?IuJo2Us1p0o(7y_!G%ycjp0?N zMyn@L@GGqIV@!einisidlH+&CkLdu7H!>)PVHZhsEFr-=yn+@P+%!gTIXGk22aK#J z^)`G7)cT7AGlDbBWZ#S^Ii7aK_No{hFO<8hH{JFnwmH9~B9>@n-2kaAW0K|enZV6_ zG*n+bkW|-FRCtW`A6hxB*|@A(5vLe&$Y5uuYl_~)x5}5`x1o9z%iufVtm&q=eMvn> z_%@$Y7z^-87^aMz&j!tBg&xJ$6mck*=NW=d9WuNNR`M^z)b38v;PzN)445O75lQa+ z!ZMC{N}=zMUY73ohi4|c{JU2*NaMwB_5a(=4sd*EUcO{}UOI@I*X+n6?1}2d*&XG? zjeWkzbUg|LmT!)j6tL0eYNTz9r*NbZMbwu9Q2-D-gy3D5>igbGsS#DLJj6n;wen-* zcxdra3eLTP`Ob*yTT9%+c8t>Z{V8>0`6h~1kMMtERM0lpL@jzh9(Z0=uhd+XRcAVo zUy+(NsEaHRg(YSShw*LNj6vPBQYM!JLH{F^n^MqUf6b}C0W=#ftjmxVq8vmWs94-1 zutz63Y51s0-M{Cryp381LhF!nnh5ofNW{W)BHpt>Y{Osp(?a!#rWH76Gm~caxWhKO z)MGzhS^U{H&9h}|-V(Y-yKM2=MKt`Jm}-U2GF8?-KZgSrMUa3pcl{(EZ~^#~m(E2P z&!T$t0^Ehu@H-;#KZA-4$VONAbSzaq?$evDpTys(pvh+}SJ-YS*lj0~vSWf=IAB+# z+`{69HNqC($aO*yt95O{Lxspu8tCFLYi48D#J-dyoS`0%CL-)IHNLDQ*qK#1K%J0i z3Vx48n13k4$cwr!UM_4xg3!5Kj(3H8ubAoEx2yFHqlP=x%iCGT0ecQV*3YN{lYZ%fl1^!CO|(VD|124~UF z3SI?1;#!C9GKPcft*&bSK3>AuHqpgQmFB{*f`u-$tCUN$^pb?A31*9_EK97ebECC( zHYc$+Gy<`&@P(w8z(n)x8~&Me$Rij85iAk_Vmhmb$pYK@nuPKIdwKNepqm-+0bt7_?{VRChS4>d9X@01G)cni+e(TRrF_WH$ zpW}x9%#!x+XA!B~Vn;%!R(O=!L1~CQ1nIx# zF1uT=Il_YiHERl!c3wgjUPA(^2xIsC2Zo*T<^5aOlAwirs^CI4`|`c#v2lW?I#&Dk zl0Ydj}?WdM%d-xUhh&J?SjDJD?Lq8Ce`%_nAb;5YROiTVaNwxfFq zL;5%DcVK8S%N4bfTUA*Y-M4Ll3t>{@m(&I;LG#yoaW4ieRg;Nop%un^MYXI30H7qC z^88)M!Iu_iNPDZrXsv)0#oXL86&|Y88AnS`Wv^p{d{4`C4&4eIQCXW64MJ!ZCNIO4 z>DrV~nqJ_{_)Ju!r=5@&=7{Q*5X=y@ERCkLIY@3m-PSw5+VAiygn~Tc6!B-Yh<9$|3DosxC>f`n`$Vv zFgBcJGbt+_2l4|ApG-GQeZXeO%6a1)+NAd)7Tpi)_m!n$RCakUx;d*JiK-C(WvA%RU6|QM5 zYqYi5XA0Hf6)_03CZW2`O*+Hni*DNG1Lv>5LM_~g3Du)9e2Gmgp9+Iky_Qc#5Z zE{tx}RT2gZ(U`5`fnD-^Dm;P&c+OHqh0!@qZsN_=NHpVZau06SGYLMed*{8_e{EJo z@@;Lx8lnM4vDF$JH8k^~eOkLc=?N!tJtOubaA2mhoJEQ;W?4{)Vp=ZWz`1P*D*prT z&Ql+5oA>mUm?$uK?&XWnR$k5f$C#`P8@F%B=IMIXk%xP9;MoH2$%be=<^6m|&7kEf zej?8sm_gScjv(w`%M{sk`O2fU@vZ1Zg_8n63dz$yc(X%w%(?Pt&8Gw7_XbEj^5^tu zhXkgrKn#E~lv5VO27pNCrY$AZT>1!ivLrMpno?je%~oW~C9XV{9zOGo7mQ6YSXVBd z|GnoCU4VUVoeB>(J@mR2Xr?ml0Wpj>3E(1ytU7@wzj&2RJfP7Zyhstx<&I^O*x4ls zH-V&9ukVS9R%6+y!L(DsV{vswB44Z#p9hnM!wBf075DF(SA}VXrFI_bht^r;X8g<9&@Z8F3g4L+wo6YW-%z&(wUq8^pKOs3rp<2V2f7WOB@XMeDEhq+rQOshmUS^KbpT z{)h4SwDoh8cKJoxANT6)jR-c*B-=`!(plnHHrO5d5b-33T>Kv)XEA>^b^kDV(^Nl* zUn(ZO%J_{?mEQIAmfa><4u3=ayu}~WyxX>_j9%wHil;4bQUFc$sdPIz7NfAim)d}BL}a&p+Wq1J3CEk4UW8*x?Hte4J=DIb7Ak|<}$OOLQU~GLSisaspKSV2&r{vyvc7=M+8;P0)olPHfkZ|cD z{5H~hqmsHx$)Iw?c^Tew8mrh7@M2m>qS-1<`1&;Ee3XIu!#UU@I$ycud4@rAs*n&SjbYIS}=_6 zve6*r2JW_by8s{-p;JXE<9`3=}hlJqepm z67y^}h48G41QC&*ZIq)CCC+(c(50Xg)%$_tWeetfy2aB}O+k0T(AS$P>THPZEQk%4KDMzh*03-0TbHC3c@LGZZgs-kQJ7>$CAm+xcn}8a z){~ELxQk10#DBdOEB3T>iD9)dex*= zck9qQ|JjW(y3yjxjdt?E+c)VFzHQS4{`2owsT*KP?*55F3;s3PHt63WnZ8#3uacSh z$5O*MRR#9K4Jd;fT|Shf%bIE+f}Ke-J>>c+ixPP6@w;V;YsQ}U5co{rwMuD2QK zblp-Y6r|5GaTsd^o2r0Eiy*KEcOzx5FT@m?1F!nSQ%!R34R5 zl)kl8b;N8=iq(}5^|IIqjTUiRLWRqA;Dl|4`SBEG-W5KDi}bun8wAF*_UZ>vkE!c8Ait&e-W6FYWq9ZHMuYCiy(_D(*MGdrdclN|f*|i|ib5npOEi4~=}}8r3u&-Hg`sFNXhNu;083J} zl=vt{Mj}UmAbya`>aGj*o{Px*+oY}Tw%38zOI~@NYvad{G|sO(hH4dBTthoD#w_%@ zL*;66#|WXQ$ud%?)nJImH3Nd3OKbw#pTs3hu_p>jSohL_pE&*nacCbYbE2f7p8l}j zP~1K5R%zr&*BJb+?Z*#ZF6mS5D;r5gKN5qZ&@>aoJ|nGlDGCZ)g}8Ts=XiakMWj!O z*AKYi1w1he4kDroA${A+9~_vmtV&3>l#V*3mW>@FUFc6A|O``><$b`e@!ARfKl$@zbSWy|3Ni`3`#S0@r&92uc{0s{%U zh>fhDzk!ZCDnNa82+fgN7IXz=({Ywn2KFzT!Us&jUL!*QDdR%_8zp)Q9mJM9<;dBD zAk$0IFx9DJxGeCw_jGI?=LlqEUpWekJ)l16A#`t2c zjVpEFeB_h5Tk58s0e)6ZeRwcuy?&IWS67uTmO8=xXh55+hTw1y)Lft@*p3B2g`of$ zQ!Y!Kf;(J7ds`_cha%wx;2mt&9f?A$*qYEHcPAKpt5I3h(OPyE*Vrsf>`}%_rg9bv z)jc-QY9mSD0hg4fQ_0i3T`Z6a1L;nWXMX1gLFijh^BpU95fEJ1stK{I-Z2+ z`YcwW${QhRla*aA7pglVsp`x)bvw48kP*8>ZU;F0+oe58@6rsytw?481zD|#`(8OS zmXJ^(8e-=5Wo4zJ3X<*2nplCABf+7^bdZfwk40LIN%3!Nb#sdvJ;(bzGUT=&Q` z0OkCy6!j-Fw2J{)@{F}IFqhXC)mj|m{v}&T%zSpv9dk2=XB7I(ac60^gkXxMYW2P$ zE+E)ZxlX{nNwQlp+s#ew|4M!A*a-}x&zJ$rS&_IsXx!dv8AV(0{G(77A|6|4vGkY% zE5M-}b9G%5Q`rEJgwm|c9%{MPm34eSIlpBO*~<#6A0I2<+}y`p(#=ab(_&PnQU}42 z>o!i9sr`8{A``{|_9EM?kuwf?Ks39MAbEMb>t)+Ug&8^|UXI2UOS@ob0=)=p!;(xT zYcbUJNg@HSa%v zW5i#%C%v`rlwKX_(x}@54z4I2b3*`IF^H%&v6dIB%BKl#-dD^9KP@++OifemyZMJB z7_19NI(4B4EX}>|9#7bY)+>ctJ2cwW0QN{8O?=&i>C9bKi!TwfM}fpL`4~4AQ+14OrD1zmR0B z2vwtLgTS=Vk9LbWuJWoVVdaS&0$26G)~Wf}P-sex93u;EmB}i2>=^?`N801-<=J{0 z%DllUfi&dmN@cQt*}+>!o^_YVUu9dj`T5@EC{pvccMk{gnDW-6x}A-0(zu86j}G5q zt>@f0FgTaCahLrypex9H|4O&**x<=S=?wd4RVvM~X%LlujD5uGe*t(vhrjbjH}qT= zp?2ku=Hj2YV0%sd_BN4s`1Pon+*1eQ%CwuG>+5S(n10L?owCbbsg7+D>co%LB{!F? z*L1@DSY7f{t-W}&a&DOCMhBObzNWU0mO(5A==x#Jp;bIO!g7t$T?u5*)fzWO8Tn z@y0p9CIXiEbA!63QKU(xW^lih^G2u@C$7OTfW#5!R!Y~Ys1f=bs1^<_bK+WJJY$uo zJM_{nqI!N1S=yG^9V;#-_+Y(0<}}7e?rl_$Cw6KKDN>s+gtBYM82!Tb`i=6NrAdTYqDSf#?Cg-L}ixEc|c&6 zZ8V5X<|r_DtHTQ(RiV|K3uwMe$Fk`cHeZ_cpdsGBhYokMmpAW;%(}|=$<5`SN#Ok^ zNw4?7<$I!t;+w#K%HoM5z6KYkADvz%;#V}FwEz1vHX+-ep|;aRd_k|Y0vjP?XW{&( zXt9sz+UT`Mu%7x1ieq|s)`Qx3e*Ws^yO$U9{csrU@nCVW!1YH|;+gA~^>tl8tm3%g zECW6N(r?EREZx|1UYVmDM-VnK=zNc@X*^^~AV#H9Lw+M`UZlK-e1)}-C1f0Ur*J@L z+SjS+JEtag<~mhozLhnE%^CC|V!k*ewDr>o4Uyk!)otlZ*(q3o9DS1&rW+Ue-fn!N*j8Qn?bUq)onx)Cc8>nR*x+%2FOsmki85~>sJ8gPOdE!rxO zsYC@ZRKjd)?emSaSxu~E>5dqlCGCtYYhkXH{fWPWr#d{)3-Ch9>M0htcwwu9K1s($ zpD!1*AWI%y!O*jb;(2Vt#x)11dKZiDBuu(t=33~^#Hh-c9qnARqn-uuUESUeJ+w#e zMnIHLUl#e2mR#9*LLBH;*2q9{J^EQvP2cAmYGp^;>`VR%^_mx|Lh+cwAt*!{1k>2> z8t8-{BUwZE9_>{&UDmJkGs(#)2zo2otYen=gY{muDFWf8J##`x!d+Tq5L&9FMY&4C zH_c!sOrYL#!^bl@0`pwnmACAkN++h9bQlR0Gi7G|Ai0RM#I>?D!{-((Com@ zoV2h!(MhUxUCOJ$Gv;G_56gp^U077qZh1aR4&EFnnRm9|^DqRPUb+L!nggQ~iANT5 z=yBGs@gcRe%RWBSljOjQ#Y(U$6g|Rpbri(epe#VP(pNkBw5G<3LB7(i5NU3qo(A|S zydhO!_jLYk<*m+-%;{G}E-+8vJ3DI-W}uA2y5f=T!i?f^>NcP$z(YF!+=*V`ySIi& zY?JUSP7BnvNq(^Oq2t8*WWk^#k+m+<;kVlim;kF1e69@cwUs`n_zqfh>_qEin)|8o z>~GCShx&eAY}tRX>T}`H#9|2)KGv zla6P9Yd$j6M%AxrIihn;=Huh4japjo5YAF$t z(v><|P&q@879IttpH8nhCcX>_$pgfJ`UiJ)rMO|1Na;4~d0T3s4WtT&;V>39K94nD z?u-cok>{^Y8nxb~oLl>R`ILP=VPtq5*RAgX)cFIioaHfC<*f&kYGwKH1uNBpIsJ}M zX*71ti%Sh*2C=CP&f2)+7)TQ<^(eQ-!F+DrB%g-#YGK?c`c9}}B_}!?cZ>{sEKr$8 zbYC<|(phm1BCSR6SEG8Dg`T?d4BEmYed!5zYlWV|7v||p-pw9wYR^mnLfd=JWYk4& zv5uxL7txU;9qRTx;&@bvP3TA58cy}>EK2wwFQbg(p;RvGYD0j;yCyD+4)l4vKs3Ca z4KiA)Gzqo6*%=@GS<}JUI5p3D+xtLyHV=$r^Cxv%O(Q6-aWR(GO5~lB5}_PrTj=pP z&eM6II(VMl5EUm^Ztg`WZ!Za$( zAeiNeVfiOZqv~d&kb`d{#yR~k(aaXAj-M*5(H}-p(;Ggf>yM41 zR>dVLMw}9m12^6z=?{F9;U>OUH`R0JsrfF71$ug?OR8tN`%NO8uMiQ!5`yt89(Z2p zWO@IsCTV)C1*1|5)G9ll&9i}I*WHnQwV=clBr2}wo;Eh@kg9tJ!zJaKxhx9!_(a}T z=W-0=_Z-?*PB(I0hQkT|+ul!kyy0KRba_J!C+V=vwjthZ;}v4%h2!b_EML*49D4-$ z$Er6eJEz(yG-O9q`t*KSB)_2^Rm+f`Od(KTZ?e0v;0SxV$ZPV0lq%=Tr zIpSa%%pLPW)a!u{bLY2J^qU9qNG0DgJbfoO$&uLfaK+0Jx!c7eN6KZooXL55q*#i> zST*>i1&||U~9rPCB#}3alUL`eE z;vaQ?`%k5lG78%i=(m`|;_n}le%wHS65QyIk_bb7)ph1@&RjQI;y_kT8EN#rtlJEy z$|9O5-tXbHIw%8f!5Uf}7~@L?q5otjFgT*`Sr$)6;cz*Z@gf)vf>ZG=UJr+-;&U3I zMKjJux=o7YeX>c20{5zGFvv%{!5_rm>0?5nL`=Nh#!Da*r1@SG*!{riWJB*S zjAU3wzwI)tl&3`QN zR3=*vNH_@*#{ywK$11rUOgLwr!i8RF_K9aD!(+C)oyKQ>nZ|?YMc^s4Wg;Q$1~#Hc zI>;p=y!6KK0}}bnx3!tV!z%oTM!8=7BU5{?{ekYHDvvnLoSj#F$1%>IuDg25!4BQx zPt+V1f2^EYGlXy&pRw~AwcsotUoK^W=%b!O$3&R5p}w?GzZho2-LM!U=mu6@>>TV| z)?tSUBFOKEq-o(T1Y}MTf~7haYk^qo2OcEyIf4WwbWUl4EQeR}AL}sysv@5nnUdov z0V2*_&m{Hh?rXoF5MXmb7^v>|J?G2;QRXEnvBll7WYhpSKt9f5w!-*MF3ZBNM0S1> z{o$EF=o6((Wp6|dvcZl|wLW2W24?FKx=XtDlRyx=I2d5hRtuRr8@7tiP6V@SMa4-g zopO#GnmVomgFR-zI)tI>l%TPuv%$i6RXttUvicmAB%OH^FHG6a&&HbxALBH+Vbh&A zgxmOn?Vgpf%w~5}-4dU>`C4}aw;Or?X`bDg>$g|LUSIQFg%x2&n-J2%!1QHkwuaRAeAuY_DQv%R?A5yW^|h-f;RoTxHpf zGF;V%9X$E?Z0xW(P{sovG$iu>yK%3X8z;^XZMJ_f=NElznGZHGS6mQiZ|1l@l^n$- zR=~?Jz@dSh+rkMKQEfxoKm;MQiEvp7niDw6G7PING)uw_oF^)w2$TcH*Edk1@$`w6 z2Ao!8!Xn{FhXG1}N4%7Qh@f8yir~wmFuQpJw}ky3V@d~bEKb^ik%}rXQqU&tpy>ie zr%lMZbsJH#BJE%~>ti$#4f{&w3AQ69qG(J+#1i*dyYzC-2q+(B8$78jsS#s?t4lfE z#j+Kuw-z}{uc(d7XP4DoNB`-C3~H<9F4mZHt=aCYn1vQ~bJU*vCf?|HhR6nc@^{IF z{?55VRX`$|y>x~c3>8{SVC|${CB-MeK!~(3qs1DBh|uZ?W9HtK)M3#SrBTZ@wu8{b zj%BxqS{Oc)F59 zpbvG&5Ku`Oh!Zt}1-jJY22D0P?J%Y8Y>{M;(I!!PwQkiR(eKKmzMTdTcADDz^8_J- zh!HD^bcZ@1rJ8eWdepB1$2r-eN9AoT!`Ng z^kFQqVn~|d!quoN3fE>Nj?WTeNCrVRFNqpoSXe8W;>Q_gGl&=i1Si(H8?cV^ADYN{ z2R09E$J%A#Gd$hi-AS27X&D@|a)*ICVapEBVXU(f%@coZ{1K>@ZIl{Yx`GxnN`U>< zbrsx4S@Ut^q#`PfZ8bvUX-(Q)WPAjS={4fz1BmN*Q}Qn(MTKtl zsbsoqK}Bkut3qFCt*ZNt?SA#1pmx{JmIKlG?=2hYnvbyu&iDCJfwW86oT0hMxoH1(UT+wga$ z9X3mCXp3W$YTv80DTjbL1qU!|{%pQmN%UwPmKx`=33qK`u`tPsjyeilV;qjhbE($J zgpJXK)j^=&&FV!F`d@E3H3jN9OosUM1oPM9^a()7P5(B+Irlt~w)WN&BwOh0c+Wv) zPxTwpEq)y|`_AoZjJ7YQGzOI8?+$Mr-q&FTZ&coW5}U+dTf(LsRSfsKuuWyBH7` zGKwdJScQlcYyQJcm+wxR**uH_hqP&Ii$pA@Yxy^LT*Rq!Ok|i-?|DIaf*$ z;OOT3WTg39qCSsc@I@*>*UAeEk=N|IwMF>us znDaP0i;b0%GS$;IldwIv!obtH8gh03wOgN;2ChR84!O@@AXT0La3oa**QO;6FZ zFEh_+%|>+a5wC0`T03d~5Mp}+Bl!hV?@ovfCe-IANFUrRG!f&4_FZ=abZ-_g&!^KB zX^c&nY~>)GAxQYPs3my@>#{AKXT(T8Y7?~Aj6fjVP^ctq5hDk<3K}Oe%@-%KfWfAI z__aFkLhN`wnW3F-GksxcXHuwHLWoNpHxT!o;qEmFMuXnqSXKTU>T*;Y0qY|43pD^c z_ja{(h5=|@;HcK&HU&~!&Kk=bGOZfBj@eUXP1ze0y`3_>ZI`}OOFyYBNoW2aUsxd* zK@b*hHcRu^9Q$I4xB*yX?nSR-+KiHp3#3Y>Nkd4G)F}D~O~FDS@@2XZbqYLFq8=or z)CD5sWuzI?*}Q;_qDW_;Wf0ULGJ>*n}H zz(phV1&7Pwd==KoPFa92#kNFrkQ?80l}Sg0il}Z?mok*wRLOL833IP=>guPsHr+9~ z=yaA{{S?<0U+QP-&YpBPZiKX*FgOEZ-*6*TVgq-`$g;LMT#xM0S~)zdO7Un;iSUt* ziE!SvgB71rZFA+lZMLSQ`ByZRs3Z=8_vqpvboC9)z)=`mP6FkAKCODrLvpU09GIN5$kTTHj24~wWLOfhC8uUK`&O|jIWIJ zS6tSF#|5**w>JKqx4s8G<*DJa1#qgC4ANDmad~6b^PX_xmVgGrPZ4%2wl@)Ug|U;4 zM7THZ5nFvjXBL83i|WZ>AhsPxcGt7&qv23gd0e=Uddc?txSk(Hr~Na?Y(a?J1UKWO z-&nRVRsj#}DdLl5a{}q8{L2~ix{`QdHG%w{x`qUV*oIpt0KhFU8uU6zx|7pOc)qWI zi*EaUyaMxXgbR6qxSIYh>PQC`FgH?vx(X`m?R7JU7o_VWW6%=Kuk5v`E`M~c|G5x) z)i>NX6Gfc^%~w!U30JES@BXqQPXm89qoXGD*DBUD=WcAKe4sN|bbT(=NARcd9Ub11 z7DU|*l`0+26i?QRHl3Lx){ytHym7}-yci`qP;^zri$4T<4mO;Dz`mhw+j^Iff-I?9 z)pzwC0ioMjrFyC#eqZi_aWS(=tH{ zBFkMO`XWCG!do}5lEDh%(U>e?QXn`sA4I*&KwS3w&Z4&G)Pm*Zey9A2b+;G{cF#^rP%haR2%;8qwbTfGy;p$2U#B(7Ep9WKKes09Pb&@8~(1zl4pf z$STsjU2s=cw!r2iC9g?s_`%_D8o=h5>DQi#lwfuki_!RdziP_qFATMA*_FoWwqAwXj-<8q%%pk0k_)S28*qcYlml2tPZZM|k&5S{WRvIu88&>s{%*;F{D6T~YN;S9drx zCaUdUQJb3DDD&Fz6g0vC!-{ZQI9Dinjw!4dC0A4n;f)(jlpuzk2z>2L(BpNfHYl+v zlVF-!-b4$(2?ALLtmVNDt6jsXrXPkTF|zYG=ZI1@$#gXNzHOodh_k}@uJ=oYyW{u8|n)Yp+$dR1d8;Fbw=ZK!Ov=Q!nxR!$^tEMP4RL%{fq@#83eOD^cz`SXdnZGS4dSQ zm$nie{)MYB`FBx)mILr+MIwOMbRwAPH0Vs{n&F2k0{vst{z;kix?oAID_~VAQ#sy^ zfo#3GrH0rl@k2+J8=WRtmyJ>t3+f2)H8p7Ljb>$i5CpZ-pKGsyD4FMopxh2tqfU{l zmO9oweVDXHkc!$$rigu08&j&Jl{U^@8*)@KQr+j%i@U)ovEc0i#?fV|jREblP5Dtb z%c}By*Fo2s^)QTIB1NX)zbZQm15B)InPm(q`h5c57VTAdtM#@jFq6V;dlRK$uY(yQ zGu?wO81L~0k193pjpJ10OE={GBG7(;C!V7%y?33E>YG{{p19eNHgUm0#XZNo`n_92 zU9lm9nGCyJe(N2p=NR19q6v2*Q)LJ6G%~FRCH@^`>UieORrQ}F_pIBJizZTS_3uAJ zswYQqBn}(X0f1%6Y=C35v#24!KaSueThsnQWF|T4v2B%*Rs3EVX?I()G>{(Raj}uG z9l!CbPu{1X}>{sIC=v@tAiUT zL=f5?X$-0ic#=4K`aG}f=BaGP<=9U@A4KYInqV&$5!I8ctldQi{)K&SEqa9ZGyT6Y zc}~^8Gk?7nCa$rQzze4T2!HYa%Z#hr;pD7q>VrJWZ2&3zSo|NXgW|Uv>yQ{i!+LhW z@yl`f$oBjCshL=hp_XWZutYp7mB`V;b)p3m?po2a8~QVQdUc%+`$^~Oa=dB;A$v-$ z1rSrV8jqUyHv(rYFbzkogM>jemIZ0G3e_rt;MO`WgD|azCUrU%d#)vH)~{woxwQa{ zEG#0PyUkVR{rs~%2!8(A6DFEwQKNBMkL>bFE$B_4yK+Uv^?I2c3RHj!F$j6*h7WezT)aHSK z&1~vYXXXVVke9yu240~mnKNQusvvU+ETeXSsEpmFT3%V&Bc^D(N;zg{wTZ!wxRz#< zxCW#O=fuNd;Ijp3>u>ZpU_v7LgY!&9dKAQ_viLI(kc(lbp2xQSZiX#pq^jd%gP8$Uv}7Njn9cPEx4S_vzWUx!Ux76(&ogF2rG=;wIk^-Q08NOcgkI zS<7>Xw47$0i@^#fV-{r&W(=m;wDDwXl7l0m;WTE);dC^ z2xN4B9vl)k;oEke=sa)oSmL;Kl$pT!le1)2giD*O5##Y~&b_Rea8G@;FzJOdlLe5? z3pRQtGZ5E^>e}yT@D8}9lx>1^6*0sT#x`*hf`#p7;C_$u4)T>UNMTjsp3?IJ?gjMQKyQQf&$0i(kA3M^O zoaZ2B5=h(?>LuF%O>y2X5zEv|z!2+clflv&G_Gd>_g zWIb1Mu7U)XK`V@F7Xtr1HBh~7bX55O1~%WuXRVyrbvt3u{2bZW+DWzROgVh4d$=hF z%6~71h-1)G*U@Tpq~{IVPm`3Xo&{4Kdo|pZccmb46YpiGKu|Ha%mm;(F z7&drSS%GA-<6to1D7h-%=zreua56Rb)2>tF{UR7_bMPMGV100hTugmCsw8@sr z)#KV#xQn-71!t!;bu5GZ@yjpTW=AZ;fi}5mTx0`20cbh8W*IT$pO0RB{pB~PFb`D4 zpXAxiTmGC$34-d=`uigUAKt~6V0?U!tITDdXSrjUOv{fa zzV{|2ii_%^(S%^Cq0Zu&_zI()Uo41>ddWQS>>@qA6t6VhRqWp1B&F7;?30`LQtoNz z(=ocHqk$DHzdWglxt0%?G7Vg<%dZIREUV1LW!ue~U{~*#rhcA~^H=(4Bn~*?6E;MR z18?pP+8IbnBeq8rSPyimfI`>0wr&9G!(n<}{`i2h9o9L@<6 zb@CiA0!g}FMUXDe=okviX+AgcITw*kk@xBQ@7^GMA8}}$y>Q?~v~=w^ih@bOjHa~b zft?h4YE;r**9>D9|MKfj=5&Oz-S;<}I7zj|VCMo5A){DykZ7V}*6mC>t~_dy*+)hs zRRA$fy!E}HVLVB|OZcffWSpK_UrV2KK{bwmqhh#^Ix64~8?k>C?$N4vC90BoTX~LO zluHpxCD}U!#)`8Wl>zci1`abCja$fOc>}hy86@TIpL+R>B^ta`itP_X#P`w@%&VL!#HR3d`3*v z$wj$%?$3Whjf>}mk}hw=cN!;s`ug4ev)3?0aOTsJ@o&XXO`Udo=VyMV%Ig~Dhx(WhWbg{FMHT7|9Y zi%@)--=x+cY0sICRA@}PM8 zlD*Zgb-t`LCAiV;A0T#dzf7jaH?N#c^^Dl__$ZS**dWdDpV^Ec?hwtK3#^wOLm4_g zP0so8@qEk~IcOu|of#K>)aKsCWtb-Fc1)W<7RU5HUp_tQGbDj!r={I~XqC7B52KTl z2=B7!tQ}vM?PX2WX{#~6Zf%NWp`7+i&SH1N#7lCR8j2$0I!ep4sp*uduW9cGQe7{h z2FAOQft#uj5W^wU z9f7ne;{6Z?{B9WKCydlb&!Df@kSs^PXvRdc0tbw{*`ckmmNa-NKhQ56<5F+BLL~@P zoK;5rDapV}4&90JW9#uf)ngbj?W=1jeVAE|aPULq22e}U2O#P46V!{M+t>vJiW)zXlG z923H)3ujBBLZ{>IrWr@yE=MNM=tBj(Jhk^Gi+_oze6Eo9^}0k%ruk*$a>H1_4X_(^ zEhg`bZ|mPC{a?}rjHYak9TbqLz8Ah`LNW5U7$W;o9Zf>c!YAkX!6!rT2V8AGImZb$ ze9;c0)4@Np$$0WIfkA&YTtg}j& zSTH6RzHuh9d+v9xJ{`Cx=0pq& zASF{{UX_#8tmu-LL6eH}(>j}*VKH`==uTFfd92|~qZan0GhKSLJw9%rwL}%)G2bLy zkCy=FZ`%ac1;jlK2Bfr znm&m$#5R5zx(@=3J*Zi&R%&{lr1yS= zu?L(qD^;AkLcwOmcg$AHZXBFZRW7HL9;TG<-bx*DXwjGJ6vbU|+#c^E=Nx<_?i_b# z`Z%>m-e_b9Yu2;%k<~R@t{J9y%FHh$GY8zc23N+dgtn`Q1v$bne_(l3Ki_NK(S6W5 z%-6u240ezTm{o1)3SK3TSF`|oHcK0QOoNTlNw9>4g z#BQhDPTL9k>aegSQ1h;<)4FSl8{qftivm1Op3kvZBDBEL%GvzlaEDOqN{0;I!z)h! zg+56$iVi9!2x9cEE z+S;37>pwHSx9`V+Np$kOt-ZCZZ#`-X9`(jVyB+HhirHmS*IXj)VX_F6zZYv=0gF98WAhq)`(ZxO(VBOi)Jc_Ia}@ zw~KmXf-UV=;i!|5;ifcvV*jJQLXK$ucrb4u`{Y(IPo4oz;Lim5m;1}ccfDuvj)SH- z8-M)a`)}IzMzdNz_^3dPwb|o@V+p)`_3BHyc)e2}+pdy_K0>qOfu>5c$&QXb64w&l zQJ0=ICG}HV6{`&lQ$M!qfnUt12xQZhwM>Q^A#LD*D3?UGNXbu6DEO!fURhUB;D2)GC&5Rl;=Pj@CMBT`QVIo6TL_ED(8w-WJl*#k%wp8xCaY66p5S z%V-!0j+4}plJ=#=?iGC8Ybp)!h^rJGn0f67Jb=7za!8WmW$A0G=7rwm??QVDNFu% zQLT&SA$7^S^pQ0|VaAkTH>DR(AdcI;!-kRgY?d+Pkl_Ed3TxP8L4f3RCqJx=ZbMs)Q~9W#~H7ZPNSS za55M+p$d1cwH_L{G;E&PuYt83y^*|MA*>4=dxDn*Q=83>9<{DJH5tz2UTvB=rP0Pt zIjQ6bi)x@5tk4>?F$RvnA`!!PBKcx(8xqFv_2e}lfO3ltdCPLhAnpuMSCXE2ji6?+ zv!495Rex(?()JrHbF$=99_QKd(~IQkQ!bX1-n<1HbCX7MtrQhC_l?n!?puTYtrZJu zW~#*HU>N-_a`1p|7K@XzcmCiTtO>t~4uibV4s|4$44jkZ%x~7Ap1MBCBl;ipgk;ci zZq{6s|EcD}eN*cfBK(TeFZ2-73LeP7oW+Ja($zOTN+fD01^y>NLJVp*NKr)&2uZjC zpIi0BZ=#+UHc8s)C+;6l3u5}qC@yqPwpVO;X*%JUUUy=raPDvCM!M(BR-0ioxGOdT zqJamPK(_C_Y$GA)5KMAbbDVwpj#Xx%e+YTXkU)xnkJSMizgiQjU}rT<|0{se#S)~v&MJq=V74GO6c;V#H&c#o!FA2z_*WRB zRS-NNfoD=r#u&2>ECS{pow#_GMQ#+$|AEr%2xQKo!#lC@C zK08n2UjOS@el8@J$oFyO0&0<$+S z?P772{ht^}5J#EM+Rhh%BbZPFtL#qV(YC7Qk*zJx+ZB-oZXdoHUzg2i%6ksd*KuNr z?4G>$Xh{JROV4dk%rrt9;JM@*26XiDjo_dmjExpugXac|E_V}!dp0qS1IbO=_Jopc z1&Z{iA3xBEsU~j<*S>v;3nF87gf3!yrNyC1Ctzp;VY;J*9u(Ry3lax7)xN>4V)sX@E(!@Z{ zsGM%BYyQZQ1l#jI4nQ}|g5FdKdaTC8AsTB4!H7NNVzvQz+yR}Fmfsxb)yl!|d1&xWxhfztML@@FuIms>d|F*J zi%r$mC9D`cPsIU>;R><*s(TKz#$mbP{a+8a{`m{oCYt&MLiWsUC5TxWBT8(QHH??X zqHGVhuLgcDJ@t~d0(g9F+~`~5=D7}nLjgzZ$tQs_`ow80?37Z+ zcCHxjeK!8Lu~WKH5t_U?B;?7B8-5>-p<06_^ktpCzoL3Xgy52U6At5_%ip9@3O$#W z(t+~iqdb90I$oMcmdVaI?JJ9~?$f(VD<<{Bc9_-yBPl2hw3?fYGH)AyjU?^iwu+`y zqvqN5u-5?!-6fBIV&Ncol7)V#&nhFgWl1s|hd~rPJ;`+^FNbEZi?wH6v#8e#x&%G8 zK&MJR_;k)1z1Rpl;>jB7F3ptiJgIZ_tG zP15!3_k9Oj<6Ko|K^Bm>r_UTj&jDky$smHz5YLhRZ+8xW5%Jb&(gXEOy8*PmFlIc( z&S07m*L34GFkP!UU#E?~v=beYZHGNa^@3q~0g!QE^QjS>!Rr9kbbT)Ht~a!9S3em< z+`SMAtqn6FD8}nVy|9SMIZu0cuu!24y$S-z8%T}vZBdDNf~Oj6#Tzv`W!b-zU$RK8 zOw&ih!boM(jY8a)nhruFd+#>_+`5D%M6b75x8E>sUQ}n#jS;6KQS7X*M{FNCA`I+X zYCw6dGUVBbqx10OnQ%0Cdqztuh((>*cG3*7n^kw$nniQoIyqZ72XmQ%VSZ(C)JonA znf;_mhxb(z+?fmpu2?dJckbhfaZ1Sqy;Z}t0uMQWa)oOk(N62!go%;x&~9=>Z~z{# z|L;IM1rLlj@PH`R>R;tRYB`{<&#wlHiUSCmJd;w2( zokk;08AYl(5Vy^NxO)z+$_Fl&es2KsgbONO8^%+=ZX?h9V{eJk{9AYDpPmAfy%?0a zp?%ll=*^L6#g9%a)7Sg1-eVi}VFQ7cVFtXt^UQs(2rlK8!jPWvOWSwR=kEW*`yEdy_uvg{Lm`!m8(>@aIx z8eY3Xa&r3L|MmY+O9KQg000OG0JM8UR^#W=pS?%{0FrP701*Hb0CQtfFNFKTgh zWpa5gYI6Yq5C8xG000000000000000007LrYkS*9k|_LHc^>}0<~CY%cIinriQ;H+K2M8DbXts;vozY<+lxBI@w*fnMSuHS_;!$foEPPy3R`La zYnz(@krF_3dRpWF9)yYh(Vu1S(!&fz!=nUSRz|4~oY~ErCTUODe^Axs!Qt;-F z%9L>i;F?76$IMMhJ4pxALG&Rh70LIY*{{p2OydrtNT(a~C*5876YVC3-pZK3LT`bEya`QXW2A}YsPf3lI5^h=jr0c7oVc8J08+(9T6YTF*WN% zkMzZmI_#Na$S-=(?cZe%d`@5j&&Ja?TVT0{n^g5X&Wft8XY{P^5@G^V(I{F%aBcX#X8OrI$Q98%r>2&2VcHZX`4`gYa zMlm8*FM9m?)!_SQZ=yScyIsQ7s)B8hhJYj~b(xe?+6JJ2$!wOU{7)Ihi!vGYw{PFR zeYZP^zFjWxFaU^TTW=4xq8RAZ*Kll1mr-?6ENA2B7!Cl@1R5jFi{W{#!zhSlZEX6PPXMNNmDIWR>=WedtgBG>+hI(eo0~e@NlDt6}s6aQzey z(A{tB$+^2@8t>;(g^iBkSX5~VCsPhG(~v6a=(rssl>d11;=AYpUuh44kfen9ro%WJ zq;PcJN;ir{1ES{XGyWj9w<2AVZj`s(f$8n16ne;SE~2vpa1(Hk_9>g3N4Jvv9B%uU zFW~UPsY#GLYA3D-A%rp)1Xehhxw+xx0DF3as6^x|U!ESPC7zim;yuw_`H5*+uqXV? z?1&@7_+))A%9n6%VLY7$4#-E1Xs!%E90DB&ywuAN>6n?e#|vhbQoN3+cbxZ-uACnJ zS(PL67Z9{j8vOl&?lgYn#&eex0`l311TYinUyoqg!_CvR;LkmJaB&d@q+yMwoAuxx zp3zuq6|5?+#Z|bis=9(d4xp&oJczKjQ3ai0mjT0u9xE! zt`2|(tqB_Sk=I55!@oJ4x^(R4jr@?Z)l=XrmdC`%pTSLYHr+f~oX$40s#>Pi=FaV} z@3(%2jRw^`9S!&^;>*9JRrK8={2Jfz8i8dDfigNtNAKaF!$}^G4Ifw~z!4V{_x)R8 zWtn9`tbGeKjPJ$_)|epY^B$Q{o&qjD$#Mi%PItES^C3$RnoNiUAkZ0LAvQYzR69as zZ_E@AapNIkrgC9~yC0O3A?8l7yb8bQajSrNqyPORM{aPECgVXepQriw$w@XF$AWlK zcQA)rKVJ~*U8bkShqTtfadJ1laHo7xAbGPyiss5Bi78Z*c5OtRj_WKqR*&;>S!83l zQ+5Wo;Z)4dqgcnv;5GnHK(N36A)P+^IPbz&D+sY(0s!XKG@6)ge?K3%yIt;5UJUJ( z>u{(PlDmZI!|XS2DVzKH{Peh(kwggVd5T;rq6hK1(geuNAO-FPgwzqpHUPXc;>(zx zA@`l+Q#f`o03UHgRsNPbUFMb}%b70BXUPcYDqv}qrl-J4CKHr&3*o1AY=R`Cf2Q)2 zUJgKP@rD3O#cV-`g!oQRH|Ht$ltjS(L02P?!#&dpO`N3UIq(XuaTEi3k@&0v;9<8bK!L831}mX_FAbTiF?435(AP3h?Slz;)vGRFi%SHvxkqnLVv z-^iY$0EA#UPMKlP@e`z&8S5g(U4x@2G6_kT z&iV`{QD&#nx4>(lH2wXzuU{cb)5E=J^XG%Z>Tvn|+4JXzA0KZWZCup;{%Vu?LpMkG zNPf?id*(}>M@E2;mL;CbVNOUZh}D-fNr+nm`QKBFJy zTuOKqyF=R6p>mNhx<4GJX*o?9rUQf1F{+t(oLx7}kmS?m#AVOmpKuqRi8d}F5_gP~K$?!s+WD#j09_&{ zk|v`Q3s=`cc;W<5*g6)yif?HqbDGSr(HjBUZENhdA(?CE;YRn6B{bT! zwYxt~(>YEmnN_SAL)iTTDD#ZiN_d2FR30NtLn|Rk}d-P^DAA7E~_*R>2?fyr`<| zc!tcPUuU;{dFwR;%eqy2Nt>=N+fAOQ`pJ`E!T@D97r+)ykd-6`8}DIVESXV2!XU1S zW|I+sWhd*y$UOlt>G%DBtfAPYBh4Se?~RS%K75HIkI|MvN_Ibmb@#E?HWp zdBlpU&8_J=wUSqR_(jup~yqRPyJkP(oK27`ay<(E~j@MB(XtdqI8klDnR zS^(teU-*drb-sj=+UCxflql|GJg z8Qv4*|7?<_V}FqK`c^96auLQ}p8PS-Kul!b6F9}1N&uCaILbVkB1)wn=Rnqrp;{k1 z#H6Sgx&dPG;$%=_lT)}&yMr<%okkpO9zNZi_M#44MUGi`Tvb4?jI3X#$@rWoU$JCi zh@Ys6V=b$Gzz0rqjWa@JfMu{wtEnT%b(<-@GaO3}^d@9~otT`k*biHMjkEN62LIi#uvzUAY>>I6+Dh7N4uMFXND(Q!L|7tHk53k z6XL;0y462q(`g3``9Fs9^1g-K+q=;ix9pz&+s0;?c_shnC`VE6X}8I1j6J%MHBXpR zc9!XgQhrT7*r2Pz-yft-<@+O?Oqo{88S3ULy26a`2{)F`=`?wt*0qz!=Jnj?27Oq| zq%VNX9voRDLf?q>ny#;jUCISv>wv)vwO24!PuTz_BjkF4RD?w&v2VbC2lNU>c=(r} zsoPG#Mxl@_sDQom40cy-Zm5>Z@&=SxNkg#8YTL+Dm0d)w$56d7WPJL{>4L6}M7`+M zNs=#$(|^8>wvEo6R>sPmUwX`?qrRZaMt~|J|G`m)QpHc{@qd!Vli+OELwX;O=u;qJ z;~LdKwF|#!sAIPHCz2HE!P5v&c6U|n0zV9ep!NquG?2UF0Z1WZZ#&y7w90maZKAgZ zfKxaa4b7^jh5+vzn6iakpT672Hx+9w)>yGv5wGu8D2sKIq22?KXlKtp&RI3O&I5XW z;qL`)3%ezyyjwk%tgGaMYLK%9^ekVHg?7$PWhBI8;{@+Ydu?Aujcbd8NoMhYODe5U60W!fOq zqSB|0;}#9$dJ{OTkbj>#QHWXV-es4xF?9T|ufQ(j`3#)^ku09WmQ~0Xd*y~I<;l-Z zmF7SO=mM-!>&MFY{r$)Nr|`)VF_v)G%O=xhHXf3SlfRLhPF-chsRd1w2%;zGQhN+y zo|wMNf?0i-FrpoynUH<zPu zeXQv~Z*_5#P$7mSS(!wKblvDS6|r1x%nYo$mUUV82qzn&>`rZf*8&L<7l?lj7R7f3 zh*M9JDkb&40?~N0HQ4Ci8`nBHWTSiSy}^$7e&F`Qy;XuVKTJ?Zak-?=N_h?izop;m^zBA58_lH_RSd94smT;nt;N#%$h zGBZFR)#bvR_MhGO!jM$FL`dQW`J}^-I?9Q&!=Akw#ath_(wH!TrgtVVn05ESkj-); z8=q?m)|9&J$HJG?QH(R4X?)10rY4}Io?OZXNT^K!y z!Jlv@OZ<15F5ZB|(j$TWe_nitKNiLNG|zscYZz8L&t~+K-A?dVu>|sQT2zZCEJ&+W zYd@ba=?}o^r%NNgoG&)as-j*OPvsGQISzlLYo&d>U!jjKJ}Hlv)9Lwt zy?*Tfc)^THkGK!_Q#|AIn7ZB(% zQmM5$+1bl<{FK~AYaZn^+pH{?WYpN=$&+4~eiJQw0z{NO3D^BtXk1fbA9in$ME+3nFsGthyNE(YP3ARRTBU_~IlRkJJ1jtAK^LK=arI+?R`N zK1(lPyYmZFkmK!oAz?r;)(BpVy~iK04{*bl7<*Nw73%3LeT5qV`*3!4HaNRYZn6s|csM!o*qv0X^H@JWy&-zCf2R|Qf^!`co z$MjCPZUMvgiI@dCA7sC3JVMr^zH@kZfTYYUADE_FF+MXBg=bxuX}zT|<1gpJF~*~0 zzCat^4!IdYKL@vd{_0}=Uq_Gjx+^~J_@%Mj6`i8P*fHO}ehyW1puOKcBKtZqmgezo ze5!xkIqJw19u05C9?C!Czc-J%x4Jhk4mz>Nbp|0a7Z+&8wbMfb-9@8IYk~#J7&Ok`JZx z?LqYGvOw9$ZOrXm4A3cF+y#6;I>K)wgOCWL zTeipB0~GPtje;c7I*JW$N#joU@DO*%^Atcp@H6DM(A^-d;8SG0%Osm|1c7d3PvC%0 zDJlrtn|&UgBxM3*uB4dLk!%QT0!g8GsLOzUAXC7?OHNxdO)Mg^!5VYa*?-y@);jpI?SRW# z);dqVd;I!!;~UttOTT*a`0tHxT0XcqxOL<|di>_i4~?&C2TPj1dj0Ijr!QL@2Y`e5 z|6~8V=9-5wUCE@hy+EJAi+pi{|JTPqy8U>Bu^1P?>Y#WgF{YE^ge@dglpwvUA}M4ik54VjrHsQHR>j1KP2SHXAU35X7W zK!<0PPyqEeMD>vPB4rq4Ros=+v0c0Zv+9W4qA8%EXTO}h~U2pe(|HdgP&mozH*TCtYL`^55@$b z2=>)x#)l6@zKS9RUhX?Zb@NCnYcatico%iP;L8i!PZUQF@JM;m6NBd9l&VxgS|Ii7IEN4^# zqe*J8Qx6ElRDN`C3dD#q@|Pre@` zsGMX|6tX&7A8{9pM+qw_kFweqX=DsLO1e6=eJ>N0>N3FlrN!6hxbk+mpkO-%O4!e(pa4 zngjoQB|?w9=^rki!+&_pHm8J^win}xanb{U9O3Yaz!oSc>dy&=DBW++UVQ)Kci*{a z(H}QpxTnz%&t84^_{p;u&%S>XJ^9DuA09t>^XvyNLyttsc(~PRh|e9G^3#r!qII|@ zEc{vq64}uhwi-AcRCO)qfUfhR%5YI#kpL>nT%w4WRGgfFu!DW@)WUJXs*5;+ZAa&P zJl4RO!$0t9Bxv#&9XL-0Rt4$;_~U5%YyK?i)LoR=d;#(UUS0(r|pB2fNJ-Gu#muzh?fxwU8sVFd>XX$KQvFG@B z{KWCcF{xw%<7VAe37-vA5kgo+2~_^}H-3XLw%<4G6=K(sQDw7;C;2@ZXXP;J_`q18 z>N(u7L)7X|0ns`UDs@;}PxAUAJ4I0vVQ+j7kksSn-=Wn2z>e88ei!YTG{Ny=R>Il% zFRS+)5D$p`05i#4(~8$Jr#7dF2X_WrH@+}Fhj6RI;xIf^q&Gh)Rtp}inuLoSb7>C9 z^uu0=utBmrq9Xh~qCPp`LcV+GS5x;$?zHQGrR$Ro`R zDB+8)ix?XEKn8`+{<8=7?EyW@P+v)b(uf8CDgwwAbD`8h&Ko;$fLK%KGNE7z+MWPE z0VNbSq`mTzDDFqGIQzca*f=6`+80ziZ6*M7)HZbbKT7~S6$s~Ed$wK{Hjhv_sa@o->R zCE}5ImS#D5n>ZMf%Ex&)TH~>6v2I!F_E)g;&7zeA zAuDfy*Z`!e6F~FPauH23w3Cr$k$fmIjp$8hD|KmUo45BprKCwInXs)m^)>he~mox**+sF zLdY$l>p7$PZll4K4j$sH6R8H6q|KjZxEg9nOF%f&mp8n(NQ??H>g{0rDENfq6=XL& zQm-|pwMS@a;x)Kqx|!XsU{VW7*7EK7{y2_KYcpJ{)8QWLy?f}A_g<5baH}^jpS~Qb z&gNXB2rAno9FCHAFw9)Y^6|O4J3B}E{im)AS_82Q8M6?lc7^@yTw7tf;mdzAOFcT7bM7j(;AEj41vVK-3ky@K4)O<8Oa+piwh&?9Yy{ zeWp>%UK!Y4wpptoAMOAG4DmfYMK)T8&(Y42K^4pXxofp~CaQ1G-y~DyO6?K$vuw=K zP3Z|*wJ({IIpDXCC?-K%5yH`_8yw%mv~`xgodxmrSLwc|ZN6lIehZAe#|a3=9}++a z^mm*@l&C_Pj>of^C!4y=U#rBeX}#S{f8b$Gl3H}+zKGYIw*%eQ?ytcjtrj7@#cu)? zgdD)=o_c1=G5$!&Ml_*-Pj*HF)))YPVXhKfY(#57QVlys?!)|Z*S&1;W)`o0g#}~W z3Qz}-K;3aKmJ57D!5zgMFSxQO796LWa_9#>B=I0pe1z`A_>d6wa<&e<1T&x};^K#C zo-i#6CS~)Pq%f5nrX|FHVEh8!7v=j%bX63NiUHyotP+S3@)X%evS*S1rN7h3uIG9s z*DX$XncKV3rE*YNn9SmC4?HP2N%Hr^e4kG>#~XA5@rrj#}*=9Emzb9-UOIg&?vEKSa+P6kqJHwe4r z=J3BJn8K-wdXZ5Zxl`PT%apOI##lX_j(GkUQV?8uuV_2l_mcKdnz9H&{&Q@{wV>3V zQS{=5fg`b(va){PLV(+nXGhfelH49)&P*aUFo;e@h$G+9E@Q2E3T60rMFyf{r`Ivw zyG$Ao8g73PnNuZ9+y)(ZMK9RyRs0UiNiM^Z#t#Mdt z8@(#x7M9Nbh@`QV+&(l#KhRRk_z$D~BuXaem{q})h2)@DFQ-31T8jOz zxpaoa7h(@F>HqsAQhiLvUCrV^y4s9oFPbo31T)lQi1QZ-HuUB@IiN8o$sv={)S%7ird){H*zx~DGkj0@tm7NaXa9sVvQO#FbsN26i} zRESii6yM4gGn2o-`=H0LbmUw~t| zD|C^@tk(pJOoGV?R07-s9;iCWCJO+^k(Z$bD`Vfx@j-hG3eEcG6Y@aIIugD}@LKlD zW1?Q7(?%mL+|I0YVl)H_l$=Jtt6MXi&z$mznXH1qxR&qhyNb`eFEo6_P(j~&J;X=G zLsFfg^ZImOYbs8_AI^QoIH}Ce>RG;`j2=FjxXImwD6Qu!acNQb^wt-Gy_5^H1jNo1 z?Yt|p+j{l1+!~H7%Ocm;C!`Y>Ym`#Ybd_ItND|cwkg}c&&UM7M1n!)u+Z@uSv+xRG z#0;K>`6G2!jB?~kPu|$kDYU{celZ=a5d<)JMQ|?Iw8!IdCD}WHxSWWA0Wl4eu1U<1 zco(B>2Z(kRY$V%dKJlCARW?WOJ$#3|NK7HdQkv|dtw^8)zj4|djzT-jU>3)uF`i{; zqp9uqSZpFOkKc10c?4kXKfRVHjm|}<>oNg(y*Z;m3+qB;13TccDE<>!lOu{-r}5fA z`viSXE3bho$VnMNdR8bG62e395`fwM__%i8aL9_kU1ll8?7;!qLasFt?=Q?Si%Mlg z{W5qzDKL*?#T{F~%JgUnfipD)FfI|I$H)pLoGA&T|M%!QJ{vT-^5f<+!tZ3jsZ#dQ zy*TPaJM*{G8RKmMVxMh_)BliUGxC#w2_F}f4S}sRte?b5g$ETM1xj36ANFGgb|O^$$xV-xWZo%qCW zFU~i1y3ufyR|rMj)uR6mKmmaOe{c#B1uL&$np9pa$+PugUsJt(#@a>RmIP zo(z4O293<|4M9v(*{=0sT(+P&FlYfV5EZocBOl(TMhz}Xi|5Nt)8YN4NZ^d}p zC8kbTL^0uJPcD@n$R7EUaxaYDcY72Sk74dq=?A7F{i6FaTa_gf!6|ltNzpMnQqHN0 zswD2yjI0%D)seX#2HTv~r&2P(r;aW$$T}l$ICq8R^*gK~y8dCdLY)DjrTH&Sxg13CyV{^2pLQc_IHh*) zP-If`2{=RKYg6BcXlGoj#NFsJ3v;80n)k>u z87ZD|#XU{Jfg$4rI%xR;{XTOH>-5#7q=sXo+?4JCyBSu||GfB4#om=*{=_uqvAg0a zx2kdS3SjSnjqE=P(e!o38=m*c+ee2L*iyW`pSAwkDm1Cgq`_w_IO&5Qf7oZ00td`v zWHmKtcs=3Mt_xL{1v`y_z0Du&-MeAaT+#x_z*_qn{!S@%#d#`TL%m2#CuU^1jnE61 zH1*a4Sed`$<+K`@%A8!jaP!W++qXS#tyAoY*p)mS*vX2P4Co_2ojgf3Q*hpFCJ9mD zb-M6cramz5#DoKwGdvc^(T_O8@K_V)Xw`}k16JV90kk@*A&=K-u`NSx2K0xMDiAA> zOFOmpkha+XP8mlva~^_+rf`JkCZ$~5lj0QFNZi3=PU@j}6>;I9=n+>3YG4+<44vuP zy%#eon}#Pt{T4}W%BfN{(%h+|aA50@$2&f#c_X4v1U{~#W=)ah{qejq>&N*RZB~*W z$nF0PpK^jV;k!4!FvrWO#+yf}ma2l1i{Z(RjaOmoiM!v&8jo1NOAa2DWc268J3op6 zjNRKceOzbmed5RL6VLAO72I>2qxQ?~+xKsO?NX8lj*o%cBQvwHLxNz%tb+gVEIkuP z9%(dK6m#mve`Xa2cBy8e>L#O|B;)Zj%$I{M$Z4K>Q|sy`G2SBxicT*IT>g71xb3#i z;ywy2F7ac)X_~<(p%abQHWmLCtN!Kf^Drg{!Mj^N)*n%=|Cjtn1fYRe4}^~YcUq!* z9f=4*!7og8G&}e9A|Fr6LDdUmKIE>9W9k00doGd^5lj7@g8TzwVzL*T!ZMu=M$VZF z)q5Swg092sz(b_t8h1RK#Q^n8MqG8jJ-_wu0ISn{xBAR=Zgsj2jFdCVI90X!yD2Yp z6^McwX*IJP)>bC7Tt~fELg2N})3}~|Y9&V$fN+JA-d-dzn{qL`nXPixYaM8NYb9{W z-BTf2clNyDYCav8=x$U0F7#)fXPA>~j<`GpY6{GJHsW|ExO<7Ckkl|0-^xiuo?Xc? z3fRGVXeqeh5I{8Mr5maINwAyvdSHE!f-P)^s4_Q~ypFvqN&8msKNatKI_2nxuh&9- zP1c^rpB!MM{87M4WaB^-#N$uk2>iA*@|0@rgkD>h8Vo`SKO_j*xWjrC9#XU_OmBD1 zyz_DEtZP-_R6blOzz{@QM3*+d{xt!{6+Yig-P+Y%Of}ot++x5`QC_!p=jarw+hOWUgS+;Y}Q}30>IHkbJT1EoUv645IMoAi*3`nUVr_c0f1Eyu)hBR zM6`XACb%%GWP0NZi>R1#gw$4-aUm4^ZbJ&EpNq_wsCVk5{PO4n7~5m32?28POQgM# ztDSVm(`Vnl`JUks@bTXLe$@<`E}}ZR1FptsUI82>_HrT@r}M~Xrnc#fDZ#)wOng2+ zhhDOLgyAokq9}=C=4QIQB8vJ%trtc*w*z5O6uK@ABK$nya)v3gB)A$@BjzeAv+3{^ zS=(=!&8(jrnL^{_cvD-=qs5#909R{l%nI~}=4Ol9Ja<1iW`|hN@I-Lxo|R|9Mxxks z1p2tK`Bxqc-{bYE{bgsx#ITG44%>&?vS9RIuODxU?pm?@-ys`eYznfHwV`}AV{TS^ z9S@TcN)RYGVY5m^b}qSwy3~08+5Jt59gDWN2b97r$o6TRXenSMiHDS&@RA;%oRnzf z+S!(@13#rwnwLT*j#J7rz@=khB=!lsw|SpsXHmDHhbC%QxCd9K{H5qYSfkP@B+&!2J!b2@p>mwc95+*&UbRO%x9@UQ z`b%WTJWor}GXp z_HN#^UyGZE>T2=rgH3)2Klt&(j=5kA4}MSLK;bO+w|55HUu&E13(o)NA*KCGSeMz? zO8gF^pZ8FC{1yH0tv$cTET8+WaoHx9`TLx6y~;GuSlz)wH+$@xo_y5bMcW4Xa_bPhsz z{|q2KaylBrxVW%Cz9&1Fc=KqlJ(1c?%;$JWY3D*$gW87ZGtKB;)BkmdZSAmuyjbvA zNipQ0^m!;G7QcOMx{udd(TYr^kA^gji$>zMOIOEq{=v@up2;|Jrx(3WCP|q+_-3%R z(ZeL~^2?QNd9XdWKe)GX#mWHu+4x_3^#g>}%C1^x2R>`gn?Fa%)%}s>0sFS}O0xTl_EvBBQBP)_{PhO6hVt%H*K4*yv7|0& z)l2PN)~9?)yr^{-wmB_+ySzbh#rIY1eK*KFbA^<{rZI99A;lKeCvdtN zNciyUugMvSVQ5Fht7Y`S@&2-m;5dCNz2#=)jG1qfH+ZrIWK~uW}Wptz-O20xPeAi z;`Nv(CkC~(Ch@9&Pr>pS1jjwrbr9i1F6&I&gdMW3=7}Vk`D+z4Yu>Y`O^_!99r1hB zF{+oTvDw`35UvCo z(cI$}jqfo6#K5AV?mcGXT#K#8UuJE23tDRZy7TcG2o-RJ{|^17b7td+)5?uxOXV1B z#I0(BndrEl&yp!eHMn{?6o{Nqa-h#Dt`ij2F>dS#45aT8`b)l-q-}!U$^8T!>zQ#q zq4ct?Xn~zke5xZ5>#OmrAFUs+db#Tsrd>7E*z~xziYLiz#8v0iC!Rt}3rcKAxy6su zSwXcie8{y;wdf}fAZT z{d#tS1wdn@hjR}MplwmtdS%ujkM9EqL-Fq>dS+k1m0(CmThOm1Cw9pCetyP~$IT(P z8$9m|_>k_UqRgh4qJT+*MQK;`OeuG)Wu#*Nu16cwZ+&x2DVBt=2M0VnG=Lj-v`R6T zYod?Zi8eXTXAAFeOJ!%sScqM5s=d))MTsQ1y-~9@p*u4%R|G$oyR`8#y7!>@R3Zf4e{b zdh8G|?ANzc6C;on34?LR7>7t{IXTLWFM4knr_B*|r3Q(%ECw~29gsk*XAvRaN0F_S zq`$~YAH63b8;HnR#WxP;1W2ggmP7$W~i+zy+}wFcWU{c?QN#zxEO&IB`v|G;#1l4fh9 zzL0*KB|?rf@jKYE1Q+fYj@xs?x87XbrG)f3%tp-PyFmc1O9`l|LHOfUEwsUwM#_dZl>mO~xVXq7Sg(;3G_oRRqa-aS%qAIY`p6ef8B%*9(v^Us zTmKFPXZ)`%5vBXaaUMQr8{QLK$Ga}sd%zpT0xBqORt z@I|VnQ(BpUjt_>(KG#T|5*{H}z*LTrb3b+3#D{e82Peu%>c&f^mLT_YPSceMyRUJk zf&|?*U)ZV?zV%h1D!zp{n3B~0cZdTXp$V!l8p)NKrLTpJqMHT1+bf~M0kI?!`S z*`Pf|oDUbex5XLaKy0N*Uc_Fm*D8m%Hj!T2L{!9@1c2;$_jTv>#FvJ1jSB7!oB{&O zz2#olanyNz4(H;dYGjvrnU0Dn zrY{|vva3T%H%i?!f+?R`4nlJ(mRifjX+XkoTUUkslX~q*45O@JNqK8ub0Du@hHWZwiPJW~ zmYN`VgrEn9=-9K+LDr7=&P3b0+0S`VzMq5W9Z)Fr0IkQyp}S`4Y`c={Q}Ak0xP*Ni zL~F_kso{SL;^30BB%AC}C8gUp=Wq}=cXsa9wnNURKX~4UG{o{B7ugIAwn1u1sXV7? zHR#^qc|_&y@i*3IXvUn=A-Hh4>ToOM6i8uqAI0k*td0;@VVe1@PRAoYmqPJX zNdjkFgG=kKjaMe@qgR~E8r@?zN%;Rj9GFRBu1HrKpr3J>ui+lcJnU1HVAg-Xx0W5?aIm08*noS4SDMyhu(eWSoc2ShbL^ZiRD z#7%_5fMh+gIPcPf-Qcas))z3P!G>60?N3*3%k9P{+^Gd=JG}gFJVeUCd0feIPFt_2 zg1J=6!bM8w0JkEo6Bd1_@M5$=PA#D$nv$&pr*K-=zc@I;s1=NHYr@{*Xb{dDwwpZ3V$- zLx;@tbKNiy{aV}V>ka$51VUCUE7|n+{{D5z2ULMf=IlyW>!hWEtzk(>kWtLi@-LCE z1apn>G{yQCm@pQ%XPRN2A*R5K!quEWCsNW9O08@x@0#;(Gy3f#vLd)Y09pC>9rODx z{qCR}*EQ!CmgS%mj(&sgOqszssk?jNOZL?>MNtz|81Rl#MX6xrYWuE&_vS5^#D^TO z9a0|1r$;=wZT8sWn!s3bb}$%7-t--=l~Ah(% zHUzC_tgLT0H1S(>Tg)>ZfTG!bz+Oztcnj#$ugk0?ZNt=P7Wi6rDB;bimejB=7~ zZEjnPzJsvZi2WIQ1fV z)w)swD>RoC+iIjlv)tNOZ;@+)5*GUe$&%e0U%`pIlomP~4WX4hq8Oy&Wmyrf3;l_u zp{@6!y{hId=$wiMjZ!sbBZC!d^ZC*&Z>Iv+ULO8h&o-$F(Qv$(O3Bb%}KSF z^*U_QlJirgQ+Cy*?(H^h`EA;=luXCjZS1KVc2#48Ly{JVTookpp%Mj}GF!Z1nyEk> z9b)G~tlQqb>}I@e5 zYbk0aTf0_60mv>JeNsi!ssQ~4YprpO!Go4UwE9Xflp2FU5tPHW=*R$GbKq~&61A4} zUMv&7t(YfvL)xfcsfIrG-2{cvH|w`Z+O6PP*`hS>UE$MZ6t6>^OlpBu+A6D~|cZtR(RrF}SH$shR{ z?g=#1>8>#~-+29s#y?YIZs8Pto|r4tvF+B1E^b|~i-*P;q1MA!tvv{t?9+1}PjJ=p z|3#g}BCbeZp7{BL){`PfVHH8H;HWfv~LHr+?dir0f&Ij$Q%Tjw6k?5X~T;-fs~%zQj2o0|nU zZWz-BU*Nu8AluaKx60m{RF45;Q;n!v79nS!+sr1r{%Ku{i~k(Z$6;O+9Z_KP$ULW> zFJ&?iyu;Qn>Ukn;qlS~P{P)TKHb05mWVI;QPgnK*5WxttHx>Xp<22No%XEzHvsKac zy%6@HHH7fa6`AN@A9ORXa|`$t;GdtLpHhn}w8?qnhB`1f%~)ZSwwP~|pCLx@qodsb zWiat`%t)$)=6;%U(yyf2B23Vxy!=fBghr7Y{m-o?I#Gbb-Hc=HF zI&c8q5j(GncwxVTxsWf#^tWu@pOjgek3kqXOU_**!91Rs2c)MG4lRAzEw~}#`ZLT0 zY^oeKazj11Z_1!;}?MImE~J_97E_WTmooM%dl-lN0KAG1YxBjXIXx;ZE_GPmGT|< zb~{mRgnBzcPC`2*snvmbZxOXYXf`&2j%*$!p+7d!|C&n@MLD84PKsRhEJ~8|I36nl z@5bujt|Ts+8V=^gJZ=;SC+|Q^NkAFMds;J4@|~MwL?Y^OnI`Z3x6UNe5)!hpLDSLo zQa#A<60TvE+ij#1vX8-aN&OvJ@<`L!ZKIKf_%zCbi+!wlq}7EyYm}FA-?A1apd1E} zR}+90SJR&-09R3fKT87sAPx9TBJep>;7^c&1|8UKLmUKI%WY#{E6a&Dmc5YVc}y?5 zk6e|a;Co-9tX7r9Y?;;_p*WFQQOqfg-!a*Tm@r&L75*SG@*DVvsET@w{X2OmQ>h;Q z6MEBNt;qI?NVQP9hE|a@!Rib72#6k_r$77l%S+Ds+Fx>H*RDRbYk&UWuKnS&yY|_~ zckLP!y-CJ{L$_wGl~uP!lkx}raXZ`Wetimf%6&kB5;g$6ji~tTWKyLIbPIt?kwtC? z_w&&#m7>4=J*}m`N3yA#jj1%qC!6G0LA}?rsx+zZ|?y0ksnRHFIZ?UVe zZn@W}i-Jq!cYRW;adu#G0jAsyurSHq;Ic}!=3H@31)E>m?oyWx<5igzCG_(f6{W?# zBbyf@%lX-83C#Mbi)Y4pBxBT(Q=~Ni2O zKc{M0@}8#B=s@-HbX@6;?^j>ey-@uD32kE?Ky5z9sb&jc7eg5%3^HfGi|8~tr|itu z(E`ajP$~9)!^P@X#wt~&YFNOEQ(UH+1L4T9ph%%#qQ?hb8&Z=61C{9&3q(PQ-@3JI z5>(o0*gU>nE}~P7E7Lk9D2NubF&U;4GK1LBy!W;74aaRFBB5BU|8_bCqm^dJ+-f^E zU{BsxQUEG$-@vZBiax6#kf2jG{^%4Q645`7xF!&P*C+(EW@-UB^Od6%ttEZ%lQG`1 zK8DK7X-si2p7L?+AN+vp`smdCv)1oiHdY^py;50bk%5(9TeQ;3kf~OS@FcIBs^sVm zouk^T0$sl{%Gr;83NyH#%^~jO#iA4X9tC?4FBxW{%GJjDvWD zP{5j{T-pUioka<}KgUdS9z0Y4qe(dO36wmc(bPRIKdMh(>K^e%P#70abMeMwB2k_wvwC!RmKsI23F3| zd)I@7Lm6Dbc@;n7j0@WD+;?o88P7W~cr~^Sg(;NgFHFE6Hyu`i6R0_ZS~HJK>YH+WARb^Gs?G zibj{3nT+&FG@K>*6fPtMoqUcNTd7P_Rm@UKdSFrGW)@ z@R9Pzm(3Jc1{X6{F2#I{HP&->ZhH@AcbG11?1jXreq>HQgSNy8amkc2z z{#{2zgF5)y-Z1nxuSpYe>U{jfJ?F2lW|F63+>_Vn$sWD< z6Yd(98O8C*chJ3%6}WSPyeP50kM`=(oKEPcQ${l#29H9kKafc}6m0l!X}~XQss=N> z{%l+5THrUrAM7#QbTsZu}u@MAtx`gYLw1k zGHJ17j%Wd#SGovfzhKj(_8I28I^(iVvjT(($){6$giP~EfC}^}$Hh6fBQ-$NVzO~4 zi+4)tkhBzv zbC_Qe|M(ZbN{&hC75bi-1hYXkskM$~pc}5Jfi7A;c0PA0>Q=R8r#p9PN*>XbfFf;1 z^yKyH+r3r!Rw)yWzCt$FC1ADTA%9Wk)tZ0VC6?v@1!MmW+9NsZCGQuz8u1War)BeP zIjg5_tm~^e59#Aef$3}3QH+qQ^L(1TPb&wx{_%NV%E;-5JPk@oAemjyit@d5V3Q2j zNQS4pwHIy~MqAxhY}xH5Lc>{O4cZEyBgl$bs4s=URaYtXVD3_~>vM8zEI)&;n9M&o z-gcXmR8fg1o+ zK&!uJ?UeG-zp_KltaY6ZVOJMGA1=K-^UtGJc?+TPw+g+GQ7Kx?wU&qB{O}-LK08Ft z-Nw1U#G2x#WhjfE8;wXW`SoVA+#)~yK0Twdxpz$>dg6lNl%#{{pcesAP0G;;@NaTf zNW^Fxk2?j*6ljyN=(WHZ`&5gOK6~}W)cHAqdx*s#^$t?$l?0 z7~fhDLDvxC0Z+CC8EP*c>I)V1!gj7<2%vsHBP-YLUkjJ%zaK7_o{w;m8ygl6{*r~> zpy**A@#`;abj3ZYo41f+uv-$cvg2{YH;%csy{4UKogu^edsHUltl%(N@kKr^KI-3- z3YC$yRv1* za=BLT%Kh_c)>p@O_~!yH)W#fp4c}v7Ezm z7v9X)Qt^k9NHDSGI~{Ql;=(CExqTS>?&tLg0|BH_Eg=XCF*F;pAMgKXi~lM_Tx6QNX3)n5TUheIU=h+0^S%<0x;`)r|1s7{ zoSe;>o9~&FGJ)YQWR|nYQ#^!6}krLFg8xX4s~Ol zm;NS|$s8qkWn-zuq&&_RSpCjLkNnSz?^rw819HbX(YZeFahj)-Y{C9!rj{16H|j1z zdlGmITyHP`=w=$8WYt~g>4ES3zj+aXM=kdqdeqjR)%{N|cc%SwezdDy zXlbQ^3vCo%_P#!Aj&4Kx1;mL7-QK0@$6za)TcMULzq2NRM64&N?qiQs@hI@A)|Rba z_5S6yzSKk32&Z~XmClf-bH}qPoI?x-x%AO8l1#~uv2cMIp-IZ%ZLIxJ)DCWkn+^Qk ztuH)?{P-b76+d(^`ZE)0f{w*GdQywadMq5=DV2F-eg%QG8zo$0NMAS)2l5D_lcEI0 z;YnlZmmd0BSYz9<58R?#2*3)e-?;4sL@#tYGOt>iYkg|HKx;*AuDA)jH>K-kH@GbW zzcI^tmdL_fNgO}d(!%VX8)56H0hv?4u53O_pYV{C<@;nBRj(xxXq}_ewr16rad1uF zEbV|2st5jPhMhC%B7;@H$7A3EDJP84F3fx4b=$za8ruO( zi#uvgXzZEIcI-A*v(wl78#YpY*D}Izw6<$cR&@Voi=Vh@yBAK$ziY3?~ zS=mp_%#`IBx;}fySmG&hcFsork$noVMI{cllwfKlO(Dm!TOGG5&x1VzmRNI%AE7=@ zmo09*I2d*EE2XaD{WYck9X-ajTk3iXIhajEo z=T^%>iV?S{bt6QJLBUfUf&dNv0*Q{n`P%l0?Sb3Ns$}q&OP{Y_#dygGtG90wAQw!9 zK|z%<5owB&g3xKo2FWRJr{8x)Egr$(F$Dq9$BzsYhQY_s#vUJ^?7~Hu!gKM`4BQ>i z;R62vF-AUsogLP`E?m_NUBr^Vzw9h#MsUlKKgsvYJ4##*U&#RcNpOJeHFVC%8EkJrzIZ zeP-h(qS$qZ_80(AXv*Z%NQ1WBTKS?O_vO?1HCYzDweXXgkGo&efi4L>+^x$y4BB{? z8vpn3)^PwOybNx}5OY1khLbg|{4|Bcaaa;on=)q*%hQVpr-qpj{Vrz26=mlh78F zBma63#1cvn2bApKsM{0Vt?6qVX`@WC%5=5dGYc>OsNg|Z>`A!z@?8q#b{JmLtai#>?~n< zlE;h%0V8V$yX2@*KuqbK&r)x~(j162&AhoBdd)5HSDyKn9%!NPRcEw`UT(RTZW`1I z1!_cUtn)lOkK4X%=F#ppWg~9=9PsfCX_;Fz+aw4-QM&B-+IN>KyCstA2T3)pHbYH4 zeV|J1tt0kL5@F;NL7pwlXZ4OWRMhpBkoT#qf~4@A_h;#cbf#o6uDVVH6)>UWLa2Serfao@wfIv-b)fXTTe6J$ zI6wb`1BVIJ+$Kv?7iV*=S+HsNpi$>$r7D5T3V{4q-!|Mix+k+|%S4=ZF(;mR9MAKd6Qyx=9<4KZFDLe;nQs;YHk1MOq*GHDs zYBhaQ#rf6JwvTaaKW~|yx4J!9HZR1U)k-Bt2)gQ))o!1)v`e3>@bbAFF_l-6pLa>hVh3{E-LVTz zrHUpS8=2f}x<&7Fi{AMy(kZoX%{v8)<$r=a3&Ex7?SF2696R=qQvhAEef6fswy8t= z%8=f8L{p8<(4nH;b)bh{-)V{VH%BrMetkUzZ*RGTU~+5t)P@;3UUsnz*eF@Vzei#< z7XZ=wo#@DTvqqTH5%by(F;nR$wH9<&#Pfz$_R>S)0qmD%xo*1-b&?s}dwAUSOWEZW z-+K3uu$OnF8E)yL&BDyB0v9!>e`U7TiF-9`zPVi5vEVXx;O}S=mv5@L)(INr9NJl4 z;rRSD5q0y{#G=xQkIyw=Xs_ODy=k?C)AqvAlDY!P(qO|oxmzN*Y?y4n^9+pT27%@+ zX+lzLmUxNImZo*I(b&Yb!&bSda<^2YR3*g;&h1+eMyWt;{p#{=I6p}kV=_BS&ZRJ? z)S#uY94~^d6K-i%In~fkc@V=yg#zc}14>MN6tjBDK*`SqvmK!%I894uY{J|qTB3*Y zv$zi}sa=!iKaybvuXX)?!(GG*4Dl#u-V9)OGANNSpT=~VZwS|H#oFB5W z(Q6G3!42N1_pHz1r~4`l?5WEm=x%8=4-WlRd1C|?{ocCr-|tBRX%u-5wgDw!? zW#~a;?4bM4fTr=PJG=7bFnW+LF%8SZt`7mWiV$&d^LzrbO+s9()wm)NPBrGkb`g4mxMw(On{)6ks1j9U z3ToV(ja4M7Qn%Vmlz-FWP`{}gs)SVt>kdxj%)5Mqns>fCrEf}9ae1QT)e58tUWm@L z3bqsJa-bc0gDw?k85~3+IaAC}s!}$(jsQ=Em4KbvrLrqgTvF4XZhQbROI!PWvmieS zE_sx)zZn-dqf%KP&;>x&6J`-)grUrbwQ2l+_(I*IFH6U@mgGeSlDAhT&zs ztJzK*sJZFd{QH-0fMC2qLOtSAQ|QWo7BH^+jCr0gZ&6zxz~m0nL2tz}D6K(-K0E_pF?=O=Lr963*HBV#vM9;5%=UzH;Yzaa)FF2Qpw%gA~B{k#h zFlxD(o%cBpK3>+ejR~eqpvf{d#_UK~37cC{aR{26&+CM#5HKruHag+sASuG>yUrH& z8-Rs11eh|+6%N7CFf0=5U(6~Oh$&@qD7VgUX;}>X)y3x#4h>W201q5GTRPi9=?st6 zpmL7B8Dp_$R95?$8In;uS|oxIZ$MX8xNC%)=`1@%As`iTN^03ju|<1ogXKO%XG?#A zSEgj5dnUGKWb)5;i)v_&*MfJX;hamI*+w#$b~g;a^ru-h!nDPlzmP633wCPI zy7Iv+{y|$T3!B(BZvnx@G9-Y-C=!rM_N`6p8zUago(Xoc zPn|nFS zj`Olr;~=MD`$jg<=#S_Tlx88tLax-ooHD}kRwUs(2F9=6#xL1Q?TH+(umbO6U`@_M zm(O2P9)IWVkNCrx2`G@7575oZ0fjp8Q*@XYl;nL)oX3Tp+)uv!WB(Huh+4M(6~t)heK_pfQg3 zFqf7)<4jz9yd3^3VRLBR<;WR_m3vz0$m0NN1$ER8Uqv!76Hz|Z?xOO?J2rTv0}QNJ zkN$R8>QfBrFU^pB;|rG4NF@MF5imx-sZN;_lPFJ~Rm?L`bqF0y*ymYBaSV#Av0X5*qRFAir*pC1nZUeyj8Gkl)U>-efETgR}~jy#w5OB@+;MRHPr0e zp_-kkv%9Wit1p9rk7UMbld$n`ZE3!`UYXEkbcnj_l)6^emDIE0dCyN}US7eqrl{_i zF_KY$BZL11-X@!zOOQu-PLUG8%FLtX9OwxVHhUrPy`mku;YW2|rBRPZ8I~4Gt9z^p zZVrUwK&6$DekoB9KK3NwVn|pvJz4Y@1<>Qk!YQ|cJC-X=qF_-8f8`2JTF*5Kb`8*M z<*i&pyUfO?JU+%`x>CpmjTpwt;dir!W3facGtN*E9eZ;d9nmM>M~v9!ZDoLYQQbzz zEIelS=m|%_N0WCB;it#7lH4}+B&jkK!F-QMsTz7#;`fR?c51gMWhkvx7aH^_=n~&J z!)X({_=p6m>{@y`wn5RPu|hm0HX<#Mnnzf|@8KpPtEVQ9q;$S?ikWj~!SNa3LX7sp z$_i6VsPk;(>|8CA8R@R&xYxu@t4M71Pv#(E;^Ogkz*yHMbHt=5!rgZa156dK7V(mr zm&FGVhU6xB#ea!@5}k9M>*P51j$rFArMp8 z7VEttCwr5M+?gbP+dWeE@n2PR2WCeD!Jyq6#_l>`NT<4dO^XuyjEI~oLm2kB0|#t2 z27pm!(!Wt=n@>%cab7595I&$5&Siw!bUE@mc8g6c$R%0Oe*{Ce4 zVzR(lZl-yES#8d;V+_KC26u0NeP`$Xf9%}*@7IHScmHGO{vfI5A8&lYq;EB>V9{9) zB0BM4z`H$2B24JGck|1e4NpqjAaoUPDosvG^;SI)H=+p2akfBUcrQ*yPGX5B|^C7>Xv? z*sFI>zlj7oomJbXU4Q0oU8C5rW?gIBSPSvb*(tk5x<`PXPKcL1=47P6oTDu(sJJ_$ z%%oQx8xPZP*IkBEmxyfzD0K$cf+Y&s0Q%i)oPq<+n0Mq7S^|={90K*0i=o@7C7&FE zE0!9*bVWnE0r_$fOQC*w_>?m{ONY)SF5IFZ{W+1xPu*B@>xy)a|Bpk72f|*v*76vx z*|M&(0B%{S?NiJcju+lI_~Iby3_Ik}ZyuT~L-N!sseQ|(`bIPq+5S6`#H59!Liev} zpWr(2P3Vblpo!hB!k3?zg%cz1OM`1me(s=m;|re>qK;IU<{?_=FXAA;03}UOwZQzi|2_j0X!+PE<>P3+y&!1IOzAZN>Pn;%={yMYtO)@3b&gRb#;)A6B z+tI<#hnt664~K^zceV}}hvi{@I61o2JqZ6k+;Xe5}h`7^ncr%8N6n766u_B}fM`~#D%&r~S| zOvi%ZvgwgpdzQUV17)_Pn()~NVQ6aU6sMwH_QOy$ZFVN;{55M44}5{S*?r@Kf5qya zYlx(CL_?gTOyg3t84*vb`?!nFpLlmqax`9T61)yVM!kQ755nsK=s{0|MLhzm2c~mB zlT5A(Xy0;8uI0`Up2b*nfgWr`oo>gk+7bRLRBNxw_}{iu$QG#D%juJm`h3wL_ zFj{)CG<|Y_YXielJ6Ni@2Ri z(9TH~gzTU)Y$DHhO;}>x#L{*KTwVt36YrPTAXmSS-F53{A$DF;W+I(hX(4Psa&n3*RIQXdtkiF-p? zIidz98S_VgiV_%t$(Gj`o|kR^ioMah2cP@Q1#GnFxpJsoHxQi1zkC#qAu@wx)iuUg zUzc79*3`4t+wXgKWg8f>=|Ve232Lc6Vs=&QIhA9Cty;vC^G z%0A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
    n&zp&(8%j{WxXW?Y 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 V+~WTqzfJy~EtLNogd#}e{|{Ts35);$ literal 0 HcmV?d00001 diff --git a/Extension/EasySpider_mac/images/icon-128.png b/Extension/EasySpider_mac/images/icon-128.png new file mode 100644 index 0000000000000000000000000000000000000000..82df508a32ac3ec387b1196cda9ae5ac6d49b89a GIT binary patch literal 19077 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 literal 0 HcmV?d00001 diff --git a/Extension/EasySpider_mac/manifest.json b/Extension/EasySpider_mac/manifest.json new file mode 100644 index 0000000..0c517d1 --- /dev/null +++ b/Extension/EasySpider_mac/manifest.json @@ -0,0 +1,78 @@ +{ + "name": "__MSG_appName__", + "short_name": "__MSG_appShortName__", + "description": "__MSG_appDescription__", + "version": "0.0.0", + "manifest_version": 2, + "default_locale": "en", + "icons": { + "16": "images/icon-16.png", + "128": "images/icon-128.png" + }, + "background": { + "scripts": [ + "scripts/background.js" + ] + }, + "page_action": { + "default_icon": { + "19": "images/icon-19.png", + "38": "images/icon-38.png" + }, + "default_title": "__MSG_browserActionTitle__", + "default_popup": "pages/popup.html" + }, + "options_page": "pages/options.html", + "options_ui": { + "page": "pages/options.html", + "chrome_style": true + }, + "minimum_chrome_version": "10.0", + "devtools_page": "pages/devtools.html", + "omnibox": { + "keyword": "fwbz" + }, + "content_scripts": [{ + "matches": [ + "http://*/*", + "https://*/*" + ], + "css": [ + "styles/contentscript.css" + ], + "js": [ + "scripts/jquery-3.4.1.min.js", "scripts/vue.js", "scripts/baozhuangscript.js", "scripts/contentscript.js", "scripts/messageInteraction.js" + ], + "run_at": "document_end", + "all_frames": false + }], + "web_accessible_resources": ["js/inject.js"], + "permissions": [ + "activeTab", + "alarms", + "bookmarks", + "browsingData", + "contextMenus", + "cookies", + "downloads", + "downloads.open", + "geolocation", + "history", + "identity", + "idle", + "management", + "nativeMessaging", + "notifications", + "privacy", + "proxy", + "sessions", + "storage", + "tabs", + "topSites", + "webNavigation", + "webRequest", + "webRequestBlocking", + "unlimitedStorage", + "" + ] +} \ No newline at end of file diff --git a/Extension/EasySpider_mac/manifest.json.bak b/Extension/EasySpider_mac/manifest.json.bak new file mode 100644 index 0000000..931d243 --- /dev/null +++ b/Extension/EasySpider_mac/manifest.json.bak @@ -0,0 +1,78 @@ +{ + "name": "__MSG_appName__", + "short_name": "__MSG_appShortName__", + "description": "__MSG_appDescription__", + "version": "0.0.0", + "manifest_version": 3, + "default_locale": "en", + "icons": { + "16": "images/icon-16.png", + "128": "images/icon-128.png" + }, + "background": { + "service_worker": "scripts/background.js" + }, + "action": { + "default_icon": { + "19": "images/icon-19.png", + "38": "images/icon-38.png" + }, + "default_title": "__MSG_browserActionTitle__", + "default_popup": "pages/popup.html" + }, + "options_page": "pages/options.html", + "options_ui": { + "page": "pages/options.html" + }, + "minimum_chrome_version": "10.0", + "devtools_page": "pages/devtools.html", + "omnibox": { + "keyword": "fwbz" + }, + "content_scripts": [{ + "matches": [ + "http://*/*", + "https://*/*" + ], + "css": [ + "styles/contentscript.css" + ], + "js": [ + "scripts/jquery-3.4.1.min.js", "scripts/vue.js", "scripts/baozhuangscript.js", "scripts/contentscript.js", "scripts/messageInteraction.js" + ], + "run_at": "document_end", + "all_frames": false + }], + "web_accessible_resources": [{ + "resources": ["js/inject.js"], + "matches": [], + "extension_ids": [] + }], + "host_permissions": ["*://*/*"], + "permissions": [ + "activeTab", + "alarms", + "bookmarks", + "browsingData", + "contextMenus", + "cookies", + "downloads", + "downloads.open", + "geolocation", + "history", + "identity", + "idle", + "management", + "nativeMessaging", + "notifications", + "privacy", + "proxy", + "sessions", + "storage", + "tabs", + "topSites", + "webNavigation", + "webRequest", + "unlimitedStorage" + ] +} \ No newline at end of file diff --git a/Extension/EasySpider_mac/pages/devtools.html b/Extension/EasySpider_mac/pages/devtools.html new file mode 100644 index 0000000..1b1f7e4 --- /dev/null +++ b/Extension/EasySpider_mac/pages/devtools.html @@ -0,0 +1,14 @@ + + + + + Devtools + + + + +

    Devtools

    + + + + diff --git a/Extension/EasySpider_mac/pages/options.html b/Extension/EasySpider_mac/pages/options.html new file mode 100644 index 0000000..55f1643 --- /dev/null +++ b/Extension/EasySpider_mac/pages/options.html @@ -0,0 +1,17 @@ + + + + + Options + + + + + + + + + diff --git a/Extension/EasySpider_mac/pages/popup.html b/Extension/EasySpider_mac/pages/popup.html new file mode 100644 index 0000000..0796bc8 --- /dev/null +++ b/Extension/EasySpider_mac/pages/popup.html @@ -0,0 +1,15 @@ + + + + + Popup + + + + +

    Visual Web Crawler

    + + + + + diff --git a/Extension/EasySpider_mac/scripts/background.js b/Extension/EasySpider_mac/scripts/background.js new file mode 100644 index 0000000..591d00c --- /dev/null +++ b/Extension/EasySpider_mac/scripts/background.js @@ -0,0 +1,68 @@ +//此变量用于监听是否加载了新的页面(包括新窗口打开),如果是,增加变量值,用于传回后台。 +var tabList = []; //用来记录打开的新的tab的id +var nowTabId = null; +var nowTabIndex = 0; //重要变量!! +const extension = { + ws: null, +}; +chrome.storage.local.set({ "parameterNum": 1 }); //修改默认的参数索引值 +// chrome.tabs.update(6,{"active":true}) //一行就可以切换标签页 +chrome.tabs.onActivated.addListener(function(activeInfo) { + nowTabId = activeInfo.tabId; //记录现在活动的tabid + if (tabList.indexOf(nowTabId) != -1) { + nowTabIndex = tabList.indexOf(nowTabId); + } + +}); +// 监听来自content-script的消息 +chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { + if (request.type == 0) { + if (tabList.indexOf(sender["tab"]["id"]) < 0) { //元素不存在加入数组 + tabList.push(sender["tab"]["id"]); + } + nowTabIndex = tabList.indexOf(nowTabId); + sendResponse({ type: 0, "msg": "Get!" }); //回传一个消息 + } else if (request.type == 1) { //前台询问参数索引值 + sendResponse({ type: 1, "value": parameterNum }); //回传一个消息 + } else if (request.type == 2) { + let message = { + type: 2, //消息类型,2代表键盘输入 + message: { "keyboardStr": "{}{BS}" + request.msg } // {}全选{BS}退格 + }; + extension.ws.send(JSON.stringify(message)); + } else if (request.type == 3) { + let tmsg = request.msg; + tmsg.tabIndex = nowTabIndex; //赋值当前tab的id + let message = { + type: 3, //消息类型,3代表元素增加事件 + from: 0, //0代表从浏览器到流程图,1代表从流程图到浏览器 + message: { "pipe": JSON.stringify(request.msg) } // {}全选{BS}退格 + }; + console.log(message); + extension.ws.send(JSON.stringify(message)); + } +}); + +// 打开一个 web socket +extension.ws = new WebSocket("ws://localhost:8084"); +extension.ws.onopen = function() { + // Web Socket 已连接上,使用 send() 方法发送数据 + console.log("已连接"); + message = { + type: 0, //消息类型,0代表链接操作 + message: { + id: 0, //socket id + } + }; + this.send(JSON.stringify(message)); +}; +extension.ws.onmessage = function(evt) { + evt = JSON.parse(evt.data); + if (evt["type"] == "0") { //0代表更新参数添加索引值 + chrome.storage.local.set({ "parameterNum": parseInt(evt["value"]) }); //修改值 + } +}; +extension.ws.onclose = function() { + // 关闭 websocket + console.log("连接已关闭..."); +}; \ No newline at end of file diff --git a/Extension/EasySpider_mac/scripts/baozhuangscript.js b/Extension/EasySpider_mac/scripts/baozhuangscript.js new file mode 100644 index 0000000..e8a0179 --- /dev/null +++ b/Extension/EasySpider_mac/scripts/baozhuangscript.js @@ -0,0 +1,276 @@ +//表现层的处理 + +if (window.location.href.indexOf("backEndAddressServiceWrapper") >= 0) { + throw "serviceGrid"; //如果是服务器网页页面,则不执行工具 +} + +//返回element相对node节点的xpath,默认的node节点是: / +function readXPath(element, type = 1, node = document.body) { + try { + if (type == 0) //type=0代表默认可通过id生成xpath type=1代表只能从根节点生成xpath, nodeList里必须使用绝对xpath! + { + if (element.id !== "") { //判断id属性,如果这个元素有id,则显示//*[@id="xPath"] 形式内容 + return '//*[@id=\"' + element.id + '\"]'; + } + if (element.className != ""){ //如果有class且某个class name只有一个元素,则使用class name生成xpath + console.log("class name: " + element.className); + names = element.className.split(" "); + for (var i = 0; i < names.length; i++) { + if (names[i] != "") { + // return '//*[@class=\"' + names[i] + '\"]'; + console.log('//*[@contains(@class, \"' + names[i] + '\")]'); + elements_of_class = node.getElementsByClassName(names[i]); + console.log("Length of elements_of_class: " + elements_of_class.length); + if(elements_of_class.length == 1){ + return '//*[contains(@class, \"' + names[i] + '\")]' + } + } + } + } + } + //这里需要需要主要字符串转译问题,可参考js 动态生成html时字符串和变量转译(注意引号的作用) + if (element == node) { //递归到body处,结束递归 + if (node == document.body) { + return '/html/' + element.tagName.toLowerCase(); + } else { + return ""; + } + } + var ix = 1, //在nodelist中的位置,且每次点击初始化 + siblings = element.parentNode.childNodes; //同级的子元素 + + for (var i = 0, l = siblings.length; i < l; i++) { + var sibling = siblings[i]; + //如果这个元素是siblings数组中的元素,则执行递归操作;arguments.callee代表当前函数的名称 + if (sibling == element) { + return readXPath(element.parentNode, type, node) + '/' + element.tagName.toLowerCase() + '[' + (ix) + ']'; + //如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加 + } else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) { + //注意此处,为了防止多计算了插入的操作台的3个div元素导致定位错误,这里需要屏蔽掉三个元素的索引号 + if(sibling.id != "wrapperDiv" && sibling.id != "wrapperTdiv" &&sibling.id != "wrapperToolkit"){ + ix++; + } + } + } + } catch { + return "/" + } +}; + +//创造div作为选中元素后的样式存在 +var div = document.createElement('div'); +div.style.zIndex = -2147483647; +div.setAttribute("id", "wrapperDiv"); +div.style.position = "fixed"; +div.style.boxSizing = "border-box"; +div.style.border = "dotted"; + +var tdiv = document.createElement('div'); +tdiv.style.zIndex = 2147483647; +tdiv.style.position = "fixed"; +tdiv.setAttribute("id", "wrapperTdiv"); +tdiv.classList = "tdiv"; +tdiv.style.top = "0px"; +tdiv.style.width = "3000px"; +tdiv.style.height = "3000px"; +tdiv.style.pointerEvents = "none"; + +var mousemovebind = false; //如果出现元素默认绑定了mousemove事件导致匹配不到元素的时候,开启第二种模式获得元素 + +var toolkit = document.createElement("div") +toolkit.classList = "tooltips"; //添加样式 +toolkit.setAttribute("id", "wrapperToolkit"); + +var tooltips = false; //标记鼠标是否在提示框上 + +var defaultbgColor = 'rgba(221,221,255,0.8)'; //移动到元素的背景颜色 +var selectedColor = "rgba(151,255,255, 0.6)"; //选中元素的背景颜色 +var boxShadowColor = "blue 0px 0px 5px"; //待选元素的边框属性 + + +//右键菜单屏蔽 +document.oncontextmenu = () => false; +var nodeList = []; //已被选中的节点列表 +var readyList = []; //预备选中的list +var outputParameters = []; //输出参数列表 +var outputParameterNodes = []; //输出参数节点列表 +NowNode = null; +var xnode = null; +var step = 0; //记录这是第几次点击操作 +var style = ""; //记录上个元素的颜色 +document.addEventListener("mousemove", function() { + if (mousemovebind) { + tdiv.style.pointerEvents = "none"; + } + + //如果鼠标在元素框内则点击和选中失效 + var x = event.clientX; + var y = event.clientY; + var divx1 = toolkit.offsetLeft; + var divy1 = toolkit.offsetTop; + var divx2 = toolkit.offsetLeft + toolkit.offsetWidth; + var divy2 = toolkit.offsetTop + toolkit.offsetHeight; + if (x >= divx1 && x <= divx2 && y >= divy1 && y <= divy2) { + tooltips = true; + return; + } + oe = document.elementFromPoint(event.x, event.y); + if (oe == tdiv) { + return; + } + tooltips = false; + NowNode = oe; + te = 0; + exist = 0; + exist2 = 0; + for (o of nodeList) { + if (o["node"] == oe) { + exist = 1; + break; + } + } + for (o of nodeList) { + if (o["node"] == xnode) { + exist2 = 1; + break; + } + } + // console.log(oe); + if (xnode == null) { + xnode = oe; + } + if (xnode != oe) { + if (exist2 == 0) { //如果上个元素不在数组里,改回上个元素的初始颜色 + try { + xnode.style.backgroundColor = style; //上个元素改回原来元素的背景颜色 + } catch { + xnode.style.backgroundColor = ""; //上个元素改回原来元素的背景颜色 + } + } + + try { + style = oe.style.backgroundColor; + } catch { + style = ""; + } + + if (exist == 1) { + + } else { + try { + oe.style.backgroundColor = defaultbgColor; //设置新元素的背景元素 + } catch {} + + } + xnode = oe; + div.style.display = "none"; + } + if (mousemovebind) { + tdiv.style.pointerEvents = ""; + } + +}); + +//点击没反应时候的替代方案 +document.onkeydown = function(event) { + // console.log("keydown"); + var e = event || window.event || arguments.callee.caller.arguments[0]; + if (e && e.keyCode == 118) { // 按 F7 + addEl(); + } else if (e && e.keyCode == 119) { //按F8 + clearEl(); + } else if (e && e.keyCode == 120) { //按F9 + NowNode.focus(); + NowNode.click(); + // console.log("click",NowNode); + } else { + return event.keyCode; + } +}; + +//选中元素到列表中 +function addEl() { + // if (tooltips) { + // return; + // } + let exist = false; + for (o of nodeList) { + if (o["node"] == oe) { + exist = true; + break; + } + } + //元素没有被添加过才去添加 + if (!exist) { + step++; + exist = false; //判断刚加入的元素是否在readyList中,如果在,则将所有readylist中的元素全部放入list中 + for (o of readyList) { + if (o["node"] == oe) { + exist = true; + break; + } + } + if (exist) { //存在在readylist就全选中 + readyToList(step); + if (app._data.selectedDescendents) { + handleDescendents(); //如果之前有选中子元素,新加入的节点又则这里也需要重新选择子元素 + } + } else //不然只添加一个元素 + { + clearReady(); //readylist清零重新算 + nodeList.push({ node: NowNode, "step": step, bgColor: style, "boxShadow": NowNode.style.boxShadow == "" || boxShadowColor ? "none" : NowNode.style.boxShadow, xpath: readXPath(NowNode, 1) }); + NowNode.style.backgroundColor = selectedColor; + } + handleElement(); //处理新状态 + + //将虚线框显示在元素上方但屏蔽其鼠标操作 + var pos = NowNode.getBoundingClientRect(); + div.style.display = "block"; + div.style.height = NowNode.offsetHeight + "px"; + div.style.width = NowNode.offsetWidth + "px"; + div.style.left = pos.left + "px"; + div.style.top = pos.top + "px"; + div.style.zIndex = 2147483645; + div.style.pointerEvents = "none"; + } + // console.log("------"); + // for (i = 0; i < nodeList.length; i++) { + // console.log(nodeList[i]["xpath"]); + // } + //对于可点击元素,屏蔽a标签默认点击事件 + event.stopImmediatePropagation(); + event.stopPropagation(); + event.preventDefault ? event.preventDefault() : event.returnValue = false; +} +document.addEventListener("mousedown", addEl); +toolkit.addEventListener("mousedown", function(e) { e.stopPropagation(); }); //重新定义toolkit里的点击事件 +//清除选择项 +function clearEl() { + //如果最后停留的元素被选中,则调整此元素的style为原始style,否则不进行调整 + for (node of nodeList) { + node["node"].style.backgroundColor = node["bgColor"]; + node["node"].style.boxShadow = node["boxShadow"]; + if (NowNode == node["node"]) { + style = node["bgColor"]; + } + } + step = 0; + clearReady(); + clearParameters(); + nodeList.splice(0, nodeList.length); //清空数组 + app._data.option = 0; //选项重置 + app._data.page = 0; //恢复原始页面 +} + +//清除预备数组 +function clearReady() { + for (node of readyList) //节点列表状态恢复原状 + { + node["node"].style.boxShadow = node["boxShadow"]; + } + readyList.splice(0, readyList.length); //清空数组 +} +document.body.append(div); //默认如果toolkit不存在则div和tdiv也不存在 +document.body.append(tdiv); +document.body.append(toolkit); +var timer; \ No newline at end of file diff --git a/Extension/EasySpider_mac/scripts/contentscript.js b/Extension/EasySpider_mac/scripts/contentscript.js new file mode 100644 index 0000000..8d7f7c7 --- /dev/null +++ b/Extension/EasySpider_mac/scripts/contentscript.js @@ -0,0 +1,933 @@ +//表现逻辑层的处理 + +if (window.location.href.indexOf("backEndAddressServiceWrapper") >= 0) { + throw "serviceGrid"; //如果是服务器网页页面, 则不执行工具 +} + +//Vueelement +var app; +generateToolkit(); +//生成Toolkit +function generateToolkit() { + $(".tooltips").html(` +
    +
    ✍Operation Toolbox (Can drag)
    +
    +
    + +

    Special click mode

    +
    +

    ● When your mouse moves to the element, please right-click your mouse button or press F7 on the keyboard to select it.

    +

    ● You can click the back button to go back to the page

    + {{initial()}} +
    +
    +
    + ● Already selected {{numOfList()}} {{tname()}}, meanwhile we find {{numOfReady()}} element with the same type, you can: + +
    +
    + +
    + +
    + ● Already selected the follwoing element, you can: + +
    + +
    + ● Already selected {{numOfList()}} similar elements, and we find other{{numOfReady()}} similar elements, you can: + +
    + +
    + +
    +
    {{setWidth("350px")}} + + + + +
    {{i["name"]}}Delete +
    + + + + + + +
    {{valTable[j-1][i-1]}}×
    +
    +
    + +
    {{setWidth("290px")}}
    + +
    +
    + + +
    +

    {{lastElementXPath()}}

    +
    +
    +
    + ● Please input text: + + + +
    +
    +
    +
    +`); + app = new Vue({ + el: '#realcontent', + data: { + option: 0, + list: { nl: nodeList, opp: outputParameters }, + valTable: [], // 用来存储转换后的para列表 + special: false, //是否为特殊selection模式 + selectedDescendents: false, // 标记是否选中了子element + selectStatus: false, //标记单个element是否点击了采集 + page: 0, //默认页面, 1为输入文字页面 + text: "", // 记录输入的文字 + tNodeName: "", // 记录临时节点列表 + nowPath: "", //现在element的xpath + }, + watch: { + nowPath: { //变量发生变化的时候进行一些操作 + handler: function(newVal, oldVal) { + console.log("xpath:", newVal); + } + } + }, + methods: { + initial: function() { //每当element是0的时候, 执行值的初始化操作 + this.selectedDescendents = false; + this.selectStatus = false; + this.nowPath = ""; + }, + confirmCollectSingle: function() { //单element确认采集 + collectSingle(); + clearEl(); + }, + confirmCollectMulti: function() { //无规律多element确认采集 + collectMultiNoPattern(); + clearEl(); + }, + confirmCollectMultiAndDescendents: function() { //有规律多element确认采集 + collectMultiWithPattern(); + clearEl(); + }, + deleteSingleLine: function(event) { //删除单行element + let at = new Date().getTime() + //流程图送element的时候, 默认的使用不固定循环列表, 但是一旦有删除element的操作发生, 则按照固定element列表采集element + index = event.target.getAttribute("index"); + let tnode = nodeList.splice(index, 1)[0]; //删掉当前element + tnode["node"].style.backgroundColor = tnode["bgColor"]; + tnode["node"].style.boxShadow = tnode["boxShadow"]; + if (nodeList.length > 1) { // 如果删到没有就没有其他的操作了 + handleElement(); + if (this.selectedDescendents) { + handleDescendents(); //如果之前有Select child elements, 新加入的节点又则这里也需要重新selection子element + } + } else { + this.valTable = []; + this.selectStatus = false; + clearParameters(); //直接Revoke 重选 + } + let at2 = parseInt(new Date().getTime()); + console.log("delete:", at2, at, at2 - at); + }, + clickElement: function() { //点击element操作 + sendSingleClick(); + //先发送数据 + nodeList[0]["node"].focus(); //获得element焦点 + nodeList[0]["node"].click(); //点击element + clearEl(); + }, + loopClickSingleElement: function() { //循环点击单个element + sendLoopClickSingle(this.tname()); //识别下一页,循环点击单个element和点击多个element + if (this.tname() != "Elements in next page") { //Elements in next page不进行点击操作 + nodeList[0]["node"].focus(); //获得element焦点 + nodeList[0]["node"].click(); //点击element + } + clearEl(); + }, + loopClickEveryElement: function() { //循环点击每个element + sendLoopClickEvery(); //识别下一页,循环点击单个element和点击多个element + nodeList[0]["node"].focus(); //获得element焦点 + nodeList[0]["node"].click(); //点击element + clearEl(); + }, + setInput: function() { //输入文字 + this.page = 1; + this.$nextTick(function() { //下一时刻获得焦点 + document.getElementById("WTextBox").focus(); + }) + }, + getInput: function() { //得到输入的文字 + nodeList[0]["node"].focus(); //获得文字焦点 + nodeList[0]["node"].setAttribute("value", this.text); // 设置输入 box内容 + input(this.text); // 设置输入 + this.text = ""; + clearEl(); + }, + cancelInput: function() { + this.page = 0; + }, + setWidth: function(width) { //根据是否出现表格调整最外 box宽度 + $(".tooltips").css("width", width); + return ""; + }, + getText: function() { //采集文字 + generateParameters(0, true, false); + this.selectStatus = true; + clearReady(); + }, + getLink: function() { //采集linkAddress + generateParameters(0, false, true); + this.selectStatus = true; + clearReady(); + }, + getOuterHtml: function() { //采集OuterHtml + generateParameters(3, true, false); + this.selectStatus = true; + clearReady(); + }, + getInnerHtml: function() { //采集InnerHtml + generateParameters(2, true, false); + this.selectStatus = true; + clearReady(); + }, + tname: function() { + let tag = nodeList.length == 0 ? "" : nodeList[0]["node"].tagName; + let inputType = nodeList.length == 0 ? "" : nodeList[0]["node"].getAttribute("type"); + if (inputType != null) { //如果没有type属性, 则默认为text + inputType = inputType.toLowerCase(); + } else { + inputType = "text"; + } + if (tag == "") { + return "null"; + } else if ($(nodeList[0]["node"]).contents().filter(function() { return this.nodeType === 3; }).text().indexOf("Next") >= 0) { + this.setWidth("310px"); + return "Elements in next page"; + } else if (tag == "A") { + return "link"; + } else if (tag == "IMG") { + return "Image"; + } else if (tag == "BUTTON" || (tag == "INPUT" && (inputType == "button" || inputType == "submit"))) { + return "Button"; + } else if (tag == "TEXTAREA" || (tag == "INPUT" && (inputType != "checkbox" || inputType != "ratio"))) { //普通输入 box + return "text box"; + } else if (tag == "SELECT") { + return "selection box"; + } else { + return "element"; + } + }, + existDescendents: function() { //检测选中的element是否存在子element,Already 经选中了子element也不要再出现了 + return nodeList.length > 0 && nodeList[0]["node"].children.length > 0 && !this.selectedDescendents; + }, + numOfReady: function() { + return readyList.length; + }, + numOfList: function() { + return nodeList.length; + }, + lastElementXPath: function() { //用来显示element的最大最后5个xpath路劲element + path = nodeList[nodeList.length - 1]["xpath"]; + path = path.split("/"); + tp = ""; + if (path.length > 5) { //只保留最后五个element + path = path.splice(path.length - 5, 5); + tp = ".../" + } + for (i = 0; i < path.length; i++) { + path[i] = path[i].split("[")[0]; + } + path = path.join("/"); + path = "Path: " + tp + path; + return path; + }, + cancel: function() { + clearEl(); + }, + specialSelect: function() { //特殊selection模式 + if (mousemovebind) { + tdiv.style.pointerEvents = "none"; + this.special = false; + } else { + this.special = true; + } + mousemovebind = !mousemovebind; + }, + enlarge: function() { // 扩大选区功能, 总是扩大最后一个选中的element的选区 + if (nodeList[nodeList.length - 1]["node"].tagName != "BODY") { + nodeList[nodeList.length - 1]["node"].style.backgroundColor = nodeList[nodeList.length - 1]["bgColor"]; //之前element恢复原来的背景颜色 + nodeList[nodeList.length - 1]["node"].style.boxShadow = nodeList[nodeList.length - 1]["boxShadow"]; //之前element恢复原来的背景颜色 + tNode = nodeList[nodeList.length - 1]["node"].parentNode; //向上走一层 + if (tNode != NowNode) { //扩大选区之后背景颜色的判断, 当前正好选中的颜色应该是不同的 + sty = tNode.style.backgroundColor; + } else { + sty = style; + } + nodeList[nodeList.length - 1]["node"] = tNode; + nodeList[nodeList.length - 1]["bgColor"] = sty; + nodeList[nodeList.length - 1]["xpath"] = readXPath(tNode, 1); + //显示 box + var pos = tNode.getBoundingClientRect(); + div.style.display = "block"; + div.style.height = tNode.offsetHeight + "px"; + div.style.width = tNode.offsetWidth + "px"; + div.style.left = pos.left + "px"; + div.style.top = pos.top + "px"; + div.style.zIndex = 2147483645; + div.style.pointerEvents = "none"; + handleElement(); //每次数组element有变动, 都需要重新处理下 + oe = tNode; + tNode.style.backgroundColor = "rgba(0,191,255,0.5)"; + this.selectedDescendents = false; + } + }, + selectAll: function() { //Select Allelement + step++; + readyToList(step, false); + handleElement(); + if (this.selectedDescendents) { + handleDescendents(); //如果之前有Select child elements, 新加入的节点又则这里也需要重新selection子element + } + }, + revoke: function() { //Revoke selection当前节点 + var tstep = step; + step--; //步数-1 + while (tstep == nodeList[nodeList.length - 1]["step"]) //删掉所有当前步数的element节点 + { + let node = nodeList.splice(nodeList.length - 1, 1)[0]; //删除数组最后一项 + node["node"].style.backgroundColor = node["bgColor"]; //还原原始属性和边 box + node["node"].style.boxShadow = node["boxShadow"]; + if (NowNode == node["node"]) { + style = node["bgColor"]; + } + //处理Already 经有Select child elements的情况 + // if (this.selectedDescendents) { + clearParameters(); //直接Revoke 重选 + // } + } + handleElement(); //每次数组element有变动, 都需要重新处理下 + }, + selectDescendents: function() { //selection所有子element操作 + handleDescendents(); + } + }, + }); + h = $(".tooldrag").height(); + difference = 26 - h; //获得高度值差 + if (difference > 0) { + $(".tooldrag").css("cssText", "height:" + (26 + difference) + "px!important") + } + timer = setInterval(function() { //时刻监测相应element是否存在(防止出现如百度一样element消失重写body的情况), 如果不存在, 添加进来 + if (document.body != null && document.getElementById("wrapperToolkit") == null) { + this.clearInterval(); //先Cancel原来的计时器, 再设置新的计时器 + document.body.append(div); //默认如果toolkit不存在则div和tdiv也不存在 + document.body.append(tdiv); + document.body.append(toolkit); + generateToolkit(); + // var list = document.getElementsByTagName("a"); + // // 对于没有特殊绑定函数的a标签, 使他们在新标签页中打开 + // for (var i = 0; i < list.length; i++) { + // if (list[i].href.indexOf("javascript") == -1 && list[i].href.indexOf("void") == -1 && list[i].href.indexOf("#") == -1 && list[i].href) { + // list[i].setAttribute("target", "_blank"); + // } + // }; + // list = document.getElementsByTagName("form"); + // // 对于没有特殊绑定函数的form标签, 使他们在新标签页中打开 + // for (var i = 0; i < list.length; i++) { + // list[i].setAttribute("target", "_blank"); + // }; + } + }, 3000); +} + +//每次对element进行增删之后需要执行的操作 +function handleElement() { + clearReady(); //预备element每次处理都先处理掉 + if (nodeList.length > 1) { //选中了许多element的情况 + app._data.option = relatedTest(); + if (app._data.option == 100) { + generateMultiParameters(); + } else { + generateParameters(0); + } + } else if (nodeList.length == 1) { + findRelated(); //寻找和element相关的element + } +} + +function clearParameters(deal = true) //清空para列表 +{ + if (deal) //是否Cancel对选中的子element进行处理 + { + app._data.selectedDescendents = false; + } + for (o of outputParameterNodes) { + o["node"].style.boxShadow = o["boxShadow"]; + } + outputParameterNodes.splice(0); + outputParameters.splice(0); //清空原来的para列表 + app._data.valTable = []; //清空展现数组 + app._data.selectStatus = false; +} + + +//根据nodelist列表内的element生成para列表 +//适合:nodelist中的element为同类型element +//type:0为全部text 1为节点内直接的文字 2为innerhtml 3为outerhtml +//nodetype:0,对应全type0123 +//nodetype:1 link, 对应type0123 +//nodetype:2 linkAddress 对应type0 +//nodetype:3 按钮和输入text box 对应type +//nodetype:4 按钮和输入text box 对应type + +function generateParameters(type, linktext = true, linkhref = true) { + clearParameters(false); + let n = 1; + chrome.storage.local.get({ parameterNum: 1 }, function(items) { + let at = parseInt(new Date().getTime()); + n = items.parameterNum; + for (let num = 0; num < nodeList.length; num++) { + let nd = nodeList[num]["node"]; + ndPath = nodeList[num]["xpath"]; + outputParameterNodes.push({ "node": nd, "boxShadow": nd.style.boxShadow == "" || boxShadowColor ? "none" : nd.style.boxShadow }); + nd.style.boxShadow = boxShadowColor; + let pname = "text"; + let ndText = ""; + if (type == 0) { + ndText = $(nd).text(); + pname = "text"; + if (nd.tagName == "IMG") { + ndText = nd.getAttribute("src") == null ? "" : $(nd).prop("src"); + pname = "Address"; + } else if (nd.tagName == "INPUT") { + ndText = nd.getAttribute("value") == null ? "" : nd.getAttribute("value"); + } + } else if (type == 1) { + ndText = $(nd).contents().filter(function() { return this.nodeType === 3; }).text().replace(/\s+/g, ''); + pname = "text"; + if (nd.tagName == "IMG") { + ndText = nd.getAttribute("src") == null ? "" : $(nd).prop("src"); + pname = "Address"; + } else if (nd.tagName == "INPUT") { + ndText = nd.getAttribute("value") == null ? "" : nd.getAttribute("value"); + } + } else if (type == 2) { + ndText = $(nd).html(); + pname = "Innerhtml"; + } else if (type == 3) { + ndText = $(nd).prop("outerHTML"); + pname = "outerHTML"; + } + if (num == 0) { //第一个节点新建, 后面的增加即可 + if (nd.tagName == "IMG") { //如果element是Image + outputParameters.push({ + "nodeType": 4, //节点类型 + "contentType": type, // 内容类型 + "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 + "name": "para" + (n++) + "_Image" + pname, + "desc": "", //para描述 + "relativeXpath": nodeList.length > 1 ? "" : ndPath, + "exampleValues": [{ "num": num, "value": ndText }] + }); + } else if (nd.tagName == "A") { //如果element是超链接 + if (linktext) { + outputParameters.push({ + "nodeType": 1, + "contentType": type, // 内容类型 + "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 + "name": "para" + (n++) + "_link" + pname, + "desc": "", //para描述 + "relativeXpath": nodeList.length > 1 ? "" : ndPath, + "exampleValues": [{ "num": num, "value": ndText }] + }); + } + if (linkhref) { + outputParameters.push({ + "nodeType": 2, + "contentType": type, // 内容类型 + "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 + "name": "para" + (n++) + "_linkAddress", + "desc": "", //para描述 + "relativeXpath": nodeList.length > 1 ? "" : ndPath, + "exampleValues": [{ "num": num, "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") }] + }); + } + } else if (nd.tagName == "INPUT") { //如果element是输入项 + outputParameters.push({ + "nodeType": 3, + "contentType": type, // 内容类型 + "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 + "name": "para" + (n++) + "_" + pname, + "desc": "", //para描述 + "relativeXpath": nodeList.length > 1 ? "" : ndPath, + "exampleValues": [{ "num": num, "value": ndText }] + }); + } else { //其他所有情况 + outputParameters.push({ + "nodeType": 0, + "contentType": type, // 内容类型 + "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 + "name": "para" + (n++) + "_" + pname, + "desc": "", //para描述 + "relativeXpath": nodeList.length > 1 ? "" : ndPath, + "exampleValues": [{ "num": num, "value": ndText }] + }); + } + } else { //如果element节点Already 经存在, 则只需要插入值就可以了 + if (nd.tagName == "IMG") { //如果element是Image + outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); + } else if (nd.tagName == "A") { //如果element是超链接 + outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); + outputParameters[1]["exampleValues"].push({ "num": num, "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") }); + } else if (nd.tagName == "INPUT") { //如果element是输入项 + outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); + } else { //其他所有情况 + outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); + } + } + } + let at2 = parseInt(new Date().getTime()); + console.log("generateParameters:", at2, at, at2 - at); + generateValTable(); + console.log(outputParameters); + + }); + +} + +//根据nodelist列表内的element生成para列表 +//适合:nodelist中的element为不同类型element +function generateMultiParameters() { + clearParameters(false); + let n = 1; + chrome.storage.local.get({ parameterNum: 1 }, function(items) { + let at = parseInt(new Date().getTime()); + n = items.parameterNum; + for (let num = 0; num < nodeList.length; num++) { + let nd = nodeList[num]["node"]; + ndPath = nodeList[num]["xpath"]; + outputParameterNodes.push({ "node": nd, "boxShadow": nd.style.boxShadow == "" || boxShadowColor ? "none" : nd.style.boxShadow }); + nd.style.boxShadow = boxShadowColor; + ndText = $(nd).text(); + if (nd.tagName == "IMG") { //如果element是Image + outputParameters.push({ + "nodeType": 4, //节点类型 + "contentType": 0, // 内容类型 + "relative": false, //是否为相对xpath路径 + "name": "para" + (n++) + "_imageAddress", + "desc": "", //para描述 + "relativeXpath": ndPath, + "exampleValues": [{ "num": 0, "value": nd.getAttribute("src") == null ? "" : $(nd).prop("src") }] + }); + } else if (nd.tagName == "A") { //如果element是超链接 + outputParameters.push({ + "nodeType": 1, + "contentType": 0, // 内容类型 + "relative": false, //是否为相对xpath路径 + "name": "para" + (n++) + "_linktext", + "desc": "", //para描述 + "relativeXpath": ndPath, + "exampleValues": [{ "num": 0, "value": ndText }] + }); + outputParameters.push({ + "nodeType": 2, + "contentType": 0, // 内容类型 + "relative": false, //是否为相对xpath路径 + "name": "para" + (n++) + "_linkAddress", + "desc": "", //para描述 + "relativeXpath": ndPath, + "exampleValues": [{ "num": 0, "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") }] + }); + } else if (nd.tagName == "INPUT") { //如果element是输入项 + outputParameters.push({ + "nodeType": 3, + "contentType": 0, // 内容类型 + "relative": false, //是否为相对xpath路径 + "name": "para" + (n++) + "_text", + "desc": "", //para描述 + "relativeXpath": ndPath, + "exampleValues": [{ "num": 0, "value": nd.getAttribute("value") == null ? "" : nd.getAttribute("value") }] + }); + } else { //其他所有情况 + outputParameters.push({ + "nodeType": 0, + "contentType": 0, // 内容类型 + "relative": false, //是否为相对xpath路径 + "name": "para" + (n++) + "_text", + "desc": "", //para描述 + "relativeXpath": ndPath, + "exampleValues": [{ "num": 0, "value": ndText }] + }); + } + } + // console.log(outputParameters); + let at2 = parseInt(new Date().getTime()); + console.log("generateMultiParameters", at2, at, at2 - at); + generateValTable(false); + }); + +} + + +//处理子element,对于每个块中多出的特殊element, 需要特殊处理 +function handleDescendents() { + let n = 1; + chrome.storage.local.get({ parameterNum: 1 }, function(items) { + let at = parseInt(new Date().getTime()); + n = items.parameterNum; + clearParameters(); //清除原来的para列表 + app._data.selectedDescendents = true; + for (let num = 0; num < nodeList.length; num++) { + let tnode = nodeList[num]["node"]; + let stack = new Array(); //深度优先搜索遍历element + stack.push(tnode); //从此节点开始 + while (stack.length > 0) { + let nd = stack.pop(); // 挨个取出element + if (nd.parentNode.tagName == "A" && nd.tagName == "SPAN") { + continue; //对A标签内的SPANelement不进行处理,剪枝, 此时子element根本不加入stack, 即实现了此功能 + } + ndPath = readXPath(nd, 1, tnode); + let index = -1; + for (let i = 0; i < outputParameters.length; i++) { + if (outputParameters[i]["relativeXpath"] == ndPath) { + index = i; + break; + } + } + outputParameterNodes.push({ + "node": nd, + "boxShadow": nd.style.boxShadow == "" || boxShadowColor ? "none" : nd.style.boxShadow + }); + nd.style.boxShadow = boxShadowColor; + ndText = $(nd).contents().filter(function() { + return this.nodeType === 3; + }).text().replace(/\s+/g, ''); + if (index == -1) { //从第二个节点开始, 只插入那些不在para列表中的element, 根据xpath进行寻址 + //如果当前节点除了子element外仍然有其他文字或者该element是Image/表单项, 加入子element节点 + if (ndText != "" || nd.tagName == "IMG" || nd.tagName == "INPUT" || nd.tagName == "A") { + if (nd.tagName == "IMG") { //如果element是Image + outputParameters.push({ + "nodeType": 4, //节点类型 + "contentType": 1, // 内容类型 + "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径,注意当只selection了子element没有Select All的时候, 需要判断 + "name": "para" + (n++) + "_imageAddress", + "desc": "", //para描述 + "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), //同理需要判断 + "exampleValues": [{ + "num": num, + "value": nd.getAttribute("src") == null ? "" : $(nd).prop("src") + }] + }); + } else if (nd.tagName == "A") { //如果element是超链接 + outputParameters.push({ + "nodeType": 1, + "contentType": 0, // 内容类型 + "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 + "name": "para" + (n++) + "_linktext", + "desc": "", //para描述 + "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), + "exampleValues": [{ "num": num, "value": $(nd).text() }] //注意这里的ndtext是整个a的文字!!! + }); + outputParameters.push({ + "nodeType": 2, + "contentType": 0, // 内容类型 + "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 + "name": "para" + (n++) + "_linkAddress", + "desc": "", //para描述 + "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), + "exampleValues": [{ + "num": num, + "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") + }] + }); + } else if (nd.tagName == "INPUT") { //如果element是输入项 + outputParameters.push({ + "nodeType": 3, + "contentType": 1, // 内容类型 + "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 + "name": "para" + (n++) + "_text", + "desc": "", //para描述 + "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), + "exampleValues": [{ + "num": num, + "value": nd.getAttribute("value") == null ? "" : nd.getAttribute("value") + }] + }); + } else { //其他所有情况 + outputParameters.push({ + "nodeType": 0, + "contentType": 1, // 内容类型 + "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 + "name": "para" + (n++) + "_text", + "desc": "", //para描述 + "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), + "exampleValues": [{ "num": num, "value": ndText }] + }); + } + } + } else //如果element节点Already 经存在, 则只需要插入值就可以了 + { + if (nd.tagName == "IMG") { //如果element是Image + outputParameters[index]["exampleValues"].push({ + "num": num, + "value": nd.getAttribute("src") == null ? "" : $(nd).prop("src") + }); + } else if (nd.tagName == "A") { //如果element是超链接 + outputParameters[index]["exampleValues"].push({ "num": num, "value": $(nd).text() }); + outputParameters[index + 1]["exampleValues"].push({ + "num": num, + "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") + }); + } else if (nd.tagName == "INPUT") { //如果element是输入项 + outputParameters[index]["exampleValues"].push({ + "num": num, + "value": nd.getAttribute("value") == null ? "" : nd.getAttribute("value") + }); + } else { //其他所有情况 + outputParameters[index]["exampleValues"].push({ "num": num, "value": ndText }); + } + } + for (let i = nd.children.length - 1; i >= 0; i--) { + stack.push(nd.children[i]); + } + } + } + let at2 = parseInt(new Date().getTime()); + console.log("Select child elements", at2, at, at2 - at); + generateValTable(); + }); + +} + + +//根据para列表生成可视化para界面 +function generateValTable(multiline = true) { + let paravalues = []; + for (let i = 0; i < outputParameters.length; i++) { + let tvalues = []; + let tindex = 0; + let l = multiline ? nodeList.length : 1; + for (let j = 0; j < l; j++) { + //注意第一个循环条件, index超出界限了就不需要再寻找了, 其他的全是空 + if (tindex < outputParameters[i]["exampleValues"].length && outputParameters[i]["exampleValues"][tindex]["num"] == j) { + tvalues.push(outputParameters[i]["exampleValues"][tindex]["value"]); + tindex++; + } else { + tvalues.push(" "); + } + } + paravalues.push(tvalues); + } + app._data.valTable = paravalues; +} + +// 选中第一个节点, 自动寻找同类节点 +// 方法:/div[1]/div[2]/div[2]/a[1] +// 从倒数第一个节点开始找, 看去掉方括号之后是否element数目变多, 如上面的变成/div[1]/div[2]/div[2]/a +// 如果没有, 则恢复原状, 然后试试倒数第二个:/div[1]/div[2]/div/a[1] +// 直到找到第一个变多的节点或者追溯到根节点为止 +function findRelated() { + let at = parseInt(new Date().getTime()); + let testPath = nodeList[0]["xpath"].split("/").splice(1); //分离xpath成 ["html","body","div[0]"]这样子 + let nodeNameList = []; + let nodeIndexList = []; + for (i = 0; i < testPath.length; i++) { + nodeNameList.push(testPath[i].split("[")[0]); + if (testPath[i].indexOf("[") >= 0) { //如果存在索引值 + nodeIndexList.push(parseInt(testPath[i].split("[")[1].replace("]", ""))); //只留下数字 + } else { + nodeIndexList.push(-1); + } + } + var tempPath = ""; + for (let i = nodeIndexList.length - 1; i >= 0; i--) { + if (nodeIndexList[i] == -1) { //没有索引值直接跳过 + continue; + } + tempIndexList = [...nodeIndexList]; //复刻一个index数组 + tempIndexList[i] = -1; //删除索引值 + tempPath = combineXpath(nodeNameList, tempIndexList); //生成新的xpath + var result = document.evaluate(tempPath, document, null, XPathResult.ANY_TYPE, null); + result.iterateNext(); //枚举第一个element + if (result.iterateNext() != null) { //如果能枚举到第二个element, 说明存在同类element,选中同类element, 结束循环 + app.$data.nowPath = tempPath; //标记此elementxpath + pushToReadyList(tempPath); + break; + } + } + let at2 = parseInt(new Date().getTime()); + console.log("findRelated:", at2, at, at2 - at); +} + + +//根据path将element放入readylist中 +function pushToReadyList(path) { + result = document.evaluate(path, document, null, XPathResult.ANY_TYPE, null); + var node = result.iterateNext(); //枚举第一个element + while (node) { //只添加不在Already 选中列表内的element + let exist = false; + for (o of nodeList) { + if (o["node"] == node) { + exist = true; + break; + } + } + if (!exist) { + readyList.push({ "node": node, "bgColor": node.style.backgroundColor, "boxShadow": node.style.boxShadow == "" || boxShadowColor ? "none" : node.style.boxShadow }); + } + node.style.boxShadow = boxShadowColor; + node = result.iterateNext(); //枚举下一个element + } +} + +//将readyList中的element放入选中节点中 +function readyToList(step, dealparameters = true) { + for (o of readyList) { + nodeList.push({ node: o["node"], "step": step, bgColor: o["bgColor"], "boxShadow": o["boxShadow"], xpath: readXPath(o["node"], 1) }); + o["node"].style.backgroundColor = selectedColor; + } + clearReady(); + if (dealparameters) { //防止出现先Select child elements再Select All失效的问题 + generateParameters(0); //根据nodelist列表内的element生成para列表, 0代表纯text + } + +} + +//根据节点列表和索引列表生成XPATH +// 如:["html","body","div"],[-1,-1,2],生成/html/body/div[2] +function combineXpath(nameList, indexList) { + let finalPath = ""; + for (i = 0; i < nameList.length; i++) { + finalPath = finalPath + "/" + nameList[i]; + if (indexList[i] != -1) { + finalPath = finalPath + "[" + indexList[i] + "]"; + } + } + return finalPath; +} + +//专门测试Already 经选中的这些element之间有没有相关性 +// 举例: +// /html/body/div[3]/div[1]/div[1]/div[1]/div[3]/div[1]/div[3]/a[22] +// /html/body/div[3]/div[1]/div[1]/div[1]/div[3]/div[2]/div[3]/a[25] +// 最终转换为: +// /html/body/div[3]/div[1]/div[1]/div[1]/div[3]/div/div[3]/a +function relatedTest() { + let at = new Date().getTime() + var testList = []; + var testpath = ""; + for (i = 0; i < nodeList.length; i++) { + var testnumList = []; //用于比较节点索引号不同 + var tpath = nodeList[i]["xpath"].split("/").splice(1); //清理第一个空element + for (j = 0; j < tpath.length; j++) { + if (tpath[j].indexOf("[") >= 0) { //如果存在索引值 + testnumList.push(parseInt(tpath[j].split("[")[1].replace("]", ""))); //只留下数字 + } else { + testnumList.push(-1); + } + tpath[j] = tpath[j].split("[")[0]; + } + tp = tpath.join("/"); + if (i > 0 && testpath != tp) { //如果去除括号后element内存在不一致情况, 直接返回默认情况代码100 + app.$data.nowPath = ""; //标记此elementxpath + return 100; + } + testpath = tp; + testList.push(testnumList); + } + testpath = testpath.split("/"); //清理第一个空element + var indexList = []; //记录新生成的xpath + //如果选中的element属于同样的序列, 则计算出序列的最佳xpath表达式 + for (j = 0; j < testList[0].length; j++) { + indexList.push(testList[0][j]); + for (i = 1; i < testList.length; i++) { + if (testList[i][j] != testList[i - 1][j]) { + indexList[j] = -1; //不一致就记录成-1 + break; + } + } + } + var finalPath = combineXpath(testpath, indexList); + app.$data.nowPath = finalPath; //标记此elementxpath + pushToReadyList(finalPath); + let at2 = parseInt(new Date().getTime()); + console.log("手动:", at2, at, at2 - at); + return 50; //先返回给默认码 +} + +//实现提示 box拖拽功能 +$('.tooldrag').mousedown(function(e) { + // e.pageX + var positionDiv = $(this).offset(); + var distanceX = e.pageX - positionDiv.left; + var distanceY = e.pageY - positionDiv.top; + //alert(distanceX) + // alert(positionDiv.left); + + $(document).mousemove(function(e) { + var x = e.clientX - distanceX; + var y = e.clientY - distanceY; + + if (x < 0) { + x = 0; + } else if (x > window.innerWidth - $('.tooldrag').outerWidth(true)) { + x = window.innerWidth - $('.tooldrag').outerWidth(true); + } + + if (y < 0) { + y = 0; + } else if (y > window.innerHeight - $('.tooldrag').outerHeight(true)) { + y = window.innerHeight - $('.tooldrag').outerHeight(true); + } + + $('.tooltips').css({ + 'right': window.innerWidth - x - $('.tooltips').outerWidth(true) + 'px', + 'bottom': window.innerHeight - y - $('.tooltips').outerHeight(true) + 'px', + }); + }); + + $(document).mouseup(function() { + $(document).off('mousemove'); + }); +}); \ No newline at end of file diff --git a/Extension/EasySpider_mac/scripts/devtools.js b/Extension/EasySpider_mac/scripts/devtools.js new file mode 100644 index 0000000..cc74945 --- /dev/null +++ b/Extension/EasySpider_mac/scripts/devtools.js @@ -0,0 +1 @@ +console.log(`'Allo 'Allo! Devtools Extension`) diff --git a/Extension/EasySpider_mac/scripts/jquery-3.4.1.min.js b/Extension/EasySpider_mac/scripts/jquery-3.4.1.min.js new file mode 100644 index 0000000..a1c07fd --- /dev/null +++ b/Extension/EasySpider_mac/scripts/jquery-3.4.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0 elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.4.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a global context + globalEval: function( code, options ) { + DOMEval( code, { nonce: options && options.nonce } ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.4 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2019-04-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) && + + // Support: IE 8 only + // Exclude object elements + (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && rdescend.test( selector ) ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = (elem.ownerDocument || elem).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( typeof elem.contentDocument !== "undefined" ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + } ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + // Support: IE 9-11 only + // Also use offsetWidth/offsetHeight for when box sizing is unreliable + // We use getClientRects() to check for hidden/disconnected. + // In those cases, the computed value can be trusted to be border-box + if ( ( !support.boxSizingReliable() && isBorderBox || + val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = Date.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url, options ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "