From 81241b133241bc70d4f110901a12377c1bca4063 Mon Sep 17 00:00:00 2001 From: Rahul Malik Date: Fri, 23 Aug 2019 15:11:14 -0700 Subject: [PATCH 1/3] Store backgroundColor in ASDisplayNode We need this to preserve dynamic color capabilities for layer-backed nodes. In layer backed nodes we lose the dynamic color logic since we extract a CGColor from the UIColor applied to ASDisplayNode. With this change we can respond to changes in UITraitCollection.userInterfaceStyle for backgroundColor on layer backed nodes --- Source/ASDisplayNode.mm | 5 ++ Source/Private/ASDisplayNode+UIViewBridge.mm | 21 ++++---- Source/Private/ASDisplayNodeInternal.h | 8 ++- Tests/ASDisplayNodeSnapshotTests.mm | 51 ++++++++++-------- ...otTesting_user_interface_style_dark@2x.png | Bin 0 -> 36183 bytes ...tTesting_user_interface_style_light@2x.png | Bin 0 -> 41972 bytes ...otTesting_user_interface_style_dark@2x.png | Bin 0 -> 1637 bytes ...tTesting_user_interface_style_light@2x.png | Bin 0 -> 1377 bytes 8 files changed, 48 insertions(+), 37 deletions(-) create mode 100644 Tests/ReferenceImages_iOS_10/ASButtonNodeSnapshotTests/testUserInterfaceStyleSnapshotTesting_user_interface_style_dark@2x.png create mode 100644 Tests/ReferenceImages_iOS_10/ASButtonNodeSnapshotTests/testUserInterfaceStyleSnapshotTesting_user_interface_style_light@2x.png create mode 100644 Tests/ReferenceImages_iOS_10/ASDisplayNodeSnapshotTests/testUserInterfaceStyleSnapshotTesting_user_interface_style_dark@2x.png create mode 100644 Tests/ReferenceImages_iOS_10/ASDisplayNodeSnapshotTests/testUserInterfaceStyleSnapshotTesting_user_interface_style_light@2x.png diff --git a/Source/ASDisplayNode.mm b/Source/ASDisplayNode.mm index c97d0418b..694045859 100644 --- a/Source/ASDisplayNode.mm +++ b/Source/ASDisplayNode.mm @@ -442,6 +442,11 @@ - (void)asyncTraitCollectionDidChangeWithPreviousTraitCollection:(ASPrimitiveTra if (self.primitiveTraitCollection.userInterfaceStyle != previousTraitCollection.userInterfaceStyle) { // When changing between light and dark mode, often the entire node needs to re-render. // This change doesn't happen frequently so it's fairly safe to render nodes again + if (_loaded(self) && self.isLayerBacked && _backgroundColor) { + if (!CGColorEqualToColor(_layer.backgroundColor, _backgroundColor.CGColor)) { + _layer.backgroundColor = _backgroundColor.CGColor; + } + } __instanceLock__.unlock(); [self setNeedsDisplay]; return; diff --git a/Source/Private/ASDisplayNode+UIViewBridge.mm b/Source/Private/ASDisplayNode+UIViewBridge.mm index 258aa4c09..088611c71 100644 --- a/Source/Private/ASDisplayNode+UIViewBridge.mm +++ b/Source/Private/ASDisplayNode+UIViewBridge.mm @@ -748,24 +748,20 @@ - (UIColor *)backgroundColor */ if (!_flags.layerBacked) { return _view.backgroundColor; - } else { - return [UIColor colorWithCGColor:_layer.backgroundColor]; } } - return ASDisplayNodeGetPendingState(self).backgroundColor; + return _backgroundColor; } - (void)setBackgroundColor:(UIColor *)newBackgroundColor { _bridge_prologue_write; BOOL shouldApply = ASDisplayNodeShouldApplyBridgedWriteToView(self); - CGColorRef newBackgroundCGColor = nil; if (shouldApply) { - CGColorRef oldBackgroundCGColor = _layer.backgroundColor; - + UIColor *oldBackgroundColor = _backgroundColor; + _backgroundColor = newBackgroundColor; if (_flags.layerBacked) { - _layer.backgroundColor = newBackgroundColor.CGColor; - newBackgroundCGColor = _layer.backgroundColor; + _layer.backgroundColor = _backgroundColor.CGColor; } else { /* NOTE: Setting to the view and layer individually is necessary. @@ -775,23 +771,24 @@ - (void)setBackgroundColor:(UIColor *)newBackgroundColor Given that UIColor / UIView has dynamic capabilties now, we should set directly to the view and make sure that the layers value is consistent here. */ - _view.backgroundColor = newBackgroundColor; + _view.backgroundColor = _backgroundColor; // Gather the CGColorRef from the view incase there are any changes it might apply to which CGColorRef is returned for dynamic colors - newBackgroundCGColor = _view.backgroundColor.CGColor; - _layer.backgroundColor = newBackgroundCGColor; + _layer.backgroundColor = _view.backgroundColor.CGColor; } - if (!CGColorEqualToColor(oldBackgroundCGColor, newBackgroundCGColor)) { + if (![oldBackgroundColor isEqual:newBackgroundColor]) { [self setNeedsDisplay]; } } else { // NOTE: If we're in the background, we cannot read the current value of bgcolor (if loaded). // When the pending state is applied to the view on main, we will call `setNeedsDisplay` if // the new background color doesn't match the one on the layer. + _backgroundColor = newBackgroundColor; ASDisplayNodeGetPendingState(self).backgroundColor = newBackgroundColor; } } + - (UIColor *)tintColor { __instanceLock__.lock(); diff --git a/Source/Private/ASDisplayNodeInternal.h b/Source/Private/ASDisplayNodeInternal.h index bc56ae563..af1d0c772 100644 --- a/Source/Private/ASDisplayNodeInternal.h +++ b/Source/Private/ASDisplayNodeInternal.h @@ -147,6 +147,11 @@ static constexpr CACornerMask kASCACornerAllCorners = ASCornerRoundingType _cornerRoundingType; ASDisplayNodePerformanceMeasurementOptions _measurementOptions; ASDisplayNodeMethodOverrides _methodOverrides; + // Tinting support + UIColor *_tintColor; + + // Dynamic colors support + UIColor *_backgroundColor; @protected ASDisplayNode * __weak _supernode; @@ -253,8 +258,7 @@ static constexpr CACornerMask kASCACornerAllCorners = // These properties are used on iOS 10 and lower, where safe area is not supported by UIKit. UIEdgeInsets _fallbackSafeAreaInsets; - // Tinting support - UIColor *_tintColor; + #pragma mark - ASDisplayNode (Debugging) ASLayout *_unflattenedLayout; diff --git a/Tests/ASDisplayNodeSnapshotTests.mm b/Tests/ASDisplayNodeSnapshotTests.mm index 3977e00b6..e849ac070 100644 --- a/Tests/ASDisplayNodeSnapshotTests.mm +++ b/Tests/ASDisplayNodeSnapshotTests.mm @@ -76,28 +76,33 @@ - (void)testClippingCornerRounding } } -// Enable test when background color on ASDisplayNode PR merges -//- (void)testUserInterfaceStyleSnapshotTesting -//{ -// if (@available(iOS 13.0, *)) { -// UITraitCollection.currentTraitCollection = [UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleLight]; -// -// ASDisplayNode *node = [[ASDisplayNode alloc] init]; -// [node setLayerBacked:YES]; -// -// node.backgroundColor = [UIColor systemBackgroundColor]; -// -// node.style.preferredSize = CGSizeMake(100, 100); -// ASDisplayNodeSizeToFitSizeRange(node, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))); -// -// [[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleLight] performAsCurrentTraitCollection:^{ -// ASSnapshotVerifyNode(node, @"user_interface_style_light"); -// }]; -// -// [[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark] performAsCurrentTraitCollection:^{ -// ASSnapshotVerifyNode(node, @"user_interface_style_dark"); -// }]; -// } -//} +#if AS_AT_LEAST_IOS13 + +- (void)testUserInterfaceStyleSnapshotTesting +{ + if (@available(iOS 13.0, *)) { + ASConfiguration *config = [ASConfiguration new]; + config.experimentalFeatures = ASExperimentalTraitCollectionDidChangeWithPreviousCollection; + [ASConfigurationManager test_resetWithConfiguration:config]; + + ASDisplayNode *node = [[ASDisplayNode alloc] init]; + [node setLayerBacked:YES]; + + node.backgroundColor = [UIColor systemBackgroundColor]; + + node.style.preferredSize = CGSizeMake(100, 100); + ASDisplayNodeSizeToFitSizeRange(node, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))); + + [[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleLight] performAsCurrentTraitCollection:^{ + ASSnapshotVerifyNode(node, @"user_interface_style_light"); + }]; + + [[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark] performAsCurrentTraitCollection:^{ + ASSnapshotVerifyNode(node, @"user_interface_style_dark"); + }]; + } +} + +#endif // #if AS_AT_LEAST_IOS13 @end diff --git a/Tests/ReferenceImages_iOS_10/ASButtonNodeSnapshotTests/testUserInterfaceStyleSnapshotTesting_user_interface_style_dark@2x.png b/Tests/ReferenceImages_iOS_10/ASButtonNodeSnapshotTests/testUserInterfaceStyleSnapshotTesting_user_interface_style_dark@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe52d81580aed6b26a39ec08a90d0dc6be4ec26 GIT binary patch literal 36183 zcmeFZgcZal;v~&wd-Dloc zc)!2D?s`O^*lrUO5)NAM#tJT0!*2L~qvCnfqq*%^L2 z`9TeiN`ij?InM{99!acwQa+TD>|fpoBU4J3pVp0;iD zx{NPAl;wjzcPTf6QHK5`#}gLh+b`_8J+D9EyK*Sp%&(SpyjeIO-9tx1B!`1X7J@^- zdJhMldLv?=>G)K&8ULSG;gRtXkv`nM=ij$W;=?0~x5|H|`0tlt|KZ(&|IY{AeI`U4 z&O3@Z#uEAO5&r!TA$?|~|8od$Uu+?LYIGVRAK2Hp`)w@z(7WgVyi9I@h=q?L(&PU> zZvsydkqrO;ulN72-v7t;o_8VDejiiQXELwL5%<$Mr?st;CQdz%lUSa2+n>)DZm#s) zMvs=eA`)#H&pVU2-?m;JkIHFu1>W<&3$g=(Gh3tFcrBD|kQuzGE>EkvI8WzW zRh~kIf5S$ZuEp>dZ=R!mHkpve&tA<`S;=&TlgJFE@DF@>@u9yvifTXvliw)CF{`c_r`h8Iz z^{0!4^iLFN4J=&$=GwyU!A4a5Z!zd)L9SY&rPFfS^SWO5>ffFFHsEs~t)Ikc)}YRD z%Xo9L#6~)XE{b-EA}5{3>-th0;a6e#AS=J?G4tuXTZzj?R$O71n1SZgf3qn_UF1s0 zMTmd+B}I`6eZq=jMUmI{PODKKU+Qw1Y%S5?^G{XcZL!e?$#g464_;yGVqh~ zyH*U84_{*ta}OVHjCKXTM`NlVP6BJ2EfxJF+jt;hf}f0ItV!j<&X3CS zi~T=aC0Z>}YdJ}C0e`m>c?dY!ufL4eSJU!^qd%6ssqdR&()emLi&Tr~J5i!mlESlB zf7Cy&rf22XI+mw2aCv?-pk>qWrpju@xGiFZ;2i8vD}=K+Jx?NfTwncu&S^7mNsSnT$NHuh$9}7*`iIfJYLVu2=G&lTTOZ2rZV+Oy zkgShrW!Yz{ZD@n|m>#e$VEnBlLZS%Bp@D&CLiLCO7u#%!A|oYwg3o8jdLkeGZnR^J zVfW~viBrc;>y-y#lRaH-5^>^_YaWg6B|-hG%(q?e`T$dFWFv&Bv2;loH#^2CIWVy* zE3v9*Z_wg=D0BrW2F9{tpeC}tZ@oXmH7_{H}-M9^>Z&IK_d6wH?|5*3+ zHJ&YnOmN3l|7^OsXu5euY1H3W8t0vg+!9%6#ZB3cO&)$0i6=_&TC2*E4bd2=6FHkR`It%RD71#-gk+>MF#BsNfYvWje1B;e`K{C$5pCc73gvMy6Tqd zzj#hmLj1tx38(d}slfS4v{wiUK|kx@qYV$qPoD!FzdM<{FpKGxI9Bp4Of zA4(?*eq_>X%oR)cxy{4EO@!!Z6ssp(vb1S}Y`AXHvVxYMoC>ec5 zp0f4EHA_0yvL@ONccM_k(4K&pN(;#;-;L%qE~Ly|w~MjtiCjQ??4bnC!|Zl@8jphh zqEwUIb#tt<=6jf*PZzudBP3AuFmEq*6~GlnGXz762ffIur{*-~3}oan-dmnJZ`4<_ z25|>%QH>**uia!-)|V~cg~@@k zE_#@eDS+=0Q~kcrvsA6J*B!ZoQXh~o`matGY}$tL$Nt*|8n9hJnFv2~wHQEV87OPJOb1|fqIe6w8?PHf-y{bTx@WD!e~yS=Rwn+P@Qqnaeo)BFmR>{s!D>r!c| zlX_ka&sG!R+hRm+K^b`m2vNmt-^|us_oD$WRcbo)UXo3m?J`$BhhM`j{hwLd>Om^w zbP^J0N~bLIp-e)4+wLzss0?ueXJ6%Fkcq|VD6RJ3z-hr_k}k*p{vE8N_JKp7!p31U zA_^W+^Yp7ze(>ng?xgv6{+mbjlSNu4FFT=(FR4vNnjNDmx>*Jpy)ew%o_VcSOAb5eea5n!>pSuG0VpM`4&uJB8B9rLaS_e$=}h zm9qWVY%em>_j|!pz8DiLLuRmuM-K4|=Z;a|9?1xxSIm^0VzE8wz)J+B^;{fFj^Y*s z3z>p%IBdy!NJ0=YSLcXkp$s+F!#Iv%e)>VVr_Iwac720^of?A6n{`xYJ`NqNw$YWmkL{8 zK{gnu(|Mf2P0T@}&(>@5H1PB1)6AErdE5GT)xd5N265#}8BI}Au(DlYHu?(0tS~Ct zi7ZGezSET!aWb>w>PA($$WQoI1|n_M%ZJ-W7H82 zCqW4Z0BDx;{AC)&Q1NYzzU&e>Y~foYRe5=7bW|3M=(W~%GN|t9%rmU6Akghe>VlWF1U!! zJy}z(0hnZ*R~M(4W^m@&E?{e}0ZcGqnmG$ft7cUCVU_fsg$B3k9duHtV20^P`r7Wd zJx)EZE5~3RlI_1A28U291=cFDBKlZovtGMEwJ36F>ElaAmP9U_Dsf7TL#)RmsAxCq zF_%mwah+NKf(eILgYp=^GgD1#R#C2Ti>wrrLCB5|$$!3zF5|MCVvYv+`b($oKmx}= z`H+Cc_4R4fXrB-DuCHI4*(?dKL-#C*`fP`d?=QM^gCI2hD?QNzn1YvB#)wCcZ#RFu zB=~CCCMp<53G8N&v6{YA!KT`^1dIOEn@f|eN^)Y<62AqasL^%Vsj)vNTQcDC_=Jn7 zBz!#GUXBoy9W4l*y9H$Aq_9QHU0viAytyoo=XEsi_BTb1O%U{IJW(GWLNJI@qQExu zP@#Bkw-Q)HoyAAy)P%l%V3w0?+?Id1|8=q8Hi){#z$a<@CXbeUFFXMGg=8!+nkDCS zrBZ&Ctp0Ieh~yHv!k$GTJ&N{x=)0XC_eoOkqvDi`AtA^2Zj``niTvAJDyD+vIvI+Z zYqOfE@b~cY>NbF3-NIt}6J-Jx8nFk#OrC5pZJG9#*?F?$m zQrf2#$9bF(aiKKb?BYW|Eh7aIsPHs%!P+qT>Z9-??wj~ z2 z_7tkXdQF2wjf0cJ)HYh1CsKhp*z(~)Q5n75px0%W*JqOF?>>hSas6P;wU{VmsiT)t zPa!5Ka{Ikqc5qGRzVB_dnJq28w6f4>r*d59i%dyr#)bLGyD_Ox8;^eTHV23s_v}F1Iq!bJO-0FvxDC~ziok+S>3A&sF z2#xe-fR8`ts}v-FNK3RIfT72%`^YtG*2Pi$3QjO*t{O#uB1DWwa{^d{Jrpv<+j`zvM zUAq^(u?$)nXH#W{^h{5UlD;({u~M%ps8^cDx~#>U^jlTW8RIOCXG%R%YIJvDfXsF! z5Jjw_e8h(}jXXD(M=}7~55Rh~mrM;tAPnEQadYcNI6QI~L2Xh#OY;5NKBpwd|K@)B z&Fo8gM%{XDZ#9C%TfT^#3t%z3=&HSMo_{uIpS$gGl^$!CpCzouwIrg78q?{-2D zF_V&f^*cRu>z~}y@~<+qy*VH9;zWD=l({VclWQQ63o}6w(o-roeu~?e!CV9yP9l_W z(A{cc288RZ(c0@jgjE|pIRIia2-r>K@RzYJU;}lHsny6%)b3-Y?MfE!=`q9 zs*o{E8-(ccg4$ErTN*cyk|gKCgJiGNpw04xDp^G0GtDybn?p{TVTVQ>>-DuQzRu{V z5J6RU+`o|I0ob!V@A3NbrGKgRD0ivbEie#E;(k7q*5+36Fd{C9DUj}j7Irs8ERq(m z=vQ0MS#pnlebZ;jbg%1kTx8_i)Ti)Kj}(>yF zi;Q`Af!;)mik<1BKaDy23}b{(JuYi_1`6Isin&|`DmLeR{i6WE%NBom9`U+*NFLpj zbX>|GPSw>Sx(|bjFT8fL((1$YaU*8eM_rzJKM_EMe`Mm~hnyPB=q{c9N~eKFlO$!Z zp_6tz%WhF3q~vdNwDKO*_XqpwIwvV^yC}>tM$BROEUkp8wa*xnJaNA{?Qwz{`&DWp z93F2|*FV|rv32e0fu4KEicjt@=|e5!S7^v_7s?`6`WQp|K^+ETl3`aWT} z>dv9BUj6!>6#{^75QcZO+PySv4O2-Y_u~->PMfX)r3jT)RX&Z|dMGIawh(nHUPssk z1~q@vqCb(Hjy8AeYXB@cO~@0b&p;DDGmCh_U@Pi}zT@y)aYb~c``cn5hM!_jd73S$ zN<8Yjl(`amDbK+qp0)kOHcofcG;CdPz(A+cBy^5fnafTez3Qj<{_X`?a5(N3vGRma zyYWLOqIlO?kZfioD60AJ!b|1TD}7})zGvP0-O~`k`e{65IZA@GY*8*ehf+&SjPAu! zAjVq-v8ObfFC%L;klYI8D*$P-JaVSx?44GRy=v4g^0=@rhPU%Uh>uL?DxF*UI}Q=(hM+S-EP%RUVL zxFjWlN|LRphfym(-quCJXg2?Qw3g%;HTv(9;b&E>H#uuO&DQu)^;qBIQ-N;%4 z>1vTtX8yx14HpM+7zFtb=;>GhctK~T1TBI&4sV9Wl+nN;@1p#sW)Z>LE?bOu3twK` zV>4()oLSXu^$OH|&**SK~IBBpWa3-KxK z_5htW5rhymSuwg5;9f5MS?=``=Yu6qE^#sVj~iFgol~#YIB^BCEzFO9jlgf?m}l$K z+;xB}BmfyBO!a+1d8}80S;fG3$yr+X`xr3rJPikDFA#9}@j>xzaXJ zl15S+r&kfN^Yy#Y^&lTRg170kaUp;Z)Sc|iaJ^4dmyY>w>9}Ayc;$K{Cza5T^gOJ! zprrA~69-yejmh{1mGLwHR}tMy%E?SpJ*og4pJ;j%cJ$-(+QkPnVj9Q3f(nB+B#;Y# zei2q#SDp|3w%0hbW=#D}UWgU(Eo)WYYb4NIp>Ez+WE=y1TU=W~;`nVt6c_+f9jW<^ z<~po(fYA!fhvN%EG_N1cZ3)x7svH2!Z#=9waW6qvXb`Ylku0}gm({X++$K(nAnV=#VWCm~?iJ6GQT=`+KwW{Ck*8H~* zzN$+R{&I<=UuixLBiSG6!b?&pn7ijN{=D9ENO?I`f7r|5E0U$ptz6+FZlFXc=rsE_ zfF7jIVSAk{XPmwRE1WJuFx*x8WdnU6qi5_Ww&1Ik6)`8l|{pU03kfI%=@TOwf^Q;0(Jqf<0hi5 z>#wwc*Y)4exo?xz-y_wor=T(G=Bt%hW4IG=2O*!I9riH|z?!i-r#;er9ag%Rag0_k z6TgpAvWbZ?A5gSuP%gEiF`@H5fhy~Hys9)RVN7|RG>cGnSeU7_PI8YK{1SLL! z&*dvUz>v+{3f#$1`MjjJRl(>a)rXlss%^-c1HM-(T>m^^`AcR$1UWa|m&>p-6wWZ~ z?Q&<8ungrN9n*=E%1K?eSf~o>87V;+;Cfj>N7NA@a8avR*Dli(I)ZW8N}8@+h4W7( zwdwlvU&XVM8cO;{3776Roa!dl=TBR-i>!r!-B2d{d)|2&1J;tif16QeKdz!i;Fut% zY%O1h5(dPm_&lW?q*9*sB>R5A8IyFx4oTc1k$*A;LS?Gg^|bc8={NA=z0ay=KSt*B zL-5QKRMSO+-tWn)S^KrpE%-nxkVEuaMHcO}s;xO-g$G{{LIB0F{WY9ch(jR#Zn6k$ z9C%CWAOFFehakHm7K2oR&MZ6Twv-Ve(EB#@TYJa$ba_}k#V+$he$@}9_t73l_9u7h z)P6wmF{;ll<-tX&0rJPa&Zy3hx`F@;ss^LeD(AbOAChu*gy2=99APth&EK&|4?%D; z563*!EH{>kFi7_|DFNa{_@i$mLt@Nt(>xzAHC?hUA-u(Ql$_POKEx|`JGCAKiqMd= zqwiK$oUVCW)>jr|SSVry5KQ1-e~1r*mz>w z%8$i0NY(xFUpmQ~7z7)lcQxP%;ixhJVIls8cbTI%#xh@Y7M6G{ zwRrG+#V9Bt^qj$8}oe4mrh`0#2O8C4opF^E5?uqff{bEaj7VR?B1Ni4J3Sgt}d=QzJJ2$8A;8CK)`=_jO- zwuVB>cA%b#lWdT*Y|S#9^Q0V*ZkZ1L+jbI9~RUq0<;kW0LO-f&lr5U094uoCh^M~`a+a{`7mbWP`w8&KwIBs0n446 zpv+fZt7&q$(gQ!Ew7wgs>)P{9LpJ-My9%2&s`I_{B$PG-u(9yV$Ng+W><=Ci2QoZm zR`C^idXeV42TU9S@7n;IckXtl+Q}klFfqf_YM8Je;Z3pE0ZJKh`Kd5l6V!2I=$pLa zDUiS<6}epSYEzuBr7d&acYuWQs?8sR-%xMKb@~vo&QWW4RIUTg}D3Q7zq5M5(*om-le%xH zIYCF+af7XJ2Ef{DEV31I3K`<78uNaJD}4-Qpf@-IsO&Q!?Gpi-B6Kke#$zHaZL)rR zz{jXvQ##Ur3Yanze;|*gxNg$VSO_6V_=sFke&AFI+p(Nu3X28VDjuqm@7(EY7eFn% zO#comY@Iw-VEMR%PBAkupe0sKmtckontE4h-3lauSl4eT+5P1cJRps-h88?d=iq06 z2pl{8&B>;iaP07LcjV+1%=Z9tb@XgO^w%YXRN98GSp43F$NHB* zSjh${kW?fc)F4g=x=)|&bHW=Z9Ele43z*=eiP97fk$<^4xPdl4?Bm4h3rYWgR*z7y zEb66S6p$wdxE3s*OZSyiEUTR6nL3!v2uL04fId5=tnlcmO^jXWYnF-8gL2ep%{qs? zsP#_%#?>IBTPFp%D}n|+^SixyD_NdZoCxfr=(WHc{ zz9c;_)0rQy%AY0PuM5l6k60ZaMla$chN|VGs^jT8r)|tPd{bC0@VxpH4}TA7D)CI) z<7B+b$)}#ONUNGtT3<~)9x=9Eq;wDYB%w9$N0pVu*fS465Z(N)H%e4UmF{Bjrijuk zdo4Cpt2`BH_YOxqCcKs6hlgr(KdhzC6)kd`H4ojIxXnPm_)d>M4Jdz8@y^BXM*i#t~!x$%0+Qbd@4-4MJ6GOXxnNN>(9 zQ0;CcMt31$H{9bS$5G5Q0*Rj1<9D>201M>N?vCl>8_?F28wdua#J}_H7)*X%#LRtl zJj%bYGmp7m#)rdUKE@oU^De&Vn402?^%4XHf(gNKWlZ}r1M4qG2Q=hnoX=O|b~r1o z_&=Q`FdO*5M9o4cQOd#T68Y17We)eVeJ`{yqo4}W)WlamQlfoJ>IrUK6thaz?PI>n z809v9XvMf%EubmI(d@ayk46X@>n&$(WY<{w+<89~p0cd5ekFDO>HU6(&U0>qCQ346 zG_UdaS4ISqa^oS9w=3haWV-NN+p2+WNRYaiXnktjS>$l!&tXoGERAuDX$)|B$|>M; zYn)DI<-`3AkDq*`pFy3Y5<&V6U_)3_x*|wa{oeN;yxz4To%|#Wb=vuX zdyW??cN<8NI;5e|v~q+TLv}uAA@-(48Wcy;68t`tZ(oiNR8#iV9D2q%h9}yZ15kfwD)FA+lOXI9DE6qRotU=o zW4wn%D9=}C&xV46k&Wu`+UPa5hDH_f$?m{j6pB&o0}-~xYk3lm_>d0$?H=RT_6+u(id-f>|Et(C_VxAWDsvN3j`s5#MBh9*qYq+3*?n+}i; zB|qmP?`pH!&P6X0{+i-`C}mN|KujN_keXle602u49q|WPe}7!UO}gu05loHFpr1*| zRD7e=6fd0mo>e=CT86#Al?oJ#c`ok8JGXU4>b70>-f+_S&0T`w^De~3r8*R?YrO`#^*g$;+ww3}fRd|KqH6HMGbdW9S>?O8MSfXrPV*b|ot zjtFlKEk)gSG81cTf2%!0MP0Pl+dIrO6ZW|SdBccbJ3lO9p3o_z`wqMfeD_$jb4-S7 zZiR)@$hrIHklC)^gqnt0Y>Xoj+o0jVF9u&zpna=qpJ5!ma$`Kmj4UZL?D`?@`S8JM zgK&Fi1es02yH(}c4&L%qnN&P24q@dI2-giNE_BL0!?c8~%TzAM&GENxjcwX`O^1*e z&Yj+aEJMzK_)l3@em!bMo=4c3SxxY%-}LG zSIlr;D{ebMX>DjlR_G94ofE(~xQzjPKIc*nhn_yk6fO~jsnn*-1A6$+J-X;8-(W3{ zf?c&e|7N3FiEf&gg3Fz{y^S2D`R$$6d+&VaB-1b|4{Km6A*B-W@6>Uc!>v9QUJ|}~ zHg;7f5s^p5;$WT-rW|^z;)6qwbJ0mm}kh zkAn~G=L%}Pg>#JpbD~WsKY6Hp9s>?uzOH9`7zT=$ZvP-D;01crjf&|X>RfF=Euvz; zI1=;2!I;HjJb!iCKlB-a&Vlc`Dak+$CIM@Exr_fwvBDuQQetB$ zeg2Vmw`6#CB%X)|Ir0496>x`UJl-tB{|zvupOo3FwZ6C^`|Zv3|2kw_1Og`J#+z%m zQJ^SCy!{fH2q3jM#};(2Bb0!RZ>z87V;Qd8u3x*K^``j_zS*wZs==#NfjQMc)HjwU zTU&=lx$Y(TUbXQ&5kvf^+FB>bQBlrO6fd62eGz;mPvH)XI^lH?t$gGF(^HX0=$pE` zn9;xhthcYHtb0di9*JbaO8q5?3&$f;8RrcWidCey_4GyJb(7UmrmUxWH4gLys=yg5Ip#Wt ztMG_O*E4BW49z2ICkR+V?`4L|7d;al(@We8W3h5Zt@SIcU_!OMe`YOz`X(_ zFrWVm(6wefT#qzJJ1h-H9`*pPzR;zTH&5&&qfoXq*~b zzKYpr0g%c$fba-jDlUI>P~<8itEPVLVdTu0$ycX9Zy`|OmdIVP_S5d^4xYdoH=#jP zCg^Qoa(!wOoUl&8s2i%K%|l70UK10l&#|mTKW;jNmx{*3OkJn~nObmW8jWr^aog{v zif}GA@Y90AC*9^ccqZ@A$N1Irt_5A>kqSUFBoix~DFFv^%OyzF!copw?g3q_z~=Xg zUU;B0eaO>mYBYKN!x;2`Fb6ww$R8E=)v-s*f#^5r<=h3!)l2KEJwklGc$g!HQ4)g- zqWT=oQ=TpKTEu-xi+cm*j@`{e|%~t1LHIkX%o9NmMF{ zfzZb(r71&$wjR^F79zco6TGURNPE7%)QU}eh|oi{QgTK! z5BUUOYDn#-S_P6*m51y(aD1522vf;t?Oj% zQy#zb{uhPAyqOxW%Y&{A*7ru#{GfMBam3X<0k~g+|534q?y6f&lU{_1x5@WRspDG7 z_v@|Lc!LceSH@}E7RrTYfs||g$kDJTxrcKRtM5RX@8Z5Y3>X2505T%-IUGUcqHy8< z>PbzB*~yeb3CZKzYUfE6Sw@OJP+Erpui~XxqnL^0mXN3HQ~j}IZmZ8(aodF*DZlkC zd&VvvH-x@=)(&ln5(S(&!69niH-~uEH+<`I>xV55$U+NvUO)ABs&ZFF_%rXecfvez zrpng-3L{!kr50GeUBfkWiC53=_?LYm?@(NPmphe+*CZ20-2-A}Ss16q4iHDirNr&qw5VbgH(>BPt=1WR(_ zEwt$u;42?}-392Nbf2@ts-x|-G4 zN=@r97|@r%E<7nLK%8(nS`!<;5N7+<@<*rpUb?S5RGdaax#qq!+%ZK-ICsESQskq zc0;VPpP4E0<5h|ZoIOtKAP=59?S`7h^!`+&Nd}Gt*9kTJ4wz+QWQ)t!C55(PUcjHr88pKr`{#6zEcQkIELszHlzi<{FavU! z^y_&sx~Od13IHlxJADQvKtZ?4Mbl}tSFKX@(VUD$#jCkr>l$HX&OuKS_XKUWt6%}m zPwq|%+?PWjpl1dQB|!wdJn%51}cQ`-HY_-06xR_;mf zewcCA2M_12I75Yl(AFJkJgR}W%U;&O6UL~;n)Wm73Gup@JTjiBFjK-@kWJ>*`0#wT z@>B8N2A6Q__!UuF7t~_l|DLYAm1}hr(>+NfnM_2R0a+-|RD(6BCRUh!w&ioI6%H1_ zrf8x=KpH&sr0ls(yPv2(BEV{F2(Af9uA6zrz}I)&d8Ra2kB=Hn$Z7f6WHzMeV>1=X z9|s%)-s}dqQzT{jM1D8U8~R({;bn+WCkm|5NB~TbD>^Ahx6-x)_XqJM5iYL`PMWet zU`01rK3ScMjBDdBppT+7po$2z9t`C@t!3g=R>=oNE`=rS$bLDDYpJ6t!f8CN6nG`CmNIdWSy3N7dV3 zfAJL9*p@8wL;b}<9=n7h#paA#Eb`$ew5T}yCWO|C6yPvs?GrbZ^&QQg>Ic@gjv-+X zuJB0k>Y2MsisdEwNp1Z3HC2`oP;{uv$|5R_AlkYy_t*(nq&@<@<_bzkMM7~8Z z1Z-%Epl58Liv3d+7Zk4Nd6#G|46~Fk%D*NgW5jt;EazKH7N?w0+bWwOc}H=*ru-Zj zjVB^?b{+p4)O{iq5;UjqQHn)grc(ukozte9hIPVR#jIdl>-_%5yLB(SPI0XBAl!-JwVljsuS`8Y~abD zOy0aluVP|a=9wDjq?gqJ9_@6$JU{cMI;Do}kkRF@zAXmEeb?HZL=+LnaN znz$B^KGJRR6ae3YS^J@QU|Vw=JOYeC$OEbeF8KNQm3FJrO28z7IcYYU{l-WT-Osbf zKF?fZcOd}~u}L>L|Fg~tr06P)b+IdZ9_UvK*wBRNz9DyIm7oSAX~(zCQSqY8kXP_suC0&@V2< zsi1Q-&TO`YN^w}vPTALUEx5CJLGOY|nmhxs6TD_<^z++&|3fIHBd+SJ%6#S=rN?$pzvFL-I#+t+Ci}+uu z9BOnrbMG1O`b(Ona?pko5=mIM2|6W-Lek%A_A(2X$;GNza33s68mk0EzsTDl} zhJtw|ypu>jVw(Gy3MP`AB?N&EVI$?OHl?a{0LIXW<#43RbF z*V9!~Y6ofh*%0&CwZEHtN0g+d{Z_0S(Z){#P+5IS91>gkIXPl;mu?+o%oI zv&81s-GQ3+u9IYOKhZYulbJcv6%5{Ga&WJ(yim?e z$=y$V2^y4G1VcRHma6h}F9Rf`1Wh zzeiy{IV}_PZ$&1bK{1MX&_?!EzS>&nc?N#*1OIv=ppK*Dl4n5@A*7xkfMl*%UpZ4_ z>#BE#p^=i4JthBn49MSGJOPlP%{O1Z7F-_<9_{O5=-~Aln1LaXfV@K-){zfsrA&Ta z=MDOVw|bVhC2gbv!ZH{zJjLf?{eydrQyd)jI(ya8HspTC@=&UvpebKts2o8WtN7d& zIw5=DrUL!c1!YXLQgMG9rXX=-dB$*_ek;TqTUS3YqWAJopJ;(gmhpwsG!gbtV-ExH zG3Zh;ulzB61W*kZy>Pna4&-D{t zS$kQUci--J0^Q>C|6WUbJ7!NnE54sr;+PJ>Nult53wlxKP+!pX#DhVg`#T$2(amsh z45 zC723x{LzbXJI4Bb;h|I0PoGwH#~xuti6$?tUL0>M^TYwiTv=>aOvN_-;H<=Byw}v; z2Vnfp*%=xmpC-D9`fR0=i!x;|u6ei!oJPvBiZ15=Y@^U-ZqLga1;uK&-wvQB#AcYH zdjQkJQceazC%)BS3#lWyH!5Xx;)JI5K#!mx3SDzv?iqIa$5ukBU6u@6E*DN=M_Z>( zgj4Ty5eh}%176LnD1SobW+2J#xbtJ&z8<8_q2D(+;bi}+-H|*Liqh0Y>SgKc zLjnnq_3_lehF&wV`Y<^|Nh0lI}^6#78qVEDRMmKCRM z{HN1WF7DDwO2?-WtfwPtDt3<Ybfgq7MQC$7d8F>o-kiCbuWF!{r8p%xlbs|J1$6IYd@*{oKuHh{K$Jm~n1wJBhi!qEteHqe{HS zsVh){FrduJ>8c)(+0-I{%`{5&;c3iAb07FqF*=mY5_mn79nF@ZS0R!Jj6v)K0`EP$ zG~k|@4?WhG)Sm_FRm#G>la9#h+d;?30od^@fejtVNGpm25sM#RCR^8E6R52!BOd9~ zS*`^$6z}8XDA~k>gHAW_Z{e^aB-l;I9JVKiuiX??SYs?#FDsoQ{y6TdVU}|aLtdE;v zg;_iIH65m5eiNfN3y^V!YyzOudCrKp5t<0wzlH$KrwIN*xR3f7&<+fiR~`fGyHjOt zIL|c4%3*G_52)yVN_ps6Zk=C214!+hQ`Q_AR{*93Q|$9gxlmLQ#gCVSmqZW@fo7Yn z+u%x?BJDeSLxD_b zGABXmLM^1=7PSg{EPg*CJ1#pGcV!dqi*c0rG6awIn)w)kf{X* zuJ}7m0f&VR_`(+0e8YOuCkC}aQ$7l2&qtUe$n=Pvd*}#M1vhd$&i};R8J>42HaaM0YY;05r$i&<9C zW=OJ4?4H1Ez{>i$uZo&XgaII?S4vz%$N*$^%8?$hW?9f#hzlrlW0gE`<#Bi>^{W6i z?!vVW463uL0vI2DpR%FZTVwP=$C!oIwT z8TIi+-Xx%@cFrw?)q=su!YuDwkZ}1#}3W37F3c+(X0U$P2aW;a|7M4JI7i%}u~U-p||n^z0-*n8F!v zxG}_me~}=mkV%E0%1ei!h>I;IFWT($1vyUFLrnP2hWq@J-il0Luku3#l9D6`qyfV=_h zI2WwM2ITn8!tSEdf%9i1^whywW`1PG`r8281Tc&w0G?xQNse3Z{=d5jnbdn2ITYZY z1i&u2T~A|@3Gfv^5E1W(-C+V0C8D8sU|c?=U5DY04oV8?u^!vK8v%&-+F-~}NK#>xiS=D`%{ zgFUqrs=sq{E3B|D0USZ|bbKwzWFvq?@=YVq)Mx<1Z~QYlz_VZshO5>hye>1kx|KuE zfiOtPM*}lMy8x3kNRw+V&M;#P;7+IzGlb`jo_-56N$JAFTgt!^K5)?c0L+{0WS(bf zQ2{I@^^hLYj8=x#E6X1hc_#Is^BY`EwQYR(FF?cMLrBBM4|cN#vALe=0R%({D*CD^ zIzDrAc`_db%v4I|aU9jv9rH7CKUcS*Zv9BJQoF(w8-Z#7(SL0l@T$lCZ@{P)EY#Co zOR)$J!~j7BYliq<0u`a-2e{`;^)N~(AUqRcQ{!y9xPd?aQp?>Au!AQ^68za69|boh z;568-hH%7+EY25$`?A2OEo=l4q-@oySj6pXchJ}6QN|iC2`^e6^3FMo%B0kW(lBD< z9d!6Dw?yVT=>gyS7&9!dY97csI_k_`405GQ=LKN*jsD!=bpE|V1#=n%A9y5B zF3Z)X0+m0 zBdH;6Fx-2k9NGKYMN@}Lw(+B&(XUTh)>8P{pC6K<-LOD&L=9rDQ^>%KWA~XC6z;Eu z%~x6bu$gAE&v)2|c-Ra((INFpSon4RoK`=K27&Dib0|$D;7Q@ins&&>aqgx)FjsMD zYTGh#7HU<8-~44py#G1pG!?T`K{u7s=_)I&Su70NPk+)w7!NIH04UP7q~I~30{J+vQ*5e=NdKLI}S|p+5jN)DfX~pMrgXN4I-58JUPLW1|OEtaWS|DvmzMT}$!&&h(QflrS z35%U~1UHaxj^hIi!tWN`^3hilgDl)^NBvWRFvn~__$u2iDi`dG`1xnW?Ai2UiDFbW zNB**~+pmGYoiK44EP4cEU|R{iCa+)RhbkMR=l9-&!J8Gj1c=ndYgt_ z{GM_|l3c&b>GH2izV3|z&uOuxtOm=$Jm}iGQa6eTt-E6G@6?$)daV2&ipD6=(~)RR zRzGDHiTf1@z6go?8GD-M+kZb`cl0A7wYYUNLZ?!8q3}o+QdG!^01(frL+1DucNT-6 zPlg+#JBwfvl$~-^Jge)aW_KoW6zMx!g)$MyUCS{NK#C8#QPljYLUGZ4YS8Dl(J#-{AurTGX5DMIL|O zx|yGRk5x}s3=$|P;Zd#GoHWJ{S(msLqW+kaPR&EM9!L>+k3GIRHRL3T(?o6;7(#1{ zpv)%O>LBb^pj;?TOlAf_Xg#z9D%5Sw{chL~S^^wt#Fx0hX7)^ zP<<{iSN1#L*xZ)6q`RJjRXl3KVe zJmqKEo~qotZE_6siDlzsmx8Hor&p&KMW>sgzC=gPBl{kPxn2ZS8!eeao}yjMR8qid{;FF&vhp!nh~rNl3`n#a zPj7crD9`rIOQdZ|mlIRI2Lobf?b_SV0_Ttsshf{HU!#gilScn_i336zu>1o=duf-W zQ1y@Y5Hi_JDo)XH{T;M4-3EGm>8~Q~SQ|zXrit6!LuUk)gcJiRXzl(?UX-xw$}+#& zN3$I8AW(p1)Y+K_pRJg)RjyrANVZh5DmvcfX>Ytsa1tAiyVFU>=v~2F6 z3*L)0Vj>Cp0pQu1_Y;CwO}G_Vb;L2uV6CRL&Z7A*)BZZ!Jf2z}QFW;UUm z8Y6A=sux?>`RKjQk+w4NdCFYceWuIryRinzgT#USdtBq$TDnT>WnD1nvWq+Df!rp* zQPD9xuWpcsnaWTZ>L9X{F~CVl4{5lgm4AG#BCw=}KcW-DX1fPzrFM-}866g!3YA)P z(aQt_N;uVS9>c5p;S|RW*G&WCmIcAEBz*EaG@aw&t>AKRMVE6v{#{k)&)}WxIfP9X ze#R*A^k1TNf*kkJdMZtskf6OzHfixJ#o)&cw78gI@7R4@U;L0)mQ2`rWzWT_Fj2~Cz*%A9MCe=Nq6K4@)# z;AhE3Rs#b{3E;XMt=#x@JOckBa>@qkxC}_MlV@|mB#k3`_GQ$sA`!CI_0X#mc8EN( z`%jk%t}rznKwOHY;0TmedVun!LMPSFJn4io&`%aM{t3!{&7+=l8sJiXE&odBG^)z= zs;y*lDu58W&T++`2|D4wo@QrUIC#dv=?l==ewgQU$YEEk0vlFNWz72gA&+?AVm3D8 zpE@9T@Um>5d8kDiil6~E!kQsKpsDFZyg?$iaOD~x@>8sZ#wjY8jQ;hmDMOzoq?=(3 z6|6!oS8u2+4nhXaY^k+^3kaSGLkZ>+9ggTJ#F5(ZJo-^(&}FMLBs0O2mJ=B0K4A2q zqY{LRWMR+QZ((~}`|oKfv7gQjTVD|1*69vIrt*&H*;snuO~vi8GkZd$1+W}AFuX$B&R_5>X&UcEP!>VQ zD+La}g<8ZF5n@7#W74A^1m3(Om9OTf{zB*@w_Y8;h*dO#zoOuYSurK^SDH2jox7dM z_QHJW*wfORPm-|X!c`mL>zJ6b?Wr=;9{8-^QovDf#{UW$!9LioWPoZH2l zG>ii5tjQlbe1Z!N7RXBEwAiK~F}3hm^I%LvikC8&F_G!FHzRG;ZYSfCco3eQ2oSHZ zau_CJ+sMH`Z_eaoryg8sT2U#W%=IZ*4y)sd2-I}jIl6Y&UlYIlV#{*`YPym~Gkbe! z%Vhf_JsqT>_jgxPl!(&%>3)J;Ne2tvSnsJMPqvygXdXrjsjCvj64oPme2uajALQT} zwVo#eRI@qefUd{Ra0c(U*b;Yc$utqu&8=)J)t&m+!BnMp>B@Hvt)n&BOwVN!P#Vpd zE_)e8_TQiGvF+dW4Prlo8@7pHdkATu(_*fN=_W@yJsC@d`Z_qd)gfn=?az@ekzsG* zIL51|TF`5g=p0~khBRO6$OYB!*468n5#Hwa+>q!#DI>$6H|@Izg(I<{tEwEI6`4|i z>Oou&N`r-MZ7PR=+u&!lu~T%SJu5rPBbxuaOo(xGKfd?{4jmX-yQmXUNtstQw=;Qox#7?rW3ErBKEXfiHN`D996DYUB+2iH#s1 zI-WF4Dr^t_{izBMyt2QTj4BrGI@z)mY8Y~KCcTFI?+Xsj9IfMI{w^Eu?d|=gwJ(xk zCAtc(Ua14*)K6g^>e1+5s-;zC%qP)-TbBZA)Hoh+oB7NnlT8%!8JBiIpMmR6!JHM|l2=d(D zPktzzP6ouAWs}7AmsU?_Bt)vN#%klbdjQ*reTVdbK-0PMC8$Q@f)dQa%4~HC>*pGE z=asXI=+M$@eAyQJZcO#@s?wWf0aOgFk^_gJc-@!b*-PjoT0zsqRd*Ue8R5W%?92wR zYPR^(n*Nk(&{KK9_`iZ00C5`xO)5iCl$yqY(;)WRCrqQG z!WUX7pDi5?Xfqc}Ts6~F-O%9tB}8v|Auy%02ePtx`jX|W@$UV4@qrx2!ww&zqCedE z{{7rKg~e7051UGV4p&#(_~brS4+Yf%jZkCgaQ2cwb-l{o*m)QJ z!E0|mh~6F=I49V~#Orn`s4*~PB4u5A}~k zGjF}JzWY0~W)am{75gcJ+=eV&{1{{h*w7U0>Hhkd(j|~jF0mhGUr`ZP9#g0_cwJ=qU`BfaeKU*mYxi}c zzzd!*7w_|%Rj>|9ZHL-BZ!OYP!yB*ZHeM3dR07he1J?NTnbXyk$z)hhPW2Zz^eP)< zQ`%fxBPI!)BNA;@ephr$@n)d9PuR;QyMHr8oNVt#jo1`qO@^NzbA=JHWak`_B(FOM zGuY=JhEmW$HWzGL@iMFz3rSaKjj5$7E)-7BgA0r4xv0H!KDNpb?P z4-YoO-dgQ?psG{#pGO|%s#O|{I432j5VX)-qJ;fCzt)T;r`{|Z z0!(dGYF&(0EtZd@_=A>L7xviP+#azaMa!m~dKbY{_Y%cd$0YHpeKKXpYK?v6K7t}ND`^l6jzSDsEBIY^rwkOtIv zw&ePNt8D$F$m*!pT5$AkmHwH@k=^Q0orm!$-QO0C*R(b2A)`w5*p6k*tuyksyaK-5 z08)Qh35A+b1pf$vNHJRtCG~tmFb!`!Qo&5IJ*j!+W_rGi7SY6}5}!A=sh-dksrT); zkUD!8Boc&En_M6P6%GP9F8H@Ux`ia-i?Js-O)UAMxwUIzht%KIWz+?R`c%^@H06`F zOU3BBVdW8AE1bxAfjiOx#pQv>JlVTjDWQvRNXY#an$*q#AMg6R@AM^m+JoI7S|?42 zeDvZS_2J$2O>EXCRd8*W2hg6w^R1UbkABH8o6Md+v!h>#*e!M)_fzfg2T0eUZUowC zOLVFt@yI+XpBPCLUBtr)@lvY?vLMoCIxMQDadS*StQBgebiV&&YZLy{78%nzsziss z(iHwxQtywhMeFS@Da)%WU4RdC3~bK!OW!2FwfmHs8TA=e0rQ60Q!;u(5iWv}Yuh(7 zJ5v(2bbh9h9+R9(W`<#FhpO%6&x9AVD-MvjN+h8O{!$N)21`* z8-3)nnYQX+DHQs(4re3q6=eSECg9UawsdEd_RceC0GZ!L z;lp-Q(fpF#YtjT%g6tvSGx_is^P9`FJW~wgR(H_Nvvjlq#CLiL*e(|(!kHZ5CU%xy zmB*~?)>lsUvG2kcREK( z`0BD9p}d2N-p^~}1yET8w6aGua2aq%*Qc)o7|F4O>WFFw=M?r%%EjypvTyde`T_BEa)}+D||p))9(m+(?wcenALWmNMK}=y?npsv39mOaWzk zy!RQIC06{cPr3&Qhtj~QC!yx02W;nVfAauZR~>o z#mhaCuPgw+YYjf3cd7=^UKwM4U(Y(GK~p&X2>`&FZ$Gg|;|r2*^-mAz4^z5Nd!*<> zucw$z@K^e+nCq|XKbbX}gLNn9{*_I_{bV5)%zk8HMoRDcy}qm<{Z6Ug>&`QX%=JsH zjNT~yIZLC{m|p$6`I!V<_uXo)`iq=9{0iDZ2oafkI1r03_M{K~a zb}K5YShM6#`1iWY^&T=TC|aat0Lf5foan7cM~_UWK8Yc()NEj6ciMTf35L|Fvt7Pv zlL=#8l`5!HPjLxUzj|zbY4Q3i0hEeu)Hn8rq}$JM@-wQx`&1g*o1_b2?jW$E0lGRv zjVnzD563t$*jOpz!PzWQ6RyLpX<%@RCOfEMlhMA|x}X?B8gIl4a{#S&`ecPU?`*yp(QfQZS2OC0{OKMBdKs&X!NT;3+&q z!#}?xiPh^5TF*`CyPYg&@Hu(SI!#9OXpNeZ`(`37T_e&Gn7dXl)mpM{e*_)^3~ZvQ zN735v8^)m`#+ zX1!2=NkvF1zkl^crH>w)<`Hru=T&aHf12Cv*+CL*_?N5P{7Z24MeTBE(tqQPpi#Jt z(;4<%2_xrPX5<#hbFB>-kw_b~P-usv$8m+POBd+{f2(E9SM$J1>0#C%9T#{L^NRXU z8pmz_fnR;apBdf+2G<2t-9OTDdb|V|{GL>(0JgmZD>iR0*RFq`5tJN? z$U9mnd}*5YnD>>1>6JDx5!4(Nj_|~=>PKXhMQN?3ILqV=o2h>dyo)IxW)i_LVRU-(CE8Ov<2KT%Y~i zHxCqT=X}A1_StC=A_d0pE{E9rt4-Ffr#knMXBU5#LyepY=(1C-N-j8#!vY^f0(_SArp`F0Rgv9+rE%^QC4w<%O9e@u3858q z;tjs3It0(qsY3x|^r(*(8;c{^d+~442PYHIGu+v--WSd6y+10CxCMX!tGjGr8>1&Y z1RCnnFWs%HRE6-$^+p!Z^_E#$*@)O+xsXZSz!j~_Lx9<6d{J>c=s5P4UPc+PrkI(b z1W8`I22B$$(tj=w1>FT(;P5Zeokkr2oQz8EA>9*C@XBxm3RqO*`HF9TK9#VM)Ko8M z*>3nSJ+cP;hkAZq-^z0BE-!baqljKS#c7|n#@Zp0RN$;OI^&=Pa%ToeViy8trhnw; zr9Q3lHen9Z3+17|1K<8>Pd-@%bj*72s(2ZHTvB0x2j_Ck6ef&0m4->HRF4zwExX_~Z-L`@yWj58W^e)r5Hq^g(&EyEFEm(10zab zh&vkT<;R_O|IGeeHHCJ{SffEX$XD1o#77obr`b}@ql(dH1f~aUSQ_A$&~-&`%t$Ee zz58Z(^vb6XU*4g(PhQx#QCGEQ(!3{U#UiAkPj=b(=Qh7lk!>B;AX^7r2(d{Q)tsHU zg{=&e5gUEA^ge$U=BN=RxPF7?$Ibuz>hg1du=&gDPsc8z4ye>fmzt7LzP0Y~0)&^U z{Hvc|q_IiPHjPb`sr?cR?6I{8>R*Pz&D<+4ZT62ZmQ92+dHlL#78@ z1$_iBHVz!+8(p3Km7`eT&iCLoGrxql+#320Vt#v7(t-kW&EUXXSejkW(GZn#lS+ccqih=dEbpYiDrj}{&S%SyXLF+?mg3H zqwIj@sO|}2=SX`P9QqcxGb@c8w)SgC$;okVkL}%C3tO8}8?=BPKaUZngh5*1`a3@M zPyTfke|owAp)`8l2U^xt#ykHM8axOqFzYh09)Myk6SJgx;d*NJ-uPNo{D>iUJwQn=ah-y8=$o(E>)QZlaJwQynR=R-DkS~Jg z;ZaUX$v#+2#UChHBz92htkQ9b=z%B5E=uXNrXpVHdEwn>%(84%3d6`CKx+Ap5w5K+ z23yb6?=wbC2>Q+auH^>O!_8f9xJ{mshDFK=g7IalPbY)hOM-}^G{}eCbePqlg)`zt}PIv0~$Xhn71GHZ<`yc?2ncB zCN)}pHCyKsbg2a_WogTk5zi(JSkQj7{?$`(*?7&Da9>W)gTNQb;fV|`ymK&oR`5#e zEd4HNtt8FEkwCIFv=^W;T5jLpy57Ft=*6d(6;6NgUd5V~?OIICP7m*vxeYt63}8fG zK^F^LQJiW>|E=e@Dd*yGG*&#yYRcs_EMuavxH@ik8 zxpBB<#Hkr5!>0O;|Js`yb)G<;YG0k{{v6;LzMX_6P^i(txj>#=PTslV!@pWmu9p)u zlr8G#7P{(oSFfsR^iv4Ciw-qIG2rd^jF)_=556A|sNTw5!ReF?dR+G#8HP3!=sIT9>eV>u9O$Zuz?-DQ4$wk<=yS!DhJB< z(>wxt7mV0mgA_pdy{*)F?CqW6743t!6b;{sO^V)h7q25Suk?&Li65u))SN2f0D#)y8v9w!Gg0lIf^55RSy-q@`tSr}5oXjzoD|kV{`7{ z>cKOi;@>CO@4L6Njw}YE3@`(;nB$5}OjC;hyV_Rd;k7Sng1y~6w)GhXx1hn{oH|7O z)H(hZ@2)vr{#fxf0N*0a3IV*J(gImTqluzX&b&Dh+kvqI+XpViAtr2qPv zaK}_)1_b-FAHO}1mR3qxftsg-Y5L;JickcP7t`lf^?9!cavAn9y&r! zj`#MqhL!yU&R(?qvpTILJkonpMQTfXvlCf81%1L75VMrUFf`Be*FoshaIF$mA-L+# ztxuS6@&3K8`a4epUxQB>3)jg}MK5FO`cH3)BPJ(1|CnSEB*OeOX|Myz{kJ5-7pzLFsJrHKf{fQls-<}FYYzbnA*%gL$X0@=G%#k2PV&IVrhZxZX|Bp`-|Y;FPsi;vVRgz zs|+B@GqWq#<07kQmLqkqv~!qJXLN(!8;Cb}>da%A13H{Fq>3If#yJylC>QE3XVq(s zmdM!6N{{6;dNF&q$N z`MeSGZ6F7RsF1xEQl|v-uldqnNA@h0t$tBs59M#Tp-(?3y-@Mh;Iz&?A`JVwECcFP zb7A-*!sQOb%So+_-Pa?r&_B`t-c!&t#H2lxC1|Kc@jK{#TKHOH8Wof6IC3*tSe}T{RwdYo{Z>T zU#UXrgSQlxOQ;++dUXW|)@8)(I`zovtU0`!26TGE?N&2m1`r&NF%)H#4Wr_A6P@83 z+O#gYWW4moM9$?5Yx0s#z_AXP&*>cOc@h%jxROpYRuPq1d#`^j^py1;;48JmdJ z%O=UMc;wA6=RIWt>^#bbaq+&c+Ef5_P9jt;Xga+mI%gWzgHe#;L(!nnrDgA9H%i$y3X2O!^^q-{ZXBNFm2YIhY6`G z#+C9K$uejGPEzahls(?q+IFj>x@NYLiOE@W{NIYF{OT(5~y7c>nC6kmVWMSB~2c|wnzbjZV z;c)XE8vg7gBvU;WvdvpM05IVdH-$wv{m7@AE?$Ewk ziahoc5qNRdC>k%m(GXH)Lh0n=*uGc#m{}N2M}|dCH(pY@ly_5X*vWqA*QuhTx;BvgAPENHB0{^f|a1%T^PB}{1kuQE{z7cidi=;Yr{){`bY9Ki{ zdGV#TKs}=wFLUc%7CXoeeA*va($)u1oV`@J@O08=acORrU>{vDas znqznaTYPEYZzBNKI8sT)RO%PMM)om6L9%0Ha=HF}s8bLH{aRVl=MiEOk~1VMr=QI? z3u=#jgyzU6ZVqKE3SXX{7-TyZ`a9mm2=rjbOYx-;y4A+5TUItOwNl3{CybH)Bk7V} z{>66(;=3ngV=hlt@`u^jC5#@q!}1T;;&N!=etfrcf(P)d-lFkzF6KL=bZJb=7;jTLxZ%0HB-IR;r#yS)dN1*ih2tvxS}WZCig{zw3O55_USw zx)5PH3}{n+k{p>xAYZ;O#2W*O~XF zpT<7>L||&qUXljpb=IpqNJ73*t9s1?Bz`3F_7dFO2*4c6fxDBb&J)Ol!f#y8>Di34+d-w?@+7_NH( zJ`@jrk9e4%QGBE6L56yw+Jnsc<-Uw~+2PwHrzELJ`o!vmN(axT$tF+dq&$KC6zjop z`QG{SU7Cs{{qbio zFLkJ>ojO^~oi`TEzk>ZLYZP-c`BTDy>@|(7W_aS7{^q4^ce>RE;{F9cd{qJOd#A^I z#O-KtE4t=F9L+Z5r#-$QAnWhMSF_w!7a>Agb7?*#!N~lqM<9@+-mj_Kz7}y?(n~DQ zy3=N!Bu&b%JL*xiA~(eEJay1R^hRFVCEsknT(Uk}qS(~nOW~M^U5c;Zz{k3S+W11iq@2#(&$P%kqIEs|FyBf4d6bSk z@m1H*`2^RN!e=|%ZbY0U+Bkz=mdIMH&?_(I&S(YpDUtado^yI zo17WqoV~+30U&9u*OBkSk&odBFW?v4KKgX+WpS# zc0fDwMr?;k4839d0iHq$sOgHE`aq68hZhosaiJA}jm3cvr>|}ij@G}ZkR()`bXfIh z7J#Fp`W=11Gb&D~46#)Tg|grtNv)=&lH%pqo_gSyFljRJAm;km#qVf=ZsP?Q{vydc z^$%dV5stjW@kx;K3tOX4`>#|$D)&t?R(oDz=*#Bqu!d}oapJ=bTda@uUVSK=y*)Kw zk)d3f;mEh}zdB!-tc5eoa>Jr+a)(QBIc z;Q@m~A$_hG>=C1pn2&sx{PC;}_SoC%=Z+0Yh5yuD%e}^Y9{nu`LwoQh)yN-uNZEna zdl4RAy;-ZWx=t=JaKlHa@lNfFHHN}P;!`KFv55b6=36e~nsL=)&2dL34LL!D69;Rp zsNqKFJczxXkcAt#L~BC*RY=!WivEt@p`)L(l*YF|1!SJpb41Xz%)z!8!--q^m%gorhl2g&yGJ^&QF+Kl$K0AUjwu%UcqTP#2>mA5u5bBfX9`O~6qmsB{o?ag3bTU^ zVNQU-ALpFY-4=+s0a4mDHIMizpn?$Vk%6|(8b|0>i^%+nca{E*TEilsOM7?OJ1b5> znp6OzcC%+qk2)Njr5zwdJi4GzHMRwA9d)=1sljAo&yg&r1$rh9P2VcS&u{K7hA=hQ z|23AM7;IaE$uKFH>uDgePi%Gr4s*QzQjka8GZI zgH5TEvl}m*LdBJ062Q6DB-6>3-vdf;YnFDZMQn=x)p__s!tLrE@q~5{kAtgx9wgGV zT0XRM=!}FGq_!_GsZdy1gQwDCBJNFg3l&i&4-r~R|DJ*AIV`6ImY+Jg1b$h1b}%bkPShC}UIB+u zM{qcWi4NI5ChFn;9@SIhS0EF-g)FKBn+0t*MYQv^N^f^$Dkzon9x0af;*kPailO1o z9rO+80-|}IuVE}z$zvA%$Ql`Nvhdq4a`BR1TOH9f9LFWY z!PoUhdsLTA&q6f50dDoJA)swu&by>?UxDuLb%1}rw&_hCFo_h{t8b_@isVeuDY#PX zr=HoTZyMFjN4yHVItt_;6AAnKw=pK2n`!#TTSts=oVOJ*8|%Fn+qfqYm#4!&r6*4qYf;agz|;HecEZ3(Bl8aS_mvh0DJDBN{h zJF**;2=&_m zegW|r#jyAa8rB~;cXp76jSD?x?w2W!{@$nRc#y$TE&1EAP zTxkK9GkRVor`_K>8(M+rgm%$?9{mh>^sSoJx#*_A-hk}ZR)=L5qYN)m4A3X5B2Umx z4yd5_5_^OeWxDOJ+KONCfVG|KU~?XA%aPHS7<7w*@lu6H=ll<(+Xr&KaEms4Mdk;= z^V!5___hwIqMW|u`ze7b(jhSB584;FAqKWtE&P{9$^<2&ue0K~^1pz`q7_*W*L6tH z^b&U~&V>&`m^IKu9*0VQrx)6n&7_cY=A5xY!FQ-K`-63s@ET1j?iCE+6f1#o!UFAL zo=;os;w}cZDtg@8muoO(G_WrqxC~Y>p}cuT%^(dIKPj{L05L&eobyD8_jAuj@E21i zmJ$DoXe2%j7{{_7kB*N9^h#QQqRoITPk%?y4d?GY8b*=8TBD@1CG``hXw2?yrt=H? zfMFmGGFDD8i5W{_m^e)3(fQXis{t2zoUl85UU%~p%7-fFo zAEk!t{jx=o;dBGEgaxnP%mOhr1L6~je*l@u+CV9sh*v-<`-^>jW^Y3|fo0xLXJl~W zVgai>D=U{Ut2lyJg6Yh{bRd$RH580|@g00*umUquC`+{bouuCXE|DA^Jc2bsAy`Qw zG)<2Ab=Z%m4o1L86r;$!cBv^Qpb6`qgNDQkm*EyQL(I}eGl*6@B=!%?iX$=Ie^MRq5Mp8m%)w+vIeA8J@E z7V@p0C2j`?2rAalw^CwejUfT{ztxvVm`4gJSAz^mWbd9lIN?~rpF=W)y?n85IM?_g zQrbY{?FFdcHcdBTJNa%0Mt*|M_HD+x)+Figpb~zYWZ`yb6#lZtP06-|>tLhrDdU$* zTMH#srBOv{Q$xCof%7M9Y!O;jyBx1C$XNO~A73CYvIjf#j6cor1jl%1A` z3DIM_N|TgWXG_1K(G$b2WVQYI=W~iX^M5L~<}31)?;7;~%)4uQzubQK&-GWBSIR?y zAXYGnvFNe=2BF;`4bze$%%<;z{r-Jr$`YYJ80&La)L-T z)}+>;aM61;>k7pgX^+=yPAWoHpE{nd8S1O*WQ7x|BglSW$Jm#9%-Q+K%KYxJ{7VEg zS3$N_&UM2Wp-3U{0(jNCD!pOB`R~$q4!sr%v8#RX*0;c^*9xhLJ+IJZj#lvWlOCIR zimbN(O`>gk6>LH3;BRy|N$URTse58ml>lYNmqKLr3>u2~O-OHAAcOhh+$?3i|89%G zdIk1cP8r+UnC~~BV7G?$w>Xn3fqc$d6T@isJq@CYD&-nQ&xufKSambBW}M$-8HsOT z&1pzq$N`ctEKdu;j`-6$*f?TU{&l0=*x^c)&>!DiYOcj;ak-~6i`s_Y0?uSM?4)cu zkuPTuwww5;!bL#u?K)T!&#^0o3Ly-?xw^0?Y~x%KwSN~2R>W`&1*p57KdH;R2`r|# zR@oPTsGjaE%q#=%;0~?fll~58wJX7|g)Da#pEfZ!ocVC2_PyH$ zcB#K-_zw||LIO~iTI=(WlZD-cWE^I*iYi5;b6ySvBI>O7v1l>@O?kj4I}DR!Pgrea zve6ZVosZ%Toq_r5VsawE@}F#9!Fv1^r*P~m>{>Wy*TtPMg=3~}j?)@lUm9yT(i;AF zztlNI(2Fd89#rf#dr8dwtMM#V&V|#Y)jH3}^^+ngykOASkp>T`@1Vgw9n=N_k4N^n zUJ7Y$2Gnh5FkMVs%({GyynY(R$%pZFCy4eF=m*GqV8td$wtpWH8-(9OxR+#wjdc5- z2*mkCK>L|96P62J|4x07EOX{d@uut%;GFDaZM!_CKHh zJ9vg3{`<@QmBk*0rVMeT;vKsGeEtZ0p3XW#c;9x4{0=NENRbvte6Ugdug{x;~*$Be-0A^7L=B@M+q%#BC?A8K2gJpcdz literal 0 HcmV?d00001 diff --git a/Tests/ReferenceImages_iOS_10/ASButtonNodeSnapshotTests/testUserInterfaceStyleSnapshotTesting_user_interface_style_light@2x.png b/Tests/ReferenceImages_iOS_10/ASButtonNodeSnapshotTests/testUserInterfaceStyleSnapshotTesting_user_interface_style_light@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0386f24549454553e0aa88cbf97b96341eebcb9a GIT binary patch literal 41972 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 literal 0 HcmV?d00001 diff --git a/Tests/ReferenceImages_iOS_10/ASDisplayNodeSnapshotTests/testUserInterfaceStyleSnapshotTesting_user_interface_style_light@2x.png b/Tests/ReferenceImages_iOS_10/ASDisplayNodeSnapshotTests/testUserInterfaceStyleSnapshotTesting_user_interface_style_light@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fa5755657a386293662dfd20c883c786b57af980 GIT binary patch literal 1377 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yF%}28J29*~C-V}>sYs3RO!M_+ z&;qhK7+4sk7+66{fY^>v8qRiO)L>u+i!(7Wv}ZD~K-KsGX%LtI#2`Hont1^uR5eg+ z0TW#Hi3Q9EHb|T2wN?`##aZAHShB!vlpS~FB-f%$M;C+&ULjvm~PL7ra z2d3jL4hnS*4jddR1wJe+kJv{AM@oP^04AIN|Nq=O^%Iz8)Ie$G?P!V_%>#G}g$E3L Xe4C43J0zb1CLIP(S3j3^P6 Date: Fri, 23 Aug 2019 15:22:07 -0700 Subject: [PATCH 2/3] Address comments --- Source/ASDisplayNode.mm | 5 +++-- Source/Private/ASDisplayNode+UIViewBridge.mm | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/ASDisplayNode.mm b/Source/ASDisplayNode.mm index 694045859..be65409d3 100644 --- a/Source/ASDisplayNode.mm +++ b/Source/ASDisplayNode.mm @@ -443,8 +443,9 @@ - (void)asyncTraitCollectionDidChangeWithPreviousTraitCollection:(ASPrimitiveTra // When changing between light and dark mode, often the entire node needs to re-render. // This change doesn't happen frequently so it's fairly safe to render nodes again if (_loaded(self) && self.isLayerBacked && _backgroundColor) { - if (!CGColorEqualToColor(_layer.backgroundColor, _backgroundColor.CGColor)) { - _layer.backgroundColor = _backgroundColor.CGColor; + CGColorRef cgBackgroundColor = _backgroundColor.CGColor; + if (!CGColorEqualToColor(_layer.backgroundColor, cgBackgroundColor)) { + _layer.backgroundColor = cgBackgroundColor; } } __instanceLock__.unlock(); diff --git a/Source/Private/ASDisplayNode+UIViewBridge.mm b/Source/Private/ASDisplayNode+UIViewBridge.mm index 088611c71..c5b274352 100644 --- a/Source/Private/ASDisplayNode+UIViewBridge.mm +++ b/Source/Private/ASDisplayNode+UIViewBridge.mm @@ -788,7 +788,6 @@ - (void)setBackgroundColor:(UIColor *)newBackgroundColor } } - - (UIColor *)tintColor { __instanceLock__.lock(); From 87f3935700ba2c96930c79aa771d5084946bbd05 Mon Sep 17 00:00:00 2001 From: Rahul Malik Date: Mon, 26 Aug 2019 17:30:14 -0700 Subject: [PATCH 3/3] Cleanup --- Source/ASDisplayNode.mm | 5 ++++- Source/Private/ASDisplayNode+UIViewBridge.mm | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Source/ASDisplayNode.mm b/Source/ASDisplayNode.mm index be65409d3..9ed2a0c62 100644 --- a/Source/ASDisplayNode.mm +++ b/Source/ASDisplayNode.mm @@ -442,7 +442,10 @@ - (void)asyncTraitCollectionDidChangeWithPreviousTraitCollection:(ASPrimitiveTra if (self.primitiveTraitCollection.userInterfaceStyle != previousTraitCollection.userInterfaceStyle) { // When changing between light and dark mode, often the entire node needs to re-render. // This change doesn't happen frequently so it's fairly safe to render nodes again - if (_loaded(self) && self.isLayerBacked && _backgroundColor) { + if (_loaded(self) && self.isLayerBacked) { + // Background colors do not dynamically update for layer backed nodes since they utilize CGColorRef + // instead of UIColor. We utilize the _backgroundColor instance variable to track the full dynamic color + // and apply any changes here when trait collection updates occur. CGColorRef cgBackgroundColor = _backgroundColor.CGColor; if (!CGColorEqualToColor(_layer.backgroundColor, cgBackgroundColor)) { _layer.backgroundColor = cgBackgroundColor; diff --git a/Source/Private/ASDisplayNode+UIViewBridge.mm b/Source/Private/ASDisplayNode+UIViewBridge.mm index c5b274352..851e828ce 100644 --- a/Source/Private/ASDisplayNode+UIViewBridge.mm +++ b/Source/Private/ASDisplayNode+UIViewBridge.mm @@ -746,11 +746,13 @@ - (UIColor *)backgroundColor Note: We can no longer rely simply on the layers backgroundColor value if the color is set directly on `_view` There is no longer a 1:1 mapping between _view.backgroundColor and _layer.backgroundColor after testing in iOS 13 / Xcode 11 so we should prefer one or the other depending on the backing type for the node (view or layer) */ - if (!_flags.layerBacked) { + if (_flags.layerBacked) { + return _backgroundColor; + } else { return _view.backgroundColor; } } - return _backgroundColor; + return ASDisplayNodeGetPendingState(self).backgroundColor; } - (void)setBackgroundColor:(UIColor *)newBackgroundColor