From 8be3f94bdfc5a89d905a0940cf70e85d449ede78 Mon Sep 17 00:00:00 2001 From: Seungsoo Lee Date: Wed, 30 Sep 2026 18:36:52 +0900 Subject: [PATCH] [webview_flutter_tizen] Implement getCookies and setCookie Implement the cookie manager on top of the web engine cookie APIs. - getCookies calls ewk_view_get_cookies_for_url on the EWK backend and wv_view_get_cookies_for_url on the WV backend. Both engines return NULL for an empty jar, which is reported as no cookies. The EWK getter currently returns NULL even when cookies exist, an engine defect being fixed. - setCookie calls wv_cookie_manager_set_cookie_for_url on the WV backend, in both standalone and EWK wrapper mode, with a host-only line built like upstream Android. EWK has no setter and throws UnimplementedError. In EWK wrapper mode the engine's setter relies on its EWK and WV cookie manager handles sharing a layout; an explicit wrapper branch has been requested from the engine side. - Register the cookie method channel once in the plugin instead of per WebView. The per-WebView channel was destroyed when the constructor returned while its handler, which captured the WebView, stayed on the messenger, so a cookie call after that WebView was disposed reached freed memory. Calls now go to the most recently created WebView that has been initialized. - Apply tizenEnginePolicy before WV engine initialization by deferring wv_init() to the first WebView, and do not retry it once it fails. Verified on rpi4 (Tizen 10.1, EWK wrapper): an empty jar returns [], setCookie reaches the request Cookie header, getCookies reads it back with path filtering, and cookie calls keep working after the newer of two WebViews is disposed. --- packages/webview_flutter/CHANGELOG.md | 7 ++ packages/webview_flutter/README.md | 8 +- .../lib/src/tizen_webview_cookie_manager.dart | 43 +++++++-- packages/webview_flutter/pubspec.yaml | 2 +- .../tizen/inc/ftpw_webview_flutter.h | 7 ++ .../lib/aarch64/libftpw_webview_flutter.so | Bin 45976 -> 46104 bytes .../lib/armel/libftpw_webview_flutter.so | Bin 27440 -> 31600 bytes .../tizen/lib/i586/libftpw_webview_flutter.so | Bin 39748 -> 39812 bytes .../lib/x86_64/libftpw_webview_flutter.so | Bin 41968 -> 50288 bytes .../tizen/src/ewk_webview_backend.cc | 10 ++ .../tizen/src/ewk_webview_backend.h | 3 + packages/webview_flutter/tizen/src/webview.cc | 87 ++++++++---------- packages/webview_flutter/tizen/src/webview.h | 11 ++- .../tizen/src/webview_backend.cc | 11 +++ .../tizen/src/webview_backend.h | 5 + .../tizen/src/webview_backend_factory.cc | 43 +++++---- .../tizen/src/webview_backend_factory.h | 2 + .../tizen/src/webview_flutter_tizen_plugin.cc | 25 ++++- .../tizen/src/wv_webview_backend.cc | 22 ++++- .../tizen/src/wv_webview_backend.h | 5 +- 20 files changed, 207 insertions(+), 84 deletions(-) diff --git a/packages/webview_flutter/CHANGELOG.md b/packages/webview_flutter/CHANGELOG.md index 319388ffd..7b41a25d2 100644 --- a/packages/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.12.0 + +* Add `getCookies` to the cookie manager using the EWK and WV cookie getters. +* Add `setCookie` to the cookie manager on the WV backend. +* Apply `tizenEnginePolicy` before WV initialization. +* Fix cookie operations using a destroyed WebView. + ## 0.11.1 * Update minimum supported SDK version to Flutter 3.38/Dart 3.10. diff --git a/packages/webview_flutter/README.md b/packages/webview_flutter/README.md index 7991643ad..b7ad0e87a 100644 --- a/packages/webview_flutter/README.md +++ b/packages/webview_flutter/README.md @@ -23,7 +23,7 @@ This package is not an _endorsed_ implementation of `webview_flutter`. Therefore ```yaml dependencies: webview_flutter: ^4.14.1 - webview_flutter_tizen: ^0.11.1 + webview_flutter_tizen: ^0.12.0 ``` ## Example @@ -71,11 +71,13 @@ The plugin chooses a backend from the platform version reported by the device: | 10.1 | WV API, EWK wrapper mode | | 11.0 and later | WV API, standalone mode | -The WV backends are experimental. `WebViewController.tizenEnginePolicy` has no WV equivalent, so it is ignored (with a warning) on Tizen 10.1 and later. +The WV backends are experimental. `WebViewController.tizenEnginePolicy` calls `wv_set_version_policy()` before WV engine initialization. The first WV view's setting applies to the engine for its lifetime. ## Cookies -- `WebViewCookieManager.getCookies` throws `UnimplementedError`: neither backend can read cookies yet. On the EWK backend the web engine's cookie API returns nothing, a defect being fixed; on the WV backends that API is not yet in the platform library. +- `WebViewCookieManager.getCookies` calls the EWK or WV cookie getter. On the EWK backend (Tizen 10.0 and earlier), the getter currently returns no cookies because of an engine defect. +- `WebViewCookieManager.setCookie` uses the WV cookie manager. EWK has no cookie setter, so it throws `UnimplementedError` on the EWK backend. +- Cookie operations need a WebView that has been created, and fail before the first one is. ## Note diff --git a/packages/webview_flutter/lib/src/tizen_webview_cookie_manager.dart b/packages/webview_flutter/lib/src/tizen_webview_cookie_manager.dart index 3d502bfb5..1175062ea 100644 --- a/packages/webview_flutter/lib/src/tizen_webview_cookie_manager.dart +++ b/packages/webview_flutter/lib/src/tizen_webview_cookie_manager.dart @@ -22,11 +22,27 @@ class TizenWebViewCookieManager extends PlatformWebViewCookieManager { } @override - Future> getCookies(Uri url) { - throw UnimplementedError( - 'This version of `TizenWebViewCookieManager` currently has no ' - 'implementation for getCookies method.', + Future> getCookies(Uri url) async { + final String? cookies = await _cookieManagerChannel.invokeMethod( + 'getCookies', + url.toString(), ); + if (cookies == null || cookies.isEmpty) { + return []; + } + return cookies + .split(';') + .map((String cookie) => cookie.trim()) + .where((String cookie) => cookie.isNotEmpty) + .map((String cookie) { + final int separator = cookie.indexOf('='); + return WebViewCookie( + name: separator < 0 ? cookie : cookie.substring(0, separator), + value: separator < 0 ? '' : cookie.substring(separator + 1), + domain: url.host, + ); + }) + .toList(); } @override @@ -34,10 +50,21 @@ class TizenWebViewCookieManager extends PlatformWebViewCookieManager { if (!_isValidPath(cookie.path)) { throw ArgumentError('The path property for the provided cookie was not given a legal value.'); } - throw UnimplementedError( - 'This version of `TizenWebViewCookieManager` currently has no ' - 'implementation for setCookie method.', - ); + final String host = cookie.domain.startsWith('.') ? cookie.domain.substring(1) : cookie.domain; + final url = Uri(scheme: 'https', host: host, path: cookie.path).toString(); + final line = + '${Uri.encodeComponent(cookie.name)}=${Uri.encodeComponent(cookie.value)}; path=${cookie.path}'; + try { + await _cookieManagerChannel.invokeMethod('setCookie', { + 'url': url, + 'cookie': line, + }); + } on PlatformException catch (e) { + if (e.code == 'Unsupported') { + throw UnimplementedError('setCookie is not supported by this web engine.'); + } + rethrow; + } } bool _isValidPath(String path) { diff --git a/packages/webview_flutter/pubspec.yaml b/packages/webview_flutter/pubspec.yaml index 84fa834cc..c80777ede 100644 --- a/packages/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_tizen description: Tizen implementation of the webview_flutter plugin. homepage: https://github.com/flutter-tizen/plugins repository: https://github.com/flutter-tizen/plugins/tree/main/packages/webview_flutter -version: 0.11.1 +version: 0.12.0 environment: sdk: ^3.10.0 diff --git a/packages/webview_flutter/tizen/inc/ftpw_webview_flutter.h b/packages/webview_flutter/tizen/inc/ftpw_webview_flutter.h index 366b1d08c..9997bcf78 100644 --- a/packages/webview_flutter/tizen/inc/ftpw_webview_flutter.h +++ b/packages/webview_flutter/tizen/inc/ftpw_webview_flutter.h @@ -164,6 +164,8 @@ void ftpw_webview_flutter_ewk_view_javascript_prompt_reply(void *o, const char *result); unsigned char ftpw_webview_flutter_ewk_view_main_frame_scrollbar_visible_set( void *obj, unsigned char enabled); +char *ftpw_webview_flutter_ewk_view_get_cookies_for_url(void *view, + const char *url); void ftpw_webview_flutter_ewk_set_arguments(int argc, char **argv); int ftpw_webview_flutter_ewk_set_version_policy(int preference); void ftpw_webview_flutter_ewk_settings_ime_panel_enabled_set( @@ -177,12 +179,15 @@ const char *ftpw_webview_flutter_ewk_console_message_text_get( int ftpw_webview_flutter_wv_init(void); int ftpw_webview_flutter_wv_shutdown(void); int ftpw_webview_flutter_wv_set_arguments(int argc, const char **argv); +int ftpw_webview_flutter_wv_set_version_policy(int preference); void *ftpw_webview_flutter_wv_view_create(void); void ftpw_webview_flutter_wv_view_destroy(void *view); void ftpw_webview_flutter_wv_view_resize(void *view, int w, int h); bool ftpw_webview_flutter_wv_view_focus_set(void *view, int focused); bool ftpw_webview_flutter_wv_view_url_set(void *view, const char *url); const char *ftpw_webview_flutter_wv_view_url_get(void *view); +char *ftpw_webview_flutter_wv_view_get_cookies_for_url(void *view, + const char *url); bool ftpw_webview_flutter_wv_view_url_request_set(void *view, const char *url, wv_http_method_e method, void *headers, @@ -263,6 +268,8 @@ int ftpw_webview_flutter_wv_context_web_storage_delete_all(void *context); int ftpw_webview_flutter_wv_context_cache_clear(void *context); int ftpw_webview_flutter_wv_cookie_manager_accept_policy_set(void *manager); int ftpw_webview_flutter_wv_cookie_manager_cookies_clear(void *manager); +void ftpw_webview_flutter_wv_cookie_manager_set_cookie_for_url( + void *manager, const char *cookie_line, const char *url); bool ftpw_webview_flutter_wv_settings_javascript_enabled_set(void *settings, bool enable); void ftpw_webview_flutter_wv_settings_ime_panel_enabled_set(void *settings, diff --git a/packages/webview_flutter/tizen/lib/aarch64/libftpw_webview_flutter.so b/packages/webview_flutter/tizen/lib/aarch64/libftpw_webview_flutter.so index d034714a9c78a2a36a46edab2159b47ac1619420..acab9f36f6b7e8e2d1138514304ceaf1c0f6532a 100755 GIT binary patch literal 46104 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 literal 45976 zcmeHw3wTx4weHLVh!`RAjPi;+G$O`;s8LZj5lFD85kc|M?rf4Bk`j_M*^!{uZiH)T z%eiKi`04>0k+w;Sr@1YjV$0FA(l%OKQ$@wrY6NU!ORw>WO3nfI`NvvgtgJn=*WPP$ z&%NJwzt73H7;BFCk1@x5KlaL;Ut7FvNoq=p5|^fas>qjfjm7bCK=xDo0^(BzY6Sj2 zTb*TMhYbb|dFy)EVhL5Ig!TV$1m*9r!t-}nHV8d9%HsDk6}eQfNzTV|K9;j70Vtel zhUHc1p!9TeQgu3$aY6}8uH?N?IlWKbXnKdxnQ0bZsL0&}IkMBM%VOYij?XP$dN^G| zIXPz9#z6;}Q*^^hHRHa{DFt_YWkT+yrQaKIcJ8Ye^q-hcQM``lD|qIR$KfdcvmO5H z@Lufj2k|}<&q@bx1>W=6f3t(1=yiMyz$Ea-;JF;nT08}K%J5ujEg*+0v{pXqp)*PG-e0WHzOZ`Ax#;ioQ&`kC2U*r|F)Xo5Fre(~PM zFLww-qi+53g$~?ee)l_g^g0^P=^Ae${EL`ZsfCd@nf^}1SIdioUg~)F@>=8tlqBZ+ zz*9Y>a;5gFd{+!_9`EaXZ*$Ak^hG5j9%%mdPG9l7t<#N}FD{$+?>Q zs>%#!srxskpF8Zp@$dtW?H@m*V`o$|C%xn-Kgm%$p#F~>wQs6ZcM-amDRzyo^gI~W9V?|ZFxU^e{=tHKN~ak;^$WW@_*fzKDO+v_xm3^v;G?| z>^lFRmB-eEE+~Gp{-K@W>t6Wq#1l`iY3(?CXjLn^M_BJ@sG38 zrv3fa_S-K#^W#hJ*z={b1#Lf{G3gKfrpI1-ZSmJHslDNMzi4yorm1*Lmqs%zX&}M` zO+!xhN1++u{7|Ah>TpGBP+ob*ZmiAe+LDdo;i`1{VV`1`r`3IEm67JoAj z{H3NgrBa!n!=01h_o0%I{&en`g#S(E?_O;w5dQbs{snA5^*`jMXIgsd7%2D&Y-bx! z@Fcx~Q5HUvJJC{8i&8r|y<4e+hm(BkVSa{|59hKySvOhuQj4g16fmW0J2S+df8}!N z;(gzJte~}elZVdKGw4r z6^ry&FSHn?%s-3s|3tuIh@Rju3*S~8&Hvw+)RCSn28y0rnEw_HcyN;cO`NVU4T^B0 ze+S#|D~jfS$mKYh20l2^^Cp-3e64(Uu$|^Y4S3OinDaS@+lBC#GJk)esou`#V_aTy zI6tMlrZB#k@lsE|!TH(mv-Al6a<->L%eVVEe@b{VP-=;(f93McF0mL))N-zGbzI-X z{*#=aJv_mXc$?VH6(hm zF~8IbR`pz7i+EBab`Eg5CUZR(enjdyXMot*!u&3+zxoH;xl6P2KGxsO`6l^r9+y|T z&oXc;+qqoo8~1MJ_$gKikRKs(#LTav3k>elhbiuCo;TSpQP)Cs(Yt7-G*?7{7(_rHn6R`xh`n z_>XfwbaA_o`WfW%?cs4#?0kUhXSFu|&Xsz&#EMYte}wJn)9l~N^`uklfBq!-&k97( z-CUnnEVlGZK3~puHfiI#^844UtF7@jgaY*;zhC*6uDIS`9;^?pscHxX>sMTVZFOx; za7AEsb0Q zs%kJ0TvO|>t}P3Ms%mS%xT~S2uD+@!R6%CJPZpcT`2%HNX{@RbLRW2Fkf4J>^}*_3 zpdqL#LUrr?>w~NBstT_6S5!BKkT?F|`n7(Ov3iZathTzg-ro=mC4h!%8_O#F!MlPr zp$31jhO(jDgIGlnFo$e{Sk~1xHUv*G7E89gc708PNKBh7bYq=&?E1=JusQ*}Ay`xH zUmM(DB_RR0wxXh;tUeg5@z+Bvh%#Q2M9x;N3;Ner)gZkdiorH1nX*Hr@HaHp)zzYb z-Bnc{to2vcqBX^@QeO_-6+o)0>O%eis(Q$5G^?pmC9Y!**|OT2imLi`rznkPxDEzT zdrdxS%k27KUG)avm7g_amUZ>byu^=lf} zQQLJ-62a~Y);FNn@z>Q>SCz#{KCmHF*9Je;!n#0Bu-aSAwdE>m>(Qa!U0b^@zU|1@ z22?u#x?n>?U`^0pjUK4lzb0OHrHh1uO(A!Q^>_KJYN}j%KLj>ZHiq2$6apm9U7*bF z7L7d+a%n(T6xHUO@H11{$tnwnV{H)Rr|ixM!}w8tbdQfn4+4si{8rl}02W zvBt{KI>Z|?`@HJfKzaPMn2oruw!y6I@u8?#>oIVn275u1Vo&b1J3#C3pis}odqhM_@d4f&Bvc^O$E%D?>3I;t&!cN3&;CA=i^KrOj3sVgWX~%4V0Jr%T~v4a`nM=wRZ*m6^+%^39*i8 zj@K!YnBowX8AswtP7Gns6Qmfj3Fk*KWW?Aw6P*}RiDySKgk+{r8K|MPmLH`TzvyTH z_d3m$_)cvy25IR^%4%!ZR$*Ebs6hu@AGc$(MFM4&kf<%k1PC^}CQ9&F^Ta=)c3l0AGvDv+zgnGL}v zsT&iII!wl~)(8bcm{}%FFzR74Q+KNhMoHL%uHRpWy_8_UT3hopT3EF4qN=M_msjUC z)aK2j*M?Ae*##Gn_fqmQlKlDPFXNE%3#+SY8k;T*1nSEwFP%@^xfC92UX4Iiv}|eN zwX0V7FV35vH+QbW>%zjN{<(Pj8Gxwz51iI*!dl@*&}AQQ_xvIK^k_PqoA4JIyrgW17xqkpli6Q}~_NSo|&D z#YQxo@b4_M_>XG*?A;cwOXFuTzgy$?1}#1E`?%;A|CZM1c>8{6`I|NVhha-ko5mM> zr^bJo@!c9<@I4y;X~y?ye8Kl?{B4ZScp|p_SsMRt#^-8$(VwsJ%NSp*@daO^@s~2b zQsWE0PUFvI{1%Nb_-2it!T2_fFZfQ4-~Tmbx^9gx_#Tbl!}vapFZh0q-^uuloi6#W z@xQ_NT#YaK^EG}cOIMjyn$^=W*;_iOyajL+ERlK&e20ONBt zzUa@_`1=`Otnme3qVb<*e5J-0e4WOBlJQ$KzTlfR{x-(9X?($VYWz)%@7DN&@6q^c z8Q-Vz1>djnmoq-&doKB}@fR>YSL2KRe2qVY@x>Zn@Fg050^=(+zToRL{&2=`(fERI z*7%?D56W#CU+|q8|8I=%*7$<&(fEI4e4oY_e80y3E#ou3?~?x-{~5;TYJAb3ukm*> zzF6Z6zC`1Hi}95jU+{Grzlrf%G``@QHGT!-+cdu5J2n1|jPKU?g74Az1&r_0_=4}( z_%j%v@dKCq*Z89upR4gjf4;{5k9(~Cuvp^@zC`1{%lJx-FZeo*{{rK;XnespYy6)u zzD?r`zEk6WhwTG``^bHU4VGXSBKGzs6t4_*{)I`tvpZbjBBJe8HD! z{L>jolqw)7LUcx0mM{Km>ZRUNI6zu2V(=pq%I{4UNvR#{lk54vj*XiKnlRMk(b?|wM z$_(pq@Wx&k?yohZWlRZhO~1n4=S*C_S(F8m1@{5|KqRWuNQTz^_hheE!Qtd2iNsozdN z@wHbMW^VjeWW>h5pL1g2Hj*cs3Xc{I;B!^Tr`qx-?|IfNua8bw13y8WrPJ#!_ob*y zptnaIC>jU@Z^q&C4YWrhj~v94qr%Her{`b((doW{llT16EMrN-TS(K%d-hp6Z%%3d zC{1-7OG}w;>dQ$rKE5Nh{o}OM*`K7P&Hi+f8u&CVeRj)fss+_)&wIcgNt-zPaN2~~ zhtkH+em8C0?B2Ao9UtAiu)RNRSjWeA6t;gliQ?SfM(I~%W9w97AVak%*hDxdhVsWw zAKM~!%%6-uTL>$o5pgTTeF$+&e3U<=i_&JtvuK*}jw2pP_sM(yEh?>|pVEw7bxCgr z(%W%6;wnX4M-Ug%*nu=U;!HQ=B>PX^^Za1E**V599Pvtc;=x~0;MA3&~4si&!(C~AkRW*Ss)CS<5_ z@!FDGdqjIdTG976GPny*DdKXpb7>1~w@X{-I@kD(BVLbfp##6+ndOf@wWAR6_BzXC>v;&X%Di)g z8prj5`W)AK5vM;xItSxAPme25LKH@ARvn-4Aj1PySZ%z-7an4ubmS1?JQLEeA zpJ&?p_V80HKdT=)-MCHH+kKI#x7({;D<2&7_jF@XbUt*%%!keS#*dH>X1O`$ZFWBB zdR3;8=S6SvT;nlI?<>*y`&@e~jSHCb(Rx6IGmW#MFO2e{bwNMcl|8r0m}hL^GLkg| zts|o3)foorN^JSiJfmrde7yR2hVd!cJXqhU%?zn~itO*7X9QTc%n7aWQMYfDaR|7W z=?hMi~4ctk22<)b>te<5%>Pcb&h~J%V_CKXFmhoz0NVB zWxm~)o(KJoxx;L?xr1G2v^ljo=M9fGS}CoAd28y?+qIdulP@twTKQtm-Cg<;yRMsk ziOMqTibH?Q{?63jd5Q7w!?@1#d_HP!qu2RxmVv+DbM`5*+tPwdjkhelTAg>BH)3w1 z&XlzPt$jLp?bERm@wFnacOus&Ph_7rmRWFfK?&Z+M*1;YDxemBx5)dOK-s zP-?u<0({qCf7hwDUTOAsX~W|6cSHJ5OJ8`r5!Ur(FEI6ekbVmK)C8kCak@KI>jLAA zbgPe#9tWewA?nLaJFR)q1Y;%T)nH%g)|Yjv`BxdwS^8u5m4kg5=j%k{YA<%bb(PT` z)9xYTiP$|`g(uqM$t=X-gZ*B{4fM&KYV*~`KRMDN>l3Tbh!dyEw&TpO(j{xpPBr-& zdknh^W$eY480#EKAJ#c`Tpj;_t&a5BeIm^T`q7Vz{XCcHRGrrtE0a$j#)q?Hd@%dt zm!YE+`Ks*|as6;vL#|TBrOvo{FUiW=A!C!I7v*WkO=FY2FZVCd)jBvfCATk!y|1yF zEzx6>OZ!!48_keQ*x$CM82_0Tr@iUzA$+!Rw->z&QVop7=3Fhh9mlJilbmHYyA<&_ z%8u6mRBw15?9S8c%uE zpFYBvNZ9!M0`~Z4?Y~bo9`dUHzz8Ff>RrFJR+wgd75clJ>z(Zx=3L-ts=bak%SKT<;4Xz$+U&Wlbnev9-Z+1^pla-!m1d@6CjbeggIRN@XJZtOMFUgLR) z*HOn4jf*`hG}3s`8D~@-kJqlwvEv+>Y@Dl3H|kF%&hTKI|A2f_>0Fd)taOdjZOof) zyb2k!p30hk&KYJsEkr$aU-QSFTUu>vy78>&ls(8}md*we7sBF6e&`W)218Ah9~ zcmF8U)`^39PoYiCu*? z<4tGWQFE?%!?}AHPGFgXw8~G#=vJXG3Gih^)x)o zINxFO;J$dOxi7vDeZRe@cWjKY4Z6+#E&lr5tXnvB))?c(=G|kBuO_26e6Dc<_=I_Z z_3fHu^s4iWzW^`g7dJ0*#~UTd=nkJ}yzIs1^a;il@$?Sv&pF2QTmxtS*>(@k4P(q1 zdL|gt37gcIo@=y1#_Y?iey3BlO*H$5(JA(r>$Tr$rab~{E^@x{O>cI0s(Z7IWBC5W z)$YOeV(M4n^Nj}RPEbd%20zPq8+tv|X-lt~ZG6#--tM!EZp&V6KXFJqWP4{DMPBqa zoo)O$8NKQPW3Csy8Iz3d$>c-$0%MXFy`7Vc2a>XPjxo%O-pa{FT~hYWF+Ko3VSOl{ zV%%=oyF7ZW=u&R#LgP&@dS^~G7Fl|=`tbAiP54HKeorawDH`|)?K?&J2HrhS4W!_= z1^Tw86-R}pu4)D7p~K2J_N}z`Luo0-^vay$ zB$HYInXVMW2bud3N8yp80Senl-ywAu4WwY4qW5s2GHCz$oP$LJ4}B7OB#fiIe+Y`U zHs&*Y`|}XK#cBlhJK%*7UoY0a8}a?tw+TB+4YYukVq7Xk*tASF(Dh0Y?5E#deFHg4 zz34;OCSV5Fz`rv0lOxZM|3ly5ap*^s{k;v&=)^oD%N)bE!M0DHOf^0&OKVR#O|_?; znbQ8=k5UKz@{`nozy36JK+OqXm69L6Ds_JNs6JUpg%lX|9iH0amW zGe@w_JM`d^_Cur7+k3xW)ZRN{So@&|GuqR_;a8@k5AFT>Y3=VK?|Sj=PX%;Se&+NR z4WyoUCj*^Te`>0_>^Od7UV||7q4O0T`W>q}Z96!DWyG-4zk7QIP>e$K1 z9>NaJi>!TvL(f|_QQp#T{w+v1+0#1>d4_cMK8f&6Zf(Y;UF?r;7w;n9s2oetE~riP zd~CIezknhRvrQbD<{Q|Eco(Xa7fX@;g^+m>;g-$&`S%j*yGi+d5P#;5V*}S%e-lq{ ze)Et)wPe}K6)P4m_pexb`{En?CCgS8ExqAp|E<%ealz3C@5F^BI8!jLZ1kBpaiOt~+=(lK(>P)rvl3Utao)$!gL1q| z;uwk{Ckc9$jd4tlS5e0)IbKD?QuB};uR_igm%YSfi7B11fLWb4`Q7Y7!P5e z5*QD}X9OmK;G~*F5Xbp|@u2$YfbpL&xn!;;c?;jAkj#5xl&9)eB;j2mv9 z2N(}xody^WVV?yU59B!A56#^pGC^_kv3&{jF>3XOc#$%QPXJ7Sbe#Ve59vJpFCGqE zNrKK`$jN{4)One&NEhH?<`DxLd*TrT=sNEZY~pE$Ad{K8iA*w+F_G~;?GTB?a~eTf zr~Jh$yXZ6i;vtisxQG!BL75FW&-e2fr^jhaj7SsAT4G3unXZ$T7&3|GEHOl4oaz@Z zGrUhWC9YGM9zj;RhoR^BxtM1QM4#rD03G`*zXU>MgD3g9BBPGu8*+}HH?gQw{9Hs( zAl9_cQNtZ)_$88xd4gXep~Q1V6kzn}eJ(0vp4}H0%P04_V1}H<*AVoIv`+2wh;}=( z&qW+{GwS?3`><_~_yhx`u3q5EYDcl7ra(Qr+>#XwD@Q2CP(!CB+BLv|i&@%(Nc-SJ z$lBF9x~>t}4vJZKqY$y%1VOZJC90*x2p`gbEsQmTadZbxcI>XjiLe9*4<0q`Vx2>e zF-533BTCevQVcS6im@?Z2Rkw+#vl+2<{VyPg`*ytI|9~Wv|@%M9>*vcOFqW%8Ve@T zI0x`pxS?AcHY$3?VYB%_VzE4Wj$@-@PnPUpxA~V1aGTWGfav+5&2~&%twW{7PDcRl z-H5?8&$f=@J8ZB8?1n`rqY4_C?d(p>ishW*+d%91Rr`c+k&j+tIMKLi!H*-#H6VoGG>U7HkQmlymP z6=)A;=8iKWu;wFL$4!!USnQsgA^Kez!nXIy26wg-c7-HsR#`_U6xEBx0!aU2bz`v* z&VDRbc&v^r7EWS{>d9gOV{~OUjEXeIG23>yOLt|5YrUM!Pq5=XSPEKqWh-!WOICjs zD+C=@EVkKW*#WLys*Nz?a&~HVh=Un@V7`rr>dxpCW85yauBvg}g+S2h#5fILQreaH z4NsNfede=~NCDngfGz`V0WAeR0=gNr5A;r)xeQlJ`(YP-U(UGJBgK=VQ8{|5GgZUx;6dIWSI=z{J@6pmm`8K(~Vy9Ed~? zfbId!9F4P=Ujq)b3p5Nm|Mf^@4`>VM5zu3xxE`alnYR)gmEqJDyI0o@PU3)&A_@NOhB z83*k&gBFAKfrdbRhmcRG-wO_-K7;N*g8W3iu6z&e0Tf9!UCQ0dReICZlu4P>OkOs) zM}CI7$KiyVL+?L_Jw)Mh@c8h|0k0TTEgY4zBmMET!fmNHy#41_Q7THoG*ymg6)=d- zcDZ|ZRVrHZ4)Qk8YUII|6cgJ& zvT(=0q&)sqO5wKMDJ?%tS@cjx%ERp`g^#qQJoBZKIm9A{WlZ!muW8r-}G9Djs?Y7}9!zwLQ0r(4m*^E5e>cA8d zX7NMm52s!GNa_vH{f1?Rsh-~{ADbY10J5c)tmIou%JsHAOT?b}z|iq>>BvLMGuWTM zWBB943b&=Vq%C;lw>?)UoqtNB`HUF7>1nM z7l|}m_L=!?=HZg~c}VqgA7ocRHe|_0<;fS2jjvhdN*Q8SB+8F|$h1Ial_fKnA0%Mm z?R+OZjUW4xz?T4j1o%>2ze~A>fgks8$(1XmeJ|uzL9W`0Co1j5gK0;dw$e^AMSw*lUn^r7+4ycy_QEO@XM0G_W~aRzBJmF znC*~K?=3ZdcFOu&!sjtTQD{2K~@5Q^Bsfoxo1UT-%EcZvk8E5u1TIamXWfKCrF8CaPz-$cIv3_j|-{1-8$F4OF-G z0y_?Ci&DHNs*7YtAMlHSPn2)eHpbDsA6T#BD#;W>rV}z=+Y`yqdZRCic&P4nLM9h$ zsATFcwU<7~RYR^B@5nFD^9;(nnON6!K{ip|5w--_qaLu7mV1HC#=0+=w2<5$$lZAg zaz`Q8nxq`%-ONnPX&{$u-ccEsLbd>FSg&=7>UIlcnjlk(_e6D@@cV&pO9Fok_=8E{ zXJQ?if%Udl{xQdGDxVd==L4T?xo(AAC`mcWt<}BJ?A8BFR&*(>dnkT--`Vp zFE$hay8>7*Hk1Rq*@Irnw`O2Ffh~8P&Lv_b&n}qKNJ_CDOUi4G`GacGnod96z3KGRU7h4G#WdY* z?9XJsy4rfdwA*wAYb<&e`{h2)N$k&HdNxzJmvgcfj_pm;^|Rq0e-^1FMmFsa!C{-v zbQu#YN?U2<>aZ3hhh?$p9%Fl%t+JVqEo0O5@qG@oT~Drr;~Qsr6-TEgvcGeI_3{bZ zqj0c3xlh^O%lbsFV73)5>89V%$YI;UbYjnE5i5OL&bRmx_DeeZ*}sz}Z*T+bf7bH; zxBu_s`%>jTREa?DK^4Cnm3vX;9#l7+8$XBZ)&DK(7O(KbtyV>ldr3YFOGq@8@Rt*W zKb;_aTY~Vr6NHx~2w$2Yd~Sm9j0E9w@2S$9lL_LNdpOt#k{Q zdn(<+Z%s{O-s;Ax>hcS#%2i&l(qB;@SQk_#zcSEJ zsq!lD-MQ)an-Nr3)vPs@;7k(>#s?rEu3&Y5)JL)X^@D2tmF4gO0b5kw>V^iDXMWUf zN!C?|AXyvAlNXgof7@VLfY0LV0~;(nze|?#dlo$SF z2CeZ$Ue?*)VZO-A{((^0F96JRoIT=I6?mhyxyZ|UT<9T2iv5BUO4Br2>x*C3`$9We zp6sVb>}R%WzzgXXdD&kOD*Fo(zsO7apJMq!Rw(-!LS_Gh92k zAEB~u0*L9v4)OmOFHU)VeQ$46u>gM7GM&(0!51aZ`!6|6vvXO1iO30esU|P`RYG;V zZa=jhihmv}EH--}d?&*671{XWaKe%kx|QFh{3dTSgO$*kvN2_`?RLOkb%`eL+iZmh z4fFnz;HCV<{{~)YFHfS8{ki-d7DC61U+8ZE!%wfayzJiH{Z}^^1 znn#cNe(tNQmOOd$6L%ec0ck@K$X;KB@Qg{lH)a;?bfs+?QQKT(Y5wqE2BxHs-&)d` zyMJKH;j8nei8|q^ef#QXQ$+ua4Ds-q+G~G#uzFvwq0N`pzkc;-n9vTgOUD%|h~dBy ze0~-1CwzW2Bf%&>zg8FbQ=F6G>p1QPUD_C&kJZU^nuRcqW4x7dI^zsrK0*OPA;--G&f@dgjB^+X z=JEM$y0{|U`RzEL&+-CbF`q94-ofV*?&On2jCTPSBizmM5+E)G<+z727T^*P4qaj? z&dU%?2P@)TI$e2MjuSV+y)wdp%M3D!UIbiD!bbuQzY1bGBS8?MiscnRy6oxrY3_lW z9tn*(IkoMw`=35Jb;65o=aFTjU%z)?S7+@zCq38S?cQ^F#^{fpJ@U-9Z~psa=JyM} zJ^A2c(~e#`beDKx$4qxS- znR?gOnS6VGuS4!jMtt`1`!gn0eeuQQrw+{+Tz~JKpFcXk;e+3P z_U?15GnSred%EM~!)bSZ`pruNz8;!-)rmX*u=u8nPv3O+&U?zHY=8ZlVei|kfA`*@ z8EYr_<{kLcb~(ho5kf1M#+mn^JEqd8C>R-Dj0BM&M+%?I)z`wwA3_zfn_Je&^}7m3aNFt^^+ zEnkL(;8IMIG*43c+v!5Qgo#tiYX=IEg9%c~AEH8!VuGZ3l=Ke_65>~wG-djqkm)u| zl2YCPxk4u|NB-YT=;nXjA9E2VVyXZ60NBT*O!F|=9|QZxk-yBZ0_B^4^4U23DabXt z@_vK*%+T3ii9s|06SuVg9onN;R=2&wDJTybRi;N!zL(HGbJ+eV*#BH-|G6|Fo(Es* zH}yt(w%RXL-qYx?Jy^74`Uup&m#+Q?;ZPhM*PXrx^&f@$%liEUat#Do|LGTD&BMYa z?R|{=Khov@2KvW^_Q~V&)}j3t>e{bA$~P3{lYA@cKMLbP%8#J_6{vq9^K)Q-s;+$& zBYiB=rTsx@kH+!c<$W9VtwDWd`gYW>QCGjYsLw9cN7io*`lk_@qex2sZozoEOE;db zMEgI0{*&d~kNO`+{bhgeLV0$fJhFZKsNWi0{njA=2Xy(rhyMS)uK)8;{^KbB9L~Qt ze7G4o-TD2QWL^EHqCF3xe`Nm6D4z%8L(1=>J{RlCYlr**3NOq5E%JX~m;X%g8=)`T z%Zc_ocYSyJUy1%afc}&1^Azg;ysrKksNVq8Pqyb=^ygi={=5SEXHY(w{|4Bff&P(l z2kbwO@gmFbLHmzF`^)t2z#j|avVAg8{&#fgQ_|hzW565{Q%lq=06ne{iv?JC!;-QB2lJqL3up7_FM)2A@rYYk1db~==$&X z$Zw%8zlBJD9{RFOpyj>aMqJwC6Xv z{BB2kpF_GVe`Okc7F=I4{~VO32KHtC5BEp=p)#^QFQERPgDmy`i2go+{+8)!$ZxMM zKVi2ot?*UagCR#CWVZ|Z%;LFrrz_xE>IsHif#SK-y}n9Uv7^-MQq#;+>}Aysd%365 z;q|P7qCMmd+LyXQc8Aj$5cb6jLgTX$=??f-+JiMPTw!+w0=|GpIK9dVFj!LoBFa&= z%wFbRW-oVmyb3jEg5B<`EOXh*9A2+l5E#tK(Zxm)msU9fPQ)l2f52B=1Hs{PlzQw{ zl`B1!PB=q;yFZYPXk=dLvwMAIj*!P!iHH@!N`Jsp87ikTK&E;r2JMcrquYdrvFU`Scyk z+JjYozYkaE3Xjv}v%7t`6yp!6dmSqrsFlZ$3lP^=NV#%K>B34}N*%Y%S6S`}RQ!W% zTzM5J09~}_pS4=-fXnZ#NxrVKyyr>df+oYNaCj>14{+ui9vT&DE2Hw3W-~nwUTLEs48ixoUULf;ET~qQYqjH(n4x_nM<8= zUs+W!c0Wip46@{uVs?+Tl=SeG1j;(#T3&@3CoY0JRDptqlo{CTb2#HyUYSz-zMyjH z#aG3kT?vl>S4T41WH>2%@s;2bB&tKXXbOxKOcL>n6Y_*`IVS93 zEc^jGF4)Q>`b(#q(5^aJCLRN}93#FS&rL!neX@FR$`?6YA=mu4ElHSri>r`ag+XE)#On?wScVp|@tj zk%f)pcA2me`)Vd6>4mr*m2|sFH>L5rj+}#Joo<=mKjs>OEvFLIF|=1WDlq{E;!bQD z#Zl&lljU>5xk8y^R!ZvQ9uzCAFF-CCIIfTj_XjatP<_diY|3zt8;FwyxwTs99c5)M z%(|*WnxJe^MCl%%S8mi_+t;*JuMl}8T!hHA*hQp{$j1F z!IM-LH*)>sEibAzIb-p(xUZb9GThI=BG&hqz1>6iJZ-~e@#7W&_e>#22u^Im3S$JH z&kY4y(#X)3YrEZ#529QS^)mwY*ku%bW+c3xQl~d7=*t>Ur@@f3?1mdiyoto6Wo7mt zNjW4jkK}BU%UI7j*6XRPswU}1iZ^rQkthnLPq*KgH9-{2nR)AU`}nL}^=#21#O7w@ zHpf~>dh!li0m!+DEL_(o@7$oKByIIy!!frs*vn<+u-CS%y!W zdx@=@zD3O8G%NH~ducj*7I8<9^wg;IOil-#`6*gDJqvO<;@cSW@VzFlxn;5q;)-g6P?quA@*v#0%c#yG`@d#st@f4$2u9hQ>F@rIa(aJcIF`F@$ zF^|#4Sj1S&SigK-8A}+QjDE%tW0`8)Fe;F=Gj%lhMx@Vhl6ZGHztt#JH8Q zj(7|Mn8|2m9Lbo?n9G>QXk#p5EM_cWbTaxG zLyTd@TE>lxn;5q;)-g6P?quA@*v#0%c#yG`@d#st@f4$|;`%dYFlI7Z8Amc^Gv+ep zG1?f57>gN87@drM#t>tev6gWo<0i(fjCG6+j5`_kF*Y-{Fdk%VWjw+dVLZhsR&f0p zGZ-@&t&AfXvl(+4^B8T6MU2IaC5%o+Kcfxv@1^+uZw~Ncd=Fg&91JX`c&vnrC>|@` z5{d_wP&~drbQ0owM?c}ELWBq}6QY_B3rc_BW%yn&gAglVCLzAJ96|^uVmKkbN3;^+ z`{$8__?~ezA-+ExLx^=Qn=ljKRT3hfiG;8}g>VQ~>b$YX@jc~<^zhy<(^|(KO>2GT z=)l$ut?7|Bk9za*Mf2Mm4rji*{;>D^H;&44r|x`-?z~ucK1X+M)16Pzo#*P#$LP*S z>duGj&NFrA{c)a|{mju!>oZ4Fvp2M+SRXrvr|G^J(KXI;va9Q>H)dFr=gWE*_L*I6 z>oe;<+rzi6vZc24n*G6|)W#tN{sPftonsNh5jI2Di8VaEuPy{bHA>!=nH@hFKud)rRUbd$%tY6cZKKnk~5O-I5-N~-@rmo(z zEmz-XyTYHo_f7DofL9G(J#Y);=3}C1?D0rJul#|91M@%aux`9OzuLAr-x4YRAuYeK zaeDrw{G9yJ`E~gRkhb^BNI^+KT4A-#5@|SV&4;{JH2GocRrINUSFilOuu^Ty$hJiC z!5`g7+-soc&l^&Zs_-^}=ii$R&U4@(?`ggA`-63P{$?<(U|t92L|x9vWtz;jO3ii6 z_cn`oGAhq(F#E^IbFq@=8{j-@l4l;6C(p*tb28`o5cum%_(kCVB@TZW^KS(|r1E>T zcL{8~1RL>My!{NfIPBb^mE$6%?W%2lSXd7W*^O$CQL9I$4dLGUNae11W4c8Yfa~9t zhQ1nr77v5xKbx9AdQa~{>L=>kxAt6@PkB+ViKbd`Y*Czz;M`&0Y>(m;fip+p$T6`M zoGB=u*_ik>O6T7@9GuBoy}HLl1DIFEY2RgBx5KwuL^hYRAL@1)YPSzui&D})TJ09> z8K1AO-wWW~XyCPgck~RkN;mIj1FsUi2?ky(c<&f^!wkHez`F&!4D>-du89aZuP7Yq zfefVwEPJT^GnDpEfqow6qxP9N9rjxyk82#Y*N*M(u2su4i}<;Lvksj544eZx&ePzi z`Si-~r(DP4^hR(TXN5k}8U!copBRC@s zoZaAjV&II`ah8B{Ew_VOwtZl{)sdEOZS0-})zV$eZE!s}S4MI6gR|X)BO>ixYI}eG zbBnkFobr%6f54G-h=4H` zwU)J@wL(N5M2*pd(EW_<)Ab@wcR>3xr6+pv6(b_yoe z*ro4r5t-Mdp9!{r*R1fm$8j21pLdy!e-RnS{ow|0yMdPu-k)ReE@56ac#ktr9WVXC zst3zBUPRtr&>gj&ZL?q2J~=}cItgoW6vkBIDs zC3U^8g{@-M7S`?o+S)Bn4}qOouw%Y@qyJSKYedr|*q9tu_u=4d~3%*g`h z418kMZ=!LX4Nko&=gc|o|H&3{3>>+3h|{^?Z0w|Q-F+<_-Yc(#x1s-0l>S8MR~z)- z)%2f${(Dhnngab2(=xrnWhw_}H*@5=kq6ccu%cIcb>?`CdD-ASAC;F4tm{qls$tIA zNfz-GIC{U4TCNbx0brVWKO(XiY>ZuuyM5rVRr1u&4RgT$-*eG(L*8Ef-0%>1H75BM zf%*QqSox07@+|~^vBuY5GsUpb01L6MnIC_YW$z6ed8!TgkH%|w5$vpoop{&qUsYT1 z+4o`7!w97v$UmbNTmrrq{GM~q>tNA5{~$OSQJfNR=9_Z1F=rMysiyUIf}0zs-r*l< z1*2XY2ph+752^OKzU|zwF*uHmdo&yGPPB;kO>KB#Bl2VH_Mf8Jcmy_ft2Rv9-w!+Q z!A`vPzf9U%n+IEu!xpVk7qPD@PKRKl{zr_%M*Y}RubPe@s6D73&faVhzhtglr>nvI z4VXRG>Az{bec-KBc-`yU{opM}sm-p_rXSRPUkBcD120@6A`4^io?~7Scokeu>9;-v z-Yrx^?QTOv{^|8@-(mzu#mL3ruZ10vl&z-dzgZv&u2| zBy8kx*}MB^9rz#rVBSBYwRT<%?o~awzXtb>7~FmucLcb@dvMo-yCnv!%QhJ&xkwV@vRqc|_wKO4dDC=7WwC?c=F*4;nVCY*l(=Qaapn~q~+ zj&aW31m2D44f8oW%y-SAsXzGi8B)(N@dPXkj?wTS*oUAxErX0X5OaYw3N zZPUP{Yi&JvY0OjS$tS`35Uif_;->$-(IR?9akhfQe^}-TxcQ_JWqrd~mwJ@kjaKFMu}*JpI+bKI-oH3h+7=UUxrj2aE3i z&E}{I<&y)^bY#3mbZ~xhEZ2jVYRGM&?o)~#;287T0nTyL`&JRTne(a!uRW?gUIyzw zd)$MH$Ox@HZUyH%u9rF{8o=3!oO+Iszh+y+pTHSC>$=&iY@-SzyVf>*u&CO0?VMrmUXR@t5viT+!@s`Y zmg>IJeS>?1JN3o1$I@O*Eg4pr`b4#@vwh&#SI+)oQEEx=Z_>puoGoai|3mXFk9D@U zw9z=U=6AL?x7`-$$~|+e-MzH2vwcTfmV09Ua(8F@-`e0Vx7W3$H{Rg>TgiY~=_tbo zi>`3@dTMc=rKPj|wYEMDk-g<8;~a#M2()jiAJ7XdMkqnpI?f^n?Ho629N3umroZ%U z=G+e!4LJRXEA{0YZX4!4(9u6vt;y!Lg&k>6-F7Nmh7w-A+LrQoONR)ji-Spkv8!m}h2922AwJ7ub(MWlyE!;S)aN4&P3)R})MsvWBnKd|Hh4az* zlTnX3ZByM78Z&3zn4dYbw{?}R#3Oqfnfj-|Z zMIESaxj;9t5aA(wr2jC&9})Zr?`7fphQf*X9HX;+ejAk~)jixj$~_t_X>I$mWR&}a z```As-R?b|?PpJ1;~wfx$xq+YZ`LYXKiv6G#Ajt)?aP{o*V&%lc8&YXl26>?hA&$t zVt(8Y+r5#;V1%n?SyAR}WhA8KkC-b*Lh8oL3#tDfuu%yz+GreH0)M!(ymWm^p8O z{m%K*ii&2;rzb}OjzEpIsuDXoJnH7BQNc-8bq|u2wn(|0ldPkH!gM>46?>{meO@a) zip66!T{o<5F~w#Pxg%HCZN}yXvuNC|Rz_GpNZ@b&sGXOOYj2oEbAp@gjH#~fp+8=uY7wg)9kkPq{j>Eqcy z+8PuiNp1{^m7J(G)n_^lJFa3F(`^Zgr@Nfer)6{SAiKmAtD#0YvV|!0L zbIJHk@`6di12R!HcYsV3WBNZ*H?jL8HP6R|l$`T%3MD6b_eU}k`&LpDn?bNWCtlx0 zZ{&%mdEO3`EQF3Iy%PNL*xWjpn7gP_IAptSQmhT(PQUrYm6!L+x2CqY30!Sh zM~^j9){;!eZj^@kH9;zd>8R)BW}*~z8Jnc{m>pCd)jiV9HTr1tc}uUM61%r9Durj8 z${RAYt%UG5iKw_+iDqj}k!o(TgHzhkwV=rgqgm0Z>DMl^bPQJIV-IyZt4Th(CDx2@ zvUZ!P$!zrAftg;<&u=uXXm>`7R{bDNjCP>3Xmd|YOOEB-X$rACMol5w`P8CyKC!wj zUAC|;0q+qqiB)#TN5$*Ppb@mIPe0nw*!np~8G-uyhi-QCI|gKK(f2QUZM-?gj+Y!5 z6j2B*N_T6fFOn`=udUtfX?*n#Q4{5hB(xmq)e}@s^cy@hji}j? zwnO8Me-)mpim}k3?ao5fzG_)BsPQFyYlnSG2f9`_G`t+HQ?NeVqTr5j`hQYhXeW!vu!fhDQlK)oIH!D~l-p{h_LzTZy!TRu*3ZncUsqqm7 z>%-y`l^<3R<@g)P+rz~Q)`xd0xFekXDaF@^Hz~M1yz%d6`HIKuMqRyDm) z!R_G?%LfTx>>XbJdDrT2XV+@);jY!x0sDasf9M@v@`Wl>pIkUDw7`WHxX=O@THrzp zTxfv{EpVX)F0{af7P!y?7h2##3tVV{|F>J<41O164+7oW(|gDW>HTMf^d2=rdS4nL zz2}UO-e-na#t0`6uXqvk+e>(rjJW?+^|#;Xon^xyry*Q{K<_Ra&hqKbE+4kK;SFkd zXADSqg^YL_0$v#-UWC1ifOuVuz^i7I2g2#Sbo8t^wx|fao<@1MSqAc>^L1C#?`Z&G z1XR4`O^D8}F5m8-2+;*3+Y#V?s}N^_Z$nP@px@V%M=kO@-*5=O??K1972S5!nCSnt zNPl2jbR50Ijo#AP+Ohor|OMYct4)4Dzc6`3ZwuZIJIa$O{Z|fkD2>AX^Rc z#Rl18kiWevx<0K2xy2ywGstxYdA&gn8suLXWSc?0*&zSaAP+If7a8Oq7Dd;m%^-hl zkpImf?=Z-}GstTVvfm)zWsq$KIolu)Gsr0h`Kvpl>vPZ`ziyE04D!PUxzr#}H^^fQ z@|6a;w?S^bBf5OM4f3M~Ibe`)H^?~#xt~Eku`oKnw+wQfLH?CNUTTnw4DuL*+}|J{ zqfIn?(0tNtke@ZkYYlRhL0)2zXB*^PgFMtAf4xAK21^;r(_)Z!>g1KWxtmzA-~XEB zbd^>uC7pkN{fX5g%jpO?L{`A3V$hABLkKxaMb@9eGtfB z$i$LMVWf^oz6c$&5Wa^mKzihdP;eqq@i!1hdK5ee@$biyFmyrCFCs-yu z@@FWJA0rQ#SB~ZQPd*9hkv~Eqf^(TK#Zy>|Kt2qelOIE&1?Q9>`7?xcJc!U2f%M1^ zQUVmDJ<=n8=nn{_cPj$~1IL3$KON9vJ(iT6B+ vG|GSvX?F``vP<^Dn6ttw%-fG#6|yG}(i<%WptL9JDwDQDuT=^_Y2*I@YrE}m literal 27440 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 kFAsZ2Ub%Vy(Q-xh07@JGAI5fm=l}o! diff --git a/packages/webview_flutter/tizen/lib/i586/libftpw_webview_flutter.so b/packages/webview_flutter/tizen/lib/i586/libftpw_webview_flutter.so index 333851e0d20d8ade71770fca16880aeb88f316a8..4c9021e25f6e11196351dc3593a32ded9690fb53 100755 GIT binary patch literal 39812 zcmeHQd3aRS*}qx92mvAlWr>nvw4gDpB88v{8Wu@#Ob7&t4wGcEz$6o9CJ<~;(x4@T zR4lYEO>5AW$In9Lv!b9>BS8upD=1p6X-x%XkWgYpL|=gyriPyhLzrx#9s z_r2$RfA87vx!alhv$AJJMMWuci&0_}CXG{+$vBw(2#=YpBrBIFW0aA~2p%sDfU%7{ z^r2%33X9+SGez0^8y?nPq9~6d^cC^Z!2O8dk9Z0Ra7cmTV?{`WEJF&8QIK(_PhBM$ z)rulRdW@n_knwjS9_oG@@gsRkF5_uwC=AE3 zfe1GtR3c14up-=uAUB)XnE+fN_D2aU7I=d|0xGxL5eAVUwwVIw3!Dn9LbylB6#`QP z{z%|b;H?NFh5Q47dBDpMt`V{xN^yYdZlZ|D1X5k0nJVQ7KSa=O8A7;RV7$OvfL9`n z5VC};I74&z z3eEnt*dKymN1!&Gj6hosLJ`6=60j}dp#F8Jdwi!r$X9EQkJjwV-CVf?oTb^<@7}39 zVA9D+kmC^gA&k+*g)6f0N2h#;PS%Qd3E^(-LCyZ9ntko=^%@~d>{~R)XtzHCjVIb| zD1_U@fn~tO+Q|RFeu)7Gjp5;Lg+g(T&fsR99I3bs2Gka*|5BN*&6?JCQ=;j4YwVV* z*6lY%?f>BC1Eb?6wl4kO$p;5Ue=<5FQ~9l8S$AOclhI0iLW0szzwX)xj@GvI8NPq$ zGcS+!X&%H&8)E8(Bq>cJGwJX}F&&w@Y?EF9;08-ngwl2pj>PK>;vBk$JWEu

L3^m$l?4*86;|XnY%#dS%te*_T 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Ⓢ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 Q%S1+%K<`s2042x&0V*rSZ~y=R literal 39748 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 diff --git a/packages/webview_flutter/tizen/lib/x86_64/libftpw_webview_flutter.so b/packages/webview_flutter/tizen/lib/x86_64/libftpw_webview_flutter.so index 8f4fe2ec300cad17d2cb0b427335715f463b3001..d1c165a70862e8ef2c633f15dbe543c02c17d4f3 100755 GIT binary patch literal 50288 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 literal 41968 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 #include +#include #include #include #include @@ -86,6 +87,8 @@ bool GetValueFromEncodableMap(const flutter::EncodableValue* arguments, } // namespace +std::vector WebView::webviews_; + WebView::WebView(flutter::PluginRegistrar* registrar, int view_id, flutter::TextureRegistrar* texture_registrar, double width, double height, const flutter::EncodableValue& params, @@ -96,11 +99,6 @@ WebView::WebView(flutter::PluginRegistrar* registrar, int view_id, height_(height), window_(window) { backend_ = WebViewBackendFactory::Create(this); - if (!backend_) { - LOG_ERROR("Failed to create a webview backend."); - return; - } - tbm_pool_ = std::make_shared(width, height); texture_variant_ = @@ -128,14 +126,7 @@ WebView::WebView(flutter::PluginRegistrar* registrar, int view_id, GetPluginRegistrar()->messenger(), GetNavigationDelegateChannelName(), &flutter::StandardMethodCodec::GetInstance()); - auto cookie_channel = std::make_unique( - GetPluginRegistrar()->messenger(), - "plugins.flutter.io/tizen_cookie_manager", - &flutter::StandardMethodCodec::GetInstance()); - cookie_channel->SetMethodCallHandler( - [webview = this](const auto& call, auto result) { - webview->HandleCookieMethodCall(call, std::move(result)); - }); + webviews_.push_back(this); } WebView::~WebView() { Dispose(); } @@ -164,9 +155,8 @@ void WebView::Dispose() { } *is_alive_ = false; - if (!backend_) { - return; - } + webviews_.erase(std::remove(webviews_.begin(), webviews_.end(), this), + webviews_.end()); std::shared_ptr pool; { @@ -200,17 +190,9 @@ void WebView::InitializeEngine() { WebViewBackendFactory::InitializeEngine(); } void WebView::ShutdownEngine() { WebViewBackendFactory::ShutdownEngine(); } -void WebView::Offset(double left, double top) { - if (!backend_) { - return; - } - backend_->Offset(left, top); -} +void WebView::Offset(double left, double top) { backend_->Offset(left, top); } void WebView::Resize(double width, double height) { - if (!backend_) { - return; - } width_ = width; height_ = height; @@ -224,36 +206,20 @@ void WebView::Resize(double width, double height) { void WebView::Touch(int event_type, int button_type, double x, double y, double dx, double dy) { - if (!backend_) { - return; - } backend_->Touch(event_type, button_type, x, y, dx, dy); } bool WebView::SendKey(const char* key, const char* string, const char* compose, uint32_t modifiers, uint32_t scan_code, bool is_down) { - if (!backend_) { - return false; - } if (!IsFocused()) { return false; } return backend_->SendKey(key, string, compose, modifiers, scan_code, is_down); } -void WebView::Resume() { - if (!backend_) { - return; - } - backend_->Resume(); -} +void WebView::Resume() { backend_->Resume(); } -void WebView::Stop() { - if (!backend_) { - return; - } - backend_->Stop(); -} +void WebView::Stop() { backend_->Stop(); } void WebView::SetDirection(int direction) { // TODO: Implement if necessary. @@ -289,7 +255,8 @@ void WebView::HandleWebViewMethodCall(const FlMethodCall& method_call, } if (!webview_created_) { - if (!backend_->Create(width_, height_, window_, engine_policy_)) { + if (!WebViewBackendFactory::EnsureEngineInitialized(engine_policy_) || + !backend_->Create(width_, height_, window_, engine_policy_)) { result->Error("Invalid operation", "The webview instance initialize failed."); return; @@ -523,20 +490,44 @@ void WebView::HandleWebViewMethodCall(const FlMethodCall& method_call, void WebView::HandleCookieMethodCall(const FlMethodCall& method_call, std::unique_ptr result) { - if (!webview_created_) { - result->Error("Invalid operation", - "The webview instance has not been initialized."); + auto it = std::find_if(webviews_.rbegin(), webviews_.rend(), + [](WebView* view) { return view->webview_created_; }); + if (it == webviews_.rend()) { + result->Error("Invalid operation", "No webview instance is available."); return; } + WebView* webview = *it; const std::string& method_name = method_call.method_name(); if (method_name == "clearCookies") { - if (backend_->ClearCookies()) { + if (webview->backend_->ClearCookies()) { result->Success(flutter::EncodableValue(true)); } else { result->Error("Operation failed", "Failed to get cookie manager"); } + } else if (method_name == "getCookies") { + const auto* url = std::get_if(method_call.arguments()); + if (!url) { + result->Error("Invalid argument", "The argument must be a string."); + return; + } + result->Success( + flutter::EncodableValue(webview->backend_->GetCookies(*url))); + } else if (method_name == "setCookie") { + std::string url; + std::string cookie; + if (!GetValueFromEncodableMap(method_call.arguments(), "url", &url) || + !GetValueFromEncodableMap(method_call.arguments(), "cookie", &cookie)) { + result->Error("Invalid argument", "The URL and cookie must be strings."); + return; + } + if (webview->backend_->SetCookie(cookie, url)) { + result->Success(); + } else { + result->Error("Unsupported", + "Setting cookies is not supported by this webview engine."); + } } else { result->NotImplemented(); } diff --git a/packages/webview_flutter/tizen/src/webview.h b/packages/webview_flutter/tizen/src/webview.h index efc0bebc5..c5c23df13 100644 --- a/packages/webview_flutter/tizen/src/webview.h +++ b/packages/webview_flutter/tizen/src/webview.h @@ -16,6 +16,7 @@ #include #include #include +#include #include "webview_backend.h" @@ -60,11 +61,14 @@ class WebView : public PlatformView, public WebViewBackend::Delegate { // Must be called exactly once, after every WebView has been destroyed. static void ShutdownEngine(); + // NOTE: Cookies are shared by the web context, so calls go to the most + // recently created WebView that has been initialized. + static void HandleCookieMethodCall(const FlMethodCall& method_call, + std::unique_ptr result); + private: void HandleWebViewMethodCall(const FlMethodCall& method_call, std::unique_ptr result); - void HandleCookieMethodCall(const FlMethodCall& method_call, - std::unique_ptr result); template void SetBackgroundColor(const T& color); @@ -95,6 +99,9 @@ class WebView : public PlatformView, public WebViewBackend::Delegate { const std::string& default_text, const std::string& url) override; + // Live WebViews, in creation order. Only touched on the platform thread. + static std::vector webviews_; + std::unique_ptr backend_; bool webview_created_ = false; flutter::TextureRegistrar* texture_registrar_; diff --git a/packages/webview_flutter/tizen/src/webview_backend.cc b/packages/webview_flutter/tizen/src/webview_backend.cc index d5e878633..ff32128d9 100644 --- a/packages/webview_flutter/tizen/src/webview_backend.cc +++ b/packages/webview_flutter/tizen/src/webview_backend.cc @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -81,3 +82,13 @@ void WebViewBackend::FlushPendingTeardowns() { } } } + +std::string WebViewBackend::TakeEngineString(char* value) { + // The engine returns NULL when the URL has no cookies. + if (!value) { + return std::string(); + } + std::string result(value); + free(value); + return result; +} diff --git a/packages/webview_flutter/tizen/src/webview_backend.h b/packages/webview_flutter/tizen/src/webview_backend.h index 90360b86d..bf9a056d6 100644 --- a/packages/webview_flutter/tizen/src/webview_backend.h +++ b/packages/webview_flutter/tizen/src/webview_backend.h @@ -95,12 +95,17 @@ class WebViewBackend { virtual void JavaScriptPromptReply(const std::string& result) = 0; virtual void SetScrollbarVisible(bool visible) = 0; virtual bool ClearCookies() = 0; + virtual std::string GetCookies(const std::string& url) = 0; + virtual bool SetCookie(const std::string& cookie_line, + const std::string& url) = 0; protected: static std::function RegisterPendingTeardown( std::shared_ptr pool, std::function destroy); static void FlushPendingTeardowns(); + + static std::string TakeEngineString(char* value); }; #endif // FLUTTER_PLUGIN_WEBVIEW_BACKEND_H_ diff --git a/packages/webview_flutter/tizen/src/webview_backend_factory.cc b/packages/webview_flutter/tizen/src/webview_backend_factory.cc index ef65d5cca..6d5e23d84 100644 --- a/packages/webview_flutter/tizen/src/webview_backend_factory.cc +++ b/packages/webview_flutter/tizen/src/webview_backend_factory.cc @@ -49,7 +49,9 @@ BackendKind DetectBackend() { const BackendKind kSelectedBackend = DetectBackend(); -bool g_wv_engine_initialized = false; +enum class WvEngineState { kNotStarted, kInitialized, kFailed }; + +WvEngineState g_wv_engine_state = WvEngineState::kNotStarted; } // namespace @@ -57,34 +59,41 @@ std::unique_ptr WebViewBackendFactory::Create( WebViewBackend::Delegate* delegate) { BackendKind kind = kSelectedBackend; if (kind != BackendKind::kEwk) { - if (!g_wv_engine_initialized) { - LOG_ERROR("WV engine is not initialized; cannot create WebView."); - return nullptr; - } return std::make_unique(delegate); } return std::make_unique(delegate); } void WebViewBackendFactory::InitializeEngine() { - BackendKind kind = kSelectedBackend; - if (kind != BackendKind::kEwk) { - if (!WvWebViewBackend::GlobalInitialize(kind == - BackendKind::kWvStandalone)) { - LOG_ERROR("wv_init() failed; engine not started."); - return; - } - g_wv_engine_initialized = true; - return; + if (kSelectedBackend == BackendKind::kEwk) { + EwkWebViewBackend::GlobalInitialize(); + } +} + +bool WebViewBackendFactory::EnsureEngineInitialized(bool engine_policy) { + if (kSelectedBackend == BackendKind::kEwk || + g_wv_engine_state == WvEngineState::kInitialized) { + return true; + } + // Do not retry wv_init() on a possibly half-initialized engine. + if (g_wv_engine_state == WvEngineState::kFailed) { + return false; + } + if (!WvWebViewBackend::GlobalInitialize( + kSelectedBackend == BackendKind::kWvStandalone, engine_policy)) { + LOG_ERROR("wv_init() failed; engine not started."); + g_wv_engine_state = WvEngineState::kFailed; + return false; } - EwkWebViewBackend::GlobalInitialize(); + g_wv_engine_state = WvEngineState::kInitialized; + return true; } void WebViewBackendFactory::ShutdownEngine() { if (kSelectedBackend != BackendKind::kEwk) { - if (g_wv_engine_initialized) { + if (g_wv_engine_state == WvEngineState::kInitialized) { WvWebViewBackend::GlobalShutdown(); - g_wv_engine_initialized = false; + g_wv_engine_state = WvEngineState::kNotStarted; } return; } diff --git a/packages/webview_flutter/tizen/src/webview_backend_factory.h b/packages/webview_flutter/tizen/src/webview_backend_factory.h index 7d30759d2..47694e8c8 100644 --- a/packages/webview_flutter/tizen/src/webview_backend_factory.h +++ b/packages/webview_flutter/tizen/src/webview_backend_factory.h @@ -16,6 +16,8 @@ class WebViewBackendFactory { static void InitializeEngine(); + static bool EnsureEngineInitialized(bool engine_policy); + static void ShutdownEngine(); }; diff --git a/packages/webview_flutter/tizen/src/webview_flutter_tizen_plugin.cc b/packages/webview_flutter/tizen/src/webview_flutter_tizen_plugin.cc index 5c663991c..a929651b0 100644 --- a/packages/webview_flutter/tizen/src/webview_flutter_tizen_plugin.cc +++ b/packages/webview_flutter/tizen/src/webview_flutter_tizen_plugin.cc @@ -5,6 +5,7 @@ #include "webview_flutter_tizen_plugin.h" #include +#include #include #include @@ -15,19 +16,37 @@ namespace { constexpr char kViewType[] = "plugins.flutter.io/webview"; +constexpr char kCookieManagerChannelName[] = + "plugins.flutter.io/tizen_cookie_manager"; // Constructed/destroyed exactly once by flutter-tizen's engine start/stop, // not per-WebView. class WebviewFlutterTizenPlugin : public flutter::Plugin { public: static void RegisterWithRegistrar(flutter::PluginRegistrar* registrar) { - auto plugin = std::make_unique(); + auto plugin = std::make_unique(registrar); registrar->AddPlugin(std::move(plugin)); } - WebviewFlutterTizenPlugin() { WebView::InitializeEngine(); } + explicit WebviewFlutterTizenPlugin(flutter::PluginRegistrar* registrar) { + WebView::InitializeEngine(); - virtual ~WebviewFlutterTizenPlugin() { WebView::ShutdownEngine(); } + cookie_channel_ = std::make_unique( + registrar->messenger(), kCookieManagerChannelName, + &flutter::StandardMethodCodec::GetInstance()); + cookie_channel_->SetMethodCallHandler( + [](const FlMethodCall& call, std::unique_ptr result) { + WebView::HandleCookieMethodCall(call, std::move(result)); + }); + } + + virtual ~WebviewFlutterTizenPlugin() { + cookie_channel_->SetMethodCallHandler(nullptr); + WebView::ShutdownEngine(); + } + + private: + std::unique_ptr cookie_channel_; }; } // namespace diff --git a/packages/webview_flutter/tizen/src/wv_webview_backend.cc b/packages/webview_flutter/tizen/src/wv_webview_backend.cc index 3a2b86b61..85f49db89 100644 --- a/packages/webview_flutter/tizen/src/wv_webview_backend.cc +++ b/packages/webview_flutter/tizen/src/wv_webview_backend.cc @@ -77,7 +77,10 @@ std::map g_view_registry; WvWebViewBackend::WvWebViewBackend(Delegate* delegate) : delegate_(delegate) {} -bool WvWebViewBackend::GlobalInitialize(bool standalone) { +bool WvWebViewBackend::GlobalInitialize(bool standalone, bool engine_policy) { + if (engine_policy && ftpw_webview_flutter_wv_set_version_policy(1) <= 0) { + LOG_WARN("wv_set_version_policy() failed."); + } std::vector argv = { "--disable-pinch", "--js-flags=--expose-gc", @@ -508,6 +511,23 @@ bool WvWebViewBackend::ClearCookies() { return false; } +std::string WvWebViewBackend::GetCookies(const std::string& url) { + return TakeEngineString( + ftpw_webview_flutter_wv_view_get_cookies_for_url(view_, url.c_str())); +} + +bool WvWebViewBackend::SetCookie(const std::string& cookie_line, + const std::string& url) { + void* manager = ftpw_webview_flutter_wv_context_cookie_manager_get( + ftpw_webview_flutter_wv_view_context_get(view_)); + if (!manager) { + return false; + } + ftpw_webview_flutter_wv_cookie_manager_set_cookie_for_url( + manager, cookie_line.c_str(), url.c_str()); + return true; +} + void WvWebViewBackend::OnFrameRendered(void* obj, void* event_info, void* user_data) { if (event_info) { diff --git a/packages/webview_flutter/tizen/src/wv_webview_backend.h b/packages/webview_flutter/tizen/src/wv_webview_backend.h index d68fec686..6452cb4ba 100644 --- a/packages/webview_flutter/tizen/src/wv_webview_backend.h +++ b/packages/webview_flutter/tizen/src/wv_webview_backend.h @@ -69,8 +69,11 @@ class WvWebViewBackend : public WebViewBackend { void JavaScriptPromptReply(const std::string& result) override; void SetScrollbarVisible(bool visible) override; bool ClearCookies() override; + std::string GetCookies(const std::string& url) override; + bool SetCookie(const std::string& cookie_line, + const std::string& url) override; - static bool GlobalInitialize(bool standalone); + static bool GlobalInitialize(bool standalone, bool engine_policy); static void GlobalShutdown();