From 4eedc013d940b343cb8354265272651ac9fb6074 Mon Sep 17 00:00:00 2001 From: Carlos Alberto Lopez Perez Date: Tue, 4 Feb 2025 18:30:22 +0000 Subject: [PATCH] Add support for WPE WebKit product. * WPE WebKit is an upstream port of WebKit that shares much with WebKitGTK, but there are significant differences between the two ports. See: https://webkit.org/wpe * Automatic daily runs of WPE WebKit on the WPT CI have been proposed with Taskcluster at https://github.com/web-platform-tests/wpt/pull/50487 * This commit also deletes the webkitgtk repeated logos since there is no per-channel logo for webkitgtk (neither for wpewebkit) --- api/taskcluster/webhook_test.go | 1 + results-processor/wptreport.py | 3 +++ results-processor/wptreport_test.py | 24 ++++++++++++++++++ shared/browsers.go | 2 +- shared/browsers_test.go | 2 ++ shared/product_spec.go | 2 ++ webapp/components/product-info.js | 7 ++--- webapp/components/test/test-run.html | 12 +++++++++ .../components/test/wpt-amend-metadata.html | 1 + webapp/components/wpt-amend-metadata.js | 3 ++- webapp/static/webkitgtk-beta_64x64.png | Bin 5967 -> 0 bytes webapp/static/webkitgtk-dev_64x64.png | Bin 5967 -> 0 bytes webapp/static/webkitgtk-nightly_64x64.png | Bin 5967 -> 0 bytes webapp/static/wpewebkit_64x64.png | Bin 0 -> 2351 bytes 14 files changed, 52 insertions(+), 5 deletions(-) delete mode 100644 webapp/static/webkitgtk-beta_64x64.png delete mode 100644 webapp/static/webkitgtk-dev_64x64.png delete mode 100644 webapp/static/webkitgtk-nightly_64x64.png create mode 100644 webapp/static/wpewebkit_64x64.png diff --git a/api/taskcluster/webhook_test.go b/api/taskcluster/webhook_test.go index 2ba034e13dc..6325f8abb42 100644 --- a/api/taskcluster/webhook_test.go +++ b/api/taskcluster/webhook_test.go @@ -433,6 +433,7 @@ func TestTaskNameRegex(t *testing.T) { assert.Equal(t, []string{"firefox-nightly", "testharness"}, tc.TaskNameRegex.FindStringSubmatch("wpt-firefox-nightly-testharness-5")[1:]) assert.Equal(t, []string{"firefox-stable", "wdspec"}, tc.TaskNameRegex.FindStringSubmatch("wpt-firefox-stable-wdspec-1")[1:]) assert.Equal(t, []string{"webkitgtk_minibrowser-nightly", "testharness"}, tc.TaskNameRegex.FindStringSubmatch("wpt-webkitgtk_minibrowser-nightly-testharness-2")[1:]) + assert.Equal(t, []string{"wpewebkit_minibrowser-nightly", "testharness"}, tc.TaskNameRegex.FindStringSubmatch("wpt-wpewebkit_minibrowser-nightly-testharness-2")[1:]) assert.Nil(t, tc.TaskNameRegex.FindStringSubmatch("wpt-foo-bar--1")) assert.Nil(t, tc.TaskNameRegex.FindStringSubmatch("wpt-foo-bar-")) } diff --git a/results-processor/wptreport.py b/results-processor/wptreport.py index 00414e30f67..a326a06331c 100755 --- a/results-processor/wptreport.py +++ b/results-processor/wptreport.py @@ -671,6 +671,9 @@ def normalize_product(report: WPTReport) -> Set[str]: elif product == 'webkitgtk_minibrowser': report.run_info['product'] = 'webkitgtk' return {'webkitgtk', 'minibrowser'} + elif product == 'wpewebkit_minibrowser': + report.run_info['product'] = 'wpewebkit' + return {'wpewebkit', 'minibrowser'} else: return set() diff --git a/results-processor/wptreport_test.py b/results-processor/wptreport_test.py index 2f1cb1c809b..0d8685d0805 100644 --- a/results-processor/wptreport_test.py +++ b/results-processor/wptreport_test.py @@ -623,6 +623,14 @@ def test_prepare_labels_from_browser_channel(self): 'webkitgtk_minibrowser'} ) + # WPE WebKit Nightly + r._report['run_info']['product'] = 'wpewebkit_minibrowser' + self.assertSetEqual( + prepare_labels(r, '', 'blade-runner'), + {'blade-runner', 'nightly', 'experimental', + 'wpewebkit_minibrowser'} + ) + # Firefox Nightly r._report['run_info']['product'] = 'firefox' self.assertSetEqual( @@ -685,6 +693,22 @@ def test_normalize_product_webkitgtk_minibrowser(self): 'webkitgtk' ) + def test_normalize_product_wpewebkit_minibrowser(self): + r = WPTReport() + r._report = { + 'run_info': { + 'product': 'wpewebkit_minibrowser', + } + } + self.assertSetEqual( + normalize_product(r), + {'wpewebkit', 'minibrowser'} + ) + self.assertEqual( + r.run_info['product'], + 'wpewebkit' + ) + def test_normalize_product_noop(self): r = WPTReport() r._report = { diff --git a/shared/browsers.go b/shared/browsers.go index 86b3c903082..25e148d2895 100644 --- a/shared/browsers.go +++ b/shared/browsers.go @@ -14,7 +14,7 @@ var defaultBrowsers = []string{ // An extra list of known browsers. var extraBrowsers = []string{ - "android_webview", "chrome_android", "chrome_ios", "chromium", "deno", "epiphany", "firefox_android", "flow", "ladybird", "node.js", "servo", "uc", "wktr", "webkitgtk", + "android_webview", "chrome_android", "chrome_ios", "chromium", "deno", "epiphany", "firefox_android", "flow", "ladybird", "node.js", "servo", "uc", "wktr", "webkitgtk", "wpewebkit", } var allBrowsers mapset.Set diff --git a/shared/browsers_test.go b/shared/browsers_test.go index cd45d137415..f5945dda31d 100644 --- a/shared/browsers_test.go +++ b/shared/browsers_test.go @@ -32,6 +32,7 @@ func TestGetDefaultBrowserNames(t *testing.T) { assert.NotEqual(t, "servo", n) assert.NotEqual(t, "wktr", n) assert.NotEqual(t, "webkitgtk", n) + assert.NotEqual(t, "wpewebkit", n) assert.NotEqual(t, "uc", n) } } @@ -54,6 +55,7 @@ func TestIsBrowserName(t *testing.T) { assert.True(t, IsBrowserName("servo")) assert.True(t, IsBrowserName("wktr")) assert.True(t, IsBrowserName("webkitgtk")) + assert.True(t, IsBrowserName("wpewebkit")) assert.True(t, IsBrowserName("uc")) assert.False(t, IsBrowserName("not-a-browser")) } diff --git a/shared/product_spec.go b/shared/product_spec.go index ee8abe3e2dc..306f587ae97 100644 --- a/shared/product_spec.go +++ b/shared/product_spec.go @@ -102,6 +102,8 @@ func (p ProductSpec) DisplayName() string { return "macOS WebKit" case "webkitgtk": return "WebKitGTK" + case "wpewebkit": + return "WPE WebKit" default: return p.BrowserName } diff --git a/webapp/components/product-info.js b/webapp/components/product-info.js index bd2db51f4b5..2de058a1be0 100644 --- a/webapp/components/product-info.js +++ b/webapp/components/product-info.js @@ -22,6 +22,7 @@ const DisplayNames = (() => { m.set('uc', 'UC Browser'); m.set('wktr', 'macOS WebKit'); m.set('webkitgtk', 'WebKitGTK'); + m.set('wpewebkit', 'WPE WebKit'); // Platforms m.set('android', 'Android'); m.set('linux', 'Linux'); @@ -50,7 +51,7 @@ const versionPatterns = Object.freeze({ // The set of all browsers known to the wpt.fyi UI. const AllBrowserNames = Object.freeze(['android_webview', 'chrome_android', 'chrome_ios', 'chrome', - 'chromium', 'deno', 'edge', 'firefox_android', 'firefox', 'flow', 'ladybird', 'node.js', 'safari', 'servo', 'webkitgtk', 'wktr']); + 'chromium', 'deno', 'edge', 'firefox_android', 'firefox', 'flow', 'ladybird', 'node.js', 'safari', 'servo', 'webkitgtk', 'wpewebkit', 'wktr']); // The list of default browsers used in cases where the user has not otherwise // chosen a set of browsers (e.g. which browsers to show runs for). Stored as @@ -183,7 +184,7 @@ const ProductInfo = (superClass) => class extends superClass { // although it would be better to have some variant of the Firefox logo. return '/static/geckoview_64x64.png'; - } else if (name !== 'chromium' && name !== 'deno' && name !== 'flow' && name !== 'ladybird' && name !== 'node.js' && name !== 'servo' && name !== 'wktr') { // Products without per-channel logos. + } else if (name !== 'chromium' && name !== 'deno' && name !== 'flow' && name !== 'ladybird' && name !== 'node.js' && name !== 'servo' && name !== 'wktr' && name !== 'webkitgtk' && name !== 'wpewebkit') { // Products without per-channel logos. let channel; const candidates = ['beta', 'dev', 'canary', 'nightly', 'preview']; for (const label of candidates) { @@ -207,7 +208,7 @@ const ProductInfo = (superClass) => class extends superClass { } minorIsSignificant(browserName) { - return browserName === 'deno' || browserName === 'flow' || browserName === 'safari' || browserName === 'webkitgtk'; + return browserName === 'deno' || browserName === 'flow' || browserName === 'safari' || browserName === 'webkitgtk' || browserName === 'wpewebkit'; } /** diff --git a/webapp/components/test/test-run.html b/webapp/components/test/test-run.html index ff9ec5d1cfa..17a9370f335 100644 --- a/webapp/components/test/test-run.html +++ b/webapp/components/test/test-run.html @@ -122,6 +122,16 @@ assert.equal(trf.shortVersion('webkitgtk', '56.0a'), '56.0'); }); + test('valid, major and minor', () => { + assert.equal(trf.shortVersion('wpewebkit', '1'), '1'); + assert.equal(trf.shortVersion('wpewebkit', '2.3'), '2.3'); + assert.equal(trf.shortVersion('wpewebkit', '3.4.5'), '3.4'); + assert.equal(trf.shortVersion('wpewebkit', '4.5.6.7'), '4.5'); + assert.equal(trf.shortVersion('wpewebkit', '765.687'), '765.687'); + assert.equal(trf.shortVersion('wpewebkit', ' 11.0 '), '11.0'); + assert.equal(trf.shortVersion('wpewebkit', '56.0a'), '56.0'); + }); + test('invalid', () => { assert.equal(trf.shortVersion('chrome', 'five'), 'five'); assert.equal(trf.shortVersion('chrome', ''), ''); @@ -129,6 +139,8 @@ assert.equal(trf.shortVersion('safari', ''), ''); assert.equal(trf.shortVersion('webkitgtk', 'five'), 'five'); assert.equal(trf.shortVersion('webkitgtk', ''), ''); + assert.equal(trf.shortVersion('wpewebkit', 'five'), 'five'); + assert.equal(trf.shortVersion('wpewebkit', ''), ''); }); }); diff --git a/webapp/components/test/wpt-amend-metadata.html b/webapp/components/test/wpt-amend-metadata.html index 845761a33e2..bbab82f59ad 100644 --- a/webapp/components/test/wpt-amend-metadata.html +++ b/webapp/components/test/wpt-amend-metadata.html @@ -164,6 +164,7 @@ expect(appFixture.getSearchURL('/a/b.html', 'safari')).to.equal('https://bugs.webkit.org/buglist.cgi?quicksearch="/a/b"'); expect(appFixture.getSearchURL('/a/b.html', 'wktr')).to.equal('https://bugs.webkit.org/buglist.cgi?quicksearch="/a/b"'); expect(appFixture.getSearchURL('/a/b.html', 'webkitgtk')).to.equal('https://bugs.webkit.org/buglist.cgi?quicksearch="/a/b"'); + expect(appFixture.getSearchURL('/a/b.html', 'wpewebkit')).to.equal('https://bugs.webkit.org/buglist.cgi?quicksearch="/a/b"'); expect(appFixture.getSearchURL('/a/b.html', 'servo')).to.equal('https://github.com/servo/servo/issues?q="/a/b"'); expect(appFixture.getSearchURL('/a/b.html', 'ladybird')).to.equal('https://github.com/LadybirdBrowser/ladybird/issues?q="/a/b"'); }); diff --git a/webapp/components/wpt-amend-metadata.js b/webapp/components/wpt-amend-metadata.js index a2f23fcfb1c..686d35569f1 100644 --- a/webapp/components/wpt-amend-metadata.js +++ b/webapp/components/wpt-amend-metadata.js @@ -320,6 +320,7 @@ class AmendMetadata extends LoadingState(PathInfo(ProductInfo(PolymerElement))) 'servo', 'wktr', 'webkitgtk', + 'wpewebkit', ].includes(product); } @@ -351,7 +352,7 @@ class AmendMetadata extends LoadingState(PathInfo(ProductInfo(PolymerElement))) return `https://github.com/nodejs/node/issues?q="${testName}"`; } - if (product === 'safari' || product === 'wktr' || product === 'webkitgtk') { + if (product === 'safari' || product === 'wktr' || product === 'webkitgtk' || product === 'wpewebkit') { return `https://bugs.webkit.org/buglist.cgi?quicksearch="${testName}"`; } diff --git a/webapp/static/webkitgtk-beta_64x64.png b/webapp/static/webkitgtk-beta_64x64.png deleted file mode 100644 index 78fa8e6a4e3f8003dc012516c61a4a39530bfc37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5967 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 diff --git a/webapp/static/webkitgtk-dev_64x64.png b/webapp/static/webkitgtk-dev_64x64.png deleted file mode 100644 index 78fa8e6a4e3f8003dc012516c61a4a39530bfc37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5967 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 diff --git a/webapp/static/webkitgtk-nightly_64x64.png b/webapp/static/webkitgtk-nightly_64x64.png deleted file mode 100644 index 78fa8e6a4e3f8003dc012516c61a4a39530bfc37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5967 zcmV-V7qIAwP)u`;Dh!-`=I@QZsh;skM7+0xDty^1XWdbGe!zz z89Jpr=5q1LefxeC{bSzC9|Hi{y!oM3k|ci!Ah*eiw1zXjL-TQA%Jvp&W;lz z_DT}pfAHW_Gw<8Yy^|3{a4xtY@*9HDX95A~<=0+&Lcf{!dD8)G-u%c0 zMZvcS5g)y6#|HM7U%FQ*Eh&I*a;P>NOw)iW6Sy4q%y*)(I4+NeFr_JQ+f{fR3KW?j zt{Ld+9>Jk~?fk@nQ$&DFa>l+Bk2{_|bLP9Tn{mH44M1z_SISho{5`?MXFl>L+xa68 z-!IFugh(`w;psS5)t5n0Z9_X5hS9c!~`**(s zA;=zT($BTE{b=k)?|osHTtnNs^-*Va^`?Ih2K|qJ_xlg2pa1-Qa=>eYDofDfF~~dt z&0we~_8|}~!*nQ&vcmZQdV2fNI~GMrMb+F%0jLUr&!vJ3fuYG5bkjtsk6^>vMzVC{ zO44)Ta*Y;G{6%$jYy05f@%|gpaKjO>efvWJ!1mh8RrMRc{V!jX1AZ6!E)Qe+$~5-2 zUqEeTDR#6j$HdeX7`6hqJO%K}36vH20RZuM0*8+tL-(Z-l+~?3c~vdA5HL&*lQB@r zVKNR%85}kl+Zw&_x}7jh6O>YLE-)1eg%tn*Aq0c~R7Jwl5*3vt0US7d9LLZ1V|hb0 zx-RzNV8;|b|H*A+>GERf!2XVpRaI>Y4GkSX_Pzqxy!op>MN#&A>=U;x|Hfmx6hqo9h7=n|#E>yMGK!7c??6F80fJ$ch38KnUPW zR}XC75;&Z02muHHiUe$L_Mtpj07@x-{_-K*ciVb6Yzm5t3bCZb3A-wzZb=mynuBEj zJLm7ItZcnBG}LzbeF3m**Dg60_q}@Cj+HnIX;G>;!?Q1en=7lkqB%KH@f>SW98b7009UH1d?KX{z5oiZU_K&1<(@_P^fT; zC^|3npr*PKhfj4wwtG-l9)KdtkO+ZknlMchwKbI}Ds_^hM|wV5Rkiu>(9rR|n-0M5 zzvJ<$>XHYZ{I`b{S(ZRRkT485eL={wj1sSeVy_K^5R{b^p}p-G%4-@x2mv7kl0*;) z7K4zKaFM)j8baFh5FDyD4ny{0U^E0>sMvq-2+C@jaOZ|vc-<~=&QrrgWb(q&rdsGc zj;@Z8`|E1A{o?ZFqgO4fuNlC$Z4cij%jDzX=v+%8Cx z1kQPu8HNGQIo7UfA}3CD*rul9n}!CD{pU>q(9-g_&E?i#|NDP$BPobv1IcvHhgk%J#a{w2~#Ai@~iBJSWi=eh5h^E>K zxLr<^7Z*ZN=9Uja2yo897|ZmUra@IztX@+mz5ZI;lB%jreS?E-XWlb_hK7}YRasU1 zsc$^COG^1bl9k2HdEs zD4qWuOS6i%LI@TWLUB@Z=G5?x%8JcD9v(iv;QB$jn)ubLA9E{;{LOEF=Zmr=Nyznn zZfk6)$Fjy6T)fZ))n)@#yl{Jc8E>bJ5Ry}ch}6#l8dt!Xx#-_X=apRJoFf{I;=Vh# z!Q+8nlK8`mUFWI*JRbea4UHAv#=7!(;&Y>+udg3J`>)^P*!cl$zvDgtKw(kPDlucJ zD`b9=J{Pc4Y^nF4rm6yylT-M?PoBlIFTIIaERNUSJ_yc5UI5nniN#`26d9lV^cERJ z`s2U|86(dZNE1)WeV86#ke@8Vc+S?INf&zFYP^xctXn(Z*8$y40f9hx9n&lL?U0f zApnet&wTpNZfA$8ouRR{)rc=>P-R#yjMXcS#z9JMtySY2gD!0&~wClkFjQe&|g8XIZ> zq6yQKZU^xEH3QhX^~;rFINESINY2qC~Yz!?MO0*s}M3)mHc#$pw+wD72uEkiL~3itM3#--tLY+Tix z0r0EWkD|K750_2C9XkSOYO0XVo(^rzcg@9ez_LwSmecef`{9dkqjtkRsBPH<#yEtl z7)A9PKp6*R942Kj8AD8GNEi&1^UN4$JoTB>`kpe81jjg7%KTCSj(o+^0xew$mX{Xe zmq*4iI5Lp|aQC*AI6S1{$gmx!Ixiun8GsP=z~l4uE(V}+`HE^804ArdptyQz@@Dy* zsScM#Jcnr}k0Tm`W^foLgK09DG?p;t?imPAEdbcIZ=b2kz1AWCNRc4P;B~oNP-FtHQ$cHmKzKHk+Oc8T z5kMIXlff`4!U+>`Jtf}c$(|)YLuoP+%v4lxW&mAK$1|n1}uK@rj@bdx5*&?E>WB|bSE7+f|f?_9o6vx-l{SY9mf!v0I3H2J$kLc>p<{~wrY zG33;4v}v+=8FoPcM3U@W5cG~k@$23D;B+`(x2b5TuS13(KH=IQgBf#!9PEH00mMQcWr4wRnUzK7d1#khFy`+;MZ|+l7iVhkR$?$ z5D;Ri&;+2HB2(;0NKTC$0)lf4>oV3{gLolCUI2_S6b1ZPUYNkZ$RrMQOu$pQ8ZnJR zkpa_8FRXYZ_nHevfM6mNjV6Rd2q@!l6qJDmmSJCy0adjjD2L#8%GlB5#G0lm+`GCM z&Hgynl~T-%4P+v~Fe!9O=c2-3i0R23F&i~76E!eAD{%5$_f-KY8S{3C7K{KwFgi6lMY#~FO_5+y1^`Gv#!KzfC>GNw^{EI3 z)&T%K9yeAtxd8y~chA8v%TxP)=~7r^Ha&Q%5K8xyaU2=o@Hhw1+^{4|aC#GjF_r~j zF&LfQeTYjz*f@vFt{@goK1Ji)HhRqf0CHile~2(H;Ic`W(rIQ9qsTT)$@Qpqy7GSW zo}HV~)jx)=2@0-yfy`oOuI}fYCo4jh?j`*G^b9_(%6Q?W*HKbZj1zscs4BE!byF4Y zx^?4%;&VZ~)7Al-yAhxU+zu6?kr{xH=_7}~KYh&rBnchSa7+nD67aiJjLjr6>(}(k zt+^~e0I$b`)>Vy29BD^a%wgFAOXdKciUOV~iPMFVil^V`2MMf2gv#(#GE7m9L&Ly_ zu0cGd6z98o&=+>Y?qz^r@HkZrOosu%yYlK>2!N_a+5lqq_Ku*)YfsJNbJJc!i31fS zix)4qZrOl!#Tx8FOXh>r6q%e7*}R`k${;(v5JXB&k*V6D+^1%?ztcOwl+w&`T6}0W zjA#CE9(G?jz!?hMb|@0T)bNx6khiZ3z`lLYXp$@)@9gLoMLs*Y$e#1<U|!T{N8^jN;g-&MXM|K)mtJaX5lY0Zt(pLvg^3 zL_C2=C~6}F`>qQB0C2`%K6&5-B;LIv^mIR$w1z-iSdF?WM@t)-<#b`#jL22fC zb0GMfrOIZVGK_@SJmFUHlu~q!!~t*!&HzqP8T4UzUJRg~jOWobW zSW@E2)bs{rINLJ}!!W=YyJirQM4&~kq=o~{E}SfItww2bmWad?^CBP@20#GD07en; zI^cFF7`!lS3V|0Edb4Cv0EZ4eIYJ28duUG^EAczvbtoBcog9%cIyM1a*P-h=Ow$Bo zY|*W=SS*gVuF~vTKu;2rd ztL_R5F22)wqC*}Yxq=ln1sPApbc&Y`U(9Ss0>XI8P1(>$R;>;7|ZC3ZK)4(n1d|p6h2q;Kb3RPv#B(YXWfe=o4=NIQjPP z5Acd27lK}U#%t#%RQz)HK^TUyAPB1^m;%Z$Cp0$?nT>&Foo6P$Nsc^>}Pz5>Gw%DyDfUDvNyxc1(>=3nlH{6C(Xh1KIWO!rUB^#2O{Dq5scm{98h z*_PS{6G_p0zVOV?G`ZFnoFbeMSYIuJbDlK?GR6=IO=HGzVpB^Ev}hcs4|Q-&3xDs- znHS%*=*SDU=U=)IxpeBV!%%ITg$clo_?p_@3iek(9<#4Jp z+V-BIS|Zlo-v0bQ0gPkrX#`K%bpfzj%rQOPGgDAd9UJSPyv0{uf^{pZFg6oMIHp53 z!)UDV%>yttK85o$UI-#*LO;DNPSYT`b%T_FbDEsbxe1Ymz)c8hqQ1nQmHf_j^q{e& z6$KtUj_*Cq!ZYE?uC7-f)%BT}MReNcMZsbKNJ_ZP(%U8`I(rKWYVAYaBdh$S#bkX; zHD+TvG$vt1nKEzOzxK{?Op)@`Hn?R4m>vQtk8{qzQ$cAxscWEl@MFs$89D*_MRM~13n+1T;Oe9c~Vp*AtcMhMx z!00qQ!8*8IejML>nuV@}!hL=FzBM(~J(Th^TcE#Y07wZ|QUJ30iHVL*mn*1E4bH9! zg`(p2t#u?A@F9^%K-YB~Zaa-1zj+C^;^yR1m?vv=krJ4+WP+OmK=T7g!Qs?I`?)@p zR=1#`X&J&Z8rt@r;gQ+!_=T?D|KrR|{|EpxC3K%9V?kgrL1NZd>>6 zyFE%-rB|x2twt=N;g@@RKnfaCuYjbz%#z3Hp3~&Q#R5g-07yfSI73yb53Q@0p}^xn z$H^XX;Zz?9hsTeeKmVJ5O(dpg02mfCExltxl~19DkZnmIpc`TMld-#jmhCD zJ~cWcaZdHw*`cEY14rMA$0sKN=qaK3ERmmuTxS~6|y3MQ4VSvFf;?vP?W{PG08MJ5rS#)MCjto zbYJ_}*r_w7smGBV$9f)H490?`@b$hezL4njaeAt>V{YnH0VqyqfiDc+OlVqUJQ5imn4Ihx1h|2@EN)F^X%OjN%L5~U`R``D zCjh|Qkg!&X)?&#jJZ;ulL{42J{eZ~YtR-u@a!b$O>1oWG;q!seaTTvy+k5$s5gGG6 zpDR9h3bg_t76axyWd)F~-l)Y)_CX>@2H xWqN06W-eoIZ6H%tM<8@>AW%+6AY*TCc4cyOWpXSj<0Ak7002ovPDHLkV1h^G{tN&B diff --git a/webapp/static/wpewebkit_64x64.png b/webapp/static/wpewebkit_64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..84b4514ab7ccd6f0943b18eaa738d0b143168d8a GIT binary patch literal 2351 zcmV+~3DEY5P)VGd000McNliru=>h~21Qcm0Lb?C|02y>e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00@^!L_t(|+U=Tuj9gU}$3N%2 z-EO~?qN?e4tUE#Wr}phhE-5X5pB%;IyNw?Y}Xi3u`$`2_e zPz5cNmUaq86bfQ3YA{LwK~bRXyxpC7yWM?LXm@7r@sCbRTe^1V$L<2oH@V4Va^E}W zeDAsEo^#%XDypcWiYlt8;{O#gQG#99ood_mU^bhzRaJU>d$SXvhdlv?$HL+84Z!ih zUx4F8q&plA4}?OY?U_vGqf3D6x}Q|l1tPLRRUb(ojP^P z(9n?i$ZUaFELI~Tjmc!vZ)B*i^WbCk=ejK$z<}C5(sPrz7DkH za=FEQeSH%WB#Tu#6pO`<1!!+?uWf5U!7xBL9Bvem8^Yo6CmI?WUJHWYoevBFp-|`?;Nz;g-1EE_ z$HKcZnan$(P-v5ggn+K5rlw7UgM;}AarKs#7I9s-H5QAVQgD4c9*hK7bZ;8Inc8488ouCK4} z-??+=*b)#5h0Ya`24l=p&-4B>kwG^Ig5e+to(qS=X%V@^w(UOzL6EEXG3dJPDXLoU zdEN`%10gJSf%=HNf$(~&GqSDBlc*l}yofxref##q2FjYl?6nr) zN}x$Z?kp)@JmL#*vI_H2Jr5*?G6gBnp9e%h$RYGQ8~hi6pIKJT#@?BY!zGB!0#Q}H zBNmH21U%z;o+-%#T-W^)uv=As?|EL)iAdyE{uE2;Mz|ViI6$K8Hvp^y{>vgf4{~Md z{N{g_a4btcpKk?btLg(iJw1b?A|M`**Q)AgfnCXDa&t#Vhiu)twWQ$I{NO;1ZJVDW zTvjlT5ee9TSO@%m4dJ|0XXMQiPYdxpPhHoo1-gKZ$z-y3|2fuvlaDjT{17-(RsRK0 zs__7}=ouL1k;fumaP^UfImA%FZ~}%KOVwd-?V+l9Reck^WW?kYQTO{6U+;h$}6 z^EB`i;OM>7ADq560M~%N;3WL(S`!1IQiY~3k0i-6k33rsY5ZOz8PWLND7TnlYjw$n zulL1C_$MmzOJD^9{5ee}xqoz{-=-Ef16zQvvd7C0eGIlF{CNuZkMOP>kN}osch~%N$3=}L zoea)h{;>#WV{sP330Q=&sKp|WunUWASZqf4jcu7NJ#(CFiS8a!WDal>aMTFX{-H1< z-5D7e4FP*G1l%XEystB|wVXW}SQfMUwX2H<*yi=2eNOwg5mozaqd*#2d$d0?PYMUk_?KMA3GPatPSi@8b=LXuFw!oG1P=i#1zn0*J$78&@RKQ}TA;5_WNB3uJp3p7>0>-vF} zz|z#*NUH3vaOB~EI!n#0LVi8H0t)7U$AKRKCj&PE$5kZm2#*6dr@j_>sbX#Mef#ra zKZFsJR>zic7lx?{`Jynsbfa`#^F)-W!e+CxU@2>y#Tl1$>r0}ZvYB?+Y zV^9{br|Wt|gPXLc>oZ}u#hrWnNn|-!;H|!EBY&rgDypcWiYlt8qKfgwe*q?! V$|3XFr6&LY002ovPDHLkV1l8XZQ%d_ literal 0 HcmV?d00001