From 8aeab136bc5d7ffa8101f1316c86c5a9f1a2ab0b Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Wed, 20 Apr 2022 21:32:55 -0700 Subject: [PATCH] Add files via upload --- apps/mtnclock/README.md | 19 ++ apps/mtnclock/app.js | 350 ++++++++++++++++++++++++++++++++++ apps/mtnclock/app.png | Bin 0 -> 2212 bytes apps/mtnclock/metadata.json | 25 +++ apps/mtnclock/screenshot1.png | Bin 0 -> 4350 bytes apps/mtnclock/screenshot2.png | Bin 0 -> 3856 bytes apps/mtnclock/screenshot3.png | Bin 0 -> 3602 bytes apps/mtnclock/screenshot4.png | Bin 0 -> 3623 bytes apps/mtnclock/screenshot5.png | Bin 0 -> 3427 bytes 9 files changed, 394 insertions(+) create mode 100644 apps/mtnclock/README.md create mode 100644 apps/mtnclock/app.js create mode 100644 apps/mtnclock/app.png create mode 100644 apps/mtnclock/metadata.json create mode 100644 apps/mtnclock/screenshot1.png create mode 100644 apps/mtnclock/screenshot2.png create mode 100644 apps/mtnclock/screenshot3.png create mode 100644 apps/mtnclock/screenshot4.png create mode 100644 apps/mtnclock/screenshot5.png diff --git a/apps/mtnclock/README.md b/apps/mtnclock/README.md new file mode 100644 index 000000000..a88c847cb --- /dev/null +++ b/apps/mtnclock/README.md @@ -0,0 +1,19 @@ +# Mountain Pass Clock + +Mountain Pass Clock changes depending on time (day/night) and weather conditions. + +This clock requires Gadgetbridge and an app that Gadgetbridge can use to get the current weather from OpenWeatherMap (e.g. Weather Notification). To set up Gadgetbridge and weather, see https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Weather. + +If you choose not to set up weather, this clock will default to clear weather, and the scenery will still change from night to day. + +## WARNING + +This app has not been tested on the original Bangle JS. + +## Images + +![](screenshot1.png) +![](screenshot2.png) +![](screenshot3.png) +![](screenshot4.png) +![](screenshot5.png) \ No newline at end of file diff --git a/apps/mtnclock/app.js b/apps/mtnclock/app.js new file mode 100644 index 000000000..cc1d541d8 --- /dev/null +++ b/apps/mtnclock/app.js @@ -0,0 +1,350 @@ +var data = require("Storage").readJSON("mtnclock.json", 1) || {}; + +//seeded RNG to generate stars, snow, etc +function sfc32(a, b, c, d) { + return function() { + a >>>= 0; b >>>= 0; c >>>= 0; d >>>= 0; + var t = (a + b) | 0; + a = b ^ b >>> 9; + b = c + (c << 3) | 0; + c = (c << 21 | c >>> 11); + d = d + 1 | 0; + t = t + d | 0; + c = c + t | 0; + return (t >>> 0) / 4294967296; + }; +} + +//scale x, y coords to screen +function px(x) { + return x*g.getWidth()/100; +} + +function py(y) { + return y*g.getHeight()/100; +} + +function drawMtn(color, coord, dimen) { + //scale mountains to different sizes + g.setColor(color.mtn1).fillPoly([ + coord.x,coord.y, + coord.x,coord.y+dimen.h, + coord.x-dimen.w/2,coord.y+dimen.h + ]); + g.setColor(color.mtn2).fillPoly([ + coord.x,coord.y, + coord.x,coord.y+dimen.h, + coord.x+dimen.w/2,coord.y+dimen.h + ]); +} + +function drawTree(color, coord, dimen) { + //scale trees to different sizes + g.setColor(color.tree1).fillPoly([ + coord.x,coord.y, + coord.x-dimen.w/5,coord.y+dimen.h/4, + coord.x-dimen.w/12,coord.y+dimen.h/4, + coord.x-dimen.w/2.8,coord.y+1.95*dimen.h/4, + coord.x-dimen.w/8,coord.y+1.95*dimen.h/4, + coord.x-dimen.w/2,coord.y+3*dimen.h/4, + coord.x,coord.y+3*dimen.h/4 + ]); + g.setColor(color.tree2).fillPoly([ + coord.x,coord.y, + coord.x+dimen.w/5,coord.y+dimen.h/4, + coord.x+dimen.w/12,coord.y+dimen.h/4, + coord.x+dimen.w/2.8,coord.y+1.95*dimen.h/4, + coord.x+dimen.w/8,coord.y+1.95*dimen.h/4, + coord.x+dimen.w/2,coord.y+3*dimen.h/4, + coord.x,coord.y+3*dimen.h/4 + ]); + g.setColor(color.tree3).fillRect( + coord.x-dimen.w/12,coord.y+3*dimen.h/4, + coord.x+dimen.w/12,coord.y+dimen.h + ); +} + +function drawSnow(color, coord, size) { + g.setColor(color).drawLine(coord.x-px(size),coord.y-py(size),coord.x+px(size),coord.y+py(size)); + g.drawLine(coord.x-px(size),coord.y+py(size),coord.x+px(size),coord.y-py(size)); + g.drawLine(coord.x,coord.y+py(size),coord.x,coord.y-py(size)); + g.drawLine(coord.x-px(size),coord.y,coord.x+px(size),coord.y); +} + +function draw(color) { + +var seed; +var rand; + +g.clear(); +//background + g.setColor(color.bg1).fillRect( + px(0),py(0), + px(100),py(45) + ); + g.setColor(color.bg2).fillRect( + px(0),py(45), + px(100),py(100) + ); + //lightning + if (color.ltn) { + g.setColor(color.ltn).fillPoly([ + px(70),py(20), + px(60),py(28), + px(71),py(29), + px(63),py(40), + px(75),py(28), + px(64),py(27) + ]); + g.fillPoly([ + px(40),py(20), + px(30),py(28), + px(41),py(29), + px(33),py(40), + px(45),py(28), + px(34),py(27) + ]); + } + //stars + if (color.star) { + seed = 4; + rand = sfc32(0x9E3779B9, 0x243F6A88, 0xB7E15162, seed); + for (let i = 0; i < 40; i++) { + g.setColor(color.star).drawCircle(Math.floor(rand() * px(100)),Math.floor(rand() * py(33)),Math.floor(rand() * 2)); + } + } + //birds + if (color.bird) { + g.setColor(color.bird).fillCircle(px(17),py(12),px(5)).fillCircle(px(23),py(10),px(5)); + g.setColor(color.bg1).fillCircle(px(18),py(15),px(6)).fillCircle(px(24),py(13),px(6)); + g.setColor(color.bird).fillCircle(px(28),py(19),px(4)).fillCircle(px(33),py(19),px(4)); + g.setColor(color.bg1).fillCircle(px(28),py(21),px(5)).fillCircle(px(34),py(21),px(5)); + } + //sun/moon + if (color.sun) g.setColor(color.sun).fillCircle(px(65), py(22), py(20)); + //path + g.setColor(color.path).fillPoly([ + px(60),py(44), + px(39),py(55), + px(72),py(57), + px(30),py(100), + px(70),py(100), + px(78),py(55), + px(46),py(53) + ]); + //fog + if (color.fog) { + g.setColor(color.fog); + for (let i = 1; i <= 47; i = i+2) { + g.drawLine(px(0),py(i),px(100),py(i)); + } + } + //rain + if (color.rain1) { + g.setColor(color.rain1); + for (let i = 0; i <= 6; i++) { + g.drawLine(px(6+i*20),py(20),px(-14+i*20),py(45)); + } + if (color.rain2) { + for (let i = 0; i <= 6; i++) { + g.drawLine(px(16+i*20),py(20),px(-4+i*20),py(45)); + } + } + } + //snow + if (color.snow) { + seed = 11; + rand = sfc32(0x9E3779B9, 0x243F6A88, 0xB7E15162, seed); + for (let i = 0; i < 30; i++) { + drawSnow(color.snow, {x:Math.floor(rand() * px(100)), y:(Math.floor(rand() * py(25))+py(20))}, Math.floor(rand() * 3)); + } + } + //mountains + drawMtn({mtn1:color.mtn2, mtn2:color.mtn1}, {x:px(35), y:py(30)}, {w:px(38), h:py(17)}); + drawMtn({mtn1:color.mtn2, mtn2:color.mtn1}, {x:px(10), y:py(20)}, {w:px(50), h:py(30)}); + drawMtn({mtn1:color.mtn1, mtn2:color.mtn2}, {x:px(90), y:py(20)}, {w:px(70), h:py(30)}); + //lake + g.setColor(color.lake).fillEllipse(px(-15), py(52), px(30), py(57)); + //trees + drawTree({tree1:color.tree2, tree2:color.tree1, tree3:color.tree3}, {x:px(12),y:py(52)}, {w:px(13),h:py(13)}); + drawTree({tree1:color.tree2, tree2:color.tree1, tree3:color.tree3}, {x:px(48),y:py(52)}, {w:px(13),h:py(13)}); + drawTree({tree1:color.tree2, tree2:color.tree1, tree3:color.tree3}, {x:px(34),y:py(46)}, {w:px(6),h:py(6)}); + drawTree({tree1:color.tree1, tree2:color.tree2, tree3:color.tree3}, {x:px(70),y:py(46)}, {w:px(6),h:py(6)}); + drawTree({tree1:color.tree1, tree2:color.tree2, tree3:color.tree3}, {x:px(90),y:py(52)}, {w:px(13),h:py(13)}); + //clouds + if (color.cloud1) { + g.setColor(color.cloud1); + if (color.cloud2) g.fillRect(0, 0, px(100), py(10)); + g.fillCircle(px(3), py(12), py(4)); + g.fillCircle(px(10), py(12), py(5)); + g.fillCircle(px(16), py(11), py(6)); + g.fillCircle(px(24), py(10), py(8)); + g.fillCircle(px(30), py(11), py(6)); + g.fillCircle(px(35), py(12), py(5)); + g.fillCircle(px(40), py(12), py(6)); + g.fillCircle(px(48), py(13), py(5)); + g.fillCircle(px(55), py(14), py(5)); + g.fillCircle(px(60), py(12), py(5)); + g.fillCircle(px(65), py(11), py(6)); + g.fillCircle(px(75), py(10), py(8)); + g.fillCircle(px(85), py(11), py(6)); + g.fillCircle(px(90), py(12), py(5)); + g.fillCircle(px(97), py(13), py(4)); + } + + //clock text + (color.clock == undefined) ? g.setColor(0xFFFF) : g.setColor(color.clock); + g.setFont("Vector", py(20)).setFontAlign(-1, -1).drawString((require("locale").time(new Date(), 1).replace(" ", "")), px(2), py(67)); + g.setFont("Vector", py(10)).drawString(require('locale').dow(new Date(), 1)+" "+new Date().getDate()+" "+require('locale').month(new Date(), 1)+((data.temp == undefined) ? "" : " | "+require('locale').temp(Math.round(data.temp-273.15)).replace(".0", "")), px(2), py(87)); +} + +var i = 0; + +function setWeather() { + var a = {}; + //clear day/night is default weather + if ((data.code >= 800 && data.code <=802) || data.code == undefined) { + if (new Date().getHours() >= 7 && new Date().getHours() <= 19) { + //day-clear + a = { + bg1:0x4FFF, bg2:0x03E0, + sun:0xFD20, + path:0x8200, + mtn1:0x045f, mtn2:0x000F, + lake:0x000F, + tree1:0x07E0, tree2:0, tree3:0x7BE0, + bird:0xFFFF + }; + //day-cloudy + if (data.code == 801 || data.code == 802) a.cloud1 = 0xFFFF; + } + else { + //night-clear + a = { + bg1:0, bg2:0x0005, + sun:0xC618, + path:0, + mtn1:0x0210, mtn2:0x0010, + lake:0x000F, + tree1:0x0200, tree2:0, tree3:0x59E0, + star:0xFFFF + }; + //night-cloudy + if (data.code == 801 || data.code == 802) a.cloud1 = 0x4208; + } + } + else if (((data.code >= 300) && (data.code < 600)) || ((data.code >= 200) && (data.code < 300)) || data.code == 803 || data.code == 804) { + if (new Date().getHours() >= 7 && new Date().getHours() <= 19) { + //day-overcast + a = { + bg1:0xC618, bg2:0x0200, + path:0x3000, + mtn1:0x3B38, mtn2:0x0005, + lake:0x000F, + tree1:0x03E0, tree2:0, tree3:0x59E0, + cloud1:0x7BEF, cloud2:1 + }; + //day-lightning + if (data.code >= 200 && data.code < 300) a.ltn = 0xFFFF; + //day-drizzle + if ((data.code >= 300 && data.code < 600) || (data.code >= 200 && data.code <= 202) || (data.code >= 230 && data.code <= 232)) a.rain1 = 0xFFFF; + //day-rain + if ((data.code >= 500 && data.code < 600) || (data.code >= 200 && data.code <= 202)) a.rain2 = 1; + } + else { + //night-overcast + a = { + bg1:0, bg2:0x0005, + path:0, + mtn1:0x0010, mtn2:0x000F, + lake:0x000F, + tree1:0x0200, tree2:0, tree3:0x59E0, + cloud1:0x4208, cloud2:1 + }; + //night-lightning + if (data.code >= 200 && data.code < 300) a.ltn = 0xFFFF; + //night-drizzle + if ((data.code >= 300 && data.code < 600) || (data.code >= 200 && data.code <= 202) || (data.code >= 230 && data.code <= 232)) a.rain1 = 0xC618; + //night-rain + if ((data.code >= 500 && data.code < 600) || (data.code >= 200 && data.code <= 202)) rain2 = 1; + } + } + else if ((data.code >= 700) && (data.code < 800)) { + if (new Date().getHours() >= 7 && new Date().getHours() <= 19) { + //day-fog + a = { + bg1:0xC618, bg2:0x0200, + path:0x3000, + mtn1:0x3B38, mtn2:0x0005, + lake:0x000F, + tree1:0x03E0, tree2:0, tree3:0x59E0, + fog:0xFFFF + }; + } + else { + //night-fog + a = { + bg1:0, bg2:0x0005, + path:0, + mtn1:0x0010, mtn2:0x000F, + lake:0x000F, + tree1:0x0200, tree2:0, tree3:0x59E0, + fog:0x7BEF + }; + } + } + else if ((data.code >= 600) && (data.code < 700)) { + if (new Date().getHours() >= 7 && new Date().getHours() <= 19) { + //day-snow + a = { + bg1:0, bg2:0x7BEF, + path:0xC618, + mtn1:0xFFFF, mtn2:0x7BEF, + lake:0x07FF, + tree1:0xC618, tree2:0xC618, tree3:0x59E0, + cloud1:0x7BEF, cloud2:1, + snow:0xFFFF, + clock: 0 + }; + } + else { + //night-snow + a = { + bg1:0, bg2:0x0005, + path:0, + mtn1:0x0010, mtn2:0x000F, + lake:0x000F, + tree1:0x39E7, tree2:0x39E7, tree3:0x59E0, + cloud1:0x4208, cloud2:1, + snow:0xFFFF + }; + } + } + draw(a); +} + +const _GB = global.GB; +global.GB = (event) => { + if (event.t==="weather") { + data = event; + require("Storage").write('mtnclock.json', event); + setWeather(); + } + if (_GB) setTimeout(_GB, 0, event); +}; + +var drawTimeout; + +//update watchface in next minute +function queueDraw() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + setWeather(); + queueDraw(); + }, 60000 - (Date.now() % 60000)); +} + +queueDraw(); +setWeather(); +Bangle.setUI("clock"); \ No newline at end of file diff --git a/apps/mtnclock/app.png b/apps/mtnclock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..08330429484759d65cf2e89d392799b7be063064 GIT binary patch literal 2212 zcmV;V2wV4wP)uYO6!r5h@^xZ8ZpLrwo*#5I`9~3IidD0SP9Cym^I?y}S3< zKk{BS$tD9X&h$HTW_I@X{hoWy{hf1v=kCJ)0l=sR`#~Z_w^$8Lx43~pfexm#aM?bTRY*QC-CIm3a=w90MxSO zD^y`osmlHOqI&kZ=M|uUbU*YCo89qEC-`?1DVnC=8Z&mhDk`Z^C1us>!o}~@+1&GL zRO)DDvDyqEr9B5y%B@nuop?NMGM-z)iWirmP$VWM zVYupaX|e63?S4o%P4j2ZJe$G0o3{}j9;OG`9sg{He@C%J2x%scnxz00pOB!05K0K4 z;^Pw(pc018QbKA9DYy90H|<_wahb|1xY*VH=@QZbH7sqlTD;4xM$LasX}VR7TlBUX zx9Dx9=~gvt?rZ8Nn+-K!<|<$P;Lt7B{OFiib?Qu>Dk-aO?w^cK^-mK-C%7p>%46{< z6Ks$FX15el1Hg2XeCn-}T5x1syJQ7ixu&>Ld6|8g z!*JcaQeYZ&Zvq=aqI*(PS;WG{OW2W>MS0m}=FXeXkt2sFD*g^>3C5_qQD7Q%gMpfk z0@M6VV55M^(^l@3-FiRRAz1(x3wT5b5xs^`cz9bBO3g@kaFY4N8;8a9@=NUb=&wjy zC`qHAWdE+M)OjSMmwrzCkeOUM^j;KF+=o&-??eLWK<2QtRigh?|I1SffhGldcyE+4 zsmMFXpjp2XaRWw^IC3Uo@lJ-Ot>S?x^9fIIGBj;9(Y*(uMv$v`4JA>;rP9(R(O`hu(`oh(wgi>P!L) zfXrcOt404u7IZoIMl|%}C6FS7+?9|rPEO3& zD1_+Bv~fFh9ZXXY;T%V0!I$Li-AM0|GqH!q_{G0jSvUiwJ_Sl!^1P#S2&rcUg?6({ zUA|oksZpADl+wJTT?*P;+gRVjf4LbwD74*vD9t-cP0`UNzAZG`A}zL$@tT*s6WDIZLa z(eXW`Oijlc)z@b~=ndB#Af)`0ZgU`Y3n#PIayjP^SBmp_>>o?0F%9;oZDj8obBIeG z+hGF!XzN@cbt`&MDB161P*YWmkh)Lp!9UI+(mA$?ZyL3KF+J|1z_~_$^8gR^V@#8c zTK;48eAx!I;PRVl;Ic=Q_j-GFceTO<=0bB1yia{O31Fa*qP9n>(;T^UIsjqP%8;dx z5;wjdLX!qCxPj|!-;-8J-~+gQl&}jaPAXG9Fl5mr9I;_d3#L+3l~$9xF&k;s3QU*h zA)xji(6)jTA#QfG#X^dkK%aX->uZ=BgAmy<3kHk(GAFcJD0<~Tly5nuP-+rz;9k&r zClD+&c_t`6tk4A%s=FOZ_Pt2(6{%`Y-5w zBQ@HQ0BL^?%{}mM;8j}p#QngWG5vc0a5%RZ;6vb23y!-%J2e2>eRP0{fXbYmsxoJ% zHfBAsBhmM*)!SNVgw5U|C7@crSQXcrrq?;ZaG(OH1oD9b>bJBj(1E@U)(waToQ>Cv z4zv5^pe;B6e*58<)Ych|-!1eeNhw`Gj%k`X)W7280ues^IU54(4-Ak}CIiW)Y5IK0 z{{4>Q*lkS@nl}Hr@ik66fS06{%cYdo2@@xYnX{fCIb|R{@9T-hYNe{OlCrW=E?hXz zxtttwa?X%*_N=?K^s-+&+P!<6J2@pqPfi}lfaGNQ^l=gs6H8RLZWt~X-+p_E)2C0d z^OGGMK6DU-Fg$Me>%i~u`pMlpf$^HA{T=8&JME`p*$XR3=+VQUm;ktT^(y&a=Tlx* zN_BNL)zwu9A&7{GBq}P3=$Kgg_3cMkc(|V)6&KE*XZ^ah?EEAPP18yZ!*~kF_Laaw zA>@Xnq$D={`5k@G;30koez##5248)3f|r&rB|ksUG)?nm>UX0FPt)}SB~bP>G&k`< mU=3c!^F0g$AMXP{Nc<0}ar!4=8a7-20000Px_xJg7oRCr$Po!PdlED(fG-v6OdL>;Iz6g_t8TnLPLMYp$QtY=3szbBfe zD{^{x;Z0y8>~8`eZwMQ;CZ5eEuz?4Dw)gGpg{LKOZLEjM97%(Zb>hhPGkw#|2eytz zOi5r1(ZzY_w70$Q{hW5Y?@&xdV04F%n@%Ia?S1d>=<4@@pB5 zn1;ZkzJ0L?ya^1(Sx1cMUo4~6O7}@%2K*ZLM*aTJ(*hn)r9{Bh)==%WD?;q63 zyCtq~0t*RzPL02RdCR{ntM|Yk@rJK`w?B;38oHO~Z2}7j9Q(SXHUC5`=}aAgPw^(` zo%oC2oL}kL1jY#*YxOVukgQS!B$g967H>@82*{EVHPbztzzhQCR@6CFGiPxbfp6k1 znBT=oya`MbI8WXnjB=dl^ZT1f6p2sZoOp8tegKI#fdK;7R9IK{HzGj%u?hVBxOk>i zweZ8DB;EurtLxavAQ4I?IDUt-mWoHCJ9WE7bGw+I2%H%b=t>R`5`zT zy?B)b{xw{lz-;jfkD=lAeP9BIxcEXNvQiZ+zKeFOe$?LyED^7Sz}pMU&k%MZG92GU z%SY|R0ob|{SS(&4fraZo{kZke&e~qsmb~;?2(*X(2&@sWhQK{Y9JEGnwZpz(H#C8@BqpOO^n{|Z#j`~v+KYE_ z0;@<&iWfB7N>?-siMxn*6S%-fM7*51wFbkV0dRcuW!&#%^%L(y2+Yyi3l=X(V56PF z5lQSD-$kdcm7@^c(`y{@vPOkXym%xMyT^CY8OP!*#Hdk-?6g}N*lh7K2^ZV%7Dm}0vi9gk__QvCj_epW!nwX^`HX^VciT~cG)J7|&5btAl;@n7VOknNVjf_{8 zc;tD+y9s=K1)NJ_V*+2ICr)GIJ4VW$c`EU40;eiLP`!sjhWV6<@>5!lNUk4RMR3~Vq8 z7bP$t;+6zH#b$B19sGPhS4>^f>qp_j1g7GQjS0*U@p)9>CaRUhOZ5*X?!^gQX{0U$ zjt9-F{9{kIzB4-UifN*uH`W(uZ35p;Jp}>%K8n_5+PsUnOx(}Abe7@`gJuwtZx76| z0TJK9qsk@r;Yue~;b@9699 zDG3sUGX(J`RXd2dPTa`iSlXNT{KTiu$N9|>M6Bt5jdZUr3N#Y(c)?XVas?)03W`B+!f#XhW-AYbkrm{U3_u;5T z{=ANQ2d{N=x;!tANmC75x$aBgqmYWyX-#Q)De6H8iUC{Wy1r;?UaMF#j zfLoAQPeUrv!Ok

zK0B-PAd^1cq&;&Q$yo^Igsnddkt*mom2E@X`_3L%C8EsWM9J%Nwj zyzmu3L`UF~cyk066wbQS-14gp-T?91cOmcgz=Mgm=Iapu z-)RjX1*vN08rB0(+KH;ppcWmmpQGBRv52|kHSxYw8zAjTj5?kNCJK~oB%~5jG_<~t zS^sSCKFy=S+CbY(tU(X-_w8^!bx)-Nc2S7mLsmWcPjw=BPFSlV;r&wbnh=-~{h->n zbe%_Fq7g^!L}}x2?;CCK3N?RLn_GW0y=6OX0&9D@F!Oj3Oezv7iP7hw>8v5Q32f*= zEy<$UsWcjs=7$J_$SvDx6WFM?t;vECElnpSZL9KIKW7toAp#qX#btf!7JZ%P?es;5wT{ldJIyXmP)v8m@F zLY59zk3s6?c`Y{=T8a111SBH>>2yh_dgWUqMNa~k>MI`nau>tW)C}Ye6}k|Z)7hL( z@X8nI6=cv*6t*6$viy9$v1Yw9)>{0RC`7KaLt|?eB3}6-jio6!l7DUxQG5+ajd5}Rx zp`AEMC!meM?cADZa^j;FROL?=@OBz&_23NBUgVu^2M*qe3nPuw38;93y@*A`As`}t zP6$uBT~3vQx*pog07xcazeDyeZ+Z{HF^wM_jb>Gxc2(Ly% z29?HJpRVO~7!F?wFmaqKC0*^6u zYyxMd!A;;X#EHzXo4}jEQ=UT0o<^%F9$DBRBZfM?Ma5mY9?dfffz~&_oxP(EX#3UD zJ%Yffh^^nCD2C<+i#`Mw#f8HN>BVnkaLy1|EO<0WJT=eP&IsSIaJ^^cb!6wPCN`;vIcGC&^$sTj)6J1hVD%>%pf@r^Ld%@{m5S#QGX?Uc#KtWL zm0x|$@JHB9V85sa`A!^H#0V+5d6vFIAzfHfGmY9dq-U`QC-4YfR%$2UIPlDsls1m! zzR|obTAo?^7mh+mI&;=Wk(PUaqXD9BlGb;G`!<1%RELso)N~_=Q8M~Afens>8I6H% z8tV37gNEA#RyN|OL`BOrvv~gkQ_4=9y%D74U!~ck^&jEBO<&My zW~GBTpW<1F+^1EwX9P5jRr+uqr%@nyMLTS=%0(Xi+tTZxn zXd2MMi3qB#$4dSD7y@gE>UkESSGiUZ@gqF2mRPIZzlwN2^;n+3y$Cnzb5|1Y^52D6 sjht5XSxLmp5_nVs_Ab{-;{6c#Kb&>(c|d^0Jpcdz07*qoM6N<$f(x!xumAu6 literal 0 HcmV?d00001 diff --git a/apps/mtnclock/screenshot2.png b/apps/mtnclock/screenshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..730edbab5a618d7d98524656b7445cc56dbcb645 GIT binary patch literal 3856 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 Y0dz>%728&#g8%>k07*qoM6N<$f(O|K)&Kwi literal 0 HcmV?d00001 diff --git a/apps/mtnclock/screenshot4.png b/apps/mtnclock/screenshot4.png new file mode 100644 index 0000000000000000000000000000000000000000..8f2e1de907117a4378c87de973aa09711961a6ef GIT binary patch literal 3623 zcmV+?4%qRDP)Px?;Ymb6RCr$Po$Y$#st$$Q`@iU!$7$R;HlU?1K%oAab9O+0w0JGc#QFaE`ug|f z{P*wQzpwA_Z|70c{Ei+tRP_*W3T{U!#9VVxz%iGSv)<7IDc}H6zg`iK|IPhdIekk3 zbJftX{V80pe>*P4Z75d(d*sp{Hr>1{G%TU4aH#M%*RBGVI(656UZh3sM)Z3McyQEu z(iUCnOgS@k#ob!KlylI4OWUDj9Mw*`uAcq274TgYJ)J%yb!+RNiN>WlZY$u!8KVe1 zim1|Ydv0#-SX&F2>nv^iNaVe*bygCmfVHY*^p_HFmVS(-c5515z@yTDT7*jTiA>(v zNgQ6l-L^U~Q0>NW7J^#M18_yRCMjUT)m*}B&nMALLB{zLj2v{<4 z)R{fnMImFadG_%6Z|Sbb>s4C|>iq=Jdb4B>%+G->W3Uy0tv5?AqD3921TO0sOd;T& zmmJI8pY*Lqu9XK{#$Y=ETW*%9Wb8F>OJCP)rGOP)P6EpatZ@0GtC4_@mo6Ws_WJ8Z zvZ&+GYS8P(NWiaZ{@2%HKjcE?YDr)Pfq(U)6S0wi&q?5up~OM&-tjG>lCjsk>k+!^ z1=r2prh$OpgP%JJAhC5RWt5bYzzhQ4_3>e+4&q z5_cQ4y2D2C(SO_|FhJm%E~*5k;ddQXNMOGm%Ncb5^w9F>gT^VX9W&xsiVCd5nbv*c4nuu~rVIy9@vdBs(TvK}h} zW{S7N6BoVA{4LB*Ozr$;AnyIiUO~V@@k$B22#HsxusL~sa$uo&)dcRH6Z?#(CETq2 zXC&`Q;tPS5;?)wk8;L7*Yl949MGCu-*OtIa@rEHVwN9OiXC};?2@80(s{puz46Ie}RLcA1#)#LxX_&UPh5c2LpU}?Qp zOWwUm9Fe?n2+SrSC|;Dn?C}e?kQ0*Fy}pb3cg-q9{rqS9k_?Jh>@;0Mfaap!?IIJm za28^+Ixw|!s~Td8mm0^RPCP?SJPmpG%7JS+DO0p!@~)8+uSDK>Ik53LQueoJALGl@ zi4i28j=XylcocbKl6Xb(CV{0nupx;LhI`U@Xnhy;uQIKh^en_Ighl5ePbaQDt*Z|! zlQ%wrwK)_@2(+DzhF?~+R1QI2ZT#NkP6AsTCH=h&8md_F8_YY9cO3#tcQQ&=X**jj z|5|I&ITU%Nal7TrNnld~+g2&~djQSZ*J*dY)M}n@WJrm}-O<`{(EfZC@_L~2n6+J2 zArxPOQaTUMHF=uETdzY>>DSuUBQQ$h-bBJxiM8xKf3NYB5Xl_aH3#;}iIcqRRUxXU z$AsUBo0K@}GaO#)lG;rIN63M#NSx%2e;$~-(`!4NYsb2Ml{{w(d=snn__Nqc0&@sl z5r@)=cr`*wVk`2_wtoG()~!N3PK~{t_4_?hz4N4{pU-}TsLV+D{y~Y~;f@zFDSq3+ zYF7Z!LiF?m+mnQIN;^g@00htHv2s|u3zzF&%O1RAzB(B@| zWq9MzSj0hfZ zAn@&OUo2AVO=V?|BChx5wOYquJ4R1Lou0&vzLAN*j+~=~2a>?>6@uw*_h%@B2@3n| zeyZ+WkAC<^wjN^wQ1|d2J41Y^5hBg~R!GQ~I~o z{V{RgI6(>QAFdoBh6j?s(p>J*&-)5AT2MSPR?|N6%ETKdpTv#UMUJoXfB}Ik<5zPY z-VWp6!1cBtef_9@lzxSCU|t=s+fC^K0|HkHp377rQ1VoAV6z+>od?>Et4Gu> z(XN^U%j_qCxpB<)Q+dFEz|nI++0OsV&7-ZKt3R!O-u*KN<~lyx@8AIifeH7Z8+Y0q zk&TQ`hfwS9zHX_UsfAQNN4t^JY8%QNm~>z^nArmg0+)Bjswe-cdUW;WnB7TBKI&rX z5k)E1&e~5&U}iY8`CJ}I0vi$1nk*FY>Cdf%hLM$?&yO8zKP7>!;+%GdcpwS99D%KM zlmxc+Xxd8;{CdEgz-TU%?QF^Br)leX+Sjm#a*FRMA@>3lO*#jJxZ80*(K9 z*~Mq@Y+0HUXI(R{N#lXkD zo*dvXlO{n4%*h33Xsd}8wOJ)slv*E-uQY4gt?vhcOGKeaaSu$Xy_a20?n{YRaz)`1 zn`-~FzEOWc3CwlZQ@}P(_p*DguVkMyCZ}y{Os>DP{ig?@I&h102!SP}^s;;0&DX97 zoI0>%ejNMbgc^gqXH`c1Bu+viBshp&q|JS-RxZl1$7!1cMj|e2qav^*w?&@Zp>}yh zJHHX|Sq-`7>>PW31eOKTuGa!M#0)s+_h-V7u-0(8kx#x0K*B z4Vt=XX&g;8Kts$@l|f^Vs@9Zp@6RfPUyym07bY+*UY@It)|7xLsv;wzHCPT+Ic<}` zNR(u4pd6Tb;)K;R;^81bBc znZ!d zEhY1l^g-sga~sxqU~Mjn5c4FlgmBU-2PJ^gx+U`~=h)Qfy+035V9Oe>#`RXTN&;)5 zFn?d@Jg}C$+?MR7c4laQY zd)8~B=9r&=sM?W zmjsTkyUpjH1XkaDM_15XMCInlN#N-E+kE~>U@?JLQBD$gl}P3~0(u|`%qDQaC^x6P z5P{DpN$7b7N6+Ej$$MQBO77bHwdW>0{Ia9X=4rG$VXaSpNeTUWm(crHfBuB{ z+IEjqRkhEle$;PLa5mB0!djHTcM4yL)uI>rnU;X3C@4F%Wt=p_E=?Hg(hD|}ug z@Il@?p|1b`B=MEdbt2W@d~-TblS?BcmF2+o@ZNJ@M3{GL)Qbf_ed8&$1qu8q;H#K_ z-oAbhSS_G6il6`8;wA_oY3-b@v~obL|0=hUzVVd(EViozZoO0NPT&@iOYh$;kz4wv z9}a=faj!&vj!TE8wjoM4zoiX^{x^CinijFi+x%AYNv0YhYXqY1@;w4a5!gBhZizRR zfHmTur*D(M$6bAiaFGaHBlPpXV?m(=+`9Q~-FQ+P5t|*S)dmDU^WEAFM~&1dxl8#p zCj?0U(p)sTH*&*Px)M=&e}4gUJw0c8lE9_&nc6CZHV3A@1x(eiuc6@F$Wg*?rATNM zf-@hTq&6XN$w^!aSzkJ-%Q*5L35ifBO15Z!uk76YO4-(lb=}?@pGNBw)Om%uAc6aY zbgxn774RBy*pR?|12?aLlfZqIkfWss3Le;qz#0Ef499@v1u!+kv21lAz0 t*{{`47M+~VW*%6Wz?(%9UhY~1{tuw@(l_5tSpEP2002ovPDHLkV1n8;7W)7I literal 0 HcmV?d00001 diff --git a/apps/mtnclock/screenshot5.png b/apps/mtnclock/screenshot5.png new file mode 100644 index 0000000000000000000000000000000000000000..b34a3111ca81395be3b6644ab7f576222029c98f GIT binary patch literal 3427 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 FV1hRXwUz(? literal 0 HcmV?d00001