From b2ddee04c1428e239cc8d6f0520ea32f009c4a8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=BDiga=20Kokelj?= Date: Mon, 11 Dec 2023 15:14:56 +0100 Subject: [PATCH] Deploy new ten gateway frontend (#1686) --- .../manual-deploy-obscuro-gateway.yml | 2 +- .gitignore | 3 + tools/walletextension/Dockerfile | 22 +- tools/walletextension/README.md | 5 +- tools/walletextension/api/server.go | 14 +- .../api/static/favicon-32x32.png | 0 .../api/{staticOG => static}/favicon.ico | Bin tools/walletextension/api/static/index.html | 21 - .../walletextension/api/static/javascript.js | 77 --- tools/walletextension/api/static/style.css | 34 - .../api/staticOG/MetaMaskIcon.png | Bin 133166 -> 0 bytes .../api/staticOG/Metamask Network Icon.png | Bin 954 -> 0 bytes tools/walletextension/api/staticOG/check.svg | 1 - tools/walletextension/api/staticOG/copy.svg | 3 - .../api/staticOG/favicon-32x32.png | Bin 572 -> 0 bytes tools/walletextension/api/staticOG/index.html | 132 ---- .../api/staticOG/javascript.js | 539 ---------------- tools/walletextension/api/staticOG/style.css | 605 ------------------ tools/walletextension/api/staticOG/ten.svg | 6 - tools/walletextension/frontend/next.config.js | 2 + .../frontend/src/api/gateway.ts | 11 +- .../frontend/src/lib/constants.ts | 3 +- .../walletextension/frontend/src/lib/utils.ts | 16 - .../src/services/useGatewayService.ts | 6 +- tools/walletextension/main/main.go | 2 +- 25 files changed, 46 insertions(+), 1458 deletions(-) delete mode 100644 tools/walletextension/api/static/favicon-32x32.png rename tools/walletextension/api/{staticOG => static}/favicon.ico (100%) delete mode 100644 tools/walletextension/api/static/index.html delete mode 100644 tools/walletextension/api/static/javascript.js delete mode 100644 tools/walletextension/api/static/style.css delete mode 100644 tools/walletextension/api/staticOG/MetaMaskIcon.png delete mode 100644 tools/walletextension/api/staticOG/Metamask Network Icon.png delete mode 100644 tools/walletextension/api/staticOG/check.svg delete mode 100644 tools/walletextension/api/staticOG/copy.svg delete mode 100644 tools/walletextension/api/staticOG/favicon-32x32.png delete mode 100644 tools/walletextension/api/staticOG/index.html delete mode 100644 tools/walletextension/api/staticOG/javascript.js delete mode 100644 tools/walletextension/api/staticOG/style.css delete mode 100644 tools/walletextension/api/staticOG/ten.svg diff --git a/.github/workflows/manual-deploy-obscuro-gateway.yml b/.github/workflows/manual-deploy-obscuro-gateway.yml index e1f08b7131..23ae713c23 100644 --- a/.github/workflows/manual-deploy-obscuro-gateway.yml +++ b/.github/workflows/manual-deploy-obscuro-gateway.yml @@ -52,7 +52,7 @@ jobs: - name: Build and Push Docker Image run: | - DOCKER_BUILDKIT=1 docker build -t ${{ vars.DOCKER_BUILD_TAG_GATEWAY }} -f ./tools/walletextension/Dockerfile . + DOCKER_BUILDKIT=1 docker build --build-arg TESTNET_TYPE=${{ github.event.inputs.testnet_type }} -t ${{ vars.DOCKER_BUILD_TAG_GATEWAY }} -f ./tools/walletextension/Dockerfile . docker push ${{ vars.DOCKER_BUILD_TAG_GATEWAY }} # This will fail some deletions due to resource dependencies ( ie. you must first delete the vm before deleting the disk) diff --git a/.gitignore b/.gitignore index 9ed5a8b472..e57a7bf2d8 100644 --- a/.gitignore +++ b/.gitignore @@ -56,6 +56,9 @@ docs/_site # db files tools/walletextension/main/.obscuro +# static files generated by npm run build +tools/walletextension/api/static + # contracts # Logs diff --git a/tools/walletextension/Dockerfile b/tools/walletextension/Dockerfile index f917c7804b..bbc53fcbc1 100644 --- a/tools/walletextension/Dockerfile +++ b/tools/walletextension/Dockerfile @@ -9,6 +9,7 @@ FROM golang:1.20-alpine3.18 as system # set the base libs to build / run RUN apk add build-base bash git ENV CGO_ENABLED=1 +ARG TESTNET_TYPE # Standard build stage that initializes the go dependencies FROM system as get-dependencies @@ -16,6 +17,10 @@ FROM system as get-dependencies # setup container data structure RUN mkdir -p /home/obscuro/go-obscuro + +# Install Node.js and npm (needed for frontend) +RUN apk add --update nodejs npm + # Ensures container layer caching when dependencies are not changed WORKDIR /home/obscuro/go-obscuro COPY go.mod . @@ -27,7 +32,22 @@ FROM get-dependencies as build-wallet # make sure the geth network code is available COPY . /home/obscuro/go-obscuro -# build the contract deployer exec +# Create .env file for frontend +WORKDIR /home/obscuro/go-obscuro/tools/walletextension/frontend +RUN if [ "$TESTNET_TYPE" = "dev-testnet" ]; then \ + echo "NEXT_PUBLIC_API_GATEWAY_URL=https://dev-testnet.obscu.ro" > .env; \ + elif [ "$TESTNET_TYPE" = "uat-testnet" ]; then \ + echo "NEXT_PUBLIC_API_GATEWAY_URL=https://uat-testnet.obscu.ro" > .env; \ + elif [ "$TESTNET_TYPE" = "sepolia-testnet" ]; then \ + echo "NEXT_PUBLIC_API_GATEWAY_URL=https://testnet.obscu.ro" > .env; \ + else \ + echo "NEXT_PUBLIC_API_GATEWAY_URL=http://127.0.0.1:3000" > .env; \ + fi +# Run npm build for frontend +RUN npm install +RUN npm run build + +# build the gateway executable WORKDIR /home/obscuro/go-obscuro/tools/walletextension/main RUN --mount=type=cache,target=/root/.cache/go-build \ go build -o ../bin/wallet_extension_linux diff --git a/tools/walletextension/README.md b/tools/walletextension/README.md index c7ef89fe32..d11b4da5cc 100644 --- a/tools/walletextension/README.md +++ b/tools/walletextension/README.md @@ -1,9 +1,12 @@ -# 👛 The Ten wallet extension +# The Ten gateway See the documentation [here](https://docs.obscu.ro/wallet-extension/wallet-extension/). ## Developer notes +Running gateway frontend locally requires building static files first. +To do that, run `npm run build` in `tools/walletextension/frontend` folder. + The precompiled binaries for macOS ARM64, macOS AMD64, Windows AMD64 and Linux AMD64 can be built by running the following commands from the `tools/walletextension/main` folder: diff --git a/tools/walletextension/api/server.go b/tools/walletextension/api/server.go index b725975ef4..dc6b512e25 100644 --- a/tools/walletextension/api/server.go +++ b/tools/walletextension/api/server.go @@ -11,13 +11,11 @@ import ( "github.com/ten-protocol/go-ten/tools/walletextension/common" ) -//go:embed static -//go:embed staticOG +//go:embed all:static var staticFiles embed.FS const ( - staticDir = "static" - staticDirOG = "staticOG" + staticDir = "static" ) // Server is a wrapper for the http server @@ -67,13 +65,7 @@ func createHTTPServer(address string, routes []Route) *http.Server { if err != nil { panic(fmt.Sprintf("could not serve static files. Cause: %s", err)) } - serveMux.Handle(common.PathViewingKeys, http.StripPrefix(common.PathViewingKeys, http.FileServer(http.FS(noPrefixStaticFiles)))) - - noPrefixStaticFilesOG, err := fs.Sub(staticFiles, staticDirOG) - if err != nil { - panic(fmt.Errorf("could not serve static files. Cause: %w", err).Error()) - } - serveMux.Handle(common.PathObscuroGateway, http.StripPrefix(common.PathObscuroGateway, http.FileServer(http.FS(noPrefixStaticFilesOG)))) + serveMux.Handle(common.PathObscuroGateway, http.StripPrefix(common.PathObscuroGateway, http.FileServer(http.FS(noPrefixStaticFiles)))) // Creates the actual http server with a ReadHeaderTimeout to avoid Potential Slowloris Attack server := &http.Server{Addr: address, Handler: serveMux, ReadHeaderTimeout: common.ReaderHeadTimeout} diff --git a/tools/walletextension/api/static/favicon-32x32.png b/tools/walletextension/api/static/favicon-32x32.png deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tools/walletextension/api/staticOG/favicon.ico b/tools/walletextension/api/static/favicon.ico similarity index 100% rename from tools/walletextension/api/staticOG/favicon.ico rename to tools/walletextension/api/static/favicon.ico diff --git a/tools/walletextension/api/static/index.html b/tools/walletextension/api/static/index.html deleted file mode 100644 index 8bdd8fb131..0000000000 --- a/tools/walletextension/api/static/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - Obscuro | Generate viewing key - - - - - - - - -

â— . Hello frens. Welcome to the Obscuro wallet extension! â— .

- - - -

- - - \ No newline at end of file diff --git a/tools/walletextension/api/static/javascript.js b/tools/walletextension/api/static/javascript.js deleted file mode 100644 index b57d372df1..0000000000 --- a/tools/walletextension/api/static/javascript.js +++ /dev/null @@ -1,77 +0,0 @@ -const eventClick = "click"; -const eventDomLoaded = "DOMContentLoaded"; -const idGenerateViewingKey = "generateViewingKey"; -const idStatus = "status"; -const pathGenerateViewingKey = "/generateviewingkey/"; -const pathSubmitViewingKey = "/submitviewingkey/"; -const methodPost = "post"; -const jsonHeaders = { - "Accept": "application/json", - "Content-Type": "application/json" -}; -const metamaskRequestAccounts = "eth_requestAccounts"; -const metamaskPersonalSign = "personal_sign"; -const personalSignPrefix = "vk"; - -const initialize = () => { - const generateViewingKeyButton = document.getElementById(idGenerateViewingKey); - const statusArea = document.getElementById(idStatus); - - generateViewingKeyButton.addEventListener(eventClick, async () => { - if (typeof ethereum === "undefined") { - statusArea.innerText = "`ethereum` object is not available. Please install and enable MetaMask." - return - } - - const accounts = await ethereum.request({method: metamaskRequestAccounts}); - if (accounts.length === 0) { - statusArea.innerText = "No MetaMask accounts found." - return - } - // Accounts is "An array of a single, hexadecimal Ethereum address string.", so we grab the single entry at index zero. - const account = accounts[0]; - - const addressJson = {"address": account} - const viewingKeyResp = await fetch( - pathGenerateViewingKey, { - method: methodPost, - headers: jsonHeaders, - body: JSON.stringify(addressJson) - } - ); - if (!viewingKeyResp.ok) { - statusArea.innerText = "Failed to generate viewing key." - return - } - - const viewingKey = await viewingKeyResp.text(); - - const signature = await ethereum.request({ - method: metamaskPersonalSign, - // Without a prefix such as 'vk', personal_sign transforms the data for security reasons. - params: [personalSignPrefix + viewingKey, account] - }).catch(_ => { return -1 }) - if (signature === -1) { - statusArea.innerText = "Failed to sign viewing key." - return - } - - const signedViewingKeyJson = {"signature": signature, "address": account} - const submitViewingKeyResp = await fetch( - pathSubmitViewingKey, { - method: methodPost, - headers: jsonHeaders, - body: JSON.stringify(signedViewingKeyJson) - } - ); - - let checksummedAccount = Web3.utils.toChecksumAddress(account); - if (submitViewingKeyResp.ok) { - statusArea.innerText = `Account: ${checksummedAccount}\nViewing key: ${viewingKey}\nSigned bytes: ${signature}` - } else { - statusArea.innerText = "Failed to submit viewing key to enclave." - } - }) -} - -window.addEventListener(eventDomLoaded, initialize); \ No newline at end of file diff --git a/tools/walletextension/api/static/style.css b/tools/walletextension/api/static/style.css deleted file mode 100644 index 2c9cadb9cd..0000000000 --- a/tools/walletextension/api/static/style.css +++ /dev/null @@ -1,34 +0,0 @@ -html { - font-family: sans-serif; - line-height: 1.5; -} - -body { - color: white; - background-color: black; - margin: 1rem; -} - -a { - color: white; -} - -textarea { - color: white; - background-color: black; - font-family: sans-serif; - border: solid 1px white; - border-radius: 3px; -} - -button { - color: white; - background-color: black; - border: solid 1px white; - border-radius: 3px; -} - -/*Formats the block-decoder form.*/ -form { display: table; } -label { display: table-cell; } -input { display: table-cell; } \ No newline at end of file diff --git a/tools/walletextension/api/staticOG/MetaMaskIcon.png b/tools/walletextension/api/staticOG/MetaMaskIcon.png deleted file mode 100644 index 89f257be07f3ce9518f9344073ad0bc33e82a9c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133166 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

=ZuLBf6Ff|^TcLH3Lbzgad3Pn$JgP{fJ z6OAF+b-?8d9S8otyY@>bF=~|sa>ay(T%%xc3uD}m^LHhimv&|&I$*C1L=#Iy7cr6t zdq<~|*t`yo`^wbLK(^rKBe@*hDcwl7WKf*f@se}Jz`i>-wfDaQ{CV07>!Ko})$Z4%JC1poAI`hELKp%kO-|5;LSzfED0BDd&`(Y+PB$cgXrY1p`1 z`(&VwglxfsJYvA>@#vcHFcam~%pvu$za`H>!v7AV`cwNo0&uv?J}nhbD^Ehsg+%Ol zV2hyR7>60**KKY`z=xD)0}(`aozvf+6hOuRbkQaMDqUMNSR0Ce?n`o&c*+PXb`a8u z6ZCZy`~X9{5#S}YNqnnUyai`Mg8W23R`UDO)4!ghf*+hlxUKs{Q$-E1ElV^Bjhzl& z|8ExRAEwg$`+dEE`vFLmSiArv%$biTCE@A|hI}xwF^LVqbx?K=9VZ;f9U0~7d?|+X zI4OTCRz8ld^zG790V22s`)mK3bf?nm2l|BVY z4D;Iya9?i#mvS7m@$@V;;jhe2`@rctV5F~0F6pQU-lmPk;4yB=-2_A$w$j+b zeVb^WU0uGn#{y>2$c0keYpV~YcH;S2&eHvd>l0IJy~$XN!>bJc>%)qC;o*PrRNyKJ z?7DH`GBHPXZ ze~W&tL7!;9mA?1mWB`x=_Jtv^u8TyGjj(@!pPOEf>f7V8SLTAb`!x~&qqIOt3$b_; z6v0&`GG`CpA9}WTDcZgL8jei?1EH*cpT5j(o3e#+ie=MgaBZdr9cpiv5fZz%gYt2EC;HNC&T+1DJulDf5SLq4+}ekz|SWLm(uoCfS5XCV4>j0&(T6 zl8q@_hka=}G5v3+$)R<|ZX zAK2ISi~X9gGu!*kmD;9{Y#A<1e^7zWh-qSk;RTiG{{&TB9#8k!1GCW7Q-btaZ+RiJMRXNV1I#3tc0=SsuI&win(+Uic3m>= zZg06iAHCkk1^c25{SHRBAZ-I2F%Tg|-Qc=b-{S(M*R{1&@^;Zx5Y<;Raq(#&4m znG?EwR6_|N9sfDd7wf(uko;1})HbYgJ0D1q7fricv{5IbOrb0XYZWHfs$1#E|jpjM+wR0AEs$GwPjx1a)O(6JGE7SRnEM5k9j2 z+kV=d3)39zkyKJRW|%BG3azv#wUa_&)j%6vc~7N}1$hs$PZ&hEHjCt0vMIrybA*=~ z?2y5=0>dtTUymWj{LJ5`srQZ>yYwGV+A`bjtQUpDIBwBVKOaRh5Z1)0CxeC$ zF-XzW=AJ5D)Q6zSj~c}gLF{R}b#onj$}Av7O})3ib~5t3A^`(pmYI+EFGP4exmh`p z4j@!sIJLdV%-d3{$haLi-)~K{yVor;r*NEDM>%Wf!|a9lM}OImnT27qGO;2;^8 z96$v>6h>?LFU@MpehQpG@^;T}se4<4Kx+}PCF1KwQRpJ>u7YZ;Fv6Q}CY_ZMqvTIi z*m3-)DO_GqFhxbxoQ=fVPg0eYHdg+njEdV%!+({n?baK2P^lbZ*N?v)=GpG&Nu<5Zg} z8&#lQy>^$e4YU27_bVo#u7F0D;ADzEXOdh_|FiA~JJg-tVVn9J&I;GjPoS;#dxY}D zmVY{6J}4+`PI;{MCOVl!aBCFq#PlLHhYS^a-EAx@5a1-w1CdRp{G^-bL+n;VmrPEM zkq2J=8=Dab$ZcO{koX1kPYjx@o8Tu7hI04DXa3Dk+(}|Bx;@JqU1{h*yYK*|Pc!K| z294YYh`g4$u3sBR0h}?g*CcY9EqkEXa?sBU6dpQQp<*e`oV0!3OL%K_%X7bHJhT=i zv$Ki3eO4pJFd)GlEJN0LcoSkGh09FCq@^Qs0O39ZEv&E^$psefvoiqHC^E2NVc?w7 zB5wt;1tI1U$eFG~c0&JR7eF#O9^;M=#ohwKYPXeMMnHlI0ScZ>P*>c+0p06k#FY@D zM@6=wiv&j=N6e8zvi*S24N$^m92@`s+sEhz#e*6f2GC+~w8&iH0RA!N-VMfgDT#=R z-3Uh91ZlPcQV~?AS}*tS`^)3Yk#R=JF*hllqtS0&fTRc{324L7Xu$7JZvLNvFzo|> zIxF~qBarWezQuh(y?TciX|s*8e3Gf08tYaxJ43ANgyJ5pY#n^%6%vLY^Rd#U#U)9qgBkRr#@A7;jOW<; z#K~-uz$-1E2Lnv!yRVmmDr|-&a8U8wW9Go3$*&rX%QwcpQqRh~i%xJH6V<1a7q{9_ z6JS-a)MXVpyIu`gm6GD-ZD6v>8w`!`Hzht^)ficN3In6Wtj!&1W$~ma(TUjV703$Y zJ%0clzuFmFjiq(F+eD8QN23E?Ci{e%h|60Nd7!>7*W2# zpin>Qc{&CbUswJhlM>dS2Ea>7<3s?(zTmaG4G1b@&A=MpWK5;P<$ST8jYiCtdUr7| zSjf_X1$?Y5zL3RuoHAcAXbw8J??t(ckGr25BwgnQq3*~VNBJoUNQtY{%J}c(n}fwtE`g}7PE+{ioszf#wVBO zup|WWb7U%B(@kg!v?wsz$H2ZAsl@v$_tSPqo{6Nb(g@^lQp`{Tj<$gEcV(D<&Uc8A zN5HFQezIoi7i2Of2m`uepZvT(Pzh9F6>-l^Qv3{yFmHa*k1Xcsx>qBD`bmOEx+)_l z;IH2`YXl+<(!)_0e3O965irLCl8mPzH;-vPya*0d{(*JP)Ii`wJ8iyaMrAA&+3SD~ z=*!r4%wlDxi9Q2+TTDx_B^HhQS<`OQGz4&0wI|qjzg&#ZW8=R4!TZ#5!ll zQOngGi@zK9%4`4d9s%*SgPt&`5Ewzsgy@I?I(^8F981SJQ?B^l0;2<#FFu4%K>6+y z{w)QmUZaGaUrd<;wXpr^4d3BtYdqKhasfA#xuMY#bRebh5tfU4y&JOuSAlS4@1cn^jHLkRCyqVtZ8ZG{%;{6jGy#IgSO)mMj`7KLMiqe>;z-Oc4B{%0M>tY$t}_hc zQ<@2W7Xm$0P+tWBl^XZCk&G!wX1NWwj$u%DB168AfwLYN_~9Ti_(5a=>&xhTPu>wF z^dCXqb_=~03DsBjrW)-aBMB0c7i3 zgP{fz{@&V2_Du*p%SIUW^rs*s|E&IC*uy%GY?kG#xo`F4V~_i}zf3IPodgsp3V^3G zHbkK`2XGHVv2m&gIeMO$zU}hd)ejl83wIH(~agMh_@Z&n=6v!!9xY zXI~nWazp2v$AHW9YM$$p1_J!L&r7P!TYh-~e8MR%J5>sAN`)Hfq%N)+qHh8r zuEOAuPfE#uTh#z7dMDCXN8{bzEi2LwuYx^KIO&|I^qo8;eUAgA-rt|4P)1bCsQXL^CTt9E6SGwqnH@SeK%0uuoM4JEUZ!?O37SX_a_%7%I(I3Y&AQ6KF<>hdJ1{#!4 zoxFS8L1sCfu{aPp#j^)y2dsEV33$O;S7+ccT~GxG1mAX zF)Rw7Ewl>DH~mW$eD}H3lJqQn1g$Ciz&o_M{zXkSyGsZ1=4=|T2Dc-L8elS-_W^i| z2>#v5^ac=z1Mj5$8-UmbGH#z+LRR^3^CF*l?c7B1L~;iv0uG^u*ydd}o7Xt#MECLR zg7tC$T@PePHv%4#pI}1Y%Uao>SQm8WW_)zsu_z2Ecj!a|R1F&bx0_BUE?DYUtw4{3 zVFfYx27Yf+B}L8M|86kpA7`GyDYO^a!-U9V1JaQ}E8fivbW zr>12E{<>ofnE&RN^h7~Zt0r3g#w%qgs|8`a;&wq#SwHKL4&GYskmiHo&DDJCC7Yz> zXi#T>MKNqPPa6b20RtC9vctjOZ)BHjy&{TX=zTzbDhAxFDEgjYVuL=u96B%8XK$br z(SsTCYFzey)s8oL49~W8sIP3!38hCC80S_#)uSRaLp`>@pI^O)##@udp*lwaCW*AU z2dHW-LVzY!4anOGMBN3vTprDmEnPsLHnnCjvaVolQWbkM>^$RtJ+P58ryB>f=}M$$ zjHIt6h#5YICpr;1LBogxo{}uSG|pZc>R&$YR+pvOTs|&WdmqjluOx+EH9!CC`wtqq zo8J7-z>;htoi8}C!JG-9b1_T(7{>42ueKU7!02~QJz+e9P^dPRY5h%T;y8z1C_?3K40@9K823dc+WLp`x zDpsR!)_enM^iRt|KqCpN(=?SyCDFkTK-4-+?!)tcy3ttn{a86vC#v9i_YIz>O~%xv z%aYHr2dbvUFdf|I0MJ(nlB}x#UD+Z`f@M|#t{9f20?gl^|DQ?U$6;)or8qR0e1TAi zmm>va1sAdMkGcpJYn-%x4a43E%7ickOqqfQOc_y9@9wSC4=>l3XH7tZyZ(gK9Q^;a zw4XQKM_v5|ziYoTuNc3Z=KU23u|(~0WW;Q@?@(Y06ru_wYs<1~LCuG+s^9He$qn8Q zdk@0&3?(IuEQT81fp9tJrc|F7yaN zNWW1Cs<~pE;DZ$eYk$GZ>HD#+J~!p#HH_HNMn!b&CK1eot#7Jd{`=Cai7x8oOgTK{ zrK=&f?FQzyX=$%g(+eP(wv0?`9@U>X9k+lX&fvgeboWgg7ZOH}z5pQ;;{QO0v4*JVw9UWC_cwus=@H1aB|V(GQ0X);&#sUz@E3YB>c zt!9?{lJY`(pSftWjHf;XozB$63B`gNRTih9pRd6t_8@`8wf9C0IYg6-#QCo8xb$`y z8w1#nfgSA_CkQ2!4R$Hv%jVDgcvZj?2^nZ+hP3uV5Xv z?K{jQTdR|Z{PE`-th5FUk${&PMZ}{sr2XG7N09#YU&D+y=D*VBJO^rq<2*g+>-f8* zU%ajuQ%fjly-Z=}y1POW+tm@_o#!aFNCUF;o^M;!As~ZDEGTR3MTxZtsL@7|Ddc2R}QWqE;h8+@fO zhL;`kNRC^i4iR&rx|lzsEn$auZxgbAaXU)1Ju=^rm85qqnhk=?mkZb1k||I+be@nw zfqTc8uA;A~0wB^QD0fH{wZHSqsV|r*|GNWCN+v6<82kPz)KfMW8F!>VWC(sC$_)?b zU#`xlOd}72jo_nWusZU&4!a)avRsts#)sNJeP?~IF2ahSt$#LPT}l&b32#waj2(?V!|<9(=9`~WEmvzdYE1D3>REFDAZddc)FjZ5wsB)NN##kSKFok3=WNyEz93YA3AyIIEh*T0N?_(}^r5x)2D0ay^Ry#F zsQ7y@*|WSspdCt{kfE1})no1pE>E&UP&NqM{~oyw4Qx?~r1R=%c#}6c7$Jz^(^2EaprsNz604CpS5*!G+lRRV)gw6{M!UBz^nWlR`@t8Fp4AA+i(lW8nb%i1& zI&Jwo^o3z99^s0|xmG360}kQMxDdR*58y8q7__9W;6tdN0~=^`Qdk9}W0fm-OHlMc zJ_3;b3t2uD@dn=@{>|q%UNpA~36SH)BbA~BI?jS1D95$`St(6-4_c4ef?L*=Q4ilT zO$ruCI^Y9;Yt%Pj@&FI%0dA?l^k0<{H9j435b%UX7pq2Y&~#ArEo~F0q+w;MYOph6 z7D&sfgIWqAUPp9DfU@2d#X6AhaFF;G)+RZ@#8vIbw$X_7ZlUMuV_qUyfNzBe_n;=I zl2Hv0`3op)fp>`%*MuN4*=tD+nU#~jjM}^Fp-J-+z?`sGw+-rvS76+ z4|Z{zs(1`+EwtQ0(K74otNof8wGK<2UB(MCdc+y{sE!fqQif4B)F!r&_VPM>z!qeceyV1(N{SY|Urp@lE6kEE*4{@H-xLRRx+g zs)5d{sFWo;E0iUG8<1XM>V1{OUDH^Mk>|VW1Of^Zd5kKlV_c3Z>g}$CtPxKcec252OFzi!}tbPIU>GhLC z{^VDV*WcUPVqZBr?BIUu`6FI!+*>EMev0Ps!IUR+{WAUc#*Nb5(N}V2q@Bl1LJ30s z8^+oWG`P^igG0g0IZ=7M{~U(G!Fo&EW?Sp2zJg607K+F4+lsxTX_kny;Vq1@QSSwt zg>AEqv&+LJu@mZ$(6n;5FBF{obDm*#1xS&hO3r|2KgaZOK~)MS(QdjEKkHQ18~j&R z;dZGsG;(6wN_68Qaqfhdtz~+p7zE<1#=1xTRgkrm9@$?O4X|(Hx~n=z5`Hr5jajdD z?a1E8)W_~&Tc_?s|K_rqwfpPD{7Y>A$@|Iiy(4$@ux^{A+JHPr02}Ceel@cy!?LgR zu^1>G589&U@zG8#BtmMZ&}Dcvc|7Lj32o#Z>em8mD5j zlRwU;i5$WP!5#S;_#&(#r9|G22uMK7EI-&>4ZTB3?GyTVZ(fwxke|H~>&(+CizA8epx~UeK&@2cQV@2KQOn0O6sl=)=&Je$ zpk+mac`+I?4LIJx{10+ychq1g@smeGeybpbelAZNtz$6pmgW^Le`cG~tAFsYLjK0r z=i4duw{hRgho#<+Qd7wAUX}*zdXe1_1z-SQzBe8ptdpey;JZi?2{lUIf)mPW?G>Hv z$kIqGxH*1cjN7^YT^?52JD<=yQxg?Q?W%Y#yA_!FyhMaz9V7o@6S=KCT2Z27!TQgP zI{Ay7;sHxLk)R_cBp=NWYS7k|NHF_;^${E(--!hz=fgC~5+M$hdU- z((A!Y3yao|Ir1Mz7-?*1Tu5NK8Et-?eF^0JMWFzNzAaI2rH5Iv%ps*YS&EV9JLqAZEYy0c%ywQ#?OM}@T79Fr1pbu zXav_sp#WTT#4_;N$HfDHfH9&Bv;;l9Mr$^ua_gYRIXE|O^%&|S;I%RES4P~KEPO35 zo5@tv)C}+Rk>F47$qnq(&qDW`O=?uOUO}cPvPR zKzzY6e3OViYW~)n8<2dCa`)ZLl|eAdbCFxNcQ~-KCQA1iF(CEHxegsj-fZ+oR`cMb zqGtYurfa0MoY7am%6Lo2&1U^Ct8lzg=u7m&C%^LFyjVStx=iIJXOy2Q>Xer>_I!;9 z>%dN}BSISy1G>0OdVA9ooye{n9&&N3IZnH}Od3;IU+;{Tz$%%I_$h) zwfH9v2FYh-^*mzA?*?zj!Y_r z>>M~*T{?lSZOmH_z=&R8#LnAaRs5G(aq{|dw94c8bGW*4SVmGT*&kztaZAUtvgX^D zHC{&#%qcTN@JQSIgO$pUu?!;PDQ$ahsHOjeWHNW;jeo=-kFCt zp=E|lkGFkKR2kMWtH)DMpXckexzS-*MQApt0ILg2A!6&a2Jxh zKjaxi{UEMg33;rPMchLiz#Dc8D8?6B#fABr#x&egM3(TKY#tUYxP$HlgMHRuFOfq; z80J)5lUU<};OA{UhJ6NhRa!x*1YtvN7Eiy@=mu?4B7Y1XN~$v9=X8pHtJ$nwO7Fmc zI`zC^`R|Na!7v0NhK@=(45Xi450G94p(7t4wEm5I&-=elW)?WCi5QzbPbi;Q5cOzc z!IP_^vHl}H!u|FuvRO5-ejwTNKDbf1U~s8CnFg0) zdE#lJ?}Vh#%abH570S`{jL5wH4hygdUlMScodo%bA*ZezM95O0QNe%dyO7ebTuG`O~-_lC0Te6^^6YH z+M;ypQ2?T|KgU__wfOh2Hx*GSWm-GJi!V`ASa&2$jKu4)`9!tB5=U0!m$!mKjwOwX z8=6jCEy9CT6=VKzsqDRj!d73$f86`A9Ap^n?N5gxxiN^t8<4Tsl@NVzt zbRs1}-0(geD6ME}L=D)69HrbrHx*d z-jN~ScQ~kLrrOoO8$9dV_QTzq}(-D4C{Dczdzr>%RSp6!e zE6CO@Ur*f_P41&u`(-4I9%dtIPSYGkf%={O1)BNV0QL~7?9_q69#`(ZK9h9ZQCm|X z`y!k~-j}F&XpONRs4kBVeaQu)adT<2-*3OA6Aj`bcToTBrQScqjHh~EvqGI zq2V-?Z|2c0$U@f&K8v4H&pLuU8rKy_08lwWJ@a@kde5Tj*~^sbY8sCvDgx|~r7I3t zMAU6Tm<-B+&83C0E=9+q7-X88E}bnulfLDiF@RywV4><8vR03~3Aa_C3965jGyY$B z5Kv0B76$`HjW&@yjD@aqzqmDaBRzRR@4O%S3$WE4JmDjT_H3BNmZ45ELj*&=k+9f- zF{fQI#e23>qS>ZrztyS_r5-azhfSwDh)|433933 zi?e5zuaR%UFH`9@l5+8ogGkWW7{2d*-nS4Vfj^?KADV3qKEhNWOu#@j^lwbxghom7 zKU~MGpO2m8Y5nq{9gViMdB&*#%962TC>5D&QfkMv6gU!#CQv&4R*^@dpjf!GWr#;v z9P1$}9DT792jcn+&eABG=J2$n_T_r9<9fut| zZ|)i!@_@Z!eEVZ)@qq>O@QEK0f`}k^hldIq`6+?`tS({^V&rF-pd)pO+}f00=%2Z#n~_a{*k=?xl6?FZZ3*HqU|u)WdpuO=XtO%+*O! z1{FDbZl-bpGxI_#dMOFX?JY=*h>r7Zq67kaC(|d;m7E>ABTDxM!XXBs8x+QE`e=1; zHWr*O!%^nB;b3=*{@!L7`L@E=mBY&5@nWT2o}CKB8~!5}DXNe=rSMA}GoXDi&PR`i z@pl=q7-$+U2|{`ogYyZMsMvr7=m7_SMlzMwU-$R+qE+@h5hQ>fk&0p#|K-yu7;k=c zYfx-TcO|IY1`YZGi~OxuTiwXQCmiT^+&^=vePf=Jy9LFg${?a=Zf!+0rytNpO@O(t z78&MYM_2i|T$8EsCrGDC=iVAm|*4k)z}Tfx>0M`V=@nlC*!?T5FzTi$pb*x6{=j$qgxhO zuoz^#z{Oe8P|B}YTvjDQ$@FgEf$Q@&-m`jW=0fwuD@IHlssNh9Xf*413p9wT&>(@e zfLYo+AwbXUF~x-3wa0s02K9@tdlsz>M2uRD$llUc^C?sw>;UGOaY7++Y3-+0Ya?GC zwC}`pgIGGs5~EC=LrJsCSCd|ldc>rg;^cVb9U6mqWEKTmd zs^YB>C5=qhUst{)$g*xf2se3oUYO_6mF09Z4X$;WfGA5M$2Ui$o~O5{KmjCACH*tq z4~XQnARD;CpTY=XJa~&G(*x+0C60I!|M8*!*jOSxoH_`Kj=`e5_jW^RB|(F0spA=K zr~^)joDl4iy*cjfA3i-`!eX%cw?Wl8CD)hnpbZc*9%#HT%!g`w-!H~P5?)zFlgPg0 z7V`N*c|&--hYg=kFHEsEFq+^wH7^3nHjh;I7Iu+`Zv6Q}vT_~FlLI24D+(S7X!=f| zZO0o9MKG^BUj|p3QrV)^CNlXj)-Agwhq&etVWQ&0mgp%bQtT8brBpRw@-RkhU?Zs_D?JP#{F9<2=F#Cbuz8u3m9!SGE6WETYsY#4FJaYot_V zQHI)$&VvPbS+pIj+++r2v7v`3Ad&I?{Ss}v9xtU?ZZL%WTc?)#vovPzJp?m>AtGze zNG_5~dOfH0Z;g3&FG*-h+HKwRc3wC}lTwzdYx?K(U9Sh8rAWre{wV`6`pgaGf}hDW zpohNxw-7|C4lXmi+*|7LP;A3;NEtL@{hF;Wx@EKwbC|ez%nF*w zwxkxYub5Onty=>ZXApbibA#X%`ql=XhVv3lQURUtldmcriC_jKKz9dpz*~j$;`>Fk zf53~%Bb=vXrLUi7o4&6lD@`XH3;Oz^cFanhBe8F}bAyTx>1V|+dw$Oa3BA$&`D_1C zClE2xn?&pA-w1)9600W(AdZmRyG5Uez!e5q{Y`r$UeE3LKjxxWF5?i2#HVt4hzZwT zIHax<#v`2zTXF>kOL*LU z%hH;CKZ>d7>+uFj9n`K2oLY6R(zFz> z3ORBtf(*9yW0-?o7eOm}hM5>oil20$0)`P=i*G4ADq}rcgDMotWy$c%mTb!(B%A=t z3K2}(3%z+4gzR-Arwv2Rw|#Fm9Mc4NX6r~4K;DE1OEHM5T+8|sFZ0wAJ_@5sE<;nJ zJW*tj*&v@oMY&Q%RnuN%-!pdbGvQ zxB_J&1&Azmdy|0A9X6ktDveknhB$IJ8tlUAe=&|X*&>4_OATFbSOebjgQM}W7({_TmN6JDrlVV86yWx-vF_j) zSl!-1BU(CRT8E1yu@Y$SMA(zbX%+r_6aNF=8s6p=0nqby)yHb|m}=-rNA}^rA(!qv zW_TFNiIV53AE@U$1tIxwm84K=@C~R;y+~0L^EXoU$Khj8?cq)A{ry@X$wN6_uShG7 z6<6R>?LN&TEZd)QB0vQ#ejk>tW5;5A$$=F{rdk2H7KQ-<6+n1ZSy;4P2<~ze4c9@{juUUDX zoAfBxivKmZ;;yAG#0Vl}X-LPyw3t~{b8x>qw30`X; zx!e3;`?1VD9sMd@<6~DMA3tI4SK3I_3Kv+8l&z~sw=7(%a0S2=Wv4>QNxQ&`#UKVW zV2<~%VGm$p|rSIWt12+;FNowDuPZkKT4?oA0P;s*+KB zpb-WnrSA^>_`=c@wNp91u|X&UKo1BEg~(shCKsbgCRE`>w+ti`Lrm)p@z8<+9`Ydm zAF|#$s;aj80^Kwc3L>2f(o%wSs7MP+mvl)gAq@vbKsu#EnnNfcozf{KAdPfLci(5@ z_uc!A`y1o^%kgsdInT3l&bij6^RTSv6}#_Bqt%if$|v&W6GMu=g~umc&>S!m%kk#E z?7piAo8Uv;=1#F<%e~Dy1{6u$7<_`(pz+2ACFOVqXjT&(t1D?6hg}jE4(jU?=9qjF z!bI)QtuGkxqB!S%+{*kUo2N}5)SseXiQOmyM+C(;&pG`434O3Z$`44(;=e^4{P!u~ zeTMGv!=J?^#T)7ySEgLdKpc3x+hU;Ii21gYSHyxq?Q%xZbtAY!P5++>%tn13 zP7iP+2{l+pnFhFaQxk6PMDJ^#F>WO^?!wNHdFWI=}e zQarNuX|EZLmSj=(ydsksz@A}0nG3Sx{zw+U++{@9g~wz7#mRDjoF7LWo9I1Yysl)* z^I0%KxoGi|Hp6^f%DoS{pd*tlPyA&2d|7$uPfLkbhHmJ(BqZQtskjKL!2m{9YPxY? z=Ln*eRr|#kJG1C6+U(VqWv40$DM};}LQ7;pp$y;DZxTW2d-k%d!e;7#wnad)l8;rR z*BV@gb5{xUL+N2V{VU=)zBC|f1l`l#11;364_KeY?yW+yP$OPzD7}-z2P~#W5@>(~ z{UC=ARAB*u(e$7Ec?pjwT1;z#a<|c58%6G6^HE2p)eM;e!3QW){QPhEFzbhbdg&E_ zSS6nizKetq@!%p9HSauRytnIO|4>^uR^!G_tkE4;20$FZxCX?XyGn+FAcqZY$%Ks% zA}k65Mj_Ds2)wwI64=)~w-GmwBJ1$!lbi1R{)y|F14ti}+CIWLtJg8CpfW0{RV^0U zw5a>x2wT3xZct3>hPNLX0((>pxQ|Yko6h~WL6nf9>b}6i+pxxgVB;3{U6&ot*B)|6 zR};c%G^JoE>AwTIBzphI1I8eM6a&2ZDejQXqB|fA8yvc<5CjMSS~Nh%ZLj}ZK?-;u zi9j(NJRQ<^{SyylqtZDUJ{J^<4{IUApJ@(&S3EnY{JLYfZxp2&!fxdL_vOSN=CRq@8A-$-n`zQ9V!DWw; zh%0)Y)8AeZVB-#zm!)#%Q%Z!Ae&3EA1b@tOO(nxYw2G@_ zLa%IXn ze&@P96=7^-$S(&RijcrbVPdBp#3lV$NUa8lCdht0k%U@4l==M>f#T!|K{OT!xB+#7 zlZe7#NdpwNk(&>D4C_Ik8%6zX&57bEVO81-rDR|MCi@rn`SE~^pTINvv4nzSbkLEU zQSM!+2So=(Vvg~xvMY$8EW<9WcOauy?bk@Sn2Pv49$J(9sT~eZc6VDrCgNcJf7-c%|P3z0JeP)0RHh<&L#p}l6 zZQlkUHcoITCL$LbBm%mau`Uehx0UnpwWE{2Qh_+8C(5vziy(hI02@)6oU@^>3?W?a zJe%Z_TUuA-3(f!$FlJ3D3LpacOS1DSk?jj43LhBz7FIXk0ptSO)9C!YcF_X0V3`sU zJZu}x!-Do=x__FnK`l3QAOr34OWxIMqyfSnGk1*Xvq(y7GsZ2d zX-Y(xWNvb7Qnbadmz;-HU84yhgug(M3c{C)a^4e?IP=2x%p6T)U`V{k6*yJ{7u!LFY|o^SR|_c~g9BNJ^u@L@Wl_*y6^Cnwnf3jKZIHL;xc@j( z8l)V<2OtqDV1VvWf_~dX)}so~rSZw{QTCn^20-zE|iam5Zd`QQMOzY=?8)di6;Bo4=m*%e1yE%%iPI39YR8glYh*Nq%kpt zYP-Ye!_OA|mxL5Fz`kI_q?XiF_iY$Wst#3 zIr!rfh^w3Jx^f%1>UU$2*WJpX9?{60v{QN zw|L##aPY^V{%!4Ge=Hw?(I#LJqvZVc-)6c*fK0HT%o>A$wvBr(g)5=;2(VXqZOm3s z+~@za{iwb3WSwL<^#TCFgLvm9WdUxs^^{6t^6fn=1m;|4l*=riWU1D5IZ}ZN>FpXt z-6>s@==ImiRWiCZ0!{C&=k8t#V1B@g`5t(m0;V5`CKe_;Af^`2+TS94z|yj&RG~;h zZif#=0*;*JVG20rfKfbg>`^5M*VhBWKzN zoHs-Pn9X~7=m3)-*#osi$>ly9#2^cU;vSb@L~}>!b-zAz#fK8I797XVfEBtvc!n-< zFVs=!6iOSQEu0JwydWPlJwXgB**erqzNITDGgfNp{^cBgjY(3v`O! z<(8YVEwa=QMQ|aM9&}+apm^P(-?E0@)?;6D&dgduDd5-yudP2UV$tw19ZGH{0$uau zIv+!Sv+=VzG+J!fY`@<$Aq3=CON$? z%!C+bHJMQ9$XEWNAsC5OCes2Jv<3vMQ4oj1-#On^Mb@Tz7BEa*iO>@e=o6`}4qPrc zp&Wa8E_lNL;oZDbD*8{=oN};BJwMp$wxybs#gjOHsfZ$5wZaEeg8ftng-~TN8F7(u z6@Kswmd_xN*wc`C&7MeToa-yqw8i6w9^(}3`v{A8u8HZl`m+0JAO~CSOeE6jg87F< z44~*E}!nVgxojm_v+i&)JNnhM2T0XuI5(TpYFUue2>J*I_3PVMJRPM zEJ}L8DY9BPz5o;IHK77rKSNeIh|Geh>u=s;A$&c74_C`!-4 zH+DVp@g2CBOt76PIiL0huqQclJ_5Zs6yV2D0&^mF*P^EGO<`M9`d=a#=`KWI+5?fUmM(e+xr0tKp)+AWP7Y z2r!vmjz7UCja`YSSMdx869BZz#9gktUp*WA3g4_!mZg(HQuf+6?b;4CKc-*;LQwTP z$>d=_FWN?3-Adg*AiXkE+tZ>(4_z+n4!)e@(J*HZ{8Gjp3Z=6d)bRZ#AiC|M#tD842!|ntn_{miQTjGx!QJW4 ztS7a48%QbPY1$l{D*@w?oI5+XfjM@^#olLL1m>1 zd4jthukbv{19HD{G;YL4du`lQO0DkG_%x-2aCLoSp2l`LHdMacRMA9ph{-T3862_F zjh~ugt8vpAAY1pX4M6R6+m8oVW`R64R2;JSXx+vfyJ%}1S2=m{tmUH(y7SCKpXrmn z6qd||Q4fI;WOM+$7V^t`Q3JbD05xFmOULVpdl z;ume#(nL1|+|co6buPg-uA+4j>nFY%9TM#;-oC}#JuSP6hE*}bT<$U_4S+!6H6jSI zl;G7?g8BWlGN#AbC}^D``zQ>d5e3DE9N>dTI?O`s1-pt~+-cZ1qBFBhfsqZpy{p1b zeU;0Zq2>(?up(#TCyt7@?Kba8WZ+gb7Z+NFO-CqXzAfW z7GEM0Z-Mvw(z)hVB7Aw$_ijPjK(hzRWrEoy&N*i6wJ4}-cBm%lk}!V20X&4jBhhxd0eA z3m*-rtML{wIVkcz+~*HF!y&`E>D$yNT{ykR86wOfzj%sHD0NAH$VcZ{X#?}X7Ps1Q zHyJVLzO;*jJ2fr*f<^#o7vyvsvLW7)G?;{;Z-Xuvd8xYPLFG1hoG<|bTbSBoI_sOy zmt3wkQr?C1ZIP9M6)?9PlQVs*5`FBY6$);jdeKo29JSzGFma>Xg7~Y?OL!7W^w3 z8Sf&r2>>p%7y#6=7C{drAqG+)(R-i#|8lVX+MuHeC5(H}zM=u%vn@U)tR=AHVrP{# zk%Hs6C_cJBfAQAJI$ef4&%C-Lys^r1p25E_zg)w<_?YjAj_aR zY_ewIe}*Z;A)d>RqKcHh^cs#8d*h$uJ<%LUN8n`q&*Kx@FIK~@D9G>rDWh|KtON2I z{C%Z#dN+1Ip~!H^>C^qeyv6RRIVd0tNvxYbl&Ydy)a=I5_b-UB1~nJMbD^B>gwvhv z4bp;?G3iGVNgj4v@>eyHV$XO&F-h(5=}c)cf#Mm zSWV&8>GT=HtLK0>b`yOSid4&|n_ZnSGrpjeT~0of8~$1SB#J4uuxa6D@?ojY{{C;W z9}xGDxb1yGp>L;hAzv$X6`hn%ntoqsCUYgpTik{i15 zwKD*MsC^*tf&_zdREzjKF`T!%gb#>W>raSS>n?9CBzu%I&xUlUz-^{4rF5>$B3s<)AK6Bv8#DJ?C_`~TNwMsrxp^Z5LU5TJj|CKIbZyVhK|BO z38GIfvS;MGrTXny;J=vu<*3ZD@qH5tA_pHOxuvFGFC*=L*4$wiG9DMdomum}`%umZ z2dp${O&ET$hIc@9aQ0{_uWO7_^;M}}-er5V>k^0H@D0?bMwJC}{IHIY4n6k$&0A+E zAgv-YVX^aX?~6dD`)AsNU<}8A4Y6cT)%m86RMsHavYX?@K>^zxM^5oSw6ru6N@fyx z_&39lIr$FbS7s`L!|Gq7D(0Sd)ozCm3YT}QGTy+K6?oS5HWQID!8kkt7qc&tw&D(P zB|r-%&_QuP&IY8SX|G5v0PP{bwMi&NBydyd-rYmmd%K@gzIJsNsrFYnj(FQxIMR-x zaP#sCWjp*7F!?qVzO79k0FUO0DkO!TV^xreyg_bnZauQieuvKc+#b1mh$j|st=wI83jdr z^9YTiT$vhaUisW}xg&4sc=N3Y6(cKxmi_OmWU{;vuQmtF*JHQ3{zM1h2tpEQ89t~x z?u*yw{1#?-edG1N=Qva<&_A0LD6;I<%jpu_O4w_b5 zXc`yYc=L*`c#3-pE%}TlA=NwgKN4OmJS-%KhGT;9Y=^!NolC zqM-yVpfpySXOjips3{GLQIjnEeUV8Qier;=7@m0%p5U+E@(J)%Bl^fS%BJ~q%g+zw z@Wr!whGrs#ixXcEh9!iPAK;HpE%Jb%-SlO4c?xWaz5X@LS_ho~-h(zi_X>2G7IqN> z8^4os_++7*m!HjUI8jZ@J>L4=%cu2>L_i8fLGii~+uL~IfuP3p>Q{BkV;0lYDwUtd zxV}LaqrQ_jY;rw*0wiZm9P*t@c)2vqm-z0pEYL}SV{7J|?8>sq@~CHIfn8QlbSf0d z2S2PFl29E}Rh;g^RTEve$B0ky^V*0gzCg!o`DFms!rc`7h5c{!!ze zZ?MIPuV3q$)LW{IB91_72)nN}1B{%^f|sa)7m={&Px233?M!cVtlWkT+lUR(W=|yr z(P>)?eH}+uAgd2~#vG+pEIC4$pU})G>thPd- zQyqiT50<-z56S!47g-p8IrVHeXiXbwM|`7+*BA!A#e zb#=H>k5&sw1mlN(FY0XH(#jh=p^bQ0EFDjM#9DXc9%=fXu&L9DA$8Dgy1GV}+zdcV zm6`{HsEB6JKp7;s{g^a0@dl(b9TnhOPm-ym^)I_*W%aJbPh;5Wh>5S zI6rr>-jS~*kO(d_?vm~w%HMSzg>TL@WkQM`deZ3>qH2uV=&?`=#~K0(y@7!%0dOx= z@R6AgGXcYa=p+H_t(NcOvH7Jh{wWsJq-y4rgzOscUMQ@6F;Z!BCgvx7v||Ku^YaeY z+lam2G-XY7E@WM{esNf3Be&tD+P2%l*Yv}w)4+?b?4>iQ6CdOoI-p)EJNW?h4LW!L zRfg_Q(eS?5YzC(YOvrb^?I#c))L3J1-QpnTd_uRPm%TRLz4)LZtq}LhA1@?iCmlSC zYw&V@@?8>gw~990VPvsO#5;Acrv3p2pB~lsnC9bC*Hs{L01AouD-;Edz1t{=jO2?} zbG8yU1UNO_H64@}^}R7xl`lUX-l%q06WbCZ<~X%O9@O8x6Lb~H%Tu08iWN}xC1RWR z6#Ya+)oW3Tc=}LW^_6@4Lbj_pHc?AgxB& z_L`o`iF>Ci6t)CmST+;DAdYX`aK-4qj^j1pfNoGB>E$hQa$uDK7x$CPC}^mMx)$Y|kLpZo)CAo>AkB5tdy24L zqf5wFag_bh-FFm*4d9zS?Efyb0Ll*`PCVL|KXr}-b9?~b-_`1>)FQ44B@~9zh|gQi z^BjL{%dQ|8 z1{tM>2&Rc(Q8;212qGI5P8lw4bAz!+M`vN=$ZwokN!?A2^iKEzyCrOkskWE05eTl{H+2A57F)2(vr?Cw`X|E<(+|9N5@futnytah?V4t{ zEi&u%*Ui*)>flhi9s>2*M6uA$ew1t$EQ%13CwQpY0!Nn`;ZIQG4v6@(m7ljJ&+Obs z_CsZbJ_2Ufql7#IMDM(wdHMEc&}>I@?muPoH&+3fbJp*7sE+V_xUYaDhyKq0%bXUIC04{#6E2KJ)wJRxqa&&eN8g z!<2P_^&7`PD73j(9t`J3RqT7H{dBE(Uv$6tq}Z?haBm#-1~(T~RL;^ZK2&z^I^_>a ztY`Zqf+}dWjdA>p5EU&P_Hjm$h)<$QJ+*1ac^rOaKG^iXQLWV8!-lX9~X%U%yj)qIW1 z7w#jKIzu0KA=r)sq9p+n1(~(Ir$LYxf;3PM(2oYT)!s}L=ufLUG-O=Mw$$=gP3P?w zq z3vp2(hYcYBXT5t$3J)@S0&?@%3K58#1eU z1Nf_Zw!`8aBxK<+cln<&6$`p>mONaw>!d!z;1p8q;6BhE&@K`1g)b!rS5vfpt+eLo zHlVvk==9RimLNe+Q<6W1%{E==AYt=+GC0LcsIl3zItf= z^;W!EC}XYPxwW|It{A^u&cb(Ytmo0A%T_IwB8`P$Sag6z9R!4JU|_!S6G$(!zUtGH zSM%V+oMnYR0E?ciuGUqv^6^MzrxJqRP(6xK*$56&6WyaOiT~Mhao(I^Tzdn7PA>QR z*Dd%_$>%St&QevD#%$z5&V|EVjkSv+;*y;#_8a60z%SC42GiD%VgPWiQwB`;VSvS29T2XV1GEA`^_|T1werT2HYS?2~RdC zLs@W)pZArm$sAqcs=CcVE3&{fF}jOMDClCI2nj74U(x6E$vA#R5x5HySx-@AuF%Bu@y`s40IF~Ln$HI2 zL_V(+g7<|(|66NdOAc=T_Id){HnT9Hy(@!L9h>hlU4~5B<1kIFk(V?_kSoa? z4TR&_vmbcS0INj{7>_Q^KL`MtLr~awcXo(L-i8Pw?rqJgL$YloP$%(%lKP2SLwcSQ ze=f-IBv-c{iU>(zOEiI$$%5_j;xEC(+k`H#LAlk*8#$gJf1l|&vuq(Tk=O&vmlgEJ zaql6BP`OudaiawoZXAdK9H$Jg6!9PeeAyYCMniOoIXDxFI@EzOJd%pTDH}vLI#-dt z(ceC3LK_RMzHfgCW}J70Ad9rV_Uui>c>S4()TfU_m$ffthP@vwe7D(K0dkEv{LMg= zxQo`evq!FqYe5Vs&_KijIHVCiLF@KBWI>$*h`grw8MJ0RB3;aH=sx*LwOK#{p>*CQ zU0)}2yT;kpLLgz<@SS}0C|_;vFGTRL8AMpOS>^{jz5X5{3Svwf5cYeKUVvmF_+r!t z=8-zrPaLV}2Ot9XgNvlEL%;5WLqG;;o~M4ic6vEl#SpBS~EdE@#pO|Bg zDKF-JQWcOBUAxFjcpi+)3e=%oOd|SSXzy93VEm6!h95q%18*A1r_%ygs=Px zah@5Bg7U`q2RKK~-2Y_D>Z_NgDO0RDE#<5)m#aIE1@~aNp@fMQfiWZFZcsh_#$7z9 z6n>DaD)m|vxHSax+M1(UVVgG_#0W_yg7!q!bF5}D^}8Pzg@sA*M^?H#OzHN}8c}Ge z1Ed9~2un5&RX8c9tVXGjF~)Y(CxvFZ@V5&AojPd{2$yP7?~bsG+#dWu;(Vp350z|F}}qRC20SFiibc z_A3)U6p+GTjWIizPC|`EdYQjmD}R~(up{FW>?}~E^&69DOoUl-`{z3K>A}4i3NN{M z^UY}COVlb!-}yFo!z4KByZ)10Kt04DPA;`-PMC+lT**CT&5&A|<>J{RuVrR>@^UDk z1s9l^evHE-<`r!zng?7x!1o9Iqz+dXt;V#o@|Mf)FLw!F48z^>--kL2!CUuY!yObZ zGzc0ZHH!ebz)gY+-P?4Rwtz^7g^XyED5 z4S%jv94;+-(O>2(qHW<~Eq)ie@koG24*LOXNiBF5C_9xi#8sA7g%>wx9&;FSJf~vW zoTX zg5kiR&WVtw#0v{0L=881O0R(Ons4iuMh5_>?2klqdK@OADK5Fc_?Ae%Wf0dpcq7&a zM}M?=Z8+-V!e^)9A@i<++nLfzToTk}uclx}b+N&iee?C938#!)8L=I3edn$vk|=3d zQ!n#~5&9nHy{jFgc)21U0?}V_XvuTk{nKVGR}Ur!uZ1~eWSU;{)3mqI5GMd?YCIp7 zCIIOfA|z=qgmgEZ{W28Zls`tUY@JD+h`dEyN*r+n!?q(ytPX&cQL^Uz4 zhqhUmshNaycxA>t+0roFY&5S(|B@MsBZa@cPI-pCQdwM{Ojjf(B&h*U(h0N1r1PHs zl1sS!nZ0h`URwCI=gY^dve<4jcWed*slyEof;U^(G9^C@DWImN|8}oc(jZBy!AX*m zKq0Y`JAo#q4}RKQQviG!VSxmVwaN9bP2>jY;gCN%wJK%(=lpmkznNai#&F0LF6-gI z3sMOCrGF2X(k1FAel>PWq$WcE!M`R=o0#*uNqafM)s{;=$0OS1lv%_v{S+b~igA?Q z@G^q9^g($3#-;Ab<3^uf0~F6cw|Lg!_6>8~8%dVH?AL+s7= zA7Lm?KSUlKB4M~MMTjDyKsAm-H%{6axz4pzOAN9IfGBg{bf)InA7YYRJ+*aloY@JZ z1dK)t85Q|`UjkeqMYWR{O0~*`hWzp+jh$>HldDGeY@Pe3wTRlm-jdO1Bmv7)^$z2dba z3@Ego(%8AxtL6I3J1tO~4*hC?2)+irvAK&5;kHtXK)CPHjCY;}1!6JYcLF4A%Twpr ze9H%JIw)KyX>ZRrO_7Cly3@P3CcPeQU4G}Gu1$EQD_9cNCY(&&8&q{aeX&Qf zU+`kFfNkM{Xu~wh``=_V)KO)h>7bRymdvi0K>IOv!m1zvP(K_-V!& zHcDdO78L(7#>U@!c%aSmS7!+h1V$S(pS^84lM^5cxBv(-9%fo?xD9SyNh2p; zj?Y8~g{sxGd^osPMgPlM_w<9SOg`TTE*NE)<$9W7>>GZktpjAS+9CbIU)w5OVh%Y; zJER?pE@hc)u6mUX;&4S%z&G($JxLk~NpVrR|4)l9JP-QI!?ae>w3t`WU+ zHPrCt|06X%h}?#a<0ijA&j-^_1z4Yx*gy{}7jmf(ukRth>9gFqxS~DCy?bZcY;=(mdVjfI_I%JT9QcaT?+Vm6uQmhf9hHkX&o%nS=)4D5cV#NSyab7( z*5r-v4M=tgz`U*iNZG7k226<}z?T)7IY%Pf&p6eU-Pe2Iy$XKXq>z#IQDEZPRWcdG ziv!M>qU*n)*}I4z zRixs1-XB^fF{0(lG81>wX}F;L)Ng)gj++;{2LnC$YVYiw&26%-!EpldHc73J@C;^v=<0dmPt_sAsEz~g zcD2Hzkc4WND6kL*^yZ;Iz(So+5_I*a#tJBn5$7o}tjSk|#M8U_Fq>i$si7%&cTzDB z)MDY-_j87(mGB@6u#*9z=*v}7w}YMgE0-PLz`9*lHy|Nd2JWKXi=_`0@K0r&?bkP1@)CV6B?Uec#el`IpB179nH~)sIH6_9i z=mI60UF8m{cI|+yFyQO94TgcqZ7#~;YAx6N=>mZ4nv@2)(9ik8O`y;R`V3zLImT4C zs@RrxJSYIq0N(yioZ?IhYUhp&ZYsfe2%pSdJlLCQ;Je)nPSiV=1u(eq{X#}irha{@ zgK|gy@k9gZXj$Oi#mmI5ymxJ_$P@sIC@|TH^-uuDPT_2ftH~VAOzVT=|HX96G%pLJ zBG)xfHaKnIE59*EamAqw#A%=?w)k8aDJBQHR6D~loW{3vRZ4}=oss2c$;f=pnCH&h ze$7ds+-h{hd<`{HVf=$~)%vP+SE-L!O82}v!}RG9>l7!C-Pg4NeefGXNFE=V^55KK zz=T5J4kG*8$UeC-41~o!lv-PTS9T@g4!pwnUDz+PYE>Q2Ppnqcj9I(216+3h!V@>9 z{}?K?M`Yrr>UyGvOsUd~e|3xH;@p#`OxfB?tesD}unr#za?>TJ0jWOo_Y-t59|TOd z_s=RymRfYnd>};N5bt;fKZFNrG^lk0GMmCvgWv0z2UCf z>6CsEry4Gx|3Oo}Fu`ikll%7$Z^%g$b!rq=0X z^UzeKW+ea17M(^WTRe#i5$FgrxKP;(j7yj@Qd#l_X_n!sFgUAwE>k022JgTo zj1NpWA^V8)aB~xMS}d|(feFj_6)9@OAY-;BK3~=-N^Ztt0(W@jUIn@~CUV=|^ePY) z3>cr%8xMB(F=F%P3CRDS%*Sv(^Nz9{f|Z;Mk#;IefSBrMhwYb@e!|=o#9lmhWoDOKW&#ryAi&48cLYinMR!P|H~C@ogxaD*pRRu`Q(PuFmdOm95KG+^HxV zOclDy_mMik8?c0NjVM5WJ&{f!1G`)tf7Cxz9a3w)N+Y;3RnZh!j# zhbvXkmiDW{zW`|}j72k5n(eGG$O3Xx=fKozt~S1Q2{B^cZ)^ETNe}!MKz`VB*kOL} z-ChxU0=?0Fnjzxo_lWEN0=Z8P9#n_^`lh9Bw&Z<1MiVaM^R_%3XzSpxg2E#UTSgL^wV!@<`Xp|$x&QNYBW ze!JY_6qApMeZ_JW9lO&+&kF}g#t+TLB_mzmP(MA|Q}p}@(*0fM8HX;hiw9N44HoN1 z^Snmxc|@U?&TwUN!?ds}>JG$92^-m0WT9Ml?8483bTWv*=2dbi>+@-xMw@vOXgcrf zi$&9|mv06w^{jmZ%hUk{as#z-hjYl1k2)^y*W5EvU!ND-;AH10uU=fIUfV?FW^vo@ zqd!9Um9lS}2Cg_b1t5l)3~<{0=V26(MM+HR)(q3CyF(o_=<{a26haAkcllp0A3t@? zxrz+5JBgOFJ62-9q>sL-pnzO*MMp7^`ao}uhS=T#&ly}7L(YAqjdecd%o}#tO`Ov0 z0v)i-_ei8$ILPU+=;FIvY9>D+*g>yUT7haYh7JLKTU39zl)qz3uMIcog|VF-RLadI zg49SV^P?k>yPR{QM?4((`nS}X1J%rUO$6#*XAaxLm_-N0G^OmttAYo;o;|_!s=T8oQL0?!+M9LXlpTuvV7<4WSMP z#C5WRPB1YJ$$YzxR5riWp`wY(_T2vx5U%mowuGD{_h4nnT}a@|4?{3;TmAl=g|)#x zJ|gs9Fm3IoCkJu^3kITcSR&Si!=okuF&?YJr%rg zmv7;-B|RflTe;nEXg_9si}SXTp$Y7GOaPJ&`0#%rTikqZ%1XV4+zFVTmB4|EPNAL@ z)P5d$I~rC^V;ZovOs3os33$z?fnyj7(6_uKq!p*ipFv8Pgawzt2FEGNR%NXy6^!>1 z?7yumSUDTyKFZs@0CjxH>UnL$=XGAQ))esN5g(-7oi|QsfEf`pf?u#hTy@G&_W{_^ z7)2RzqXz|K{a>P?9AkV`1aV*<#`^o@za)T?B4pWom9CBU_{3YLqe=B~e$ z(%C{4Qn6AB*RgyyD=MlyVPcU89ia}8GYNT&(9%}?^9E2@$&^dkU~t7gfUL81%7#hv zOO|Yu13!AVjMk&g?}~)cK|Njl9dSSPN`V%PP<`+(g@ldJSCE9^qC&ZbR_$=C#)P%h zD%^pB3k6^yD(Y;mtgdtp6)BAbND$IG|Moa^QjiIvL;pA4<#XIh4d5X`E?5 zlYxX|pujGA=6}^%X)&+?xP_kHSqTGWg8^7*w`h6gQx(Q0J{_g?7_b3Fu8G%tL)R;Y zTOi2vv;wT=i9`t?2|@2_)A~{FmPk?0Lr;60=Jt^UmW;GVM>i2Ewz2Sek&?HA&Ds*( zZ>8@@bmMR8oNi<>;fKm=1Aq>pFrI4+Ces9@r?kqbbMi_KsR3ZkY~`|s)5*u%WkiDz z)J+9-qwL~8-gNP+hUK=bsrTEQq^8-Rt1+j{ajFIrY5xp`gkcb_H1PHX5QW^+QFLYRs$-6>&oF!8{- z+*DF=60gvyX^2O|$qkFGfl z+IfF+OzN+Q^LWoN<5S>{5DFD4>j0a)5#_UlERf9~Os~{TpqhaEGgYKc&i{4~jaN~E zG6XH?s_`Y@enHr(^0e(2K(AdepqJPf-by^shn?GCTqRHq03#Mya0qW5O!W5)`3tsG zLIS#=L;l6il#@_2gpDTs33QY;V6}=>uZsD>^0ldiKFNBx#|8Ws3(zP) z!=F7@oqPBx8%`ftJ> zrcbyKCr0#J32YdieX|<B&@1!*R{^|1GGJJahRzsfi4Z;O)zRag`7je-BoW zt1rD1zxz4>9J2KK+MC7fVDL3}T3fH0!5>>0St@6o9p!6sbZX06ATj~J>kAqD#PpNK zMhQ15R4djUT)DhRh)WPL+PQj`R{;Jr0ycl5BxQJS%s4#qV`Kb?C42zvrh){Ps0=fo zy(+RUGH(-KKC5TU$>y!LOAX9Qx0axXB11s$xnykN+jo;85x)TZtJKlP(88~1kD1hy zzGb)X0q`f!pZ!4g0!|tY@eYo8?ik~8*brhhb4W_i&hlLj5v4`Ri~f#F?&rifI2Py< zPv8d3123cm1Bzt9F37$)5+3#OJt}3-+SXz%OBS4t1;oHg?tXRn-17sY>ZFxJz)=hd zdM==3F=CosEEkrsMh9Zq%_(-?@^~Vdj#nChWk7RCO{P)SW=bB}e9PlGNj7hZx57u| zw~7<8;BOpHJJ5WwAps6b_>kd6`)P$E)8CDCufgZI&>dFogCNel`NmKKMehM^V)=s$ zo%S5Y#SO1zNJQa116O(19Oi|K#j&OQT9RWv{6r0=50^<*`%El}NJk2`by3EV)gr zBokohEj-PlP~j)C+=KdUVKjA53-op^6L(+N6qJuzuDV|fhNLf-Z(U4X=+`*q7&|6r zwmMwQ#aOC=|Kc6xs81A4ACljeE>N}Nd#*r?joMg?cN2_ck)=@9B?PvnvktF4sqe`w zTS6n%ciKokxDwv>&17Pj`tCfmds8?IchRCQrc|%w>wPD{WmtheEA0Y~e($>ZZ=Dwa zN%1m6;eAl{M86NFDIKwPUi7v)S@KCuUg6X|t-odCKAW%aRwpYs6Ftnfycec!m4YmL zn>86NB)r>Y=D<@+65s>0iw@(>WH6EivPwXRTp997aeu(7QXkoT!}6S!7>`YIwa3tO zdgca}_v>wA`4Jbz(+!??bp<0 zqYxN28^dIr_Xm0fNTNk6-@Yt8Px)p2GUstO`D>loIQ_Z>WEfT4#*EfA`)nKG806V7 z=~LGIa}UkAE{`8wmz|{-7XvCj+#XMS7fb{k2q?59WH^5PM`~vl{5OqnX#(eatD9Lj zSlvWh{-nxzTL0+5*2#8e*9^}SAw4;yyP|GBUpt$kaTe2s9H`ei78#z>L+R!& z(ZJdF_*=}e@3{;AKq}{1AT^`6&O%Pp^~rFmFD>TzD3>oVfU^A742OXW*j!$w?3P?+ z_93&IA^Ar>7E~AfeFR=~|pbJMnler%Vd;xtYYK`?+OiHS5O{u~P!unGp#* zQIllG_ifx}L%olyiVwRZg-CV}P=VAP^-fUNvcp=Bb4Ncm0-GGjp0S}Nn>TR}0D(QC z9n)n>EO#HnXC{|Zr?{k{X48}QvR%r%A;*p)KGJddhyM6MrOdsk33gu3NPcqZgkA9Zm+RhlWZa1AD4WMkVFA{?{+5xd)&ktWnPS+8WAcejhsd4YIkG0F2TL8}m3s3d zFes>Kz#PLLHc3yVk47&S<-QI3%pr*m&9*Bv>{}#bkgpu5PsJnmETJalkf=WF1EG ztbP~TqwX@{sTChk&$9p6>J8yO;^mRTwy3cL(I_w1vT&rwdkMj}B(7_J;N&d*AQd#( zoU-Fy+p&I^$NTre!lFW~3fxNNL7wSnP`{DXgyuOG0V8b68igh{seDUdy%IE}_u^3` zXFM$h#ssm&Sz}9yKSw3l3X(LZ?F>Fte0!L)?q_C_UDsMn?=e5JECCLcDlAS5dmvPb zczrAJ7;cng{R9ICKuvo@h~}>)1DMhu^d%HQ-;p zB4_4w523AG4=G+ZJy4f*M1t*3^wY!r{8>L^U zIRpG!&B`x?V)Fe)BS_uC+!ySfdv)1Y4pQSJ0!td4RcrKEb7VPVnGzH(PX>u1Z7I%w zM=I)XCf=Ojm@TVah0^}KNA^xW!-JY&wfLWE&AL~YDPa>fBXRol_+Z@sUxraSnNIE& z<3Ao^@Z0`;%!Jh$Gc@ZZU`H^bq4ZPoE7+o8yV2heu+H!@um0@tC~do9Qj;4?{<($aB<`# z(d{ywR6Z$hPL|PMr1!8@nMu@GV}>L8^66uv-cspd^WuZr(W1k=b43ipC+6uMMM4Xv zPvBxnU{)k5<@dGJ2Riv-1@1Hc^^yDMeU&>OsU!a<%fO)_=zf-KENUaw7C&71V1vqs z&f}lVQVON90Ize!5E#FFm2(l;aM&n+^_p{)%5>^XY(K`oVJ9o+L*t2G=3?*V5h^7} z9WTD9s!DU@gnIZ>QK0k(-+B*tSU}(M^$md@R_I_M3L7n?@Y8#VR^^wi_F5z3>X$?A z)J&CYg&G$lM=r#nCbqHO$L~-sQrASErEtUyxXH!>Nntc(K$4mRs{o%Ik4d6KO}U_6 zkY=cZR}_)mC-(%E_>|N62AFwv8I<{~xwI5v=jB?p6)#+{?>9m+BUPoVNKNgUMHNem ziod6S`Paeiyj>hnCAfzTm+iFcYRd)pv3Y$-k6B6NS!26P9&l)d?7!kS{p!{2E~cRI zSA?qm6(XjpM|0vSD|j1<&vdW5TNNi7owZ9fiG=0>947=!{4+P&em@xY_&0m;$;5Da zH|5sWRP_NasdIGom3ql&`Pxib32TfztD0O__QSQmD=&mvGu7B9uZ^mo0D!@~kiid; z8I>=Zs#VHrIwO+7w({=(!smUxkP|^85XR;3qdzwcXxn_VACW)w*f9WaE$y;4-Jz8r zgYPY=Rpq~8&l`OAGO$d0-*wu)Dt1*8kKmmao;krHmK_z{Kj0KMHMNcWRV}?+sG6s) zmZu)mYcf0#q2VV5u`fI|rUeI0VQc^tXk2z`U$c#hGv&$#i|l^zm!wu6uif$v)yR0; z!{|B)u0Zsj?EfT|;OYDMddjE(fCcb2UD5$1AsG1mf7<)bsHmEy-3=(1NJ^3*yaPy* zC`gi^5(ES!BUup1Imba!$sk!IDvX37NS2I}1SIF2bCMiq=Jw!w&i9^gt-J33yN-*c zKWO*vU0q%EJXO`z*s{=Iu_cJfpCy6*nMKIjksDV#;TdQZFL@`=2{U9{^NY7qv3E8B zlVPKCIaw~VKXOa`Ui8ex?@3RT$V+A_B^WM2gxiyDxqbA$^Fx<$om35vxN}tV%JySe zt;FqHPxGsywK7UweH;f8!s+!aXsaG*+C|1Nl0$MrC{qpLebCK6S_+538U$Y%s&hBv zdbU6^;lt=T^j&I4*kpP;OkId9=|XIsc9+>rZ7bXDEx;8txkb^b)&>~s(#32Y8m%_P zY-IYQ1nW3k{a;tW?NR0+0e>4ZDvMuNEmiGNFJ$dH96jxzLj8z6-3-Y;p6;vW%X71@ z@~ey5)2hPQOHVrZ3%2)omR*HN)^^i)iBnu}fU>Y3SmpU-N;_tjhb2aOPvktG^0|rB z*4Z2{;k%N`ebaN^CrGV5M8Xf>l|)h|b1>H^^tNVPV7Sd9h4s&zSaYTM)TJ!3gj239 z8sG2I4)gA#b5ueD>a3?c|4j_r5HRpzWT=+aDGkW^P3CmHNFKuF*-ac8Z3MUR6y}RT*g7 z#Wtd~pwF#6nhzlo&HM5f82S(N>dv@0oWS)@fq)iON7iU*j`<8t_%?@e^Tdn(xbrOlqL&d%}m`&sQ{Cnat#JS39aXDXns z9Z6<`jjt{vHgLr&)}oP}&i+O|=Tq{hfxFj-~*q&^c?r!ctmrB1!a6X$8&Zc9+ zVPL{-J)7><#^C9P0D*o%5>nnGiPHS}ZW=E4UT4!d>udnV`&wq)^P z0dO6u^2Qn0{akNG^)wW{tcrKs((`G^$AQVE{$G?7kKGy^mJ`Mw2Nr&pSJvRmygF?&?L*YaAq_)A0`kp`U&0?=LX z^F#y@?wwhbaE)8Xc$Ep1!JnF;mcn>XrcVWzlh-DnxJ&-JX|jhVTpJij7?PN%HC6H| zCk_w2ZuDCHZx-K8RJIew3wPWe7@BBA#_Dm17n?ol1(bOuYXg@nzF$!u(s@CHwO!%B zcFip1{3$j5X#T%E;Dx@5qmRTBj=;iCEKp6{w%Gm!_jGl#rpeaXRnH6Kh?UPSPJdMK zB#x4E5frzoXLoK+M$ZYIY!K@q6u7yK9MrL;xGKZ6@|gEK<|IvQ#K ztd>44c>bjABe9-$hl|@z@Qgk7ZVn>3^2e1;wyKtCC1+uSmj2jy!%|3VIrOn92h_N| zp?gc>_j^b^F=kY4oi5V(x&>tZUgf43gH;&~_ctWS;1&h2F3yj+o%IRVp4qjonm$L1 ztJ%sY(|IfuJ(I_L@bqlq@|nK@7YR9hjhw36)N-D&f(Lc`y*X(L*RNcGqoTiDX}W

u38wWZ}r)kA2`VWd% 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 diff --git a/tools/walletextension/api/staticOG/check.svg b/tools/walletextension/api/staticOG/check.svg deleted file mode 100644 index d7a74c26cc..0000000000 --- a/tools/walletextension/api/staticOG/check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tools/walletextension/api/staticOG/copy.svg b/tools/walletextension/api/staticOG/copy.svg deleted file mode 100644 index d66a75b562..0000000000 --- a/tools/walletextension/api/staticOG/copy.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tools/walletextension/api/staticOG/favicon-32x32.png b/tools/walletextension/api/staticOG/favicon-32x32.png deleted file mode 100644 index ec512be0204e334756fe4cdb73678b81cc4b8f54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmV-C0>k}@P)Px$_DMuRR9Hvtl|RU7aTv$HFM~fx8I+{_iL#KAlF>xjZ8npn6q`sUB?d7tD4X44 zvKW*S785B^5{mrSz5RZJ?pxP;&U@X?9qxIib9&DCKA*nN?|FV70Dj;f#s?3;JHR{e zCl099YB(GYs8lLE9uG{XQ*^ss91e$X5A?UjP^Z(OP$N&*xt&$Ye5%MkA0m zZMR!!G#VU_M@9%%4s<#lxLhtQmrH21THJ28-wMZKF=Vq@nj`0=*=)WKAQFkN+wCA0 zi&3xF5eNicirVdV^m;v-Pb3n^WHRpq==FL`CKFbo3Wb6mP7AOH6K($&$Fc@U24@LlDz1eK0LW{)$tJUhIC@E~UT4{d0USmF= zzYoBu@a6}M4!o()`1}6@K+Xo)oa6EMlPjD!;PH6qQo7&oa5|mn_xn!>P5{W=L2gkJ ze!m}$MuS@bxm=E1E=PAnJRZm8a^V)>t5M*j1v~)n0Pnz84*Ue=PsIV1YR(1#0000< KMNUMnLSTZl - - - Obscuro Gateway - - - - - - - - - - -

- -
- -
- -
-
-
-
-
-

Welcome to the Obscuro Gateway

-
-
- Three clicks to setup encrypted communication between MetaMask - and the Obscuro Network.: -
    -
  1. Hit Connect to Obscuro and start your journey
  2. -
  3. - Allow MetaMask to switch networks to the Obscuro Testnet -
  4. -
  5. - Sign the Signature Request (this is not a - transaction) -
  6. -
-
- - - - - -
-
- You are set up on Obscuro. Your connected accounts are below: -
- - - - - - Connect to Obscuro Testnet - - - - - - - - - - - -
AccountConnected
- - -

-
-
-
-
-
-
-
-
- -
- - - - diff --git a/tools/walletextension/api/staticOG/javascript.js b/tools/walletextension/api/staticOG/javascript.js deleted file mode 100644 index 51db8aec41..0000000000 --- a/tools/walletextension/api/staticOG/javascript.js +++ /dev/null @@ -1,539 +0,0 @@ -const eventClick = "click"; -const eventDomLoaded = "DOMContentLoaded"; -const idJoin = "join"; -const idMoreInfo = "moreInfo"; -const idRevokeUserID = "revokeUserID"; -const idStatus = "status"; -const idAccountsTable = "accountsTable"; -const idTableBody = "tableBody"; -const idInformation = "information"; -const idInformation2 = "information2"; -const idWelcome = "welcome"; -const idRequestTokens = "requestTokens"; -const idBegin = "begin-box"; -const idSpinner = "spinner"; -const obscuroGatewayVersion = "v1"; -const pathJoin = obscuroGatewayVersion + "/join/"; -const pathAuthenticate = obscuroGatewayVersion + "/authenticate/"; -const pathQuery = obscuroGatewayVersion + "/query/"; -const pathRevoke = obscuroGatewayVersion + "/revoke/"; -const pathVersion = "/version/"; -const obscuroChainIDDecimal = 443; -const userIDHexLength = 40; -const methodPost = "post"; -const methodGet = "get"; -const jsonHeaders = { - Accept: "application/json", - "Content-Type": "application/json", -}; - -const metamaskPersonalSign = "personal_sign"; -const obscuroChainIDHex = "0x" + obscuroChainIDDecimal.toString(16); // Convert to hexadecimal and prefix with '0x' - -function isValidUserIDFormat(value) { - return typeof value === "string" && value.length === userIDHexLength; -} - -let obscuroGatewayAddress = - window.location.protocol + "//" + window.location.host; - -const obscuroscanLink = "https://testnet.obscuroscan.com"; - -let provider = null; - -async function fetchAndDisplayVersion() { - try { - const versionResp = await fetch(pathVersion, { - method: methodGet, - headers: jsonHeaders, - }); - if (!versionResp.ok) { - throw new Error("Failed to fetch the version"); - } - - let response = await versionResp.text(); - - const versionDiv = document.getElementById("versionDisplay"); - versionDiv.textContent = "Version: " + response; - } catch (error) { - console.error("Error fetching the version:", error); - } -} - -function getNetworkName(gatewayAddress) { - switch (gatewayAddress) { - case "https://uat-testnet.obscu.ro": - return "Obscuro UAT-Testnet"; - case "https://dev-testnet.obscu.ro": - return "Obscuro Dev-Testnet"; - default: - return "Obscuro Testnet"; - } -} - -function getRPCFromUrl(gatewayAddress) { - // get the correct RPC endpoint for each network - switch (gatewayAddress) { - // case 'https://testnet.obscu.ro': - // return 'https://rpc.sepolia-testnet.obscu.ro' - case "https://sepolia-testnet.obscu.ro": - return "https://rpc.sepolia-testnet.obscu.ro"; - case "https://uat-testnet.obscu.ro": - return "https://rpc.uat-testnet.obscu.ro"; - case "https://dev-testnet.obscu.ro": - return "https://rpc.dev-testnet.obscu.ro"; - default: - return gatewayAddress; - } -} - -async function addNetworkToMetaMask(ethereum, userID, chainIDDecimal) { - // add network to MetaMask - try { - await ethereum.request({ - method: "wallet_addEthereumChain", - params: [ - { - chainId: obscuroChainIDHex, - chainName: getNetworkName(obscuroGatewayAddress), - nativeCurrency: { - name: "Sepolia Ether", - symbol: "ETH", - decimals: 18, - }, - rpcUrls: [ - getRPCFromUrl(obscuroGatewayAddress) + - "/" + - obscuroGatewayVersion + - "/?token=" + - userID, - ], - blockExplorerUrls: ["https://testnet.obscuroscan.io"], - }, - ], - }); - } catch (error) { - console.error(error); - return false; - } - return true; -} - -async function authenticateAccountWithObscuroGatewayEIP712(ethereum, account, userID) { - const isAuthenticated = await accountIsAuthenticated(account, userID) - - if (isAuthenticated) { - return "Account is already authenticated" - } - - const typedData = { - types: { - EIP712Domain: [ - { name: "name", type: "string" }, - { name: "version", type: "string" }, - { name: "chainId", type: "uint256" }, - ], - Authentication: [ - { name: "Encryption Token", type: "address" }, - ], - }, - primaryType: "Authentication", - domain: { - name: "Ten", - version: "1.0", - chainId: obscuroChainIDDecimal, - }, - message: { - "Encryption Token": "0x"+userID - }, - }; - - const data = JSON.stringify(typedData); - const signature = await ethereum.request({ - method: "eth_signTypedData_v4", - params: [account, data], - }).catch(_ => { - console.log("signing failed!") - return -1; - }); - - - const authenticateUserURL = pathAuthenticate+"?token="+userID - const authenticateFields = {"signature": signature, "address": account } - const authenticateResp = await fetch( - authenticateUserURL, { - method: methodPost, - headers: jsonHeaders, - body: JSON.stringify(authenticateFields) - } - ); - return await authenticateResp.text() -} - - -async function accountIsAuthenticated(account, userID) { - const queryAccountUserID = pathQuery + "?token=" + userID + "&a=" + account; - const isAuthenticatedResponse = await fetch(queryAccountUserID, { - method: methodGet, - headers: jsonHeaders, - }); - let response = await isAuthenticatedResponse.text(); - let jsonResponseObject = JSON.parse(response); - return jsonResponseObject.status; -} - -async function revokeUserID(userID) { - const queryAccountUserID = pathRevoke + "?token=" + userID; - const revokeResponse = await fetch(queryAccountUserID, { - method: methodGet, - headers: jsonHeaders, - }); - return revokeResponse.ok; -} - -function getRandomIntAsString(min, max) { - min = Math.ceil(min); - max = Math.floor(max); - const randomInt = Math.floor(Math.random() * (max - min + 1)) + min; - return randomInt.toString(); -} - -async function getUserID() { - try { - if (await isObscuroChain()) { - return await provider.send("eth_getStorageAt", [ - "getUserID", - getRandomIntAsString(0, 1000), - null, - ]); - } else { - return null; - } - } catch (e) { - console.log(e); - return null; - } -} - -async function connectAccounts() { - try { - return await window.ethereum.request({ method: "eth_requestAccounts" }); - } catch (error) { - // TODO: Display warning to user to allow it and refresh page... - console.error("User denied account access:", error); - return null; - } -} - -async function isMetamaskConnected() { - let accounts; - try { - accounts = await provider.listAccounts(); - return accounts.length > 0; - } catch (error) { - console.log("Unable to get accounts"); - } - return false; -} - -// Check if Metamask is available on mobile or as a plugin in browser -// (https://docs.metamask.io/wallet/how-to/integrate-with-mobile/) -function checkIfMetamaskIsLoaded() { - if (window.ethereum) { - handleEthereum(); - } else { - const statusArea = document.getElementById(idStatus); - const table = document.getElementById("accountsTable"); - table.style.display = "none"; - statusArea.innerText = "Connecting to Metamask..."; - window.addEventListener("ethereum#initialized", handleEthereum, { - once: true, - }); - - // If the event is not dispatched by the end of the timeout, - // the user probably doesn't have MetaMask installed. - setTimeout(handleEthereum, 3000); // 3 seconds - } -} - -function handleEthereum() { - const { ethereum } = window; - if (ethereum && ethereum.isMetaMask) { - provider = new ethers.providers.Web3Provider(window.ethereum); - initialize(); - } else { - const statusArea = document.getElementById(idStatus); - statusArea.innerText = "Please install MetaMask to use Obscuro Gateway."; - } -} - -async function populateAccountsTable(document, tableBody, userID) { - tableBody.innerHTML = ""; - const accounts = await provider.listAccounts(); - for (const account of accounts) { - const row = document.createElement("tr"); - - const accountCell = document.createElement("td"); - - const accountLink = document.createElement("a"); - accountLink.href = obscuroscanLink; - accountLink.textContent = account; - accountLink.target = "_blank"; - accountCell.appendChild(accountLink); - - row.appendChild(accountCell); - - const statusCell = document.createElement("td"); - - let x = await accountIsAuthenticated(account, userID); - - if (x === true) { - statusCell.textContent = "\u2705"; - } else { - const connectButton = document.createElement("button"); - connectButton.textContent = "Connect"; - connectButton.style.cursor = "pointer"; - connectButton.addEventListener("click", async (event) => { - event.preventDefault(); - await authenticateAccountWithObscuroGatewayEIP712(ethereum, account, userID); - }); - statusCell.appendChild(connectButton); - } - - const copyIcon = document.createElement("img"); - copyIcon.src = "./copy.svg"; - copyIcon.style.cursor = "pointer"; - copyIcon.style.width = "20px"; - - copyIcon.addEventListener("click", () => { - const textToCopy = accountCell.textContent; - const tempInput = document.createElement("input"); - document.body.appendChild(tempInput); - tempInput.value = textToCopy; - tempInput.select(); - document.execCommand("copy"); - document.body.removeChild(tempInput); - - copyIcon.src = "./check.svg"; - setTimeout(() => { - copyIcon.src = "./copy.svg"; - }, 2000); - }); - - accountCell.appendChild(copyIcon); - row.appendChild(statusCell); - - tableBody.appendChild(row); - } -} - -async function isObscuroChain() { - let currentChain = await ethereum.request({ method: "eth_chainId" }); - return currentChain === obscuroChainIDHex; -} - -async function switchToObscuroNetwork() { - try { - await ethereum.request({ - method: "wallet_switchEthereumChain", - params: [{ chainId: obscuroChainIDHex }], - }); - return 0; - } catch (switchError) { - return switchError.code; - } - return -1; -} - -const initialize = async () => { - const joinButton = document.getElementById(idJoin); - const moreInfoButton = document.getElementById(idMoreInfo); - const revokeUserIDButton = document.getElementById(idRevokeUserID); - const statusArea = document.getElementById(idStatus); - const informationArea = document.getElementById(idInformation); - const informationArea2 = document.getElementById(idInformation2); - const welcome = document.getElementById(idWelcome); - const requestTokens = document.getElementById(idRequestTokens); - const beginBox = document.getElementById(idBegin); - const spinner = document.getElementById(idSpinner); - - const accountsTable = document.getElementById(idAccountsTable); - const tableBody = document.getElementById(idTableBody); - - // getUserID from the gateway with getStorageAt method - let userID = await getUserID(); - - function displayOnlyJoin() { - joinButton.style.display = "block"; - moreInfoButton.style.display = "block"; - revokeUserIDButton.style.display = "none"; - requestTokens.style.display = "none"; - accountsTable.style.display = "none"; - informationArea.style.display = "block"; - informationArea2.style.display = "none"; - welcome.style.display = "block"; - - beginBox.style.visibility = "visible"; - spinner.style.visibility = "hidden"; - } - - async function displayConnectedAndJoinedSuccessfully() { - joinButton.style.display = "none"; - moreInfoButton.style.display = "none"; - informationArea.style.display = "none"; - informationArea2.style.display = "block"; - revokeUserIDButton.style.display = "block"; - accountsTable.style.display = "block"; - welcome.style.display = "none"; - requestTokens.style.display = "block"; - - await populateAccountsTable(document, tableBody, userID); - } - - async function displayCorrectScreenBasedOnMetamaskAndUserID() { - // check if we are on Obscuro Chain - if (await isObscuroChain()) { - // check if we have valid userID in rpcURL - if (isValidUserIDFormat(userID)) { - return await displayConnectedAndJoinedSuccessfully(); - } - } - return displayOnlyJoin(); - } - - // load the current version - await fetchAndDisplayVersion(); - - await displayCorrectScreenBasedOnMetamaskAndUserID(); - - joinButton.addEventListener(eventClick, async () => { - // clean up any previous errors - statusArea.innerText = ""; - // check if we are on an obscuro chain - if (await isObscuroChain()) { - userID = await getUserID(); - if (!isValidUserIDFormat(userID)) { - statusArea.innerText = - "Existing Obscuro network detected in MetaMask. Please remove before hitting begin"; - } - } else { - // we are not on an Obscuro network - try to switch - let switched = await switchToObscuroNetwork(); - // error 4902 means that the chain does not exist - if (switched === 4902 || !isValidUserIDFormat(await getUserID())) { - // join the network - const joinResp = await fetch(pathJoin, { - method: methodGet, - headers: jsonHeaders, - }); - if (!joinResp.ok) { - console.log("Error joining Obscuro Gateway"); - statusArea.innerText = - "Error joining Obscuro Gateway. Please try again later."; - return; - } - userID = await joinResp.text(); - - // add Obscuro network - await addNetworkToMetaMask(window.ethereum, userID); - } - - // we have to check if user has accounts connected with metamask - and promt to connect if not - if (!(await isMetamaskConnected())) { - await connectAccounts(); - } - - // connect all accounts - // Get an accounts and prompt user to sign joining with a selected account - const accounts = await provider.listAccounts(); - if (accounts.length === 0) { - statusArea.innerText = "No MetaMask accounts found."; - return; - } - - userID = await getUserID(); - beginBox.style.visibility = "hidden"; - spinner.style.visibility = "visible"; - for (const account of accounts) { - await authenticateAccountWithObscuroGatewayEIP712(ethereum, account, userID); - accountsTable.style.display = "block"; - await populateAccountsTable(document, tableBody, userID); - } - - // if accounts change we want to give user chance to add them to Obscuro - window.ethereum.on("accountsChanged", async function (accounts) { - if (isValidUserIDFormat(await getUserID())) { - userID = await getUserID(); - for (const account of accounts) { - await authenticateAccountWithObscuroGatewayEIP712( - ethereum, - account, - userID - ); - accountsTable.style.display = "block"; - await populateAccountsTable(document, tableBody, userID); - } - } - }); - - await displayConnectedAndJoinedSuccessfully(); - beginBox.style.visibility = "visible"; - spinner.style.visibility = "hidden"; - } - }); - - revokeUserIDButton.addEventListener(eventClick, async () => { - beginBox.style.visibility = "hidden"; - spinner.style.visibility = "visible"; - let result = await revokeUserID(userID); - - await populateAccountsTable(document, tableBody, userID); - - if (result) { - displayOnlyJoin(); - } else { - statusArea.innerText = "Revoking UserID failed"; - } - }); - - beginBox.style.visibility = "visible"; - spinner.style.visibility = "hidden"; -}; - -$("#moreInfo").click(function () { - var buttonId = "four"; - $("#modal-container").removeAttr("class").addClass(buttonId); - $("body").addClass("modal-active"); -}); - -$("#modal-container").click(function () { - $(this).addClass("out"); - $(this).addClass("disappear"); - $("body").removeClass("modal-active"); -}); - -const chars = - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_=+;:'|?/><~"; - -const randomChar = () => chars[Math.floor(Math.random() * (chars.length - 1))], - randomString = (length) => Array.from(Array(length)).map(randomChar).join(""); - -const card = document.querySelector(".card"), - letters = card.querySelector(".card-letters"); - -const handleOnMove = (e) => { - const rect = card.getBoundingClientRect(), - x = e.clientX - rect.left, - y = e.clientY - rect.top; - - letters.style.setProperty("--x", `${x}px`); - letters.style.setProperty("--y", `${y}px`); - - letters.innerText = randomString(1700); -}; - -card.onmousemove = (e) => handleOnMove(e); - -card.ontouchmove = (e) => handleOnMove(e.touches[0]); - -window.addEventListener(eventDomLoaded, checkIfMetamaskIsLoaded); diff --git a/tools/walletextension/api/staticOG/style.css b/tools/walletextension/api/staticOG/style.css deleted file mode 100644 index d8b58d4695..0000000000 --- a/tools/walletextension/api/staticOG/style.css +++ /dev/null @@ -1,605 +0,0 @@ -html { - height: 100%; -} -body { - margin: 0; - padding: 0; - font-family: sans-serif; - background: linear-gradient(#000, #141e30); - color: #f6f6f6; - font-size: 1rem; - font-weight: 400; - line-height: 1.6; - font-style: normal; - font-stretch: normal; -} - -ol li { - padding: 5px 0px; -} - -.logo { - width: 100px; - height: 100px; - object-fit: contain; - padding: 10px; -} - -.begin-box { - padding: 40px; - background: rgba(0, 0, 0, 0.5); - box-sizing: border-box; - box-shadow: 0 15px 25px rgba(0, 0, 0, 0.6); - border-radius: 10px; - visibility: hidden; - width: 800px; -} - -.begin-box h2 { - margin: 0 0 30px; - padding: 0; - color: #fff; - text-align: center; -} - -.begin-box .user-box { - position: relative; -} - -.begin-box .user-box input { - width: 100%; - padding: 10px 0; - font-size: 16px; - color: #fff; - margin-bottom: 30px; - border: none; - border-bottom: 1px solid #fff; - outline: none; - background: transparent; -} -.begin-box .user-box label { - position: absolute; - top: 0; - left: 0; - padding: 10px 0; - font-size: 16px; - color: #fff; - pointer-events: none; - transition: 0.5s; -} - -.begin-box .user-box input:focus ~ label, -.begin-box .user-box input:valid ~ label { - top: -20px; - left: 0; - color: #03e9f4; - font-size: 12px; -} - -.begin-box form a { - position: relative; - display: inline-block; - padding: 10px 20px; - color: #03e9f4; - font-size: 16px; - text-decoration: none; - text-transform: uppercase; - overflow: hidden; - transition: 0.5s; - margin-top: 40px; - letter-spacing: 4px; -} - -.begin-box a:hover { - background: #03e9f4; - color: #fff; - border-radius: 5px; - box-shadow: 0 0 5px #03e9f4, 0 0 25px #03e9f4, 0 0 50px #03e9f4, - 0 0 100px #03e9f4; -} - -.begin-box a span { - position: absolute; - display: block; -} - -.begin-box a span:nth-child(1) { - top: 0; - left: -100%; - width: 100%; - height: 2px; - background: linear-gradient(90deg, transparent, #03e9f4); - animation: btn-anim1 1s linear infinite; -} - -@keyframes btn-anim1 { - 0% { - left: -100%; - } - 50%, - 100% { - left: 100%; - } -} - -.begin-box a span:nth-child(2) { - top: -100%; - right: 0; - width: 2px; - height: 100%; - background: linear-gradient(180deg, transparent, #03e9f4); - animation: btn-anim2 1s linear infinite; - animation-delay: 0.25s; -} - -@keyframes btn-anim2 { - 0% { - top: -100%; - } - 50%, - 100% { - top: 100%; - } -} - -.begin-box a span:nth-child(3) { - bottom: 0; - right: -100%; - width: 100%; - height: 2px; - background: linear-gradient(270deg, transparent, #03e9f4); - animation: btn-anim3 1s linear infinite; - animation-delay: 0.5s; -} - -@keyframes btn-anim3 { - 0% { - right: -100%; - } - 50%, - 100% { - right: 100%; - } -} - -.begin-box a span:nth-child(4) { - bottom: -100%; - left: 0; - width: 2px; - height: 100%; - background: linear-gradient(360deg, transparent, #03e9f4); - animation: btn-anim4 1s linear infinite; - animation-delay: 0.75s; -} - -@keyframes btn-anim4 { - 0% { - bottom: -100%; - } - 50%, - 100% { - bottom: 100%; - } -} - -a { - color: white; -} - -textarea { - color: white; - background-color: black; - font-family: sans-serif; - border: solid 1px white; - border-radius: 3px; -} - -button { - color: white; - background-color: black; - border: solid 1px white; - border-radius: 3px; -} - -/*Formats the block-decoder form.*/ -form { - display: table; -} -label { - display: table-cell; -} -input { - display: table-cell; -} - -/* basic style for the accounts table*/ -table { - display: none; - border-collapse: collapse; - width: 100%; - margin: auto; /* Center the table */ - background-color: #000000; /* Dark Background */ - color: white; /* Light Text */ - margin-top: 20px; -} -th, -td { - border: 1px solid #666; /* Darker Border */ - padding: 15px; - text-align: center; -} - -td a { - color: white !important; - display: initial !important; - letter-spacing: 1px !important; - text-decoration: underline !important; -} - -td a:hover { - color: #03e9f4 !important; - background: none !important; - border: none !important; - box-shadow: none !important; -} - -th { - background-color: #111111; /* Slightly Darker Header */ -} - -h2 { - font-weight: normal; -} - -#join { - margin: auto; -} - -#moreInfo { - width: 80px; -} - -#versionDisplay { - position: fixed; - bottom: 10px; - right: 10px; - font-size: 0.5rem; -} - -#status { - color: red; -} - -.joined-button { - margin-top: 10px; - padding: 10px; -} - -#revokeUserID { - display: none; -} - -.spinner { - position: relative; - margin: auto; - box-sizing: border-box; - background-clip: padding-box; - width: 200px; - height: 200px; - border-radius: 100px; - border: 4px solid rgba(255, 255, 255, 0.1); - -webkit-mask: linear-gradient(rgba(0, 0, 0, 0.1), #000000 90%); - transform-origin: 50% 60%; - transform: perspective(200px) rotateX(66deg); - animation: spinner-wiggle 1.2s infinite; -} - -@keyframes spinner-wiggle { - 30% { - transform: perspective(200px) rotateX(66deg); - } - 40% { - transform: perspective(200px) rotateX(65deg); - } - 50% { - transform: perspective(200px) rotateX(68deg); - } - 60% { - transform: perspective(200px) rotateX(64deg); - } -} -.spinner:before, -.spinner:after { - content: ""; - position: absolute; - margin: -4px; - box-sizing: inherit; - width: inherit; - height: inherit; - border-radius: inherit; - opacity: 0.05; - border: inherit; - border-color: transparent; - animation: spinner-spin 1.2s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, - spinner-fade 1.2s linear infinite; -} - -.spinner:before { - border-top-color: #66e6ff; -} - -.spinner:after { - border-top-color: #f0db75; - animation-delay: 0.3s; -} - -@keyframes spinner-spin { - 100% { - transform: rotate(360deg); - } -} -@keyframes spinner-fade { - 20% { - opacity: 0.1; - } - 40% { - opacity: 1; - } - 60% { - opacity: 0.1; - } -} - -.wrapper { - position: relative; - top: 50%; - margin: auto; - width: 800px; - height: 500px; -} - -:root { - --background-rgb: 2 6 23; - --background-light-rgb: 30 41 59; - - --hyperplexed-main-rgb: 41 121 255; - --hyperplexed-main-light-rgb: 56 182 255; - --hyperplexed-secondary-rgb: 42 252 152; - - --card-size: 800px; - --font-size: 0.9rem; -} - -.card-track { - height: 100%; - width: var(--card-size); - display: flex; - align-items: center; - position: relative; -} - -.card-wrapper { - width: 800px; - position: relative; -} - -.card { - display: flex; - align-items: center; - justify-content: center; - aspect-ratio: 1; - position: relative; - border-radius: 2rem; - overflow: hidden; - cursor: pointer; - width: 100%; - height: 100%; -} - -.card-image { - width: 100%; - height: 100%; - align-items: center; - justify-content: center; - position: relative; - z-index: 4; -} - -.card-gradient { - height: 100%; - width: 100%; - position: absolute; - background: radial-gradient( - rgb(var(--background-light-rgb)) 40%, - rgb(var(--hyperplexed-main-rgb)) 50%, - rgb(var(--hyperplexed-main-light-rgb)), - rgb(var(--hyperplexed-secondary-rgb)) - ); - mix-blend-mode: darken; - pointer-events: none; - z-index: 3; -} - -.card-letters { - --x: 0px; - --y: 0px; - position: absolute; - left: 0px; - top: 0px; - height: 85%; - width: 100%; - color: white; - font-size: var(--font-size); - font-weight: 500; - word-wrap: break-word; - opacity: 0; - transition: opacity 400ms; - -webkit-mask-image: radial-gradient( - calc(var(--card-size) * 0.5) circle at var(--x) var(--y), - rgb(255 255 255) 20%, - rgb(255 255 255 / 25%), - transparent - ); - scale: 1.03; -} - -.card:hover .card-letters { - opacity: 1; -} - -* { - box-sizing: border-box; -} - -html.modal-active, -body.modal-active { - overflow: hidden; -} - -#modal-container { - position: fixed; - display: table; - height: 100%; - width: 100%; - top: 0; - left: 0; - transform: scale(0); - z-index: 6; -} -#modal-container.four { - z-index: 5; - transform: scale(1); -} -#modal-container.four .modal-background { - background: rgba(0, 0, 0, 0.7); -} -#modal-container.four .modal-background .modal { - animation: blowUpModal 0.5s cubic-bezier(0.165, 0.84, 0.44, 1) forwards; -} -#modal-container.four + .content { - z-index: 6; - animation: blowUpContent 0.5s cubic-bezier(0.165, 0.84, 0.44, 1) forwards; -} -#modal-container.four.out .modal-background .modal { - animation: blowUpModalTwo 0.5s cubic-bezier(0.165, 0.84, 0.44, 1) forwards; -} -#modal-container.four.out + .content { - animation: blowUpContentTwo 0.5s cubic-bezier(0.165, 0.84, 0.44, 1) forwards; -} -.disappear { - animation: blowUpModalTwo 0.5s cubic-bezier(0.165, 0.84, 0.44, 1) forwards; -} -#modal-container .modal-background { - display: table-cell; - background: rgba(0, 0, 0, 0.8); - text-align: center; - vertical-align: middle; -} -#modal-container .modal-background .modal { - background: #000; - padding: 50px; - display: inline-block; - border-radius: 3px; - position: relative; - width: 800px; -} -#modal-container .modal-background .modal p { - text-align: left; -} -#modal-container .modal-background .modal h2 { - font-size: 25px; - line-height: 25px; - margin-bottom: 15px; -} -#modal-container .modal-background .modal .modal-svg { - position: absolute; - top: 0; - left: 0; - height: 100%; - width: 100%; - border-radius: 3px; -} -#modal-container .modal-background .modal .modal-svg rect { - stroke: #000; - stroke-width: 2px; - stroke-dasharray: 778; - stroke-dashoffset: 778; -} - -.content { - min-height: 100%; - height: 100%; - background: #000; - position: relative; - z-index: 5; -} -.content h1 { - padding: 75px 0 30px 0; - text-align: center; - font-size: 30px; - line-height: 30px; -} -.content .buttons { - max-width: 800px; - margin: 0 auto; - padding: 0; - text-align: center; -} -.content .buttons .button { - display: inline-block; - text-align: center; - padding: 10px 15px; - margin: 10px; - background: red; - font-size: 18px; - background-color: #efefef; - border-radius: 3px; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); - cursor: pointer; -} -.content .buttons .button:hover { - color: white; - background: #009bd5; -} - -@keyframes blowUpContent { - 0% { - transform: scale(1); - opacity: 1; - } - 99.9% { - transform: scale(2); - opacity: 0; - } - 100% { - transform: scale(0); - } -} -@keyframes blowUpContentTwo { - 0% { - transform: scale(2); - opacity: 0; - } - 100% { - transform: scale(1); - opacity: 1; - } -} -@keyframes blowUpModal { - 0% { - transform: scale(0); - } - 100% { - transform: scale(1); - } -} -@keyframes blowUpModalTwo { - 0% { - transform: scale(1); - opacity: 1; - } - 100% { - transform: scale(0); - opacity: 0; - } -} diff --git a/tools/walletextension/api/staticOG/ten.svg b/tools/walletextension/api/staticOG/ten.svg deleted file mode 100644 index 1c51495c5b..0000000000 --- a/tools/walletextension/api/staticOG/ten.svg +++ /dev/null @@ -1,6 +0,0 @@ - -TEN. - diff --git a/tools/walletextension/frontend/next.config.js b/tools/walletextension/frontend/next.config.js index a843cbee09..45ddca84d4 100644 --- a/tools/walletextension/frontend/next.config.js +++ b/tools/walletextension/frontend/next.config.js @@ -1,6 +1,8 @@ /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, + output: 'export', + distDir: '../api/static' } module.exports = nextConfig diff --git a/tools/walletextension/frontend/src/api/gateway.ts b/tools/walletextension/frontend/src/api/gateway.ts index 2e057b3d9d..dbaf0964c6 100644 --- a/tools/walletextension/frontend/src/api/gateway.ts +++ b/tools/walletextension/frontend/src/api/gateway.ts @@ -2,11 +2,12 @@ import { apiRoutes } from "../routes"; import { httpRequest } from "."; import { pathToUrl } from "../routes/router"; import { AuthenticationResponse } from "@/types/interfaces/GatewayInterfaces"; +import { tenGatewayAddress } from "../lib/constants"; export async function fetchVersion(): Promise { return await httpRequest({ method: "get", - url: pathToUrl(apiRoutes.version), + url: tenGatewayAddress + pathToUrl(apiRoutes.version), }); } @@ -16,7 +17,7 @@ export async function accountIsAuthenticated( ): Promise { return await httpRequest({ method: "get", - url: pathToUrl(apiRoutes.queryAccountToken), + url: tenGatewayAddress + pathToUrl(apiRoutes.queryAccountToken), searchParams: { token, a: account, @@ -33,7 +34,7 @@ export const authenticateUser = async ( ) => { return await httpRequest({ method: "post", - url: pathToUrl(apiRoutes.authenticate), + url: tenGatewayAddress + pathToUrl(apiRoutes.authenticate), data: authenticateFields, searchParams: { token, @@ -44,7 +45,7 @@ export const authenticateUser = async ( export async function revokeAccountsApi(token: string): Promise { return await httpRequest({ method: "get", - url: pathToUrl(apiRoutes.revoke), + url: tenGatewayAddress + pathToUrl(apiRoutes.revoke), searchParams: { token, }, @@ -54,6 +55,6 @@ export async function revokeAccountsApi(token: string): Promise { export async function joinTestnet(): Promise { return await httpRequest({ method: "get", - url: pathToUrl(apiRoutes.join), + url: tenGatewayAddress + pathToUrl(apiRoutes.join), }); } diff --git a/tools/walletextension/frontend/src/lib/constants.ts b/tools/walletextension/frontend/src/lib/constants.ts index 8bf15165be..e6079b5fa4 100644 --- a/tools/walletextension/frontend/src/lib/constants.ts +++ b/tools/walletextension/frontend/src/lib/constants.ts @@ -1,4 +1,5 @@ -export const tenGatewayAddress = process.env.NEXT_PUBLIC_API_GATEWAY_URL; +export const tenGatewayAddress = process.env.NEXT_PUBLIC_API_GATEWAY_URL || "http://127.0.0.1:3000"; + export const tenscanLink = "https://testnet.tenscan.com"; export const socialLinks = { diff --git a/tools/walletextension/frontend/src/lib/utils.ts b/tools/walletextension/frontend/src/lib/utils.ts index f4d0c7abfd..483a82f59f 100644 --- a/tools/walletextension/frontend/src/lib/utils.ts +++ b/tools/walletextension/frontend/src/lib/utils.ts @@ -39,22 +39,6 @@ export function getNetworkName() { } } -export function getRPCFromUrl() { - // get the correct RPC endpoint for each network - switch (testnetUrls.default.url) { - // case 'https://testnet.obscu.ro': - // return 'https://rpc.sepolia-testnet.obscu.ro' - case testnetUrls.sepolia.url: - return testnetUrls.sepolia.rpc; - case testnetUrls.uat.url: - return testnetUrls.uat.rpc; - case testnetUrls.dev.url: - return testnetUrls.dev.rpc; - default: - return testnetUrls.default.url; - } -} - export async function isTenChain() { let currentChain = await ethereum.request({ method: "eth_chainId", diff --git a/tools/walletextension/frontend/src/services/useGatewayService.ts b/tools/walletextension/frontend/src/services/useGatewayService.ts index c2920d9076..5b548b4389 100644 --- a/tools/walletextension/frontend/src/services/useGatewayService.ts +++ b/tools/walletextension/frontend/src/services/useGatewayService.ts @@ -2,8 +2,8 @@ import { ToastType } from "@/types/interfaces"; import { joinTestnet } from "../api/gateway"; import { useWalletConnection } from "../components/providers/wallet-provider"; import { showToast } from "../components/ui/use-toast"; -import { SWITCHED_CODE, tenGatewayVersion } from "../lib/constants"; -import { getRPCFromUrl, isTenChain, isValidTokenFormat } from "../lib/utils"; +import {SWITCHED_CODE, tenGatewayAddress, tenGatewayVersion} from "../lib/constants"; +import { isTenChain, isValidTokenFormat } from "../lib/utils"; import { addNetworkToMetaMask, connectAccounts, @@ -45,7 +45,7 @@ const useGatewayService = () => { if (switched === SWITCHED_CODE || (token && !isValidTokenFormat(token))) { const user = await joinTestnet(); const rpcUrls = [ - `${getRPCFromUrl()}/${tenGatewayVersion}/?token=${user}`, + `${tenGatewayAddress}/${tenGatewayVersion}/?token=${user}`, ]; await addNetworkToMetaMask(rpcUrls); } diff --git a/tools/walletextension/main/main.go b/tools/walletextension/main/main.go index 119a3d707c..b9e9ed73ab 100644 --- a/tools/walletextension/main/main.go +++ b/tools/walletextension/main/main.go @@ -74,7 +74,7 @@ func main() { }() walletExtensionAddr := fmt.Sprintf("%s:%d", common.Localhost, config.WalletExtensionPortHTTP) - fmt.Printf("💡 Wallet extension started - visit http://%s/viewingkeys/ to generate an ephemeral viewing key.\n", walletExtensionAddr) + fmt.Printf("💡 Wallet extension started \n") // Some tests rely on seeing this message. Removed in next PR. fmt.Printf("💡 Obscuro Gateway started - visit http://%s to use it.\n", walletExtensionAddr) select {}