From 2821955c26f9db00917ad0a16128153d876c782f Mon Sep 17 00:00:00 2001 From: Aleksandr Panin Date: Tue, 27 Aug 2019 17:11:00 +0200 Subject: [PATCH 1/9] M20-51: first proto; not ready for prod --- app/content-scripts/rewards/Notification.jsx | 74 ++++++++++++++----- app/content-scripts/rewards/OfferCard.jsx | 18 ++--- app/content-scripts/rewards/index.jsx | 5 +- app/images/rewards/ghostery_O.png | Bin 0 -> 54004 bytes app/scss/rewards.scss | 45 +++++++++++ 5 files changed, 112 insertions(+), 30 deletions(-) create mode 100644 app/images/rewards/ghostery_O.png diff --git a/app/content-scripts/rewards/Notification.jsx b/app/content-scripts/rewards/Notification.jsx index f75aa52df..1f0666ed9 100644 --- a/app/content-scripts/rewards/Notification.jsx +++ b/app/content-scripts/rewards/Notification.jsx @@ -37,6 +37,30 @@ class Notification extends Component { } } + renderOptoutImage() { + return ( +
+ +
+ ); + } + + renderOptoutLink() { + return ( + this.props.data.textLink.callback()} + > + {this.props.data.textLink.text} + + ); + } + render() { return (
@@ -45,12 +69,23 @@ class Notification extends Component {
-
{ this.closeNotification(); }} style={{ backgroundImage: this.closeIcon }} /> -
+ {this.props.data.type === 'first-prompt' && this.renderOptoutImage()} + {this.props.data.type !== 'first-prompt' + && ( +
{ this.closeNotification(); }} + style={{ backgroundImage: this.closeIcon }} + /> + ) + } +
{this.props.data.message} + {' '} + {this.props.data.type === 'first-prompt' && this.renderOptoutLink()}
{this.props.data.buttons && ( -
+
@@ -59,21 +94,24 @@ class Notification extends Component {
)} - {this.props.data.textLink && ( - { - if (this.props.data.textLink.callback) { - this.props.data.textLink.callback(); - } - }} - > - {this.props.data.textLink.text} - - )} + {this.props.data.textLink + && this.props.data.type !== 'first-prompt' + && ( + { + if (this.props.data.textLink.callback) { + this.props.data.textLink.callback(); + } + }} + > + {this.props.data.textLink.text} + + ) + }
diff --git a/app/content-scripts/rewards/OfferCard.jsx b/app/content-scripts/rewards/OfferCard.jsx index 6bdae3f6c..190869f9f 100644 --- a/app/content-scripts/rewards/OfferCard.jsx +++ b/app/content-scripts/rewards/OfferCard.jsx @@ -167,23 +167,23 @@ class OfferCard extends Component { } handlePrompt(promptNumber, option) { + const reject = () => { + this.props.actions.sendSignal('offer_first_optout'); + sendMessage('ping', 'rewards_first_reject_optout'); + this.disableRewards(); + this.closeOfferCard(); + }; if (promptNumber === 1) { if (!option) { - sendMessage('ping', 'rewards_first_reject'); - this.setState({ - showPrompt: 2 - }); - return; + reject(); + return; } this.props.actions.messageBackground('rewardsPromptOptedIn'); this.props.actions.sendSignal('offer_first_optin'); sendMessage('ping', 'rewards_first_accept'); } else if (promptNumber === 2) { if (option) { - this.props.actions.sendSignal('offer_first_optout'); - sendMessage('ping', 'rewards_first_reject_optout'); - this.disableRewards(); - this.closeOfferCard(); + reject(); return; } this.props.actions.sendSignal('offer_first_optlater'); diff --git a/app/content-scripts/rewards/index.jsx b/app/content-scripts/rewards/index.jsx index 7b09daad1..b0f651792 100644 --- a/app/content-scripts/rewards/index.jsx +++ b/app/content-scripts/rewards/index.jsx @@ -105,7 +105,7 @@ class RewardsApp { exact path="/" render={ - () => + () => } /> { this.iframeStyle = document.createElement('link'); this.iframeStyle.rel = 'stylesheet'; @@ -148,7 +147,7 @@ class RewardsApp { exact path="/" render={ - () => + () => } /> -z(~pKjGqR8f1M)6+A(rhBa(!j%*xkrD9`p`f6UrKQAFprBw@fgdRZIN&ep(j!QEr zgD33=lJWyhrTWo$mycy6LV=t7{i+T#)=oR%T+-X^H@ahNzhfK(b5ZDpaV z0t;M(3@tzH96Rut1#4`0m|i9`;%C9zBf>B-6mbW<;dHETn=c5``Q44G?c(3zAyQ9( zyDUrtjgq>$D}MXpvftWyyZ<|Q!R2y|YWyW6d1%0pFJgWat4!VfV!+3^lB21%shOFX z`DbqzFj5)>`;G4rgs#=JaiZK^jIfN?CWJTuhG$9pMKp3OMXLaory+FyEh2Xxf!JZ- z=zR!;8ZG|B5~bA5r`Uz}M}kf|PaI_Nb&A|tE{Pd5Tcw-1bN%g=0969HunaX8m(9qx z%Q#Bbp^Rl;7wicad^K+y>~Z7}|m zKqv(@?5dH*hMVBV&Ah)D=@;c5DW)#brth(njN#d)4II%eAka_P@Ih2Z_^#tioD?+{lLf^4nYII$rID(-aK00vWi2f&bo&FV zX}k`b43;6iYBR{lJIz1TE8c@C!=OI2=SZmU-`xpw8q~)#5NtAPHyoiaB%{ymF=^J2 zvZzchEG#I?%gptuRQgiqnu%4nrWd$nm5eu|WNk#NEyD(!k~m=Q59h^J6oHqQJQ>8=JqQ z6a7VQc#ZAgBX-dva+PSbO;M>V%n-TKmoFKSYbyr{LO!06=bmkZ9a|`O**VbFL__qc z_lv1eKByRh`X{b#|Nb7__JkmFz+quNR5;v4dl5NM8wwXh>Hj-giuohm4>{f4XJxDe z6AHN7BYfb!CxHB^RyX)NJDWqt9J>vHx_qDJ|D=>;O9y+qWbYH^>9H|1a6RJ=70oRR zB~E3qg)D?zC~_~6MtjzjgVyE?hx$V;ME5obj3GFnkcvuC0d3xqkdUz2UF;uZ>8c$EQJr~XWCHEluBq)FzhtP}ROFTv{ z+_$84EN;03EIrSC5s!34Vkp^|;tsw~>gM0=3`s`>;WA?ARd4%Q;ry4a?V-fezI&W3 zA<^)QA+@fOM*?=~sW>RqqOZNTLm#P0gOA#H>{c1M6WD)f#wuU9Mcsw)yB^K|Mpz=f z#pOy>b|9vlFaw<}5s(FUt+?MTm}_j^zDU=cy;#jw&{=bcXey~7bgFxj%SpbFQp{Lv zrHvz36i|)Gz%fGlV@W#L5|ku-gZ;x4;=2#beF0EAUXw^-g$12~-6=8oY7eld1A}=Z z#oymuf70xv{(Ry=8Qh6GgjJ#6hj48!0WQ!~%-}qr5^(3BhYRUfv6dE->ry zJ8lp58sHM`p{O_ zg})l4*p+#P>L3^_FgwCJ4_yh2hV*LFD(APW{Z2dl=cqPPW~3AkycGPS zw5W@8^Ch%Sjh57j9LM3gCK30LC&J-d*hv|jOq;YcYt)cflvwyyTdjD@?{^gAVHBGi zmhN^!z$$#6pst}J3KGgV-9W8C$hJ*)ZbLJMNkMGkg59iM_t~;%LMseYeA_muJJ#D zeJbRhAa3YzyH#k36bI#TW~@2#b&Jv{V;={3SV>4#h_8O~K+~hpS&+z0v=a6a`!W4{ zRY+&w5pTm1iV-T>J0EZX?+E%L0?AQeNYE8r}#|5-C&A}SjlsABV-dfSfEHpmUr>o zl2=V?34=wkqkpcLz+tTWp5acH(P8~%Db1PgRzQkW3lyNQ2UECm$J7z2d{VhvXY!Yz zW2aLG?oR(b)$eM)thq4?R-488qbW;{U-7WjK@xu1lM=#l9xc%QniLLJX?oNFY`mAW;Cxg>r+ z;`?kcV+OagDmP=bYPq1GZh0RfBqb+b_k8bFoGiPRP?*Yp-kOqSL8kTF%{rHEdVh># z!O%bB`?;MN^8uITb z^D6^0i&Cs^#)6aJA-9IxjTq)AZQGwuiLxFq6mkTrz#YB^MpZp+kG6i_nf`I)&2sU zIw7vi$zKdPJ)yHo(ackq;ZfN{>3i(9c-ZNd&x#HOVEh$Z#xRx^&?9wuUi?=3NH)9* zsjGkAe8Fk!d%=Gh--u;CQ@0MA~TMH^;_67>%rv5A^MAn6I<4r<0f- ze+<-O!^hDuv%*(C$)JH#BOJK399#~wD6L79zp`>FXgET_qxgdQgmZr(uqB&B5Lw5M z`C{XpBpF_t*gG5EQATc^7Ax0h1b(oWr|i`$VAD_PvrW+1Cqukzhf~EPKkv2@S1R1= z<2p;^GaX$|S3lw+ra6DBQ*RWQHwkhf(X)QRFT0FX#gvn0{`91UF!DYmwa1%;Xq#rx zlY%56{=3$tXr{^fsS)N2Gc|?yek9D(?YiML=Zh_O=pM*a7xVhi-nLKn*n49Gn7b+@ zP7t1ePg+P&%%t;FGpT}_B_`e^kgnU~ESEs;C)_)j%eYV>6`cpZSmB!S7W{<0O>42W z8}<~4P7HSmUif9kbX~7%8&jc-j@ZJ@2O*(X*C&T-$tw1Mc*v35D_roVkc6~Si#Xpa zwSv$KX)ZF!2FK>4O^)BZEj$g~wSU1fq#|=3YKx543@I{hB=ekpq%M)l`lgiJ#-MjO zPHYk5ewem0D&%x*WW*DhMfFL*0;+C*(~cCLg>7Y0kZAFjRU^T%6X_R~bT81ZTV6D( z;YqJzVPByTxSq=2fP`$9>SM7^n;dhuSG-2$Fw~BA``{4Lcfwrb!t4Q)Kc|I_PiqGN zK(tm%e%zJ~W29?_ex6VKT&nQ#=&D8eWf1h;U2-?US^vq<1DjdLo%+LukJ9M&=ZDsQ zl8pH}qnW6Mv((9WWP4MStP(0FYb-V-=u-zsf=1V=OIldl%3?J_P1jM3iyMn5AH}2| zbf$@u$C-X0q>AQ`Pn!ZGv_R*#Evp`13XR(0Cj}!Xb6ZL@A?UWN+$ibp#(c%NRBs}g znaG-PU2H{#eSXd>!!_XyKTCp(#aQX?SRKb9D*e7h)GZ+GTAcssd@u#JFWpG`v-FjB z-fZpWYo&>5o3<=#*MZ@q3tZBf)ns!+56K#X5^2gtMsD_(EhG4#UVQU!naCGl(&MWx3=}JZ;rO1~JJIzuL-J`$p#s)BV_S zi2*pbCo8QczzO9N|9N8062uB$%tL*@7PclIn|E~Tdc1g@TSQBuGKo&|9qtl8diDnBP4v zWCsy`MdgXIwPG!}BJAph3m#tsxpVb) zFF%>lt7uAMFGnGR5026FZ&B_)Y_d$_KPt5w^@3~SH)Hn(4H?59D32a_20x{2u*;pFTkoS|RkCuwj{Mcc@k}@Xl8o;wOJcGJ$gOYrj#cZ3i|C9!#0+cLhtk zu6hN(x86vz>)$Wi#Q55Pn`w_lqe7Qb3~Ly{3*ONUc|!i#;P|vF6jaxMvSTA<;vpTJ zDv`crf+L(M!Q*6+>AYSf=GXG^5PaEN&N^>6ilz)K*))ceuAET7a(&5PT(gtqhdw!fVLHz z#&GuW&@5he6-yqfWiPlUlc3D$X<5s9Pa&-04gi*Hy(H=r(=%-OJFm1)%9`~f2zj}K zeSqKx1>wp60`RGY!a;Ivmw81UPD} z*I)gbt>=G%^~GO9xY01gsQ5LE{EpRwe)ZVU<(!U-)58?*7_IqoZ4ULz>bSC^Q^MaX zpDTzMYr!{+C%ARg+fv+nZr6QT|Em)w zl@C(RK~59Ru%nWlzQifdUu>$_x=XhNYg(X|&GWNT(|bI!zreV6uE2nMeO}cnK=ri0 zrfQrU(K<7pH8xFcjfx)D8>tx-!o$A|chrR46H2I8`wIk;57GN*rd&#LhDJ)zoWI~6 z6T=kWYrD7q6+UQ3>cF@UAo?J;A;}7LyJcbaiCq((>iHWbA!+!z=XPBnS;SaN+`_ED zVi*+WKSD3W)W#(~rItoRyjK0->OV}wB;Dh|QsrU?*ptj1PZu(G;{(O>=x~C3;X<*! z=umF2U4ihq5>*70<^r8&hAsgZ(JCe`m^$!Dw!KWnQ#Nt6v5~Iew8!=QBvXe6ckdEb$_l(sM!HE<6V+G^Ue$u7IqL2|Ipuy> z`c8eq1jp?v=xh?ZiPST$BwL%G1UV5Z_+!GfQZ4&u(ss#^p;@@fV?L(S@hO_qAdo&I zeZI;vivcZ#UT)yyMvB?p4+z`>{mW~ zOm#&}$PtwZ;W-THl;R+#7QJ_aaA0z7O0j#`e%?W^83t zn;yt`+Z~o0NoWXL89l=ZrJ?t0WD6QLdMZbp|Jck{X((44BF-h9pcj$r*RJCV4I*2Yz zHycSQR+lDR>%M56=8d*)ym~Tc8O&kJRp_X;VT>d;Hv@D`_j}s4ThRmTOa%}32ZO-d zcRf!7;%cU90DX!s2lX60Z}5tlWfvCFj-L%u_^jj4r>IT1nSKbJ#?kf0~Z$kps?%+IAO$VSfJ-sR>MNG z=WQc4f5R58yqfD<(&2&Q{8kY1P@6&C1Mdfu{eL13-#&K@Wu%Dp?R%KhnhW)5`GKNw zsj`KD^RkhN%8YUeqFHYdUjfz+nhva9AgG-PV3Zu9h(=I4S19Z^Q`@5PgPc~A&0tE0 z!>{?W(w|#AHM7D3p8bH~cfnKwSC>>#;o}H(;;k;h8?V59^T0N$ZoQ@GXHgS zLl1ZR6PbKm#teXXh6Ne4yYl^D)A~VPIFF00PoT#nS8^1gR_POd_MY~jeByR6rbPf) zPaR=^L1(rQQzvT%)kF-D0bpr5x-3nqiy%DdgEf3*-u0kI)oK_r_q(?CTt>NNX1`s ziWFCo!Js?qxM&96W;%G=Vn) z{=0i?g@_gr@IEjeG2)K5@=ZGE61qz~=ill-g8-unBNdl};#41_*Dp$+0NULhtaKie zin|3M!kZK#41*wi?xRuXuO&TJrQ15z_srL2EfkPj8)XS2V}$*tJdgoYCNq-=-+v98 zihyeHSwn*LY*odVxkb6Hmyp%+3+g$K6CBd`};^)u@v{%7W7P^SE>|B(A0O(1x- zx@Kl2waa;;Uq#peaianqz_Vn`t@!`3BLECA$e*23YA#nJ)f7#vJcxnMV5S7VJ2-ln z{=ZN026h4m>a9W2l6gYIvhyEVVA82?&VCai{%c;AsKLY4L4h*~yR=;25-2d0a-I84 zrI{_LK>g2z{R$B}#~#DTSS32j+zD9s6a0_>kGL8Z*2(ti%y)DH7^G0-6l$G(p&b*lX{jU7WQr%m9t`EentHYxn{T5JfqthRh=d53S_;A2G zC-M|ZqzM}#2Ll1SlRr!){_it>AQfS#;f4^WILu1R#WFfHfAIw2sW*(p|6(ThA0z;D zJzz_?t$LI~S+WNl)XB)oI&J+4JeTgQ0s?aBmnkjI|7?{aGXH=7{>AKmH8(fM$vE|p zhf$ygcJxrC0oc zD4usjS3A9*{)=C7Fy-o%A0YZHkFdqB0{bW-**qGCPG*TJ|5$62wLraXAjDgb zkiSjLJXHq?{|QarNMT*w6<=5?!LXO7+@@KF-AAu>*=#io8CjV4H!v9uZbu=j@w&ed z+0QbC^IG>Ke`$A+PyMgQ`9SIwnhqZxF8#E?4;QJm4r9d2)$#c50y)x$bJgRn3O2NK zU@^cc{OmXnAA+DHM8#!n<^EIK-xC!&ZIZ<+hsl|>;oe01e_C2vvEkw2THEmylFR|0UJNHr3Hti_5=S@M zsG(`z@TmxZpAAq(TDsCX%0Q3jTZq)qK+{ewzOmIlHa5qKWQM3&f>Gbb3D}H!OE=I9 z?dBjiMQM4Y?;97faPMosmNzxKsI>7+nbp*_T~zZ$&(`dqH1Plv^+dM(N)g+x=Qr%R1?+?)EO z4(qd`WGnzf#(>9dttnpbd_@Dz4_IweI-AFs0&Y9+C)hK*GOmh;%0BI&mP@M{Z35K1 zw{MC22BYZ~ zafN)IN}FyQLC8m~cH#pB8JgiDvwjy|f_7fsk z@Wg{@Yn+(1waK~X-<5jf9up;*HM##<$i&eEU0(Rq-t2`d0b?WY7vZLjp_q8_UlG;0 zx@*5@-9k;myqRQA7Ple%LB!Vu>U>VnIaeM!J_s%TA|A@t?HUbc}n*cnbH0uA;O}Fm9U~p1n{ydPVYp<6dT)+G;1B+ZnuNmH0cS=el6Z5XIU; zX#fvI`SAoIa{{!?xh1Z56H&H)Nb?t^DpU2Av;gN$%P7^%!iwJS*Iqv*>#d?n)?yT{ z--A=V_}xyPw#1^c#28}#XVR4vq%w_iKg4pqp{vHlZJQG)9xl8!Kb@V+GB=yFCZorx z_c#WmZh5dPC%{h+z963(2kgQR?lCajv!Z~DBK*z^<<;&P=fpw1yC~WJSd^%gtKNl1 zeK2r-2v*4c;QgkR;2(J5u;_V_FTW!4h<5Gw>KokJRLp!ene0twkGpZ>MeciXqCN7p zKo95n??N9Hjk3Thge3j4S-Z9`RCpgo=BTw$R+$GIQ zt#MfVatF)34DltVG%$yWmmof7WHJ582JIYBSEwmf{On;qI2h>`|r&tm>YYWoJqFQ1M*HWn_I7MmaHSdDAnwwvyvd*(F?q@ z70+ccqiyWw+{sOQuZ3NPUYE2UL&Sd~w%m>$b63u)c{!evRwnh0m@}%^b*R%( z7Xa_Ps4r2hYQ@kLxW1^aHPolZskke80SZ@J#)3aMK5TxLyB*Lih?*$jYf1^{AR)vF ze@m8t(Lm$3*E5Sk^kErZq;VsO=LJ&wgv0#=5rW{=G>AgCQf(W zXrMqT{go!a<9$7&p(t#wX@FkMID6p}#*z!S##*e*D$BRxW!E0^+!R$3is?kVa#%|) z^NSCq`oCQ=K(4hvk*_C!WHKalk52!NmuI9`+6g%?N>MB;e-r+eigtPA&;Nyib+r{~ zgwrdG#2+N_y23n!9aaNk)XnnYQM_EO6Jj@5n7hXUDGJH^MK~}5L2o%Rx;-rblD}AG zpEz;|>K;v)xjWJW_dexSr<#H{c*K8%oVh{V!v8PG{+YhKPnl_L0Ofh?$Ut5|alP@L zZdJ;-Va+xHb{HW&oiq>V3>mO4nWAL2``>&KD)AJx%j{7)9(O#*$FBXpgi(}MU!;S2 z94Bk$9o&0&^(Xf@zr?p3(eZFW%9U}8k^(FLof+xxPdtBg7&U8z8=n5~6d0(s_BV02 z&O`s?_^_IYEVTVv8-;~Sk~ioD+9wL&NTiu2*7U&`iNy9S37$tP%{73)3du!9 z9}5I!eex^M;4LmbV%gI$BuDA@c1T-uXuQ9_-^=)zuVlxzMld%|OJ=ZUzFf$mXQd3mZ6~TZNa}B9fF8xA*leBB{WWq5Z zth8|YnNsE{E*<<~qXnoFsv^-94V~NgFiKpe9kj z5))N@2vf|4=Sp^fIzTm}Jr;Hqc?^t2p20_pg$EZUb!qY$ z7pt;jE5Lw(E)9MW()4H*++tc0NlV(*g0ryz$0fh`o!6jC$WBvx`wMn29cQq&U**}a?arFvg#!Y z%OdD>6x3P$UR%?+JbZTU_=nWjK!SPT$6wyN1mDq2+adeC=gw^za)tu8PNfpl`PwA- z56)+=S*a#)Nc2TQ?sJ1r+X7sjl4N#&XS4+e@{Zo?=w{Ew%vYqb$~aFX%*RTlx7nca=AW?ptmmEMiF)y;9%zpxrOOP_8>d)%qN(Jm6-R; zi{eM)S=wf52uSAbYZH6&Tu+LZ*owouYNR-RHFWlg-H=WNWl*sGypmFkUA0d^?QnTw zAMcKp^SPv%o8f6lb(T~!nHC=u{dDXmta~fGpA#oHCR+>x9iN{(GP;*4+ZN4{ntJMY zT6))`7pi<0%fUH5@Ld0dd>b_t^Y!ee9Gl9K7P`W|uDRi69+UWe+@LHOD!M%^FvBVf ziAU7}*;HoVwMM%&)V!zRcgwtRT|p*jnEG3KNf#4b%qCY4=Vr6d#9t$HqLm%e{ie75 zj4DOCQY(W*Wq6*3O;ZF?7@w92@d`IZ^YVP(IqXcg50YaDn3KJ{YiekYFsTApC(5ti z$bVC~kBK1j(G@}(KF}&K=?U7BThW+PmWbGqiX@4uGB3z^R?>}HKm2T>vl6>;89l5W z8-Fpr{>t{^3WMm8Q}X+D{`;p4yP?=X$w&kP^c^y5R1%q`DqVira+6^6vjC8_TweH% zu`wTAMj(O#!`+Rhf;|dxuc%QtaBQZ)t%+MJh!OES zEe(W1JIVg-87k?Dy1Wt;h;=lHM3%eFka+<@Sr$Uzn=+wKpEZd1M~ADdbWx*vG``Hl!HkEJ?@ zZXI{oPrXQh6}H;uV?wsZ$D+9~~7dabib-x!qK-snONT8gu5yKZfKcV!H&lOx@UHe5&y)~cJnYE*4&h<4q@hpR< zwrULN5|W%uowCqigV*NJ7)m$HS@Dxy-pqZJkvWtuq5=1~j(23*u z#M_B+4k(O7LL4Q4DuCOJQn|t;-fin;Q&eF1Bcay&@kR+P>3||X6Bmb8G|81Bg-x8%E|1xl4<+<^5YdSkp>bdvn}JBt>u~gtsMX!<}|xiw*0t8W*g;J6XTCgoWK6 zkj-r>sqmldZJico09)NPX&#ds8G)0Hqw5D%U82_CcQQXctiB=NtUHl-Un$RDNC;BC z=hxATo-lT$&cL2bqH;vJlE?DbqEa(AKHi7tNpUy*9F4wGy%tdX`kwz;HN4L;Q4We_ zR?A{<=uSH~v>M;@oWLD+FZtpZ#gI71e`--FT>rSK_!`1=2)I7MPtKl^miCUR4xARV z?%#@2I45MstgT$+d3(a-@Tr8tUD&R(A89-WpX}n3dk75y|Y?3+$8S z)(YW1X7Gyok3G-lRV&sD4-RfS%L|nh@_5Y(d4zR4^_TYCfScz=595ftnPKYVPi(;2 zlfP}cbR_T3Qc&gTS|w&x}$7h?lmo1yObxLw*=Z`AHcL z=i~DN!C;n;oJ!?Cv!gJ>KvJZ~;2_MTdKwX^1~R|!ggKG4$oD`CtCKH8@T*NwaO+44 z6G6!FdUaq&@md4ziqhZQUJJLMC5#(8XM!Fev#Lp?U;iTbe0DnUhHtcn7{d8lll@BS z1KpcnLZ|8_o2^Q;wbQT3q0P~2in4freoa~o2lbj1Ddq}x1b&K2M$Y?awWvVb_llvY zYqH(i&~O7+#PpS!sQY#+D|Yg#X%5$pSwG}gROhv+`XCLSA=zetCL$MT3Spj56Q zb0ofoq!0Pe3U}^%z>R7wiY|<$v71KV+&jUTTKQ3vGA)W_s;RI+FsOVHOg)`p>P)aH z4Z@*rMixWDd`E}qzHOeSS|q2Sv!TC%B+y2Ubqew~;jW~CD&~i8UPkTX5?~CacLct;G2r^!_n7z$v8b<9$#Ubt~%B-M3=&Y zuG-3GzhdOgf}-Zju~BKEy8C^`+vY~??^(0(r^4uziv`D1s4q3tL$xJ)A%;1z{J)Kqz? z)xQ;rG=)}l5bx6j-=f8t(my|}{7_h9FPwiw(o!4vm~1Q$1i_JnUkSCVRXk@hd?MKr zKUV2op)+w@dXDR)bT9``)mQ)@7>cnT*4RTZA->sx65L9BeQq=pnX0SG zGN&%CPM@x&_)M80?*2jKXtq~Yu0y$WnRBJaR=>l>6@nL|wT+(MK0^rB-%IOMjfR7=M4-G?`Sdt_7urQ9 zb4dt(INWNRa}pF<kTiw2@|cXq4;kVScXtINB}0eg+r%YVeC1$wsy(6z zd6=cCZ_qB#F#@7ZCJ^2$yMtP!VBSb5*DHRl8IfA02TgNn1xx9?V+4caQ{9%7^J8;K zoc1Z#;yOyeQ>AY_WIc9a8|8!q2z&oqKSSTnny5p^RPxt3iM~2qbbC(ddEZxtkwlNj z&xIGaye;IIIRH4)0n925ECUA>v^hqa@;CRe3oGA1CN~Rj7xTHWsYGD{^ojbO8sYm5 zjza#I-^jA2%D_>ILJF|l(9vQLX`p?6koLB`7|ZR^<#|u3rFqO(+uxk8iqdcLwD^nq ztjncj{o3&`Vx0=`n#0>Ez{5@rsA1?$Raf?Fa2*-dhyRS+X5)U5`(vU_)W0MC-990+ck^<=HE!zjDwm@_8Zc~v8A!& zdxw!;51YY!1XUG8%;v>SO=}l_KP!48;t0RpT$_KRYFd9G?2!3WVs!R=$yC!hf2~=0 z9M7*bp={O@8|;!`_%h6>BBi^@hxG6s(Q>${ZI@- zU(uRNuRI zs|s&M6lDO8Q*DGAq4DRY^aCe}BMZvqseY9qz#b`(B4vj8^3l0h-YTg9n!i@#D3-zI z?_fHg%&A+IN~vzhZw!$?dq?7SNrk1@ z`ntl-eVbev%bLdUTwHy`q4${jzvVKS(+LVoQ_XSB@>^OL$uS|{vrmAMp{o?vfgH@Q zMWB8#=*xHEyM0ia>jOK-DOtO!6eSG<2INkDGTd}9cs{dp6#ex5&aF^PsdXLk{tcY) zfwerT0nm_)6=h%jm7nh;o{W%Zz|=TlHD=Xk4~r!s^~K?Pt{Sy*D^Wi6PQ9mH-={4S zf~6WcY;hP%MIgIfd<7wN{sEoP&2aGC50m(HdxvHo4z=*53JV|TTn4D5ai%8}%98Am zI7O;>z}n~wPzQar6RNI{w)^G1KntN*b>a0*&dhvl9U%5(^vK0kQQ^myfw_58Npp@r zl}Y8zfT|cO|0$nZ`AHNqTe_HyzV$SavJU_LhgWR#$lAr%NZJ~}JS=p=U17BL3pQLk zt*BPdV>n0U>p%;(SzMEeQoB(9{%w@U0DdNz)Wi<{hMeHIi=#??Fwv}ZWBs0f8iC#j@FHNag9;9P0X@av0{_%0g<9y zyHvD`jOUhN@$p*5QypUp)XpPXfr8)h?UzVtTtK7Cg9Wjc28J#nsH&=7SzB0i;(rmC zitilVyg2`nFA`;1=3Kgk+IiwqRjIm|AhaNRfNl0mO@_e-vx+e^yZ7BLRZg8pgGx(r zLz?{p*!(<;&*?6hG5pVX#oL`YB;R*{f+W5#+8;Sn-_*~PL?veW=hCs?9GL9 zxTMosi0Az>vj)#y8VMDzKawb`q! z_xmv^vyMXeNSRmet3C?%Ea_N^^s)}WSXR{*Y5Gz&LnNmJ@NyYeUeTXM*f}`dOiWFW zyMv@yxEF_>{*_lp#1QhSfSlr|?e(Hw){T1kNo<$-;mD#Zysj3H7JiP0E)3CZ09Oxy zC2#>*Y^{9oX^{I3Gz7O!dh9Buv2NIEBTD6?%e)aEV_nCqrDv6Q|ANd$N2N&pL7Wvj z1>WuCFN98ubl#o8GD5J}Xhbc2sl*N2bw*(~=Tn7CBLneYNL&&TD{hG-Gt3H&2IP-- zJY#KL)~v-ole*4>|LUd)Fdp4dQ41^N2({P;(n5(A)H^$rbH4JL?RT`Cot*4#4^DT@g`MK3=MVls(?AN8ib;fmX%*2Spl6<5;|24egS?e!bAeN|7-b4d*c$7gZ- zx6QD_zB}WrKbYTjRtgD>D8FXsei@TG4N-nZ>d05!%PHYpB#XV!Ve_>nYq+X+6+W0X z_`r@;OVaD2Z&eo4-_5ZN9rf*%HHR|_5XvS5pcmbF#s?ho(=$Jnb5T4Mbe zaWu8JSVaG@Vh#p^tYw6$nX0l#Qtcn4OBr6VUMsIS`s?)$QWEmT4snc8%M7PY#kw;X zm1aMlzKncX#;vXYGY=6YE^b}(kjZtIOq*f~Hh?MG)&J1i%g-kfpKm}r{vl~^?&9JC zZY$kh2*xYF6BkG6?`hD`&_3=YE+A#2!2^-)&{^mCcWP?N%en53+T-f%-plyy5~9uW zvl7II04v#qysW1L-w$Mkt}$kEwke$BM|eMMeU*ZXXV~w zpQi)eD1;*gC)Q0r3Kw(eGYPNU0Yz1GOD1*FhE7LShd_DJ(+{bG!uu}bCj{5BCrG#H zRV($EHdbE`*?ZA65<4Jw{UQP&CBymx6W!5$iAae~$C`fVn3e<=qTA7Y*Cb*qmny?f zb3;>`ueULgAlKnL?R2cfL}3-M#Whz=ZG-JU_KY*{98yNk2I(o? zdu$H!z3av3>}#Bz4@<8iS=A`|zY9FvGIr>H6e{oKA5dv8k-FR)*H4I#XM+TCrp(HV zX_^1Y;Ib;9L(&7p@cIDY{8R7z`FV;;HYF<><$^sPoQr|8^?n|zJG%)Gz)xHglI!ZT zI!AYsOL_i1$m~OVf5}1moFGg9i5p6qXY3y)Lv-t`@0HnB@1GpcF1f;B9OLPo3a!JJ zmPM(&$eZG>s7t}ro_&;DMRO^7ypy|nALS(!?DA;$QLw^;GD?b`c zPVOKw^$B82KaN|;+*cknJe*l2ebsPgtW9Q+%Mv4bO~vcmaZvR0`d3z}zR7oP#n4AO zHh5Uodg2x7fcJ*%ctDnx>Aw|}r&g|h9TGl7gu5{2Zzfy$`+xrzK%1V95WDmKM2N#y zzenxtVd1{!Gq0!n?^W$GFaCUSiV@zuKM|4m1gdm`9&X`;f$eXZU#nmsRV}PlNCn|M zXO9tih=+KARq38#Y?)Kv@JhCW*fBbiNVii2(_w+d$Z9-Alb{kC zLnJ5g3gw7xyuy`TJ1UZGcD|SQe^|Gw={lz(6sM!?Ns4P&XB4p zXmE&pb9CD<< zuPngjtJC1A=+lgNRO^DzA>o|9V#|Jicm(nE!eGHKVG$lj|&Y^D9|u>$}5uY&M)O zlYJfrjq51ahfn8x`G59$X3kWwk```x{gv?=#lg3sBHjXgDMk~A_c4sDjIze4FQRH@ zW@hix5Ocuh3Bm~gVJua7T6Trj&)w9T>zt@32~v6J<&nvF zy_h!CjR)Bw40CaH^;vV{{-_0P2E`DX*v_cr9h%2~_^E|KRYSn#mPFwMgd_fwE$!X_ z#%e}%HkVBSQ*kVtftGnZbz-H(o7kG{qyTuE3eT8q^Ey=X$|#$i`l&UjM+Q zI{#^V;qVg>OyVGRNTD{ErwTM&)pD8t3MvzCH}*qsEb-ny;ulIHgbZ#g5D`33?!?U~ zc)ifnEQV9@XVBz&smRIS^e4cUM0_;rGvo!z)JxzW1gr?;CIu_x2xwuN{EXkWVrN6A z_?s%MoHFiBGy&F&o&0xMW4wb=C=va`MnO|L5)!?Xr*kX(jZL|%n|5IH>FLQW6q&&6 zm~KG_`n@cI|AL*G>*d@mi{!g&d8v@mAfW7nTB;ln*dEcH1hWqkCGRB#uX}fTJfLIw@b|}WIW+Aj|kI+S_0=C20jRi1ex7> zb^Z+0UpG=V;RW}Sc0x{Z{f;o-JH`LTpi%IGa4+5pJG^L`h)TL+WBwzl1e!UGIknyz zIq;{JsbqLI2PsFWYLH&>F0>Vj`SE`>+;#v}Y*sl%NQ8>Kp!e6gU10+ylf`)aM?P|5yb?D61t zwVR|Y^sBX`Y*`>9pd=!C7e^GxhTje}8{|%c1>x`4_dgn<`rx=$3)rThOZ314Hynu0 z&yqgRuu|Pq9ChpC3wpUn6CI{hvHt<6`kBXHIEK8=>MiUBzjej(s_0!!9Tx{;ru*5h zrX{uLm6skw#9;Yz9k+H)mf?jP1(B2or-;Kl!5z+Z%+{BkBA8_ zSo5vuhoNkh@W0SS^gI$0ZU5jLR(H|YSo_z&q68)BgxST#W$lwDT=xyo4!6dT$awrE z*EyxUrR~X~?NhXZIb20+B!VVeerJr5E5EarX>pCVbuIp3@`IzzwEL>J%u;J}nSK#J z+cp1nofMh$WuS^~(ElOos>7lPx4x_(smRhIT}yXJu5@=ucQ?`{sC0LCNq0y~mq>S~ zbV=7YtM}gTdG=mX@|T{!8NVCBNpRu$>~_q}4tfCMZ%2uUOkp z@p|Ap>i9@jtYjv>;jXT`-+KE66q z+3UE>UC(8l-*%-}6&2h9OP|JINUGo7TsK|PQz46bTn?R+O~3Eq#UTxdg`$C?AFmB5 z3@Qnc^`8?a$Kiem!a4f%em8^OaovN%y3^=L%CwK?yG}vJS8AQ7)P?TnL`tAz7y9YBSYaGI}?^=24XfF`Hs$8o?R z!KI^S9j!($&nm)AJV!_n925!UOxJF6Je&!LUT~nnVoJl~B_dn?Y0#&sX`#X*`)ay; z8Mn?7MVAyZ{W={PC{u0ywSWCWhO*orziG9%$THR40*8Hbp5hi--m8@mQk#RalH(D` z>9Rqbrj`~jc!m`hGHvi9h+ho{joR-Ij9w{v$TajahiA5x)Tz`rSknD>1a3VE^GQtoT(M+?vuxb#V{(ba%V)N!V(p%S&UW zt!Jr_6WuTk2< z*S|+!6+tgEdw~7%$gor!OswlHQ50^c^`TLF`F(9qFs|>r80ammG1estS%i zUQuX4wIKudkoa+uW}y=qm8H#FZfPJ>j)s)g*1g5VEcx|%7&2_`tP8Avt#t7mwow7i z(pvrmT$-DG@<={IgVt^l>4AHR4sRe?Y_5>S7He+M$NzDq^MONLt!VN1ffvWNlJn0_ z{~IMBp2$FPmBUB)$q@tYd@jD9wK%Sfg_~RF`0js578TsBwU^vzM&C5Z75qfM_S=1f zG~fHAY06`AXKRb!oP!m{l4qCq&1_BG=~4ij!{ENa<3D#(&&vkC21|DQfUjkEQq-J_ zJ)MFkkbRY{oekb!x+`?yh+I~?{9488Q81<9$F=5~nwoc{ zE$@WT$o;sH0T&@T{V+L@8j{zix{QY7peygv_=UmaNi`{>x8O=HxR;pJb%~!|Zk9u2HFk^u3hGC^E9RKdw##NyhD*5kN^xJ z019=*Pe_$4vVNaJ*^ilP3bE#@k4WgiDYk*s(Kau5CYGPc%VBQit&Qf97v;OWW4)Dm zCM;vxlQ*@xHuI-_SVMJU;V(CMlm}FMYD*|sK;`$^51(?GH*V#rFba`LqGJud`qi<@ z&GMmSkw0-P$cpnxoP%gSJ?=ia$QhL3fUy>w2;$ma(IFb%fQTqoUx9Qu=~V-l zeSQ+g8!#xzWdZ0lB9YrFoDYVKyR?F@3OK7sl6JSodgisc!X69lQn`hk+SmVR0AhrI zI!mdNb;5~^xn}d^W#v9mx}3AA&Oa_6FeB^KK$YWTD)Syh3gTj@*o$}<-FC@yPY(n z#rb)iYU5y!?PN1+26BIL80K6gS*+!|#TyAV+91wyGUJxFm-?S%B1#H4vy>$>O?V?Z zO1AzI9D+THpXc=c9Kn^_ai0{G97eJuFf84Y`iqSY zQX|I1z=Nou3ta10hZ?{L$(-cCsyBTp5FQNma?Y{z!dBD`Z&We~&`(+W(nNORjG= z7cw3Ig|4Y5$qgi`JV*LVYK8q5KOBrK*0F!)Yo>__=>EY2GvoPfrPP0^-Y{L(8BB6Q zq_uqj0{LX#6630TQT@;D0onmLU~zDo!-we0gK9$P0`{dc&ECb9co%t<@YZh}3KQ^upB?~dC4luWLjOm` z6;yjDccu4i{~whU3dAH}U`}O{bGwj-HFX7EsWx`6O=VsG@45ds7fSLS6-C7Px+qfr zo!$S}Vab;u4QuE+<5)MFbf*HUv3~+E0N#%S_Qcn9V^cZm(Qj{jR{!uQ`26ptJYf*~ zFPCf;8WQHh>wd|U0-e~;IT{rI{W#)i9Xd9o>PE?DW`rj8S;rwI>`k@#SBwO$;k7ub)I@tNzuTlR0_BCNlH=BuS zLp5aj(F?Thhm5J~FaS;jz5%#y=$zYEGWl4`tg!;CTxU9~RPG*Lm!T}}^VpHVX`wO7 zzXutDXRUT*=ra)k+tUD3$Y}FHZHNbM>9~2$!@3vPi@*$|jmX?;czOlt=$TTL9yYCdj4=>^LcW2SH}(AHXFU+#o5_ElonOQ=i9tJWiXubN78iGTTgb!2$zHL zlQASZ{NYcw0s*!ywO?}2)<(8hdvr#fS(zjWrynChLb0%2I}R_IQIszNNXPS1)wAyr z>drThc`lB-WK4>j3)7a4PIf!X4x;qD_s!(n@a_2qd%`FrP?KK!ZGfuBd$Kb_Agr?k zgPT5W7{^5lZ`!Up_Yz+xBWgGa`R^j|H32bmS?FmUxAy)U4p?59(`&3+iaEOf#_Y#1 z#gGTee+F3s3r<#@i-MMETNpqTf&Cy^CaQrc)=^=#BJ;s?7$5}!g9ad)c-M_5P2*kO z8&ci<6ssWE)Q$#~3VFeU(p$^*UhC2JQvIDY2@1a#nVkI5H!MtGdk`?Qa^{qSNeZBY z1I&=vWSDpnI)r2%qDQ197E$z82BxuXJcW3mB1@P>&hf(z`4sBaU&D$B{)8!!d3UMk z4T|O_CMGf#j*gBhE-o&^Ze`)CS9hvF0X=LDbo5nB3xtWLQc4xxddC~e>-xmrb}nu% zT7?eX{UT8QBO3c`Im$N_S>y@T!69Fx?hhq%$s}*b@wuIp9;oykGDQUR=<#Q<&sZin zk@TY@yI=WExT5E;7P4|4x46rd^FEv<0(CMmDmX+;`+lq1FUZPHo){;)wKTQrp$aMN zB=+Y&xk?@%?h0E9T$h~HW$=3=2un6)E>EY_^@6#a%>`&H+@jV0rO1)03LYDFCr0-%( zlkuE<`0i}-e|I{7SdTiFy}zNZB}1g5gzE!>(_vCUPF5Ld7BLNRiBo!Pu-5Zv3)tQS z9LBtSe4=G=w6?A2V0Sn57K_RP-YGoYV|=x2Q0{M z=M~?n(C|~6iolL<*nPc&TdL4QBYm6e#-vqWDr{u5k=GN7tM~iVZT{xL2f<&9L8Cek zCFFX+`}U8!^U3Ou3mQaeIBQ{mVO4K|f)axT@@aQkhwVJz^A-x7Vek7hr%;dhe)sWR zWyI&|B}Ozmf%{&Ym9__4$Qt!m|5MIz*rC7CD<4{HKJ)PN*NcEx>LZ(RFE%7sa0_Pz?T6oVXh4f84*H`UhX{sYX|Xh804 z74q-F9Xzccvvme&f2Ru_R5@Siys|VpYM(F$RtQQA1L&iJja<#^=%VhyYlyM2Y++V( zwvv(qBzZTa>n=#WS3=RBPX4+Y#bh`fz#x471%D;V&%P_~Vx7Q>I@^Djye&x<%|ni- z{)oX$6Eyi%m_Vo(pvELH>i<54W$Pa980M6zuCDHiIKD0A0a^4kusvHiiFQ_AZgD~a zKv~|rY`{1S$$ZaH^!y0N*XVB!BtZ!0wBWCYqdxTeq^~HJ%ws^IJrt`^oGC@xmw7fYQmk#l!J>NwR1+VV8(!MiAMt~eTz`Q}D%Bx}`xQBi)CNaL zZuW_{bP4iT$cF^iKJDhGBMGGu(C-h}Z|ilYz%770fB8xKn5{hbd*$D#+J*W=~(!g0dzr1Sftf8`khs4hOttGd@5PLT5 zT2IJ;j2YkX@BR(o4;BNvu)6iMwePQPZ*Pf(4`ddvx}~VwyTA4mDpXzx&mDyXN435- zO$t?UI$FH33v!)gUQ|&JOV}}T9Xci{)f*)kxIozGi)=XL*`_*mp92A@nk^hVl>-Rw z&Zoc$#6Ktjd!i!BEY}oeug$#4!Pl*S0DZ7^*X?|}UuTOTp7fXTC4!lqAM)D5yXD;% zdI092h7pGA$Sk#tpSzXQ0yy?S76rnbo?en~s5A-3ExNw%S@5<=x#SSq@t^vpqP?GA zz|Ri)8=O)xPCVaOTiKF*>kTJpXsxU~nNg@6vY$>mU3=#Q@6&T~hmEz%G;H9=z^i2# zcTXK;l=N*9utR%9CSS7Z+BjR*0gRc~%P);>psTlBLwBp5x}*mGvSjW=-y>A7?`Sqq zqrMb0VgYTeBQutFXE){C%zH~ju}mf65pTbvOVtU+3|D`l>}*5W;$y-)5={vdizI3# zSMs|39tvcWu65K_&q3iHFAkdD5&H|ifbCFwRyf`YYw!pMH}ZIrJwDOfCOv?f=HB=n zPRbSf^f{*ueJ2xel)%xFBOTcA>?T&qv2OTG z8r8;FSVwkbIvtM$N7H~Q8-F)P(+1`4!FBDai_4wjEfT!GsnFdKlJ;*=*wjRjWmy%@ zyYFASedsK>LxC)*lgmPPdm&dIiyw{B+(?=z7{yz3#-mDmSwO$1ZV4MqC#v*yVTlzW zo&W5c@vx;;$4|QFA|6EWUSbZf5NH76d=5zcyi#6X?vrBWlp2&bMu~mQZh7ETL>qV1 zwyUH*{a5n8D3euHUd6PxBhjP9**jNd)TbS0ohoa(+|kSZ6ftQE*l~~0F);~ZpUQU{ z57DO~R<*1K0N*+a$IA2>fel0Qp;%Gw>+45Le!JsnMfGIaoOfkB#^~Twy_$jH+N(s8Fw@-2R9}6oY-hGGJTB z=Vq&#iW@x;Gb9IlNoFP{4`?XYz7lJHKH>nU_=qKw6hWx(FXA^kLD=zY|90Ue zRo3pv-b8q~Ll*rNQcRiu_=A3JxI<;ZReX?V$QTOiE|`4dsq;Zup?m1Hi%6%v4*U*p ze|yQ|Ibf5LlEU3^2yur8&6Z`^!P|NK=MJNuU6LN{V^#gtDaLItWYHsX_WEg&N^yxb zk=urS;b@irBE&DZ7uZ-mH)5n*Aam29veJNI#&UL#vwjin<)G_-(w?$@GHw9ih=-Lg zavOhQj{foG*FTTO`{#fFsBKexhQ;PbKwW5?+K~Pg>@9A{PFqV$%Zi9{6XmP*NG$bN zklz)CR_-<9geRFi&U*%%=Xkbnx}RGF0Elh?FB{@-?sGw4P^`J62>qX_vj@YvHn7Qq zf||zVnhO8?W{h;fCYEZj4r9YTLnuYEZ)E_a!CbR=g>y>~mJmYV-bY4s@ymQ-(9iDW znYDTCS35e)9d_+tM#{>QVwDqb0?q@u<>jN1%IR@JxNKT<=Bfd{d=%6JJj&K~;^sM5 zcjOkp1T!dIDpJ<|Bx5HxPa}IlYC|4#TN z4<=tu*U?~63xTCf<8i+74SMab@;xb1$ZH8GhY zpfq;Dfn%gj%DL<$9@E6)7YXT0Ju9jnQl%%TzzW_=G9)Or;+{WDn$F3BO|X9Wvq_DG zi^GL_8?E_f*JI%%tedGM7NdHN63K}VAIgjoIOp+SBD9c?5OJHtrs2}k(h3L<-{$1x z90_FF(U$*;jT^;w%1dUN;Y*VS#w=w1)u&40HS`7|6gN&ed0E-;dxQ9ViMQ%l`^wJs z1lSG;AJjg>hE7QeT9dx+J;cz^f97M?@FLXfp?7n*FS_q=^tmy7D`woWmVQL>hHl{a zQa3GJEUg{^zsH||>9~Q~BI?mRMP(+rTM1^Eb(ojtZNG|9N@|jR?Pm3uUHiy)$_xEB zuxL&KhY2V9-9-VxWlazI<53T?n63En_lwcyx+tFjX2B!9o|M&!)Nd!_+3-Ry_Z4o^ z881D>5KhE7plZAfnt`$82z zjBDMmvHkUxIxGUdz~o@mYj&|wLn)a{5N-BQ$zyn5O%EHaN>n&TOsm9%thd1cg3XJ8 zr4@~cwHfstxq3G=7)PhfIM5_eY?W;?U7dh6t!P#1`?>GtZmc(T z3M;cuIfx2Zga0lqvaA|AuCdkpE?CLn@EmZ296;Nm6-I*$v52>_40_{;)tQmK98QTO zGDHoiHBqR=C9~$&J|9tges+Ft$G+Y)H5H$+G2K+93%guYIXruQm7V-dud6|;#YXzN zSiDZT{;M+qtgRsttVZEAk@W9j7^iQ$laVPGqFQife(BerHwOeZ_A4h)ri2dpI7V`t zbsmFcM$N(Uor{ic?D2<%!3|m|u@|tl;+G50&YudA=wJW_)#gh=x4CowB0S2Oq(YRu zxmam-kh1aD4G&!klQ%wrKm++W@T|2jC^Y&6xwno$XEHvQ%+~tDbTClJmLcoEgu6Vn zctEvR-zsuj$l|Yh*f)iQZv{XaZATV2-zvArXX!unHKMzIiRF4SxfYf@-aVp3<%kHu z3;$;rvj|j^yVX!%EzPhC^8lb9Xu4Xf`Wnk{E?=rX3jHl!azwEk`Eqc9TXmUrP2Wg5 zub}wXD7Y61%m;JUAZkR%Zope-hG)+CzS~*wQspwZb$YDE`5h|<5LI-L^!x8JF4(!M zq(3S|Ok-q)yY638veqS~hQ*^9c#PZ3RhzW3fZO<6omI*kXH=g; z+EW0)EOp~edgh~LKS%E733rr8@~W*$T!7ibhjSesWYC$@U^Qc_zL_*~CCdK}u8;KR zH+PmD*DJ9!h59R7wPMcN9Mh~9r2dU%d&v! zp*9LCYjGeBk^0$#oWrl3dcMHC-$GnJzrko0uJ01#sL8rd$IYO`GQ!VJFaZS$;XmQI zOrJBKRuvWaL9g4@_4J4pS{xRTQ#bzvqLyvW!ijn?VEqpLEI>^%;-<~?4rgN)yR(V( zXyzqxf0cmJcd^C|os^W>2IL+J;{|c4L+wv0W98AVik`&t7#|$HgIx{YIheE3z7kzr zIY-O)SR2;AvN*=cbFw8{wL7uzUXXp6((AmoIS9}G2ooS@IjsbjMkqIR)dU*)sL9Iy zjGQjjz^wev85oJrCMK5aO5pSUBjyI@Y6P*ME@$7IsoVOklr^DXb8RjA$_XYe$|Hir z({t@NoJ$^nvyl*B{SITq>gVLvZ(!!f^B3{`S}LnmJ&&)ycs^^fptl>*FDll<)t<{| zCy@R4$#Vyen#wlz>^rL?<$n!gxc>l67q{M zhv#V7>I=ROUA=@x1lIP)tuyC`cb?scRjzG1lFj4gwRfq%#Hq{JQ{1`Dr$dXFNc=!h4cOgNh5*!Ql&l%hD-y;Z`+IMO|kc)2S1L3@%kYle=r~|Whc!{ zamGuc@C(kaM~m)+K7wBkQOYT<`4R7a#a34?5iZ#2>l{gu-B8PC+@AqS`QummCZ(5j zZckl-=vRT#LmmgbA$-(pE!L&^c>HTug-OQZiz;AFi@{HMpy97JMMDJj&hg`FBdYVo z?v1x55<(!VQ$oGdI;9WnXwxb`Jt6J%2p5=@Rn}nS?o4RYF}Ii^TeR;LjCo#-o_$dN z?kkSVwxUc~7G zPHs(7>(#9HU+PyE3#*=7=(iGV<1|dZK_N@At6GmoOm!4{2?6g*Ra!U3oBJYnL%!8J zq2xr7fF)V;pEt*8@=02JPziq_O23C6Ry2syCuWLQT0ibEoe5~U7|5!Qw5#qJGroD*@#ocQ*imJU z>jXE{fBZ6D5TVxg^dM@nA}{HR-JD3^W9F zCWLZIWyaP&O5KblJfz1C*SepA?q{T5L3$W;-PZisgX?s5(eQsxeYiBRH|E+TX4+93 z%pH6o6%i15ld5nn8qw5GZ9$B6nK|gyOP86@-)?~sta?l~nTbAaBN!+B@;P-fEk+a) zO$`;qW{rAqrA^^x;g32ke~l8=BLK57OOu@A8M&pJ^mrY?tj9tg-2qtHG3y{fP(_N=)0p1Ik*OhS zcF8i-dFzDV1b1grh?ViF_z}#WNqhx=Xzcl1Vq74BI3Y=$p7(~+`rF=gSqTt~)Z0de zVqH}{#{s9J$?c!17bX)0vbP=pj%+!@cx}ZS-A%c(5GUH66*9^J&uOd1P=zYRifbD^O0{gaDozTv9zP}YObhZ7h0 z2ga4JV5Tuyryc?WxMq5dYKo;{w4^NrinSNFYmg*LgCRoOv)1-hg`U)N;Q-RK0g(qa0GLB0p~Xg+sK}k2z{|V-yU%iq@T+uO=-vs^66MQ zp18)C6(~!;Qj=hmbndJwf=^xnrLf{3?ECMLp(bxc)98Dkr@YTYR^FBlbv+^AMj8oR zyCtIcc2{u#+4r}zb9{lqUtd&@SgUf#O-eQEipkH&1qhTOphu-w6S?dH5$K*Qv%^Jzb}=g%Ne;a1dr0B(*h+-vNM#Q*<{iW5{*Gicbk(AN!3tqKine zp-gQ)P`>kQN&Tkz<$L|nz00^EB?%HZ_3bafY^8U5WK0GSnBWbdCN+b2Vlq_-v-%wuTZ* zzEyB|rH|>~Oi$DMo_Q0!(7!wffq`}!3pF&^O5AcR#~*Cc445RL7?B-7SZz%JZPPAFBV=uzJi=V) zwi+<^|830Us9>SjUS4}4tzywmXYmjbLG?>c2K4G>n}o~<>-grs0sB*T^-KS26SSoJ z=OKf!>y`3Y2WpjHhdLxEr`x0~1ap|fpk9ZVLhvtkzErn9L%GHNkmsu+V)^^?Md>Qv z;w!S%EA^mPm`-0)sgTUAaP}s$=+NN9sMeZPftLuV2nV1k%BHXf7eHn*=#E&%1vG%y z?s#52-W`|pgyz0|YO$?4Ykg`wLw{Rv@2uHWe~1+ZZz$JMak@ap}s7}1dy@peL)vc__#ehrq@Vr zneo-?{*RuNvw-vsZzhf1DF${|tOQ9kkR#tmh*+X8#4G|aW?}Lv$E%C=VYWLM^Nt*4 z;2C7-7M}Zkk6m|LQJv*f3Xvt$L}B?%Hjd^ChjR}B@4}C={3gie7Jj3m+%tz33v8M~ z14pAPs;$(s5Ty^|DHH)Nii*)fcryIGE_qvS4}4WeD=rH*9%(1&g7*r5lL>$IkEHdx z))S+AP6lHw;1W8?~bpI}aB&$4T( zJJQd%IV3V6wv_DcdznSqod zOHiHFj9UBM((xaKuYk5-jC!|-$1JHe5FN6Tw-f)VV`^}v)H5lJ&lneO7^~FSz!4oT z^Xz>2DB~!LLJ^<>5K?x0NP9JuBU6w|w|sJL%MUmgwgC3I$HAgYy2a$OCboiu3d?KF zGK+ZIEoHxi@CA&f#Cxj4uP-bC=V8{M#yy!uEk9_XT>9ijq+mI-t}yXee7=u1{$bfZ z{iWG@;Yxd}L|b-xShR^HSAdtK{G0%ObcvRAraeF!pyu7mCCK(p#F7qyL5mJY&)BBA zn7mj7q>21;V*T#ln6_h0%;1`i$QJPBqSSS%%Pl*<&ZMk~DOxI6@MsaSP}UP&{M}F0 zjUj03Ko?!qFd%k#V3Of zh_VR0SQsA0m^-oym|+=tI(uO8tsX1aGMx<*K^T51!+?0OKlM; zR~MK1BUT3hHdERy4=MBa2HttMH^O_Y(#aYl`PGHtTBt7NshC#cB|-4yXOUqk&=Iw- zomERkb9*WzTN2p4vY$g-IfHG%QE&;z+juP+{>H2C0k$tZuLE?noI|#|Z;bfyawwAWwKk$2Gm_;c_9qTeu+x_#^Md z$T!?c;${`~E={vy70vdtRU_TV*B$q0`;0y3zsT2>WWda@#`^1MPu33VKXekxWZ?J6 zJNmJ-O#wK^tPn8r#!zBhy^S+=oX|0NCUC7QaG#AOV5EoK1(SO#PWev->e;vvuP~oxt@+q3P00%_Q1aBc34_7 z;=!?e)>!3}SunO99_1$xtXqBRDXlZv8Sk*3l_Z)+_{}YG-OsPZCS#ZZsarsbfOnIR+)C4K z)4pVxrPF;qd~~voc!!=;Xv02_KS)&6*LCaL$*D0HxPyX+AlqH*PWQMs;6uDc7pu32 z16|?3GpS(R&P@RjUSGDZ*QqFn%{===r=+z#vN8linc|Q~sW?O14O%vLJdDUnETp<^ z`#4hTHJmgH|7v?mUEGSjt}eQWhUU2#?)Kxon1$5GA&NWrV|o*-Gwe#TC7@9 zfa>+FyW;WtwePKMp#UTAWw?Gg#cKpV6^7ik-|M9>6|sIOOLnNj|F&E&KFVTtdF@*s zqy3zo^7BAkbVA$_-18R-yY(A}9~;rawiFtcJxVNB+FEy0IBn+hbUk+S&+e0h*xclI z_KNj%n!xeGYXRa&=He;1Cbnlml~}RxGO%L{1(VG^_*qegw=Oy0c3Z%`uF&FjnN?w6 zCA>*@UDgm-9hsCI-sAxRG58iYG!E&qaylGq8l$pxq^lqc`T|=M2 z7>!H762qGDD}+YC2yhTx93nvw@?)^$6rVJka)`VuP=2k?5SGqyf`HfbDYoBERRG&@ zD^X9){#`UCOIJx#nQ(%oUPlFS!FyJtVPqBMB9#^+xpZtE010WB_^RRKg=9|aAgD;h zpXasGVv|zx^<`W#O)@yJ1E9g?HaYK`7QfHW&)&>q?$7ffrwFK;TEcR>g~hg4 z-HOkhP2IXnic_7kweeL4nEWr;9;KJ)Z*voKN1*emyu6d z(3#RW>n9df{{pVk82IW>7oq7$+B=|X5tVvzdAQW99{f2eF|kmy);wEW!ve^}i!K{U zCjcTw96eyhKE6Q4Dye1s#x78}XSOaHm8d^Sq2WsalsPU&6$(^ZNO{)}Y_u;F zYVv1iao3qt=huS^_R93y+rTql-0}gU#NYA`;7~(tmRoM%S&W5nlY70^yMv3J_otvViw#h!LNELzbc7Os3ug@MVD_ZIgZz%8ke9q`s8b@zb2X^N1 za@dccjEr|;rAwxT0qw99rG?fCXm~6*l10n3@v}TSs`52E?Si@TJpn`Sz3f1u z>QX0ZULembdAyxzFV<-u{ywfU<-&UfjHB*LVu8i#aR$~P)WEc66KSvQ2Rvqd-(9~1 z!;4q(#rfuzA5yPd_`b#j-^G4;rY#dOH87kJ`?k!4E;bryo*N%rP*}1p!tmcS|G6+fLMk$ zHUhTRyMtE%#e|%Zd>qrnH*anqstfL3;Z@mFIP0i9cQTZL^g6uBl4f7;={Av;h9xyr_F7^22<8(oIUmFB}%%19=46yDAxW zX9)?>U=Q&AWP_caYJ;s#m!-6{^aX@{jWuJLS$M19<69qYF+NjVxI;HnjuotCDWi83 zt71Stwlqr@H(&~Sl(%Lay;+Y)gxE~+DPJUA>~g3k4alsAKFpbIzwl0>uNJCD#-xH& zed{9&)(VOq5@mO60n%p{*LN5tS5c(GGQs>dn%7t3PH44!h-(PR5+pC++uXm~Esx+$ zcF{_Z*aC%n-%EbF2y8!gy}`n&;-PYnTIZzcyKhy2Vcn4t;@2Hd567P(ZVm00npC|3 z?CGsCi1cBo~c~#LS@>rE^-(>i^Er z50nAAtQkCx-E)%K-Hw9pXU4qUFSP<7%cfNI$XY=?Us#pDHKrv=P87Br6_N$x&=WZ{-uhgW%1rbVWfdTGg}at zrtOCuHU1y7yw_rMUxu^X4`!>(Ls|Ir==Z9sR}oRk9a?|p0lE78Xq~uMYf0hwo=pJt zxd;?GQ6Em2#LM-W%^d~VEd)56R#o+}2Iw3V0}0$#yRc0Vhi*YCdSdbW-Grh| zAk#tyrJQ{Vs6y`L5}>9vOQv`&46F|$q*T?OXlU76ZZxYg#MB5;%<0bd1rb)OpX`cp zyY#5Ij4FueMC|E;^I@z%LX~6p?oYbVr3$`Bs>UEY!_cCVy}^AJPe9DNthAc-Vi!f1 zT82WO7w+dyZffwMibmG|&W8o$u-#HZXjb6K8i92M$7fI^q2m1IQ~>q%)>aXKsS<40 z@P28e=w=O8oiE}^r{#K^={8B@v%H>Q9A``=of{W>q^x6^k8iT!0In2yMye-W6Su9M zL?J!S%!bSja3LCMyfm6pk*@h)tJx39OU1tl9K&3(&19;7Y6CCJ(=S)aeca*MxZG9w zzINT6I|8I9Q^4_OZ@AmHIn;(N8e&_@HV`)} zzGgPCZ7ZkFTBiCi)6+08$ktg*^fG5I;fERWFX-rH@!^lsR23Y`oLYv~8UVr2g|kOR zgSELR*;wpU?!uzjPNyj~X>EXy3OTQYOLp6s6MO=*;?6i0;_N_yb2F2vj1eqwNAChR zb$$3@Jy)F%-r}96Awn_A3U{F!bV?Prx)!;@-Y@&I^)ed`gJKrbvcv+Enkd+1p?uBz za(RhC&&YG@lJ`vk27@Kg)E5&iDtK2^tmrHtfcBo{3n@_6H(zF0L-^RDpz!c+J7Le> z$e%L$o%SSK=^L_uY*lhQ6E6j{ZlpVyB8)WkQ6 z&GAzr9>L7gs)p?|6?!YocL22!?OY;&^QI_GrVoq86h#tx-i~pGhaLs}3{(~AS%gET z{#4B6%vSsb)GoG+XQQft0*>%C?}?U)Z{6mi16~rm*>)fk=40p{C*s}5rEIIMokW%? z7!2Ey4olweD_u|bqoLQ@%1^RnV~g%UhS$HBP-Onh91V?u1vF#Ak?ltrsB+tkPLJU) zQ|0wZ*s%%(v$>*cF|yQj9Lwgi9km5a`36F^naDqNb9g(1mfZqP5vt3>$8sQM9~oku zw7MVZ^Qxu&{Wh%jXC(QQD#cb(z& za8oM#FTa{+nPe=@w%~6${8Jwtf1AcY2?q<3s5`U@+|`DY_2HGgikO-TB&o3M@ZaJx z`7%GK`1G$Ge-fX7` zXh0lTU1t~Xw6w+aWdN^}B%$TSQVuy~wrsal)s(c?9J(lAMzKnFJNz{HHT1vWghe+ymd z@;rtNu3Z!WnOQ}3eeW{N#?EKZ9kA^Y%owa#vZ*t>jq!M@K zqUWg(5oET&&pLt?LPEGIKIc*U!Wo`AbG(}xF z|7sGIW1ES_?rD}wke|b}>qQaWzMz6T43B=O^InciSBmxJhv5ia(fMvk(9q6BNqatR zj0!4q%I(rnQ!Fa#1^tFID>b!KCcE*x;JJf>vmWJ}aNNFUc(ALg$FhrX7Nrk}OZqa+ zWFwoW+`9hG^1bLyxHukP z@HXJ&WneXtC&PyFtt>vL^8VgSRY5`DwJKqd?IYm;ydaS4a_HFV^4KgF7*JY>h2`Hk zT01=6Q`iWk%7V6lJ5S7A6=TKZreQl)4Xa-v!hO*a=*;tMfEw{QWWZ&n zT*szDTnNSGXmRe+F&yP!JU>(sr!O+KHKMdJRYe+T*1Gk%w}9?{J#=lz0&+=xSdm(< zZ%nF7ed45d7*%kS87a*xbL*B`rNYDTDO12Zt$h9KS$gqAk)ymhbTq$@25M1$7;P*TAR(xe~I);lOy-`{z@Q4o03RB`P5wT8!|OwH9U8PkXYIYGkig zPB*s8rD+6XagGO*Zg_)y^@={NE{9-a0)#wlJKg6L3Sv+pRKt&GeqX6bLM-WZ*wboX z521c-k?5wqI9eiD{=fF#`YY=0iytM17(jsmNd=^&L6A_oySp2d4ke^ZO1itdL15@^ zP(cal6ai_FhI{7ueDA$~!(HpTTK zb*wZTsCx=KdIK)s=umXjkvZU1&LQJl=`Z8Kc^^UkK#j6k@j6eaxFfL&73 zofv*ip)oq-8U)fcon5dP4g2mrpYyDW3K^^Gce<@cm0qKrV>rA%^TUj8Qwn)?_ZWMZ zfh^=nTS9v-ZENF#1BktRiFtW9e@b(sy^=~&Wy&nmEd2*uV?@ijEZBW*D36pQ_wJnM&$GHekI8w)sZv_{@^d4o za}pBF40CLE9d^e509dQt;tU5)!I$!yV!%&Pesj>K-1v4fzr63|!VBjP z$tz-Pk3!kX-|j0u&AVVIOrhkF0PKhbS*PtnYwTzCnH?$vACwQEbIpDJy6r>I!eSu^ z0mH^e^7rPTR{AjT8fN>U@6)5{qqRPeV^@V^6F#vcR8vydiIZM`^Lsj=wJQ}~S9<*Cdq zou42hBcglj+XbMnoMrT1hmB1hSOOvEgvhu0HL^cWvi~K1CrpN{i}+X5JNtiS>X4@5 z`f(AfMs`O;^XH8!eBfgyW<)u|{1lOMLf+J~o`G(4STfQ*oQ+%z!HDFY&g$k{@{aZeDjL}B%5c^E*o zdbf3V`=7&OL{3Cqk1=_L&i3Y)1FRMt>&=>G<2hd-pNMVfoOoN9-yzrj=dVx+_y4V4 zGn|Q$Mqz@VF7Ceu3ZaN@`1)-)3E8Eo<`6vQKZ|6zzmTrdyWP8ypH@vtkbJuC zQu;~Q=9R2873;*sjXB*t7v35*>kipBbi@o-k=MxklPTzyj*JgG$5HHExAlzZ;XHjJ zN54{K_Hu_Z#E%W-{D~Y>+;9e5*aK8iPqi4ju1mb=3N8L~IlMx)_pJEn33a73sJD=P zBbIajc&z5)?=RP~A7?tgCy3fN*e9m><3`zKd~9SAz4o_nTM z@6%~D2a;tY{&c*3QJN;lm1U%v1BG|EGv}}(L%Y!b4Ta6&W11v3_CEG%pA-hu#*DLe z-%3J__^hn?OVxfVLYEbI{=0f5+Es1#X!fsZAJ>r&4_^D;dPGs}oCYy9J=EvBYfn{srk!6ii5Z5y@ldwluK9PKN+~$0G1b)+`5_t(YGY#t329p_5g{u z*Mom=+l6Vx#F-jJvtt4hdEE~TqSv6`SLd}5ufo92b*~K?ZGU%nU^mZf96@Pv*?|G# zY7*^2d|w3TLoRng46$spicP#tB!bXPDW*-r*j~6xeC$m5Y6~c&k9$?kKYK&4J7}A1 zEwThW>#u)jIBEbJtN{%H+H+)P$Wi0jzViUuq0Z|eY|j$q93x5>9z5OS%%25mt9u%} z?88c=9iZlIzPM&F3wIWON6bgc`~9pwL(znI79U2Uo%$ff+5hkB=%^Y13^l(AKeX$0 z`T7KZi9dZMp`czPxsia0jd+HSdBR}gGvSQ|`@a`lwd}eQt(8s5UwtE=MNq4b z?0yaj03$937ndtN;StSTO8EJ&wXa(*VPV0b#*r!YJbH@rc@Miz-I?ZfH2Em6r6T6P zcc&&5i!>+j-pX@1^)A;KiLWwKZSIa8t3bt94&t&Eo-bE%J)x5+Bja4yOAl~n$%$qh^?E%?CJ1CQ3hj8tbo;#x&P(q~vUmtC;2j=PyIPKa z`J;?K5me1?tWYp5A0MI)(ZznVgvVtvKUs_N<f@j(}4%3F^}cVaF{E zHq+%FFtQ_C(UAAp!LU{oVQ&2HV9Tun{xK6 zcT*#9U4!RpW*sk~jd{5=#DPU(PPQ=j1pivbM4e02!(d zSNaLw0v*w}s_+%BLqVU1s^;Z#5SGF8RJorLwzh>JFZ3F$6q6?QfRsh#68}h z8Txkjei9X1;2obxVLX|~m3@#`99(r~(6t(sB(nFZjPU9lIfpCNJ$)Qq``QuaGs92g6y+)f45E}SH!0EQ!k2)dCtCOvm^#o7+rq|7lBH+tJie(n<>smUboEqplH8likaUT}R#E^fl6X@96xqq5k zB6zq&nV}gUfsWWw#Xv)Ih}?E9=9#oK3UVJXLVE_Jy)EPH~!os!#LQ5sMn?w znTz<~V6tH7WxZtX?*#^Bsa3ha?yWuA zzf(;6L_zWJe3>HdZeTdtQGkU#)sJuY4gus>!D zQoAFsRQ|-tLa_cvZ6impmWZIhTWZ0s@wLj7a2C*Y*e&XO6>srTu_7A%L$fef5-Jr$ z-H97<89K~AU~@H+F1(cDJ~lZenB{blqMQg#0-c}OQVqXBK|fRb+ezvVlaj<`Ka_3V#I7>Fay?wNKKvr#NDyNB8a*E3+= z))B9f{zJLvU0DC={iO`a*7G!}ra7ywiz_>8>=?%f``a-0ob?-@f4{7wO#ZYYeG{*9 zN_la+9N{(ZmdHqOh}o95h0!94q6unOLo~va!(D&BgJ{iRoxnRvlLreftpld7v+mD> zr`Q%{1{Kmcw_YsDu!*Hj2c53FKaM6gTS;8KTYRi&qLJrz8SxF*u(FKi^mddT)eA-+ zKHUcDh}}?1U(5yiG%H`=ytLW9g7R-e0d;0M#dCb9+fJHX&*o11_8#r=B= z%{9F`P<79=aLBr%i2A)g2XwC8V+>#M&O<1i&c^pwJ~5i4zJcPKjZ~62S{4&qy9cQ8 z`<2kWVd;?VQgkABmICJ>vw7i*V=>J${{St{qCI zwUhXFlYlW%%x08DqM(NY@FqF(6S5Idv4Z3 zg_8S~hkNbkKU3apeC9fH@`4X4c7^+6fNe6&hM4rv)V&AH4~`wBXudpw~bId zjK&=_UmQNZkb9eB!6C!i3wa}d{NTeaw;$4UAwpQIAi$r~*MyT?8GD4&0db&3F7kRw zpY26zT(1;{r?p0VPlb#M9^)gVmU9jVnArr;UIWW|#XnM^joF|R@0ZaZ`X}jy~-2Y2v<{N@2~AA~pFQ|7y)0lLMKtHl0u}dt=Y` z8UN8Bdo`1^$(pYv=p3>?ujpysEH>f#tarI2`=!ozSrZv3DY<2M$Bojc4;y>!H-02c zkQo)h9&PFO8q-PG%vNXhau+*QNlsJLy<#_j*Lq)jLdE9_WeJwp4QA@8 z{k@O6n_7nm^W(`hHyQ)t zTDR_q3-`1amuWqwI)wu8zFHD2jToIx&<`P*@*1wwB!rp5Q-8m zi-@-2&!k*G+dWTz)?1Ffk8BFQC)iqeS47TUy$eEjR2`zf!=TpL2_BH6ytjWZMbZ3} z+LI+`s7cD2RN6HBZU_2}qBMBi z`{3RsqMRR7&aSUZDtA^$9(5`>NjTdt&xxWP+VIbIKGlA1S8ZVCmE+ebQK*pp%5IKh z360)UZ#?;9ynk`0jVABIN9ECj-0vJJit+2mpT~PoPhS1{WNPE^OGM#nMB@MHv5A6v z;$5FF*~Hbkjl@euFdfnYGkek2vGJu+I9J);^^ zfoF&eQ{xlf5ckY?OeBe^Gbj^uHx@Z`oNG(Njxu zNU`WPieg)BrwJ?eiiZ9>;4RL(QE^MbBq|95Fn+@BXKCEWqaF-R&>SpLJ+`C@z=N#P zubmnTHE|sNz$1mX!H~zD>nPF7aO+q;bzQtjdJKTLIVmcRkF!lEy0KnRlb>!^-DC`F zUW?3(bn+4?W{jZNeyGg$Scd}IpZ*&+uz1Yuf^5W@7yHMVM}&OuFioiFDx2oHHzH0} zl+vXZeyXHNEf?qO;6Q_EK@lzUD%>5(@$BTv4wWda_b{X1_PPG18{%`vjPLVX-|wuu zsWK0TVq)wn`&|IOwwMeX%B99VM5tgXl=p^o zWZI=^h7|&Qh0}+A4_+U7(1`hj`YgZL55h4&0RKYyUQJi_qIj1tySg>-@+jr+CkrHmbjZ34$}y5U2uV&J_Gan`hM|pE(>j}1;hd+z3Xn@5zE-b z;D?I>Pm%rxrROF-(-OTGU6e8`q44iFdZDFmzl}Ljjn@5=F_>((FUl8>g>Q*;z+A3F zrBbEGy_8kp_i(=pCYxxFrLZ?UHFfB=x$T#;wf*G;t_V~w?0+Wj!VXOIcE>d)-Wyqc ziSsW`>Nd6|VOiR+XGxL--abBrzCOrF_Z2jiHr9+j2X0O45=fp%QSNwud$l{kyP^SL z?igKHISfJHVBj$+Dx$V#(#&6HGGr5E#%siOD z+xHYodqKbuy{gL%g1TDjl{PZShaYS_E8p+A888DGkJdiWW%dOCJ*uv!uz2EC zbe@>rv(cFRLv#2>ahkADeEljZ3OV^kejIn$B2Vk84pXA}(YB0=k=x zwbk8dVX>Fk-Y|GR^G}Pfn-XB^*|Z|s1j=sYAxg9;RxHchwlfNa^bM@e^szt)%;UKH z6eN%|gsUAtj{I>gIxYpxIlvftvMp?LXORse?N+tG!f0!>X3$o{g9F(gm&tLp?N1%1 zWvO6~MJ!~}S{vYeS+Ghh>UCyXe&Qr?CC(ps)2pe`TF^iILl(raf++f0bq2K)JQ0cL z-?bj(_mnf`n#`WLwMEec9Ik@0e4^n*<~-A5oZPsHzt-bxtG3d-QTG)X; zchpaBa@no?_jkhwT0D0Y)(IJr$YxTxar0!6tT&$m-k;@H>U5A>pE{c*`we@iUyo|D zHZCA&!{?_*i13~gD7bSw2L(q^ME(NG`~2B-CxnO{=D9ahg;)qc$*dXMI zhqrR`zb#y{AM8T{XL6PZ*SP-;)XAyn<|YhA&w+gD+!R<5Zi+p@B=-sJB`Vb4UpMjs zh;1|gk*&yOo0*mG_AK1nO7+JRIu)t*@~0|{^XH%qSeD7Ps$&EX<2l%+{>R?1U?wIf zH}RHBqxYs|*?%u(p?HA|JUk!M(=24HFdO5^M31fN#YFVucIEfEt2uJynxEK>%cD>r zJPUnU(vuy^NJNK9QdMui=LV<}f&VNIaat<-c)m-TZLWFjkS-1kOE$XbXFdGCt~>>e zSx0rv{yqH-;zy5!kXzF|x^RD?#K7QyqfJjvOeFbgAvUm3@a(Tk9XYp6;Y_t5xz;E^ z$VveopH?3&FIshaDFekO#8}gF`F{B0fJ_@~;tVwjLn$n}@tr_f$dj6Bs|d`#uV2R` z)avp;A^5oi{FvyxvQ){CRja9A3O*X`6DnpD6%aCB2Rjd}YE?SlWh?aw8zIdgR2K1# zsV|<4q>P3`L%KUe$j55u3&6jzfX8`~m&Rpn^@%858srrHMVPRZ(pe%QEO_0ya!kua z9xp38ApPt1^rX52%qf!*T8E=DCR;OdNyUP3St+yDXa0*@FD$~oMe|rrTZv!sxWDX| zR+^DRfgvy@w7ATNi_a9=m*#rpC@l9d~d;q zxWbx9B@3!BrTAzot|dt%RAxHg<~0_20M|REtR~XuVScfh9<3Ez-|+eK{du2v0M3Mq zx`vjGi*jMmjN{4G7x}>_+r~V;BKOruivMD0`nY(np~hdCiM6BujtZ(*2{ ztH6A7C-w|`S$Tjz6}@?%-bCs+897<_{<2`F+{Y_GrtOkyWyh zTtD$axVdTP&t$ z=tc9Di}p0CN^OSN^1KU9@`1Z$)Cy;8VU-;h;#~eeiqJREOp(<=a>vRLjO;aWrOKtF z0f9B|11jV;%);VgCe_ZUsgtd-C-h#NqguWO>z=%&*_ScI!O+Z&A8KCRDL0*}A@gf4 zNNmg99ovNXxO=D||A1>v?n|-4A{!e~Mt+<~FP_XTzj^QbC*<)A5I|pX&MD{v4%v~O z{4`cX12PWJSWVZ=_tuxqvZ1Y>)<;*S=DTP#k39Vt#X4$a5h5>e+BC0<=sL2Y8Xm*2W9dvCKZ8lRF8*pH;k@?E2tY_*T2*$p~FiX7j?qrvIigRYMzu%*^JufG&)6!mp@FQ zW-RO5&f83sR6A-Wu1sK0%Jm}OuSc?9uPqngW(T*8@YlL&lVF0UyOMRe`%-t*-_+#$ z=19U`Fmuch*u1C_N%byn0tpZnf^PAN#PuZ*#V}@h3W0?sih%Kmidi<(ONE+75#@1f ztnLIlaNce`KY2GJqdjLyG@4Lby)s5Vwh0JbEB67vc5?WI516l5SuUZdto%TD^>0mw zEb&PHD1@e=+urcvET@tFystsBFr!7J85qU{H33ET;9anwg{zgov@ZkpffVXgaBu;e*4U)t$64o=oaSQti>oif8sEljU%II*bA4-?il!CoQp(_| zLaLi}49YirHYUmdrc*i(l4A5W+IRaSkF7_wJa$}cM4##YP zyy8Jt2afuqB-Aca`!T}Rp@`>oCp4^2Jmx$ecw-!HWG3ainSst`EMvs5BFV5f4_Lm| z+x-!RvD8q=qNs=z-+w!c0+Iv$xe2Sl6Wsb*ZrNZc^l%WEwdlXsnM(`CKVE+mTJ>?Q zH)I!VoLCM}(^E7`7Ms{SBST*X5ADUKwY!sN_t+1U=0`q8 z=iz)^#jvDO>t=S<1>z6%uq9Ey@YQ@NE&W56c$ybG*!udw^a8{wbSTnpdMf>edIO^1 z#q-;3)IaiRuNWyK4G2hM3vp-sx}AOXqI{bFa1Y*Tk(9VK=)uCck<}gO&kmzMG}m^T zp!i&enU3=TFn@thT_w6wL-D-Kc3F(#y^ThO3P*HLui(tK{2r&T%Kd6xh-Z$JW-hk! zC$-8RV*NJ<_;$E#1kT*IZIse;-RE%;IBvcYB3DS;WB%g>3~lJ0?{6upUo?v%*HFG| z5%}hbvQ8F!--XS+m3P==dIwvKy3dS@J0@&O$z@k}y8Q%<6x?n`WHTyh{>|$Gn#tK+ zvcL$7NNG53P7LSmz3&>aOM1A!=wkKhy%0HN%n!v3ip0Y$Le~AQ$pKw*1?-)?&+^GEvMcqL^3n`iL3uLV%mjw?J!z>K z88^-`6oPhulSc+hM)y~k4}%d%KJDg`>F2bp$P7zn`;RN$V`pXyda3Ow%~$k4 zdz6wQ9KQ1?QdcLSf5;0M39;m~=e&C`GE8GFPcsP{U5q^_PgY$k?Zoj3B~MW&N;>9F zzAT0t#dH~JE)2xCxE~sYkNJ#(%$~OV3DUWl1~V^Yo@FcrG~?;3xC4SMvh&+VzAJ*N z-_RIJ=zVd!KX4%3xUF7@{Uu&mn=Um@^eeuEeHS;+Q?`OIFHyt(B`Ia{9TUK5!`GKa zDpS`-gROr_{<#<|D=T{_GpPRMl6ttkV?Gi9l7FA0z-8ZQ8~dD}TSXks*5stwjfb*Xa@8l-9dBl>#W;^yb9XPDZd1V)${{q=To@u$_k9g6788>LWkG?L6}`16YAGl zMaE}@%i7zB?Ie@Z7~WWnhji z`8qFb%sOi6vV(m4uYdf%t+JBrR@vy61D}xQFc!nyH8p7}SKBP`xKGj|v`{bdiH?rD z9^dK8kBSRiKCK+B`lC7Bvm{^gY5YS=J;}&R1p*-25`LYfYcreF%UdlG#&bMhwi|_4zsKD9EX;G>6U}o}# zW}4dDDoD!qCl^;z2}10KxARX5LwdhFxgqM^+P2jx;ML;$a}>i#oGe>v6%Wr{eY5i^ zB{2K4irG@fdJN_23>&qxpY`YlpGDy%wSOs3==T>cORvhy`4QJxqV&@cyCgE~?}RK(1kQout6or2U?_v7EXA&mklO|lo|3~6mL-MT28+_wqJ zLhp2-6i2(itaBP)4ZG~+ZR}ofT`+RZlTfH&97|p28J~8=Rd4wTl&fGne&S7><0oC6 zifaU!L;)(%SSCH=!RrYaJ9}nvA3Ot5*zl!)uZHZPjtl4(*@}8vk@Kv&Q4t+HFKuwK zAozQ7I8;x}xr5#0{`~OOi`%dEZ{@^@k&CX_Ua8QBFo^mMS87*GQl13TqH=AL&7-;} zbRmeg7Y1B>+6LilgPuD&@|8EuUxjY|*3??n2l(fSnTS7Q2?TW*lJ|PGbl;aR(gLlEBNB`sXPGQ1NAi3(p3b!@L8G+U1_x;8e@=&vi*frqNWL?BJ!=Wg43hfod zUw(3Ex%Jy8RfbCr-IZhhlYHoS;g#%`H|G-p@2)m8KVAkY);yB%fi}v@RKb^?UuhY3 z2=e~S-v@Gnn$fLP99@e?G^2cCO-JH&Lql z8J{(HF$$#0zvOd?Hh!10%6gvgTe8J9l;%Xt$=5+!Q3Tzj*SMKDalavtK{LewzAb~< z0wwu=sW@$|yMUbnJN}jY{ry&uN^J*D@?YGSeOt<hzE>tqq#2nk`5hpk4!YYi_}tX z6Gj?Z536QB>@KowxwSeGLWUBA^(1h{YA3qxY}jAsP(q0lla?K``1L{eo^>ZyCZM!h zUQvBbqR2N^N{T@E0^=PLqlRRu*dP}1nFt?bt%Ec7)r6z3d1{T?r-#tcTVbaCjc*K? z3fTfJ^ejp1Oy8v{7r7>0k*afMj0_6U;t``*)hMfe#eIrN zo>s|pB`IoAABW`a>~04}ZlnP?qNY%XLG4-Hb;0FV-O@&R>(_iT5k4u5yMo;v$8Qd{ zlA@13;(nt}T}<_DLS;~`)^1{K>_!_A>qeF}w6RR(PqK_US#x3jF3?u2S0y?$>E`u6 zXS*9^%3%BjCS7tUEgN#Mb{mYh!MlKHrc_n@!{IWZ5@HfW7NI6oS-mCi`qEhF&Q?KI zvPKGl@Iwn-^ehCPJCEAaDIa3ojUVrN$Mbb>en*tH)M@Y&8(8iYTKsi8ZM<9#wVpP89S zn!0LVa={2MK?AU62|I(V86JE@f$K;_gXGKt#74x57(j>5j#HBt6LG>~O_+>TinCQv zY#?{PizgsXHCLFQx8>?o3fb_qan5PRlt~qlV7zKz zSc1{xP5FHRB*F_O=B3(C7Yjgexe~i=u(|Wewm1RQOnx{+5$)49?($!lCK}X4xiA@B zvX>b^#PF>|My4==Hz;^eN3ZioJuesZ|62qqk0tFKpcrXU_bZ>aMnD6wcQ;zs5~oaW z9)F})_UEBd=RS1B(d>@kpQ(Bqj+Uz{kW2Rx62IHAff4_$e1#8PMduw?Xam4v5inm* zSUgI@(83Iv>#zZ?f18Vgr7dg=6%YU2&Ze-g3M?$Fvm&dB^m3rvEC*%E^RZ22N4z;R(8iEmN3tTqoxFjQ!*~<2`lg-` ztGWI4$oo~|Ug}oN2puT>NZI3}-S>YJQku)owxcrZ$iEUc<1q~9vqVyNPSUccgw&vg-oE!hg6&R-0U|4z{OIIB@@0AA~^I{v@TXTjZ@N?N{ z(0sL$BR_F!fS9Ko0Fk{6{ zvf!vS;F4nZ@le^Dtqf5~ixQt6x%&s}_K`5aoHsQj-&$N$rHk&YLwU8uc+6$ePq5`~0e2T&bbL|03r^ z0Lf$tQ3#O?nl6(w$>6b{s!Gqdi?q}?z{pg}7ePqET3y_~zTW<$CAS!yRh_&=ju%VJ z-agEzLv61L7uS5jCYw(?2Fk&lKgPmJLRS`s(3D}?q^0=H`9Hwme@~59KHhx~68Ut) zRUMcAQk44dg<-DRE}-L78(?-+GGBLLV5LRxKeh~EeW^A@U7q-2AQ91@4#d$gcGoQ`JQJcXhV4U%!W1RJcZrZsCtparyf@`TKz_{ zDU{-)%o1SZuT2C>c1>F}3GnW}37meOE~U~Ww(2t?ZD$?>)O`u=_oSD|X3!MmHqKHm z1HBfPqIl%)Bhp7HtWI`XCPB8_(C&{dBoP`=qCcu-DJEG)TFgmI+sAFy=x}n102e{D zz^st%InB#!P1HTdRo_2DDcV4Y>iFHbFT%I`!=s~Ik?RXI+)>3i*=}w~b?5bNo0IFu zQEn7T#xNW>!5A=^2e5xvB^v(m2x_v9b>553-rqkktU{8(x#)d5A-&3F^Xj8E#pW|p zdwomwMwUScGCX4u{r9t=`s$(8U($iTu3X`mt5;h=jW>F)t`f`BA4z)4YH7`!a*{Nc zZ!B6zA#Hf*ZwxHbI-wvhe%U-V=q*HK7a@|YaJ5r7qFkKC0Xb6v;soPVP1KqZg>S0=X6{&l0#G z{WW@g=5MU6nZnG=YU9s)9|rC5Os$>{m`rQpiFDavc3O+J%&SZCfBClI`6xsE*3jaGHGG1&4XvR@}F;@pm9#WdVwbsngvOP9S*6^UQ5 zI!k(NC21#0dimA+PAw{2TAf zBc{7Uj>`sQqsQnbEqL3*B54XN#qs@dK}U^AIh0Y(%|NDc&`sANly_;;W8Qk8c`8oW473Tr$v>i4L?Zx&XS*+8Uc8$V4K{=-xzCYCK~gqz`YrVZ1#o zHbqH5`v!V3eCDL*uNKiai76Lm#}bdaL>OBicRj+;rpY1Wvikh-Y*PB1air?!-g~38 zY=g>y`r*G|#HPMc5e{Aw;+(tX`_ZL~?3G{Ki<4F^=+?*tZn`A^VaFZ>2;T zhisThrdt+e*1%Pfn<2RE=%}1XQgA&-5M#`%z8yfYu)Ch)V2&`!STAZO&i8_Nd&i)) zC;d9V8`cgpwd@H*yQUTAtSEV=UNZJ&8y2HSABxYL?)0OOf3g(RLSM(-JYQVgWnvqBE7o?PzY}}bWZxxm8B0nyfT1_j!$#YrsiqZssSt_6 zrk*Fic%mZ#6601Ls)<;q1jTSNP$}Pq%(X~e9fX{m1*_6m41pf)nm(+R6JnVY>58#V z)_mp?ewsZno6cW3Gj@xx@x=}U-v5QmVZHs!=T1Nb#1mN0hnB>RtDdJY!jC;vBJwLc zP`9U(?X>TaYs6_N;Im>;nnOLUsxn|kwLs4ujoAcDbBM4;!?mWqdV5Wox?uBOVzj*+ z8{o^I{-L<_0BmW5-e-ziNyGud_s20(o-2}{BAx7ClMP68{_W;26RuA9VIi6&SO>8Z z=(iexcoMBK%dP>(0;QfBbN(7Tm@`6);ABSFk$6@pP(T2-7hCZpMa0y#Ss8Rd-20th z@5wX5{Q=PR>whk#>H2)%hulmHC(gvW2&@?&{sA;V=fgBHbHB5n|AN+ybLe!$b#q=g(GZph0sGSM5K!pEHly2@>zK$PP7MH-nu9IK!j}X1%N# zHlA4oJe{ZwlQa<1Q!3M}n7IUfar*rd5(tn0x3dS_OpG6^JWyIjWcXP7WBK2fR_T7A zd|-f=rjF=YQv59FH})D$WNdwC!byK`3wt;O81C)?1$gzM0mk?kEHbbDuKpn(S)-NIC=RC>_~#F>|e*#(*E;)2B0)h@ByTY4cK}=%7_%) zIta7HNpT>DQ)st&o;o?)2{&5+hstjFi);=-nKNLjRs*5ZHCTOWf7{8iE=n|?Z3_M8 zmPNim$fNFs@`Gvd2vCkhl?PrObJAE5b3H+Lgc0>cImnBAVX*>?yw_mP=lSIdIS;Kv zn91cqMSecDA$|%bV^RXc($R;R7nfz;mE|iSD#>NV=K{?yeDSllvAHMtn5|0d(q4+X zX3+oau`;=c`MOV>jxeCKyvUayFZ|m^SX4MZ@3R)-Wl3g%==5dBiH0a$VtuD!4m);K4-3<23)lmCs54r2#j=XmSeylnRe zNUrz8Gr8R*2ZBlk=pD)EKmMbjdrZ?S1?kgng)Hv8+?-HOHi~I4 zmR*SqT$)7lE^Q-ENh6n3#HIQ}V41+k2{|+Yrr-SMNGpFTR>|+MMlqwm;48*yX7QuV z>=U1!oZMq{?bB#lhHZ7~JG9Vw0ViJ9rxPDkqM=3m-1n3cSHv;T_><9%}CoojxD^vwm@r&V*jUl_B_LjJscFdk-b|&BC{O~i1ECa>*T*3p5&4I|9v?FM3T}Nf7p7QKRKp>>jZbnbAcR&mBxZZ>Gj};63}SZ&~%>X zF^on0+Cl7N2S6WJBNf6MBzp6fX>e>%5B?()*F8OCGO^F~f0Ity|L4&C3`-C(z@#FR zsR9_o{j((Fkb(EKcnss-MM0=vD%5_B*liF%NU@%}LhVL>i63u~Q5XNjCgx1`SU04+be*xGWK{r|DT z)6%J2J&!9SnX?0%w+!a6h=fj$elJSqqY&~prGEM#C_wu~e!hJ_M)Hx3)6hHgm3^|+ zT+@Cn Im`ULO1?A_2PXGV_ literal 0 HcmV?d00001 diff --git a/app/scss/rewards.scss b/app/scss/rewards.scss index 49fcfd34a..2718fdcfb 100644 --- a/app/scss/rewards.scss +++ b/app/scss/rewards.scss @@ -413,6 +413,10 @@ width: 100%; height: 100%; + .rewards-notification-optout-image { + width: 100%; + } + .rewards-notification { margin-top: 17px; margin-left: auto; @@ -428,6 +432,9 @@ line-height: 2; &.first-prompt { + margin-top: 37px; + height: calc(100% - 74px); + width: 244px; background-color: $white; border: 2px solid $dark-purple; color: black; @@ -437,6 +444,19 @@ margin: 0px 22px 0px 22px; } + .notification-text.first-prompt { + margin: unset; + padding-left: 16px; + text-align: left; + line-height: 20px; + height: 100%; + overflow: hidden; + + a { + color: black; + } + } + a { text-decoration: underline; cursor: pointer; @@ -461,6 +481,31 @@ border-radius: 3px; text-transform: uppercase; } + &.first-prompt { + .btn { + width: 104px; + } + button { + &:nth-child(1) { + background-color: #5B005C; + color: #FFFFFF; + &:hover { + background-color: #5B005C; + color: #FFFFFF; + } + } + &:nth-child(2) { + border: 2px solid $dark-purple; + background-color: transparent; + color: $dark-purple; + &:hover { + border: 2px solid $dark-purple; + background-color: transparent; + color: $dark-purple; + } + } + } + } button { cursor: pointer; font-weight: bold; From baaa4c66e55903047584acf2954e8867d6990d7f Mon Sep 17 00:00:00 2001 From: Aleksandr Panin Date: Wed, 28 Aug 2019 11:43:36 +0200 Subject: [PATCH 2/9] M20-51: adding labels and headline --- app/content-scripts/rewards/Notification.jsx | 22 +++++++++- app/content-scripts/rewards/OfferCard.jsx | 20 ++++++++-- app/images/rewards/best-offer.svg | 20 ++++++++++ app/images/rewards/exclusive.svg | 31 +++++++++++++++ app/images/rewards/powered-by-myoffrz.svg | 21 ++++++++++ app/scss/rewards.scss | 42 +++++++++++++++++--- 6 files changed, 145 insertions(+), 11 deletions(-) create mode 100644 app/images/rewards/best-offer.svg create mode 100644 app/images/rewards/exclusive.svg create mode 100644 app/images/rewards/powered-by-myoffrz.svg diff --git a/app/content-scripts/rewards/Notification.jsx b/app/content-scripts/rewards/Notification.jsx index 1f0666ed9..789c237db 100644 --- a/app/content-scripts/rewards/Notification.jsx +++ b/app/content-scripts/rewards/Notification.jsx @@ -39,9 +39,8 @@ class Notification extends Component { renderOptoutImage() { return ( -
+
@@ -61,6 +60,23 @@ class Notification extends Component { ); } + renderHeadline() { + return ( +
New Reward Discovered!
+ ); + } + + renderLabels() { + return ( +
+ + exclusive + + top angebot +
+ ); + } + render() { return (
@@ -80,6 +96,8 @@ class Notification extends Component { ) }
+ {this.props.data.type === 'first-prompt' && this.renderLabels()} + {this.props.data.type === 'first-prompt' && this.renderHeadline()} {this.props.data.message} {' '} {this.props.data.type === 'first-prompt' && this.renderOptoutLink()} diff --git a/app/content-scripts/rewards/OfferCard.jsx b/app/content-scripts/rewards/OfferCard.jsx index 190869f9f..ed4229db3 100644 --- a/app/content-scripts/rewards/OfferCard.jsx +++ b/app/content-scripts/rewards/OfferCard.jsx @@ -55,6 +55,8 @@ class OfferCard extends Component { this.closeIcon = `url(${chrome.extension.getURL('app/images/drawer/x.svg')})`; this.ghostyGrey = `url(${chrome.extension.getURL('app/images/rewards/ghosty-grey.svg')})`; this.kebabIcon = `url(${chrome.extension.getURL('app/images/rewards/settings-kebab.svg')})`; + this.poweredByMyoffrz = + `url(${chrome.extension.getURL('app/images/rewards/powered-by-myoffrz.svg')})`; this.closeOfferCard = this.closeOfferCard.bind(this); this.copyCode = this.copyCode.bind(this); @@ -69,7 +71,7 @@ class OfferCard extends Component { { type: 'first-prompt', buttons: true, - message: t('rewards_first_prompt'), + message: 'Would you like to receive offers and discounts from trusted Ghostery partners?', textLink: { href: 'https://www.ghostery.com/faqs/what-is-ghostery-rewards/', text: t('rewards_learn_more'), @@ -315,10 +317,22 @@ class OfferCard extends Component {
- {t('rewards_disable')} + {this.props.conf.rewardsPromptAccepted && + {t('rewards_disable')} + }
- { this.state.showPrompt === 1 && diff --git a/app/images/rewards/best-offer.svg b/app/images/rewards/best-offer.svg new file mode 100644 index 000000000..13a0f4d8d --- /dev/null +++ b/app/images/rewards/best-offer.svg @@ -0,0 +1,20 @@ + + + + best-offer-icon13x12 + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/images/rewards/exclusive.svg b/app/images/rewards/exclusive.svg new file mode 100644 index 000000000..61bb751d5 --- /dev/null +++ b/app/images/rewards/exclusive.svg @@ -0,0 +1,31 @@ + + + + exclusive-icon13x12 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/images/rewards/powered-by-myoffrz.svg b/app/images/rewards/powered-by-myoffrz.svg new file mode 100644 index 000000000..26f202dd8 --- /dev/null +++ b/app/images/rewards/powered-by-myoffrz.svg @@ -0,0 +1,21 @@ + + + + powered_by + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/scss/rewards.scss b/app/scss/rewards.scss index 2718fdcfb..452013c2c 100644 --- a/app/scss/rewards.scss +++ b/app/scss/rewards.scss @@ -344,6 +344,11 @@ } } + .reward-powered-by-myoffrz { + width: 98px; + cursor: pointer; + } + .reward-ghosty { flex: 1; background-repeat: no-repeat; @@ -413,8 +418,11 @@ width: 100%; height: 100%; - .rewards-notification-optout-image { - width: 100%; + .rewards-notification-optout-image-wrapper { + height: 80%; + img { + width: 100%; + } } .rewards-notification { @@ -452,6 +460,28 @@ height: 100%; overflow: hidden; + .first-prompt-labels { + font-size: 9px; + img { + margin-bottom: -2px; + } + } + + .first-prompt-label { + text-transform: uppercase; + color: silver; + padding-left: 3px; + padding-right: 6px; + } + + .first-prompt-headline { + color: $dark-purple; + font-size: 14px; + font-weight: 700; + padding-top: 11px; + padding-bottom: 5px; + } + a { color: black; } @@ -487,11 +517,11 @@ } button { &:nth-child(1) { - background-color: #5B005C; - color: #FFFFFF; + background-color: $dark-purple; + color: $white; &:hover { - background-color: #5B005C; - color: #FFFFFF; + background-color: $dark-purple; + color: $white; } } &:nth-child(2) { From 8e3c4b3dfeeb92a5246c5fe46d65df9015ab9926 Mon Sep 17 00:00:00 2001 From: Aleksandr Panin Date: Wed, 28 Aug 2019 11:48:15 +0200 Subject: [PATCH 3/9] M20-51: just for eslint phase 1 --- app/content-scripts/rewards/Notification.jsx | 94 ++++++++++---------- app/content-scripts/rewards/OfferCard.jsx | 46 +++++----- 2 files changed, 70 insertions(+), 70 deletions(-) diff --git a/app/content-scripts/rewards/Notification.jsx b/app/content-scripts/rewards/Notification.jsx index 789c237db..54d670c56 100644 --- a/app/content-scripts/rewards/Notification.jsx +++ b/app/content-scripts/rewards/Notification.jsx @@ -37,45 +37,45 @@ class Notification extends Component { } } - renderOptoutImage() { - return ( -
- -
- ); - } + renderOptoutImage() { + return ( +
+ +
+ ); + } - renderOptoutLink() { - return ( - this.props.data.textLink.callback()} - > - {this.props.data.textLink.text} - - ); - } + renderOptoutLink() { + return ( + this.props.data.textLink.callback()} + > + {this.props.data.textLink.text} + + ); + } - renderHeadline() { - return ( -
New Reward Discovered!
- ); - } + renderHeadline() { + return ( +
New Reward Discovered!
+ ); + } - renderLabels() { - return ( -
- - exclusive - - top angebot -
- ); - } + renderLabels() { + return ( +
+ + exclusive + + top angebot +
+ ); + } render() { return ( @@ -85,22 +85,22 @@ class Notification extends Component {
- {this.props.data.type === 'first-prompt' && this.renderOptoutImage()} + {this.props.data.type === 'first-prompt' && this.renderOptoutImage()} {this.props.data.type !== 'first-prompt' && ( -
{ this.closeNotification(); }} - style={{ backgroundImage: this.closeIcon }} - /> +
{ this.closeNotification(); }} + style={{ backgroundImage: this.closeIcon }} + /> ) - } + }
- {this.props.data.type === 'first-prompt' && this.renderLabels()} - {this.props.data.type === 'first-prompt' && this.renderHeadline()} + {this.props.data.type === 'first-prompt' && this.renderLabels()} + {this.props.data.type === 'first-prompt' && this.renderHeadline()} {this.props.data.message} - {' '} - {this.props.data.type === 'first-prompt' && this.renderOptoutLink()} + {' '} + {this.props.data.type === 'first-prompt' && this.renderOptoutLink()}
{this.props.data.buttons && (
diff --git a/app/content-scripts/rewards/OfferCard.jsx b/app/content-scripts/rewards/OfferCard.jsx index ed4229db3..d7613c534 100644 --- a/app/content-scripts/rewards/OfferCard.jsx +++ b/app/content-scripts/rewards/OfferCard.jsx @@ -169,23 +169,23 @@ class OfferCard extends Component { } handlePrompt(promptNumber, option) { - const reject = () => { - this.props.actions.sendSignal('offer_first_optout'); - sendMessage('ping', 'rewards_first_reject_optout'); - this.disableRewards(); - this.closeOfferCard(); - }; + const reject = () => { + this.props.actions.sendSignal('offer_first_optout'); + sendMessage('ping', 'rewards_first_reject_optout'); + this.disableRewards(); + this.closeOfferCard(); + }; if (promptNumber === 1) { if (!option) { - reject(); - return; + reject(); + return; } this.props.actions.messageBackground('rewardsPromptOptedIn'); this.props.actions.sendSignal('offer_first_optin'); sendMessage('ping', 'rewards_first_accept'); } else if (promptNumber === 2) { if (option) { - reject(); + reject(); return; } this.props.actions.sendSignal('offer_first_optlater'); @@ -317,22 +317,22 @@ class OfferCard extends Component {
- {this.props.conf.rewardsPromptAccepted && - {t('rewards_disable')} - } + {this.props.conf.rewardsPromptAccepted && + {t('rewards_disable')} + }
- - { this.state.showPrompt === 1 && From 5638487636ca2607e7e52cc0f60bb6a0667e920d Mon Sep 17 00:00:00 2001 From: Aleksandr Panin Date: Wed, 28 Aug 2019 11:55:50 +0200 Subject: [PATCH 4/9] M20-51: just for eslint phase 2 --- app/content-scripts/rewards/Notification.jsx | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/app/content-scripts/rewards/Notification.jsx b/app/content-scripts/rewards/Notification.jsx index 54d670c56..51165e1a3 100644 --- a/app/content-scripts/rewards/Notification.jsx +++ b/app/content-scripts/rewards/Notification.jsx @@ -77,6 +77,16 @@ class Notification extends Component { ); } + renderClose() { + return ( +
{ this.closeNotification(); }} + style={{ backgroundImage: this.closeIcon }} + /> + ); + } + render() { return (
@@ -86,15 +96,7 @@ class Notification extends Component {
{this.props.data.type === 'first-prompt' && this.renderOptoutImage()} - {this.props.data.type !== 'first-prompt' - && ( -
{ this.closeNotification(); }} - style={{ backgroundImage: this.closeIcon }} - /> - ) - } + {this.props.data.type !== 'first-prompt' && this.renderClose()}
{this.props.data.type === 'first-prompt' && this.renderLabels()} {this.props.data.type === 'first-prompt' && this.renderHeadline()} From 226647bd15f418ae30752750d8d9b52f1c2d9a29 Mon Sep 17 00:00:00 2001 From: Aleksandr Panin Date: Wed, 28 Aug 2019 14:11:11 +0200 Subject: [PATCH 5/9] M20-51: hidding cross button when show first-prompt --- app/content-scripts/rewards/OfferCard.jsx | 20 ++++++++++++++------ app/scss/rewards.scss | 5 ++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/app/content-scripts/rewards/OfferCard.jsx b/app/content-scripts/rewards/OfferCard.jsx index d7613c534..a7b8855dc 100644 --- a/app/content-scripts/rewards/OfferCard.jsx +++ b/app/content-scripts/rewards/OfferCard.jsx @@ -41,6 +41,7 @@ class OfferCard extends Component { showPrompt: this.props.conf.rewardsPromptAccepted ? false : 1, showSettings: false, rewardUI: templateData, + shouldShowCross: this.props.conf.rewardsPromptAccepted, }; this.iframeEl = window.parent.document.getElementById('ghostery-iframe-container'); @@ -193,7 +194,8 @@ class OfferCard extends Component { this.closeOfferCard(); } this.setState({ - showPrompt: false + showPrompt: false, + shouldShowCross: true, }); this.props.actions.messageBackground('rewardsPromptAccepted'); } @@ -235,6 +237,16 @@ class OfferCard extends Component { return t(`rewards_expires_in_${type}`, [count]); } + renderCross() { + return ( +
{ this.props.actions.sendSignal('offer_closed_card'); this.closeOfferCard(); }} + style={{ backgroundImage: this.closeIcon }} + /> + ); + } + render() { return ( // @TODO condition for hide class @@ -244,11 +256,7 @@ class OfferCard extends Component {
-
{ this.props.actions.sendSignal('offer_closed_card'); this.closeOfferCard(); }} - style={{ backgroundImage: this.closeIcon }} - /> + {this.state.shouldShowCross && this.renderCross()}
diff --git a/app/scss/rewards.scss b/app/scss/rewards.scss index 452013c2c..f751f7e5f 100644 --- a/app/scss/rewards.scss +++ b/app/scss/rewards.scss @@ -39,7 +39,6 @@ .ghostery-rewards-component { * { -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; } .hide { @@ -525,11 +524,11 @@ } } &:nth-child(2) { - border: 2px solid $dark-purple; + border: 1px solid $dark-purple; background-color: transparent; color: $dark-purple; &:hover { - border: 2px solid $dark-purple; + border: 1px solid $dark-purple; background-color: transparent; color: $dark-purple; } From 9b3d2f92c98cf394d8ad014b52e42f492096e007 Mon Sep 17 00:00:00 2001 From: Aleksandr Panin Date: Wed, 28 Aug 2019 14:21:46 +0200 Subject: [PATCH 6/9] M20-51: fixing tabs vs space --- app/content-scripts/rewards/OfferCard.jsx | 3 +-- app/scss/rewards.scss | 13 +++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/content-scripts/rewards/OfferCard.jsx b/app/content-scripts/rewards/OfferCard.jsx index a7b8855dc..6568a554d 100644 --- a/app/content-scripts/rewards/OfferCard.jsx +++ b/app/content-scripts/rewards/OfferCard.jsx @@ -56,8 +56,7 @@ class OfferCard extends Component { this.closeIcon = `url(${chrome.extension.getURL('app/images/drawer/x.svg')})`; this.ghostyGrey = `url(${chrome.extension.getURL('app/images/rewards/ghosty-grey.svg')})`; this.kebabIcon = `url(${chrome.extension.getURL('app/images/rewards/settings-kebab.svg')})`; - this.poweredByMyoffrz = - `url(${chrome.extension.getURL('app/images/rewards/powered-by-myoffrz.svg')})`; + this.poweredByMyoffrz = `url(${chrome.extension.getURL('app/images/rewards/powered-by-myoffrz.svg')})`; this.closeOfferCard = this.closeOfferCard.bind(this); this.copyCode = this.copyCode.bind(this); diff --git a/app/scss/rewards.scss b/app/scss/rewards.scss index f751f7e5f..6fef61095 100644 --- a/app/scss/rewards.scss +++ b/app/scss/rewards.scss @@ -38,7 +38,8 @@ .ghostery-rewards-component { * { - -webkit-font-smoothing: antialiased; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } .hide { @@ -451,7 +452,7 @@ margin: 0px 22px 0px 22px; } - .notification-text.first-prompt { + .notification-text.first-prompt { margin: unset; padding-left: 16px; text-align: left; @@ -481,7 +482,7 @@ padding-bottom: 5px; } - a { + a { color: black; } } @@ -515,7 +516,7 @@ width: 104px; } button { - &:nth-child(1) { + &:nth-child(1) { background-color: $dark-purple; color: $white; &:hover { @@ -523,8 +524,8 @@ color: $white; } } - &:nth-child(2) { - border: 1px solid $dark-purple; + &:nth-child(2) { + border: 1px solid $dark-purple; background-color: transparent; color: $dark-purple; &:hover { From a5a4fe7bdf10b65cdccee8af67f320139ecd61a2 Mon Sep 17 00:00:00 2001 From: Aleksandr Panin Date: Wed, 28 Aug 2019 14:23:50 +0200 Subject: [PATCH 7/9] M20-51: fixing tabs vs space problem --- app/content-scripts/rewards/Notification.jsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/content-scripts/rewards/Notification.jsx b/app/content-scripts/rewards/Notification.jsx index 51165e1a3..3ab0feaa4 100644 --- a/app/content-scripts/rewards/Notification.jsx +++ b/app/content-scripts/rewards/Notification.jsx @@ -114,8 +114,7 @@ class Notification extends Component {
)} - {this.props.data.textLink - && this.props.data.type !== 'first-prompt' + {this.props.data.textLink && this.props.data.type !== 'first-prompt' && ( Date: Wed, 28 Aug 2019 15:13:04 +0200 Subject: [PATCH 8/9] M20-51: localization --- _locales/en/messages.json | 12 ++++++++++++ app/content-scripts/rewards/Notification.jsx | 8 +++++--- app/content-scripts/rewards/OfferCard.jsx | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index aa79db610..8a20f0df4 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -2006,9 +2006,21 @@ "rewards_delete": { "message": "Delete this reward" }, + "rewards_exclusive": { + "message": "exclusive" + }, + "rewards_best_offer": { + "message": "best offer" + }, "rewards_first_prompt": { "message": "Would you like to continue to your Ghostery Reward?" }, + "rewards_first_prompt_extended": { + "message": "Would you like to receive offers and discounts from trusted Ghostery partners?" + }, + "rewards_first_prompt_headline": { + "message": "New Reward discovered!" + }, "rewards_second_prompt": { "message": "Would you like to opt out of future Ghostery Rewards?" }, diff --git a/app/content-scripts/rewards/Notification.jsx b/app/content-scripts/rewards/Notification.jsx index 3ab0feaa4..9c98a3352 100644 --- a/app/content-scripts/rewards/Notification.jsx +++ b/app/content-scripts/rewards/Notification.jsx @@ -62,7 +62,9 @@ class Notification extends Component { renderHeadline() { return ( -
New Reward Discovered!
+
+ {t('rewards_first_prompt_headline')} +
); } @@ -70,9 +72,9 @@ class Notification extends Component { return (
- exclusive + {t('rewards_exclusive')} - top angebot + {t('rewards_best_offer')}
); } diff --git a/app/content-scripts/rewards/OfferCard.jsx b/app/content-scripts/rewards/OfferCard.jsx index 6568a554d..1cfc9763a 100644 --- a/app/content-scripts/rewards/OfferCard.jsx +++ b/app/content-scripts/rewards/OfferCard.jsx @@ -71,7 +71,7 @@ class OfferCard extends Component { { type: 'first-prompt', buttons: true, - message: 'Would you like to receive offers and discounts from trusted Ghostery partners?', + message: t('rewards_first_prompt_extended'), textLink: { href: 'https://www.ghostery.com/faqs/what-is-ghostery-rewards/', text: t('rewards_learn_more'), From e1ef2e8fd86d39ec63ae12c7c1ef2dc31a897b19 Mon Sep 17 00:00:00 2001 From: Aleksandr Panin Date: Mon, 2 Sep 2019 10:53:49 +0200 Subject: [PATCH 9/9] M20-51: fix first flicker of the reward box --- app/content-scripts/rewards/OfferCard.jsx | 2 +- app/scss/rewards.scss | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/content-scripts/rewards/OfferCard.jsx b/app/content-scripts/rewards/OfferCard.jsx index 1cfc9763a..f6f45792f 100644 --- a/app/content-scripts/rewards/OfferCard.jsx +++ b/app/content-scripts/rewards/OfferCard.jsx @@ -249,7 +249,7 @@ class OfferCard extends Component { render() { return ( // @TODO condition for hide class -
{ this.offerCardRef = ref; }} className="ghostery-rewards-component"> +
{ this.offerCardRef = ref; }} className="ghostery-rewards-component"> { this.state.closed !== true && (
diff --git a/app/scss/rewards.scss b/app/scss/rewards.scss index 6fef61095..3980001b5 100644 --- a/app/scss/rewards.scss +++ b/app/scss/rewards.scss @@ -37,6 +37,7 @@ } .ghostery-rewards-component { + opacity: 1 !important; * { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; @@ -415,8 +416,23 @@ .rewards-notification-container { position: absolute; top: 0; + right: 0; width: 100%; height: 100%; + max-height: 600px; + max-width: 300px; + animation: fadein 0.5s; + -webkit-animation: fadein 0.5s; + + @keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } + } + @-webkit-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } + } + .rewards-notification-optout-image-wrapper { height: 80%;