From 0bf99b0af824ef96488aacefd8ba0ccc7173cc0c Mon Sep 17 00:00:00 2001 From: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sun, 5 Dec 2021 17:14:06 +0000 Subject: [PATCH] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 5ed43a28b5b9d6820ee898f632535747c1e5913d Merge: 4cf9192c a385c099 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sun Dec 5 17:12:45 2021 +0000 Merge branch 'espruino:master' into Base commit 4cf9192c4341a85eab1198b8663f48d276704ac3 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sun Dec 5 17:11:25 2021 +0000 Update core commit 69a54194a9eb41d0722fc061bec5c900b724e8cf Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sun Dec 5 17:11:14 2021 +0000 Squashed commit of the following: commit a385c0992280070dbcbd91b8663600ea42d2749c Author: Gordon Williams Date: Fri Dec 3 12:04:40 2021 +0000 openstmap .10: Improve scale factor calculation to fix scaling issues (#984) commit 052eb41ebc248ab874f7b188318db48638957a7f Author: Gordon Williams Date: Fri Dec 3 09:20:13 2021 +0000 Stop crypto polyfill being pulled in - fix http://forum.espruino.com/conversations/369197/#comment16294286 commit 6baddd3b433d318d196c0f2d1c73df2572f2600e Author: Gordon Williams Date: Fri Dec 3 09:15:37 2021 +0000 Add gbdebug app commit b5fa5fb64e60e70fc104bd60c08a7ef12b2c3146 Author: Gordon Williams Date: Fri Dec 3 08:24:12 2021 +0000 tweak for lint errors - still some assignment warnings commit d504017782a5ecf7b80da27a1c855f95865c86ea Merge: e2ae57fa 633cad5c Author: Gordon Williams Date: Fri Dec 3 08:18:47 2021 +0000 Merge pull request #986 from stephenPspackman/master pooq Roman - a watch face commit e2ae57faa4bb2c338f74daa538971c67c02b687a Merge: 79f37b2b 3595fab0 Author: Gordon Williams Date: Fri Dec 3 08:13:52 2021 +0000 Merge pull request #951 from rigrig/qmsched-clean Move Quiet Mode LCD options from global settings to the Quiet Mode Schedule app commit 79f37b2bfa208a6b831d1240c90d3c019ee4d6a5 Merge: 56b9e04f b595e603 Author: Gordon Williams Date: Fri Dec 3 08:12:21 2021 +0000 Merge pull request #987 from hughbarney/master Pebble: use LECO1976 font, update boot icon, redo screenshots commit 633cad5cd3f312bc9db84623dfe4e9b6d7199e57 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Fri Dec 3 00:11:07 2021 -0800 Update app.js Fix (hopefully) time zone issues and boundaries in the event scanner. commit b595e603334f701cc5feb7e29a2eae804e4b250c Author: hughbarney Date: Thu Dec 2 22:17:00 2021 +0000 Pebble: switched to LECO1976 font and slanting boot icon commit 3595fab079eb6a91596bc994c7d744109ed5c4fc Author: Richard de Boer Date: Fri Nov 26 20:05:40 2021 +0100 qmsched: manage LCD options Also migrates old settings file: we now store options in qmsched.json, instead of in the global setting.json. commit d743b2266abf069297de59248cb366d6b04ec63c Author: Richard de Boer Date: Tue Nov 23 21:27:37 2021 +0100 boot: remove Quiet Mode options Updating these will be handled by the Quiet Mode Schedule app (qmsched) commit c24f67b06bbb5417355398149b8e4ad12f8d0c19 Author: Richard de Boer Date: Tue Nov 23 21:25:26 2021 +0100 settings: remove Quiet Mode LCD options Updating these will be handled by the Quiet Mode Schedule app (qmsched) commit 32980bf3befaf7a047cfc808df2d9cbd547813ce Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 13:04:29 2021 -0800 Update apps.json Declare pooqroman.json, our private config file. commit ade94521b7da3217c6210d0d5e8873012719a792 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:57:25 2021 -0800 Update README.md Github flubs UTF-8? Really? commit 2906e228bad106b86c176ccf8e1639f3c67dd556 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:54:03 2021 -0800 Update apps.json commit 9c8fd937839ab2fd784abd28e2e991b5d010cd26 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:53:18 2021 -0800 Create README.md commit 6ed4565ee1feb936fc341207cff4e058eeb37150 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:16:53 2021 -0800 Add files via upload Upload the right file this time :-}. commit 98bb9c28b3aac54a7a65e2eefd28dccba5a8dbef Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:02:15 2021 -0800 Add files via upload commit 4803365ab3f8a6b3e2f9a6f650b642326a952010 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 11:49:28 2021 -0800 Update app.js Conform to filename conventions for our settings file—it is json. commit 8ff08cbaab00ce915eac1cf66ac2af4aaee220d9 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 11:35:39 2021 -0800 Create resourcer.js commit ad96a97ae9fc12d8d93dceb60d1c861ce60ad630 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 11:34:25 2021 -0800 Create app-icon.js commit 2fc3cee13926258243f86a791c2e175cc9ceb07b Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 11:27:53 2021 -0800 Create app.js commit 43a68fb908f7eca0adf27079b5be3cbfa2236fac Author: hughbarney Date: Thu Dec 2 19:01:40 2021 +0000 Pebble: 0.03 changed font to Leco1976, updated screenshots commit 56b9e04ff0575334c07849bf83f829fc98c08472 Author: Gordon Williams Date: Thu Dec 2 10:37:08 2021 +0000 new core commit 9d26a6448ef93694da643b6152439bc4db516e96 Author: Gordon Williams Date: Thu Dec 2 10:28:38 2021 +0000 launcher 0.09: Bangle.js 2 - pressing the button goes back to clock (fix #971) After 10s of being locked, the launcher goes back to the clock screen commit 5b967184b671315b2d474e1f5eefeff9073c1bb0 Author: Gordon Williams Date: Thu Dec 2 10:07:45 2021 +0000 0.03: Fix unfreed memory, and clearInterval that disabled all clocks at midnight (fix #946) Fix app icon Change menu order so 'back' is at the top commit ce2d1822477e9bc1468fc77f5ce31f4dc850a8cf Author: Gordon Williams Date: Thu Dec 2 09:43:03 2021 +0000 tweak 2v11 firmware mentions commit 829ee9129a8bcacd443c493e9111166bfaaa4b0e Merge: 0cb1dfbb 7a1bb02b Author: Gordon Williams Date: Thu Dec 2 09:06:21 2021 +0000 Merge pull request #983 from hughbarney/master Pebble: deploy settings file, updated README commit 0cb1dfbb82afe9a1d3adc96489b8883c70775469 Merge: e0018a49 3baa465f Author: Gordon Williams Date: Thu Dec 2 09:06:07 2021 +0000 Merge pull request #982 from rigrig/delete-settings-library remove Settings module commit e0018a495c3ea51cce4e3834db0ed899c2fc3872 Merge: 7218acf0 cb8ee706 Author: Gordon Williams Date: Thu Dec 2 08:12:16 2021 +0000 Merge pull request #981 from andrewgoz/master New icon, improved UI commit cb8ee706252666bbfd215af26ecd87acc39d077c Author: Andrew Gregory Date: Thu Dec 2 16:05:36 2021 +0800 Update app.js commit 012982e910436c5abe2ad6f28f68a96762343a18 Author: Andrew Gregory Date: Thu Dec 2 16:03:22 2021 +0800 Update README.md commit 7a1bb02bced4f0080d838bbe7ca3923b1e8d665f Author: hughbarney Date: Wed Dec 1 21:07:41 2021 +0000 Pebble: updated README commit bd8bb638d434df8a8cbfab84272f39d1a86b0755 Author: hughbarney Date: Wed Dec 1 20:29:34 2021 +0000 Pebble: deploy pebble.settings.js in apps.json commit 3baa465f01e5df16ff15311ec91c7896eabd345d Author: Richard de Boer Date: Wed Dec 1 19:34:52 2021 +0100 remove Settings module Better not to have this at all than to have a library that you can't actually use in widgets/boot/settings code commit b848c45ce4618e7d9d737437a30812bf14c1cea0 Author: Andrew Gregory Date: Wed Dec 1 23:42:17 2021 +0800 Improve token display Limit label length. Reduce digits font size until it fits. commit 86ea0554b37139afc295437d45b2d85c9b4aee3c Author: Andrew Gregory Date: Wed Dec 1 23:26:45 2021 +0800 Colour icon commit 3305a5db6ab4e40ef45ea54513c656b503195450 Author: Andrew Gregory Date: Wed Dec 1 23:23:44 2021 +0800 Colour icon commit 26cc978a40ffcf415db086025cc63910f7e8e943 Author: Andrew Gregory Date: Wed Dec 1 22:29:37 2021 +0800 Update README.md commit 21961edf42856a2b82f45a8bbbb6751247fa658d Author: Andrew Gregory Date: Wed Dec 1 22:26:01 2021 +0800 Update ChangeLog commit 4d239bf71e5cc8312e3a5c762088c27ad9f20491 Author: Andrew Gregory Date: Wed Dec 1 22:24:43 2021 +0800 Version 0.03 commit 16f20970d9294d144347cfb02605d1ddc4472be2 Author: Andrew Gregory Date: Wed Dec 1 22:21:21 2021 +0800 Limit scanned label length Fixed #5 commit d4ddf22399667a2cb98f73c375a98f11869512a3 Author: Andrew Gregory Date: Wed Dec 1 22:15:55 2021 +0800 Try new JSON settings format commit 60a8c487ad9035780ffbaf0a9a5db88d9743fe99 Author: Andrew Gregory Date: Wed Dec 1 22:05:53 2021 +0800 Support updated settings file commit 7a9b64a7fd9667181294406de59975ef240a010d Merge: dfd7a02e 7218acf0 Author: Andrew Gregory Date: Wed Dec 1 21:28:07 2021 +0800 Merge branch 'espruino:master' into master commit 7218acf0b470bb6ba2300ed7cc4791ceefe0bcfc Merge: adca628e a789e0be Author: Gordon Williams Date: Wed Dec 1 13:26:44 2021 +0000 Merge pull request #980 from myxor/poweroff-icon-color-fix Poweroff: icon color fix & README improvement commit dfd7a02e12f977e45699b6a1bbbd49c22a385633 Author: Andrew Gregory Date: Wed Dec 1 21:26:41 2021 +0800 Show placeholder "Calculating" Fixes #2 commit a789e0bea4945dd4461469b26f25744a9a3dc46d Author: Marco H Date: Wed Dec 1 13:55:25 2021 +0100 Icon white with 1px black border commit ca6b73e3e48c2a2b1ee157a6d02d166a0195324c Author: Marco H Date: Wed Dec 1 13:54:49 2021 +0100 Icon white with 1px black border commit 871c345cea41816a167170ef019fd6f041f0ccb0 Author: Marco H Date: Wed Dec 1 13:49:25 2021 +0100 Update README.md commit e2a4428be2a8369d51c30b4b34d367983f35c672 Author: Marco H Date: Wed Dec 1 13:48:03 2021 +0100 Fix gramar and link in README commit 2d190278f224253b969b8a0c742166d4fe193147 Author: Marco H Date: Wed Dec 1 13:45:24 2021 +0100 Change app icon color to white commit f3dffdb3e1d43cce05fde4a1bd31d043c758eedb Author: Marco H Date: Wed Dec 1 13:44:12 2021 +0100 Change app icon to white commit adca628e2ceff835b4fabdd2798b1b7b99ae0d33 Merge: 38c6e160 edec2442 Author: Gordon Williams Date: Wed Dec 1 12:06:47 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit edec24429acc747b80c0be6736a5919559bc3f91 Merge: 013d7704 43312a78 Author: Gordon Williams Date: Wed Dec 1 09:37:09 2021 +0000 Merge pull request #978 from myxor/mylocation-spelling Spelling issue in mylocation README commit 43312a782a58cbbe6cf2f8c4d49ae1d898bc82d5 Author: Marco H Date: Wed Dec 1 10:23:07 2021 +0100 Update README.md Fix spelling of the Scottish capital city in the README :) commit 013d7704a9997079de9f4ef0eee61745504d9e37 Merge: 527bbf8e a9530f64 Author: Gordon Williams Date: Wed Dec 1 09:00:19 2021 +0000 Merge pull request #973 from rigrig/widbars New widget: Widbars commit a9530f64ea9b0ed1e96dd1ddf6eac897943ec223 Merge: 8580952e 527bbf8e Author: Gordon Williams Date: Wed Dec 1 09:00:08 2021 +0000 Merge branch 'master' into widbars commit 527bbf8e59798bb73f0a7859c3f7f290dc31c111 Merge: 68b73d2e a44d5420 Author: Gordon Williams Date: Wed Dec 1 08:59:27 2021 +0000 Merge pull request #974 from rigrig/widbatpc-fix widbatpc: Fix drawing the bar when charging commit 68b73d2e17df1375fd0f6fc5b4172ea484b95444 Merge: 097a3153 1108983c Author: Gordon Williams Date: Wed Dec 1 08:58:35 2021 +0000 Merge pull request #977 from alainsaas/master New app: A Speech Timer commit 1108983cbad1f5a8cf2862bb5b03d8592e770303 Merge: 3c7d6b79 097a3153 Author: Gordon Williams Date: Wed Dec 1 08:58:30 2021 +0000 Merge branch 'master' into master commit 097a3153952073b468bd1fdab0029e66cb747fe6 Merge: 3ddd1696 24e2b01e Author: Gordon Williams Date: Wed Dec 1 08:51:48 2021 +0000 Merge pull request #975 from hughbarney/master Mylocation (APP), Pastel sunrise, sunset, A Pebble Clock to keep the revolution going commit 3c7d6b795d50aac5d6c3945a4a9af1ee013154ad Author: Alain Saas Date: Wed Dec 1 15:28:23 2021 +0900 Update apps.json commit 3507dcde457b78beede4ee033af1f38090a1a71d Author: Alain Saas Date: Wed Dec 1 15:26:52 2021 +0900 Update apps.json commit 541adf4c16c7bf2e522c3343b7675831b9e13343 Author: Alain Saas Date: Wed Dec 1 15:22:44 2021 +0900 Update README.md commit 8f0856d8716af6e1058a9923e0e5850734303d72 Author: Alain Saas Date: Wed Dec 1 15:21:21 2021 +0900 Update README.md commit 13b01fe82955ca3ba595ed115fd1bfc6acd7a4fc Author: Alain Saas Date: Wed Dec 1 15:20:52 2021 +0900 Add files via upload commit 18c3461e6e4191433897f3b1e10a9f68f7b97fa8 Author: Alain Saas Date: Wed Dec 1 15:20:41 2021 +0900 Create README.md commit da133e2ccd7ee837d078430095733180929fff4b Author: Alain Saas Date: Wed Dec 1 15:09:06 2021 +0900 Create ChangeLog commit 9033db08bf1a56d1f852a60795eb75d2bdee0f70 Author: Alain Saas Date: Wed Dec 1 15:03:45 2021 +0900 Create app-icon.js commit 673fa8820f779a79bcfa46819990e5717a4d49ba Author: Alain Saas Date: Wed Dec 1 15:01:48 2021 +0900 Add files via upload commit 312bed6491d7a9341c7f9de4d1f309e2f85b3fe5 Author: Alain Saas Date: Wed Dec 1 15:00:58 2021 +0900 Create app.js commit 24e2b01e22e8534029bcf8195c8f4e5eba209208 Merge: 7785c7ea 3ddd1696 Author: hughbarney Date: Tue Nov 30 23:45:24 2021 +0000 Merge remote-tracking branch 'upstream/master' commit 7785c7ea56867250df5985d0a27a7fd35478e501 Author: hughbarney Date: Tue Nov 30 23:38:29 2021 +0000 Mylocation: make into an app commit 848ccd2be996e5127d09e36960775e5cb45a4143 Author: hughbarney Date: Tue Nov 30 23:16:56 2021 +0000 Mylocation: make into an app commit 8ad8ed15dc8e9fe4091d2f3a5b1faf7b828bb0c5 Author: hughbarney Date: Tue Nov 30 23:15:45 2021 +0000 Mylocation: make into an app commit 8e56dce22c49a1a80b4dc9142092ea5238ab34ad Author: hughbarney Date: Tue Nov 30 23:10:36 2021 +0000 Mylocation: make into an app commit 4cbd7e8ea63c5aef83f72ceedcad7a2cc811917d Author: hughbarney Date: Tue Nov 30 22:46:37 2021 +0000 Mylocation: make into an app commit e3745f94fc0fd7bf367727a1fa2f43c26bde89b5 Author: hughbarney Date: Tue Nov 30 22:43:45 2021 +0000 Mylocation: make into an app commit a44d542053941c7bb588e3d444aeb02ad6aba676 Author: Richard de Boer Date: Tue Nov 30 22:30:28 2021 +0100 widbatpc: Fix drawing the bar when charging commit 8580952e69609f53736089e72e1028117fd5c09f Author: Richard de Boer Date: Tue Nov 30 21:06:23 2021 +0100 widbars: comment out HRM/temperature They didn't seem very useful commit 7caac64a8653f06f95650228abc98018de8df9b8 Author: Richard de Boer Date: Tue Nov 30 20:40:33 2021 +0100 widbars: new widget commit 4669099645a46062a63a9e77771b7ab1cf531ef2 Author: hughbarney Date: Tue Nov 30 18:11:08 2021 +0000 MyLocation added mylocation.app.js commit 3ddd169612095949d6e10a0c11f8f283bdd1fc29 Merge: a20a2e42 31eaeade Author: Gordon Williams Date: Tue Nov 30 17:14:26 2021 +0000 Merge pull request #972 from andrewgoz/master Fix JSON save format commit 31eaeadee2929e93fdee2ee01974cf2779e5ed13 Author: Andrew Gregory Date: Wed Dec 1 00:26:39 2021 +0800 Update Authentiwatch version commit f094cc6e354ada59d50719bd8af60bfe1f258cb3 Author: Andrew Gregory Date: Wed Dec 1 00:25:00 2021 +0800 Update ChangeLog commit e1c67cf345cf0b1093caa7c41c8e8981de8f24cb Author: Andrew Gregory Date: Wed Dec 1 00:22:23 2021 +0800 Save in new JSON format too commit 989dc5ccd4ede2fcc8f9bc82d9d5c4ad84981360 Author: Andrew Gregory Date: Wed Dec 1 00:18:44 2021 +0800 Use new JSON format. commit 51c91bf9eede044c0093bf265855d149547697d2 Author: Andrew Gregory Date: Wed Dec 1 00:17:26 2021 +0800 Rename variable commit f127bef66b9c4c88e8094594a90ac4aad53b26e9 Author: Andrew Gregory Date: Wed Dec 1 00:14:47 2021 +0800 Load new JSON format commit 0e3b17be6757527c1f372fa8b9d5bbc8f3985035 Author: hughbarney Date: Tue Nov 30 16:12:47 2021 +0000 Added icon for mylocation commit c1a48e7b48ddb4087b63171bde681ea1e79ca76f Author: Andrew Gregory Date: Wed Dec 1 00:09:52 2021 +0800 Try different JSON format commit 78c3791c1e6af33dc127418a172a22b0b9c96df9 Author: hughbarney Date: Tue Nov 30 13:48:20 2021 +0000 Pebble screenshot updated commit 5b7bbd83db31769a8b255821729d1cad5d5a81c8 Author: hughbarney Date: Tue Nov 30 13:30:13 2021 +0000 Pebble: added README, battery warning if below 30% commit 4cf5d860834aed17316a9b02b38539c2f6295bf1 Merge: ac1425ca a20a2e42 Author: hughbarney Date: Tue Nov 30 13:18:27 2021 +0000 merged upstream commit ac1425ca7cfaf46041790a3223e1f3383f7a2ae2 Author: hughbarney Date: Tue Nov 30 13:07:56 2021 +0000 set mylocation to an app commit a20a2e4292cef623f15d5408061ebd8463672dd1 Merge: dec4ec8c c30ee355 Author: Gordon Williams Date: Tue Nov 30 08:28:19 2021 +0000 Merge pull request #967 from myxor/poweroff-app Poweroff app commit c30ee355bb1f857e42d82c99d8805095e68b88b5 Merge: bd1fa974 dec4ec8c Author: Gordon Williams Date: Tue Nov 30 08:28:14 2021 +0000 Merge branch 'master' into poweroff-app commit dec4ec8c19d070e9d980a83d564f9ad22425c89a Merge: c1dd7c6c d2cb4be4 Author: Gordon Williams Date: Tue Nov 30 08:27:16 2021 +0000 Merge pull request #966 from reelyactive/master Added SensiBLE app commit bd1fa974d18bc8840cdfc8bf61091790a2825df1 Author: Marco H Date: Tue Nov 30 09:04:43 2021 +0100 Update ChangeLog commit 31dba4df497d464374237b9617f576d3cda54f15 Author: Marco H Date: Tue Nov 30 08:59:37 2021 +0100 Change icon to black commit ffd7eebf258636c52f07e82b5fe8fe787c77cb36 Author: Marco H Date: Tue Nov 30 08:59:20 2021 +0100 Change icon to black commit 4a852e713834b4163acff86a1a9edba5cab2f91c Author: Marco H Date: Tue Nov 30 08:52:47 2021 +0100 Rename Readme.md to README.md commit a08a8d8a24139b29d091f0c6847d80612066eef4 Author: Marco H Date: Tue Nov 30 08:52:29 2021 +0100 Update apps.json commit 166994311e6bfacbd6b1327a41800a489bf05852 Author: Marco H Date: Tue Nov 30 08:46:04 2021 +0100 Add app to apps.json commit ea10cea706d638de3827202fde9400317412e142 Author: Marco H Date: Tue Nov 30 08:44:45 2021 +0100 Update Readme.md commit f73055253e76284dd520080ad03cefac225b9d18 Author: Marco H Date: Tue Nov 30 08:42:30 2021 +0100 Add files via upload commit eef1569c9900cce4eb7c779aa6b51a7bc60682dc Author: Marco H Date: Tue Nov 30 08:41:49 2021 +0100 Create app-icon.js commit eeb3206a095f0a9db31c0a95b917b2b2d506f5e0 Author: Marco H Date: Tue Nov 30 08:39:36 2021 +0100 Create Readme.md commit c822b62789b269d9f1732e3e664a4670dd4d233a Author: Marco H Date: Tue Nov 30 08:36:28 2021 +0100 Create app.js commit 8775a6f3392fedbb2385dde7558254ae5ba559ec Author: Marco H Date: Tue Nov 30 08:24:43 2021 +0100 Create ChangeLog commit d2cb4be4b4dc7e1a0ee50dfd0331815e5469ddc8 Author: jeffyactive Date: Mon Nov 29 21:48:30 2021 -0500 Corrected variable initialisation commit 4d107148c78d5a7211e2e08664052014059b5371 Author: jeffyactive Date: Mon Nov 29 21:31:53 2021 -0500 Added SensiBLE app commit 6642b216066519d90e1bb0b46c1c8b731ff270b8 Author: hughbarney Date: Mon Nov 29 20:27:25 2021 +0000 added pebble icon commit b50faa919a9f8c50687a16435d7db946771b674b Author: hughbarney Date: Mon Nov 29 20:12:25 2021 +0000 Pebble - long live the rebellion commit 3fa435e57ddde56b59c75074adc0831f9ae2ba67 Author: hughbarney Date: Mon Nov 29 19:58:19 2021 +0000 Pastel, MyLocation updated README files commit 6510e4b7d2965f34404f8973c5d802adfa933d6c Author: hughbarney Date: Mon Nov 29 19:02:01 2021 +0000 Pastel added dependancy on widpedom commit 784f7f84924b2b5bf670086b237c537bc6eac0d7 Merge: 22d06c8c c1dd7c6c Author: hughbarney Date: Mon Nov 29 18:57:56 2021 +0000 resolved apps.json conflict commit 22d06c8cf6f6fb7a1e0c899480cb8c40785d81f0 Author: hughbarney Date: Mon Nov 29 18:45:44 2021 +0000 Pastel changed dependancy on MyLocation to type app commit 38c6e16010837c73e32022bb7ce999402f1a44b4 Author: Gordon Williams Date: Mon Nov 29 16:29:34 2021 +0000 new about pixels commit c1dd7c6cabbfcae7a68ecbead3a9a8a3a7ac7686 Merge: c2b70103 616afad0 Author: Gordon Williams Date: Mon Nov 29 11:37:02 2021 +0000 Merge pull request #957 from JamesLMilner/minor-style-updates Tweak styling to give a more aligned and spaced out layout commit c2b70103a6347d4f41b34c0dcbf20e45cc4bbd47 Merge: cd0de091 3e1c90e4 Author: Gordon Williams Date: Mon Nov 29 10:54:30 2021 +0000 Merge pull request #955 from alainsaas/master New app: A Clock with Timer, v0.01 commit 3e1c90e48582f548740f2e5c38b10c72e23a62a6 Merge: 17e13a63 cd0de091 Author: Gordon Williams Date: Mon Nov 29 10:54:23 2021 +0000 Merge branch 'master' into master commit cd0de091f3d590ac9eb32008a4a84506dc020807 Merge: 0dd00635 6fc1e738 Author: Gordon Williams Date: Mon Nov 29 10:52:43 2021 +0000 Merge pull request #956 from JamesLMilner/mandlebrotclock Add Mandlebrot Clock app commit 0dd00635b8f7da9a37c4e5318198c0af1d180c81 Merge: 72d3c44f ba506741 Author: Gordon Williams Date: Mon Nov 29 10:50:28 2021 +0000 Merge pull request #959 from dratini0/recorder-fixes Assorted bugfixes to the recorder apps commit 72d3c44ffd4896b00a187f926604e4717742ac7c Merge: 33ce71f2 0d45f2c2 Author: Gordon Williams Date: Mon Nov 29 10:09:47 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit 0d45f2c2e8d57fa50413e0477888159aaa05c4b3 Merge: c4238eba 075d7a84 Author: Gordon Williams Date: Mon Nov 29 10:08:07 2021 +0000 Merge pull request #962 from myxor/myxor-temperature-app Update degree Celsius temperature app commit 33ce71f279162e61bf1be8247ed87c1f12331e89 Author: Gordon Williams Date: Mon Nov 29 10:06:21 2021 +0000 fix for sanity test errors commit c4238ebae7b5e25baced884730d03787f932e497 Merge: d4f1e7d3 10d170d3 Author: Gordon Williams Date: Mon Nov 29 10:01:40 2021 +0000 Merge pull request #950 from jg76379/master Add new Interval Timer App commit 10d170d31ebdf744a7eaabada4d0f9f918a05646 Merge: 4f5ec608 d4f1e7d3 Author: Gordon Williams Date: Mon Nov 29 10:00:29 2021 +0000 Merge branch 'master' into master commit d4f1e7d3cb2d79bb69405e46300afcf2eedaf4c7 Author: Gordon Williams Date: Mon Nov 29 09:52:47 2021 +0000 minor fixes for #952 commit 795d2b83ec1b6bd5bcc26239beda7b56fa3be7b7 Merge: d1534bdc 99ec40cd Author: Gordon Williams Date: Mon Nov 29 09:51:51 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit 99ec40cd8ead828bc2572914234a06c554410089 Merge: 30e421e2 6220a88d Author: Gordon Williams Date: Mon Nov 29 09:48:20 2021 +0000 Merge pull request #952 from rigrig/locale-12h locale: Apply 12hour setting to time commit 075d7a840ca46181a72da0dc6ba667e64787b950 Author: Marco H Date: Mon Nov 29 10:43:42 2021 +0100 Update apps.json commit c9d0a199477bf6c6b39a852c73d71fca666adda2 Author: Marco H Date: Mon Nov 29 10:40:32 2021 +0100 Add space after temperature value Add space after temperature value commit baba42ae25a9a90cc53aae0d99ad634d7e57df6c Author: Marco H Date: Mon Nov 29 10:36:31 2021 +0100 Fix changelog syntax commit cd674865479142016b7cb51844b75fbb7f91305f Author: Marco H Date: Mon Nov 29 10:25:14 2021 +0100 Update ChangeLog commit 765a683c894b1e09e1aae1c450b48a53db5b54a6 Author: Marco H Date: Mon Nov 29 10:23:54 2021 +0100 Update app.js Improving messages and added Celsius sign commit 30e421e225c329423d77f5dae7e1d69a6ba7df73 Merge: 94f8b4bc 918dcba6 Author: Gordon Williams Date: Mon Nov 29 08:38:52 2021 +0000 Merge pull request #960 from leer10/master Add 93 Dub Watchface commit 918dcba633d7e9cdb6aa6017f0961006afcb0a88 Merge: bb537b17 050b9c2b Author: leer10 Date: Sun Nov 28 14:58:18 2021 -0800 Merge pull request #1 from leer10/style-cleanup style cleanup commit 050b9c2b807c5e66405a8549bbfa47e4a1421f33 Author: leer10 Date: Sun Nov 28 14:56:18 2021 -0800 Update apps.json commit ada93e894d76497dd48956020cd3dc3649441dbf Author: leer10 Date: Sun Nov 28 14:55:46 2021 -0800 Update ChangeLog commit 590f022a91c430a832df0d9c64d9cde837b82cdf Author: leer10 Date: Sun Nov 28 14:55:32 2021 -0800 Update ChangeLog commit f423a6b91bbd698e72fa6a7cc002b068f506e291 Author: leer10 Date: Sun Nov 28 14:54:17 2021 -0800 Update app.js commit bb537b1738573c756207cb883c4ed8fd95256bb0 Author: leer10 Date: Sun Nov 28 14:27:14 2021 -0800 Update ChangeLog commit 656ca2ecaa8288bfc69c9f3a1ebbbdf2b1c56f36 Author: leer10 Date: Sun Nov 28 14:25:23 2021 -0800 Update apps.json added new version in json commit 438885ae922f25a3927bc5b785f2bba64d6272ee Author: leer10 Date: Sun Nov 28 14:24:18 2021 -0800 Add files via upload commit b9b7cfb50cfc62401a768653d9b4fd910256840c Author: leer10 Date: Sun Nov 28 14:23:49 2021 -0800 Delete screenshot.png commit 36aead94e7683da9aaf46601e28267ccf386a8aa Author: leer10 Date: Sun Nov 28 14:23:24 2021 -0800 Create ChangeLog commit b2cb4e7c0a84a49abfa0e04d16e2471b829d5b40 Author: leer10 Date: Sun Nov 28 14:22:04 2021 -0800 Add files via upload commit b25ad7573e19ccf6f617381e5ac78260ddeef36a Author: leer10 Date: Sun Nov 28 14:21:57 2021 -0800 Delete screenshot.png commit c3fac095b83c9936dedef8dad70578b4593923db Author: leer10 Date: Sun Nov 28 14:19:21 2021 -0800 Update app.js add discominotaur's adjustments (cause a battery on the watchface isn't useful when the widget does the work anyways) maybe i'll do it as a setting later commit 426ec0350fff5ce87dd2e8a6096c80f2f0e1b448 Author: leer10 Date: Sun Nov 28 14:10:47 2021 -0800 Update README.md added credits commit ba50674173c0fae02948c69fb8eaa0098ae4efe3 Author: Balint Kovacs Date: Sun Nov 28 18:58:26 2021 +0000 Update app versions and changelog commit 1a118a60374099538f65f24b347907b1ac12ea25 Author: Balint Kovacs Date: Sun Nov 28 18:44:47 2021 +0000 Recorded: Slightly improve plot altitude if data has NaNs commit 22fa78ff8d82e3a0512a3538278cc8e0ff735b28 Author: Balint Kovacs Date: Sun Nov 28 18:43:44 2021 +0000 Even out x axis grid points commit 466fd2155c81f44cfd30c7e3f15f460f5a8662c0 Author: Balint Kovacs Date: Sun Nov 28 18:18:18 2021 +0000 Remove superfluous semicolon commit a622781628c35eca58831c36e658e36b9a752712 Author: Balint Kovacs Date: Sun Nov 28 16:46:01 2021 +0000 Make the recorder handle missing coordinates in plot speed commit 69c6a34ead08410eee37000d7405f287aa416548 Author: Balint Kovacs Date: Sun Nov 28 15:46:02 2021 +0000 Fix some text overflowing the screen in recorder and gpsrec On Bangle.js 2 commit 616afad05616b13ca1d3618b5c899add6ab9624b Author: James Date: Sun Nov 28 14:10:29 2021 +0000 Title indent again commit 41c80ae76793e7bce50cd51f09a92cad48551c3b Author: James Date: Sun Nov 28 14:08:30 2021 +0000 Indent logo slightly to line up more accurately commit 617ed688c532f77bac0e09f3a5d10fcb796d2f77 Author: James Date: Sun Nov 28 14:05:49 2021 +0000 Use rem commit a28b3b78e407091fb5880be2c6801686b4f0bec2 Author: James Date: Sun Nov 28 13:58:41 2021 +0000 Add spacing to layout, small css tweaks commit 6fc1e738f1e1bdaaa45bb2ea34b33d97be3f37ee Author: James Date: Sun Nov 28 13:22:42 2021 +0000 Add mandlebrot clock app commit 89e88e717211d8c80b0e258114be7498722aa783 Author: leer10 Date: Sat Nov 27 23:39:51 2021 -0800 Update app-icon.js hopefully fix launcher icon commit 40d19aad2e4d672171b4feeee6b9c6f4cdbb11a1 Author: leer10 Date: Sat Nov 27 22:29:57 2021 -0800 Update apps.json added screenshot to app store listing commit d87930e4d37ea5248b7de93825735967e75030b3 Author: leer10 Date: Sat Nov 27 22:27:51 2021 -0800 Update apps.json commit 6eb7a844d6839456c13a4402c5212b9bb9dbd3ad Author: leer10 Date: Sat Nov 27 22:26:36 2021 -0800 Update app.js fix battery graphics commit da41d04d2681afd5bafe9f39660ca6c8a15a787a Author: leer10 Date: Sat Nov 27 22:20:21 2021 -0800 Update apps.json commit 47c8edba4f040716d5860b56588a98687914ac36 Author: leer10 Date: Sat Nov 27 22:19:25 2021 -0800 Add files via upload commit b28986c249a952edaac1b5e4b624ab357dcb81c3 Author: leer10 Date: Sat Nov 27 22:19:09 2021 -0800 Delete app.png commit 9e897dfd50c2ff4cc6c012724305e5e079b02dab Author: leer10 Date: Sat Nov 27 22:13:21 2021 -0800 Update app.js removed other nonfunctional comment block commit 6fd7a0eb633ac47eea07c2befe8f0a96bda19a02 Author: leer10 Date: Sat Nov 27 22:11:06 2021 -0800 Update app.js battery icon actually works now commit 4a3e1bbe28e3180ab04685646a4e41de07993cf4 Author: leer10 Date: Sat Nov 27 21:52:13 2021 -0800 Update app.js 12 hr/24 hr specific behavior now from settings instead of hardcoded commit 3d03895b9dc97c6f7bb20f68e64619612b89cf85 Author: leer10 Date: Sat Nov 27 21:44:49 2021 -0800 Update README.md commit 0d5892769d6862ed8a56dcfcf3fd960893cec688 Author: leer10 Date: Sat Nov 27 21:42:19 2021 -0800 Add files via upload add screenshot for 93dub commit 82e515e0e5c05cd89f871f33fb24654e1e26d5b0 Author: leer10 Date: Sat Nov 27 21:39:55 2021 -0800 Create README.md added dub93's readme commit 8a3f9f848a4dc98f0f1108c46e406ba8007aa45b Author: leer10 Date: Sat Nov 27 21:36:48 2021 -0800 Update app.js stripped license and info block of text since it's already enclosed in an MIT-licensed repo commit 4294a27279f7482cb9abe10fe22d254f2a9a7073 Author: leer10 Date: Sat Nov 27 21:31:41 2021 -0800 Update apps.json apps.json updates commit 251ceb9dd1ee7064f86c4056a280169f299311d9 Author: leer10 Date: Sat Nov 27 21:27:35 2021 -0800 Update apps.json oops comma commit b49223d5b95c3802ca5b9a7e2478a227ad888652 Author: leer10 Date: Sat Nov 27 21:24:09 2021 -0800 Update apps.json commit 2d21ce74459871c238dc12d2ed04c212bd1d814e Author: leer10 Date: Sat Nov 27 21:21:29 2021 -0800 Add files via upload commit c0e5d4432eb48ae7c83d1c62f28a8b8abdc1438b Author: leer10 Date: Sat Nov 27 21:19:34 2021 -0800 Create app-icon.js added icon commit 0d6bfc7c13f024f36e9703dbb4b88289756621f5 Author: leer10 Date: Sat Nov 27 20:59:32 2021 -0800 Update app.js redid background, adjusted graphics to look nice on bangle 2 commit 17e13a63253c868ffc16ad6f11a62ac3e2973c9e Author: Alain Saas Date: Sun Nov 28 13:43:31 2021 +0900 Update apps.json commit a19da85de7e3c880030397b1d89f3f086a0a4e27 Author: Alain Saas Date: Sun Nov 28 13:41:56 2021 +0900 Update README.md commit 9d4c251b730c655dec6fd709a29ca4a4d4c861ff Author: Alain Saas Date: Sun Nov 28 13:39:41 2021 +0900 Update apps.json commit f9fa4a7df132b5a2bf8c804c4164f5c4afb5798c Author: Alain Saas Date: Sun Nov 28 13:32:58 2021 +0900 Update apps.json commit ff95dd3b2c9a74d0173227a88cb1d171639996d1 Author: Alain Saas Date: Sun Nov 28 13:29:06 2021 +0900 Create README.md commit c23960c12c0460cfb015082799f218d8d7e86859 Author: Alain Saas Date: Sun Nov 28 13:20:48 2021 +0900 Add files via upload commit d9d6133559f55421e8b38b2d63eef3e2c549bfd8 Author: Alain Saas Date: Sun Nov 28 13:20:15 2021 +0900 Create ChangeLog commit de4d744e266a47aa072cd1f07c6f2362d62efd10 Author: Alain Saas Date: Sun Nov 28 13:19:15 2021 +0900 Create app-icon.js commit de9a526517577136b2060e0d5138b943cc0951fe Author: Alain Saas Date: Sun Nov 28 13:14:06 2021 +0900 Add files via upload commit 662963b2089e0e8bc6f0d1548202462833143d46 Author: Alain Saas Date: Sun Nov 28 13:06:47 2021 +0900 Create app.js commit 56f3044e5e5fedbbddffc9810e24135cca7acfbf Author: leer10 Date: Sat Nov 27 12:02:34 2021 -0800 Update app.js background needed redraw after notification background redraw broke widgets, so temp fix commit 228a3664c7ab9774a8dad99f05fc1bf3c5570e61 Author: leer10 Date: Sat Nov 27 11:41:39 2021 -0800 Update apps.json commit 33b3e918693959e9828cafa1354b6df3a5a5c90d Author: leer10 Date: Sat Nov 27 11:40:13 2021 -0800 Update apps.json commit 7d646945df493e7c95a51c7ce6e7224662150090 Author: leer10 Date: Sat Nov 27 11:37:56 2021 -0800 Update apps.json commit dabaa06efbe3698e11afad390bb06d3e48c93f12 Author: leer10 Date: Sat Nov 27 11:33:19 2021 -0800 Create app.js commit 3fbb46b046c65d8d9f1a37b600bddc0ee1e16e03 Author: hughbarney Date: Sat Nov 27 11:23:03 2021 +0000 Pastel, recalc sunrise,sunset every hour commit 21fe6e7ea486ee553bd1bac8399d153c50171380 Author: hughbarney Date: Fri Nov 26 21:52:05 2021 +0000 Pastel added dependancy on MyLocation app, display sunrise,sunset times commit b426c479a32595b592acc1eb68a202e3ed5f0c17 Author: hughbarney Date: Fri Nov 26 21:29:46 2021 +0000 Pastel added dependancy on MyLocation app, display sunrise,sunset times commit 070558a0a62027fc67e9d54b45ef81e2166d6fab Author: hughbarney Date: Fri Nov 26 20:48:27 2021 +0000 MyLocation - adds menu to set preferred city or setup from GPS commit 6220a88d29ace89e386ae3d7630c112bc8905b73 Author: Richard de Boer Date: Fri Nov 26 21:29:58 2021 +0100 locale: Apply 12hour setting to time Fixes #892 commit ce0e50ed949eeffc97bd2ec3db1fdb38830c3e4e Author: hughbarney Date: Fri Nov 26 20:25:28 2021 +0000 MyLocation - adds menu to set preferred city or setup from GPS commit 4f5ec608de77dd4febf68db0b6d3aa9703b73b16 Author: James G Date: Fri Nov 26 12:48:20 2021 -0500 fix formatting in README for interval timer app commit 2ae9585193c1394bca43a9160dcfbcdd29f14803 Author: James G Date: Fri Nov 26 12:43:36 2021 -0500 rename intervalTimer.app.js to app.js commit bff43e662da03dfd1648ef656062195689448236 Author: James G Date: Fri Nov 26 12:42:13 2021 -0500 Fix url for intervalTimer.app.js in app.json commit fc6ecaccce783eb5bf6d3571b885bdfcf78912be Author: James G Date: Fri Nov 26 12:35:35 2021 -0500 Add new Interval Timer app. commit d1534bdcbf2281343f023d4c8aada9169283ac84 Author: Gordon Williams Date: Fri Nov 26 15:05:05 2021 +0000 comment commit 94f8b4bca79a0b79ad0e3635ad56786722bfa802 Merge: dc8edba0 4cfbe11e Author: Gordon Williams Date: Fri Nov 26 12:01:01 2021 +0000 Merge pull request #947 from peerdavid/master [LCARS clock] Alarm works also if clock is closed and opened again. commit dc8edba00ddf236c79279313f36a05795bf9e3ac Merge: db1c5b74 fa4fd118 Author: Gordon Williams Date: Fri Nov 26 11:59:41 2021 +0000 Merge pull request #948 from Smooklu/master Updated fd6fdetect commit db1c5b74817a3be17f923104138e6f46c03bb514 Merge: a4299586 045251f5 Author: Gordon Williams Date: Fri Nov 26 11:59:15 2021 +0000 Merge pull request #949 from johan-m-o/master Update Spirit Level to work on Bangle.js 2 commit 045251f55f9a71f755ffdcdb120e032dc437096a Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:50:19 2021 +0100 Update spiritlevel.js commit b6e5175675890222b1f23318a2b466dcf6302238 Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:44:21 2021 +0100 Update spiritlevel.js commit 6f300299b55f60098d262c02e0c7ed1a5576fc38 Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:34:52 2021 +0100 Update apps.json commit fe5ca8bc76b9c1a1d28159af6dba92af14fd4e57 Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:33:49 2021 +0100 Update spiritlevel.js commit a89dd4d544b306acb94edeb63de6a90e1e946565 Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:23:43 2021 +0100 Update ChangeLog commit a4299586e8055425f1ea638090ac267081845a76 Author: Gordon Williams Date: Fri Nov 26 10:04:02 2021 +0000 cscsensor 0.06: Now read wheel rev as well as cadence sensor Improve connection code commit fa4fd118e28787458623159617600b4d42432e98 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:20:52 2021 -0600 Update apps.json commit 43b447f81c3f40b1c042a9551ec71a1f29aa4d91 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:17:35 2021 -0600 Update apps.json commit 1ea1706e61149214a3d423b2a9eeba7ae1ca1eaf Merge: 08fd95ab 095165c5 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:04:40 2021 -0600 Merge branch 'espruino:master' into master commit 08fd95ab9a3cb50f26605cebb4ae7411c1823c48 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:04:09 2021 -0600 Update README.md commit bc27677f5ef33bf85d67df951edae6dce437248e Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:02:43 2021 -0600 Update apps.json commit f9286cbee97efeb9c63f2672b520e8976e59e45a Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:00:48 2021 -0600 Update README.md commit a1a56601c0579d4a9e9756eb83bfcd8a802a9510 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:00:38 2021 -0600 Update README.md commit 4cfbe11e45690f31e3010b7234a26e3ec3695dff Author: David Peer Date: Thu Nov 25 20:00:36 2021 +0100 Show text for each icon. commit 4fb4d12ba48dee2869338cf1d4e4675e18a0d86a Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:00:28 2021 -0600 Update README.md commit 6508ed8b3fc99d0a39fb460a47f7d989c6f3eb7b Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:57:25 2021 -0600 Update apps.json commit 85b7115c731479ede76db6c659a071f9390dd352 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:54:33 2021 -0600 Update README.md commit 6482297881ddfeef3202ae235e1e4a38f1826f9b Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:53:16 2021 -0600 Update ChangeLog commit f5940b5bdbc0fc3118544821b6508f78f10a59f1 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:52:27 2021 -0600 Update README.md commit 9f002934015e4bacc43a652703418d9c8ad7c29e Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:50:35 2021 -0600 Update README.md commit 2818a63e2c6d3116001eca6e0ddf852825dfdd55 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:48:36 2021 -0600 Create README.md commit 95f845ad4e9408081b9ecf882ad85012bbb4bc7d Author: David Peer Date: Thu Nov 25 19:10:05 2021 +0100 New icon for alarm commit ca3453440c8171ffb53a9d0a69cdfc516f454e56 Merge: dcee49cd 4a530371 Author: David Peer Date: Thu Nov 25 19:01:24 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commit dcee49cdc89867584d140d3cc318b7dabbf930b9 Author: David Peer Date: Thu Nov 25 19:01:22 2021 +0100 New GPS Icon commit 4a5303714d952d0d63df60a9d9f64af9e79a97e0 Merge: 93e2a88a 095165c5 Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Thu Nov 25 18:52:23 2021 +0100 Merge branch 'espruino:master' into master commit 93e2a88a4c42968ab7260a3b56ef0e3a477cf47f Author: David Peer Date: Thu Nov 25 18:51:20 2021 +0100 Updated screenshot commit d99cea9ae0c280c2d765dd0d9b53d7ad82b5a2ad Merge: 232dcc4b 7e1b0422 Author: David Peer Date: Thu Nov 25 18:49:46 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commit 232dcc4b9df3a85b09f1b296a769fead4ea634cb Author: David Peer Date: Thu Nov 25 18:49:44 2021 +0100 Real icons - its an image of the real planet :) commit 095165c5c9673c3322f2a271528a112d1749878b Author: Gordon Williams Date: Thu Nov 25 16:33:45 2021 +0000 oops - fix uncommitted file! commit bf964ce3e4ecdea91718f9dc50052c47f7ac97f2 Author: Gordon Williams Date: Thu Nov 25 16:06:26 2021 +0000 The 'update all' button shouldn't update apps that require 'custom.html' (fix #748) commit 7e1b04225511997c8e4557b5c3f0e58cef2986d1 Merge: ccce57ae 944b24e6 Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Thu Nov 25 16:56:53 2021 +0100 Merge branch 'espruino:master' into master commit ccce57ae89a8d2a19d9d171a50bc39c94a673cc6 Merge: a99d9d5e c381e7ef Author: David Peer Date: Thu Nov 25 16:56:35 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commit a99d9d5e7c649ab498c1ef5b459c2647f52c5703 Author: David Peer Date: Thu Nov 25 16:56:32 2021 +0100 Store alarm in settings commit 944b24e6c34068432786b44343f20c73c56ebf53 Merge: e8264cc8 1b9477be Author: Gordon Williams Date: Thu Nov 25 15:52:25 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit e8264cc8f8c7cde0e88cef06347c9ca67f8dae9e Author: Gordon Williams Date: Thu Nov 25 15:50:07 2021 +0000 messages 0.07: Added settings menu with option to choose vibrate pattern and frequency (fix #909) commit 5f5ca64cb4d305094907e368d8f0e344b694e304 Author: Gordon Williams Date: Thu Nov 25 15:21:59 2021 +0000 android 0.04: Android icon now goes to settings page with 'find phone' commit 6aa6bcf17977e127ef1879cfdb11ce3b972b1772 Author: Gordon Williams Date: Thu Nov 25 15:12:04 2021 +0000 messages 0.06: New messages now go at the start (fix #898) Answering true/false now exits the messages app if no new messages Back now marks a message as read Clicking top-left opens a menu which allows you to delete a message or mark unread commit 1b9477be5d4c5af923b7ef435ae08b721171b7bf Merge: e28f9c15 2b7091bd Author: Gordon Williams Date: Thu Nov 25 12:19:48 2021 +0000 Merge pull request #945 from nlisgo/improve-ux-add-timer Cube Scramble: Improved UX and display solve time commit 2b7091bd6b8c12e3c5bc75244e0eba38f9b223e9 Author: nlisgo Date: Thu Nov 25 11:40:37 2021 +0000 Set default title for showPrompt commit c381e7ef2196963dcc5414fdf583e179122e0362 Merge: 1ab98707 e28f9c15 Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Thu Nov 25 11:41:01 2021 +0100 Merge branch 'espruino:master' into master commit e28f9c157b2540a87387041f54a35ea50572e8c9 Merge: e040cc4e cb9866ff Author: Gordon Williams Date: Thu Nov 25 08:55:39 2021 +0000 Merge pull request #932 from hughbarney/master Pastel: created font modules commit 1ab98707eda9543a4792627c1c91884059345bc0 Author: David Peer Date: Thu Nov 25 09:17:25 2021 +0100 Minor changes commit 9940b38bbd0f53640b4a4ea2e0d70691bae04cea Author: nlisgo Date: Thu Nov 25 00:13:06 2021 +0000 Force LCD on commit f175f4c48c149b7b4b6a317db8105790b97a0f6a Author: nlisgo Date: Thu Nov 25 00:06:02 2021 +0000 Update screenshots commit f6c689eeedfa4d349e2f73cdfabbd0a641502735 Author: nlisgo Date: Wed Nov 24 23:56:47 2021 +0000 Amend app description commit 3c984f1fee70a8af17476a2b751a5c8b128aec36 Author: nlisgo Date: Wed Nov 24 23:52:28 2021 +0000 Cube Scramble: Improved UX and display solve time commit cb9866ffe23bbbff7e6c44edc4ef437a27bdee29 Author: hughbarney Date: Wed Nov 24 21:11:47 2021 +0000 Pastel: updated screenshots and README commit 8b46634c9bb7ea17e4824abbdf7c1cb21859e62d Author: hughbarney Date: Wed Nov 24 21:05:45 2021 +0000 Pastel: updated screenshots and README commit cbb38ec1ceb54db23826c476e0efdbd496b048a6 Author: hughbarney Date: Wed Nov 24 20:18:29 2021 +0000 Pastel: added cycle through info items to bottom of screen commit 469c3296404703ca27ce52a55c4a67fc416ca520 Merge: 37ca6251 e040cc4e Author: hughbarney Date: Wed Nov 24 19:59:57 2021 +0000 Merge remote-tracking branch 'upstream/master' commit 37ca6251742ddce653e5d04819fa16a8efdce29f Author: hughbarney Date: Wed Nov 24 19:59:46 2021 +0000 Pastel: added cycle through info items to bottom of screen commit c6096675fb65d43ef2a037a1325ef160b812fec5 Author: hughbarney Date: Wed Nov 24 19:06:06 2021 +0000 Pastel: added cycle through info items to bottom of screen commit a537e98116a932422a10c043b001a96911c65d3d Author: David Peer Date: Wed Nov 24 18:04:59 2021 +0100 Font improvements commit 59692c8ca175c17c6ea81f203855cb029baa0ee6 Merge: 657e64b0 e040cc4e Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Wed Nov 24 17:52:48 2021 +0100 Merge branch 'espruino:master' into master commit 657e64b078eda64cd6817959cbdc8a3bc71bb580 Author: David Peer Date: Wed Nov 24 17:52:25 2021 +0100 Added readme also to app.json commit e040cc4e245a8fb4c55bfeb99cab12c62af5e7b5 Author: Gordon Williams Date: Wed Nov 24 15:22:16 2021 +0000 replace tabs! commit 60c2fa710c4904827bfba868507a9f6d10d524a3 Merge: 38b2e417 f3cb7e9a Author: Gordon Williams Date: Wed Nov 24 13:29:46 2021 +0000 Merge pull request #942 from madman2021/master Add new TimeCal app commit 38b2e417bf8e63be394a96ed24b9e3d174d5f45b Merge: 94bd895b 43b38cc8 Author: Gordon Williams Date: Wed Nov 24 13:26:43 2021 +0000 Merge pull request #943 from peerdavid/master [LCARS Clock] Shows icons for charging and out of battery commit 94bd895bafeb37250b64373692c9cceb3e9ece97 Author: Gordon Williams Date: Wed Nov 24 12:56:56 2021 +0000 welcome 0.14: Turn off and run later to use softOff to time is set right plus other minor tweaks commit 43b38cc8ab5796e25f65ace531be68a6a4134f98 Author: David Peer Date: Wed Nov 24 13:40:47 2021 +0100 New screenshot. Updated version. commit 34c6589f06a1a8ba0f7fe2e126b41d03dff7f45b Author: David Peer Date: Wed Nov 24 13:37:07 2021 +0100 Minor improvement commit c403a5af671cf70b18776fad83126adf66122f0f Author: David Peer Date: Wed Nov 24 13:36:21 2021 +0100 New design. Removed png icon files - only converted icons are needed. commit 19655ea3279daf32ebfd4453db398915a8229946 Merge: 274b705c b1fb0e6b Author: David Peer Date: Wed Nov 24 13:22:44 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commit 274b705c1e7313cf646412ec01bf17de9b1dabcf Author: David Peer Date: Wed Nov 24 13:22:37 2021 +0100 More lcars style commit f3cb7e9a0b8f0ba3624b639415c9168c240905e8 Author: Jordan Coulam Date: Wed Nov 24 10:53:14 2021 +0000 Remove Icon as it renders massive commit 1a9f5375557fc232acfe3f42d1198da827db5ab8 Author: Jordan Coulam Date: Wed Nov 24 10:46:03 2021 +0000 Add missing supports tag for TimeCal commit 3738bde22a0d4cef2bd5c956a1a370e9a145689a Author: Jordan Coulam Date: Wed Nov 24 10:43:38 2021 +0000 Add TimeCal to the app library Add TimeCal to the app library commit b1fb0e6b7d88f53cff85f6a8d3eb416bebd35e92 Merge: 559e8208 dabc22c2 Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Wed Nov 24 11:10:36 2021 +0100 Merge branch 'espruino:master' into master commit dabc22c2d725ccddad8b08c0fa0b14af94d38e28 Author: Gordon Williams Date: Wed Nov 24 09:54:11 2021 +0000 custom code works on bangle2 commit 2e83a511d2032736a63bda38406b4f744a4130f1 Author: Gordon Williams Date: Wed Nov 24 08:51:20 2021 +0000 metronome supports bangle 2 now commit cea51d06d07f09923d590357c33782861c342817 Merge: cd1daba0 4eee3f05 Author: Gordon Williams Date: Wed Nov 24 08:50:24 2021 +0000 Merge pull request #938 from bengwalker/master Add Bangle.js 2 support for metronome app commit cd1daba0c55e99f5a477407f47b932d050c0b6f2 Author: Gordon Williams Date: Wed Nov 24 08:46:13 2021 +0000 0.25: Fix issue where if Bangle.js 2 got a GPS fix but no reported time, errors could be caused by the widget (fix #935) commit c03ab08687bbc7ed893ed2ef8c3be21f1e61e74f Merge: 1750c72e f10bf240 Author: Gordon Williams Date: Wed Nov 24 08:40:53 2021 +0000 Merge pull request #939 from Ronin0000/master Add Screenshots to Many Apps commit 1750c72e94eab6ee22650d993ea31efa17e79c46 Merge: 5eeb1181 1def233d Author: Gordon Williams Date: Wed Nov 24 08:38:06 2021 +0000 Merge pull request #936 from Vingelar/master Binwatch: re-format background images commit 559e82088077ba79675c0012c921eae3ef32b16d Author: David Peer Date: Wed Nov 24 07:14:04 2021 +0100 Minor design change commit d24b8c80da7afd75a6f121a22e3694252aa3c57a Author: David Peer Date: Wed Nov 24 07:12:25 2021 +0100 Minor design chnges commit f10bf24018add2df61a5fc422aee941b07c70082 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 17:04:07 2021 -0800 Update apps.json commit c66b0982368a5e1ee74da598945df12d88cba679 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:53:48 2021 -0800 Update apps.json commit 638fea73c791b4f11b6119c02ca2090c31b6bc83 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:24:10 2021 -0800 Add files via upload commit 4e79c896c65b2edc7dfcb7b4b2eb6ae1c96f60ce Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:23:33 2021 -0800 Add files via upload commit 33809d8cdfa7ea3f02941c820b4836f20a9eb869 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:22:58 2021 -0800 Add files via upload commit 6cb83284a7e7b9d2f8935835702e713f0f9b7b51 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:22:45 2021 -0800 Add files via upload commit 7e521d0d29262227a32244d2929eb99fcb36fb98 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:22:17 2021 -0800 Add files via upload commit 9985ff03f20469897ceb3dd1acb4f90ac850ebb8 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:22:00 2021 -0800 Add files via upload commit 6f437c39866562e05d8821bdb5150cd553f3a6cf Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:21:15 2021 -0800 Add files via upload commit ffe218a0046d65464e96cdc59d1c10fbb708b791 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:20:56 2021 -0800 Add files via upload commit 9400133dd49762a7bfcff38e5a6249cbfd5753f7 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:20:39 2021 -0800 Add files via upload commit 76463d927940f590ed45cc51558723375217a34a Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:19:37 2021 -0800 Add files via upload commit 4011accb47eb53954acc3e27cce5b6f6cb025c57 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:19:19 2021 -0800 Add files via upload commit bc5960d61a40c08566a8e1977fa53c6528f04a85 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:19:07 2021 -0800 Add files via upload commit da5634beda72243f5ee6e4fc0e376c6c5f9c6ccc Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:18:51 2021 -0800 Add files via upload commit b9c4640f853d4992e57cd5d6b2e3f4d75db32d1f Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:18:25 2021 -0800 Add files via upload commit d27a605a24cc06903084b6a796c9c93b7724150f Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:18:07 2021 -0800 Add files via upload commit 52baa42e69b1a7a8ef6bc2cae548298af4dcbf7c Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:17:48 2021 -0800 Add files via upload commit db3b6a58e49a3d5ce9b528011f3e0607474e4fa8 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:17:16 2021 -0800 Add files via upload commit f0de0d8a9d542fd960f13b36a2bb2a3548f06033 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:16:52 2021 -0800 Add files via upload commit 6d4cb98ba83d0ab62406c00ed9fa8dcd139d2f8c Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:16:34 2021 -0800 Add files via upload commit 5f434d9d327fff8cebf41a45cf73ea9c96cb42db Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:16:23 2021 -0800 Add files via upload commit 6e72349f05e3773b0ae60217df8b6f266447f1ce Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:15:37 2021 -0800 Add files via upload commit 03e4d0d7c01cdc214526891933f3c155f63ff2b5 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:15:21 2021 -0800 Add files via upload commit ead12a1c11e3937637e8af8b1d54218e0138e908 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:14:54 2021 -0800 Add files via upload commit a1ed32c91380e03146dc4003a3ee6e400d0dd35f Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:14:30 2021 -0800 Add files via upload commit fae08d7a739b1a28faacb0105d5ad417171dddcb Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:13:57 2021 -0800 Add files via upload commit b889e431edf72d64867c576135bc1470c4590db2 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:13:32 2021 -0800 Add files via upload commit f177480160184722b935623ebed05ad630a5a6a2 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:13:02 2021 -0800 Add files via upload commit a2fe8c3722f56c59957642cad2bb0a6454dc6f5b Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:11:42 2021 -0800 Add files via upload commit c1cdf15bf5413167692e9c7bd4f5fee31fe4d4c1 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:10:49 2021 -0800 Add files via upload commit fb1c5529f037cc701e30d9da036a54236ea1ba1d Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:10:11 2021 -0800 Add files via upload commit 530089e0830473574b38c172a964f9cfb49436a3 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:09:35 2021 -0800 Add files via upload commit 3556e668560587c074ad435b977283e19367f69e Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:09:12 2021 -0800 Add files via upload commit e1e32772e4dd1943af6ed37407425998b0819e48 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:08:56 2021 -0800 Add files via upload commit 8084bb92b7cfb12740129c57e1bb5c05ce13994c Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:08:37 2021 -0800 Add files via upload commit 2c997d2964d4ade4ba0aa5ef89a1b646c15a9751 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:08:18 2021 -0800 Add files via upload commit 747626b66c880293481bd0a97cda8e32e0239d04 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:07:24 2021 -0800 Add files via upload commit ed36fae0ac6def24ca20ab6229affbcf7502582e Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:06:59 2021 -0800 Add files via upload commit e8baad3c3775e26f8a88457ff8f361a18572e484 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:06:33 2021 -0800 Add files via upload commit 1efcebe84aa2b2b00d6920a84d4e486b834c1083 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:06:16 2021 -0800 Add files via upload commit 082d3d1e95e9bb98e10bb1679ae0dfba11bf44e0 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:05:21 2021 -0800 Add files via upload commit b10f62a6c55dd89bb15a97430b74269486a72807 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:04:58 2021 -0800 Add files via upload commit 24b41c2c6fe40d18ffd9dfc0404f215cc9b847ff Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:04:42 2021 -0800 Add files via upload commit 19a2ef1a44c78fe9b1922574f0a1eda20f2fbd43 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:04:01 2021 -0800 Add files via upload commit 7089d6e74c438d3577ebf03857b0c1b6f73aaa2a Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:03:38 2021 -0800 Add files via upload commit 431824f828f0ea900c9d206e492cc7a6d1830f2e Merge: 15aa41c7 5eeb1181 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 15:15:57 2021 -0800 Merge branch 'espruino:master' into master commit 5eeb1181d049f1580f75657b9a9ac664041b26b9 Merge: 546a0b16 6b05d928 Author: Gordon Williams Date: Tue Nov 23 20:29:18 2021 +0000 Merge pull request #937 from rigrig/barclock-b2 Barclock works fine on the Bangle.js 2 :-) commit 15aa41c766b2a25c7a83a1a6744706a7b2852aa3 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 12:23:03 2021 -0800 Add files via upload commit 6a93494e3fe516ccbc7755027f613bd9bd529021 Merge: 12443640 546a0b16 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 12:22:27 2021 -0800 Merge branch 'espruino:master' into master commit 546a0b16cc32841b38a0d39b07ec6d18f58d21c5 Merge: cb6e14f6 18fbd289 Author: Gordon Williams Date: Tue Nov 23 20:20:55 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit cb6e14f6c12816224bbc3dc127e9817d0df7ae78 Author: Gordon Williams Date: Tue Nov 23 20:20:37 2021 +0000 messages, start of call handling and message responses, fix for scroll issue when only 2 menu items commit 12443640c95efbe9f25ed0ffe73280c84d90cd13 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:54:22 2021 -0800 Update apps.json commit 9bdc07f8617e457439522d5b4c84a65d1eba4ed9 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:47:36 2021 -0800 Update apps.json commit 4eee3f05e92e26aa5c70c1d2cefcc97ff4935b0d Merge: aafc93f0 18fbd289 Author: bengwalker <63957296+bengwalker@users.noreply.github.com> Date: Tue Nov 23 20:46:32 2021 +0100 Merge branch 'master' into master commit 298fa47cd87e37b19cd142f47867843e24d08b57 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:42:50 2021 -0800 Update apps.json commit 52c07f6dc80e8eabd017fc324332c0594c173399 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:40:42 2021 -0800 Update apps.json commit fe340d75bbb6c7814241becacddaca50435c5fe3 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:39:31 2021 -0800 Update apps.json commit aafc93f09a818f5bb6e4b6988246e4f8d049df87 Author: bengwalker <63957296+bengwalker@users.noreply.github.com> Date: Tue Nov 23 20:35:35 2021 +0100 Update README.md update README commit bd80ea5ca03b2e9d5f2eb562adc7305b3952d2e5 Author: bengwalker <63957296+bengwalker@users.noreply.github.com> Date: Tue Nov 23 20:31:33 2021 +0100 Update metronome.js print instructuions for banglejs2 commit 51afd5ef049c67f331931ee18b53e9d4e835342a Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:29:27 2021 -0800 Add files via upload commit ff62b603a27d6acea382af80496b6a35787a73ce Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:28:51 2021 -0800 Add files via upload commit ffbd331c1376c5f393dafe62eaa62a9991949a3e Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:28:29 2021 -0800 Add files via upload commit 93c113a95a21dccfde6bb171d15b0f93e6d0f58a Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:27:25 2021 -0800 Add files via upload commit b2be26fccedfa52f00f275db8050c0c3e532859b Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:27:07 2021 -0800 Add files via upload commit 899e78539c3bb0e41e4d56aa854c4806715ccce0 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:26:06 2021 -0800 Add files via upload commit 50a88d41cd63e51a876e4fca58fe13c5af2088fc Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:25:35 2021 -0800 Add files via upload commit b1d636bac2148007dd72becff0daddf24b80f0a4 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:25:10 2021 -0800 Add files via upload commit 6b05d928751b49d4910ddd3a6867e2d4cad6c93f Author: Richard de Boer Date: Tue Nov 23 19:42:12 2021 +0100 barclock: Fix time/date disappearing after fullscreen notification By forcing a complete redraw at lcdPower-on commit 32e3d326aa143eed99d26c81c9fbf870730591f4 Author: Richard de Boer Date: Sat Nov 20 17:13:36 2021 +0100 barclock works fine on the Bangle.js 2 :-) commit 1def233de2434d272c6f712c9c213b7caff3ae92 Author: Vingelar Date: Tue Nov 23 19:09:16 2021 +0100 changed format of bg images to binary raw format (export from emulator commit e021aa2c9d5c44f9130e4bf67cb4b066d02cbd6d Author: Vingelar Date: Tue Nov 23 17:59:49 2021 +0100 Update app.js binwatch: adapted names of bg images commit 3dd723d10bd3195257205a48dc79872668bd53cb Author: Vingelar Date: Tue Nov 23 17:58:48 2021 +0100 Update apps.json binwatch: shorten names of background images commit 275402344ee927a51d0c100d4387c739d7a49968 Merge: cf027b37 18fbd289 Author: Vingelar Date: Tue Nov 23 17:36:45 2021 +0100 Merge branch 'espruino:master' into master commit 18fbd2898da9fc2bfb16d0adf9cf2b97f5ce0f3d Merge: 5be6981a df364bab Author: Gordon Williams Date: Tue Nov 23 16:34:15 2021 +0000 Merge pull request #933 from peerdavid/master [LCARS Clock] Added lcars icon to watch face. commit cf027b3783cbbf8deca98fb3e1ee1922557686bf Author: Vingelar Date: Tue Nov 23 17:34:13 2021 +0100 Update app.js changed names of background images commit 5be6981acdf3935b936bb85caf37780537518b66 Author: Gordon Williams Date: Tue Nov 23 16:31:42 2021 +0000 oops - named stub wrong commit d328d94d34ea86dd99f958098c7f0a000b1e395f Author: Vingelar Date: Tue Nov 23 17:30:20 2021 +0100 Add files via upload added background files exported from Emulator commit c36fb16a684085c2eb6ada2c50021d3776f5e215 Author: Vingelar Date: Tue Nov 23 17:28:54 2021 +0100 Delete Background240_center.js removed background240_center.js (wrong format) commit 4719fada2843f1c8d6ae36d8d59d0fb95318d9b5 Author: Gordon Williams Date: Tue Nov 23 16:28:34 2021 +0000 Android Remove messages on disconnect, Fix music control (ref #909) commit f431bd8a2c823e877ee6e78576aa4f39a0b5701f Author: Vingelar Date: Tue Nov 23 17:28:25 2021 +0100 Delete Background176_center.js remove backgounrd176_center.js (wrong format) commit 1b548c9bbb5a10769498b4ad1be04397fb889bce Author: Vingelar Date: Tue Nov 23 17:27:33 2021 +0100 Update apps.json adapted naming for image files commit df364babab19550f75a01d707f0684d8547e8664 Merge: d28517b2 a1eeadfc Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Tue Nov 23 17:16:00 2021 +0100 Merge branch 'espruino:master' into master commit d28517b2a5b5e7eaa6a8d9832d9352062addb3ee Merge: cd93a201 465c93d8 Author: David Peer Date: Tue Nov 23 17:15:18 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commit cd93a201f846e2c51a1ff9cc447dbbbdc2c5e2cc Author: David Peer Date: Tue Nov 23 17:15:15 2021 +0100 Moved logo commit dd2bb22f076abff1aac2f32734b50fdcc5423861 Author: Vingelar Date: Tue Nov 23 17:08:57 2021 +0100 Update apps.json use .js files as background images commit 03c5f996f4998ebc1e6bfea7e77d3a61743c0c69 Author: Vingelar Date: Tue Nov 23 17:07:21 2021 +0100 Add files via upload added background files as js commit 7d81bfe2bbdf5095ac7550247eddbe6827cec4c0 Author: Vingelar Date: Tue Nov 23 16:53:40 2021 +0100 Update apps.json added missing "url" to background storage commit 51b73894e461af6312b6fca28e0b5888e9f98da6 Author: Vingelar Date: Tue Nov 23 16:51:40 2021 +0100 Update app.js use background images from storage commit dab36d05a77563e9a839f38807bfd7cfe09a1f69 Author: Vingelar Date: Tue Nov 23 16:48:50 2021 +0100 Update apps.json added background images to stroage commit 31f28093411e4f501dd49f98359af43e71e8b27e Author: Gordon Williams Date: Tue Nov 23 15:44:49 2021 +0000 Fix https://github.com/espruino/BangleApps/issues/927 - App loader offers to update unknown apps commit a1eeadfc224a976e3fca6a00ca47d1c1389fa70f Merge: 68429483 0a695e51 Author: Gordon Williams Date: Tue Nov 23 15:40:09 2021 +0000 Merge pull request #934 from Ronin0000/master Fix School Calendar Bug commit 0a695e5143fbff3935e80b9df85720f065b1e185 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 07:09:14 2021 -0800 Update custom.html fix bug that was for testing commit cfecc24f42d257d565f21571a50b825cffb2f1c3 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 07:05:47 2021 -0800 Delete boot.js commit 684294830d75459982845920cb30815236dc0917 Author: Gordon Williams Date: Tue Nov 23 13:57:46 2021 +0000 app manager works in bjs2 commit 465c93d830300054722f10f483a9023c6ec315e7 Merge: d20f5e59 3ba779ee Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Tue Nov 23 14:53:47 2021 +0100 Merge branch 'espruino:master' into master commit d20f5e597e72d8392af3e9b745a4dfab36e8797f Author: David Peer Date: Tue Nov 23 14:53:27 2021 +0100 Updated screenshot commit a283cf58fb90b1852d8e414fb01010632a65ba46 Author: David Peer Date: Tue Nov 23 14:51:55 2021 +0100 Included lcars logo commit be3345d1433f3fcd4fd2e5f477c53c0e1d92fe22 Merge: e3310ffc 3ba779ee Author: hughbarney Date: Tue Nov 23 13:22:30 2021 +0000 Merge remote-tracking branch 'upstream/master' commit e3310ffc32e9fab87bcafe96b43894dcecc60cc5 Author: hughbarney Date: Tue Nov 23 13:13:17 2021 +0000 Pastel: architect font module commit 3ba779ee5826a60f127ed12f0eeaa2a848f53b4c Author: Gordon Williams Date: Tue Nov 23 11:48:34 2021 +0000 Fix bangleapps after recent PRs commit aaf06b113c72e1487651d30602ba79c95a41d6ff Merge: a0351381 06a6b72d Author: Gordon Williams Date: Tue Nov 23 11:42:26 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit 9600f16671ab5a9fc772a959a7110622baa5e606 Author: David Peer Date: Tue Nov 23 11:19:48 2021 +0100 Updated changelog commit 98577b626960bd971af483ef709655dfe0ac1f00 Merge: 1ccabca0 d3cd47f9 Author: David Peer Date: Tue Nov 23 11:18:52 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commit 1ccabca0c6f1cf79c1b5d6a56749ab752a4d1850 Author: David Peer Date: Tue Nov 23 11:18:50 2021 +0100 No hrm icon - its shown too much. commit d3cd47f95704e7c508e1e311d3224826f3fd73ce Merge: 2e18795c 06a6b72d Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Tue Nov 23 11:12:43 2021 +0100 Merge branch 'espruino:master' into master commit 2e18795c5780148c6f52d50cd69849b5893b1cdb Author: David Peer Date: Tue Nov 23 11:11:33 2021 +0100 Fixed string commit 36edd449c5398147536d20c2b4f11040cb3105b9 Author: David Peer Date: Tue Nov 23 11:10:33 2021 +0100 Minor change commit 06a6b72d42fc55a224bb5d133640670c21d6cae0 Merge: a39d4102 be083113 Author: Gordon Williams Date: Tue Nov 23 10:03:45 2021 +0000 Merge pull request #925 from Ronin0000/master Add School Calendar commit a39d4102963fc1593e1f2f8ea3f4372a3da4da6f Merge: ab2cb243 930cfa13 Author: Gordon Williams Date: Tue Nov 23 10:02:41 2021 +0000 Merge pull request #928 from peerdavid/master [LCARS Clock] Icons for different states such as GPS or HRM. commit 5c3b0468d4ce9a51249f6f098c3e6ba84ba1cf41 Author: Vingelar Date: Tue Nov 23 10:59:26 2021 +0100 Update apps.json corrected format commit 336501059da7bceddba9e300c5b6d5bd1aba6a3a Author: Vingelar Date: Tue Nov 23 10:56:25 2021 +0100 Update apps.json removed background image commit 3f4c49a8aef6ba79419f00d86fc4f02435b72e21 Author: Vingelar Date: Tue Nov 23 10:55:07 2021 +0100 Update app.js integrated BG image into app commit ff3223e1b906957811cad815df88ad495e70a95f Author: Vingelar Date: Tue Nov 23 10:51:02 2021 +0100 Update app.js added "require" for bg image commit ab2cb243857e50e7bb80ee163e4bc153302446a7 Merge: adadf7ef 162dc1f2 Author: Gordon Williams Date: Tue Nov 23 09:51:01 2021 +0000 Merge pull request #929 from weeurey/master Update app commit adadf7efd39b01466cfd348e13c5a02deaa6bf4d Merge: b7f403e7 0f9d938f Author: Gordon Williams Date: Tue Nov 23 09:49:26 2021 +0000 Merge pull request #931 from reelyactive/master emojuino@0.02 commit b7f403e79bf5fae387c5f6d0522f49ce917362a6 Merge: f4e997d4 46383d4d Author: Gordon Williams Date: Tue Nov 23 09:49:12 2021 +0000 Merge pull request #930 from rigrig/gbmusic-fix gbmusic: fix "previous" button image commit a03513812956c629f003824b46bb6763734eead8 Author: Gordon Williams Date: Tue Nov 23 09:44:24 2021 +0000 fix download icon on android commit b128f5c15569de9e2be0717f270cfd90e006d5ab Author: Vingelar Date: Tue Nov 23 10:38:02 2021 +0100 Update apps.json added background image to upload commit 930cfa13315046c621a5444632f7b12bbd956fae Author: David Peer Date: Tue Nov 23 09:43:24 2021 +0100 New HRM Icon commit 7f3f7b9eee3c23c922645274dd8d7947def8158d Author: David Peer Date: Tue Nov 23 08:26:37 2021 +0100 Currently, no confidence > 80 is reached... commit 1fb861b82c4cc75b94dc6875280fbd411390bc71 Author: David Peer Date: Tue Nov 23 08:25:11 2021 +0100 HRM confidence of 80 to display commit 7d95221e166770be91bf76374f926fe996356009 Author: David Peer Date: Tue Nov 23 08:24:15 2021 +0100 Minor change commit 6d8d98fb03e7bed42c3feeee771ddfcd78b60ea8 Author: David Peer Date: Tue Nov 23 08:21:41 2021 +0100 Show HRM commit a0cc4c633e0e6853a0f170a5358b7e1f11e310af Author: David Peer Date: Tue Nov 23 08:10:00 2021 +0100 Minor changes commit be083113316ec7ba07d780b6593cb9adfd748298 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 19:11:40 2021 -0800 Update custom.html commit 0664a44c454107d4e3ff039d12baffea3e90cf5f Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 18:52:43 2021 -0800 Update apps.json commit b032ca0fc1936e650a459f766799e197daf2a4dd Merge: 7fd37f7e f1f063fd Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 18:49:27 2021 -0800 Merge branch 'espruino-master' commit f1f063fd1adb553c548a3aa54156bce00b4ca48d Merge: 7fd37f7e f4e997d4 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 18:49:09 2021 -0800 merge3 commit 0f9d938fa6970df18fbe99f3c707b94aa26d15c1 Author: jeffyactive Date: Mon Nov 22 20:23:17 2021 -0500 Version bump commit 5a01047cd0b30e4b7b253d784bd0b5755fc0c2e2 Author: jeffyactive Date: Mon Nov 22 20:21:29 2021 -0500 Added screenshots commit ae55c2d39fc936cfa1954d44b7f76dc91c21ced3 Author: jeffyactive Date: Mon Nov 22 20:09:26 2021 -0500 Allow emulator, specify type as app commit 58f9e7cd5b59904651fb878a89844ee4ccfb23df Author: jeffyactive Date: Mon Nov 22 20:03:18 2021 -0500 Upgrade to emoji images and supporting text commit 1a75f0813b5bae3f2b6b7b14dd563a18fa00225f Author: hughbarney Date: Mon Nov 22 22:50:27 2021 +0000 Pastel: font modules commit d450758f1ad9aa833f47873cd45c87f15ef151b4 Author: hughbarney Date: Mon Nov 22 22:09:52 2021 +0000 Pastel: font modules commit cf66db35a95aabf22dd3be5d77b9264148db1956 Author: hughbarney Date: Mon Nov 22 22:08:47 2021 +0000 Pastel: font modules commit 29ecb8daa20219d1657f2ac8d2c76885d5056753 Author: hughbarney Date: Mon Nov 22 22:08:19 2021 +0000 Pastel: font modules commit a29bba62cba6037a64286d89304e3f92051cbf2a Author: hughbarney Date: Mon Nov 22 21:29:26 2021 +0000 Pastel: f_orbitron font module commit 8576d90e50c6c1099b78b1fb82808f788aeabba6 Author: hughbarney Date: Mon Nov 22 21:24:27 2021 +0000 Pastel: f_orbitron font module commit 723e1a6cb2752d12e1a1d1eed45a39000f50208f Author: hughbarney Date: Mon Nov 22 21:17:50 2021 +0000 Pastel: f_orbitron font module commit ec7f9ac69d012a64c1dd383bd688ab8815fb49ad Author: hughbarney Date: Mon Nov 22 21:13:48 2021 +0000 Pastel: f_orbitron font module commit d68bcf1ff18893e5e7fda5cda55db7ed69502f78 Author: hughbarney Date: Mon Nov 22 21:05:28 2021 +0000 Pastel: f_orbitron font module commit ff1d5f2d76ddf8a9cfc4ffea2ea5dcd636851a25 Author: hughbarney Date: Mon Nov 22 21:03:53 2021 +0000 Pastel: f_orbitron font module commit 7fd37f7e4e669c0aea7b5324b85f9d85ca394dcb Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 12:18:44 2021 -0800 Update custom.html commit 84d9ca4b337e36c4f62ffce4b3059f8f2909d482 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 10:57:14 2021 -0800 Update boot.js commit 740f4a95665fd92ad87e83dd381da7e55c2e4b18 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 10:52:27 2021 -0800 Create boot.js not part of the current merge commit d3538a03f10f6323afc8656cef397a561cf35bf0 Author: David Peer Date: Mon Nov 22 19:12:50 2021 +0100 Added raster commit 20310fdb75b11fe8b3ea38dc7810732910537169 Author: David Peer Date: Mon Nov 22 19:02:27 2021 +0100 Smaller icons commit 3863be18301cec9fec480db7fe28a19439c708d2 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 09:06:52 2021 -0800 Delete apps/schoolCalendar/fullcalendar/interaction/src directory commit 5d8c13a7e6a934e8b750f0ab4871e3dcc67c09bf Author: David Peer Date: Mon Nov 22 17:56:29 2021 +0100 Updated screenshot accordingly commit 21134a1dcdc102755171af26e99ae86f3559996f Author: David Peer Date: Mon Nov 22 17:55:21 2021 +0100 Better background commit cab3d43085b2edf4dc97ebf05785bb5b446a88da Author: David Peer Date: Mon Nov 22 17:39:48 2021 +0100 Better alarm - shown only in icon so we can display more data. commit db22bac0ecd48633d6acf0874127a1b28821d8ea Author: David Peer Date: Mon Nov 22 17:11:15 2021 +0100 Use correct alarm icon commit 162dc1f29346ab0f6ff4b7cd4128826292ca766e Author: weeurey Date: Mon Nov 22 16:11:07 2021 +0000 Update apps.json commit dc24ae9bfba1786d4d8a3e22871c4da7bda9fb92 Author: David Peer Date: Mon Nov 22 17:10:58 2021 +0100 Better HRM Icon commit 8e688d144ab30ff87f31b51ab457688ce03c4c23 Merge: 741f7aab f4e997d4 Author: weeurey Date: Mon Nov 22 16:09:43 2021 +0000 Merge branch 'espruino:master' into master commit 741f7aab5239e6fa6ae48e1a5351216dfcfc4177 Author: weeurey Date: Mon Nov 22 16:08:38 2021 +0000 Update apps.json commit 247ed9faa2e8b8463374fea05d4bb04ddda2cfc1 Author: weeurey Date: Mon Nov 22 16:07:39 2021 +0000 Create ChangeLog commit d878d46d4ccc5128643034c535cff69984ab7853 Author: weeurey Date: Mon Nov 22 16:05:57 2021 +0000 Update app.js commit c720fc314b516e1007452ad18ce51bc4fefefec1 Author: David Peer Date: Mon Nov 22 17:03:21 2021 +0100 New alarm icon commit 75fbd6882d1368c73db1b96fac79f4202d6a5e53 Author: David Peer Date: Mon Nov 22 16:37:48 2021 +0100 Added icon for alarm commit eb20f15537d8b6be7226b2ae49fc6e6dd0474124 Author: David Peer Date: Mon Nov 22 16:33:42 2021 +0100 Compeletely new design with icons for GPS, HRM and Compass. All Icons are open source and mentioned in the Readme.md file. commit 46383d4d5547bca38a2a07ea01d67afa0166bedc Author: Richard de Boer Date: Mon Nov 22 13:18:01 2021 +0100 gbmusic: fix "previous" button image commit 1bf5132a5caf41398125e0c7f2bad72ffa300df2 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 21:07:49 2021 -0800 Update custom.html commit 618c5b7a10ebe610205ab463c395f65948e5a763 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 21:02:29 2021 -0800 Update custom.html commit adfeb5e535564f8851fcdc080e2fa10d9acced9a Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 21:00:21 2021 -0800 Update custom.html commit f950fd2ee88486e3355efd30823d50de799e8418 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:57:52 2021 -0800 Update custom.html commit 3ee0e9bae6ee137c6e36672c9aa6a20d1c072caf Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:49:48 2021 -0800 Update apps.json commit 387bd30236b5d765b396eba24ad43120ceb6c384 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:48:14 2021 -0800 Rename ChangeLog.md to ChangeLog commit 6e07f282b8918ac3b8f333c7c4156980a44ff1d6 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:41:26 2021 -0800 Add files via upload commit fea37b4992e65a5ca54648f88281ce2623f6a55f Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:37:40 2021 -0800 Update apps.json commit 939d8f6a9ae71b49c13f7dbf1455bb2fec60462a Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:37:21 2021 -0800 Add files via upload commit 854ae5361d1b2400f6b6d1b2c2239f46d1e16bc9 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:34:28 2021 -0800 Update README.md commit 426768eb11e34ea7a04010e6fe7da1a5a5187f40 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:32:14 2021 -0800 Update custom.html commit bf994d9acc8b79ebda1e47dc5ebc5158210d6205 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 18:24:29 2021 -0800 Update apps.json commit 7c74c5d43f9f66b6374cabd4e247d1560e5f29a1 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 18:15:40 2021 -0800 Update apps.json commit 8981aa3f614c388c74d73ccd25e16f5e6eabde9f Merge: e878e547 100384f2 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 18:12:19 2021 -0800 Merge branch 'espruino:master' into master commit e878e5478713b0b3cae0bb86e28f998cbfeb9b10 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 18:11:43 2021 -0800 merge commit 3bde4d2e48711186ae26036baea8f880c2aac7c4 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 16:12:16 2021 -0800 Update custom.html commit 5f3c93df8cc8b73c432ea31b15e84e4b106256de Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:37:41 2021 -0800 Update custom.html commit 26bd9e35be993aae4deece775ac85f53f877b122 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:35:47 2021 -0800 Update custom.html commit 8f2cc6e2137cf29e03435123e96d9c6c550864d1 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:34:09 2021 -0800 Update custom.html commit 66f061112301898b011412e91982dbefc7cc2d1e Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:32:48 2021 -0800 Update custom.html commit 87a9504912b8753dc63700207ee89acacbb34726 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:30:44 2021 -0800 Update custom.html commit 626498da9d296fecf6776b836def4eda87027d85 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:24:01 2021 -0800 Update custom.html commit 3472ca355a1a71d3fa3f464ece2b81dce7f4eeaa Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:21:57 2021 -0800 Update custom.html commit 529b0cb4637652dfc0a3ba6688b863b5f47437ca Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:19:53 2021 -0800 Update custom.html commit e77d9980023f041a87743ac1fd3c48a3f0652a8e Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:18:21 2021 -0800 Update custom.html update commit a712c37c7652f7bc46c4d7761df93b3d28e17229 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:17:58 2021 -0800 Update custom.html commit 4d9d6abb9ef466e4058510efe9eec295f60127e9 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:14:02 2021 -0800 Update custom.html commit f35b24844810a90f08f731cc9e63535be217e4cf Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:09:44 2021 -0800 Update custom.html commit d0336b2854d7e0892c440ef8c5f83bcbe1374a9b Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:06:56 2021 -0800 Update custom.html commit 640c8e491e489e9ea88282cf0bfe14004838b3db Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:03:42 2021 -0800 Update custom.html commit 604153cb2408399ce1420b43ef87f41c09d3daa6 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:01:45 2021 -0800 Update custom.html commit 0f8f1e38e85a8c1c49057f4b891209bdfad67aef Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:58:44 2021 -0800 Update custom.html commit 7f7dcb0bcf89b1d66f60481efaa09f5956ee4ecc Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:58:22 2021 -0800 Update custom.html commit d42fe03dc8fcbc0f68857dd9f887c8cc4eff1c06 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:55:08 2021 -0800 Update custom.html commit 98f172fad442e89f53c45ac47f2388a08049855a Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:53:01 2021 -0800 Update custom.html commit daf8dde32bc81b8f04402c4728eac41784751cd5 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:49:25 2021 -0800 Update custom.html commit 408bd24080a2f7dcf1e6d0c33dab65da4dff82cf Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:48:38 2021 -0800 Update custom.html commit 68db21acbb837b12d84d9930d451d2ba90e251dd Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:44:30 2021 -0800 Update custom.html commit 45feb1b2ffb17b8835c505bc4a4f825ddc17bf4f Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:39:42 2021 -0800 Update custom.html commit 3bc5fd87b61cbb9b867009d933342fe627da982d Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:39:12 2021 -0800 Update custom.html commit c3eede9868ee342bc4248e71a874c2e6b332dcdd Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:37:42 2021 -0800 Update custom.html commit 8426356c01a23ae769c79f726b95ea64f4428574 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:35:55 2021 -0800 Update custom.html commit 93f09c216a1eb9aa876c88a1f806ccb709e971b7 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:27:39 2021 -0800 Update apps.json commit cb748a251dbd11e87615d82081522953607b3a27 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:27:20 2021 -0800 Update custom.html commit a994ed66301040f60d5f99b672a6081152a20d6c Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 19:53:38 2021 -0800 Update custom.html commit b76bb48973dbabfaf56bdec4aee44a483f94d129 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 19:50:08 2021 -0800 Update custom.html commit f99ce683e9ce42431321fc711e061955bc0220fb Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 19:46:32 2021 -0800 Update custom.html commit ddfdd94ff845d3d8560158cde184a9a19a3d2142 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 19:42:51 2021 -0800 Update custom.html commit 52675f7eff140426532f81da9c84c5d7803d0cda Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:48:03 2021 -0800 Update custom.html commit d4911034145e3d98b99d649be55c75671e2f5c5c Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:44:23 2021 -0800 Update custom.html commit 71ff5959aec6a5f8302bda513d2c1371bbed0743 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:42:58 2021 -0800 Update custom.html commit daba705b37b9952cba2910c3c0bed23e58aaf2fc Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:42:16 2021 -0800 Update custom.html commit 19cb5fc749abeefe378205531d18b97562ddfc47 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:39:15 2021 -0800 Update apps.json commit 6c20945898b84a02d6b440923a5afd994c7d97aa Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:37:41 2021 -0800 Update custom.html commit ff519bdc0d9bca530284d98cad9fd023ad37d50d Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:15:29 2021 -0800 Update custom.html commit 34843d703aae0b6a33be352ad0f8408d8d17d07b Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:11:54 2021 -0800 Update custom.html commit 4da82197f32b280e4192d5bc9a5ba174fbad4ace Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:01:20 2021 -0800 Update custom.html commit a9c5a32bc1359d8288f4fd6b6da50eaf40910c9a Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:56:54 2021 -0800 Update custom.html commit 352fea34791ccf06450a516ab2a2daf22353c641 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:53:38 2021 -0800 Update apps.json commit ab6f56c381a54e4ab3466625a9eb794eef5dd2a0 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:52:34 2021 -0800 Update custom.html commit a65742ce346039ef901e70157620aabd95bbca35 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:48:25 2021 -0800 Update apps.json commit a1a387dd600f7e5c3879d74cd5a516d7566fb7bb Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:47:52 2021 -0800 Update custom.html commit 180e88e0e44dc3ca09291a7d37b6fa4df637fa78 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:46:50 2021 -0800 Update custom.html commit 0099736b8c64e8f1afefd4d52b526151e3ac700a Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:46:14 2021 -0800 Update apps.json commit 1fdf4e954e23fe0514b8d795224c2edafd5941c1 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:44:43 2021 -0800 Update apps.json commit faa5b6b21aa8b7062dc62499e8361b8233cf9408 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:44:10 2021 -0800 Update custom.html commit d617803c13ec381f35a9d30f99a267dca02c9cf1 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:37:44 2021 -0800 Update apps.json commit dc669254bcccad425153d209d6dcdf002f64a30d Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:37:10 2021 -0800 Update custom.html commit 303247fb4e66802ed7f5c2ee404ce0a28221ec2d Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:25:00 2021 -0800 Update custom.html commit d836cbd2ba256adfffa55f1d12fda02ae8ac760c Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:15:16 2021 -0800 Update custom.html commit e206bd4e1cad4aab266fd376fa525500941878a8 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:08:00 2021 -0800 Update custom.html commit 1a6c1acce50fe2fe2e49bfc26b3ac98c1db5aa13 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:04:06 2021 -0800 Update custom.html commit aa20fac50ed19adfb9248fd9cda1ebb7c31f95b1 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:02:52 2021 -0800 Update apps.json commit 5625414e90c78677040420f342f29e96f088469b Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:34:30 2021 -0800 Update apps.json commit ebc2d8096144e6150920efc4b63e8f1e3f52eb00 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:33:27 2021 -0800 Update custom.html commit 6c43de3766433c1f9fa1d01fd24cbfe0839e19c0 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:21:11 2021 -0800 Update apps.json commit 37da3c68aeeb5fec1ef3d8965fa3d8170074d791 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:19:46 2021 -0800 Update custom.html commit 92707b9d13ed269a41684ce45111376694cb6e58 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:12:50 2021 -0800 Update ChangeLog.md commit d3ca682cff08be0bb2a64ab057f6efdf36b4e094 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:09:56 2021 -0800 Update apps.json commit dfd9e59993944f6323120f8af660d880c63c6793 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:08:52 2021 -0800 Update custom.html commit 5d24a09ffa2d9cad10a5fae3c7b4d5fafc944aa9 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:04:41 2021 -0800 Update apps.json commit e965bd7d962108a2944824eb6579fce435876966 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:02:43 2021 -0800 Update custom.html commit 345d9c155135fc4d0a2b8d00b3528b363a584ced Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:02:12 2021 -0800 Delete schoolCalendar.js commit dc9db8a4767d4c16d92645131d977263e2468521 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:01:58 2021 -0800 Update schoolCalendar.js commit 58df0a5ca26684b4da84929c8c388ca5c37acabd Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:01:03 2021 -0800 Update apps.json commit 65ad4979e8d58b51f11f3bcc86f31ab303a5d7b6 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 13:27:10 2021 -0800 Update custom.html commit 9c07800c5ef948a1b9b2071e7bdfe46809fefa1d Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 13:07:38 2021 -0800 Update custom.html commit b108bc45fb8bfa266e4d4ad3e66a9f65cec96c92 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:58:24 2021 -0800 Update custom.html commit d871855f8e217b27ea73ed28b389bbc8aea59d62 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:55:58 2021 -0800 Update apps.json commit 99112920b287568db32c5e43b47cfc2ee0cf71a3 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:47:34 2021 -0800 Update apps.json commit 37f4329ec57bc4a96a1b2a0847406f6a05cad520 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:39:49 2021 -0800 Update apps.json commit ba2aee642bf90307757bb85fda6aa0db01bed5e5 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:39:06 2021 -0800 Update custom.html commit 98048dc23cb1caf3aafbf1d1ecfa461ba5943925 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:37:23 2021 -0800 Update apps.json commit 1a53e8d34af89f0e6c889653961350a898deea81 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:33:43 2021 -0800 Update custom.html commit 993bb7298c8fbc9348e6668b70a555c51dc54a09 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:31:41 2021 -0800 Rename interface.html to custom.html commit 3a3962bfdc0365e75f8804b61293ec91084f6698 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:30:12 2021 -0800 Rename custom.html to interface.html commit c8ad92a3dcb7b8a0df83f2e720b6730dd785e829 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:20:33 2021 -0800 Update apps.json commit ae85c1cee709457b10233205c057f946ea15fe83 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:14:33 2021 -0800 Update custom.html commit c1b467ba8e96f58b27eb3b9b2dc2b859fa89e227 Author: weeurey Date: Sat Nov 20 18:14:50 2021 +0000 Update app.js commit 438537ace2358f5b798bdfde92ebf78db81abc49 Author: weeurey Date: Sat Nov 20 18:10:03 2021 +0000 Update app.js commit e6d736860d7d7511f08474a4d8f6446ebe97e634 Author: weeurey Date: Sat Nov 20 17:57:57 2021 +0000 Update app.js commit e1add5e2b2a068873d0102324d61f9ff5532924d Author: weeurey Date: Sat Nov 20 17:45:02 2021 +0000 Update app.js commit 09be008dfaf764b542a80f4dbbde6ab26314713e Author: weeurey Date: Sat Nov 20 17:39:48 2021 +0000 Update app.js commit 9f26994f5c66a5ee88a702c7a73d8bcc0c8236c3 Author: weeurey Date: Sat Nov 20 17:33:47 2021 +0000 Update app.js commit 0cf4c5d70a97480185296b32137fcdc179fddcc4 Author: weeurey Date: Sat Nov 20 17:10:31 2021 +0000 Update app.js commit cfdb94439526722ca757b8ee748d298f6a76d9e7 Author: weeurey Date: Sat Nov 20 16:32:34 2021 +0000 Update app.js Add Media controls commit e3cd8f5607f912002d3ec0adf833834058a492cb Author: weeurey Date: Sat Nov 20 16:16:37 2021 +0000 Update app.js Removed extra unneeded code commit ceed8a123836f5da6fb8c5d6741e2224a3e4a0af Author: weeurey Date: Sat Nov 20 15:05:28 2021 +0000 Update app.js commit 721a3f2608ee0012767cfacd5c69aa91a7bba5f6 Author: weeurey Date: Sat Nov 20 14:39:30 2021 +0000 Update app.js commit a16bfe4d7350b34c694050448f2aefc990d19dcb Author: weeurey Date: Sat Nov 20 14:32:57 2021 +0000 Update app.js commit e72bf84a7a05c4208e8c1d5f60815a9f57ca11c4 Author: bengwalker <63957296+bengwalker@users.noreply.github.com> Date: Wed Nov 17 21:29:57 2021 +0100 use dark theme for metronome commit 071a7a7e683a649b9f75fdc92b9f56804cd0af87 Author: bengwalker <63957296+bengwalker@users.noreply.github.com> Date: Wed Nov 17 20:46:18 2021 +0100 add support for Bangle.js 2 commit 7a7175fa483e4e9fcd5912d83e9519274d67b4f0 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Nov 4 16:00:41 2021 -0700 Update custom.html commit e2928498690565ba7d0454aaa4265bc8adfda712 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Nov 3 08:22:32 2021 -0700 Rename interface.html to custom.html commit cd7579269efe8d54a5a5680b8126ea38f9ce54be Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Nov 3 08:22:04 2021 -0700 Update apps.json commit df7f9cc530194025708b712565a410aed1d73e95 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Nov 3 08:20:09 2021 -0700 Update interface.html commit ada94b11cfbebfeaa010cee1b39d0f92591d4e13 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Nov 3 08:06:50 2021 -0700 Update interface.html commit 08fc58deb57847cca7d81bf84a54df16ce97528f Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 20:20:57 2021 -0700 Update interface.html commit 04b9e74a4d2cd84dd9b64b0ba6fba1167fc400e7 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 20:10:58 2021 -0700 Update interface.html commit be7af68455ff4b5034c0baab9d8c138b9b024707 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 20:08:24 2021 -0700 Update interface.html commit aaee5f3c0610de7a48bdda7fe9c6064dff97780e Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 19:13:08 2021 -0700 Update interface.html commit 73819933eeb57f32935e6ad93a146bdbee6d8be6 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 18:52:09 2021 -0700 Update schoolCalendar.js commit fa5cbd71c618a2053ec3217048c74a723c46f03f Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 18:49:22 2021 -0700 Update README.md commit fa392008d1e30a6df05245eac969badf4188fb74 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 18:45:24 2021 -0700 Update README.md commit c280e41560a3812ee83ca461e098bc35b80ef439 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 18:42:39 2021 -0700 Update README.md commit 6b84a8eb3007cca6abd31cc1d3d0552cc79cb492 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 18 19:43:26 2021 -0700 Update schoolCalendar.js commit 5bbfb1109910856575cc348012dbc44d489a8005 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 18 19:43:11 2021 -0700 Update interface.html update interface commit 6660dad4c01c66c20670cfd415b6ad063d9b5b74 Merge: 8c003cf6 1e0f6cd6 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 18 07:35:54 2021 -0700 Merge branch 'espruino:master' into master commit 8c003cf6ffb5a8b3437897a1e57a6a020b5e02a4 Merge: 5c11881f f1ce196a Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Fri Oct 15 07:33:21 2021 -0700 Merge branch 'espruino:master' into master commit 5c11881f752edbdef3031f0a48109a196eced80a Merge: 8c149dbe be34e2b0 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Oct 14 17:14:45 2021 -0700 Merge branch 'espruino:master' into master commit 8c149dbea1cfd34e815b64ca354840b811a82222 Merge: 7888cc6c 300ed35b Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Oct 13 07:46:16 2021 -0700 Merge branch 'espruino:master' into master commit 7888cc6ce0bbabf99c7dd39f002810d262af07fd Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 11 17:43:59 2021 -0700 Create README.md commit 36a52b8b001a4515d715950db56e411a6c4842b2 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 11 17:43:52 2021 -0700 Update README.md commit 4f5558c41e75f6e91a34842f7b42fa85970dce5e Merge: 5db16d19 68cc9fbd Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 11 16:43:12 2021 -0700 Merge branch 'espruino:master' into master commit 5db16d190b1439293d9f0af16d37fea29db8830c Merge: e7995505 54d98db6 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 11 07:03:23 2021 -0700 Merge branch 'espruino:master' into master commit e799550544e55ef94ef48f905283625e50f73e97 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Oct 7 17:02:57 2021 -0700 Update schoolCalendar.js commit 89f82a50436d4eab82574d310077d19154a8ab59 Merge: 7107d510 f3712e66 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Oct 7 17:02:38 2021 -0700 Merge branch 'espruino:master' into master commit 7107d510a5301f50ca5dc1bf9d4463ad99a33af8 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 4 20:06:28 2021 -0700 Update schoolCalendar.js commit a61879753285b4469772f51474c29fe86a5aa942 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 4 19:55:30 2021 -0700 Update schoolCalendar.js commit 3c9e46c2160f4ff58708afc0d08ce2e5d27df097 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 4 15:59:03 2021 -0700 Update apps.json commit 941bc852c1ab4472dc74a7f84e12e92ab891432e Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 4 15:57:53 2021 -0700 Add files via upload commit 4cbfac212e6999887cfafd37d9c809919a014e27 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 4 15:57:26 2021 -0700 Delete apps/schoolCalender directory commit c7b723f87e5e6fb0858c09ee2910510267d73fd6 Merge: 8d2f4ccc ba08863b Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 4 07:31:25 2021 -0700 Merge branch 'espruino:master' into master commit 8d2f4ccca761e1695620b072e116b94272850427 Merge: 7846b48c 44aa03e4 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Fri Oct 1 07:31:42 2021 -0700 Merge branch 'espruino:master' into master commit 7846b48cf67ab024970b90948096f9258e1c184c Merge: 59aa9909 d0fd2f01 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 30 17:22:33 2021 -0700 Merge branch 'espruino:master' into master commit 59aa99092dac99b9a13bbc2a7153dd2b44a6fb67 Merge: 9061acee 03bbe1d2 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Sep 29 08:06:54 2021 -0700 Merge branch 'espruino:master' into master commit 9061acee5db851bd58295785cc7542a7c066b4c8 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 28 17:44:12 2021 -0700 Update interface.html commit 79bacc45932ce8842cbf12d23c36a41e992b438e Merge: bb5fcdaa 48bb819b Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 28 07:12:44 2021 -0700 Merge branch 'espruino:master' into master commit bb5fcdaafc1e344bf2d717c3eb238f763f255215 Merge: 814fbdd6 28bd9e83 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Sep 27 16:15:07 2021 -0700 Merge branch 'espruino:master' into master commit 814fbdd61ef41676d07719b5b1b297fbbc03ec6f Merge: 83d88a1e f3fd0f25 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Sep 25 08:01:44 2021 -0700 Merge branch 'espruino:master' into master commit 83d88a1ea191e2e6b669d284d94b4180b9ea54aa Merge: c9bed74e 71471d37 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Fri Sep 24 19:35:52 2021 -0700 Merge branch 'espruino:master' into master commit c9bed74ec2e240e2daf26bf9ec9432df91ac18aa Merge: 1f130c53 16fe8470 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 23 15:21:18 2021 -0700 Merge branch 'espruino:master' into master commit 1f130c53b46546328260a6b94ad182be5d55ff18 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Sep 22 07:25:41 2021 -0700 Update interface.html commit 3d8ebe82c289156581799134b3c56fd02ade1fad Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 21 21:07:20 2021 -0700 Update interface.html commit 2ca58d2cc436b72beb87d347b8d8c217b461e805 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 21 21:02:14 2021 -0700 Update custom.html commit d8c149073fb6bca8f5f78ba4a031004adeab1a6b Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 21 21:01:31 2021 -0700 Update apps.json commit ceab5d46a23f913faf96be90e644458ac5546157 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 21 20:58:01 2021 -0700 Rename schoolCalender.js to app.js commit 9b344eb1ecc577e96196d2a3d3fc8962198e90de Merge: ec453c0e 3b15a7f9 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 21 07:24:54 2021 -0700 Merge branch 'espruino:master' into master commit ec453c0e100f7fd140305fe8ed4a62d3987e68f1 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Sep 20 19:45:50 2021 -0700 Update README.md commit a8f7fe72923e1fe38042cb4752dac1429c6be426 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Sep 20 07:31:41 2021 -0700 Update interface.html commit 51c41d5c48a72b7a373e6f979c95bab9fa9ddb7a Merge: b7a4ecb5 50ec8d97 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Sep 20 07:25:50 2021 -0700 Merge branch 'espruino:master' into master commit b7a4ecb57857016c131ba72e101b3a11eb3cb06c Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 16:48:24 2021 -0700 Update interface.html commit 82320ab073c0b106f5260e26c0fb147d7c8fcd02 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 16:40:43 2021 -0700 Update interface.html commit 27d025bf82cc5882dc39110c5c7799f657f2c57d Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 14:01:04 2021 -0700 Update interface.html commit bd92c0e67fce373f11aae3bbcf8f5a4c06f2e161 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 13:51:31 2021 -0700 Update interface.html commit f0c596d14f6119bbe52e2f0d3912216785257536 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 13:40:29 2021 -0700 Update interface.html commit d6542bac6d666af7c8fe1f67434611e6ccacc6a6 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 07:29:46 2021 -0700 Update interface.html commit 7a2ee0f7111209afa859761a62f80e93ca71a879 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 07:15:29 2021 -0700 Update interface.html commit c65ddbfc522c54da540080a16d171edd42ce592e Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 07:05:32 2021 -0700 Update interface.html commit 43c684f389d97dd12815edbd93d0750f923f17b3 Merge: ddd1a83c 5f5b5c0d Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Sep 18 19:45:25 2021 -0700 Merge branch 'espruino-master' commit 5f5b5c0dc2485f7e454acb9f364d240e3972d955 Merge: ddd1a83c cc2e1bbd Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Sep 18 19:42:47 2021 -0700 Merge branch 'master' of git://github.com/espruino/BangleApps into espruino-master commit ddd1a83c613a9f21ec8e37ba1151e1ca255a77af Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Fri Sep 17 18:27:57 2021 -0700 Update interface.html commit 632c98f8be2ad6e2290e5eb98025559a42a47c34 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Fri Sep 17 15:13:46 2021 -0700 Update interface.html commit c252f74e16edc5a1a1fcfe4ce72c9594f12a9624 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Fri Sep 17 07:31:16 2021 -0700 Update interface.html commit b9b0a43e99db0c2d13c28bf6d65540925709d866 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 19:28:35 2021 -0700 Update interface.html commit afafd449fb06abd3930d0eb40989dc12787c96d9 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 19:22:01 2021 -0700 Update interface.html commit 45a0d50b011ee50e9b1b4c6ce5a84e1290331b1f Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 19:15:25 2021 -0700 Update interface.html commit eb146fe07bd5d71f49c5e267424d7b8206eee952 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 19:07:51 2021 -0700 Update interface.html commit 34baf995e7f5288266b5da08bcac6d76202a92fc Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 19:04:33 2021 -0700 Update interface.html commit 751fbdda43ea542db4887bed7b4d4e2ad7628a23 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 19:00:47 2021 -0700 Update interface.html commit bc71f317311509e8f3fd5054e6c3efaa05bc0416 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 18:47:13 2021 -0700 Update interface.html commit cfde9e14a87466a8dc7cb92934c3af373f6a43d0 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 18:41:40 2021 -0700 Update interface.html commit 135165c983beca48190d091e355436100beee41d Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 18:37:52 2021 -0700 Add files via upload commit d50ba356d68ebeffd028a924450d4a6ad4fddd74 Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 18:36:59 2021 -0700 Update apps.json commit a385c0992280070dbcbd91b8663600ea42d2749c Author: Gordon Williams Date: Fri Dec 3 12:04:40 2021 +0000 openstmap .10: Improve scale factor calculation to fix scaling issues (#984) commit 052eb41ebc248ab874f7b188318db48638957a7f Author: Gordon Williams Date: Fri Dec 3 09:20:13 2021 +0000 Stop crypto polyfill being pulled in - fix http://forum.espruino.com/conversations/369197/#comment16294286 commit 6baddd3b433d318d196c0f2d1c73df2572f2600e Author: Gordon Williams Date: Fri Dec 3 09:15:37 2021 +0000 Add gbdebug app commit b5fa5fb64e60e70fc104bd60c08a7ef12b2c3146 Author: Gordon Williams Date: Fri Dec 3 08:24:12 2021 +0000 tweak for lint errors - still some assignment warnings commit d504017782a5ecf7b80da27a1c855f95865c86ea Merge: e2ae57fa 633cad5c Author: Gordon Williams Date: Fri Dec 3 08:18:47 2021 +0000 Merge pull request #986 from stephenPspackman/master pooq Roman - a watch face commit e2ae57faa4bb2c338f74daa538971c67c02b687a Merge: 79f37b2b 3595fab0 Author: Gordon Williams Date: Fri Dec 3 08:13:52 2021 +0000 Merge pull request #951 from rigrig/qmsched-clean Move Quiet Mode LCD options from global settings to the Quiet Mode Schedule app commit 79f37b2bfa208a6b831d1240c90d3c019ee4d6a5 Merge: 56b9e04f b595e603 Author: Gordon Williams Date: Fri Dec 3 08:12:21 2021 +0000 Merge pull request #987 from hughbarney/master Pebble: use LECO1976 font, update boot icon, redo screenshots commit 633cad5cd3f312bc9db84623dfe4e9b6d7199e57 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Fri Dec 3 00:11:07 2021 -0800 Update app.js Fix (hopefully) time zone issues and boundaries in the event scanner. commit b595e603334f701cc5feb7e29a2eae804e4b250c Author: hughbarney Date: Thu Dec 2 22:17:00 2021 +0000 Pebble: switched to LECO1976 font and slanting boot icon commit 3595fab079eb6a91596bc994c7d744109ed5c4fc Author: Richard de Boer Date: Fri Nov 26 20:05:40 2021 +0100 qmsched: manage LCD options Also migrates old settings file: we now store options in qmsched.json, instead of in the global setting.json. commit d743b2266abf069297de59248cb366d6b04ec63c Author: Richard de Boer Date: Tue Nov 23 21:27:37 2021 +0100 boot: remove Quiet Mode options Updating these will be handled by the Quiet Mode Schedule app (qmsched) commit c24f67b06bbb5417355398149b8e4ad12f8d0c19 Author: Richard de Boer Date: Tue Nov 23 21:25:26 2021 +0100 settings: remove Quiet Mode LCD options Updating these will be handled by the Quiet Mode Schedule app (qmsched) commit 32980bf3befaf7a047cfc808df2d9cbd547813ce Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 13:04:29 2021 -0800 Update apps.json Declare pooqroman.json, our private config file. commit ade94521b7da3217c6210d0d5e8873012719a792 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:57:25 2021 -0800 Update README.md Github flubs UTF-8? Really? commit 2906e228bad106b86c176ccf8e1639f3c67dd556 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:54:03 2021 -0800 Update apps.json commit 9c8fd937839ab2fd784abd28e2e991b5d010cd26 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:53:18 2021 -0800 Create README.md commit 6ed4565ee1feb936fc341207cff4e058eeb37150 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:16:53 2021 -0800 Add files via upload Upload the right file this time :-}. commit 98bb9c28b3aac54a7a65e2eefd28dccba5a8dbef Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:02:15 2021 -0800 Add files via upload commit 4803365ab3f8a6b3e2f9a6f650b642326a952010 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 11:49:28 2021 -0800 Update app.js Conform to filename conventions for our settings file—it is json. commit 8ff08cbaab00ce915eac1cf66ac2af4aaee220d9 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 11:35:39 2021 -0800 Create resourcer.js commit ad96a97ae9fc12d8d93dceb60d1c861ce60ad630 Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 11:34:25 2021 -0800 Create app-icon.js commit 2fc3cee13926258243f86a791c2e175cc9ceb07b Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 11:27:53 2021 -0800 Create app.js commit 43a68fb908f7eca0adf27079b5be3cbfa2236fac Author: hughbarney Date: Thu Dec 2 19:01:40 2021 +0000 Pebble: 0.03 changed font to Leco1976, updated screenshots commit 56b9e04ff0575334c07849bf83f829fc98c08472 Author: Gordon Williams Date: Thu Dec 2 10:37:08 2021 +0000 new core commit 9d26a6448ef93694da643b6152439bc4db516e96 Author: Gordon Williams Date: Thu Dec 2 10:28:38 2021 +0000 launcher 0.09: Bangle.js 2 - pressing the button goes back to clock (fix #971) After 10s of being locked, the launcher goes back to the clock screen commit 5b967184b671315b2d474e1f5eefeff9073c1bb0 Author: Gordon Williams Date: Thu Dec 2 10:07:45 2021 +0000 0.03: Fix unfreed memory, and clearInterval that disabled all clocks at midnight (fix #946) Fix app icon Change menu order so 'back' is at the top commit ce2d1822477e9bc1468fc77f5ce31f4dc850a8cf Author: Gordon Williams Date: Thu Dec 2 09:43:03 2021 +0000 tweak 2v11 firmware mentions commit 829ee9129a8bcacd443c493e9111166bfaaa4b0e Merge: 0cb1dfbb 7a1bb02b Author: Gordon Williams Date: Thu Dec 2 09:06:21 2021 +0000 Merge pull request #983 from hughbarney/master Pebble: deploy settings file, updated README commit 0cb1dfbb82afe9a1d3adc96489b8883c70775469 Merge: e0018a49 3baa465f Author: Gordon Williams Date: Thu Dec 2 09:06:07 2021 +0000 Merge pull request #982 from rigrig/delete-settings-library remove Settings module commit e0018a495c3ea51cce4e3834db0ed899c2fc3872 Merge: 7218acf0 cb8ee706 Author: Gordon Williams Date: Thu Dec 2 08:12:16 2021 +0000 Merge pull request #981 from andrewgoz/master New icon, improved UI commit cb8ee706252666bbfd215af26ecd87acc39d077c Author: Andrew Gregory Date: Thu Dec 2 16:05:36 2021 +0800 Update app.js commit 012982e910436c5abe2ad6f28f68a96762343a18 Author: Andrew Gregory Date: Thu Dec 2 16:03:22 2021 +0800 Update README.md commit 7a1bb02bced4f0080d838bbe7ca3923b1e8d665f Author: hughbarney Date: Wed Dec 1 21:07:41 2021 +0000 Pebble: updated README commit bd8bb638d434df8a8cbfab84272f39d1a86b0755 Author: hughbarney Date: Wed Dec 1 20:29:34 2021 +0000 Pebble: deploy pebble.settings.js in apps.json commit 3baa465f01e5df16ff15311ec91c7896eabd345d Author: Richard de Boer Date: Wed Dec 1 19:34:52 2021 +0100 remove Settings module Better not to have this at all than to have a library that you can't actually use in widgets/boot/settings code commit b848c45ce4618e7d9d737437a30812bf14c1cea0 Author: Andrew Gregory Date: Wed Dec 1 23:42:17 2021 +0800 Improve token display Limit label length. Reduce digits font size until it fits. commit 86ea0554b37139afc295437d45b2d85c9b4aee3c Author: Andrew Gregory Date: Wed Dec 1 23:26:45 2021 +0800 Colour icon commit 3305a5db6ab4e40ef45ea54513c656b503195450 Author: Andrew Gregory Date: Wed Dec 1 23:23:44 2021 +0800 Colour icon commit 26cc978a40ffcf415db086025cc63910f7e8e943 Author: Andrew Gregory Date: Wed Dec 1 22:29:37 2021 +0800 Update README.md commit 21961edf42856a2b82f45a8bbbb6751247fa658d Author: Andrew Gregory Date: Wed Dec 1 22:26:01 2021 +0800 Update ChangeLog commit 4d239bf71e5cc8312e3a5c762088c27ad9f20491 Author: Andrew Gregory Date: Wed Dec 1 22:24:43 2021 +0800 Version 0.03 commit 16f20970d9294d144347cfb02605d1ddc4472be2 Author: Andrew Gregory Date: Wed Dec 1 22:21:21 2021 +0800 Limit scanned label length Fixed #5 commit d4ddf22399667a2cb98f73c375a98f11869512a3 Author: Andrew Gregory Date: Wed Dec 1 22:15:55 2021 +0800 Try new JSON settings format commit 60a8c487ad9035780ffbaf0a9a5db88d9743fe99 Author: Andrew Gregory Date: Wed Dec 1 22:05:53 2021 +0800 Support updated settings file commit 7a9b64a7fd9667181294406de59975ef240a010d Merge: dfd7a02e 7218acf0 Author: Andrew Gregory Date: Wed Dec 1 21:28:07 2021 +0800 Merge branch 'espruino:master' into master commit 7218acf0b470bb6ba2300ed7cc4791ceefe0bcfc Merge: adca628e a789e0be Author: Gordon Williams Date: Wed Dec 1 13:26:44 2021 +0000 Merge pull request #980 from myxor/poweroff-icon-color-fix Poweroff: icon color fix & README improvement commit dfd7a02e12f977e45699b6a1bbbd49c22a385633 Author: Andrew Gregory Date: Wed Dec 1 21:26:41 2021 +0800 Show placeholder "Calculating" Fixes #2 commit a789e0bea4945dd4461469b26f25744a9a3dc46d Author: Marco H Date: Wed Dec 1 13:55:25 2021 +0100 Icon white with 1px black border commit ca6b73e3e48c2a2b1ee157a6d02d166a0195324c Author: Marco H Date: Wed Dec 1 13:54:49 2021 +0100 Icon white with 1px black border commit 871c345cea41816a167170ef019fd6f041f0ccb0 Author: Marco H Date: Wed Dec 1 13:49:25 2021 +0100 Update README.md commit e2a4428be2a8369d51c30b4b34d367983f35c672 Author: Marco H Date: Wed Dec 1 13:48:03 2021 +0100 Fix gramar and link in README commit 2d190278f224253b969b8a0c742166d4fe193147 Author: Marco H Date: Wed Dec 1 13:45:24 2021 +0100 Change app icon color to white commit f3dffdb3e1d43cce05fde4a1bd31d043c758eedb Author: Marco H Date: Wed Dec 1 13:44:12 2021 +0100 Change app icon to white commit adca628e2ceff835b4fabdd2798b1b7b99ae0d33 Merge: 38c6e160 edec2442 Author: Gordon Williams Date: Wed Dec 1 12:06:47 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit edec24429acc747b80c0be6736a5919559bc3f91 Merge: 013d7704 43312a78 Author: Gordon Williams Date: Wed Dec 1 09:37:09 2021 +0000 Merge pull request #978 from myxor/mylocation-spelling Spelling issue in mylocation README commit 43312a782a58cbbe6cf2f8c4d49ae1d898bc82d5 Author: Marco H Date: Wed Dec 1 10:23:07 2021 +0100 Update README.md Fix spelling of the Scottish capital city in the README :) commit 013d7704a9997079de9f4ef0eee61745504d9e37 Merge: 527bbf8e a9530f64 Author: Gordon Williams Date: Wed Dec 1 09:00:19 2021 +0000 Merge pull request #973 from rigrig/widbars New widget: Widbars commit a9530f64ea9b0ed1e96dd1ddf6eac897943ec223 Merge: 8580952e 527bbf8e Author: Gordon Williams Date: Wed Dec 1 09:00:08 2021 +0000 Merge branch 'master' into widbars commit 527bbf8e59798bb73f0a7859c3f7f290dc31c111 Merge: 68b73d2e a44d5420 Author: Gordon Williams Date: Wed Dec 1 08:59:27 2021 +0000 Merge pull request #974 from rigrig/widbatpc-fix widbatpc: Fix drawing the bar when charging commit 68b73d2e17df1375fd0f6fc5b4172ea484b95444 Merge: 097a3153 1108983c Author: Gordon Williams Date: Wed Dec 1 08:58:35 2021 +0000 Merge pull request #977 from alainsaas/master New app: A Speech Timer commit 1108983cbad1f5a8cf2862bb5b03d8592e770303 Merge: 3c7d6b79 097a3153 Author: Gordon Williams Date: Wed Dec 1 08:58:30 2021 +0000 Merge branch 'master' into master commit 097a3153952073b468bd1fdab0029e66cb747fe6 Merge: 3ddd1696 24e2b01e Author: Gordon Williams Date: Wed Dec 1 08:51:48 2021 +0000 Merge pull request #975 from hughbarney/master Mylocation (APP), Pastel sunrise, sunset, A Pebble Clock to keep the revolution going commit 3c7d6b795d50aac5d6c3945a4a9af1ee013154ad Author: Alain Saas Date: Wed Dec 1 15:28:23 2021 +0900 Update apps.json commit 3507dcde457b78beede4ee033af1f38090a1a71d Author: Alain Saas Date: Wed Dec 1 15:26:52 2021 +0900 Update apps.json commit 541adf4c16c7bf2e522c3343b7675831b9e13343 Author: Alain Saas Date: Wed Dec 1 15:22:44 2021 +0900 Update README.md commit 8f0856d8716af6e1058a9923e0e5850734303d72 Author: Alain Saas Date: Wed Dec 1 15:21:21 2021 +0900 Update README.md commit 13b01fe82955ca3ba595ed115fd1bfc6acd7a4fc Author: Alain Saas Date: Wed Dec 1 15:20:52 2021 +0900 Add files via upload commit 18c3461e6e4191433897f3b1e10a9f68f7b97fa8 Author: Alain Saas Date: Wed Dec 1 15:20:41 2021 +0900 Create README.md commit da133e2ccd7ee837d078430095733180929fff4b Author: Alain Saas Date: Wed Dec 1 15:09:06 2021 +0900 Create ChangeLog commit 9033db08bf1a56d1f852a60795eb75d2bdee0f70 Author: Alain Saas Date: Wed Dec 1 15:03:45 2021 +0900 Create app-icon.js commit 673fa8820f779a79bcfa46819990e5717a4d49ba Author: Alain Saas Date: Wed Dec 1 15:01:48 2021 +0900 Add files via upload commit 312bed6491d7a9341c7f9de4d1f309e2f85b3fe5 Author: Alain Saas Date: Wed Dec 1 15:00:58 2021 +0900 Create app.js commit 24e2b01e22e8534029bcf8195c8f4e5eba209208 Merge: 7785c7ea 3ddd1696 Author: hughbarney Date: Tue Nov 30 23:45:24 2021 +0000 Merge remote-tracking branch 'upstream/master' commit 7785c7ea56867250df5985d0a27a7fd35478e501 Author: hughbarney Date: Tue Nov 30 23:38:29 2021 +0000 Mylocation: make into an app commit 848ccd2be996e5127d09e36960775e5cb45a4143 Author: hughbarney Date: Tue Nov 30 23:16:56 2021 +0000 Mylocation: make into an app commit 8ad8ed15dc8e9fe4091d2f3a5b1faf7b828bb0c5 Author: hughbarney Date: Tue Nov 30 23:15:45 2021 +0000 Mylocation: make into an app commit 8e56dce22c49a1a80b4dc9142092ea5238ab34ad Author: hughbarney Date: Tue Nov 30 23:10:36 2021 +0000 Mylocation: make into an app commit 4cbd7e8ea63c5aef83f72ceedcad7a2cc811917d Author: hughbarney Date: Tue Nov 30 22:46:37 2021 +0000 Mylocation: make into an app commit e3745f94fc0fd7bf367727a1fa2f43c26bde89b5 Author: hughbarney Date: Tue Nov 30 22:43:45 2021 +0000 Mylocation: make into an app commit a44d542053941c7bb588e3d444aeb02ad6aba676 Author: Richard de Boer Date: Tue Nov 30 22:30:28 2021 +0100 widbatpc: Fix drawing the bar when charging commit 8580952e69609f53736089e72e1028117fd5c09f Author: Richard de Boer Date: Tue Nov 30 21:06:23 2021 +0100 widbars: comment out HRM/temperature They didn't seem very useful commit 7caac64a8653f06f95650228abc98018de8df9b8 Author: Richard de Boer Date: Tue Nov 30 20:40:33 2021 +0100 widbars: new widget commit 4669099645a46062a63a9e77771b7ab1cf531ef2 Author: hughbarney Date: Tue Nov 30 18:11:08 2021 +0000 MyLocation added mylocation.app.js commit 3ddd169612095949d6e10a0c11f8f283bdd1fc29 Merge: a20a2e42 31eaeade Author: Gordon Williams Date: Tue Nov 30 17:14:26 2021 +0000 Merge pull request #972 from andrewgoz/master Fix JSON save format commit 31eaeadee2929e93fdee2ee01974cf2779e5ed13 Author: Andrew Gregory Date: Wed Dec 1 00:26:39 2021 +0800 Update Authentiwatch version commit f094cc6e354ada59d50719bd8af60bfe1f258cb3 Author: Andrew Gregory Date: Wed Dec 1 00:25:00 2021 +0800 Update ChangeLog commit e1c67cf345cf0b1093caa7c41c8e8981de8f24cb Author: Andrew Gregory Date: Wed Dec 1 00:22:23 2021 +0800 Save in new JSON format too commit 989dc5ccd4ede2fcc8f9bc82d9d5c4ad84981360 Author: Andrew Gregory Date: Wed Dec 1 00:18:44 2021 +0800 Use new JSON format. commit 51c91bf9eede044c0093bf265855d149547697d2 Author: Andrew Gregory Date: Wed Dec 1 00:17:26 2021 +0800 Rename variable commit f127bef66b9c4c88e8094594a90ac4aad53b26e9 Author: Andrew Gregory Date: Wed Dec 1 00:14:47 2021 +0800 Load new JSON format commit 0e3b17be6757527c1f372fa8b9d5bbc8f3985035 Author: hughbarney Date: Tue Nov 30 16:12:47 2021 +0000 Added icon for mylocation commit c1a48e7b48ddb4087b63171bde681ea1e79ca76f Author: Andrew Gregory Date: Wed Dec 1 00:09:52 2021 +0800 Try different JSON format commit 78c3791c1e6af33dc127418a172a22b0b9c96df9 Author: hughbarney Date: Tue Nov 30 13:48:20 2021 +0000 Pebble screenshot updated commit 5b7bbd83db31769a8b255821729d1cad5d5a81c8 Author: hughbarney Date: Tue Nov 30 13:30:13 2021 +0000 Pebble: added README, battery warning if below 30% commit 4cf5d860834aed17316a9b02b38539c2f6295bf1 Merge: ac1425ca a20a2e42 Author: hughbarney Date: Tue Nov 30 13:18:27 2021 +0000 merged upstream commit ac1425ca7cfaf46041790a3223e1f3383f7a2ae2 Author: hughbarney Date: Tue Nov 30 13:07:56 2021 +0000 set mylocation to an app commit a20a2e4292cef623f15d5408061ebd8463672dd1 Merge: dec4ec8c c30ee355 Author: Gordon Williams Date: Tue Nov 30 08:28:19 2021 +0000 Merge pull request #967 from myxor/poweroff-app Poweroff app commit c30ee355bb1f857e42d82c99d8805095e68b88b5 Merge: bd1fa974 dec4ec8c Author: Gordon Williams Date: Tue Nov 30 08:28:14 2021 +0000 Merge branch 'master' into poweroff-app commit dec4ec8c19d070e9d980a83d564f9ad22425c89a Merge: c1dd7c6c d2cb4be4 Author: Gordon Williams Date: Tue Nov 30 08:27:16 2021 +0000 Merge pull request #966 from reelyactive/master Added SensiBLE app commit bd1fa974d18bc8840cdfc8bf61091790a2825df1 Author: Marco H Date: Tue Nov 30 09:04:43 2021 +0100 Update ChangeLog commit 31dba4df497d464374237b9617f576d3cda54f15 Author: Marco H Date: Tue Nov 30 08:59:37 2021 +0100 Change icon to black commit ffd7eebf258636c52f07e82b5fe8fe787c77cb36 Author: Marco H Date: Tue Nov 30 08:59:20 2021 +0100 Change icon to black commit 4a852e713834b4163acff86a1a9edba5cab2f91c Author: Marco H Date: Tue Nov 30 08:52:47 2021 +0100 Rename Readme.md to README.md commit a08a8d8a24139b29d091f0c6847d80612066eef4 Author: Marco H Date: Tue Nov 30 08:52:29 2021 +0100 Update apps.json commit 166994311e6bfacbd6b1327a41800a489bf05852 Author: Marco H Date: Tue Nov 30 08:46:04 2021 +0100 Add app to apps.json commit ea10cea706d638de3827202fde9400317412e142 Author: Marco H Date: Tue Nov 30 08:44:45 2021 +0100 Update Readme.md commit f73055253e76284dd520080ad03cefac225b9d18 Author: Marco H Date: Tue Nov 30 08:42:30 2021 +0100 Add files via upload commit eef1569c9900cce4eb7c779aa6b51a7bc60682dc Author: Marco H Date: Tue Nov 30 08:41:49 2021 +0100 Create app-icon.js commit eeb3206a095f0a9db31c0a95b917b2b2d506f5e0 Author: Marco H Date: Tue Nov 30 08:39:36 2021 +0100 Create Readme.md commit c822b62789b269d9f1732e3e664a4670dd4d233a Author: Marco H Date: Tue Nov 30 08:36:28 2021 +0100 Create app.js commit 8775a6f3392fedbb2385dde7558254ae5ba559ec Author: Marco H Date: Tue Nov 30 08:24:43 2021 +0100 Create ChangeLog commit d2cb4be4b4dc7e1a0ee50dfd0331815e5469ddc8 Author: jeffyactive Date: Mon Nov 29 21:48:30 2021 -0500 Corrected variable initialisation commit 4d107148c78d5a7211e2e08664052014059b5371 Author: jeffyactive Date: Mon Nov 29 21:31:53 2021 -0500 Added SensiBLE app commit 6642b216066519d90e1bb0b46c1c8b731ff270b8 Author: hughbarney Date: Mon Nov 29 20:27:25 2021 +0000 added pebble icon commit b50faa919a9f8c50687a16435d7db946771b674b Author: hughbarney Date: Mon Nov 29 20:12:25 2021 +0000 Pebble - long live the rebellion commit 3fa435e57ddde56b59c75074adc0831f9ae2ba67 Author: hughbarney Date: Mon Nov 29 19:58:19 2021 +0000 Pastel, MyLocation updated README files commit 6510e4b7d2965f34404f8973c5d802adfa933d6c Author: hughbarney Date: Mon Nov 29 19:02:01 2021 +0000 Pastel added dependancy on widpedom commit 784f7f84924b2b5bf670086b237c537bc6eac0d7 Merge: 22d06c8c c1dd7c6c Author: hughbarney Date: Mon Nov 29 18:57:56 2021 +0000 resolved apps.json conflict commit 22d06c8cf6f6fb7a1e0c899480cb8c40785d81f0 Author: hughbarney Date: Mon Nov 29 18:45:44 2021 +0000 Pastel changed dependancy on MyLocation to type app commit 38c6e16010837c73e32022bb7ce999402f1a44b4 Author: Gordon Williams Date: Mon Nov 29 16:29:34 2021 +0000 new about pixels commit c1dd7c6cabbfcae7a68ecbead3a9a8a3a7ac7686 Merge: c2b70103 616afad0 Author: Gordon Williams Date: Mon Nov 29 11:37:02 2021 +0000 Merge pull request #957 from JamesLMilner/minor-style-updates Tweak styling to give a more aligned and spaced out layout commit c2b70103a6347d4f41b34c0dcbf20e45cc4bbd47 Merge: cd0de091 3e1c90e4 Author: Gordon Williams Date: Mon Nov 29 10:54:30 2021 +0000 Merge pull request #955 from alainsaas/master New app: A Clock with Timer, v0.01 commit 3e1c90e48582f548740f2e5c38b10c72e23a62a6 Merge: 17e13a63 cd0de091 Author: Gordon Williams Date: Mon Nov 29 10:54:23 2021 +0000 Merge branch 'master' into master commit cd0de091f3d590ac9eb32008a4a84506dc020807 Merge: 0dd00635 6fc1e738 Author: Gordon Williams Date: Mon Nov 29 10:52:43 2021 +0000 Merge pull request #956 from JamesLMilner/mandlebrotclock Add Mandlebrot Clock app commit 0dd00635b8f7da9a37c4e5318198c0af1d180c81 Merge: 72d3c44f ba506741 Author: Gordon Williams Date: Mon Nov 29 10:50:28 2021 +0000 Merge pull request #959 from dratini0/recorder-fixes Assorted bugfixes to the recorder apps commit 72d3c44ffd4896b00a187f926604e4717742ac7c Merge: 33ce71f2 0d45f2c2 Author: Gordon Williams Date: Mon Nov 29 10:09:47 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit 0d45f2c2e8d57fa50413e0477888159aaa05c4b3 Merge: c4238eba 075d7a84 Author: Gordon Williams Date: Mon Nov 29 10:08:07 2021 +0000 Merge pull request #962 from myxor/myxor-temperature-app Update degree Celsius temperature app commit 33ce71f279162e61bf1be8247ed87c1f12331e89 Author: Gordon Williams Date: Mon Nov 29 10:06:21 2021 +0000 fix for sanity test errors commit c4238ebae7b5e25baced884730d03787f932e497 Merge: d4f1e7d3 10d170d3 Author: Gordon Williams Date: Mon Nov 29 10:01:40 2021 +0000 Merge pull request #950 from jg76379/master Add new Interval Timer App commit 10d170d31ebdf744a7eaabada4d0f9f918a05646 Merge: 4f5ec608 d4f1e7d3 Author: Gordon Williams Date: Mon Nov 29 10:00:29 2021 +0000 Merge branch 'master' into master commit d4f1e7d3cb2d79bb69405e46300afcf2eedaf4c7 Author: Gordon Williams Date: Mon Nov 29 09:52:47 2021 +0000 minor fixes for #952 commit 795d2b83ec1b6bd5bcc26239beda7b56fa3be7b7 Merge: d1534bdc 99ec40cd Author: Gordon Williams Date: Mon Nov 29 09:51:51 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit 99ec40cd8ead828bc2572914234a06c554410089 Merge: 30e421e2 6220a88d Author: Gordon Williams Date: Mon Nov 29 09:48:20 2021 +0000 Merge pull request #952 from rigrig/locale-12h locale: Apply 12hour setting to time commit 075d7a840ca46181a72da0dc6ba667e64787b950 Author: Marco H Date: Mon Nov 29 10:43:42 2021 +0100 Update apps.json commit c9d0a199477bf6c6b39a852c73d71fca666adda2 Author: Marco H Date: Mon Nov 29 10:40:32 2021 +0100 Add space after temperature value Add space after temperature value commit baba42ae25a9a90cc53aae0d99ad634d7e57df6c Author: Marco H Date: Mon Nov 29 10:36:31 2021 +0100 Fix changelog syntax commit cd674865479142016b7cb51844b75fbb7f91305f Author: Marco H Date: Mon Nov 29 10:25:14 2021 +0100 Update ChangeLog commit 765a683c894b1e09e1aae1c450b48a53db5b54a6 Author: Marco H Date: Mon Nov 29 10:23:54 2021 +0100 Update app.js Improving messages and added Celsius sign commit 30e421e225c329423d77f5dae7e1d69a6ba7df73 Merge: 94f8b4bc 918dcba6 Author: Gordon Williams Date: Mon Nov 29 08:38:52 2021 +0000 Merge pull request #960 from leer10/master Add 93 Dub Watchface commit 918dcba633d7e9cdb6aa6017f0961006afcb0a88 Merge: bb537b17 050b9c2b Author: leer10 Date: Sun Nov 28 14:58:18 2021 -0800 Merge pull request #1 from leer10/style-cleanup style cleanup commit 050b9c2b807c5e66405a8549bbfa47e4a1421f33 Author: leer10 Date: Sun Nov 28 14:56:18 2021 -0800 Update apps.json commit ada93e894d76497dd48956020cd3dc3649441dbf Author: leer10 Date: Sun Nov 28 14:55:46 2021 -0800 Update ChangeLog commit 590f022a91c430a832df0d9c64d9cde837b82cdf Author: leer10 Date: Sun Nov 28 14:55:32 2021 -0800 Update ChangeLog commit f423a6b91bbd698e72fa6a7cc002b068f506e291 Author: leer10 Date: Sun Nov 28 14:54:17 2021 -0800 Update app.js commit bb537b1738573c756207cb883c4ed8fd95256bb0 Author: leer10 Date: Sun Nov 28 14:27:14 2021 -0800 Update ChangeLog commit 656ca2ecaa8288bfc69c9f3a1ebbbdf2b1c56f36 Author: leer10 Date: Sun Nov 28 14:25:23 2021 -0800 Update apps.json added new version in json commit 438885ae922f25a3927bc5b785f2bba64d6272ee Author: leer10 Date: Sun Nov 28 14:24:18 2021 -0800 Add files via upload commit b9b7cfb50cfc62401a768653d9b4fd910256840c Author: leer10 Date: Sun Nov 28 14:23:49 2021 -0800 Delete screenshot.png commit 36aead94e7683da9aaf46601e28267ccf386a8aa Author: leer10 Date: Sun Nov 28 14:23:24 2021 -0800 Create ChangeLog commit b2cb4e7c0a84a49abfa0e04d16e2471b829d5b40 Author: leer10 Date: Sun Nov 28 14:22:04 2021 -0800 Add files via upload commit b25ad7573e19ccf6f617381e5ac78260ddeef36a Author: leer10 Date: Sun Nov 28 14:21:57 2021 -0800 Delete screenshot.png commit c3fac095b83c9936dedef8dad70578b4593923db Author: leer10 Date: Sun Nov 28 14:19:21 2021 -0800 Update app.js add discominotaur's adjustments (cause a battery on the watchface isn't useful when the widget does the work anyways) maybe i'll do it as a setting later commit 426ec0350fff5ce87dd2e8a6096c80f2f0e1b448 Author: leer10 Date: Sun Nov 28 14:10:47 2021 -0800 Update README.md added credits commit ba50674173c0fae02948c69fb8eaa0098ae4efe3 Author: Balint Kovacs Date: Sun Nov 28 18:58:26 2021 +0000 Update app versions and changelog commit 1a118a60374099538f65f24b347907b1ac12ea25 Author: Balint Kovacs Date: Sun Nov 28 18:44:47 2021 +0000 Recorded: Slightly improve plot altitude if data has NaNs commit 22fa78ff8d82e3a0512a3538278cc8e0ff735b28 Author: Balint Kovacs Date: Sun Nov 28 18:43:44 2021 +0000 Even out x axis grid points commit 466fd2155c81f44cfd30c7e3f15f460f5a8662c0 Author: Balint Kovacs Date: Sun Nov 28 18:18:18 2021 +0000 Remove superfluous semicolon commit a622781628c35eca58831c36e658e36b9a752712 Author: Balint Kovacs Date: Sun Nov 28 16:46:01 2021 +0000 Make the recorder handle missing coordinates in plot speed commit 69c6a34ead08410eee37000d7405f287aa416548 Author: Balint Kovacs Date: Sun Nov 28 15:46:02 2021 +0000 Fix some text overflowing the screen in recorder and gpsrec On Bangle.js 2 commit 616afad05616b13ca1d3618b5c899add6ab9624b Author: James Date: Sun Nov 28 14:10:29 2021 +0000 Title indent again commit 41c80ae76793e7bce50cd51f09a92cad48551c3b Author: James Date: Sun Nov 28 14:08:30 2021 +0000 Indent logo slightly to line up more accurately commit 617ed688c532f77bac0e09f3a5d10fcb796d2f77 Author: James Date: Sun Nov 28 14:05:49 2021 +0000 Use rem commit a28b3b78e407091fb5880be2c6801686b4f0bec2 Author: James Date: Sun Nov 28 13:58:41 2021 +0000 Add spacing to layout, small css tweaks commit 6fc1e738f1e1bdaaa45bb2ea34b33d97be3f37ee Author: James Date: Sun Nov 28 13:22:42 2021 +0000 Add mandlebrot clock app commit 89e88e717211d8c80b0e258114be7498722aa783 Author: leer10 Date: Sat Nov 27 23:39:51 2021 -0800 Update app-icon.js hopefully fix launcher icon commit 40d19aad2e4d672171b4feeee6b9c6f4cdbb11a1 Author: leer10 Date: Sat Nov 27 22:29:57 2021 -0800 Update apps.json added screenshot to app store listing commit d87930e4d37ea5248b7de93825735967e75030b3 Author: leer10 Date: Sat Nov 27 22:27:51 2021 -0800 Update apps.json commit 6eb7a844d6839456c13a4402c5212b9bb9dbd3ad Author: leer10 Date: Sat Nov 27 22:26:36 2021 -0800 Update app.js fix battery graphics commit da41d04d2681afd5bafe9f39660ca6c8a15a787a Author: leer10 Date: Sat Nov 27 22:20:21 2021 -0800 Update apps.json commit 47c8edba4f040716d5860b56588a98687914ac36 Author: leer10 Date: Sat Nov 27 22:19:25 2021 -0800 Add files via upload commit b28986c249a952edaac1b5e4b624ab357dcb81c3 Author: leer10 Date: Sat Nov 27 22:19:09 2021 -0800 Delete app.png commit 9e897dfd50c2ff4cc6c012724305e5e079b02dab Author: leer10 Date: Sat Nov 27 22:13:21 2021 -0800 Update app.js removed other nonfunctional comment block commit 6fd7a0eb633ac47eea07c2befe8f0a96bda19a02 Author: leer10 Date: Sat Nov 27 22:11:06 2021 -0800 Update app.js battery icon actually works now commit 4a3e1bbe28e3180ab04685646a4e41de07993cf4 Author: leer10 Date: Sat Nov 27 21:52:13 2021 -0800 Update app.js 12 hr/24 hr specific behavior now from settings instead of hardcoded commit 3d03895b9dc97c6f7bb20f68e64619612b89cf85 Author: leer10 Date: Sat Nov 27 21:44:49 2021 -0800 Update README.md commit 0d5892769d6862ed8a56dcfcf3fd960893cec688 Author: leer10 Date: Sat Nov 27 21:42:19 2021 -0800 Add files via upload add screenshot for 93dub commit 82e515e0e5c05cd89f871f33fb24654e1e26d5b0 Author: leer10 Date: Sat Nov 27 21:39:55 2021 -0800 Create README.md added dub93's readme commit 8a3f9f848a4dc98f0f1108c46e406ba8007aa45b Author: leer10 Date: Sat Nov 27 21:36:48 2021 -0800 Update app.js stripped license and info block of text since it's already enclosed in an MIT-licensed repo commit 4294a27279f7482cb9abe10fe22d254f2a9a7073 Author: leer10 Date: Sat Nov 27 21:31:41 2021 -0800 Update apps.json apps.json updates commit 251ceb9dd1ee7064f86c4056a280169f299311d9 Author: leer10 Date: Sat Nov 27 21:27:35 2021 -0800 Update apps.json oops comma commit b49223d5b95c3802ca5b9a7e2478a227ad888652 Author: leer10 Date: Sat Nov 27 21:24:09 2021 -0800 Update apps.json commit 2d21ce74459871c238dc12d2ed04c212bd1d814e Author: leer10 Date: Sat Nov 27 21:21:29 2021 -0800 Add files via upload commit c0e5d4432eb48ae7c83d1c62f28a8b8abdc1438b Author: leer10 Date: Sat Nov 27 21:19:34 2021 -0800 Create app-icon.js added icon commit 0d6bfc7c13f024f36e9703dbb4b88289756621f5 Author: leer10 Date: Sat Nov 27 20:59:32 2021 -0800 Update app.js redid background, adjusted graphics to look nice on bangle 2 commit 17e13a63253c868ffc16ad6f11a62ac3e2973c9e Author: Alain Saas Date: Sun Nov 28 13:43:31 2021 +0900 Update apps.json commit a19da85de7e3c880030397b1d89f3f086a0a4e27 Author: Alain Saas Date: Sun Nov 28 13:41:56 2021 +0900 Update README.md commit 9d4c251b730c655dec6fd709a29ca4a4d4c861ff Author: Alain Saas Date: Sun Nov 28 13:39:41 2021 +0900 Update apps.json commit f9fa4a7df132b5a2bf8c804c4164f5c4afb5798c Author: Alain Saas Date: Sun Nov 28 13:32:58 2021 +0900 Update apps.json commit ff95dd3b2c9a74d0173227a88cb1d171639996d1 Author: Alain Saas Date: Sun Nov 28 13:29:06 2021 +0900 Create README.md commit c23960c12c0460cfb015082799f218d8d7e86859 Author: Alain Saas Date: Sun Nov 28 13:20:48 2021 +0900 Add files via upload commit d9d6133559f55421e8b38b2d63eef3e2c549bfd8 Author: Alain Saas Date: Sun Nov 28 13:20:15 2021 +0900 Create ChangeLog commit de4d744e266a47aa072cd1f07c6f2362d62efd10 Author: Alain Saas Date: Sun Nov 28 13:19:15 2021 +0900 Create app-icon.js commit de9a526517577136b2060e0d5138b943cc0951fe Author: Alain Saas Date: Sun Nov 28 13:14:06 2021 +0900 Add files via upload commit 662963b2089e0e8bc6f0d1548202462833143d46 Author: Alain Saas Date: Sun Nov 28 13:06:47 2021 +0900 Create app.js commit 56f3044e5e5fedbbddffc9810e24135cca7acfbf Author: leer10 Date: Sat Nov 27 12:02:34 2021 -0800 Update app.js background needed redraw after notification background redraw broke widgets, so temp fix commit 228a3664c7ab9774a8dad99f05fc1bf3c5570e61 Author: leer10 Date: Sat Nov 27 11:41:39 2021 -0800 Update apps.json commit 33b3e918693959e9828cafa1354b6df3a5a5c90d Author: leer10 Date: Sat Nov 27 11:40:13 2021 -0800 Update apps.json commit 7d646945df493e7c95a51c7ce6e7224662150090 Author: leer10 Date: Sat Nov 27 11:37:56 2021 -0800 Update apps.json commit dabaa06efbe3698e11afad390bb06d3e48c93f12 Author: leer10 Date: Sat Nov 27 11:33:19 2021 -0800 Create app.js commit 3fbb46b046c65d8d9f1a37b600bddc0ee1e16e03 Author: hughbarney Date: Sat Nov 27 11:23:03 2021 +0000 Pastel, recalc sunrise,sunset every hour commit 21fe6e7ea486ee553bd1bac8399d153c50171380 Author: hughbarney Date: Fri Nov 26 21:52:05 2021 +0000 Pastel added dependancy on MyLocation app, display sunrise,sunset times commit b426c479a32595b592acc1eb68a202e3ed5f0c17 Author: hughbarney Date: Fri Nov 26 21:29:46 2021 +0000 Pastel added dependancy on MyLocation app, display sunrise,sunset times commit 070558a0a62027fc67e9d54b45ef81e2166d6fab Author: hughbarney Date: Fri Nov 26 20:48:27 2021 +0000 MyLocation - adds menu to set preferred city or setup from GPS commit 6220a88d29ace89e386ae3d7630c112bc8905b73 Author: Richard de Boer Date: Fri Nov 26 21:29:58 2021 +0100 locale: Apply 12hour setting to time Fixes #892 commit ce0e50ed949eeffc97bd2ec3db1fdb38830c3e4e Author: hughbarney Date: Fri Nov 26 20:25:28 2021 +0000 MyLocation - adds menu to set preferred city or setup from GPS commit 4f5ec608de77dd4febf68db0b6d3aa9703b73b16 Author: James G Date: Fri Nov 26 12:48:20 2021 -0500 fix formatting in README for interval timer app commit 2ae9585193c1394bca43a9160dcfbcdd29f14803 Author: James G Date: Fri Nov 26 12:43:36 2021 -0500 rename intervalTimer.app.js to app.js commit bff43e662da03dfd1648ef656062195689448236 Author: James G Date: Fri Nov 26 12:42:13 2021 -0500 Fix url for intervalTimer.app.js in app.json commit fc6ecaccce783eb5bf6d3571b885bdfcf78912be Author: James G Date: Fri Nov 26 12:35:35 2021 -0500 Add new Interval Timer app. commit d1534bdcbf2281343f023d4c8aada9169283ac84 Author: Gordon Williams Date: Fri Nov 26 15:05:05 2021 +0000 comment commit 94f8b4bca79a0b79ad0e3635ad56786722bfa802 Merge: dc8edba0 4cfbe11e Author: Gordon Williams Date: Fri Nov 26 12:01:01 2021 +0000 Merge pull request #947 from peerdavid/master [LCARS clock] Alarm works also if clock is closed and opened again. commit dc8edba00ddf236c79279313f36a05795bf9e3ac Merge: db1c5b74 fa4fd118 Author: Gordon Williams Date: Fri Nov 26 11:59:41 2021 +0000 Merge pull request #948 from Smooklu/master Updated fd6fdetect commit db1c5b74817a3be17f923104138e6f46c03bb514 Merge: a4299586 045251f5 Author: Gordon Williams Date: Fri Nov 26 11:59:15 2021 +0000 Merge pull request #949 from johan-m-o/master Update Spirit Level to work on Bangle.js 2 commit 045251f55f9a71f755ffdcdb120e032dc437096a Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:50:19 2021 +0100 Update spiritlevel.js commit b6e5175675890222b1f23318a2b466dcf6302238 Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:44:21 2021 +0100 Update spiritlevel.js commit 6f300299b55f60098d262c02e0c7ed1a5576fc38 Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:34:52 2021 +0100 Update apps.json commit fe5ca8bc76b9c1a1d28159af6dba92af14fd4e57 Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:33:49 2021 +0100 Update spiritlevel.js commit a89dd4d544b306acb94edeb63de6a90e1e946565 Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:23:43 2021 +0100 Update ChangeLog commit a4299586e8055425f1ea638090ac267081845a76 Author: Gordon Williams Date: Fri Nov 26 10:04:02 2021 +0000 cscsensor 0.06: Now read wheel rev as well as cadence sensor Improve connection code commit fa4fd118e28787458623159617600b4d42432e98 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:20:52 2021 -0600 Update apps.json commit 43b447f81c3f40b1c042a9551ec71a1f29aa4d91 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:17:35 2021 -0600 Update apps.json commit 1ea1706e61149214a3d423b2a9eeba7ae1ca1eaf Merge: 08fd95ab 095165c5 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:04:40 2021 -0600 Merge branch 'espruino:master' into master commit 08fd95ab9a3cb50f26605cebb4ae7411c1823c48 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:04:09 2021 -0600 Update README.md commit bc27677f5ef33bf85d67df951edae6dce437248e Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:02:43 2021 -0600 Update apps.json commit f9286cbee97efeb9c63f2672b520e8976e59e45a Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:00:48 2021 -0600 Update README.md commit a1a56601c0579d4a9e9756eb83bfcd8a802a9510 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:00:38 2021 -0600 Update README.md commit 4cfbe11e45690f31e3010b7234a26e3ec3695dff Author: David Peer Date: Thu Nov 25 20:00:36 2021 +0100 Show text for each icon. commit 4fb4d12ba48dee2869338cf1d4e4675e18a0d86a Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:00:28 2021 -0600 Update README.md commit 6508ed8b3fc99d0a39fb460a47f7d989c6f3eb7b Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:57:25 2021 -0600 Update apps.json commit 85b7115c731479ede76db6c659a071f9390dd352 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:54:33 2021 -0600 Update README.md commit 6482297881ddfeef3202ae235e1e4a38f1826f9b Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:53:16 2021 -0600 Update ChangeLog commit f5940b5bdbc0fc3118544821b6508f78f10a59f1 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:52:27 2021 -0600 Update README.md commit 9f002934015e4bacc43a652703418d9c8ad7c29e Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:50:35 2021 -0600 Update README.md commit 2818a63e2c6d3116001eca6e0ddf852825dfdd55 Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:48:36 2021 -0600 Create README.md commit 95f845ad4e9408081b9ecf882ad85012bbb4bc7d Author: David Peer Date: Thu Nov 25 19:10:05 2021 +0100 New icon for alarm commit ca3453440c8171ffb53a9d0a69cdfc516f454e56 Merge: dcee49cd 4a530371 Author: David Peer Date: Thu Nov 25 19:01:24 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commit dcee49cdc89867584d140d3cc318b7dabbf930b9 Author: David Peer Date: Thu Nov 25 19:01:22 2021 +0100 New GPS Icon commit 4a5303714d952d0d63df60a9d9f64af9e79a97e0 Merge: 93e2a88a 095165c5 Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Thu Nov 25 18:52:23 2021 +0100 Merge branch 'espruino:master' into master commit 93e2a88a4c42968ab7260a3b56ef0e3a477cf47f Author: David Peer Date: Thu Nov 25 18:51:20 2021 +0100 Updated screenshot commit d99cea9ae0c280c2d765dd0d9b53d7ad82b5a2ad Merge: 232dcc4b 7e1b0422 Author: David Peer Date: Thu Nov 25 18:49:46 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commit 232dcc4b9df3a85b09f1b296a769fead4ea634cb Author: David Peer Date: Thu Nov 25 18:49:44 2021 +0100 Real icons - its an image of the real planet :) commit 095165c5c9673c3322f2a271528a112d1749878b Author: Gordon Williams Date: Thu Nov 25 16:33:45 2021 +0000 oops - fix uncommitted file! commit bf964ce3e4ecdea91718f9dc50052c47f7ac97f2 Author: Gordon Williams Date: Thu Nov 25 16:06:26 2021 +0000 The 'update all' button shouldn't update apps that require 'custom.html' (fix #748) commit 7e1b04225511997c8e4557b5c3f0e58cef2986d1 Merge: ccce57ae 944b24e6 Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Thu Nov 25 16:56:53 2021 +0100 Merge branch 'espruino:master' into master commit ccce57ae89a8d2a19d9d171a50bc39c94a673cc6 Merge: a99d9d5e c381e7ef Author: David Peer Date: Thu Nov 25 16:56:35 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commit a99d9d5e7c649ab498c1ef5b459c2647f52c5703 Author: David Peer Date: Thu Nov 25 16:56:32 2021 +0100 Store alarm in settings commit 944b24e6c34068432786b44343f20c73c56ebf53 Merge: e8264cc8 1b9477be Author: Gordon Williams Date: Thu Nov 25 15:52:25 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit e8264cc8f8c7cde0e88cef06347c9ca67f8dae9e Author: Gordon Williams Date: Thu Nov 25 15:50:07 2021 +0000 messages 0.07: Added settings menu with option to choose vibrate pattern and frequency (fix #909) commit 5f5ca64cb4d305094907e368d8f0e344b694e304 Author: Gordon Williams Date: Thu Nov 25 15:21:59 2021 +0000 android 0.04: Android icon now goes to settings page with 'find phone' commit 6aa6bcf17977e127ef1879cfdb11ce3b972b1772 Author: Gordon Williams Date: Thu Nov 25 15:12:04 2021 +0000 messages 0.06: New messages now go at the start (fix #898) Answering true/false now exits the messages app if no new messages Back now marks a message as read Clicking top-left opens a menu which allows you to delete a message or mark unread commit 1b9477be5d4c5af923b7ef435ae08b721171b7bf Merge: e28f9c15 2b7091bd Author: Gordon Williams Date: Thu Nov 25 12:19:48 2021 +0000 Merge pull request #945 from nlisgo/improve-ux-add-timer Cube Scramble: Improved UX and display solve time commit 2b7091bd6b8c12e3c5bc75244e0eba38f9b223e9 Author: nlisgo Date: Thu Nov 25 11:40:37 2021 +0000 Set default title for showPrompt commit c381e7ef2196963dcc5414fdf583e179122e0362 Merge: 1ab98707 e28f9c15 Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Thu Nov 25 11:41:01 2021 +0100 Merge branch 'espruino:master' into master commit e28f9c157b2540a87387041f54a35ea50572e8c9 Merge: e040cc4e cb9866ff Author: Gordon Williams Date: Thu Nov 25 08:55:39 2021 +0000 Merge pull request #932 from hughbarney/master Pastel: created font modules commit 1ab98707eda9543a4792627c1c91884059345bc0 Author: David Peer Date: Thu Nov 25 09:17:25 2021 +0100 Minor changes commit 9940b38bbd0f53640b4a4ea2e0d70691bae04cea Author: nlisgo Date: Thu Nov 25 00:13:06 2021 +0000 Force LCD on commit f175f4c48c149b7b4b6a317db8105790b97a0f6a Author: nlisgo Date: Thu Nov 25 00:06:02 2021 +0000 Update screenshots commit f6c689eeedfa4d349e2f73cdfabbd0a641502735 Author: nlisgo Date: Wed Nov 24 23:56:47 2021 +0000 Amend app description commit 3c984f1fee70a8af17476a2b751a5c8b128aec36 Author: nlisgo Date: Wed Nov 24 23:52:28 2021 +0000 Cube Scramble: Improved UX and display solve time commit cb9866ffe23bbbff7e6c44edc4ef437a27bdee29 Author: hughbarney Date: Wed Nov 24 21:11:47 2021 +0000 Pastel: updated screenshots and README commit 8b46634c9bb7ea17e4824abbdf7c1cb21859e62d Author: hughbarney Date: Wed Nov 24 21:05:45 2021 +0000 Pastel: updated screenshots and README commit cbb38ec1ceb54db23826c476e0efdbd496b048a6 Author: hughbarney Date: Wed Nov 24 20:18:29 2021 +0000 Pastel: added cycle through info items to bottom of screen commit 469c3296404703ca27ce52a55c4a67fc416ca520 Merge: 37ca6251 e040cc4e Author: hughbarney Date: Wed Nov 24 19:59:57 2021 +0000 Merge remote-tracking branch 'upstream/master' commit 37ca6251742ddce653e5d04819fa16a8efdce29f Author: hughbarney Date: Wed Nov 24 19:59:46 2021 +0000 Pastel: added cycle through info items to bottom of screen commit c6096675fb65d43ef2a037a1325ef160b812fec5 Author: hughbarney Date: Wed Nov 24 19:06:06 2021 +0000 Pastel: added cycle through info items to bottom of screen commit a537e98116a932422a10c043b001a96911c65d3d Author: David Peer Date: Wed Nov 24 18:04:59 2021 +0100 Font improvements commit 59692c8ca175c17c6ea81f203855cb029baa0ee6 Merge: 657e64b0 e040cc4e Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Wed Nov 24 17:52:48 2021 +0100 Merge branch 'espruino:master' into master commit 657e64b078eda64cd6817959cbdc8a3bc71bb580 Author: David Peer Date: Wed Nov 24 17:52:25 2021 +0100 Added readme also to app.json commit be3345d1433f3fcd4fd2e5f477c53c0e1d92fe22 Merge: e3310ffc 3ba779ee Author: hughbarney Date: Tue Nov 23 13:22:30 2021 +0000 Merge remote-tracking branch 'upstream/master' commit e3310ffc32e9fab87bcafe96b43894dcecc60cc5 Author: hughbarney Date: Tue Nov 23 13:13:17 2021 +0000 Pastel: architect font module commit 1a75f0813b5bae3f2b6b7b14dd563a18fa00225f Author: hughbarney Date: Mon Nov 22 22:50:27 2021 +0000 Pastel: font modules commit d450758f1ad9aa833f47873cd45c87f15ef151b4 Author: hughbarney Date: Mon Nov 22 22:09:52 2021 +0000 Pastel: font modules commit cf66db35a95aabf22dd3be5d77b9264148db1956 Author: hughbarney Date: Mon Nov 22 22:08:47 2021 +0000 Pastel: font modules commit 29ecb8daa20219d1657f2ac8d2c76885d5056753 Author: hughbarney Date: Mon Nov 22 22:08:19 2021 +0000 Pastel: font modules commit a29bba62cba6037a64286d89304e3f92051cbf2a Author: hughbarney Date: Mon Nov 22 21:29:26 2021 +0000 Pastel: f_orbitron font module commit 8576d90e50c6c1099b78b1fb82808f788aeabba6 Author: hughbarney Date: Mon Nov 22 21:24:27 2021 +0000 Pastel: f_orbitron font module commit 723e1a6cb2752d12e1a1d1eed45a39000f50208f Author: hughbarney Date: Mon Nov 22 21:17:50 2021 +0000 Pastel: f_orbitron font module commit ec7f9ac69d012a64c1dd383bd688ab8815fb49ad Author: hughbarney Date: Mon Nov 22 21:13:48 2021 +0000 Pastel: f_orbitron font module commit d68bcf1ff18893e5e7fda5cda55db7ed69502f78 Author: hughbarney Date: Mon Nov 22 21:05:28 2021 +0000 Pastel: f_orbitron font module commit ff1d5f2d76ddf8a9cfc4ffea2ea5dcd636851a25 Author: hughbarney Date: Mon Nov 22 21:03:53 2021 +0000 Pastel: f_orbitron font module commit b51c84229798e7c3665f203c13023d9f6e24eb68 Merge: f4e997d4 d1da165e Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Mon Nov 22 12:20:57 2021 +0000 Merge branch 'Combined' into Base commit d1da165eb44fa50bea67506097768f1138574c8c Merge: f927549b 2c257605 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Mon Nov 22 03:30:56 2021 +0000 Merge pull request #9 from t0m1o1/scaledlauncher Update apps.json commit f927549b2c1e88232f4df2c6ef7e160c3a8e0f7b Merge: 3cfd575d 411118aa Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Mon Nov 22 03:16:59 2021 +0000 Merge pull request #8 from t0m1o1/scaledlauncher Scaledlauncher commit 3cfd575da46cf38347bbbb4d37645c0bd72833de Merge: 9a311219 9d1429ca Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Mon Nov 22 03:04:17 2021 +0000 Merge pull request #7 from t0m1o1/scaledlauncher Update settings.js commit 9a311219b2d3a7d3594ca654c78ae7137a92fb8e Merge: 43c42711 5b1b752d Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Mon Nov 22 02:56:33 2021 +0000 Merge pull request #6 from t0m1o1/scaledlauncher Scaledlauncher commit 43c4271101a4be6dbc28d7e34534d25242c159ae Merge: dec967f1 084bba39 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 21:18:16 2021 +0000 Merge pull request #5 from t0m1o1/compass-fix Compass fix commit dec967f1ac5900e43099ef9bfef3bfbe84e1f8e4 Merge: 21c48263 dfa40407 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 20:56:22 2021 +0000 Merge pull request #4 from t0m1o1/Swipe-Launcher Stop the swiping coming up if mode is undefined commit 21c482639aa1f2d391ebb0508701cff3170b45c4 Merge: dea2ec96 4c9d04de Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 05:19:27 2021 +0000 Merge pull request #3 from t0m1o1/Swipe-Launcher Update Swiper Clock Launch commit dea2ec9693855d735662a4d344682e6105533bf2 Merge: 92d156fb 51766844 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 05:15:16 2021 +0000 Merge pull request #2 from t0m1o1/master Master commit 92d156fb398787a068a2f7ed81a78d90ed04bd70 Merge: 100384f2 7d37a9eb Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 05:14:13 2021 +0000 Merge pull request #1 from t0m1o1/Swipe-Launcher Swipe launcher commit 51766844e6ff346119739114c28b9d638ca57cbd Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 02:49:56 2021 +0000 Update apps.json commit 6fda7a5f33ec6341d51529e680f5d0caa9c9fdbd Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 02:37:07 2021 +0000 Update apps.json commit b7a067234413e2cd9cb531c366371e5d88f6bb21 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 02:32:09 2021 +0000 Rename hidmsicswipe.app.js to hidmsicswipe.js commit 97065f1d62d40003eec09a2539d7294fe41bc4e5 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 02:31:55 2021 +0000 Delete hidmsicswipe.info commit 21f184d6c4ad1f977c385d95c3966d95d446bf5c Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 02:31:10 2021 +0000 Add files via upload commit 3917f28ae54db0e86b6429489c19a4180be759e0 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 02:30:45 2021 +0000 Delete hidmsicswipe.img commit a65668300fc45082d6897e19c6efff556853f4d9 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 02:30:18 2021 +0000 Delete hid-music.png commit 5fce838e8ab7d2b297c05a1ae735abcd4ba76d90 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 02:29:36 2021 +0000 Add files via upload commit ffa37f2ab3b1fd2b921783e19ffb48673aad1a6e Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 02:22:38 2021 +0000 Create hidmsicswipe-icon.js commit b656e5973c302a39f7513364c66094132135bfc4 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 01:59:19 2021 +0000 Create changelog commit ad943ca5658e4f68c205996c4ad42aa1ebbeb793 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 01:58:19 2021 +0000 Add files via upload commit ac433ac7bd6d586e9b1ca11da924d64bd566ade2 Author: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat Nov 20 01:57:39 2021 +0000 Create hidmsicswipe.info --- README.md | 12 +- apps.json | 300 ++++++- apps/93dub/93dub.png | Bin 0 -> 650 bytes apps/93dub/ChangeLog | 3 + apps/93dub/README.md | 11 + apps/93dub/app-icon.js | 1 + apps/93dub/app.js | 137 ++++ apps/93dub/screenshot.png | Bin 0 -> 3297 bytes apps/a_clock_timer/ChangeLog | 1 + apps/a_clock_timer/README.md | 15 + apps/a_clock_timer/app-icon.js | 1 + apps/a_clock_timer/app.js | 129 +++ apps/a_clock_timer/app.png | Bin 0 -> 3751 bytes apps/a_clock_timer/screenshot.png | Bin 0 -> 4174 bytes apps/a_speech_timer/ChangeLog | 1 + apps/a_speech_timer/README.md | 16 + apps/a_speech_timer/app-icon.js | 1 + apps/a_speech_timer/app.js | 173 ++++ apps/a_speech_timer/app.png | Bin 0 -> 3036 bytes apps/a_speech_timer/screenshot0.png | Bin 0 -> 3276 bytes apps/a_speech_timer/screenshot1.png | Bin 0 -> 3457 bytes apps/a_speech_timer/screenshot2.png | Bin 0 -> 3401 bytes apps/a_speech_timer/screenshot3.png | Bin 0 -> 3374 bytes apps/about/ChangeLog | 1 + apps/about/app-bangle2.js | 2 +- apps/android/ChangeLog | 1 + apps/android/app.js | 5 +- apps/android/settings.js | 18 + apps/authentiwatch/ChangeLog | 2 + apps/authentiwatch/README.md | 3 + apps/authentiwatch/app-icon.js | 2 +- apps/authentiwatch/app.js | 57 +- apps/authentiwatch/app.png | Bin 964 -> 1630 bytes apps/authentiwatch/interface.html | 22 +- apps/boot/ChangeLog | 1 + apps/boot/bootupdate.js | 8 +- apps/cscsensor/ChangeLog | 2 + apps/cscsensor/README.md | 8 +- apps/cscsensor/cscsensor.app.js | 148 ++-- apps/cubescramble/ChangeLog | 1 + apps/cubescramble/README.md | 3 +- .../bangle1-cube-scramble-screenshot.png | Bin 2924 -> 3848 bytes .../bangle2-cube-scramble-screenshot.png | Bin 2198 -> 2923 bytes apps/cubescramble/cube-scramble.js | 33 +- apps/fd6fdetect/ChangeLog | 1 + apps/fd6fdetect/README.md | 3 + apps/gbdebug/ChangeLog | 1 + apps/gbdebug/README.md | 26 + apps/gbdebug/app-icon.js | 1 + apps/gbdebug/app.js | 21 + apps/gbdebug/app.png | Bin 0 -> 2914 bytes apps/gbridge/settings.js | 4 +- apps/gpsrec/ChangeLog | 1 + apps/gpsrec/app.js | 8 +- apps/intervalTimer/ChangeLog | 1 + apps/intervalTimer/README.md | 34 + apps/intervalTimer/app-icon.js | 1 + apps/intervalTimer/app.js | 306 +++++++ apps/intervalTimer/app.png | Bin 0 -> 1823 bytes apps/intervalTimer/images/done.png | Bin 0 -> 2356 bytes apps/intervalTimer/images/pause.png | Bin 0 -> 1231 bytes apps/intervalTimer/images/set-active.png | Bin 0 -> 2226 bytes apps/intervalTimer/images/set-rest.png | Bin 0 -> 2364 bytes apps/intervalTimer/images/set-sets.png | Bin 0 -> 2212 bytes apps/intervalTimer/images/timer1.png | Bin 0 -> 1717 bytes apps/intervalTimer/images/timer2.png | Bin 0 -> 1646 bytes apps/launch/ChangeLog | 3 +- apps/launch/app-bangle1.js | 9 + apps/launch/app-bangle2.js | 13 + apps/lcars/ChangeLog | 3 +- apps/lcars/bg_large.png | Bin 17434 -> 12390 bytes apps/lcars/bg_small.png | Bin 9424 -> 9939 bytes apps/lcars/lcars.app.js | 211 ++--- apps/lcars/screenshot.png | Bin 26858 -> 26993 bytes apps/locale/ChangeLog | 1 + apps/locale/locale.html | 9 +- apps/mandlebrotclock/ChangeLog | 2 + apps/mandlebrotclock/README.md | 9 + apps/mandlebrotclock/app.png | Bin 0 -> 136198 bytes apps/mandlebrotclock/mandlebrotclock-icon.js | 1 + apps/mandlebrotclock/mandlebrotclock.js | 34 + apps/mandlebrotclock/mandlebrotclock.png | Bin 0 -> 19497 bytes .../screenshot_mandlebrotclock.png | Bin 0 -> 40229 bytes apps/messages/ChangeLog | 5 + apps/messages/app.js | 76 +- apps/messages/lib.js | 5 +- apps/messages/settings.js | 35 + apps/messages/widget.js | 16 +- apps/mylocation/ChangeLog | 1 + apps/mylocation/README.md | 41 + apps/mylocation/mylocation.app.js | 75 ++ apps/mylocation/mylocation.icon.js | 1 + apps/mylocation/mylocation.png | Bin 0 -> 1909 bytes apps/mylocation/screenshot_1.png | Bin 0 -> 2847 bytes apps/mylocation/screenshot_2.png | Bin 0 -> 2642 bytes apps/mylocation/screenshot_3.png | Bin 0 -> 15562 bytes apps/mylocation/screenshot_4.png | Bin 0 -> 2818 bytes apps/openstmap/ChangeLog | 1 + apps/openstmap/custom.html | 47 +- apps/openstmap/openstmap.js | 12 +- apps/pastel/ChangeLog | 3 + apps/pastel/README.md | 45 +- apps/pastel/f_architect.js | 9 + apps/pastel/f_cabin.js | 9 + apps/pastel/f_elite.js | 7 + apps/pastel/f_gochihand.js | 10 + apps/pastel/f_lato.js | 10 + apps/pastel/f_latosmall.js | 10 + apps/pastel/f_monoton.js | 7 + apps/pastel/f_orbitron.js | 11 + apps/pastel/pastel.app.js | 175 ++-- apps/pastel/pastel.settings.js | 9 - apps/pastel/screenshot_architech.jpg | Bin 38320 -> 0 bytes apps/pastel/screenshot_architect.png | Bin 0 -> 2796 bytes apps/pastel/screenshot_b2_dark.jpg | Bin 52318 -> 0 bytes apps/pastel/screenshot_cabinsketch.png | Bin 0 -> 3472 bytes apps/pastel/screenshot_elite.jpg | Bin 9486 -> 0 bytes apps/pastel/screenshot_elite.png | Bin 0 -> 2643 bytes apps/pastel/screenshot_gochi.jpg | Bin 40511 -> 0 bytes apps/pastel/screenshot_gochihand.png | Bin 0 -> 2794 bytes apps/pastel/screenshot_lato.jpg | Bin 46058 -> 0 bytes apps/pastel/screenshot_lato.png | Bin 0 -> 2626 bytes apps/pastel/screenshot_monoton.jpg | Bin 11281 -> 0 bytes apps/pastel/screenshot_monoton.png | Bin 0 -> 3012 bytes apps/pastel/screenshot_orbitron.png | Bin 0 -> 2668 bytes apps/pebble/ChangeLog | 3 + apps/pebble/LECO 1976-Regular.otf | Bin 0 -> 26432 bytes apps/pebble/README.md | 17 + apps/pebble/pebble.app.js | 120 +++ apps/pebble/pebble.icon.js | 1 + apps/pebble/pebble.png | Bin 0 -> 1213 bytes apps/pebble/pebble.settings.js | 38 + apps/pebble/pebble_screenshot.png | Bin 0 -> 2426 bytes apps/pebble/pebble_screenshot2.png | Bin 0 -> 2549 bytes apps/pebble/pebble_screenshot3.png | Bin 0 -> 2335 bytes apps/pomodo/ChangeLog | 2 +- apps/pooqroman/README.md | 42 + apps/pooqroman/app-icon.js | 1 + apps/pooqroman/app.js | 761 ++++++++++++++++++ apps/pooqroman/app.png | Bin 0 -> 3969 bytes apps/pooqroman/resourcer.js | 721 +++++++++++++++++ apps/poweroff/ChangeLog | 1 + apps/poweroff/README.md | 13 + apps/poweroff/app-icon.js | 1 + apps/poweroff/app.js | 13 + apps/poweroff/app.png | Bin 0 -> 620 bytes apps/qalarm/ChangeLog | 5 +- apps/qalarm/app-icon.js | 2 +- apps/qalarm/app.js | 10 +- apps/qalarm/boot.js | 2 +- apps/qalarm/qalarmcheck.js | 9 +- apps/qmsched/ChangeLog | 1 + apps/qmsched/README.md | 15 +- apps/qmsched/app.js | 188 ++++- apps/qmsched/boot.js | 10 +- apps/qmsched/lib.js | 31 +- apps/qmsched/screenshot_b1_edit.png | Bin 0 -> 3610 bytes apps/qmsched/screenshot_b1_lcd.png | Bin 0 -> 4167 bytes apps/qmsched/screenshot_b1_main.png | Bin 0 -> 4050 bytes apps/qmsched/screenshot_b2_edit.png | Bin 0 -> 2946 bytes apps/qmsched/screenshot_b2_lcd.png | Bin 0 -> 3352 bytes apps/qmsched/screenshot_b2_main.png | Bin 0 -> 3226 bytes apps/qmsched/screenshot_edit.png | Bin 3644 -> 0 bytes apps/qmsched/screenshot_main.png | Bin 3661 -> 0 bytes apps/qmsched/screenshot_widget_alarms.png | Bin 3965 -> 0 bytes apps/qmsched/screenshot_widget_silent.png | Bin 3890 -> 0 bytes apps/qmsched/widget.js | 4 +- apps/recorder/ChangeLog | 1 + apps/recorder/app.js | 15 +- apps/sensible/ChangeLog | 2 + apps/sensible/README.md | 35 + apps/sensible/sensible-icon.js | 1 + apps/sensible/sensible.js | 162 ++++ apps/sensible/sensible.png | Bin 0 -> 1716 bytes apps/setting/ChangeLog | 1 + apps/setting/README.md | 2 - apps/setting/settings.js | 129 +-- apps/slevel/ChangeLog | 1 + apps/slevel/spiritlevel.js | 16 +- apps/thermom/ChangeLog | 1 + apps/thermom/app.js | 8 +- apps/widbars/ChangeLog | 1 + apps/widbars/README.md | 15 + apps/widbars/icon.png | Bin 0 -> 2085 bytes apps/widbars/screenshot.png | Bin 0 -> 9787 bytes apps/widbars/widget.js | 67 ++ apps/widbatpc/ChangeLog | 1 + apps/widbatpc/README.md | 4 +- apps/widbatpc/widget.js | 16 +- core | 2 +- css/main.css | 46 +- index.html | 7 +- modules/Settings.js | 101 --- 193 files changed, 4373 insertions(+), 713 deletions(-) create mode 100644 apps/93dub/93dub.png create mode 100644 apps/93dub/ChangeLog create mode 100644 apps/93dub/README.md create mode 100644 apps/93dub/app-icon.js create mode 100644 apps/93dub/app.js create mode 100644 apps/93dub/screenshot.png create mode 100644 apps/a_clock_timer/ChangeLog create mode 100644 apps/a_clock_timer/README.md create mode 100644 apps/a_clock_timer/app-icon.js create mode 100644 apps/a_clock_timer/app.js create mode 100644 apps/a_clock_timer/app.png create mode 100644 apps/a_clock_timer/screenshot.png create mode 100644 apps/a_speech_timer/ChangeLog create mode 100644 apps/a_speech_timer/README.md create mode 100644 apps/a_speech_timer/app-icon.js create mode 100644 apps/a_speech_timer/app.js create mode 100644 apps/a_speech_timer/app.png create mode 100644 apps/a_speech_timer/screenshot0.png create mode 100644 apps/a_speech_timer/screenshot1.png create mode 100644 apps/a_speech_timer/screenshot2.png create mode 100644 apps/a_speech_timer/screenshot3.png create mode 100644 apps/android/settings.js create mode 100644 apps/fd6fdetect/README.md create mode 100644 apps/gbdebug/ChangeLog create mode 100644 apps/gbdebug/README.md create mode 100644 apps/gbdebug/app-icon.js create mode 100644 apps/gbdebug/app.js create mode 100644 apps/gbdebug/app.png create mode 100644 apps/intervalTimer/ChangeLog create mode 100644 apps/intervalTimer/README.md create mode 100644 apps/intervalTimer/app-icon.js create mode 100644 apps/intervalTimer/app.js create mode 100644 apps/intervalTimer/app.png create mode 100644 apps/intervalTimer/images/done.png create mode 100644 apps/intervalTimer/images/pause.png create mode 100644 apps/intervalTimer/images/set-active.png create mode 100644 apps/intervalTimer/images/set-rest.png create mode 100644 apps/intervalTimer/images/set-sets.png create mode 100644 apps/intervalTimer/images/timer1.png create mode 100644 apps/intervalTimer/images/timer2.png create mode 100644 apps/mandlebrotclock/ChangeLog create mode 100644 apps/mandlebrotclock/README.md create mode 100644 apps/mandlebrotclock/app.png create mode 100644 apps/mandlebrotclock/mandlebrotclock-icon.js create mode 100644 apps/mandlebrotclock/mandlebrotclock.js create mode 100644 apps/mandlebrotclock/mandlebrotclock.png create mode 100644 apps/mandlebrotclock/screenshot_mandlebrotclock.png create mode 100644 apps/messages/settings.js create mode 100644 apps/mylocation/ChangeLog create mode 100644 apps/mylocation/README.md create mode 100644 apps/mylocation/mylocation.app.js create mode 100644 apps/mylocation/mylocation.icon.js create mode 100644 apps/mylocation/mylocation.png create mode 100644 apps/mylocation/screenshot_1.png create mode 100644 apps/mylocation/screenshot_2.png create mode 100644 apps/mylocation/screenshot_3.png create mode 100644 apps/mylocation/screenshot_4.png create mode 100644 apps/pastel/f_architect.js create mode 100644 apps/pastel/f_cabin.js create mode 100644 apps/pastel/f_elite.js create mode 100644 apps/pastel/f_gochihand.js create mode 100644 apps/pastel/f_lato.js create mode 100644 apps/pastel/f_latosmall.js create mode 100644 apps/pastel/f_monoton.js create mode 100644 apps/pastel/f_orbitron.js delete mode 100644 apps/pastel/screenshot_architech.jpg create mode 100644 apps/pastel/screenshot_architect.png delete mode 100644 apps/pastel/screenshot_b2_dark.jpg create mode 100644 apps/pastel/screenshot_cabinsketch.png delete mode 100644 apps/pastel/screenshot_elite.jpg create mode 100644 apps/pastel/screenshot_elite.png delete mode 100644 apps/pastel/screenshot_gochi.jpg create mode 100644 apps/pastel/screenshot_gochihand.png delete mode 100644 apps/pastel/screenshot_lato.jpg create mode 100644 apps/pastel/screenshot_lato.png delete mode 100644 apps/pastel/screenshot_monoton.jpg create mode 100644 apps/pastel/screenshot_monoton.png create mode 100644 apps/pastel/screenshot_orbitron.png create mode 100644 apps/pebble/ChangeLog create mode 100644 apps/pebble/LECO 1976-Regular.otf create mode 100644 apps/pebble/README.md create mode 100644 apps/pebble/pebble.app.js create mode 100644 apps/pebble/pebble.icon.js create mode 100644 apps/pebble/pebble.png create mode 100644 apps/pebble/pebble.settings.js create mode 100644 apps/pebble/pebble_screenshot.png create mode 100644 apps/pebble/pebble_screenshot2.png create mode 100644 apps/pebble/pebble_screenshot3.png create mode 100644 apps/pooqroman/README.md create mode 100644 apps/pooqroman/app-icon.js create mode 100644 apps/pooqroman/app.js create mode 100644 apps/pooqroman/app.png create mode 100644 apps/pooqroman/resourcer.js create mode 100644 apps/poweroff/ChangeLog create mode 100644 apps/poweroff/README.md create mode 100644 apps/poweroff/app-icon.js create mode 100644 apps/poweroff/app.js create mode 100644 apps/poweroff/app.png create mode 100644 apps/qmsched/screenshot_b1_edit.png create mode 100644 apps/qmsched/screenshot_b1_lcd.png create mode 100644 apps/qmsched/screenshot_b1_main.png create mode 100644 apps/qmsched/screenshot_b2_edit.png create mode 100644 apps/qmsched/screenshot_b2_lcd.png create mode 100644 apps/qmsched/screenshot_b2_main.png delete mode 100644 apps/qmsched/screenshot_edit.png delete mode 100644 apps/qmsched/screenshot_main.png delete mode 100644 apps/qmsched/screenshot_widget_alarms.png delete mode 100644 apps/qmsched/screenshot_widget_silent.png create mode 100644 apps/sensible/ChangeLog create mode 100644 apps/sensible/README.md create mode 100644 apps/sensible/sensible-icon.js create mode 100644 apps/sensible/sensible.js create mode 100644 apps/sensible/sensible.png create mode 100644 apps/widbars/ChangeLog create mode 100644 apps/widbars/README.md create mode 100644 apps/widbars/icon.png create mode 100644 apps/widbars/screenshot.png create mode 100644 apps/widbars/widget.js delete mode 100644 modules/Settings.js diff --git a/README.md b/README.md index 20ae8afb2..8e186cf79 100644 --- a/README.md +++ b/README.md @@ -384,14 +384,18 @@ Example `settings.js` ```js // make sure to enclose the function in parentheses (function(back) { - function get(key, def) { return require('Settings').get('myappid', key, def); } - function set(key, value) { require('Settings').set('myappid', key, value); } + let settings = require('Storage').readJSON('myappid.json',1)||{}; + if (typeof settings.monkeys !== "number") settings.monkeys = 12; // default value + function save(key, value) { + settings[key] = value; + require('Storage').write('myappid.json', settings); + } const appMenu = { '': {'title': 'App Settings'}, '< Back': back, 'Monkeys': { - value: get('monkeys', 12), - onchange: (m) => set('monkeys', m) + value: settings.monkeys, + onchange: (m) => {save('monkeys', m)} } }; E.showMenu(appMenu) diff --git a/apps.json b/apps.json index 9ed014f53..a312b90a3 100644 --- a/apps.json +++ b/apps.json @@ -16,7 +16,7 @@ { "id": "boot", "name": "Bootloader", - "version": "0.36", + "version": "0.37", "description": "This is needed by Bangle.js to automatically load the clock, menu, widgets and settings", "icon": "bootloader.png", "type": "bootloader", @@ -32,7 +32,7 @@ { "id": "messages", "name": "Messages", - "version": "0.05", + "version": "0.07", "description": "App to display notifications from iOS and Gadgetbridge", "icon": "app.png", "type": "app", @@ -41,18 +41,19 @@ "readme": "README.md", "storage": [ {"name":"messages.app.js","url":"app.js"}, + {"name":"messages.settings.js","url":"settings.js"}, {"name":"messages.img","url":"app-icon.js","evaluate":true}, {"name":"messages.wid.js","url":"widget.js"}, {"name":"messages","url":"lib.js"} ], - "data": [{"name":"messages.json"}], + "data": [{"name":"messages.json"},{"name":"messages.settings.json"}], "sortorder": -9 }, { "id": "android", "name": "Android Integration", "shortName": "Android", - "version": "0.03", + "version": "0.04", "description": "(BETA) App to display notifications from Gadgetbridge on Android. This will eventually replace the Gadgetbridge widget.", "icon": "app.png", "tags": "tool,system,messages,notifications", @@ -60,6 +61,7 @@ "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ {"name":"android.app.js","url":"app.js"}, + {"name":"android.settings.js","url":"settings.js"}, {"name":"android.img","url":"app-icon.js","evaluate":true}, {"name":"android.boot.js","url":"boot.js"} ], @@ -85,7 +87,7 @@ "id": "health", "name": "Health Tracking", "version": "0.08", - "description": "Logs health data and provides an app to view it (BETA - requires firmware 2v11)", + "description": "Logs health data and provides an app to view it (requires firmware 2v10.100 or later)", "icon": "app.png", "tags": "tool,system,health", "supports": ["BANGLEJS","BANGLEJS2"], @@ -110,19 +112,14 @@ "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ {"name":"launch.app.js","url":"app-bangle1.js","supports":["BANGLEJS"]}, - {"name":"launch.app.js","url":"app-bangle2.js","supports":["BANGLEJS2"]}, - {"name":"launch.settings.js","url":"settings.js","supports":["BANGLEJS2"]} + {"name":"launch.app.js","url":"app-bangle2.js","supports":["BANGLEJS2"]} ], - "data": [ - {"name":"launch.json"} - ] - , "sortorder": -10 }, { "id": "setting", "name": "Settings", - "version": "0.33", + "version": "0.34", "description": "A menu for setting up Bangle.js", "icon": "settings.png", "tags": "tool,system", @@ -138,7 +135,7 @@ { "id": "about", "name": "About", - "version": "0.11", + "version": "0.12", "description": "Bangle.js About page - showing software version, stats, and a collaborative mural from the Bangle.js KickStarter backers", "icon": "app.png", "tags": "tool,system", @@ -173,7 +170,7 @@ { "id": "locale", "name": "Languages", - "version": "0.09", + "version": "0.10", "description": "Translations for different countries", "icon": "locale.png", "type": "locale", @@ -272,6 +269,20 @@ ], "data": [{"name":"gbridge.json"}] }, + { "id": "gbdebug", + "name": "Gadgetbridge Debug", + "shortName":"GB Debug", + "version":"0.01", + "description": "Debug info for Gadgetbridge. Run this app and when Gadgetbridge messages arrive they are displayed on-screen.", + "icon": "app.png", + "tags": "", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"gbdebug.app.js","url":"app.js"}, + {"name":"gbdebug.img","url":"app-icon.js","evaluate":true} + ] + }, { "id": "mclock", "name": "Morphing Clock", @@ -451,6 +462,27 @@ {"name":"matrixclock.img","url":"matrixclock-icon.js","evaluate":true} ] }, + { + "id": "mandlebrotclock", + "name": "Mandlebrot Clock", + "version": "0.01", + "description": "A mandlebrot set themed clock cool", + "icon": "mandlebrotclock.png", + "screenshots": [{ "url": "screenshot_mandlebrotclock.png" }], + "type": "clock", + "tags": "clock", + "supports": ["BANGLEJS2"], + "readme": "README.md", + "allow_emulator": true, + "storage": [ + { "name": "mandlebrotclock.app.js", "url": "mandlebrotclock.js" }, + { + "name": "mandlebrotclock.img", + "url": "mandlebrotclock-icon.js", + "evaluate": true + } + ] + }, { "id": "imgclock", "name": "Image background clock", @@ -556,8 +588,8 @@ { "id": "cubescramble", "name": "Cube Scramble", - "version":"0.03", - "description": "A random scramble generator for the 3x3 Rubik's cube", + "version":"0.04", + "description": "A random scramble generator for the 3x3 Rubik's cube with a basic timer", "icon": "cube-scramble.png", "tags": "", "supports" : ["BANGLEJS","BANGLEJS2"], @@ -667,7 +699,7 @@ { "id": "gpsrec", "name": "GPS Recorder", - "version": "0.25", + "version": "0.26", "description": "Application that allows you to record a GPS track. Can run in background", "icon": "app.png", "tags": "tool,outdoors,gps,widget", @@ -686,7 +718,7 @@ "id": "recorder", "name": "Recorder (BETA)", "shortName": "Recorder", - "version": "0.03", + "version": "0.04", "description": "Record GPS position, heart rate and more in the background, then download to your PC.", "icon": "app.png", "tags": "tool,outdoors,gps,widget", @@ -737,11 +769,11 @@ { "id": "slevel", "name": "Spirit Level", - "version": "0.01", + "version": "0.02", "description": "Show the current angle of the watch, so you can use it to make sure something is absolutely flat", "icon": "spiritlevel.png", "tags": "tool", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ {"name":"slevel.app.js","url":"spiritlevel.js"}, {"name":"slevel.img","url":"spiritlevel-icon.js","evaluate":true} @@ -854,7 +886,7 @@ "id": "widbatpc", "name": "Battery Level Widget (with percentage)", "shortName": "Battery Widget", - "version": "0.13", + "version": "0.14", "description": "Show the current battery level and charging status in the top right of the clock, with charge percentage", "icon": "widget.png", "type": "widget", @@ -1896,7 +1928,7 @@ "id": "openstmap", "name": "OpenStreetMap", "shortName": "OpenStMap", - "version": "0.09", + "version": "0.10", "description": "[BETA] Loads map tiles from OpenStreetMap onto your Bangle.js and displays a map of where you are", "icon": "app.png", "tags": "outdoors,gps", @@ -2951,7 +2983,7 @@ "id": "cscsensor", "name": "Cycling speed sensor", "shortName": "CSCSensor", - "version": "0.05", + "version": "0.06", "description": "Read BLE enabled cycling speed and cadence sensor and display readings on watch", "icon": "icons8-cycling-48.png", "tags": "outdoors,exercise,ble,bluetooth", @@ -3779,10 +3811,11 @@ "id": "qmsched", "name": "Quiet Mode Schedule and Widget", "shortName": "Quiet Mode", - "version": "0.03", - "description": "Automatically turn Quiet Mode on or off at set times", + "version": "0.04", + "description": "Automatically turn Quiet Mode on or off at set times, and change LCD options while Quiet Mode is active.", "icon": "app.png", - "screenshots": [{"url":"screenshot_edit.png"},{"url":"screenshot_main.png"},{"url":"screenshot_widget_alarms.png"},{"url":"screenshot_widget_silent.png"}], + "screenshots": [{"url":"screenshot_b1_main.png"},{"url":"screenshot_b1_edit.png"},{"url":"screenshot_b1_lcd.png"}, + {"url":"screenshot_b2_main.png"},{"url":"screenshot_b2_edit.png"},{"url":"screenshot_b2_lcd.png"}], "tags": "tool,widget", "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", @@ -3896,8 +3929,8 @@ { "id": "thermom", "name": "Thermometer", - "version": "0.02", - "description": "Displays the current temperature, updated every 20 seconds", + "version": "0.03", + "description": "Displays the current temperature in degree Celsius, updated every 20 seconds", "icon": "app.png", "tags": "tool", "supports": ["BANGLEJS"], @@ -4042,10 +4075,11 @@ "id": "fd6fdetect", "name": "fd6fdetect", "shortName": "fd6fdetect", - "version": "0.1", + "version": "0.2", "description": "Allows you to see 0xFD6F beacons near you.", "icon": "app.png", "tags": "tool", + "readme": "README.md", "supports": ["BANGLEJS"], "storage": [ {"name":"fd6fdetect.app.js","url":"app.js"}, @@ -4087,15 +4121,24 @@ "id": "pastel", "name": "Pastel Clock", "shortName": "Pastel", - "version": "0.05", - "description": "A Configurable clock with custom fonts and background", + "version": "0.08", + "description": "A Configurable clock with custom fonts and background. Has a cyclic information line that includes, day, date, battery, sunrise and sunset times", "icon": "pastel.png", + "dependencies": {"mylocation":"app"}, "screenshots": [{"url":"screenshot_pastel.png"}], "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ + {"name":"f_architect","url":"f_architect.js"}, + {"name":"f_gochihand","url":"f_gochihand.js"}, + {"name":"f_cabin","url":"f_cabin.js"}, + {"name":"f_orbitron","url":"f_orbitron.js"}, + {"name":"f_monoton","url":"f_monoton.js"}, + {"name":"f_elite","url":"f_elite.js"}, + {"name":"f_lato","url":"f_lato.js"}, + {"name":"f_latosmall","url":"f_latosmall.js"}, {"name":"pastel.app.js","url":"pastel.app.js"}, {"name":"pastel.img","url":"pastel.icon.js","evaluate":true}, {"name":"pastel.settings.js","url":"pastel.settings.js"} @@ -4122,7 +4165,7 @@ "id": "waveclk", "name": "Wave Clock", "version": "0.02", - "description": "A clock using a wave image by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: This requires firmware 2v11 or later Bangle.js 1**", + "description": "A clock using a wave image by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: Works on any Bangle.js 2, but requires firmware 2v11 or later on Bangle.js 1**", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], "type": "clock", @@ -4138,7 +4181,7 @@ "id": "floralclk", "name": "Floral Clock", "version": "0.01", - "description": "A clock with a flower background by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: This requires firmware 2v11 or later Bangle.js 1**", + "description": "A clock with a flower background by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: Works on any Bangle.js 2 but requires firmware 2v11 or later on Bangle.js 1**", "icon": "app.png", "screenshots": [{"url":"screenshot_floral.png"}], "type": "clock", @@ -4282,7 +4325,7 @@ "name": "Q Alarm and Timer", "shortName": "Q Alarm", "icon": "app.png", - "version": "0.02", + "version": "0.03", "description": "Alarm and timer app with days of week and 'hard' option.", "tags": "tool,alarm,widget", "supports": ["BANGLEJS", "BANGLEJS2"], @@ -4355,7 +4398,8 @@ "name": "LCARS Clock", "shortName":"LCARS", "icon": "lcars.png", - "version":"0.05", + "version":"0.06", + "readme": "README.md", "supports": ["BANGLEJS2"], "description": "Library Computer Access Retrieval System (LCARS) clock.", "type": "clock", @@ -4371,7 +4415,7 @@ "shortName":"BinWatch", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], - "version":"0.03", + "version":"0.04", "supports": ["BANGLEJS2"], "readme": "README.md", "allow_emulator":true, @@ -4405,7 +4449,7 @@ "shortName": "AuthWatch", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], - "version": "0.01", + "version": "0.03", "description": "Google Authenticator compatible tool.", "tags": "tool", "interface": "interface.html", @@ -4449,5 +4493,187 @@ "storage": [ {"name":"timecal.app.js","url":"timecal.app.js"} ] + }, + { + "id": "a_clock_timer", + "name": "A Clock with Timer", + "version": "0.01", + "description": "A Clock with Timer, Map and Time Zones", + "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], + "type": "clock", + "tags": "clock", + "supports": ["BANGLEJS2"], + "allow_emulator": true, + "readme": "README.md", + "storage": [ + {"name":"a_clock_timer.app.js","url":"app.js"}, + {"name":"a_clock_timer.img","url":"app-icon.js","evaluate":true} + ] + }, + { + "id":"intervalTimer", + "name":"Interval Timer", + "shortName":"Interval Timer", + "icon": "app.png", + "version":"0.01", + "description": "Interval Timer for workouts, HIIT, or whatever else.", + "tags": "timer, interval, hiit, workout", + "readme":"README.md", + "supports":["BANGLEJS2"], + "storage": [ + {"name":"intervalTimer.app.js","url":"app.js"}, + {"name":"intervalTimer.img","url":"app-icon.js","evaluate":true} + ] + }, + { "id": "93dub", + "name": "93 Dub", + "shortName":"93 Dub", + "icon": "93dub.png", + "screenshots": [{"url":"screenshot.png"}], + "version":"0.03", + "description": "Fan recreation of orviwan's 91 Dub app for the Pebble smartwatch. Uses assets from his 91-Dub-v2.0 repo", + "tags": "clock", + "type": "clock", + "supports":["BANGLEJS2"], + "readme": "README.md", + "allow_emulator": true, + "storage": [ + {"name":"93dub.app.js","url":"app.js"}, + {"name":"93dub.img","url":"app-icon.js","evaluate":true} + ] + }, + { "id": "poweroff", + "name": "Poweroff", + "shortName":"Poweroff", + "version":"0.01", + "description": "Simple app to power off your Bangle.js", + "icon": "app.png", + "tags": "poweroff, shutdown", + "supports" : ["BANGLEJS", "BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"poweroff.app.js","url":"app.js"}, + {"name":"poweroff.img","url":"app-icon.js","evaluate":true} + ] +}, +{ + "id": "sensible", + "name": "SensiBLE", + "shortName": "SensiBLE", + "version": "0.02", + "description": "Collect, display and advertise real-time sensor data.", + "icon": "sensible.png", + "type": "app", + "tags": "tool,sensors", + "supports" : [ "BANGLEJS2" ], + "allow_emulator": true, + "readme": "README.md", + "storage": [ + { "name": "sensible.app.js", "url": "sensible.js" }, + { "name": "sensible.img", "url": "sensible-icon.js", "evaluate": true } + ] +}, + { + "id": "widbars", + "name": "Bars Widget", + "version": "0.01", + "description": "Display several measurements as vertical bars.", + "icon": "icon.png", + "screenshots": [{"url":"screenshot.png"}], + "readme": "README.md", + "type": "widget", + "tags": "widget", + "supports": ["BANGLEJS","BANGLEJS2"], + "storage": [ + {"name":"widbars.wid.js","url":"widget.js"} + ] +}, +{ + "id":"a_speech_timer", + "name":"A Speech Timer", + "icon": "app.png", + "version":"1.00", + "description": "A timer designed to help keeping your speeches and presentations to time.", + "tags": "tool,timer", + "readme":"README.md", + "supports":["BANGLEJS2"], + "storage": [ + {"name":"a_speech_timer.app.js","url":"app.js"}, + {"name":"a_speech_timer.img","url":"app-icon.js","evaluate":true} + ] +}, + { + "id": "sensible", + "name": "SensiBLE", + "shortName": "SensiBLE", + "version": "0.02", + "description": "Collect, display and advertise real-time sensor data.", + "icon": "sensible.png", + "type": "app", + "tags": "tool,sensors", + "supports" : [ "BANGLEJS2" ], + "allow_emulator": true, + "readme": "README.md", + "storage": [ + { "name": "sensible.app.js", "url": "sensible.js" }, + { "name": "sensible.img", "url": "sensible-icon.js", "evaluate": true } + ] + }, + { "id": "mylocation", + "name": "My Location", + "shortName":"My Location", + "icon": "mylocation.png", + "type": "app", + "screenshots": [{"url":"screenshot_1.png"}], + "version":"0.01", + "description": "Sets and stores the lat and long of your preferred City or it can be set from the GPS. mylocation.json can be used by other apps that need your main location lat and lon. See README", + "readme": "README.md", + "tags": "tool,utility", + "supports": ["BANGLEJS", "BANGLEJS2"], + "storage": [ + {"name":"mylocation.app.js","url":"mylocation.app.js"}, + {"name":"mylocation.img","url":"mylocation.icon.js","evaluate": true } + ], + "data": [ + {"name":"mylocation.json"} + ] + }, + { + "id": "pebble", + "name": "Pebble Clock", + "shortName": "Pebble", + "version": "0.03", + "description": "A pebble style clock to keep the rebellion going", + "readme": "README.md", + "icon": "pebble.png", + "screenshots": [{"url":"pebble_screenshot.png"}], + "type": "clock", + "tags": "clock", + "supports": ["BANGLEJS2"], + "storage": [ + {"name":"pebble.app.js","url":"pebble.app.js"}, + {"name":"pebble.settings.js","url":"pebble.settings.js"}, + {"name":"pebble.img","url":"pebble.icon.js","evaluate":true} + ] + }, + { "id": "pooqroman", + "name": "pooq Roman watch face", + "shortName":"pooq Roman", + "version":"0.0.0", + "description": "A classic watch face with a certain dynamicity. Most amusing in 24h mode. Slide up to show more hands, down for less(!). By design does not support standard widgets, sorry!", + "icon": "app.png", + "type": "clock", + "tags": "clock", + "supports" : ["BANGLEJS2"], + "allow_emulator":true, + "readme": "README.md", + "storage": [ + {"name":"pooqroman.app.js","url":"app.js"}, + {"name":"pooqroman.img","url":"app-icon.js","evaluate":true} + ], + "data": [ + {"name":"pooqroman.json"} + ] } ] diff --git a/apps/93dub/93dub.png b/apps/93dub/93dub.png new file mode 100644 index 0000000000000000000000000000000000000000..59950c8959c296dabb9cf98ef9721cba82763012 GIT binary patch literal 650 zcmV;50(Jd~P)EX>4Tx04R~2kiAO7U=)U*RIB38q&P^246X$iJGoSaAXJF4g3&2WQYDTsSyeb*-@o*)?BzGs=+MTZ z9fW1xcijPv@%gGb#Y@*{HP8JSOHo{gs&i!)=0ye8fw(uTa>GitZin8H_(5z(X%>l} z#Jf=%88*9KnoPqVO>@n9oL!uozOsYE38%Q&jF>VZp`xprsdG$^eN~5ofO|?p)r45R znPw_(M5UA*4n;$eu4(Ywsr_8JjHEG_CX>@2HM@dak zSAh-}0002hNkl$iJIG%Fl*5j zDS+@7MS=c1sV?Qg^i@b&5CuviM0ahgE7k9O^tN0Q9;dm__+B9>ceyJHhFdsrx^j@TOI0j9t!}DR= kje2Q0^&!ql94NdZKiy|bRt}#=Pyhe`07*qoM6N<$f{COZCjbBd literal 0 HcmV?d00001 diff --git a/apps/93dub/ChangeLog b/apps/93dub/ChangeLog new file mode 100644 index 000000000..5fbfe4fa3 --- /dev/null +++ b/apps/93dub/ChangeLog @@ -0,0 +1,3 @@ +0.01: Initial version for upload +0.02: DiscoMinotaur's adjustments (removed battery and adjusted spacing) +0.03: Code style cleanup diff --git a/apps/93dub/README.md b/apps/93dub/README.md new file mode 100644 index 000000000..fd24d54d8 --- /dev/null +++ b/apps/93dub/README.md @@ -0,0 +1,11 @@ +# 93 Dub + +![](screenshot.png) + +Uses many portions from Espruino documentation, example watchfaces, and the waveclk app. It also sourced from Jon Barlow's 91 Dub v2.0 source code and resources and adapted for Bangle.js 2's screen. Time, date and the battery display works. It is not pixel perfect to the original. + +Contributors: +Leer10 +Orviwan (original watchface and assets) +Gordon Williams (Bangle.js, watchapps for reference code and documentation) +DiscoMinotaur (adjustments) diff --git a/apps/93dub/app-icon.js b/apps/93dub/app-icon.js new file mode 100644 index 000000000..39d11fd6a --- /dev/null +++ b/apps/93dub/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkBG2XwAgcPC6P/h//AAIDBA4Pwh/w+AGBAgIDBC4oVDAAITBCAIIBAYIBBAgIvHh4YCFgQPBAoIvCCwoAWIQYAQGLgAWI6bQVdQiiDOyAX/C/7+IAIYvSh4RBAYIXLAwJAHC6ZFCF5yn/C7wDBBAJ3EVAKBDC5QLBYAoLFC5nwCgoXlL44vSL653sL4QXBL6DvXC9YCBACIXCZ4YAQFaYAgPAhqCa4SDFLoZpICYIXDQKLyCDIQXVAAKI0AAYA==")) diff --git a/apps/93dub/app.js b/apps/93dub/app.js new file mode 100644 index 000000000..92544304c --- /dev/null +++ b/apps/93dub/app.js @@ -0,0 +1,137 @@ +// get 12 hour status, code from barclock +const is12Hour = (require("Storage").readJSON("setting.json", 1) || {})["12hour"]; + +// define background +var imgBg = require("heatshrink").decompress(atob("2GwgJC/AH4A/AH4A/AH4A/AH4A/ACcGAhAV/Cp3gvdug+Gj0AgeABYMBAQMIggVEg/w/9/h/Gn8As3ACpk559zznmseAs0B13nq/Rie+uodCIIUZw9hzFmv+AgcCmco7MRilow1ACpN8gFhwMilFRCoMowgVEIIVhIINhwFg4GiCpfw/dhx/mn4uBCoXRhWktAVFTIVhw9mj8YseDkUnqPEoeuugVEAAlgSgICBACAVC8AUQCQQVSAEsD/4ASeYgA/ACkHNiK5Cj4VR/AVBng+RCQVwCqMOAQPhIKOHgEB44VR8YVBx4VR+eAgOfCqPxwEDCqX5CoKvS/PAgc/YqQVU/gV/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/CsMfCqP4CoOfCqP54EBx4VR+OAgPPCqPzwEA44VR4cAgHhCqMHCoNwAQIAPjwCBngVRvgCBV6XwCoMHCqPAHyIA/AEigEf4IAOkAEDoAPJWAtA+PHv+Al6uPCofAGAgALoHz51/8AVT+IVS+4VPpMR73woH27n/8Eh8+ZmadIqsoyGICofAkMUktJFZAVBzgVBv34YgMhi8RkIVJnGQIIN8/H34FB8kJiIVIkVEyGQkF8/Pj4GBkhBKCoOexEQvHx8fBgMXzMxTJkICoXCVx8AggDGABsD/4AB/AVQAH4APA")); + +// define fonts +// reg number first char 48 28 by 41 +var fontNum = atob("AAAAAAAAAAAAAA//8D//g//8P/+I//8//44//w//j4//A/+P4/8A/4/4AAAAD/4AAAAP/wAAAAf/gAAAA//AAAAB/+AAAAD/8AAAAH/4AAAAP/wAAAAf/gAAAA//AAAAB/+AAAAD/8AAAAH/wAAAAH/H/gH/H8f/gf/Hx//h//HH//n//Ef/+H//B//4H//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wB/4AP/4H/4A//4f/4D//5//4P//h//4//+B//4AAAAAAAAAAAAAAAAAf/+AAAB//4gAAD//jgAAD/+PgABj/4/gAHj/j/gAfgAP/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/AA/AAf8f88AAfx/8wAAfH/8AAAcf/8AAAR//4AAAH//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAA4AAAAAD4AAYAAP4AD8AA/4AH4AD/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/wAHgAH/H/GH/H8f/gf/Hx//h//HH//n//Ef/+H//B//4H//AAAAAAAAAAAAAAP//AAAAP//AAAAP//AAAAP/8AAAAP/2AAAAP/eAAAAAB+AAAAAD8AAAAAH4AAAAAPwAAAAAfgAAAAA/AAAAAB+AAAAAD8AAAAAH4AAAAAPwAAAAAfgAAAAA/AAAAAB+AAAAAD8AAAB/7x/4AH/7H/4Af/4f/4B//5//4H//h//4f/+B//4AAAAAAAAAAAAAD//wAAAD//wAAAj//gAADj/+AAAPj/5gAA/j/ngAD/gAfgAP/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/AA/AAf8AA8f8fwAAx/8fAAAH/8cAAAf/8QAAA//8AAAA//8AAAAAAAAAAAAAA//8D//g//8P/+I//8//44//0//j4//Y/+P4/94/4/4AH4AD/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/wAPwAH/AAPH/H8AAMf/HwAAB//HAAAH//EAAAH//AAAAH//AAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAGAAAAAAOAAAAAAeAAAAAA+AAAAAB+AAAAAD8AAAAAH4AAAAAPwAAAAAfgAAAAA/AAAAAB+AAAAAD8AAAAAH4AAAAAPwAAAAAfgAAAAA/AAAAAB8AAAAADx/4B/4HH/4H/4Mf/4f/4R//5//4H//h//4f/+B//4AAAAAAAAAAAAAD//wP/+D//w//4j//z//jj//T/+Pj/9j/4/j/3j/j/gAfgAP/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/AA/AAf8f+8f8fx/+x/8fH/+H/8cf/+f/8R//4f/8H//gf/8AAAAAAAAAAAAAA//8AAAA//8AAAI//8AAA4//0AAD4//YAAP4/94AA/4AH4AD/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/wAPwAH/H/vH/H8f/sf/Hx//h//HH//n//Ef/+H//B//4H//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); +// tiny font for percentage first char 48 6 by 8 +var fontTiny = atob("AH6BgYF+ACFB/wEBAGGDhYlxAEKBkZFuAAx0hP8EAPqRkZGOAH6RkZFOAICHmKDAAG6RkZFuAHKJiYl+AAAAAAAAAAAAAAAA"); +// date font first char 48 12 by 15 +var fontDate = atob("AAAAAfv149wAeADwAeADwAeADvHr9+AAAAAAAAAAAAAAAAAAAAAAAAAPHn9/AAAAAAP0A9wweGDwweGDwweGDvAL8AAAAAAAAAAAgwOGDwweGDwweGDvHp98AAAAA/gB6AAwAGAAwAGAAwAGAPHj9/AAAAAfgF6BwweGDwweGDwweGDgHoB+AAAAAfv169wweGDwweGDwweGDgHoB+AAAAAAAAAAgAGAAwAGAAwAGAAvHh9/AAAAAfv169wweGDwweGDwweGDvHr9+AAAAAfgF6BwweGDwweGDwweGDvHr9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); + +// define days of the week images +var imgMon = E.toArrayBuffer(atob("Ig8BgHwfD5AvB8HD8z8wMPzPzMQzM/M/DMz8z8c7f7f7z////3Oz+3+PzPzPw/M/M/D8z8z8PzPzPw/vB8/n/8H3/A==")); +var imgTue = E.toArrayBuffer(atob("Ig8BwDv9wDAOfmgf/5+Z///n5n/5+fmf/n5+Z//fv9oH////Af37/b/+fn5n/5+fmf/n5+Z/+fn5n/5/g+gfn+D8AA==")); +var imgWed = E.toArrayBuffer(atob("Ig8Bf7gHgM/NA9Az8z/z8PzP/Pw/M/8/D8z/z8c7QPf7z+A//3O3/3+MzP/PwzM/8/D8z/z8PzP/PxAtA9A4B4B4DA==")); +var imgThu = E.toArrayBuffer(atob("Ig8BgHf7f6Ac/M/P/z8z8//PzPzz8/M/PPz8z8+/QLf7/+A///v3+3+8/PzPzz8/M/PPz8z88/PzPzz8/vB/P3/8HA==")); +var imgFri = E.toArrayBuffer(atob("Ig8B/wDwP7+geg/P5/5+c/n/n5z+f+fnP5/5+c/oHoF7/AfAf/7/7/+/n/k/z+f+R/P5/5j8/n/nHz+/++PP7//8+A==")); +var imgSat = E.toArrayBuffer(atob("Ig8B4DwDwDgOgXAJ/5+f/n/n5/+f+fn55/5+fnoHoF/fAfAf//+b/f3/5n5+f/mfn5/+Z+fn//n5+eAef358B7//nA==")); +var imgSun = E.toArrayBuffer(atob("Ig8BwHf7D7Ac/MHD/z8wMP/PzMQ/8/M/D/z8z8QPf7f6A/////83+3+/zPzPz/M/M/P8z8z8//PzPwA/B8/oD8H3/A==")); + + + +// define icons +var imgSep = E.toArrayBuffer(atob("BhsBAAAAAA///////////////AAAAAAA")); +var imgPercent = E.toArrayBuffer(atob("BwcBuq7ffbqugA==")); +var img24hr = E.toArrayBuffer(atob("EwgBj7vO53na73tcDtu9uDev7vA93g==")); +var imgPM = E.toArrayBuffer(atob("EwgB+HOfdnPu1X3ar4dV9+q+/bfftg==")); + +//vars +var separator = true; +var is24hr = !is12Hour; +var leadingZero = true; + +//the following 2 sections are used from waveclk to schedule minutely updates +// timeout used to update every minute +var drawTimeout; + +// schedule a draw for the next minute +function queueDraw() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); +} + +function drawBackground() { + g.setBgColor(0,0,0); + g.setColor(1,1,1); + g.clear(); + g.drawImage(imgBg,0,0); + g.reset(); +} + +function draw(){ + drawBackground(); + var date = new Date(); + var h = date.getHours(), m = date.getMinutes(); + var d = date.getDate(), w = date.getDay(); + g.reset(); + g.setBgColor(0,0,0); + g.setColor(1,1,1); + + //draw 24 hr indicator and 12 hr specific behavior + if (is24hr){ + g.drawImage(img24hr,32, 65); + if (leadingZero){ + h = ("0"+h).substr(-2); + } + } else if (h > 12) { + g.drawImage(imgPM,40, 70); + h = h - 12; + if (leadingZero){ + h = ("0"+h).substr(-2); + } else { + h = " " + h; + } + } + + //draw separator + if (separator){ + g.drawImage(imgSep, 85,98);} + + //draw day of week + var imgW = null; + if (w == 0) {imgW = imgSun;} + if (w == 1) {imgW = imgMon;} + if (w == 2) {imgW = imgTue;} + if (w == 3) {imgW = imgWed;} + if (w == 4) {imgW = imgThr;} + if (w == 5) {imgW = imgFri;} + if (w == 6) {imgW = imgSat;} + g.drawImage(imgW, 85, 63); + + + // draw nums + // draw time + g.setColor(0,0,0); + g.setBgColor(1,1,1); + g.setFontCustom(fontNum, 48, 28, 41); + if (h<10) { + if (leadingZero) { + h = ("0"+h).substr(-2); + } else { + h = " " + h; + } + } + g.drawString(h, 25, 90, true); + g.drawString(("0"+m).substr(-2), 92, 90, true); + // draw date + g.setFontCustom(fontDate, 48, 12, 15); + g.drawString(("0"+d).substr(-2), 123,63, true); + + // widget redraw + Bangle.drawWidgets(); + queueDraw(); +} + + +draw(); + +//the following section is also from waveclk +Bangle.on('lcdPower',on=>{ + if (on) { + draw(); // draw immediately, queue redraw + } else { // stop draw timer + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + } +}); + +Bangle.setUI("clock"); +Bangle.loadWidgets(); +Bangle.drawWidgets(); diff --git a/apps/93dub/screenshot.png b/apps/93dub/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..197c52c018739e13eb44b17b4273cc21d7e1d9f3 GIT binary patch literal 3297 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 + if (t == 1) { + Bangle.buzz(30); + if (timervalue < 5*60) { timervalue = 1 ; } + else { timervalue -= 5*60; } + } + else if (t == 2) { + Bangle.buzz(30); + if (!istimeron) { + istimeron = true; + timertick = setInterval(countDown, 1000); + } + timervalue += 60*10; + } +}); + +function timeToString(duration) { + var hrs = ~~(duration / 3600); + var mins = ~~((duration % 3600) / 60); + var secs = ~~duration % 60; + var ret = ""; + if (hrs > 0) { + ret += "" + hrs + ":" + (mins < 10 ? "0" : ""); + } + ret += "" + mins + ":" + (secs < 10 ? "0" : ""); + ret += "" + secs; + return ret; +} + +function countDown() { + timervalue--; + + g.reset().clearRect(0, 76, 44+44, g.getHeight()/2+6); + + g.setFontAlign(0, -1, 0); + g.setFont("6x8").drawString("Timer", 44, g.getHeight()/2-20); + g.setFont("Michroma16").drawString(timeToString(timervalue), 44, g.getHeight()/2-10); + + if (timervalue <= 0) { + istimeron = false; + clearInterval(timertick); + + Bangle.buzz().then(()=>{ + return new Promise(resolve=>setTimeout(resolve, 500)); + }).then(()=>{ + return Bangle.buzz(1000); + }); + } + else + if ((timervalue <= 30) && (timervalue % 10 == 0)) { Bangle.buzz(); } +} + +function showWelcomeMessage() { + g.reset().clearRect(0, 76, 44+44, g.getHeight()/2+6); + g.setFontAlign(0, 0).setFont("6x8"); + g.drawString("Touch right to", 44, 80); + g.drawString("start timer", 44, 88); + setTimeout(function(){ g.reset().clearRect(0, 76, 44+44, g.getHeight()/2+6); }, 8000); +} + +// time +var drawTimeout; + +function getGmt() { + var d = new Date(); + var gmt = new Date(d.getTime() + d.getTimezoneOffset() * 60 * 1000); + return gmt; +} + +function getTimeFromTimezone(offset) { + return new Date(getGmt().getTime() + offset * 60 * 60 * 1000); +} + +function queueNextDraw() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); +} + +function draw() { + g.reset().clearRect(0,24,g.getWidth(),g.getHeight()-IMAGEHEIGHT); + g.drawImage(getImg(),0,g.getHeight()-IMAGEHEIGHT); + + var x_sun = 176 - (getGmt().getHours() / 24 * 176 + 4); + g.setColor('#ff0').drawLine(x_sun, g.getHeight()-IMAGEHEIGHT, x_sun, g.getHeight()); + g.reset(); + + var locale = require("locale"); + + var date = new Date(); + g.setFontAlign(0,0); + g.setFont("Michroma36").drawString(locale.time(date,1), g.getWidth()/2, 46); + g.setFont("6x8"); + g.drawString(locale.date(new Date(),1), 125, 68); + g.drawString("PAR "+locale.time(getTimeFromTimezone(1),1), 125, 80); + g.drawString("TYO "+locale.time(getTimeFromTimezone(9),1), 125, 88); + + queueNextDraw(); +} + +// init +g.setTheme({bg:"#fff",fg:"#000",dark:false}).clear(); +draw(); +Bangle.setUI("clock"); +Bangle.loadWidgets(); +Bangle.drawWidgets(); +showWelcomeMessage(); diff --git a/apps/a_clock_timer/app.png b/apps/a_clock_timer/app.png new file mode 100644 index 0000000000000000000000000000000000000000..b91bc3f185f3a43476a7b72aec64607cd80a11a9 GIT binary patch literal 3751 zcmaJ^2Ut_t629~fN`eIiLg)&Fgs2b#8ahY`MP86*3_*gB#3V>iEc6ZnQe^1}Sh1p@ z1Vlg(6qO<>C{?fk(wl{MgYN3?bKgzQJ#){@|DTyTGxtkk@pcvxqOzg@07zI_nmU5B z4tEIig7+8us87L(hv{fx43xKReh)r0kO@{kwzj|)P!cj40=28zP&pHREf|n zU6}wN26`k0;Q_L9HUI!$ImMa4BG}qsNVEWLqBm_nS(_a|=Q06UHU<;}$Sfj^9pF!8 zV%Uc8RSOI#bC(ft*s2NZpdp-Ki-(!e7-ZOXZ5?eLxREFf2E#JEeK3xu=0D)zlOf!f z#iC;nh@hY#?I2xk8sh*0sjsh(&_N+kC@s)Jiy2I15!qT)rqXwkKY2{aOcH}aXHjTW z7?+p0pBBh6gu}TT{dIl!lST3Qxf7N7BP=jL1XqJVYU?0=2P3m7{{rJ`{uKu1=&!K; zwi%m9{|;JB#&;jFTn{j=j$|gyKad-X(GHXjcp;G7J9gE?3|IlC6|AhWT z?x9jxMyMaV{bTu`D0>El44%lUugD*eU)O%I=cWm>TFS1blmIf7$&C-KheiBW@mnC_ z-+;d;egT5H$Jm0E=uKo1O^GbB5x4xckVq|*o-6GhBJ-kZ}h)C{oRLE^beaKa4dpb(Z5vq_x4#`1^dTH6h!{ni$Fh&&t9TYjp4@^KXU=z04@yhgQ(l zYe$Bfk`H#5zpgoU*X-)6ii1*e7&Ht9gppe_a`l-b<2|=kZ6ifxqQo~kmb>el-J*1u z6UCm^o>)0|PF*bZefGA4w*q=xO03hZ(o~UwqG)Pw<dn^3zD5|KC2ku7- zNp99VGOOMWbN%@I^2g5e#ryz7)#k=3>~h1x!sb8q(WVz71j?RY za@952HDvGWd+rhNf^^CIq(AiCm03ldJG1mnfghi9n4?Jy_R=(Y?nBp;Jj0`3m*+CH z+_uQyqoBH$+HwtchAaXj_anu|M%}6yZ+QhoH9hV)&kM^FT!sb*Cv{8xhvPFRZLO_e z-8dk1Qj*nsS2N9kq4HQwQo$A7GqJ&}zG^h<%8oz~>rm3DQ=c?3+#V7qvOg$kdb zID2tYk-sTfVZ9$(lRw1l$!%KStrzzX$Audwduh8~KZ`Fk4i}Qz{xBkaA9itQbX3SJ z-{=@@ZhCrf3>!Qh69c#SJU{NmIa1-*wdKT#mFnOb(e~<`tm6HRaRUPb7ifxUpBiEz z$Tfvd=N(nDq9Y@TdsNs{g9189p&B`=yKQaBVHY-9D+6%GqfCUC@V(i zDjk8$sY-o|P^36!U+wZ%*KKtng@wZ5@QJ=!npLb|Y<+4@|KXtr5{&ch(5)_)aN&ZD z@$3JSAb^h#4_ZD&UaHN-%;2>pC#?MxyRG1`*4A+xLsVa2h5UYI^vTncp#XuA7(w0RQuVi@LK0JQj_xIJWQY{0zA9zp6YYTs;VQ;iY*#B7TvXx^SW4F7QZdgJ&Le zbfn!_u~g{1D{pv&&TLQt6pfB8vp7fQA_}{rCoQVkeKp6xj!;p6H-P?eI2?SF`Qlb8%7%--?yO z+3uiEZ@_A_H4t(cFy1aDB7)15!?0o!5^k!;UN>v64g9!neh_OTW$xSGBJClO0hc-P zby+5VW@;)ls#gpBhEGTmJVFHsHi{*`X;Zv|KBK$bBgS~yYWHqPnUa`p9yS;iJnj8% zz_R7gdf}CG4#k4EO5qg;yX|)Kzt8ieft~4Zit42-O~2iIXtKY~JW)0l9m3K3^kr#= zZR9S@BO1x_V+mKT?eXP}g~rL9k!V?-`^eP7X5QJ|u$|Iw8mzIak$iQ1?eUdwoEtE` z&8%Qx%&bC0L?lbPw)E!O9eXai%+1ZEkH0x5L{p1V�@bixAPV)Q;e6KqsOr7y03B zXLJv|sSb9BdS+Dy^xWDK!TYu~b7l5Dq??5J;Ee5(ZF+H?+&Vc>k5un2mQE`H-y~*$ zpVq=I$CoDF47CJaB~cVPy-wPN1XH+ZncyN!BET|SC+GG7Ief(@R=(vP=c~683U$1u z6q%F3gHUBS$TMJ^&B~jx>i#Y9=y07vDJ35IYmii2gXWF=}dc$ zdliGcF!9?Bxccn9``{+Bi4?Sx>&=P@wltVK% z>iQIT-%(*i2S2jk_qfwIe7C8Eh2olry7frSKk^NaM)4gIXBPo9Sa5U4{nH{@C~=7* zF`=_+yG0UW_+KHcH!3K69?gHyV?ubBIcW~788&P&awt9TB5=Q5PqS>$Bz~RN-YSMl z4^qK{Iog&R`p~`si_+*B12CszVoo(T)5+BFXiKRG!I#O)#(V2MCmsEGo@!0hQaV%} z9}Lt-m)YmrZI4bJ6p)tngLgMiinRKW;?B_PA|e{@-P4I9J&3zImi6!jna>fnO`bw6 zurL${f~Y&2`g7~*Y6=UFmy^zwj@5nfhHWh0W*~e5UiMPn#1gD7r^;tLkrgUV%2xUK zxrLy~C)?E9@RvL}*?MLBE7y&|S{gY=7fu%&>=M|cT(wpn>J#e{l7q266nV0sP$4cU zDe7KRQ;I90Be_AbIaK#Rn{p<;eY}A_z<>&?y`^pro*uTMA`F%Wgv1lqcW8UuS);9& zGk*!2-r?0+?u3Hn+0BaE48Lyc=IqCd+2`mLVwxpS<>$@v@0C>#Y{AV!3FbO^d6M5= zO2uuZno1CNdIg^+SQ6D3c=UBhbBI~<;qo#m{_BD@niIJAx=nrT5jQ)gUiJ^djeamnuUTH$rXAFXsHEtG962Prt+a7u z!0e)xRLm}@$mBUSHwm29!boV!(8av!lQiq8rP$4PI&V^(md*2u!(4Au`cpz_l5lzQtS}8 literal 0 HcmV?d00001 diff --git a/apps/a_clock_timer/screenshot.png b/apps/a_clock_timer/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb3dd9f2f572b1d7bc2423fa31032b762e0585e GIT binary patch literal 4174 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 0) { + ret += "" + hrs + ":" + (mins < 10 ? "0" : ""); + } + ret += "" + mins + ":" + (secs < 10 ? "0" : ""); + ret += "" + secs; + return ret; +} + +var newtimer_left_from = 60; +var newtimer_left_to = 2*60; + +var newtimer_right_from = 5*60; +var newtimer_right_to = 7*60; + +var current_from = 5*60; +var current_mid = 6*60; +var current_to = 7*60; +var current_value = 0; + +var timerinterval; +var istimeron = false; + +var islocked = false; + +function countDown() { + current_value++; + draw(); + + if (current_value == current_from) { + Bangle.buzz(500); + } else if (current_value == current_mid) { + Bangle.buzz(400).then(()=>{ + return new Promise(resolve=>setTimeout(resolve, 800)); + }).then(()=>{ + return Bangle.buzz(500); + }); + } else if (current_value == current_to) { + Bangle.buzz(300).then(()=>{ + return new Promise(resolve=>setTimeout(resolve, 600)); + }).then(()=>{ + Bangle.buzz(300).then(()=>{ + return new Promise(resolve=>setTimeout(resolve, 600)); + }).then(()=>{ + return Bangle.buzz(500); + }); + }); + } + +} + +Bangle.on('touch',(touchside, touchdata)=>{ + if (!islocked && istimeron && touchdata.y > (100+10)) { + Bangle.buzz(40); + istimeron = false; + clearInterval(timerinterval); + } else if (touchdata.y > 24 && touchdata.y < (100-10)) { + Bangle.buzz(40); + islocked = !islocked; + } else if (!islocked && touchdata.y > (100+10) && touchdata.x > 88 + 10) { + Bangle.buzz(40); + current_from = newtimer_right_from; + current_to = newtimer_right_to; + current_mid = (current_from + current_to) / 2; + current_value = 0; + if (timerinterval) clearInterval(timerinterval); + timerinterval = setInterval(countDown, 1000); + istimeron = true; + } else if (!islocked && touchdata.y > (100+10) && touchdata.x < 88 - 10) { + Bangle.buzz(40); + current_from = newtimer_left_from; + current_to = newtimer_left_to; + current_mid = (current_from + current_to) / 2; + current_value = 0; + if (timerinterval) clearInterval(timerinterval); + timerinterval = setInterval(countDown, 1000); + istimeron = true; + } + showInstructions = false; + draw(); +}); + +Bangle.on('swipe',(swiperight, swipedown)=>{ + console.log(swiperight); + console.log(swipedown); + + if (swiperight == -1) { + if (newtimer_left_from >= 60) { + newtimer_left_from += 60; + newtimer_left_to += 60; + } else { // special case for 0:30 to 1:00 + newtimer_left_from = 60; + newtimer_left_to = 120; + } + newtimer_right_from += 60; + newtimer_right_to += 60; + draw(); + } else if (swiperight == 1) { + if (newtimer_left_from > 60) { + newtimer_left_from -= 60; + newtimer_left_to -= 60; + } else { // special case for 0:30 to 1:00 + newtimer_left_from = 30; + newtimer_left_to = 60; + } + + if (newtimer_right_from > 120) { + newtimer_right_from -= 60; + newtimer_right_to -= 60; + } + draw(); + } +}); + +var drawTimeout; +var showInstructions = true; + +function draw() { + g.reset(); + if (current_value >= current_to) { g.setBgColor("#F00"); } + else if (current_value >= current_mid) { g.setBgColor("#FF0"); } + else if (current_value >= current_from) { g.setBgColor("#8F8"); } + g.clearRect(0,24,176,176); + + g.reset(); + g.setFontAlign(0, 0); + + g.setFont("Michroma36").drawString(timeToString(current_value), 88, 62); + + g.setFont("HaxorNarrow7x17"); + g.drawString(timeToString(current_from), 44, 62+26); + g.drawString(timeToString(current_mid), 88, 62+26); + g.drawString(timeToString(current_to), 132, 62+26); + + if (current_value >= current_from) { g.drawRect(44-1,62+26+9,44+1,62+26+9+1); } + if (current_value >= current_mid) { g.drawRect(88-1,62+26+9,88+1,62+26+9+1); } + if (current_value >= current_to) { g.drawRect(132-1,62+26+9,132+1,62+26+9+1); } + + if (showInstructions) { + g.setFont("6x8").drawString("Tapping timer locks buttons", 88, 100+5); + g.setFont("6x8").drawString("<= Swipe to change time =>", 88, 168); + } + + g.setColor(islocked ? "#444" : "#000"); + g.setFont("Michroma16"); + g.drawString(timeToString(newtimer_left_from), 44, 138-9); + g.drawString(timeToString(newtimer_left_to), 44, 138+9); + g.drawString(timeToString(newtimer_right_from), 132, 138-9); + g.drawString(timeToString(newtimer_right_to), 132, 138+9); + + g.drawRect(0+8,138-24, 88-9+1, 138+22+1); + g.drawRect(0+8,138-24, 88-9, 138+22); + g.drawRect(88+8,138-24, 176-10+1, 138+22+1); + g.drawRect(88+8,138-24, 176-10, 138+22); +} + +require("FontHaxorNarrow7x17").add(Graphics); +g.clear(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); +draw(); diff --git a/apps/a_speech_timer/app.png b/apps/a_speech_timer/app.png new file mode 100644 index 0000000000000000000000000000000000000000..1eb777fa7988b5d0a44e31d7238925f0ca47027a GIT binary patch literal 3036 zcmaJ@3p`Z$7r!HUj7_!?B{4>i$zz^u&6t_Q$XoJCMH*&gm7T#^Y#jC4Ec1rSneYmM!f8k4B7!W3=T`g;)ob59BV=ZWegs`71mpW zD&=6Cy*vO=0XH2|=zlRJNH2(<$bM!H+ ze;g*D1uuZ+ld<3E051S(=FRrM#EQWHUHCS$rnjNa!yrz6kXE zFW?fz5+Im+q9a&|bQ+&VrSTaQS@|1damE;|8(97(cp}Es5JMo!Qu{C4&v-0D86d+K zSmv8(Da#VeFL7`~-MCy9<=;KM;KMw6(Pj}&Ldz<8Nrf-8&-^afKNKj4{JR$^(23~i zJ^)adwx#ZH^HjcdR%o+lzgnYYD!(Q1uAQq?6ESlhF}fq!qhPi4bsWnFSrnj`506*+ zdQ?>81vNOTu7ZQ+2Z)e{2Kxf=sT!w~>?Bj+;}bzo%x>4c?~Q1?MG;JkM&_P3pPeA% zdH&D6*1aDb-C|_K8hEz1%s+K&RGNz;siY&|&kygrud_$GE5>W0X1xaRc>GEo(i$Bd z)n|z3lmX@TWKDD~Nr>YQwLhy%xLGvPbA#vZ-dUHh(wm-QnG57GYGWWOnkfFBts#B& z7k8bjy1&M{E_D?G6VNWcV4qc`vU%gijhi;fwp(Iy$q^oV_cGlI3IxRVHky$@psxTRdE~h>`Z{(6U104+r9Bn$P0T?@V=(rtq0lZ^;fx(Itn|4G+>k%)R41zRD{|5NaB%~Lw>w$Qt!dRL9I5}S`y>w?Qahq_sNRbS1)o_Yw!Cd z`D|CgiSsR|r2UN|kq&uA^mL`w^vI)2fkU@pv4dAye((Iz-rk;Ed{gkMZ*t_(_NbYM z)k2=?!$y&=9;wwdX}J;A;R^7g2bo$c(%t@H?tM9@H@x`_);`mS*;#zrVQ%gno_QyE zmFC(X){@vqxX}?lr@}`_h419UUF%85y>@399R*HBk}q zA~}0SKbvQ2`HcISm6q5mzD`c6zs%L2fWbC7Y>Rx0dHnk2fnz;4#2c#p zTXU58rVqCMY)2iuOslI38&~ZGQ~6{d59M8De%JC8OIp4KfrwK*?M{n+_j+*PUd8}< zXnOqVAv&FEZCwT-_PSnlQa+dWs=slz#WEIR{)@uB}_@7b(;2x8vredha zJe7jC+4mH?NlbbDdYiYTsr}}knPhBgQ2cP0=A9KM9gezN?s^ zEf>_9L#T9r1hX@fvv9N9q~iROs`j?uI7fDh)|>5==4}7AX3Xb#6VpoX!tqjL^`osJ z^7V2BX4Eb2;G5ZK=wjmaRod!%=fFO)x3Ov0tbOFGLqimbj(4QRbX{PTTP16-g6^Kw zGxR7y8W=!FqhngFVxF9(UpYMD5heW9QYY=DG5?)&nm#;pcWlp3`zy{{iy9gl`qIE} zOmAg~rLnoXRzzXj~B%aEQKeqLAH00wSCC`!wh8i%#MVt_U|M>}vK{Q@Gu{N<&}W+cQ9m7-o`4 zsLFJ(p_8KLwz*x>R8`@Pf!xQ=f0xx3SlM;2%WH^)AmVN_YFmR#N%*#S32VjC~%Lglw6 z#l^)r{Xks1QpxqLw(IWQu>NpWGqqmnqH+6nH*gYU# yJ4%fcGfsA|u23h2XeHGe^>e7deLFk-@M$Mu_WQQ7zPGYpR9h=2YN^G+xW54KKFVwW literal 0 HcmV?d00001 diff --git a/apps/a_speech_timer/screenshot0.png b/apps/a_speech_timer/screenshot0.png new file mode 100644 index 0000000000000000000000000000000000000000..ee3ababc1abf849d688e97c5ceb8d3ae8180f05c GIT binary patch literal 3276 zcmd5<`#;l*8~jKfgS$_v`gMneL}u6rlT{001Z) z{{wwSf_49334Aan#Er=%n$g`HYonYln1 zTHPr^rL=8wb`~sChx&Ui1*bSb;>`1easbz)kF3cLGOp0=@KuOBN-mLk&iXM%>fZhS z`6*KUGeoSs`>FVq%4SX?es1zNE>j>L*L;yFf2GRfWosr$8c+SVnG_w=RmsK)4lOoh zlqpP=-P@j1+#2o$#N{h8F;m5%`x&eKc%Zd^a0QY4@kjce7{Q&<3;tvGtO($S|H>CcyT=T7EA(DBOFYRxGSO(|>Mf zGt?ip{R6*hp?MLujK48m=tudphK52y46I{pX>6qe;}4L#{dV65OKV~kY=>_uucWsW zqhkXPhBTgT_ia*klNHlfn(n$2T6t8_+?N^FB;;=yg>k8(0zW~(5kqnbQv{!9q-9;E z#^40^uft zTG4%01N34z!DoZ79>v4F>P`3D*!h0W;zqkwE4iVaI>Ya%_c++p4236`u3BPy`PXdk z4zorI6b}g1YF7=J@$b>6%QM6tDFx4ZxBQD$_rj+_1FB{)QWJ@1ZGLK1=>-20lfaST zKeeINkInc?`E&fpz$F0YeZcHYUX+mj5aRc;3m zxgxo}U%Jg6bqTzY0t2VD6|d_`7-T12Q=QR%=Aeo)_W{K;u!aHz)U;pxf1~!7DOKdb z8zNN#@gz&1|21K-6+f5RQK&e@%G#xqa)a2PRUxB)!cqDI|Be?>c22Gd@SV1`&O_*8 zj>$}Xv{2xB8=$I*W}Ux+9(KD(hItb|FXFO)@;J5@+dk4OmLoPe|Bx^!rJwTYpJFLg zlovN_d1x7JvibHfY$~<=_S?9wj91#(PJqjyQ{p2pfcYc_$6KFZH}^cg%^=rpl!~7O zk6vR51MC@Vj5+?=Q}X~oHcS&^(xT2aqn&=+$9qAPj+DaHRQV2boa(x;EAIeamL9AJ z>;qsKaZEhL2Y}%~HVkfaMQnEP*069WX?~Tr{C&kGu7_`-6P>r~;|FTQ2o>*;W>ch2 zEvVncwIo7c0#o%WTm+keZE^_?Hni3t&s1F-Mgr?34O49wyXz5+|-Ut+{}%!XOb6*=GC;xp0V=!#;%7WsCgw%1S zXXg+5s1_UomYB0TJYe7f#EbEw>u`9pW4wgh+af{UC% zp!?N(puuPm$fojc*!x3B%HKCp)Eo)Acom)62YC<7ueI>)hBi)Rh4S9q$>(E2GDKPH zTB|1@hkx`&8+6z`-CQ&pts-Qo(SCEedOM||1N#rAyFIXfUj)(9eXyljA_u@{4nO%z2Xy755Th|Yu;z`hvV51gA=Ga1?jpS0=+%3p*>~0YjeMlQ zGdZI0n{v9L$_3ZOVt=qld|}mi3om@6fC-OaO5u5`wQf%o{b}>8_R%rwNLt&8)*jEl z_sy>7HOGhTX(*XF1F|vmSZjL(28(I2$*vf%__v2`_{#qg)8(!*-4k<6^U#GRCxjEn zCofbOg=tJstq| zXrsU(wkZjl;BPh_aQH?bcJkPBlKTA5#dm~JQO?E^m+^r8PR{DB1$Qh zOi|_D0<+7_ApC0K`r<;B2a?lFs7XzjIp!H?-ZWq&{rm?Bf%HRqU8m=Len$?J#)Fb{ zk_X35LDUx1R%vX}4jefM`O$~Z&7bAUE!A#aYP35PtgQfEMJOJI8b!CDitMeQL)5Ix zzLY^mW;BlC>em{CmqgrJZo$(aL@xvE9Iv*RG$b|yISaoUQW(j86c=3hFMZICF|2*! z77HN#!-B^&w*SEy7(q2Fe|^9~8@=R!6J|)Jp05Dvg!7t33*19VboIe)tyPW=w`!`t!OgYj#BifiWV z+u7G+`RWC)K~29tmSRg^+^QE2E$kRlI0^GnfoCUm5G`=u$)39P#SODgc<_tcyD|px z^BDOr6ZoW=5It_OTC9WNfXh~eR{3%cU%)WV6W~qKMH%q0UD$HJ{*v{|w%5(d^qz+U zVDTI6@lQT`0?=f_%gTaWbGZ+q7)s$d&2B(lstytnBkQF3;&*O{i1Q~`8^MU*pFe`~ zS!$XN0R=DA)~ZC?pXO0(vBj}vxd8xwjj_xEoTqr|#0OS4a@p5v=io~W&aH;w9eIk& zC&aVV`=dzra7XLIR+l2&_82MecZ;KNmI96kHpYQl%J-;*e|CS5l^?&aO`2Md%n>Vd zr;53={;RQbdeUSJu literal 0 HcmV?d00001 diff --git a/apps/a_speech_timer/screenshot1.png b/apps/a_speech_timer/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..69ea91e95332e8b97e6de3205f72319215bd6195 GIT binary patch literal 3457 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 literal 0 HcmV?d00001 diff --git a/apps/a_speech_timer/screenshot3.png b/apps/a_speech_timer/screenshot3.png new file mode 100644 index 0000000000000000000000000000000000000000..7b67b6f0156354dc839f5194e1a1fbc1c54ed9a1 GIT binary patch literal 3374 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 bvNGFCP4eAd222Y+K)?liN4u7DzS;i;FilcV literal 0 HcmV?d00001 diff --git a/apps/about/ChangeLog b/apps/about/ChangeLog index 03e920a9a..f5638fdd2 100644 --- a/apps/about/ChangeLog +++ b/apps/about/ChangeLog @@ -9,3 +9,4 @@ 0.09: Actual Bangle.js 1 pixels as of 13 Oct 2021 0.10: Added separate Bangle.js 2 file with Bangle.js 2 kickstarter pixels (as of 28 Oct 2021) 0.11: Bangle.js2: New pixels, btn1 to exit +0.12: Actual pixels as of 29th Nov 2021 diff --git a/apps/about/app-bangle2.js b/apps/about/app-bangle2.js index 32e5bafae..978d36193 100644 --- a/apps/about/app-bangle2.js +++ b/apps/about/app-bangle2.js @@ -6,7 +6,7 @@ var ENV = process.env; var MEM = process.memory(); var s = require("Storage"); -var img = atob("sIwDkm2S66DYwA2AAAAAHAHGSRxJEkAAgmGGBxDIADIdAFJIbAHF9HP00kBUC6DtzDgAgGOxwkgAGbA86CW2222kkgB4hO26/XDDwAwkEEEgYYA+VW22wEAAggwAG2AZZZTFotMIDAA9vB520AJUnXAtwAgAgGxOw2wo+bAmiSAH4AQUkAHMkO2/66TY2GwgggghB5/+SRxJAEAAlm2ABxADLKYFFFBADA/99HP00kHoC6DuzAAAAGOxwkg+uzG86CQH7bSUgAB+iSQAAADDAAtEkEkAAAA2khxIAHAAgmGLADIDLLoAAAEDDSQQCAAAAAHA4AAuwAAAAADDDDDAwAIIAAMgAYQUAAA4iongAAAGABqEkkkAHHGGhhxIHHXa66ADYbAACcEHzUBDbQCSSQAAAAHAttDDDDAAAADDDDA14GGGABEEAYQWBAIDiQ84AAowwIYQkkiS4g42khxIA4inNPAA1wAATkkABCSAASQQikm2SQHAFAAAGwAAAAotoouJwAIIABEgYYAAJIIoCI84AFt2wBCAEkbYEEHPABxIAAfSqqSQ1wACcEEAACSAAAAAggmACtv/91gGgEwH/AtoFFG2wGGAABEEDYAAJJAtAI2Gw9twwwYAAm2AH/55AR0k0RAHNPKo2wAT4AAoFCShYCSAgkmwCoAAFWoWgEyCSAottoub2GAAAAMgAAAAJJAFCAwww9FAGwA49th5Ag/PER22T/AC66KoBGCd8kksAEATQCAAggmFCtsnFawGgEwEkAAADbutwGAIBIAAAAAJmhIYAAwA35xAg2249t5PQA4AERySM+4kAEikAAzo+22vJPAZgCCEAgm2CogAoFGvGwBJAAAGADGGGGxBBAAAJBBMkkIASQAA5+2EE0zb9tn/QH4uAR1to/An4kkkgCeA9ttsAEAAACSAAAAAAogAooAGAABAAxwGADGGGAAIBIAAIBBMkkP/QUkAH5xAnGLD4AAUkQQuQRtSV4AEAEkkATow4AAAAASjDFCSAAAAQAgAtAAoAABIAvgGDDG2GAAAAAGwJBAJkhPJSG2CSwAACTzb4EEAgGCuQQty14HkAAkggdAG4AQAAA0zDFCAC2wDDAEnooH19At2AywGAYGGAAAAAAwAAAABMJH/QQAACGAASFYA4DjAgwCuCAtS1oAABJEEDbbbbbbYAAiTbtqVCbYQQQAAoFAAoFAGAQAG2GGGGwAAAQwwAAAkhIGmLTIkCwDAC4PIAAAAgAQuQAtJNoAABAEn/JIAIMAEEAADDFCAFAoDDAAAAAAAoAu2SRJAAIAAAAAAAAwGAAAkgAEkNK6iCDDAAA+PADbAG2AuCAtJVoIopSEz7JAABEgEgAADDFCAAAAAQEEAAAAAoAFAQQIAJIAKcu4AACGwAH/kn/GmjaSkSAYAYAJ4ADrAAFAuAQFKNAAtpBmXvBNBIMkEEAADDFCAAJJIAkkgAAAAFFoASQMghIAAAAAAACAAA/H4/HAAZK6EAAAAAAAAADbDYFAuACFrtowFBMydIBAABEgG22AAAEsHAALbAkkgAABJACQSAFIgg8k8/kn8AACaAAJ/4AGoQRYkEAHA/+AGAAAYAAtAwAVvdu2ABmToABIAIMAwAAwAAggn/4LAAEkAAABAIQCAVlwHA+22+++3AAwH/BxJAYEAgHHAA4AAd2w22EADAAAAAAqo7owAKSdIAA44AAAGG2AAAEkA//LAAAgAA4BAISSAVu2kA6q6666XEkwH/BIIDbDggn4EgmwAMWGGGEAAYAAAAEtsHdoAjTpwAAEAAAAGAAAbbYgHI4LFdHHC2ABBAQCSlo3cA7b7777fEAwH/IIAbbaAkAAskGGASWEmwEgbEHEAAAxOtFpJzdIAAA44AAAA2wAAYAABJLbDDH4CGABJAQCklAAkA/9999v9EkCaAJIADbBoglttAmwGQWgmGE84H//AAACQAAAhRpAoCA84ACSSwAAYYoAHI4AFdAACSJJJJJJklAwkADAAYAGAEAAbYMIAAYAAglttAGGGSQkgAEmgA44SSSSIEAAadIAgkg/gACJKGAADYAACQAAHXAAAYAAAABMkoAwAADADAQ1wEADFAggAAAADL1ttAwAwCAggIE84CHAWy2QLoAmbpggYggkgttJKAYAAAAAVqBgSSS/kIGAwwxJkoAAAADAYAQGAH/DuokgAAA2AatttoAAAigwBBAAAB/4SSSQJAEyd84YQkgAAACJKJJJkkAAQCAnS6S/kYwwwwx5koAwAADD2QQAGHXDFDlgAAAwxVlttAkgEkkJAIwAABkgSSSQLomT5/gCIDADAACSSQQQ//AACQAgWAS/kI2w2wxJkoAwAADe2CAAgg/DADFAAAA2CLM8loBgAggBAAggQAAASSSQIEydI84IADDDHXAAAAAASSAAADbAAAS/kYwwwwB5kNAAAADe2AAEGEHAbYlAAAAwzZf/9ABgAAAGGAbYAAAGAEbAAmTsAABJADYYH6AADbAAAAAAMIY2w2w2kIwwwwwJJNAAAADDwAAgGAgAAEFYAAAAELM8loBgAAABJAggACAAAEYYEydJMJEkHnAACSQG2zBSJllIJLQGAwA2kAAAAAAKSIAH/ADAYASHMbtbh4kAAAAwFJYAABBgGWWWWAAwAAAAEEbAmTpBJJEEEkGJwAAA2YbAAlAIMLb0w2wEkEAgnJJKSIA4A4DADACHMkkkh4HAAAASGTJJIgIgAAAAAE8888G2AgYcydABhhABHnGkwQCA2YYAAAJxIAAAAwAEkEgg/O2LJIAoAoAAAFksAkEkkHAHAABJPYOuIEkAAAGOEkQAAAG2AEkmkhABJJAACSBkIAAAwAEggAAIAH/khJAEkEEgJO1NAAFjDlAAGAsgAgAAQAAAAwxJOgNNIAADbIBxAgQEAkG2AEEicIAEAAAAki0AACAAAAEEgAAIAH/khJA44EAgA2FtAAFkclAGGGEAAkACA4HJ4AAJFoFtAA/ADIGOAiQEEAm2AEmjkkJ0w/4ACigwCAAUkkkkgAAAAH/khJAHAAAAGwADAAAckeAGGGAAAEAQAAIAACABJwFIAAADDAACQAZYkEmQQEylIBN01/4AAgwDASSH//8kgAAAAA4EAICXkG4E82AbAgkjjGwAwwAAAkEkkHAHEkkBJIFwYAHAYkkgeYLIAAWSQkEhABJAEgAAGAgYYEgBJJIkAAAAoAAAAAAXgHOP/AwAA//4Y2AAA444AAAtoSXAEEEBJQEGYAHAAAgQYYZfA4XQUEdgAAIgggAAAmAbYEAAAAAA2bk9oA4EHNtHAm008AIAAJJIAGySQ444AAAAoQAgAAAAcgEAwAHAAAgCkgAAHHSQmUpgAAIEgAAAAAAYZEgE8H/AGAwACQAAHHBA2HOIEWAAAPkkkgQAQEAgAAAFASAb2QQAjYYYbfHAAAgAEGwHAAAEycIgAAAgjCDAESQAQAgE8EkAGGEMQCAAX9pIwG4AAiAAAPn//4AAQgggAAWVAQAf2AAAcAEkAA6SSQgAEGBJHHAmkhAAAAEgg44886AHXEg8kA/4GwBAQAAAXHBA2AAACEAAAPhJJIQCAkgh5DADASW59QQAjSQiAACQCX/AEAxAHBAxkMdGA2AGADAn/iAwQwAAAH//GGBAQSAAXFAAAooAIAAAAkkgAAAAAggnHo2woAwwAAAAcQAiAAaVaRJAkmxIHBhRhTr2wwwwwII886HAAHAAAAkgGA0MQCAAQAAAAtooAAAiA//4A4AAAAAB5gwwgEGEAFAgjSACQAqTCXPAAABAHBRdIUd2www2wCAHnSCCCAAAAEEEAAABCQBJu2AAYoooAAEAQJJISSQAA444AAwwAAkgAbYwcQDbAFYdAHPAAABAAhJpASw1N2AwwAAzbAAEUQwAA9gg4AAEAAABoBADDAAHHAAiAAXn/AtoAAAAAAGASQEAADAQjQgYAAEEEAAAAAHAbafIJIwAIAAtoAG2YBJMkQ/4H4EA/AEIAABJohCDbAHAwAAgQA45JA2wAAAbYAAAACECAYYAcAYZBJA2wAwAAA64bb64IwwAwAAooCCoSQJMUQkgtvAHAbYAAGxAoACDAAA/4AACIInUkbbYAADDDbbbYAUQAAAhAAbfB5EEEGGOO64AbdAAJGSQoAAtoCSoSRIAAAwAto/4AA4AAGGJbbaAbAA44AIIIIQBIbAAYADDDtttvHEAAGA+QkSvB5AAAAxxxSQtbdoAIASQwAAoAiCtQQP/H4wAtvgnAw4SAGGAAA/HAAIAAABAII4kkAAAD4AbY///77EXNkgO8gSIAAtoACAO064rbboAIASQAAAowgAE0BPJJ4DYf8EE/bYSQGGAAHA5AAIgggQQJIBJJIAAAYAPItttv/EzjEAAUkRLADrokiQMAAbbbbbYIwAAHgDAmgAGOADAAYDbY4gg4AAQAGwC8A/HA/JEEACAEESAAttAADA/4bbbY4AIAggIBkJLtrto2wQOmAcjjjkYAAAAHkJY0wDE0AB//IAbAAEmRACSAAAC8AggA/CqqAggGmSAFAAoAAYPIAAAH/HKXIA4AkALmDgAAkIIkmcktskewwAAH8JDAAbAAAAAAAAAAAkyNgASFo/68EssATAVWGEwBxSAo2wFAAAAAAAAHH4R4FtkM/2IgwlllhjbEybbbbbeAwAggjYAbDAYAAAAAAAACCWRtwoQQt4CEEssA/ACG2GAAISwowGFIIACCQAAHHAAgAoUkA/Mm2kEAkI4ADpAAAA2CSwggjDEAYAAAAAAQAQbaSQAIIoCAo/CEAjgA/AABxAwAASAowGHHHACCAAS8ADAgAoMM/tAwwwFAAA8AFIDvrAACCAEMDYxwAAAAAAASCQtqCFtJIAYYY4CEAjgBJAHAwHGAASAo2wBABASCQAX4AYE8ooRJkAGww2EAAAAABADvrAACSABhDEIMAALJBAAQQQ2wACSILDDDD/4AAbYBJAAoAowAASAowAvHHAAAAA/gmxJ/ooJAQAWG2GFAAAAAIIDvrAlKCAd9bAxwAALIYDAAAAAAAFtIIYAAAAAAAAAG2VRPv4AAASYFwFAQAAAAAAgEAwIntoRISCWwA2H44AAADADvrAlLApscpAEAhgLJBAAAAABJJMkAHPAAAHnSQAYe2VRpvvAAASOGtoAAA4HAHBIAARIn/4JAQQQ22wHHGGGGAYDHrHlIooskoAAAIAAAAAAYAAAAAH/kh5CBEBJSCAbEkSRNv9HwAAIAEA84HHAAAwBAACCSHgR/QAQAAAH/+wAwCAAAAAlLFoFlAwAAgADCAAD7AAH//8k23PAAAHnQSAbEkVRpvvA+ggW2kgkgH/AEA2IAAwAEEAJAAAgAAHFtuGAwIQoAA4lLAsEojwEAIADUQADAAAAgggAAAAAAAAACSAYYAVRNv4HwggQEEE84HHHAHwBAAAAAgAoJBYAwE49AAAAAeAoAA1tAAggggwgghgbSQSQYAAB444A/4D///7AAAQARAIASAAAAEAAPMAAAAAA/8hIAH/AkkgGADIAwC44tAAAAIwoAA9tEgE0A/wEAAAbQQAQDA1Ak02w8kAEkkAACQAABLICQAPgAAEk58AQAbbYAm0AA6S4ggg22ADA2249AAgkAYYoAAFtm0AgwwEikH/kn/AT7G1uGww288AAEAAkQCAABZICQkkkkkG2PIAAAYYYEGwgHyS3AAAGABBA2KHDrYwwwIwoAHkgm0AGGGACAGJ03nQQYASA2222/8AAEYYkgATAEkkAMkkkkkHGwEiQAbb8822A+yC24AgAADIAwCAAYGwAADAoBDWQEgAGGGACAEk03/CDAAQAAAAA8kDEEbYtgkKIAggBBkkkkkH+wEtVAc0f/zeA+QC24EAEkAAEQGgDbYA23AHoAHQQCAkkmACCCAAAAFteYGwoAAAAQAbckYYJgERAAgEPHIAAEkHGAEtVA/H88DDA+QW24EgEk/4AAAAABAIkwAAoBYEASACCAAASQAAIANVbYwAtbAAC6DYbAAAJEgAAAAAIAIAAEkAAAEiQA//4AEwA+yW24EAEk44IBBIJAAAA3HHoA4AACQCCACAAAHABBFtYYwAtbAHXXXbYoAoAAAAAAAABJwAAEkAAAAAAA//4AEGAf2W3EkgAA/4AAAILBAIwwAwAAoHACAAAQSQQDA4DLAQAAwAbdoAC6ADAoAoAAAABSIAAAwAAEkABIAFFtP/IAEGAb//4AuoDYA4IBBIIZAI2wAIAA4AAAAE8QCAQrACDDCSkAGwbiIAAQ/4GFFBJAAAB/I4A4wAAkkABB21FAJJIAEGAb4/4AywYDkgIBAAADJAkgAQAAAAAoAggiSSATA4AACCAAAAb1gAA484w1FBBAAABSIAAA222EkABIJNFo5J4AAAAb/A4ALIYD0wIBAAAAY4AAQwgHAAAAEAAESQATHAX/CSg0AAbKYBAA/4/woBBAAAAAAAwADMQSkQBBkltA4A4AAAAbH/AAAAYDkgBIAAEADAAAHPAAAAQAgAAAgAAtAAGACCA0D4bbABrwAG/3HIIAAACAAgAgZiCCCABIAAAA//4AIImTA4AAAAAYAAC4AAkgAYgEAAAACCXvAAA/n8/k8Q2wCCk0HYbbABrYAw2CSAAAwQDAQEkDMCCCQAASDAYADewAJMyYAAAAEAAA//HCAEkkADEgAIIBCCrroAAHn8nn8W2wAAAAAAAABBtYggAkkg44ADFDAAgAAHDAAACADDbAYeGGOIAAAAAAkgFtA46HAkkggDcgAIIIKCAAAAAHk88n/Wx2AbkkkkkkhJBAggAn/g/4AAuoA/4AAHYYwFCADAYAYeGGOIAJaQwEEEFAA/HQEkkHEAAAAww2wQAAAAAHn88k8W22Aee22222wAA4GFdnvg/4Cd31akgCAHYYwFASbAAADeGmGEAAYQwAkgFtw4wwAkkgAA2wA2wwwAAAAAA/EAAAAW22AbAAPIH/AngAgjrn/g/4AAuoASQAA/DGAFtAAAAEAG050kAIaQAEEEFA22wowEkkHA2AAAAAAGAAAAA2E/8ro2w2AYYA/44A4/4Agldkkg/4ADFDAoEkkAoFEEkkETA2DAnOgggJYQwAAAFAwwwwAAkgAAAH/4wwwGebbAA2E88dY2AGADAAPI4H4nmwABJAAA/4AQDAQoAAAFAkEkkkkjEkYA5AEkAAAH/AAAAAAAAuoAEAAH/44HwwAG222AA/E/8rowmlFtoAAA444AGBBBHAAAIAQACAAobYAqVFE0kk0TGzAAAAAFtCSAHAAAA4CCAAAA/AAHAH4H2wwWebbAA+glVGgm21tFEkAAH/AAGxIBBAAkMgCAB//oeYFAgFEGkmcjEaBJgAAFtCSA4AAAAFQQQwig4k2HCA4HwwwQAgAAF+giKGEGmlFFAQQSAAAAGBBBJAAgIiSJJJJobYqVAEEA0zcTDyBEEAADbCSH2SQEECCCAARQ/gYYVQ/4IAAWAggAA2glVGEGkk64ASAQQAAAAAAHArrAAAAAAkkoYFAhttEDebcjfyBIwgAttoA4AQAwwwAQAAigAEbCACBJBASSQkAH/3gggG/+AgigAQASAAFtAAAA4trAAwAwAAAoYqVZusEDebcTDyBGEAABJ85JGSAQAXS2kFAHYkAAH////AAVtggHfkAEEk8ggg64EgYQQQArA64/4rtAABBAwEgoFAoZtt8DeAcjAaBAgAEBJ85JAQADDBS2kFovD4HoskkkkEAVAgEH/AAAAA/4kgDYYAAAAAArYURxIAAAABhGGEAoqUAZus8YADETADBEE2gh5855AQAAoGS2kFFHY4Hov////EAVFAAkAbAQAQBIkAYDAA//AJIrY6+2wEkgABBAwH4tAoAZtt8YADEjAAYAmm0B/8/5AAAAADAAAFAHDFItoAAAEkAVtAAggYYQQQIAggDYYA8nAIFtAABxKSkjYAAQBBAoEAAbYE8DYAcTAADAEGAAAAASSAAAAAAwAFAHYBoooAAAERJIAAAkAbGyCGxIkxJgAA8ngJIAAbYAAQkgDAkgABIAAHIAABJAAAAAAAAACAYYY2w//AAAAAGwAAAAGuAAywAFEhAAAAAgAAG222wAAxICA4/8gAI44Aa8QQgAAkonAoHHH/P///3/H/H/H/HASAbYYwAJJJJIAAAwAAGwFtAIWQAAAhAH/9AggAAG2wAAJiCCAAAAAJIAAYYASUgAAYCADAAAAJJJIAwAAAAAAAAACAYYY22AAAAAAADwYAzGGuHGywAAAhJA4AFkAAAA2toAJBJJAAA4AAEAEbekDYbAbYAGH/4DD/P/4AADDAYYAAAAAAEkkgw////4AADzYAwGAAQgQAAAAhAA/FogAAAA2oFDbFAF22wAAAEEEAG0GGGAAYkgHAHDYbkgCAIYAL47AAAGwGEEAgwAbbbYAAbzbYGwAAGHAAFAAhAA4SWGIJAA2oFYAFotAwAAAAAggAAAtttoAY4kHAADDDmgQQAAoAbYwQAGwwEkggttttttpJAAAAOIArDIAAFtAhAY4CG2BBSQ2ooYAFFFAwAHAAAAAAAFEkkFAYEgH//4AAkgGAAYAIAAwQAGGGYAFo223///5JFAAA2wFoYPIHFFFmsA4SWGABRI2AADbFFFAwGgA44AAAFAm22goEEg////BJBIwzDBBAAA0QAAAAYDAAbbdtttpJAto2OJ2rDPIHAFtiFAYDAAAASQEkkAAdFFAwGgHHHHXAtEyaa0FAkA////A4MhwwgAABbZwQAAAAYDoFAAbbbbaSFAAxwB2QAJIAwFFhWDAYG22wJIEEEDbFAFDwGgA4446AAm7rr+goAA/H4/HHBIGoArbDADF+AAADYbFoAAAA/kiCAH/2/5KSk/IAwAAgAAYYAAAxawEgkA/4AAYYAYHHHHXY4ndllfgoAw/4H/AAG2AFtAYDGDF+SQQAAAAAHIPHH2iQAH/3//4AAJIAoAAgJAACAG2xW4A2wAXQAAYAEEA4466YAmdklegoAGH//4AAwAwA4AYDADAGSQEEAAgAAAAAH0iCEH/3//4AG54AoAAbZAAAQGGxawACAA/QAADAIYPHHHXYomTsrWguwGA//DTGSreAAkgBbZEkSQEkAAgAEAEAH2iSnn////t2wJIAgAAYZQSSQAYwJIACAEAAAGAZAgB4464YogydawgoGwAAACqGAoGHHkgAAA/n4AEEAAgAA2wEHkgAEH//n/9tAAAAgAAbYQQAgDbAAA4CBW2GAGYYAz3HHHXYFEGTWEFGzbAAADTASrYAgHDDA3///wEEAAgAAAAAAAAAYT/8k/4AAAAAYAAACQSAAAABJIAIOOwGAGDAAbY4464YoogzwksADbAAAAAAQAYHHHltA/k8n4B8AggAACQCAAAAYXf/n/20kkkgRAQAAGwGBJABAIAIRuOo2wDAAz3HHHbYAFEGEBBADbHJIIIASrYAAHgoG/kkn+B8AkgAJQCCAwAAaHf/n/km222xAKQAAwAGBhABIIBMH3DwwkQgAAA4444FAFogmoIwAAHPJIIAAAAAwAgoA38k/wAFllllJICCGGCWAH//n/2wAAABBCQAAGEmBJFoAABIoooOwgPoAddoCEkFFFAEwwAGwAHJIIJBAAAG2AjDAG/n+AAAAAAAggQCwAyQ13////4AAAABICQDAA0mBAFqABIHCSH2wkgw4FDCCHnAooAoGAAAAAwFttGAAAAGGAkkkkn/ttrADAAAAAQCgAiCtv////4AmbYBBCQZY2AGAAACABIoqSookEAAADFCSEnAAAAFigAAAMEAFA2wAAA/q6gAAAA4AAFBBEAkgEAAgAgS13////4A0cYBAIDLLAAAAAkCABAHCSHCAkBBHAJKCDbFAoAAEEgkIMkAFAGAAAAvq6DAAAYGPOFAAEAggEQCGGGSbf////4AmbYAAABZZA2wEggiQQQAowoAQCBIHBICIDAFFAA2GEEENMEAFAGAQQYtqSwwADDAHAFCCEYggcAAAwAAfb////AA0BJA9FALIAAAggkACCkEnAHACopB/JJJJDbFoDSww0AEAIwAFAkgSTYAgAwwgjbGIOFBJEYkgcAAH/BpbbAAADAAmIQHFoABHMkgEAggAAgkgggEgEAAG222PvvFFCAwwwBJJIAAAAAAQQYAgA2wgjbAAAADAAbADYAUg4FFkjAAADgE0IQA9FAABMkgAAgEAAkEEABJJJAA2GG2PvvFAoSDADBJJAAGWAAAoAAAAAwwAAAAAARP8gYYYYAWg4FIijbDDbkEmQSQAAAAEkkgAAAAgAAAAggAAggA2222PvvAAAADYbBJJAACiAAAooAgA4YDH/CACCBP8gbADYAUg4BFkjDADDgk0gQQkgAAGAAAGABJg2AAHEHAAEAF2AA1PvvDbAYDDDYBAYAGWAAAoEkA/ADY//6CCARP8gSQAAAAAAAAtrADDDwAmgSQAkkkAYAAFGSIkGAAASkkAggA+228N//AYDDDAAbBAYAbYAAAov/gA/DY446HCCAJJFQFAEkAAAMgSrDDDDSQMEkB4AAwGAAAouWIIGAAAW0kA44AFotBJASbaQYDAAGxYYYYYAAos//8HAYD446A6AQABFQFAEAgAAIESrDDAbQBIoQYEgGAAYAAFCWJBwAAASkkAIIkQDAADbabaAA2AAABbbYbYgAtt7D8AAto//6/6CAABFQFAEAgAAIEtobAAgSIIGABAAAAGAAADH/JBAAAA4A4ABAigFAASTiaahABgdoBAAAAFtAAAgAgAA/oH/CQSAQIBFSVAEkAAJMgJIBJEgRAIqSA4gAAAYAAYfnAkgHHAAH/AIIkQBQAATjTThABgYqBAAA2ttoAAFEAJA94A+2SWywBIFtFtEAgAAAA54BAggAAECABkgAAGAAADH/AgEnHAAAAAAAigoDAATcccZhhgdqCH/AwssoAAAwAIA/4AGACGAQ4w4w4w4w4AAAAJIBBkkAAACSP/4AAAYAFvAAAkggAGAAAAJABOAEAATbjjYgggaCSJJA2ttoAAAAAIAAAAGGAGAwbbgEJMMAAAAAA2wBJAgAg5//J/4AAGAAF/AAAAgmWWWWLIJGBIAoAQQbbbAEAkiSA//AwllgAAARAJAAwAA2AAGwbbAAG2wAG2wAAOIAAAAEEPJJJP8kkAEUlvAJIkggwwwwLIAGAAGAACJASQYAAAACAIAA2EkAAACIABAAAAAFAAAADAAAwAG2wnOAAEAAAAX4E5/JJJ8nkFEigAA/4AEgwxwwLIAGAA4AAAIIAQb7AwASQAAAAgAkgARIEBAAA4AAAAAHHHEn8gA2AIgAAggAQAH4gAAAJJM/8tEkSAAtqSJAGAGAAAgAAgIEAAIOCG4GAAGFwAAuAgAgACIBtJAAAAAEAA5IggEn8gGAwgIM3EACQAAEkAAbeecnkFEAQQ1wAQIIwxwwkgkkkACYAAIIQAYAwwwAQAGAIgAkgRABoAAAAAomgoxgkgEn8gADY5hg+EAAAFtAAH4YGmkkkAICCCGuCQIIAAAAoA222AAAAAJASQ4AG2AAozAGAgAAgIJItAAAAAAECA8gEAAAAAAoFQDPcggAQFFAQAADEgkngBxAQQA1wAJAAHgAFAkkkAFwQAQAGAD7AwAQQAAoAkgkgFEkoGAAoooAWSACAQAAAAAHAQYAxggGwFtDbbAAYAE//AIACAAAAAJIIk/AAoAAgAHIUkQAAABJAAAGAAGMIAAAArsJtwwAFFFFSSQSQQAkQ/9AoEAGGVQk1AAFroAbYAEngBxFtAA/HABBA4kASQ4EAAAAQQQCCAFotAFFoAtAAAAAFdEMAwAAoooAQSCCCQAmgJIbAkkG2qoG2wADrtoqSJEACAIFkoAAHABGIE4AAAAkkAAAiSgCCAIAIAAAAAAAAH//FoFFAGbbYAAAACACAQAUgSQSX4AGGqsE2ASDbvooABEATQbdkoI/HQAAACQAkkgAAAAAkEgAAAJAIGG2GAYAAYHAQQFFAAwZJAAEgkBIAA444QQQX6SSSVUkxwXUgttqSBEAQQYdtBI/AAAAAQCw/X4w84AAgggAQAIIIGGAGADADknAEAYAYwwZAH/EEEIAAABJASQSABAiBqsE2ISU8oooBBECACbdAOxICSAAAWyA6S4AigAAgAgAQAIBIGAGGADDD2nGEGD7AGAZBHPEEEIAAAAgAQAQQBkEBVUExwQUgooqSJMgFAYFFhJJSSQAAQCAkkgA84AAgAgCCAIAI2G2GwAYY03A2wXAH/6ZJH/EAEBIAAHHAQASABgkB"); +var img = atob("sIwDkm2S66DYwA2AAAAAHAHGSRxJEkAAgmGGBxDIADIdAFJIbAHF9HP00kBUC6DtzDgAiWOxwkgAGbA86CW2222kkgB4hO26/XDDwAwkEEEgYYA+VW22wEAAggwEm2AZZZTFotMIDAA9vB520AJUnXAtwAgAiGxOw2wo+bAmiSAH4AQUkAHMkO2/66TY2GwgggghB5/+SRxJAEAAlm2EhxSTLKYFFFBADA/99HP00kHoC6DuzAAACWOxwkg+uzG86CQH7bSUgAB+iSQAAADDAAtEkEkAAAA2khxIAHAAgmGLADKDLLoAAAEDDSQQCAAAAAHA4AAuwAAAAQDDDDDAwAIIAAMgAYQUAAA4iongAIAGABqEkkkAHHGGhhxIHHXa66ADYbSSCcEHzUBDbQCSSQAAAAHAttDDDDAACQDDDDA14GGGABEEAYQWBAIDiQ84AAowxIYQkkiS4g42khxIA4inNPAA1wAoTkkABCSAASQQikm2SQHAFAAAGwAAAAotoouJwAIIABEgYYAAJIIoCI84AFt2xJC4EkbYEEHPABxIAAfSqqSQ1wFCcEEAACSAAAAAggmACtv/91gGgEwH/AtoFFG2wGGAABEEDYAAJJAtAI2Gw9twwwf4Am2AH/55AR0k0RAHNPKt21oT4AAoFCShYCSAgkmwCtAAFWoWgEyCSAottoub2GAAAAMgAAAAJJAFCAwww9FAG1t49th5Ag/PER22T/AC66KopuCd8kksAEATQCAAggmFCtsnFawGgEwEkAAADbutwGAIBIAAAAAJmhIYAAwA35xAg2249t5PAA4AERySM+4kAEikFozo+22vJPAZgCCEAgm2CtgAttGvGwBJAAAGADGGGGxBBAAAJBBMkkIASQAA5+2EE0zb9tn/AH4uAR1to/An4kkkgCeA9ttsAEAAACSAAAAAAtgAooAGAABAAxwGADGGGAAIBIAAIBBMkkP/QUkAH5xAnGLD4AAEkAQuQRtSV4AEAEkkATow4AAAAASjDFCSAAAAQAgAtoAoAABIAvgGDDG2GAAAAAGwJBAJkhPJSG2CSwAACTzb4EEAgGCuQQty14HkAwkggdAG4AQAAA0zDFCAC2wDDAEntoH19At2AywGAYGGAAAAAAwAAAABMJH/QQAACGAASFYA4DjAgwCuCAtS1oAABJEEDbbbbbbYAAiTbtqVCbYQQQAAttAbrFAGAQAG2GGGGwAAAQwwAAAkhIGmLTIkCwDAC4PIAAAAgAQuQAtJNoAABAMn/JIAIMAEEAADDFC21AoDDAAAAAAbrAu2SRJAAIAAAAAAAAwGAAAkgAEkNK6iCDDAAA+PADbAG2AuCAtJVoIopSEz7JAABEgEgAADDFCwwAAAQCCAAAAbrAFAQQIAJIAKcu4AACGwAH/kn/GmjaSkSAZBYAJ4ADrAGFAuAQFKNAAtpJmXvBNBIMkEEAADDFC2wJJIAUUQAAAAFFoASQMghIAAAAAAACAAA/H4/HAAZK6EHA4IAAAAADbDYFAuACFrtowFBMydIBAABEgG22AAAEs3wALbAUUQAABJACQSAFIgg8k8/kn8AACaAAJ/4AGoQRYkE/BB/+AGAAAYAAtAwAVvdu2AJmToABIAIMAwAAwAAggn/4LAAEUAAABAIQCAVlwHA+22+++3AAwH/BxJAYEAgHHAHHAAd2w22EADAAAAAAqo7owBKSdIAA44AAAGG2AAAEkA//LAAAgAA4BAISSAVu2AA6q6666XEkwH/BIIDbDggn4FomwAMWGGGEAAYAAAAEtsHdoAjTpwAAEAAAAGAAAbbYgHI4LFdHHC2ABBAQCSlowkA7b7777fEAwH/IIAbbaAkAA1sGGASWEmwEgbEHEAAAxOtFpJzdPAAA44AAAA2wAAYAABJLbDDH4CGABJAQCklAHcA/9999v9EkCaAJIADbBoglu2AmwGSWgmGE84H//AAACQAAIhRp4oCA84ACSSwAAYYoAHI4AFdAACSJJJJJJklAwkADAAYAGAEAAbYMIAAYAAgl21AGGGSQkgAEmgA44SSSSIEBGadPAgkg/iSSJKGAADYHHCQAAHXAAAYAAAABMkoAwkADADAQ1wEADFAggAAAADL22tA2AwCAggIE84CHAWy2SLoImbpggYggkittJKAYAAAHHVqBgSSS/kIGAwwxJkoAAAADAYAQGAH/DuokgEEg2Aau2toAAAigwBBAAAB/4SSSQJBEyd84YQkgACSSJKJJJkkHHQCAnS6S/kYwwwwx5koAwYYDD2QQAGHXDFDlgEAgwxVl2tAkgEkkJAIwAABkgSSSQLomT5/gCIDADAACSSQQQ//H/CQAgWAS/kI2w2wxJkoAwYADe2CAAgg/DADFAEAg2CLM8loBgAngBAAggQAAASSSQJEydP84IADDDHXAAAAAASSAAADbAAAS/kYwwwwB5kNAAYYDe2AAEGEHAbYlAAkAwzZf/9BBgE/8GGAbYAAAGAEbAImTsEgBJADYYH6AADbAAAAAAMIY2w2w2kIwwwwwJJNAAAADDwAAgGAgAAEFYAAAAELM8lpBgAngBJAggACAAAEYZEydIgIEkHnAACSQG2zBSJllIJLQGAwA2kAAAAAAKSIAH/ADAYASHMbtbh4kAAAAwFJYAABBgGWWWWAAwAAAAEEbAmTpwhOEEEkGJwAAA2YbAAlAIMLb0w2wEkEAgnJJKSIA4A4DADACHMkkkh4HAAAASGTJJIgIgAAAAAE8888G2AgYcydE2mJABHnGkwQCA2YYAAAJxIAAAAwAEkEgg/O2LJIAoAoAAAFksAkCSSHAHAABJPYOeIEkAAAGOEkQAAAG2AEkmkhBk2xAACSBkIAAAwAEggAAIAH/khJAEkEEgJO1NAAFjDlAAGAsgAgG2WAAAAwxJOgLLIAADb4BxAgQEAkG2AEEicIAEAAAAki0AACAAAAEEgAAIAH/khJA44EAgA2FtAAFkclAGGGEAAkGy24HJ4AAJFoDbAA/AD4GOAiQEEAm2AMmjkkJ0w/4ACigwCAAUkkkkgAAAAH/khJAHAAAAGwADAAAckeAGGGAAAEGW2AIAACABJwFYAAADDAACQAZYkEmQQEylIBN01/4AAgwDASSH//8kgAAAAA4EAICXkG4E82AbAgkjjGwAwwAAHkCSSHAHEkkBJIFwYAHAYkkgeYLIAAWSQkEhABJAEgAAGAgYYEgBJJIkAAAAoAAAAAAXgHOP/AwAA//4Y2AAA44444AtoSXAEEEBJQEGYAHAAAgQYYZYAAXRUEdgAAIggjAAAmAbYEAAAAAA2bk9oF4EHNtHAm008AIAAJJIAGySQ444HAAAoQAgAAAAcgEAwAHAAAgCkgAAAASQmUpgAAIEjbbAAAAYZEgE8H/AGAwFqVoAHHBA2HOIEWAAAPkkkgQEQEAnHHAFASAb2QQAjYYYbfHAAAgAEGwAAwBEycIgAAAgjCDAESQAQAgE8EkAGGEMVqAAX9pIwG4CQiAAAPn//4AkQggg4HWVAQAf2AAAcAEkAA6SSQgAEGBJHAAmkhAAAAEgg74886AHXEg8kA/4GwBFVoAAXHBA2SSQSEAAAPhJJIQiAkgh5DADASW59QQAjSQiAACQCX/AEAxAABAxkMdGA2AGADAn/iAwQwAAAH//GGBFVSAAXFAAAooAIAAAAkkgAkkgAggnHo2woAwwAAAAcQAiAAaVaRJAkmxIABhRhTr2wwwwwII886HAAHAAAAkgGA0MVqAAQAAAAtooAAAiA//4A4AAAAAB5gwwgEGEAFAgjSACQAqTCXPAAABAABRdIUd2www2wCAHnSCCCAAAAEEEAAABqQBJu2AAYoooQAEAQJJISSQAA444AAwwJIkgAbYwcQDbAFYdAHPAAABAAhJpASw1N2AwwAAzbAAEUQwAA9gg4AAEtoABoBADDAAHHAAiAAXn/AtoAAAAAAGABAEAADAQjQgYAAEEEAAAAAHAbafIJIwAIAAtoAG2YBJMkQ/4H4EA/AEIAABJohCDbAHAwAAgQA45JA2wAAAbYAAAJCECAYYAcAYZBJA2wAwAAA64bb64IwwAwAAooCCoSQJMUQkgtvAHAbYAAGxAoACDAAA/4AACIInUkbbYAADDDbbbYAUQAAAhAAbfB5EEEGGOO64AbdAAJGSQoAAtoCSoSRIAAAwAto/4AA4AAGGJbbaAbAA44AIIIIQBIbAAYADDDtttvHEAAGA+QkSvB5AAAAxxxSQtbdoAIASQwAAoAiCtQQP//4wAtvgnAw4SAGGAAA/HAAIAAABAII4kkAAAD4AbY///77EXNkgO8gSIAAtoACAO064rbbuAIASQAAAowgAE0BPJJ4DYf8EE/bYSQGGAAHA5AAIgggQQJIBJJIAAAYAPItttv/EzjEAAUkRLADrokiQMAAbbbbbYIwAAHgDAmgAGOADAAYDbY4gg4AAQAGwC8A/HA/JEEACAEESAAttAADA/4bbbY4AIAggIBkJLtrto2wQOmAcjjjkYAAAAHkJY0wDE0AB//IAbAAEmRACSAAAC8AggA/CqqAggGmSAFAAoFoYPIAAAH/HKXIA4AkALmDgAAkIIkmcktskewwAAH8JDAAbAAAAAAAAAAAkyNgASFo/68EssATAVWGEwBxSAo2wFDdoAAAAAHH4R4FtkM/2IgwlllhjbEybbbbbeAwAggjYAbDAYAAAAAAAACCWRtwoQQt4CEEssA/AKG2GAAISwowGFILdCCQAAHHAAgAoUkA/Mm2kEAkI4ADpAAAA2CSwggjDEAYAAAAAAQAQbaSQAIIoCAo/CEAjgA/AABxAwAASAowGHHHACCAAS8ADAgAoMM/tAwwwFAAA8AFIDvrAACCAEMDYxwAwDDAAASCQtqCFtJIAYYY4CEAjgBJBHAwHGAASAo2wBABASCQAX4AYE8ooRJkAGww2EAAAAABADvrAACSABhDEIMAALJBAAQQQ2wACSILDDDD/4AAbYBJAAoAowAASAowAvHHAAAAA/gmwA/ooJAQAWG2GFAAAAAIIDvrAlKCAd9bAxwAALIYDAAA/AAAFtIIYAAAAAAAAAG2VRPv4AAASYFwFAQAAAAAAgEAwAntoRISCWwA2H44AAADADvrglLApscpAEAhgLJBAAAHHBJJMkAHPAAAHnSQAYe2VRpvvAAASOGtoAAA4HAHBIAAQAn/4JAQQQ22wHHGGGGAYDHrnlIooskoAAAIAAAAAAYH/AAAH/kh5CBEBJSCAbEkSRNv9HwAAIAEA84HHAAAwBAACCSHgR/QAQAAAH/+wAwCAAAEklLFoFlAwAAgADCAAD7HHH//8k23PAAAHnQSAbEkVRpvvA+ggW2kgkgH/AEA2IAAAAEEAJA//nAAHFtuGAwIQoAE4lLAsEojwEAIADUQADAAAAgggAAAAAAAAACSAYYAVRNv4HwggQEEE84HHHAHwBAAAAAgAoJ5fHwE49AAAAAeAoAE1tAAggggwgghgbSQSQYA1B444A/4D///7AAAQARAIASAAAAEAAPMAAAAAA/8hIAH/AkkgGA7PAwC44tAAAAIwoAE9tEgE0A/wEAAAbQQAQDG1ok02w8kAEkkAACQGkxLICQAPgAAEk58ASybbYAm0AA6S4ggg22/7A2249AAgkAYYuAEFtm0AgwwEikH/kn/AT7ASGGww288AAEAAkQCAmhZICQkkkkkG2PIACSYYYEGwgHySXAAAGA55A2KHDrYwwwIwoAHkgm0AGGGACAGJ03nQQYAQA2222/8AAEYYkgATE0kkAMkkkkkHGwEiSCbb8822k+SCS4AgAA7PHwCAAYGwAADAoBDWQEgAGGGACAEk03/CDAAAAAAAA8kDEEbYtgkKIAggBBkkkkkH+wEtVAc0f/ze/+QCS4EAEkAAEQGgDbYA23AHoAHQQCAkkmACCCwAAAFteYGwoAAAAQAbckYYJgERAAgEPHIAAEkHGAEtVA/H88DDk+QSS4EgEk/4AAAAAB1IkwAAoBYEASACCAAASQAAIANVbYwAtbAAC6DYbAAAJEgAAAAAIAIAAEkAAAEiQA//4AEwA+SSS4EAEk44IBBIJGtgA3HHoA4AbaQCCACAAAHSRBFtYYwAtbAHXXXbYoAoAAAAAAAABJwAAEkAAAAAAA//4AEGDfSSXEkgAA/4AAAILBsIwwAwAtoHbaAAAQSQQDA4TLAQAAwAbdoAC6ADAoAoAAAABSIAAAwAAEkABIACCSP/IAEGbb//4AuoDYA4IBBIIZgI2wAIAo4ABAAE8QCAQrACTDCSkAGwbiIAAQ/4GFFBJAAAB/I4A4wAAkkABB2yCAJJIAEGbb4/4AywcjkgIBAAADJAkgAQAtAABoAggiSSATA4QACCAAAAb1gAA484w1FBBAAABSIAAA222EkABIJKCQ5J4AAAYb/A4ALIcj0wIBAAAAY4AAQwgvAABAEAAESQATHSX/CSg0AAbKYBAA/4/woBBAAAAAAAwADMQSkQBBkiSA4A4AAAAbH/AAAAcjkgBIAAEADAAAHPAtoAQAgAAAgAAtAAGACCA0D4bbABrwAG/3HIIAAACAAgAgZiCCCABIAAAA//4AIImTA4AAAADYAAC4AAkgAYgEAAAACCXvAAA/n8/k8Q2wCCk0HYbbABrYAw2CSAAAwQDAQEkDMCCCQAASDAYADewAJMyYAAAAEADY//HCAEkkADEgAIIBCCrroAAHn8nn8W2wAAAAAAAABBtYggAkkg44ADFDAAgAAHDAAACADDbAYeGGOIAAAAAAkgFtA46HAkkggDcgAIIIKCAAAAAHk88n/Wx2AbkkkkkkhJBAggAn/g/8gAuoA/4AAHYYwFCADAYAYeGGOIAJaQwEEEFAA/HQEkkHEAAAAww2wQAAAAAHn88k8W22Aee22222wAA4GFdnvg/8id31akgCAHYYwFASbAAADeGmGEAAYQwAkgFtw4wwAkkgAA2222wwwAAAAAA/EAAAAW22AbEAPIH/AngAgjrn/g//4AuoASQAA/DGAFtAAAAEAG050kAIaQAEEEFA22wowEkkHA2AAAAAAGAAAAA2E/8ro2w2AYdY/44A4/4Agldkkg/5IDFDAoEkkAoFEEkkETA2DAnOgggJYQwAAAFAwwwwAAkgAAAH/4wwwGebbAA2E88dY2AGADGCPI4H4nmwABJAAA/5IQDAQoAAAFAkEkkkkjEkYA5AEkAAAH/AAGmAAAAuoAEAAH/44HwwAG222AA/E/8rowmlFtvlIA444AGBBBHAAAIAQACAAobYAqVFE0kk0TGzAAAAAFtCSAHAAE04CCAAAA/AAHAH4H2wwWebbAA+klVGgm21tFEkAAH/AAGxIBBAAkMgCAB//oeYFAgFEGkmcjEaBJgAAFtCSA4AAGmFQQQwig4k2HCA4HwwwQAgAAF+kiKGEGmlFFAQQSDbAAGBBBJAAgIiSJJJJobYqVAEEA0zcTDyBEEAADbCSH2SQEECCCAARQ/gYYVQ/4wAAWAggAA2klVGEGkk64ASAQTAAAAAAHArrAAAAAAkkoYFAhttEDebcjfyBIwgAttoA4AQAwwwAQAAigAEbCACG2xASSQkAH/3kgkG/+AgigAQASDbFtAAAA4trAAwAwAAAoYqVZusEDebcTDyBGEAABJ85JGSAQAXS2kFAHYkAAH////AAVtggHfkkkkk8ggg64EgYQTQArA64/4rtAABBAwEgoFAoZtt8DeAcjAaBAgAEBJ85JAQADDBS2kFovD4HoskkkkEAVAgEH/AAAAA/4kgDYYAAADAArYURxIAAAABhGGEAoqUAZus8YADETQTBEE2gh5855AQAAoGS2kFFHY4Hov////EAVFAAkAbAQAQBIkAYDAA//AJIrY6+2wEkgABBAwH4tAoAZtt8YADEjCCaAmm0B/8/5AAAAADAAAFAHDFItoAAAEkAVtAAggYYQQQIAggDYYA8nAIFtAABxKSkjYAAQBBAoEAAbYE8DYAcTCCDtsuAAAAASSAAAAA/3/FAHYBoooAAAERJIAAAkAbGyCGxIkxJgAA8ngJIAAbYAAQkgDAkgABIAAHIAABJAAAAACCQoCoYYY2w//AAAAA+3HAAAGuAAywAFEhAAAAAgAAG222wAAxICA4/8gAI44Aa8QQgAAkonAoHHH/P///3/H/H/H/HFSobYYwAJJJJIAA/3/AGwFtAIWQAAAhAH/9AggAAG2wAAJiCCAAAAtJIAAYYASUgAAYCADAAAAJJJIAwAAAAAAAAoCoYYY22AAAAAAA73fAzGGuHGywAAAhJA4AFkAAAA2toAJBJJAAA9AoEAEbekDYbAbYAGG2wDD/P/4AADDAYYCSAtotskkgw////4AA7zfAwGAAQgQAAAAhAA/FogAAAA2oFDbFAF22wottEEEAG0GGGAAYkgGAGDYbkgCAIYAL47AAAuwuEEAgwAbbbYAAbzbYGwAAGHAAFAAhAA4SWGIJAA2oFYAFotAwFAoAAggAAAtttoAY4kGAADDDmgQQAAoAbYwQAu1wEkggttttttpJ/AAAOIArDIAAFtAhAY4CG2BBSQ2ooYAFFFA1oHFttAAAAFEkkFAYEgH3+4AAkgGAAYAIAAwQAuuGYAFo223///5J94AA2wFoYPIHFFFmsA4SWGABRI2AADbFFFAwGgA44AAAFAm22goEEg////BJBIwzDBBAAA0QAoAAYDAAbbdtttpJ/to2OJ2rDPIHAFtiFAYDAAAASQEkkAAdFFAwGgHHHHXAtEyaa0FAkA////A4MhwwgAABbZwQAoAAYDoFAAbbbbaS94AxwB2QAJIA21FhWDAYG22wJIEEEDbFAFDwGgA4446AAm7rr+goAA/H4/HHBIGoArbDADF+AtoDYbFoAAAA/kiCHE/2/5KSk/IA2GAgAAYYAAAxawEgkA/4AAYYAYHHHHXY4ndllfgoAw/4H/AAG2AFtAYDGDF+SQQAAAAAHIPHH2iQAEn3///4AJIAuwAgJAACAG2xW4A2wAXQAAYAEEA4466YAmdklegoAGH//4AAwAwA4AYDADAGSQEEAAgAAAAAH0iCEEk3///4G54AuGAbZAAAQGGxawACAA/QAADAIYPHHHXYomTsrWguwGA//DTGSreAAkgBbZEkSQEkAAgAEAEAH2iSnkn///t2wJIAmwAYZQSSQAYwJIACAEAAAGAZAgB4464YogydawgoG2wAACqGAoGHHkgAAA/n4AEEAAgAA2wEHkgAEE//n/9tAAAAgAAbYQQAgDbAAA4CBW2GAGYYAz3HHHXYFEGTWEFGzbYAADTASrYAgHDDA3///wEEAAgAAAAAADbYYT/8k//4AAAAdoAJKQSAAAABJIAIOOWGAGDAAbY4464YoogzwksADbYAAAG2QAYHHHltA/k8n4B8AggAACQCADAAYXf/n/20kkkgRAQIIGwGBJABAIAIRu0w2wDAAz3HHHbYAFEGEBBADbfJIIOuSrYAAHgoG/kkn+B8AkgAJQCCAzbYaHf/n/km222xAKQIMwAGBhABIIBMH3GewkQgAAA4444FAFogmoIwDbfPJIO2AAAAwAgoA38k/wAFllllJICCGGAAAH//n/2wAAABBCQAEGEmBJFoAABIoooxwgPoAddoCEkFFFAEwwAGwAHJIIJBAAAG2AjDAG/n+AABBBBAggXi3/xI13/////4AAABICQDEk0mBAFqABIHCSH2wkgw4FDCCHnAooAoGAAAAAwFttGAAAAGGAkkkkn/ttrADAAAAAX6nPhStv////+mmbYBBCQZY2AGAAACABIoqSookEAAADFCSEnbbbAFigAAAMEAFA2wAAA/q6gEkAA4AAFBBEAkgEHghJiR13////880cYBAIDLLAAAAAkCABAHCSHCAkBBHAJKCDbFArAAEEgkIMkAFAGAAAAvq6DE8AYGPOFAAEAggEUiOOIJbf////+mmbYAAABZZA2wEggiQQQAowoAQCBIHBICIDAFFYA2GEEENMEAFAGAQQYtqSw0kDDAHAFCCEYggcHgJxIAfb////840BJA9FALIAAAggkACCkEnAHACopB/JJJJDbFrDSww0AEAIwAFAkgSTZJmBwwgjbGIOFBJEYkgcAAH/BpbbAAADAAmIQHFoABHMkkEAggAAgkgggEgEDbG222PvvFdCAwwwBJJIAAAAAAQQZBgB2wgjbAAAADAAbADYAUg4FFkjAAHDgE0IQA9FAABMkgAAgEAAkEEABJJJDr2GG2PvvFAoSDADBJJAAGWAAAoABJgBwwAAAAAARP8gYYYYAWg4FIijbDDbkEmQSQAAAAEkkgAAAAgAAAAggAAgjb2222PvvbDbADYbBJJAACiAAAooBhk5YDH/CACCBP8gbADYAUg4BFkjDADDgk0gQQkgAAGAAAGABJg2AAHEHAAEAF2AA1PvvDbAYDDDYBAYAGWAAAoEkA/ADY//6CCARP8gSQAAAbbYAAtrADDDwAmgSQAkkkAYDAFGSIkGAAASkkAggA+228N//AYDDDAAbBAYAbYAAAov/gA/DY446HCCAJJFQFAEkAYAMgSrDDDDSQMEkB4AAwGADAouWIIGAAAW0kA44AFotBJASbaQYDAAGxYYYYYAAos//8HAYD446A6AQABFQFAEAgbYIESrDDAbQBIoQYEgGAAYAYFCWJBwAAASkkAIIkQDAADbabaAA2AAABbbYbYgAtt778AAAA//6/6CAABFQFAEAgYYIEtobAAgSIIGABAAAAGADDDH/JBAAAA4A4ABAigFAASTiaahABgdoBAAAAFtAAAn/gAAtoH/CQSAQIBFSVAEkAbJMgJIBJEgRAIqSA4gAAAYDYYfnAAAHHAAH/AIIkQBQAATjTThABgYqBAAA2ttoAAd8YJAAoA+2SWywBIFtFtEAgYYAA54BAggAAECABkgAAGADADH/AAAHHAAAAAAAigoDAATcccZhhgdqCH/AwssoAAbzYIAFAAGACGAQ4w4w4w4w4bYAAJIBBkkAAACSP/4AAAYAdvQQAAAAAGAAAA/AH+AEAATbjjYgggaCSJJA2ttoAAYYYIAAAA+GAGAwbbgEJMMAAAAAA2wBJAgAg5//J/4AAGAAF/CAAAAGWWWWLI/GH4AoAQQbbbAEAkiSA//AwllgAAYRYJAA3AH2AAGwbbAAG2wAG2wAAOIAAAAEEPJJJP8kkAEUlvCJIAAAwwwwLIAGJJGAACJASQYAAAACAIAA2EkAAAaIYBAA/AHFAAAADAAAwAG2wnOAAEAAAAX4E5/JJJ8nkFEigAC/4AAAwxwwLIAGJB4AAAIIAQb7AwASQYAAAgAkgARIEBAAA/4AAAAHHHEn8gA2AIgAAggAQAH4gAAAJJM/8tEkSAAtqSJAGAGAAAgAIhIEAAIOCG4GAAGFzbYuAgAgACIBtJAAA44EAA5IggEn8gGAwgIM3EACQAAEkAAbe20nkFEAQQ1wAQIIwxwwkgkkkACYAAIIQAYAwwwAQYGAIgAkgRABoAAAAAomgoxgkgEn8gADY5hg+EAAAFtAAH4YGSkkkAICCCGuCQIIAAAAoA222AAAAAJASQ4AG2AAozAGAgAAgIJItAAAAAAECA8gEAAAAAAoFQDPcggAQFFAQAADEkkngBxAQQA1wAJA23gJFAkkkAFwQAQAGAD7AwAQUEAoAkgkgFEkoGDtoooAWSACAQAAAAAHAQYAxggGwFtDbbAAYAE//AIACAAAAAJIOk/JAoAAgAHIUkQAAABJAAAGEgGMIAAAArsJtwztFFFFSSQSQQAkQ/9AoEAGGVQk1AAFroAbYAEngBxFtAA/HABBG4kISQ4EAAAAQQQCCFFotAFFsEtAAAAAFdEMAwDdoooAQSCCCQAmgJIbAkkG2qoG2wADrtoqSJEACAIFkoAAHABGOE4IAAAkkAAAiSgCCAIAIAAAAAAAAH//FoFFAGbbYAAAACACAQAUgSQSX4AGGqsE2ASDbvooABEATQbdkoI/HQAAACQAkkgAAAAAkEgAAFJANGG2GAYAAYHAQQFFAAwZJAAEgkBIAA444QQQX6SSSVUkxwXUgttqSBEAQQYdtBI/AAAAAQCw/X4w84AAgggAQFIINGGAGADADknAEAYAYwwZAH/EEEIAAABJASQSABAiBqsE2ISU8oooBBECACbdAOxICSAAAWyA6S4AigAAgAgAQFIBNGAGGADDD2nGEGD7AGAZBHPEEEIAAAAgAQAQQBkEBVUExwQUgooqSJMgFAYFFhJJSSQAAQCAkkgA84AAgAgCCFIAN2G2GwAYY03A2wXAH/6ZJH/EAEBIAAHHAQASABgkB"); var imgHeight = g.imageMetrics(img).height; var imgScroll = Math.floor(Math.random()*imgHeight); diff --git a/apps/android/ChangeLog b/apps/android/ChangeLog index 2deea0c60..35fa0e386 100644 --- a/apps/android/ChangeLog +++ b/apps/android/ChangeLog @@ -2,3 +2,4 @@ 0.02: Remove messages on disconnect Fix music control 0.03: Handling of message actions (ok/clear) +0.04: Android icon now goes to settings page with 'find phone' diff --git a/apps/android/app.js b/apps/android/app.js index b210886fd..9464d1b8b 100644 --- a/apps/android/app.js +++ b/apps/android/app.js @@ -1,2 +1,3 @@ -// Config app not implemented yet -setTimeout(()=>load("messages.app.js"),10); +Bangle.loadWidgets(); +Bangle.drawWidgets(); +eval(require("Storage").read("android.settings.js"))(()=>load()); diff --git a/apps/android/settings.js b/apps/android/settings.js new file mode 100644 index 000000000..d241397a4 --- /dev/null +++ b/apps/android/settings.js @@ -0,0 +1,18 @@ +(function(back) { + function gb(j) { + Bluetooth.println(JSON.stringify(j)); + } + var mainmenu = { + "" : { "title" : "Android" }, + "< Back" : back, + "Connected" : { value : NRF.getSecurityStatus().connected?"Yes":"No" }, + "Find Phone" : () => E.showMenu({ + "" : { "title" : "Find Phone" }, + "< Back" : ()=>E.showMenu(mainmenu), + "On" : _=>gb({t:"findPhone",n:true}), + "Off" : _=>gb({t:"findPhone",n:false}), + }), + "Messages" : ()=>load("messages.app.js") + }; + E.showMenu(mainmenu); +}) diff --git a/apps/authentiwatch/ChangeLog b/apps/authentiwatch/ChangeLog index 7b83706bf..50cf3fcea 100644 --- a/apps/authentiwatch/ChangeLog +++ b/apps/authentiwatch/ChangeLog @@ -1 +1,3 @@ +0.03: Add "Calculating" placeholder, update JSON save format +0.02: Fix JSON save format 0.01: First release diff --git a/apps/authentiwatch/README.md b/apps/authentiwatch/README.md index 403770c2b..8d0e74a0c 100644 --- a/apps/authentiwatch/README.md +++ b/apps/authentiwatch/README.md @@ -1,5 +1,8 @@ # Authentiwatch - 2FA Authenticator +* GitHub: https://github.com/andrewgoz/Authentiwatch <-- Report bugs here +* Bleeding edge AppLoader: https://andrewgoz.github.io/Authentiwatch/ + ## Supports * Google Authenticator compatible 2-factor authentication diff --git a/apps/authentiwatch/app-icon.js b/apps/authentiwatch/app-icon.js index 27ced695e..c901fb843 100644 --- a/apps/authentiwatch/app-icon.js +++ b/apps/authentiwatch/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mUywkBiIADCxoTFAAcQGBwY/DDQIKDBiMDDCgGCBI4YMGAIDFDCAFEBQwYLFgIYEGQgYMApoYJGAJjFMogYMSQgCDDBwDCY4oMEDBZgHHQQYQf4oYVBgwYQBogYPPYZpFDBKMEDAbdDCxT9IDYIFFABqSEAogySQYoWNFgrFDJZoQBJggYRBwhLGDBwyFDCZGEDCYAEDGrIMbwhnGDEpLGAwxlLFQgQDJiYoFDDAZDDCpMDMpQOCNxQYNBo4KKBpwYYBYJ8NeJgYkLBQY8UYQXVGQIwN")) +require("heatshrink").decompress(atob("mEwxH+AH4AD64ADFlgAFF04INFz4LUF0QwjEBwv/FzwwgF/4v/F6nMAAWi1AFD5nOeEHPEweoFooAB5/X5wvdFwotG5nN6/WAoQuaEoguHSYPQLwIIDF8uo5ouB6AJEFzuiFwup5/WFwI6GL0esXYKMBHYy9j1WqfBSOhBIYKJF8gAKF/4v6cZAvhGDAuWSDAvXMCwuYF+AwUFzX+0XGGAgxKFrYuBAAQxEeg4tcF4oABBQnGAAgv/F6b5KXsIvIGAqNnF/69fX8ZeSF7btNR8IuOF75ePL8ouOd74NKF8IANF94wEF1QAXA")) diff --git a/apps/authentiwatch/app.js b/apps/authentiwatch/app.js index 43eff4709..85c76b5d1 100644 --- a/apps/authentiwatch/app.js +++ b/apps/authentiwatch/app.js @@ -6,8 +6,13 @@ const algos = { "SHA256":{sha:crypto.SHA256,retsz:32,blksz:64 }, "SHA1" :{sha:crypto.SHA1 ,retsz:20,blksz:64 }, }; +const calculating = "Calculating"; +const notokens = "No tokens"; +const notsupported = "Not supported"; -var tokens = require("Storage").readJSON("authentiwatch.json", true) || []; +var settings = require("Storage").readJSON("authentiwatch.json", true) || {tokens:[],misc:{}}; +if (settings.data ) tokens = settings.data ; /* v0.02 settings */ +if (settings.tokens) tokens = settings.tokens; /* v0.03+ settings */ // QR Code Text // @@ -66,9 +71,8 @@ function do_hmac(key, message, algo) { var v = new DataView(ret, ret[ret.length - 1] & 0x0F, 4); return v.getUint32(0) & 0x7FFFFFFF; } -function hotp(token) { +function hotp(d, token, dohmac) { var tick; - var d = new Date(); if (token.period > 0) { // RFC6238 - timed var seconds = Math.floor(d.getTime() / 1000); @@ -81,15 +85,17 @@ function hotp(token) { var v = new DataView(msg.buffer); v.setUint32(0, tick >> 16 >> 16); v.setUint32(4, tick & 0xFFFFFFFF); - var ret = ""; - try { - var hash = do_hmac(b32decode(token.secret), msg, token.algorithm.toUpperCase()); - ret = "" + hash % Math.pow(10, token.digits); - while (ret.length < token.digits) { - ret = "0" + ret; + var ret = calculating; + if (dohmac) { + try { + var hash = do_hmac(b32decode(token.secret), msg, token.algorithm.toUpperCase()); + ret = "" + hash % Math.pow(10, token.digits); + while (ret.length < token.digits) { + ret = "0" + ret; + } + } catch(err) { + ret = notsupported; } - } catch(err) { - ret = "Not supported"; } return {hotp:ret, next:((token.period > 0) ? ((tick + 1) * token.period * 1000) : d.getTime() + 30000)}; } @@ -109,7 +115,7 @@ function drawToken(id, r) { var y1 = r.y; var x2 = r.x + r.w - 1; var y2 = r.y + r.h - 1; - var adj; + var adj, sz; g.setClipRect(Math.max(x1, Bangle.appRect.x ), Math.max(y1, Bangle.appRect.y ), Math.min(x2, Bangle.appRect.x2), Math.min(y2, Bangle.appRect.y2)); if (id == state.curtoken) { @@ -129,7 +135,7 @@ function drawToken(id, r) { adj = (y1 + y2) / 2; } g.clearRect(x1, y1, x2, y2); - g.drawString(tokens[id].label, (x1 + x2) / 2, adj, false); + g.drawString(tokens[id].label.substr(0, 10), (x1 + x2) / 2, adj, false); if (id == state.curtoken) { if (tokens[id].period > 0) { // timed - draw progress bar @@ -143,7 +149,10 @@ function drawToken(id, r) { adj = 5; } // digits just below label - g.setFont("Vector", (state.otp.length > 8) ? 26 : 30); + sz = 30; + do { + g.setFont("Vector", sz--); + } while (g.stringWidth(state.otp) > (r.w - adj)); g.drawString(state.otp, (x1 + x2) / 2 + adj, y1 + 16, false); } // shaded lines top and bottom @@ -157,6 +166,9 @@ function draw() { var d = new Date(); if (state.curtoken != -1) { var t = tokens[state.curtoken]; + if (state.otp == calculating) { + state.otp = hotp(d, t, true).hotp; + } if (d.getTime() > state.nextTime) { if (state.hide == 0) { // auto-hide the current token @@ -167,7 +179,7 @@ function draw() { state.nextTime = 0; } else { // time to generate a new token - var r = hotp(t); + var r = hotp(d, t, state.otp != ""); state.nextTime = r.next; state.otp = r.hotp; if (t.period <= 0) { @@ -195,7 +207,13 @@ function draw() { if (state.drawtimer) { clearTimeout(state.drawtimer); } - state.drawtimer = setTimeout(draw, (tokens[state.curtoken].period > 0) ? 1000 : state.nexttime - d.getTime()); + var dly; + if (tokens[state.curtoken].period > 0) { + dly = (state.otp == calculating) ? 1 : 1000; + } else { + dly = state.nexttime - d.getTime(); + } + state.drawtimer = setTimeout(draw, dly); if (tokens[state.curtoken].period <= 0) { state.hide = 0; } @@ -210,7 +228,7 @@ function draw() { } else { g.setFont("Vector", 30); g.setFontAlign(0, 0, 0); - g.drawString("No tokens", Bangle.appRect.x + Bangle.appRect.w / 2,Bangle.appRect.y + Bangle.appRect.h / 2, false); + g.drawString(notokens, Bangle.appRect.x + Bangle.appRect.w / 2, Bangle.appRect.y + Bangle.appRect.h / 2, false); } } @@ -231,6 +249,7 @@ function onTouch(zone, e) { if (y > Bangle.appRect.h) { state.listy += (y - Bangle.appRect.h); } + state.otp = ""; } state.nextTime = 0; state.curtoken = id; @@ -257,8 +276,10 @@ function onSwipe(e) { } if (e == -1 && state.curtoken != -1 && tokens[state.curtoken].period <= 0) { tokens[state.curtoken].period--; - require("Storage").writeJSON("authentiwatch.json", tokens); + let newsettings={tokens:tokens,misc:settings.misc}; + require("Storage").writeJSON("authentiwatch.json", newsettings); state.nextTime = 0; + state.otp = ""; state.hide = 2; draw(); } diff --git a/apps/authentiwatch/app.png b/apps/authentiwatch/app.png index 208fb63b348a960529406347f23aa9363271a388..8775d3e4079e80a8af83fd03b7dc92619e23d648 100644 GIT binary patch literal 1630 zcmV-k2BGN({N<~^ig*p|{RvHL|#Kc=E zP^r93Egw*|eMJ2LRR>6DV(J$r7#lBTl{SHdXd)^=6tyrk0pCDdd68h+##X#4)O~T9 zlEkUs?!9LpY&Xu09s67xRs5wRJ$~*vet!R)b9_(kg&(=3Q(u%$r&lYbc51D+ipW}^ zAD9%882ft|4Kb=l*R7xEJ)&QT(&d%Q4iJ4GA2ims1j|#lj`nsjy0g}n& z=fL$q3b;NVk3SW(cC7-M5_HE;%?udgoIkU^)D(E zWRQsbPiwu}ah#1>lRozmj|n^^aD@k5#S-N6xLtAb%lkPWjZs8c34rFi3;Dfgvt3Uk zqW^hG40xV*R77r4vqyhD^$*5Hhyl17=5kny8>R-I>)+k9YCz`+|~LU zw#!w#71ThW`#>g>8PZeZ|5E8kL|xYm$K!`w7Tc#zmn_G?fQE4+Zx8PFiY z9`E01V6Q2Q@eG{%E4OOJ2ektWC2$oCuUQBWaP}mW=D=RI0r&C)5E(&=Ul$X(EfJx# zpuY&)WgTyu@Rc5_n0u5 z?tv%#iIM|72^MYEs_g8mlnODTbB7S;6uAO)$LITquRpL2IMgbTkpT@?`*S4+?C4_f zYJ5fCpU9ksnVItE?p_!etOGtDZ#H2vn*mL~f7`n*gu^Uc5;af)3|_{?g?ACW!Hl69 zHbF8nAcCtKU2FtY`7F))&BsRf0;5f=A?wds7LwWKOjOUT(r8vYy%<)p-NGH}kP*Uark`g~4@TGGhqNg8b96!EE_J z8xOY59N}yz%0TsV^*G%dheUrJz@_8gat)6MIZg*MFfq;+JdTE<5RR9Z5tL2L}m za?p1^st^8OG<)P)^S^vm!TzQ6ctQhCuG~Vga#I$%HwFaFU7P}J|1~Wbm#*77CF3PD@jBbljQH~+JTtP3yg%PmosE8I;7#M1ri)iJKe)^gg_Y5Xosc&pGj-dxF`zQCMZT@h8lgz#tN9^hS4Le7e< zE%1EM7hDk4z>@&~gxINe}JmN(x^HNV2#FC>_Rq)?OOy9_fSi2F4O^ch*3yb`s@?i z1G#?*97nz3G*AI-1NQs;>;U?JQQ$A|3-|SWjpa|Gb^Y>RlRNsji4&tdEh;84fQ2lbO2fOf*u2Fe=Wtn1g)r@+Vr;j zd;xYCxDG1StRjVX{^-Ii#z7srTrqbIyezQOiUL6|@W>b3A#$%`y~3?WO?Dlx&x!(| z5ii#V@ixdR;54cf`5qGBBHjvhE5z=$Q5zya<#BL_J{;g|(FA!_>_;_r2lchA;G-sh ztv*hzhBG4e294bTe}2ZUKrp8X;2}y(Eo%ORaom$)g~sjxA1vwMhareuZ9#mb4V<2Q zf+^%5bQ4AByV=0W=HsvsA zSC2ZQl!TBJ;YVFvdn$cEl_(3S)#(aqZ!z_aJ!&NmknbE!yvLlGt-)&b)}P{eSu;Vd84mq`~ { scanning = false; editToken(parseInt(document.forms['edittoken'].elements['tokenid'].value)); t['label'] = (t['issuer'] == '') ? t['account'] : t['issuer'] + ' (' + t['account'] + ')'; + t['label'] = t['label'].substr(0, 10); var fe = document.forms['edittoken'].elements; if (res.startsWith(otpAuthUrl + 'hotp/')) { t['period'] = '30'; @@ -319,21 +321,21 @@ function doScan() { */ function loadTokens() { Util.showModal('Loading...'); - Puck.eval(`require('Storage').read(${JSON.stringify('authentiwatch.json')})`,data=>{ + Puck.eval(`require('Storage').readJSON(${JSON.stringify('authentiwatch.json')})`,data=>{ Util.hideModal(); - try { - tokens = JSON.parse(data); - updateTokens(); - } catch { - tokens = []; - } + if (data.data ) settings.tokens = data.data ; /* v0.02 settings */ + if (data.tokens) settings.tokens = data.tokens; /* v0.03+ settings */ + if (data.misc ) settings.misc = data.misc ; /* v0.03+ settings */ + tokens = settings.tokens; + updateTokens(); }); } /* Save settings as a JSON file on the watch. */ function saveTokens() { Util.showModal('Saving...'); - Puck.write(`\x10require('Storage').write(${JSON.stringify('authentiwatch.json')},${JSON.stringify(tokens)})\n`,()=>{ + let newsettings={tokens:tokens,misc:settings.misc}; + Puck.write(`\x10require('Storage').writeJSON(${JSON.stringify('authentiwatch.json')},${JSON.stringify(newsettings)})\n`,()=>{ Util.hideModal(); }); } diff --git a/apps/boot/ChangeLog b/apps/boot/ChangeLog index 98f80efd9..ffc2be495 100644 --- a/apps/boot/ChangeLog +++ b/apps/boot/ChangeLog @@ -40,3 +40,4 @@ 0.35: Add Bangle.appRect polyfill Don't set beep vibration up on Bangle.js 2 (built in) 0.36: Add comments to .boot0 to make debugging a bit easier +0.37: Remove Quiet Mode settings: now handled by Quiet Mode Schedule app diff --git a/apps/boot/bootupdate.js b/apps/boot/bootupdate.js index d642426c2..daf311fe6 100644 --- a/apps/boot/bootupdate.js +++ b/apps/boot/bootupdate.js @@ -78,13 +78,7 @@ boot += `E.on('errorFlag', function(errorFlags) { if (global.save) boot += `global.save = function() { throw new Error("You can't use save() on Bangle.js without overwriting the bootloader!"); }\n`; // Apply any settings-specific stuff if (s.options) boot+=`Bangle.setOptions(${E.toJS(s.options)});\n`; -if (s.quiet && s.qmOptions) boot+=`Bangle.setOptions(${E.toJS(s.qmOptions)});\n`; -if (s.quiet && s.qmBrightness) { - if (s.qmBrightness!=1) boot+=`Bangle.setLCDBrightness(${s.qmBrightness});\n`; -} else { - if (s.brightness && s.brightness!=1) boot+=`Bangle.setLCDBrightness(${s.brightness});\n`; -} -if (s.quiet && s.qmTimeout) boot+=`Bangle.setLCDTimeout(${s.qmTimeout});\n`; +if (s.brightness && s.brightness!=1) boot+=`Bangle.setLCDBrightness(${s.brightness});\n`; if (s.passkey!==undefined && s.passkey.length==6) boot+=`NRF.setSecurity({passkey:${s.passkey}, mitm:1, display:1});\n`; if (s.whitelist) boot+=`NRF.on('connect', function(addr) { if (!(require('Storage').readJSON('setting.json',1)||{}).whitelist.includes(addr)) NRF.disconnect(); });\n`; // Pre-2v10 firmwares without a theme/setUI diff --git a/apps/cscsensor/ChangeLog b/apps/cscsensor/ChangeLog index 9af9f9926..8f23fa9f3 100644 --- a/apps/cscsensor/ChangeLog +++ b/apps/cscsensor/ChangeLog @@ -3,3 +3,5 @@ 0.03: Save total distance traveled 0.04: Add sensor battery level indicator 0.05: Add cadence sensor support +0.06: Now read wheel rev as well as cadence sensor + Improve connection code diff --git a/apps/cscsensor/README.md b/apps/cscsensor/README.md index e19ebe60e..9740fd9cf 100644 --- a/apps/cscsensor/README.md +++ b/apps/cscsensor/README.md @@ -9,10 +9,16 @@ Currently the app displays the following data: - maximum speed - trip distance traveled - total distance traveled -- an icon with the battery status of the remote sensor +- an icon with the battery status of the remote sensor Button 1 resets all measurements except total distance traveled. The latter gets preserved by being written to storage every 0.1 miles and upon exiting the app. If the watch app has not received an update from the sensor for at least 10 seconds, pushing button 3 will attempt to reconnect to the sensor. Button 2 switches between the display for cycling speed and cadence. Values displayed are imperial or metric (depending on locale), cadence is in RPM, the wheel circumference can be adjusted in the global settings app. + +# TODO + +* Use Layout Library to provide proper Bangle.js 2 support +* Turn CSC sensor support into a library +* Support for `Recorder` app, to allow CSC readings to be logged alongside GPS diff --git a/apps/cscsensor/cscsensor.app.js b/apps/cscsensor/cscsensor.app.js index 3d4120269..e2af0db16 100644 --- a/apps/cscsensor/cscsensor.app.js +++ b/apps/cscsensor/cscsensor.app.js @@ -5,6 +5,8 @@ var characteristic; const SETTINGS_FILE = 'cscsensor.json'; const storage = require('Storage'); +const W = g.getWidth(); +const H = g.getHeight(); class CSCSensor { constructor() { @@ -75,7 +77,7 @@ class CSCSensor { var dist = this.distFactor*(this.lastRevs-this.lastRevsStart)*this.wheelCirc/63360.0; var ddist = Math.round(100*dist)/100; var tdist = Math.round(this.distFactor*this.totaldist*10)/10; - var dspeed = Math.round(10*this.distFactor*this.speed)/10; + var dspeed = Math.round(10*this.distFactor*this.speed)/10; var dmins = Math.floor(this.movingTime/60).toString(); if (dmins.length<2) dmins = "0"+dmins; var dsecs = (Math.floor(this.movingTime) % 60).toString(); @@ -152,7 +154,7 @@ class CSCSensor { var qChanged = false; if (event.target.uuid == "0x2a5b") { if (event.target.value.getUint8(0, true) & 0x2) { - // crank revolution + // crank revolution - if enabled const crankRevs = event.target.value.getUint16(1, true); const crankTime = event.target.value.getUint16(3, true); if (crankTime > this.lastCrankTime) { @@ -161,44 +163,43 @@ class CSCSensor { } this.lastCrankRevs = crankRevs; this.lastCrankTime = crankTime; - } else { - // wheel revolution - var wheelRevs = event.target.value.getUint32(1, true); - var dRevs = (this.lastRevs>0 ? wheelRevs-this.lastRevs : 0); - if (dRevs>0) { - qChanged = true; - this.totaldist += dRevs*this.wheelCirc/63360.0; - if ((this.totaldist-this.settings.totaldist)>0.1) { - this.settings.totaldist = this.totaldist; - storage.writeJSON(SETTINGS_FILE, this.settings); - } - } - this.lastRevs = wheelRevs; - if (this.lastRevsStart<0) this.lastRevsStart = wheelRevs; - var wheelTime = event.target.value.getUint16(5, true); - var dT = (wheelTime-this.lastTime)/1024; - var dBT = (Date.now()-this.lastBangleTime)/1000; - this.lastBangleTime = Date.now(); - if (dT<0) dT+=64; - if (Math.abs(dT-dBT)>3) dT = dBT; - this.lastTime = wheelTime; - this.speed = this.lastSpeed; - if (dRevs>0 && dT>0) { - this.speed = (dRevs*this.wheelCirc/63360.0)*3600/dT; - this.speedFailed = 0; - this.movingTime += dT; - } - else { - this.speedFailed++; - qChanged = false; - if (this.speedFailed>3) { - this.speed = 0; - qChanged = (this.lastSpeed>0); - } - } - this.lastSpeed = this.speed; - if (this.speed>this.maxSpeed && (this.movingTime>3 || this.speed<20) && this.speed<50) this.maxSpeed = this.speed; } + // wheel revolution + var wheelRevs = event.target.value.getUint32(1, true); + var dRevs = (this.lastRevs>0 ? wheelRevs-this.lastRevs : 0); + if (dRevs>0) { + qChanged = true; + this.totaldist += dRevs*this.wheelCirc/63360.0; + if ((this.totaldist-this.settings.totaldist)>0.1) { + this.settings.totaldist = this.totaldist; + storage.writeJSON(SETTINGS_FILE, this.settings); + } + } + this.lastRevs = wheelRevs; + if (this.lastRevsStart<0) this.lastRevsStart = wheelRevs; + var wheelTime = event.target.value.getUint16(5, true); + var dT = (wheelTime-this.lastTime)/1024; + var dBT = (Date.now()-this.lastBangleTime)/1000; + this.lastBangleTime = Date.now(); + if (dT<0) dT+=64; + if (Math.abs(dT-dBT)>3) dT = dBT; + this.lastTime = wheelTime; + this.speed = this.lastSpeed; + if (dRevs>0 && dT>0) { + this.speed = (dRevs*this.wheelCirc/63360.0)*3600/dT; + this.speedFailed = 0; + this.movingTime += dT; + } + else { + this.speedFailed++; + qChanged = false; + if (this.speedFailed>3) { + this.speed = 0; + qChanged = (this.lastSpeed>0); + } + } + this.lastSpeed = this.speed; + if (this.speed>this.maxSpeed && (this.movingTime>3 || this.speed<20) && this.speed<50) this.maxSpeed = this.speed; } if (qChanged && this.qUpdateScreen) this.updateScreen(); } @@ -215,44 +216,47 @@ function getSensorBatteryLevel(gatt) { }); } -function parseDevice(d) { - device = d; - g.clearRect(0, 60, 239, 239).setFontAlign(0, 0, 0).setColor(0, 1, 0).drawString("Found device", 120, 120).flip(); - device.gatt.connect().then(function(ga) { - gatt = ga; - g.clearRect(0, 60, 239, 239).setFontAlign(0, 0, 0).setColor(0, 1, 0).drawString("Connected", 120, 120).flip(); - return gatt.getPrimaryService("1816"); -}).then(function(s) { - service = s; - return service.getCharacteristic("2a5b"); -}).then(function(c) { - characteristic = c; - characteristic.on('characteristicvaluechanged', (event)=>mySensor.updateSensor(event)); - return characteristic.startNotifications(); -}).then(function() { - console.log("Done!"); - g.clearRect(0, 60, 239, 239).setColor(1, 1, 1).flip(); - getSensorBatteryLevel(gatt); - mySensor.updateScreen(); -}).catch(function(e) { - g.clearRect(0, 60, 239, 239).setColor(1, 0, 0).setFontAlign(0, 0, 0).drawString("ERROR"+e, 120, 120).flip(); - console.log(e); -})} - function connection_setup() { - NRF.setScan(); mySensor.screenInit = true; - NRF.setScan(parseDevice, { filters: [{services:["1816"]}], timeout: 2000}); - g.clearRect(0, 48, 239, 239).setFontVector(18).setFontAlign(0, 0, 0).setColor(0, 1, 0); - g.drawString("Scanning for CSC sensor...", 120, 120); + E.showMessage("Scanning for CSC sensor..."); + NRF.requestDevice({ filters: [{services:["1816"]}]}).then(function(d) { + device = d; + E.showMessage("Found device"); + return device.gatt.connect(); + }).then(function(ga) { + gatt = ga; + E.showMessage("Connected"); + return gatt.getPrimaryService("1816"); + }).then(function(s) { + service = s; + return service.getCharacteristic("2a5b"); + }).then(function(c) { + characteristic = c; + characteristic.on('characteristicvaluechanged', (event)=>mySensor.updateSensor(event)); + return characteristic.startNotifications(); + }).then(function() { + console.log("Done!"); + g.reset().clearRect(Bangle.appRect).flip(); + getSensorBatteryLevel(gatt); + mySensor.updateScreen(); + }).catch(function(e) { + E.showMessage(e.toString(), "ERROR"); + console.log(e); + }); } connection_setup(); -setWatch(function() { mySensor.reset(); g.clearRect(0, 48, 239, 239); mySensor.updateScreen(); }, BTN1, {repeat:true, debounce:20}); -E.on('kill',()=>{ if (gatt!=undefined) gatt.disconnect(); mySensor.settings.totaldist = mySensor.totaldist; storage.writeJSON(SETTINGS_FILE, mySensor.settings); }); -setWatch(function() { if (Date.now()-mySensor.lastBangleTime>10000) connection_setup(); }, BTN3, {repeat:true, debounce:20}); -setWatch(function() { mySensor.toggleDisplayCadence(); g.clearRect(0, 48, 239, 239); mySensor.updateScreen(); }, BTN2, {repeat:true, debounce:20}); -NRF.on('disconnect', connection_setup); +E.on('kill',()=>{ + if (gatt!=undefined) gatt.disconnect(); + mySensor.settings.totaldist = mySensor.totaldist; + storage.writeJSON(SETTINGS_FILE, mySensor.settings); +}); +NRF.on('disconnect', connection_setup); // restart if disconnected +Bangle.setUI("updown", d=>{ + if (d<0) { mySensor.reset(); g.clearRect(0, 48, W, H); mySensor.updateScreen(); } + if (d==0) { if (Date.now()-mySensor.lastBangleTime>10000) connection_setup(); } + if (d>0) { mySensor.toggleDisplayCadence(); g.clearRect(0, 48, W, H); mySensor.updateScreen(); } +}); Bangle.loadWidgets(); Bangle.drawWidgets(); diff --git a/apps/cubescramble/ChangeLog b/apps/cubescramble/ChangeLog index 6de5b7211..46852864a 100644 --- a/apps/cubescramble/ChangeLog +++ b/apps/cubescramble/ChangeLog @@ -1,3 +1,4 @@ 0.01: Initial Release 0.02: Replace icon with one found on https://icons8.com 0.03: Re-render icon fixing display in settings +0.04: Improved UX and display solve time diff --git a/apps/cubescramble/README.md b/apps/cubescramble/README.md index 779e32489..1c1603372 100644 --- a/apps/cubescramble/README.md +++ b/apps/cubescramble/README.md @@ -1,12 +1,11 @@ # Cube Scramble -A random scramble generator for the 3x3 Rubik's cube +A random scramble generator for the 3x3 Rubik's cube with a basic timer. ## Future features I'm keen to complete this project with -* Add a timer * Add the ability for times to be stored and exported ## Requests diff --git a/apps/cubescramble/bangle1-cube-scramble-screenshot.png b/apps/cubescramble/bangle1-cube-scramble-screenshot.png index d75a60e8163639f3c51545a239a6ccfa302e39fa..5a35238e3ffdac883852b6acef915fb2898b7381 100644 GIT binary patch literal 3848 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 diff --git a/apps/cubescramble/bangle2-cube-scramble-screenshot.png b/apps/cubescramble/bangle2-cube-scramble-screenshot.png index b54be04b821bd2fa614715e5b50efd9805004603..ae37b4affbef888d5aeeb69c7272c3b5b0202ee5 100644 GIT binary patch literal 2923 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 literal 2198 zcmeHJ?N`zV8~*td0xT^pD=j1EOlO^^HrG~}pk4ee7+7zb5#I6HWa?98wX3}41z{9p!#Wyag^O|b#<`tDnbJWZxdt3U)HmFn zxQCBv6bVSFcv`JG%7bmg}HJyp(2HsKonY~FyOeK?C~WHv`!)i{;&wa*vPcLzxRW#0BYBef`WtwAh^=LjA~O z%31_W`rWpuCUcmO)@0z!P1A8M-vne}mHY9^k}ck>-;XO3=dzL7^dDHSl9YtAO41U& zohT#NP6f?QOD8aJ=)o;90z*sx6M`dCKol+TXN3mx7x%8)Aj5V+ij8)Xw{oQ@|CeED<6^9&TOS!g%TMyiu+b`HA9Tk z#`ilP%?fOlOv70UTG4&$ognh%k-R$p<(z}6LCZ`^g)nKYP(L~$KMBRxXHxH{7Td>P zUbx|tEc?RVcJ7wpbi^Kzl(adxu^e-Rekbo`lKC`~y{2mL*{TNR?5V8m**5h($33>W6#lbJNVcspgw2@xVEA)09bbxsmP8MY=G6 zHn$&}_TcR(TwsBuoNrf&nr~03=sAwpX4H}NO(``PSq<ql5e(eW01}?1zQ^DJaq9x3+jgQ1FEP@kmH@!g3%;=!oB=@^sv@kC{UDY^WIVC1` zZ{UW8m`^_pCCbohPA!WD!@D@G5DzgGb znb6*I=D759i({Li$r^^TXOuH58$1NRiNTo3C)(BTi`~W{gE!B$eib_^MsBW2Fh5^O zt5HhO&FHhPu&nT>IVp%Ar}P(b2W{Q~#+RZ&Mn8O zQOl5S;Oru`6O|F)v*<7i_sb29PgPm-+L1AHV#}%ng(qL z#iNUlh7c$GxuY}wL*i+vc=;zNC1CtB&38SUk&OIbh@BMAS9%b`7?UB{Yu8_6AP!G* zw_{lMD#k^v_J<(!Vg J;i2^N{{tDZ7$pDz diff --git a/apps/cubescramble/cube-scramble.js b/apps/cubescramble/cube-scramble.js index c0b1d11c3..73c4e95ef 100644 --- a/apps/cubescramble/cube-scramble.js +++ b/apps/cubescramble/cube-scramble.js @@ -1,4 +1,3 @@ - // Scramble code from: https://raw.githubusercontent.com/bjcarlson42/blog-post-sample-code/master/Rubik's%20Cube%20JavaScript%20Scrambler/part_two.js const makeScramble = () => { const options = ["F", "F2", "F'", "R", "R2", "R'", "U", "U2", "U'", "B", "B2", "B'", "L", "L2", "L'", "D", "D2", "D'"]; @@ -59,16 +58,36 @@ const getRandomInt = max => Math.floor(Math.random() * Math.floor(max)); // retu const getRandomIntBetween = (min, max) => Math.floor(Math.random() * (max - min) + min); const presentScramble = () => { - g.clear(); - E.showMessage(makeScramble().join(" ")); + showPrompt(makeScramble().join(" "), { + buttons: {"solve": true, "reset": false} + }).then((v) => { + if (v) { + const start = new Date(); + showPrompt(" ", { + buttons: {"stop": true} + }).then(() => { + const time = parseFloat(((new Date()).getTime() - start.getTime()) / 1000); + showPrompt(String(time.toFixed(3)), { + buttons: {"next": true} + }).then(() => { + presentScramble(); + }); + }); + } else { + presentScramble(); + } + }); +}; + +const showPrompt = (text, options = {}) => { + options.title = options.title || "cube scramble"; + return E.showPrompt(text, options); }; const init = () => { + Bangle.setLCDTimeout(0); + Bangle.setLCDPower(1); presentScramble(); - - setWatch(() => { - presentScramble(); - }, BTN1, {repeat:true}); }; init(); diff --git a/apps/fd6fdetect/ChangeLog b/apps/fd6fdetect/ChangeLog index 3c82c3ca7..b85df5ace 100644 --- a/apps/fd6fdetect/ChangeLog +++ b/apps/fd6fdetect/ChangeLog @@ -1 +1,2 @@ 0.1: Added source code +0.2: Added a README file diff --git a/apps/fd6fdetect/README.md b/apps/fd6fdetect/README.md new file mode 100644 index 000000000..1a7cce8bd --- /dev/null +++ b/apps/fd6fdetect/README.md @@ -0,0 +1,3 @@ +# FD6FDetect + +An app dedicated to letting you know how many Exposure Notification beacons are near you. diff --git a/apps/gbdebug/ChangeLog b/apps/gbdebug/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/gbdebug/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/gbdebug/README.md b/apps/gbdebug/README.md new file mode 100644 index 000000000..47b1525b8 --- /dev/null +++ b/apps/gbdebug/README.md @@ -0,0 +1,26 @@ +# Gadgetbridge Debug + +This is useful if your Bangle isn't responding to the Gadgetbridge +Android app properly. + +This app disables all existing Gadgetbridge handlers and then displays the +messages that come from Gadgetbridge on the screen +of the watch. It also saves the last 10 messages in a variable +called `history`. + +More info on Gadgetbridge at http://www.espruino.com/Gadgetbridge + +## Usage + +* Run the `GB Debug` app on your Bangle +* Connect your Bangle to Gadgetbridge +* Do whatever was causing you problems (eg receiving a call) +* The Gadgetbridge message should now be displayed on-screen + +If you want to get the *actual* data rather than copying it from the screen. + +* Ensure the `GB Debug` app is kept running after the above steps +* Disconnect Gadgetbridge from the Bangle +* Connect the Web IDE on your PC +* Type `show()` on the left-hand side of the IDE and the +last 10 messages from Gadgetbridge will be shown. diff --git a/apps/gbdebug/app-icon.js b/apps/gbdebug/app-icon.js new file mode 100644 index 000000000..a701ef3a9 --- /dev/null +++ b/apps/gbdebug/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4cBzsE/4AClMywH680rlOW9N9kmSpICnyBBBgQRMkBUDgIRKoBoGGRYAFHBGARpARHT5MJKxQAFLgzELCIlIBQkSCIsEPRKBHCIYbGoIRFiQRJhJgFCISeEBwMQOQykCCIqlBpMEBIgRHOQYRIYQbPDhAbBNwgRJVwOCTIgRFMAJKDgQRGOQprBCIMSGogHBJwwbBkC2FCJNbUgMNwHYBYPJCIhODju0yFNCIUGCJGCoE2NwO24EAmw1FHgWCpMGgQOBBIMwCJGSpMmyAjDCI6eBCIWAhu2I4IRCUIYREk+Ah3brEB2CzFAAIRCl3b23btsNCJckjoRC1h2CyAREtoNC9oDC2isCCIgHBjdt5MtCJj2CowjD2uyCIOSCI83lu123tAQIRI4EB28/++39/0mwRCoARCgbfByU51/3rev+mWCIQwCPok0EYIRB/gRDpJ+EcYQRJkARQdgq/Bl5HE7IRDZAltwAREyXbCIbIFgEfCIXsBwQCDQAYRNLgvfCIXtCI44Dm3JCIUlYoYCGkrjBk9bxMkyy9CChICFA=")) diff --git a/apps/gbdebug/app.js b/apps/gbdebug/app.js new file mode 100644 index 000000000..ee5e46999 --- /dev/null +++ b/apps/gbdebug/app.js @@ -0,0 +1,21 @@ +E.showMessage("Waiting for message"); +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +var history = []; + +GB = function(e) { + if (history.length > 10) + history = history.slice(history.length-10); + history.push(e); + + var s = JSON.stringify(e,null,2); + + g.reset().clear(Bangle.appRect); + g.setFont("6x8").setFontAlign(-1,0); + g.drawString(s, 10, g.getHeight()/2); +}; + +function show() { + print(JSON.stringify(history,null,2)); +} diff --git a/apps/gbdebug/app.png b/apps/gbdebug/app.png new file mode 100644 index 0000000000000000000000000000000000000000..f70bce7ad2910e6f0746dca829f7a5311f0d0c8d GIT binary patch literal 2914 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 v?"Yes":"No", onchange: v => updateSetting('hrm', v) - }, - "< Back" : back, + } }; var findPhone = { diff --git a/apps/gpsrec/ChangeLog b/apps/gpsrec/ChangeLog index ca61643a3..cb22dd13f 100644 --- a/apps/gpsrec/ChangeLog +++ b/apps/gpsrec/ChangeLog @@ -27,3 +27,4 @@ 0.23: Fix issue where tracks wouldn't record when running from OpenStMap if a period hadn't been set up first 0.24: Better support for Bangle.js 2, avoid widget area for Graphs, smooth graphs more 0.25: Fix issue where if Bangle.js 2 got a GPS fix but no reported time, errors could be caused by the widget (fix #935) +0.26: Multiple bugfixes diff --git a/apps/gpsrec/app.js b/apps/gpsrec/app.js index 164124257..df3353930 100644 --- a/apps/gpsrec/app.js +++ b/apps/gpsrec/app.js @@ -249,10 +249,10 @@ function plotTrack(info) { g.fillCircle(ox,oy,5); if (info.qOSTM) g.setColor(0, 0, 0); else g.setColor(1,1,1); - g.drawString(require("locale").distance(dist),120,220); + g.drawString(require("locale").distance(dist),g.getWidth() / 2, g.getHeight() - 20); g.setFont("6x8",2); g.setFontAlign(0,0,3); - g.drawString("Back",230,200); + g.drawString("Back",g.getWidth() - 10, g.getHeight() - 40); setWatch(function() { viewTrack(info.fn, info); }, global.BTN3||BTN1); @@ -330,13 +330,13 @@ function plotGraph(info, style) { height: g.getHeight()-(24+8), axes : true, gridy : grid, - gridx : 50, + gridx : infn.length / 3, title: title, xlabel : x=>Math.round(x*dur/(60*infn.length))+" min" // minutes }); g.setFont("6x8",2); g.setFontAlign(0,0,3); - g.drawString("Back",230,200); + g.drawString("Back",g.getWidth() - 10, g.getHeight() - 40); setWatch(function() { viewTrack(info.fn, info); }, global.BTN3||BTN1); diff --git a/apps/intervalTimer/ChangeLog b/apps/intervalTimer/ChangeLog new file mode 100644 index 000000000..d62860265 --- /dev/null +++ b/apps/intervalTimer/ChangeLog @@ -0,0 +1 @@ +0.01: First Release \ No newline at end of file diff --git a/apps/intervalTimer/README.md b/apps/intervalTimer/README.md new file mode 100644 index 000000000..d57c16e9c --- /dev/null +++ b/apps/intervalTimer/README.md @@ -0,0 +1,34 @@ +# Interval Timer + +An interval timer for workouts and whatever else! + +## Usage + +First set the active time (i.e. the number of seconds to perform exercises). + +![Set Active Time](images/set-active.png) + +Next set the rest time (i.e. number of seconds to rest between exercises). + +![Set Rest Time](images/set-rest.png) + +Finally choose the number of sets to perform. + +![Set Number Sets](images/set-sets.png) + +Active time will be shown in red, rest time in green. The watch will buzz whenever active or rest time gets to 0. + +![Timer (active)](images/timer1.png) +![Timer (rest)](images/timer2.png) + +You can press the physical button during timer countdown to pause the timer. + +![Paused](images/pause.png) + +View after all sets are completed. Press menu to change settings or restart to start timer again with the same settings. + +![Completed view](images/done.png) + +## Creator + +James Gough diff --git a/apps/intervalTimer/app-icon.js b/apps/intervalTimer/app-icon.js new file mode 100644 index 000000000..1ca594050 --- /dev/null +++ b/apps/intervalTimer/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwg96hWq1WgDCgXWxGZzOICqQABC4QABCyIXFDBsICIeJyfznAFBwAWPC4Of///mYYMCwgXBl4XB/4xCFxwABn4XCDAQwICw2ICwf/+YwJxGDHoQXHGARGIn/4C5QwBJAwQDC5QLCIw6GEC5BIGIwQLBJAgXGJAwXEJAgXPHgoXIEYIXFLwRIFC484C4h2DJAoIFPA+Ix4MGAAJoDHYgXKf4QXUJAYJGC5p5CF6hIBO44XNABIXGEw4AIU4rXFC5jvFc5AAHxAXGQwwAHQAIXcPCB2FC4RgOB4IXFJBxGHJB5GHJAYwKFwIXIJAIwKFwJGHGAYYICwIuIGAeImYWFmYJBFxIYEwZjC+YtCCxZJDAA4WMDBIWODIwVRAH4AXA==")) \ No newline at end of file diff --git a/apps/intervalTimer/app.js b/apps/intervalTimer/app.js new file mode 100644 index 000000000..fd57dbe2b --- /dev/null +++ b/apps/intervalTimer/app.js @@ -0,0 +1,306 @@ +/** + +Interval Timer + +An app for the Bangle.js watch + +*/ + +var Layout = require("Layout"); + +// Globals +var timerMode; // 'active' || 'rest' +var numSets = 1; +var activeTime = 20; +var restTime = 10; +var counter; +var setsRemaining; +var counterInterval; +var outOfTimeTimeout; +var timerIsPaused; +var timerLayout; + +/** Called to initialize the timer layout */ +function initTimerLayout() { + timerLayout = new Layout( { + type:"v", c: [ + {type:"txt", font:"40%", pad: 10, label:"00:00", id:"time" }, + {type:"txt", font:"6x8:2", label:"0", id:"set" } + ] + }, {btns: [ + {label: "Stop", cb: l => { + if (timerIsPaused){ + timerIsPaused = false; + resumeTimer(); + } + else{ + timerIsPaused = true; + pauseTimer(); + } + } + } + ] + }); +} + +/** Pauses the timer by clearing the counterInterval */ +function pauseTimer() { + if (counterInterval){ + clearTimeout(counterInterval); + counterInterval = undefined; + } + // update layout to display "Paused" + timerLayout.clear(timerLayout.time); + timerLayout.time.label = "||"; + timerLayout.clear(timerLayout.set); + timerLayout.set.label = "Paused"; + timerLayout.render(); +} + +/** Reumes the timer by setting the counterInterval again */ +function resumeTimer() { + if (!counterInterval){ + counterInterval = setInterval(countDown, 1000); + } + // display the timer values again. + timerLayout.clear(timerLayout.time); + timerLayout.time.label = counter; + timerLayout.clear(timerLayout.set); + timerLayout.set.label = `Sets: ${setsRemaining}`; + timerLayout.render(); +} + +/** Display 'Done' view, called when all sets are completed */ +function outOfTime() { + var stopLayout = new Layout( { + type:"v", c: [ + {type:"txt", font:"30%", label:"Done!", id:"time" }, + ] + }, {btns: [ + // menu button allows user to modify times and sets + {label:"Menu", cb: l=> { + if (outOfTimeTimeout){ + clearTimeout(outOfTimeTimeout); + outOfTimeTimeout = undefined; + } + //stopLayout.remove(); + setup(); + } + }, + // restart button runs timer again with the same settings + {label:"Restart", cb: l=> { + if (outOfTimeTimeout){ + clearTimeout(outOfTimeTimeout); + outOfTimeTimeout = undefined; + } + //stopLayout.remove(); + timerMode = 'active'; + startTimer(); + } + } + ]}); + + if (counterInterval) return; + setsRemaining = numSets; + g.clear(); + stopLayout.render(); + Bangle.buzz(500); + Bangle.beep(200, 4000) + .then(() => new Promise(resolve => setTimeout(resolve,200))) + .then(() => Bangle.beep(200, 3000)); +} + +/** Function called by the counterInterval at each second. + Updates the timer display values. +*/ +function countDown() { + // Out of time + if (counter<=0) { + if(timerMode === 'active'){ + timerMode = 'rest'; + startTimer(); + return; + } + else{ + --setsRemaining; + if (setsRemaining === 0){ + clearInterval(counterInterval); + counterInterval = undefined; + //setWatch(startTimer, (process.env.HWVERSION==2) ? BTN1 : BTN2); + outOfTime(); + return; + } + timerMode = 'active'; + startTimer(); + return; + } + } + + timerLayout.clear(timerLayout.time); + timerLayout.time.label = counter; + timerLayout.render(); + counter--; +} + +/** Start the interval timer. */ +function startTimer() { + timerIsPaused = false; + g.clear(); + if(timerMode === 'active'){ + counter = activeTime; + timerLayout.time.col = '#f00'; + } + else{ + counter = restTime; + timerLayout.time.col = '#0f0'; + } + + timerLayout.clear(timerLayout.set); + timerLayout.set.label = `Sets: ${setsRemaining}`; + timerLayout.render(); + Bangle.buzz(); + countDown(); + if (!counterInterval){ + counterInterval = setInterval(countDown, 1000); + } +} + +/** Menu step in which user sets the number of sets to be performed. */ +function setNumSets(){ + g.clear(); + var menuLayout = new Layout( { + type:"v", c: [ + {type:"txt", font:"6x8:2", label:"Number Sets", id:"title" }, + {type:"txt", font:"30%", pad: 20, label: numSets, id:"value" }, + {type:"btn", font:"6x8:2", label:"Back", cb: l => { + setRestTime(); + } + } + ] + }, {btns: [ + {label:"+", cb: l=> { + incrementNumSets(); + }}, + {label:"Go", cb: l=> { + setsRemaining = numSets; + initTimerLayout(); + startTimer(); + }}, + {label:"-", cb: l=>{ + decrementNumSets(); + }} + ]}); + menuLayout.render(); + + const incrementNumSets = () => { + ++numSets; + menuLayout.clear(menuLayout.numSets); + menuLayout.value.label = numSets; + menuLayout.render(); + }; + + const decrementNumSets = () => { + if(numSets === 1){ + return; + } + --numSets; + menuLayout.clear(menuLayout.numSets); + menuLayout.value.label = numSets; + menuLayout.render(); + }; +} + +/** Menu step in which user sets the number of seconds of rest time for each set. */ +function setRestTime(){ + g.clear(); + var menuLayout = new Layout( { + type:"v", c: [ + {type:"txt", font:"6x8:2", label:"Rest Time", id:"title" }, + {type:"txt", font:"30%", pad: 20, label: restTime, id:"value" }, + {type:"btn", font:"6x8:2", label:"Back", cb: l => { + setActiveTime(); + } + } + ] + }, {btns: [ + {label:"+", cb: l=> { + incrementRestTime(); + }}, + {label:"OK", cb: l=>setNumSets()}, + {label:"-", cb: l=>{ + decrementRestTime(); + }} + ]}); + menuLayout.render(); + + const incrementRestTime = () => { + restTime += 5; + menuLayout.clear(menuLayout.restTime); + menuLayout.value.label = restTime; + menuLayout.render(); + }; + + const decrementRestTime = () => { + if(restTime === 0){ + return; + } + restTime -= 5; + menuLayout.clear(menuLayout.restTime); + menuLayout.value.label = restTime; + menuLayout.render(); + }; +} + +/** Menu step in which user sets the number of seconds of active time for each set. */ +function setActiveTime(){ + g.clear(); + var menuLayout = new Layout( { + type:"v", c: [ + {type:"txt", font:"6x8:2", label:"Active Time", id:"title" }, + {type:"txt", font:"30%", pad: 20, label: activeTime, id:"value" } + ] + }, {btns: [ + {font:"20%", label:"+", fillx:1, cb: l=> { + incrementActiveTime(); + }}, + {label:"OK", cb: l => setRestTime()}, + {type:"btn", font:"20%", label:"-", fillx:1, cb: l=> { + decrementActiveTime(); + } + } + ]}); + menuLayout.render(); + + const incrementActiveTime = () => { + activeTime += 5; + menuLayout.clear(menuLayout.activeTime); + menuLayout.value.label = activeTime; + menuLayout.render(); + }; + + const decrementActiveTime = () => { + if(activeTime === 0){ + return; + } + activeTime -= 5; + menuLayout.clear(menuLayout.activeTime); + menuLayout.value.label = activeTime; + menuLayout.render(); + }; +} + +/** Start the setup menu, walks through setting active time, rest time, and number of sets. */ +function setup(){ + if (timerLayout){ + // remove timerLayout, otherwise it's pause button callback will still be registered + timerLayout.remove(timerLayout); + timerLayout = undefined; + } + Bangle.setUI(); // remove all existing input handlers + timerMode = 'active'; + setActiveTime(); +} + +// this keeps the watch LCD lit up +Bangle.setLCDPower(1); +setup(); \ No newline at end of file diff --git a/apps/intervalTimer/app.png b/apps/intervalTimer/app.png new file mode 100644 index 0000000000000000000000000000000000000000..782c449b3f8940d4fda51449cb0a1b40198116cc GIT binary patch literal 1823 zcmV+)2jKXLP)T;~zTf8RNKR?_ZDvUhc{Bwyk**2W~b2)Ry8<9i5= zNz?Sf80wZbZ64xUA$bXTXhUfzg}#)gjSL}>rvwsQs10^0rB!4U6EIRJZi_9+cI{Zv zbysU=Z`#|LK1fGgX=WxUADjEW2!90fG*Svgvh#&YQ35|%e6W4zcGCHD6En#Sx8o_UMUzC*h2A4U zP<=!G)(_XkfZky-T#bR#z>9?kh~0*?FuC^zh6(+1dob#=@xl}sizOMFk8>-Y$~QxJ zCmv~ed1SXr6&|^219~SXUGA{)CxK_G;kOWcWs=7|PWsL~T9Rihn&kX!lwc~8Oa4o& zF?DRDvolsnM#V7NJ1oX(lm}=y?55|rlD-c>x7$hIwhioRtji@Ib%l*{kNrn%?^iA= z8sKUSoL-Ic0CfjEeEn#70|1CHQ|WQmFG@^I(=|-vZWM%Ndr<^;x|AGfY;FZZkuO$?MK_aT%QVab1p*0w2eV) z!uQ%ec#Y+(=QVNssuZuS0SCu}o0pOl0N-hIV`y2&X>#hkzH1X-gccaS6=L?wg&L{8 z2&blawk>-f1oh&RH|Dq6@!A?-N~Vvc4EwOlpxa#>48GOw;oF;=Nv2Ikrz8Ap;vTUY zx|QGUWLtw_O`W9EC++x(4G_^p)Cp_)`QLSA{io%SUmcVj6&yLFcva}hF98@Jl$ z&C1qLKRhM{)f6@c9JoIJ1h5&vf-o6c;ImsHLb0k6X<7JP zPCUA{bT(bnW5M2v2AF2%(DDIpCt8J=xu@05^AByzqb;ON{ylMz(Wx-eqME0AXo@`d zRdBe7r;wmvw>93L^}(_@xwDn6p5iw(8&2@T#sBipV8x1{B(}SOxE(gN=^r3;^&q*Ykqk zKHnrV!e8&)tNN^5Y%p?Fl#ar6I|G(8mQm>f6yU_ye0;ObZM&9UWn`+)*P*d+y`~@a znu1^Sbh62ne|L1Hc&e+ZmZGvUZD!l;Z{Pi<#BULUAV6^Z{!;8cnhe)pFIy2#iOw z2Iz``LY^W6ETq)o8ho<)fNm#rGW6`hvEnJNzbMIgxjn;3+XKTRV4&MaAd)EB? zY?S0zco`C=aA7u@Ly>ns^|yRs$6GQJr!&r<0|9_wD#M>=BBfYs3IWc}Lz^9Kj&jT-8^DE&518XRYtHs{~F|LFY%X1M`D)X;@mE5uOt1A$<|i~52xpw+44H8h;sqK76;lTgZJCYk1DEX8;Q3MekzwK)T3&Uq^rmlo}J0VO=qBvD-INi{Gpd@Bshs_#Xuib55gPS>yl! N002ovPDHLkV1m2lg2(^> literal 0 HcmV?d00001 diff --git a/apps/intervalTimer/images/done.png b/apps/intervalTimer/images/done.png new file mode 100644 index 0000000000000000000000000000000000000000..d210540d16cbee6a672052c93bad3179cd6926ba GIT binary patch literal 2356 zcmZ{mdr;Ep8pmHiyx@8%F)w+eG*j?aSuCZM+8SV1n4+*Enq`W$n5GcALPt06m6}=YtBq_X7-QwednF$op~Jvy;3d7tNY%5?g>zBBZO_va3}Q5F2%bp?iW}fYwfnaIFP@+Vk7vZ-$0q$ z)gbA6zrZoUsLDx6=gQBiH!QE{=pxvjK4nQ}s40yQAaV;RC6q!uz9E0N5#0(0s8NLQ z0&uhYwe1NQTfa1?R|6tuR!}y4Z@3O>e|?5axL@aD7J1tjQ{htpWJLeRSw|t2svSa! zJGtPR&NfRcBdINbXhQrMBGL`i#xe+sY@F;Y1;ms4^5;r5eriNSPPB}>fnuuQvUa@x z`i8`hm=2caFiYPN_RO`)&o67E5P(aR8+!uLjxZA!L@)F*tv6i_n%{HSH%bqpvVtd? zH!ef>3~$hW0Ee&M`oKVXfm@%r!bEb;aV?xpOMM9dWRz2*7!Df5E?(Xgz_&^^45GmR z{Ew$$>RuziF563FgA%khCTtu(>5#!ZtGVV=0Q{ zhaQ#Rcszu&$o7PR)nYRX-V5Vsk%3%_D~)+SG0o{$)C~u96)D?C{77c{2&D zOe_pk$DaJrDZk5MWE0G6#!*_G^a6yz0`z_{O^@!hM9DFVNk4z{K^zpmzqaLB<_p>A zCh)bpdyMOmJ2gJ!u?VONCFmOdr3l@IU76y{QS(;4N|U16ZHVJE%l zum0)EjQI~eK(@Iuu>-7Np$bJrZ+4;7T`1~CwWQ6HYF6W3!m5mznN8WwsmL!jmd zHFfly|JUaoD4@y=t~B90pbe*WrRQ05v8n{cr4g4Y{2i;79#=(UdQpGEqB!wmU3N`f z$ACx=Ec_$)4q`w{?#B^YpPfLSyV?}yIr?&m2OrNoJqo=G9iHVmV8G&+v^oZ!F;HU= zPc9S#o?M8i`#mP1<18SPHBK){2vsUmtY5S5zPni8J4^4}9pTCvDV}$kslTJ$U<(6;?(@4R6W)tOg4>gXE9{7n>mctPH@`-+2pMPKap53B(UWZP{6M=)8G;Px z_VHSrqpdQy{B8){>oQ;b?9c`3g@e(Jr3mtpkXAGM3Ku74Tvg6Jv+c!f{gyA!w8xSD znx=r>c65(8LDT4Eva^B&xW_r2(st2vy`#URYDcb{+m!?S(~-+qc^YDGR6bB4)6W~A6<#ZFpGlGZR9DdQv`i45VJzp5NxuortKnc5RXuu?5o?i0<{A;xr+lYU|4M$k~ z>!yS+5ec8(m#aL|B|nHtZ-Xi9B15vNN{E2 zes3m6R<=(MI{Jma&h$0Qd>G;QgNz2#gSw2V#$o1*z2&$cxq#8NVT(`+#~MJ|u@y-}dn_UW`p+r-Ws zcw%V|3?H>D8VRsnZ`@g8MJ~y>-1_cKFY~Aiqa=*H8@@#22T* z?`Y%f)|E^riV9ng^IUJerCR&F%;4gbGUyPh>hp(EEn=VJk7JO4gV~;+7AQEvuNZlg zT(wr;K=m>A8rLhl)BcTc{8g@pF7Rr-uvA#tC~|~6i_%6*Iw?f1ivO^<8*`Gy>T#W e?{H<%3ar(lH}9wIm9h5rH_883YR literal 0 HcmV?d00001 diff --git a/apps/intervalTimer/images/pause.png b/apps/intervalTimer/images/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..727380799f7b7cd5b038c4be41169cf7408bdbfb GIT binary patch literal 1231 zcmeAS@N?(olHy`uVBq!ia0vp^8$g(Y4M?uv{v-}aF%}28J29*~C-ahlfu+;a#WAEJ z?(N-+dBM>**B@k{;>|1-tAHGoNv=Vr;nlRZ=d2Z9t9s7kB?{ncl}Q^^5-ZzAv12 zNLx;bLE^!e*-QxyjDBFZic2IkTn77=l}+LS*ptPLjBFNQzr~Cy1I0Rl03kW*f7k!G z{r1~q^Y6cFPq?jL%lIMN^6%&MOh4wYe{r4Bo~zpI+b-`XOxszQ|2#MUvdjFP?XHh6 zl|SFSKL22S&%@RG|FiE8e{Q+=-{aR8t?uuecQgILdbV#@@Be4{Bmi8S1{BpTF!#r*_N*GudfREYx&`d)08oDPVx~qngUi6 z3jk1XcA|PnvGPA5yGfcWp1!9`0dc{DwjY%92r~f420K&t9c9z!xdV5mtZ-=2hW$NC z|5<~~d8&u$ujxmd=5n6jDU3F0x9GR^s~DYaL!on2*>+syeEi$Nzhs2oZ8nY@@U{uX z+_Wyu(_n$>%_#E}`hNA>hl4qfBjqS+0)_g2H(%a9ju7@N>?!V*5ql}Qku;UVzo{U8eB6{Ss6ql9sYDG3 zhnCaVl;QlZ=dl*0I^V`oYima0_4^fL9j)3yJl?AmzV9rW0la)Y!P@nMcXm>mTe>~D6f`R9wS{jNc9s!GqYx*$TrVzA%!Wxn<>0nyIHPJ@(dJySXN+QIV;}=8%tR-b zzTKZySrxchD&T?-2IYol-H#nkV4*Ccg+|BkcQ(ri)TC0DsV&}xuyXO4a&rezQTOZZ z?pP3(Ro%(W1K@D_?~ZxWevAT=Z5$Ec!S-LSQ;h-a-lM`wk;=~TANXXc?DDhp7gW)J zo$}gLr4Rs`u`Ayg3&g6w`{=nKK;)6-Plxk)fAvff!^3V35|B`DhJ^c2a=&F!!(C^R zl!%Z^EJBLq*dQJM>p#xVaPFZb=okk8@{jJdzBI9E{`l zZOL)`mASX&fTD=1sSX$kjLkytmFKMPeWc+fk^z*>Gr8#9(V*&QoN}cL`GpvM*RAOE zK7glY!0Gjf{BM&psV}y2D}JokDx za#B_)%u-p~SC-W+Di^OeSsOd7o@rmv#+ti=xsaS?met5?6f&lkIM8yB&D^D_1kuzi zUt<_oy?Y)RKu@{sP=%5M6;u2u`A0)XC^%@?qXdJjJW=|E18mDhd)kem=E3eIH-1oW z;7WDi^!$hDkJ~lNDB*U1R=S!>L5jNhlP*k!$|a4YGR7di;Q&U95{DMPQ#|t-2EokH ze6bcWx;fY8!qRXfY9kaSk!X7qO-!VzNp5eK<2x!TKoN{CMI0QCS&q+E{9|BT?8euE zI3HtgByu~_<1?j@RmS`b>R_uoIC6#^J7qD|2T~UBMskPv~8_7!; zyZ*1{OS7B8ESta_t`dKwqaiCd;Vy!FQdUEdE6)$x5(vJHDoS1*Vpv0g?XH+Rq&*1J z#G2IZNUX&+I=FKQ$?(bVlik^LZ?9pNYs%~cpX;nC)6eo}Y9fSBgty5AuxEiod@GqD zJKr3z1i2jNe8XuNF%4^qcAwb=V)UB?#5b#_``HA_HA-b|?@y!Jjik>_vuYGLliaCs zkqYBrOsUJ`)*_xcz2`uWf5c@OHr)cjR%R&a>Vd+t&LG8m-)W;s_mtpX1P`~^mk`1> z)&!M?RX*afVzMmkHh&lMFSlc& zy~Id!t40%@m<H@_<8IxHA6&#fK{>;~Oq~~&5FbOi>&oLI0lP_#h z_xGQ?>nWOWc&*i7#vya41mPWuXQsQ;ZGThQTf4h^j8V)c|@ z^IInnz%4}kr4qt+hxTG;>W=OhaE&u0-Ad$*_8zfy zlZOd_OXhVi{okd{$ZUtT7+ZQp*Snul%^Mvk^o#$_gY^Q~e%w}b9D9(%Mw@}FxzCW= fNhs}cNqgLli@fNNnkp^n69Swa-KgdJ8CU)dXes>m literal 0 HcmV?d00001 diff --git a/apps/intervalTimer/images/set-rest.png b/apps/intervalTimer/images/set-rest.png new file mode 100644 index 0000000000000000000000000000000000000000..e33c9eb0225efb199d0f0e41c0327ebc794e6549 GIT binary patch literal 2364 zcmb_ec{tR27yr&oV>H$SY-?1aYXMp3qIgR;GP|9}5_-#^azJfA<#InQ&R^Lak!`f(>)8T2+Z06@mx z&dPZMdA~wZVk1}7exz;yEX>)K0LnYmCIOIKu(vwm!k|v)z6<|?leE6GzW!Nw?`eJc zwykNM*TP2|47Blqr^*<0>nkfOBTGcsZsbhFZsOK`d$9lRSeYj|h1rn4v2(BVJwX#KZ7@^oY$; z{{yMJK%bp8Ej!y79P8FvHVJ4P`t$j!IAe~tO=PeSIINJaNOM63B9oP7AGR0QaWyk; zp+wH(cb8#2=i)Y>G0@?fqh?p{p!3dN?DWDB)7@z7FL$@sC@ALz{+tFUFMcE@oC9BC zfa>oi4a?IL;lxHa4@18p!Gu#ESW!JTi&)@k$kKx30+G~h`PsD>EdtI|c4()NYCYFU ztC8lP! zQeXzGA~C6w?84$3nRhJ+w4-RCMS@z&tDjb2fSeP>H3fEUj>BwM*;zqfUO|939b|t0 zHl#7L!zoHHQ^5~|Wd<4EbRAu>{#IxnGGyw&QE`5)@Ny82R}BYE7k`FmFnwr|$OOyi*e0vz^W!nE&$2+N(r5I%sxYzrd~i`&a$YV` zw-fn6u?eWbv+Ls+tyNF5$f-4BE4Ik~12$t?9sLtD0GQ=nWKvIw((=tnE8`_J8S zSnk0DC@PL&!sLn=?eyGrv}EvT*<9pJ6zyvAt~mz5*|=3HuPC&T8cak9@kQ0Wh%YR#QIdm+q$c;z9R@+o*LMBTQs2p6R_W>Uu?6J-zq;bj(T_<* z?9>wgFTh&}<7*V1m19_N4y&|QIk+|v_Zr@ZGgCmUWA*OSC8oj}{`SZ{1?M0qP_}8Q zln_Y_4}Ud$5SVJ5sfyJm{`__#mAnslBW#i3c+F<5NANFq;Lv4mr8aEvh=8C7ymY-@ z>%HqfXwD;x+%?ux1`B)dcTJ`fScD0vf}Lxu4nc6h^URIAx3 zStvErMDpiulE$YB;UvpC9ai`B5Du&>_o*6FBY03606_Op2F?=Gxnuk6+9(m^?# zYI(!eUjK1(S*E&DkW5126%CI22;z37rnt?8_P&cO6l4vn9wJ47=!d@gerq`;-K5de z(f(s{AYYJiS!jfbp2|=61plNQGqe(}`F#?X{UNOJ(wiGo0-5X==ycS}ev{Wb0$Sa- zK=s0bA;lgONq+aJ=U+8HFu@Tth3vN&#pWRH8cx2HA(yX5q6% zq)4u1C!#&~2K<*h6r#fI$69RuBfhOnPj9uq5*~cxpxWO{(5%r3$&cqMUZtIGu6m^= zYm+$P8(&M7#k|yd>Z+s6WcbDSq8P<^*N-MMW+nn+*#3PGG5*5Gx6gV7@^Wt!L8GWo zC<$T*u*~7APsRv<;7Qp%x(RR~;uLB5y6z1kkcO10rO)9Z_o54PiQgdmc9+Qh3~^>mwLAr>J8dEj;ObGh^! z(Z)udj}w}Qpqnl-AFny0j@px)kirM>sFMO1uY}H#N_kZpiZh>!KW@u5;6lz7Wq);r zdGw+K`xaimJ3pj4)Ms0>Gwz~8re5u7iva@QMJG}CNRj)2s5N_z3?GB%8@-8&WPe}R zvdKzr(e91cscHz#lG=0E&{J~r&dapT+1|r2Mz7wrOJahl@G{dcMqjjduvx MTRT~m6KHY&1|~)^i2wiq literal 0 HcmV?d00001 diff --git a/apps/intervalTimer/images/set-sets.png b/apps/intervalTimer/images/set-sets.png new file mode 100644 index 0000000000000000000000000000000000000000..3d5a9107f8b6fa7ef3242f7863b63b8531e71177 GIT binary patch literal 2212 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 a{}>blt8~kL2+ITOAqG!ZKbLh*2~7Zu?)FUp literal 0 HcmV?d00001 diff --git a/apps/intervalTimer/images/timer2.png b/apps/intervalTimer/images/timer2.png new file mode 100644 index 0000000000000000000000000000000000000000..026774ba27290db5b8d9069c441369e4ebcc8ac6 GIT binary patch literal 1646 zcmd5-`&Uv29LLL@UeXk#*~&L++UzRZJTVoOocPEGKDNv#vY9nwDo&lCDBV)SEIq4^ zl9+XH>S>leEHMXo%O;if(lRv^3e!C0M9rxabhN*sA3opLIp5Fs`#I-(&bKT!CT#7R zjcYI%%-V?Xka(lN`Vo++(O!{`v5d|nJ3cHJ)AGn}5`!`IhzQyCJ(o2#GLm8IZ$W>x zXmA`h+kB|@PWac>^I-=Rtk188f5pDC&tjQWIWf1S*I6MF&;j(SslB#}cOnzE6P-Ad zix!Mz%QKs3n!cG0b*P<3^kK9?`wbQGjjh2Tk;;QyAp3%k2~b_}SO<>N(g4uQ{`@Ok zFVY7>yZr*Yh$3tQ4&R=`FLfuIeaeK+3Z+sz`)p3j<8>oTAf(6k+hnPG%BXw$&ih#} zn)?y5%4CVE7wO>2v1N;o@qR$S=U>8C-zx}F$Wi~XLi(g(hJP^=*2VCG>Rrf4ll34> zE^F#uXc|hV=x{t-lqL<#2Q!wQ2mPtO;rOAN((%TW<;G;ItIS?k7f_~@E;=g@7s+qj z8gcZ=40oO7?OlHhsdmw2qwn!ZC&Vw^?K(Q=N)Vw1QOq231Sbo>9FT5g4QPZrN>GsX z`#@bAxJl>GZ!;2{40y-08BBo4txPM=a3&+`FWzi|jXla6bg3#v!>DNPbYoAh`YKOk z>TP&&jW8k*eo5NdECcK2PN?EF1F*_7sZu7FPuw*uci`Kd`>Uc=p5BNpO0m0j84X~z zBPnmgdyWzg@#{%|qlFmN>Wtba;izQ5iYS!j*(*L|Vu8xjGJ|R0trFv!S-@(}p!_6` z>TrIo{xL=)YZLCha9! zPBsD^HWr3aCQY4zogO>^=kXigB?z;WneLo-l+3tW_x!z58D_vLtvT`a4qm$2fi4Iv zh(wrDPUTNy=iE~n?!dy6nw+-0Rz}A^iEaNY;U1VBI~Ot6Eocy;*>u0>QvD{(z z{zIHfSJJiRJy=JdT@943Uo4SKBovQ+A$%Em$v{QaJ0Gq)+df4KWmqrT{^CL+QvOI0 z*dyMed0~{Q$Rx}YqHd2h!~tO7arK*e@KelI%2#K&`X%+;5_O}nXBona(86w4|2?6a z7p43O3Oi-T2&&FX`fKyqPDjv7f#9g@5;)(dUVJS#WiL)=UpKHay;BnOIFEa9fw@k5 zy={`h@wu?$HYDr444>>b*Grywjy)ge3*__L(gLLHlu$<${x!Y57(F*_JjUA(Dm))R zs*a~ETl<WK)-N79D(fuDRpg!y8)A(J z=JTiJiG~)|wA}k84=|%}K5P@g&wl7^e$k2>@@M2D^_|zRjGFH)+&*JDn;SU1V3-gY zW(wXl`N)s#4`OJf#VsLD9Iu8RsMcJZb{+4;sdDWlkZ2nGR(cYI|2EQk93nVzAhBc% z2-UjbvWtzy;^;UV0DN?+*f$u2?Cvyrn416xBktHa1EA%;gfk@=q}6p_1>OWWc6IZE z;KOLrDRP()gM2r*F4dW)*%Bdg2|0{9|9t$D8n=R-N$`TV>UZ@T9|$Ib9uv|MoP6Xz D*O<~f literal 0 HcmV?d00001 diff --git a/apps/launch/ChangeLog b/apps/launch/ChangeLog index acabd9b11..3b9dbc30c 100644 --- a/apps/launch/ChangeLog +++ b/apps/launch/ChangeLog @@ -6,4 +6,5 @@ 0.06: Use Bangle.setUI for buttons 0.07: Theme colours fix 0.08: Merge Bangle.js 1 and 2 launchers -0.09: Added Scaling factor to settings and changed to vector font for Bangle.js2 +0.09: Bangle.js 2 - pressing the button goes back to clock (fix #971) + After 10s of being locked, the launcher goes back to the clock screen diff --git a/apps/launch/app-bangle1.js b/apps/launch/app-bangle1.js index 3d4682e55..f779f5de4 100644 --- a/apps/launch/app-bangle1.js +++ b/apps/launch/app-bangle1.js @@ -64,3 +64,12 @@ Bangle.setUI("updown",dir=>{ }); Bangle.loadWidgets(); Bangle.drawWidgets(); +// 10s of inactivity goes back to clock +if (Bangle.setLocked) Bangle.setLocked(false); // unlock initially +var lockTimeout; +Bangle.on('lock', locked => { + if (lockTimeout) clearTimeout(lockTimeout); + lockTimeout = undefined; + if (locked) + lockTimeout = setTimeout(_=>load(), 10000); +}); diff --git a/apps/launch/app-bangle2.js b/apps/launch/app-bangle2.js index 161a226e5..3e858e60b 100644 --- a/apps/launch/app-bangle2.js +++ b/apps/launch/app-bangle2.js @@ -52,3 +52,16 @@ E.showScroller({ } } }); + +// pressing button goes back +setWatch(_=>load(), BTN1, {edge:"falling"}); + +// 10s of inactivity goes back to clock +Bangle.setLocked(false); // unlock initially +var lockTimeout; +Bangle.on('lock', locked => { + if (lockTimeout) clearTimeout(lockTimeout); + lockTimeout = undefined; + if (locked) + lockTimeout = setTimeout(_=>load(), 10000); +}); diff --git a/apps/lcars/ChangeLog b/apps/lcars/ChangeLog index 07ad79c7c..85bcbad36 100644 --- a/apps/lcars/ChangeLog +++ b/apps/lcars/ChangeLog @@ -2,4 +2,5 @@ 0.02: Swipe left/right to set an alarm. 0.03: New design with different icons if gps, hrm or compass is on. 0.04: Inluded LCARS Logo. -0.05: Additional icons for (1) charging and (2) bat < 30%. \ No newline at end of file +0.05: Additional icons for (1) charging and (2) bat < 30%. +0.06: Fix - Alarm disabled, if clock was closed \ No newline at end of file diff --git a/apps/lcars/bg_large.png b/apps/lcars/bg_large.png index a82a5ae74b6250d43ec04afb5e9e5d666b2247aa..dd5bda4f3207c4764d8e0dea681f05608a031cc2 100644 GIT binary patch literal 12390 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 literal 17434 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 Ld@TN;=kq@R)tAZc diff --git a/apps/lcars/bg_small.png b/apps/lcars/bg_small.png index e38f2f5500eb3e72822c3b250f2f288ce4d6eb7c..8030c0ddbcee2266a654b613ecdbc108605b014b 100644 GIT binary patch literal 9939 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 b{{b=g`B_hwX^-CjHUaX|DpJ2BOoIOph5DDV literal 9424 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 diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 906159ebf..9b7244ece 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -1,53 +1,78 @@ +const filename = "lcars.setting.json"; +const Storage = require("Storage"); +let settings = Storage.readJSON(filename,1) || { + alarm: -1, +}; + /* * Requirements and globals */ const locale = require('locale'); -var alarm = -1; -var hrmValue = "-"; var backgroundImage = { width : 176, height : 151, bpp : 3, transparent : 2, - buffer : require("heatshrink").decompress(atob("AAdx48cATojCufPnnzASocCyVJkgCdyAkCh158+eASsAgMHQDyDggKAeQcKAgQYodZgRoFpAkCAG0QJQtwIPMSQYtAIPLOGQfSADAQRA5Qf6D6g/gQf8H/iD/n//wCD9gP/Qf5BBQf5BC+CD9h5BB/yD8jl/IIPx46D6g4/BQYU//+AQe8B/6DD//Hj/x4CD2v/4AQJBC4ED/4IBQegvBPQJBERgSD1j/wgB9BAASACn/gQepECIIaACg/8QeY1DQYjCD/+AQeUHQZSPDwUIkACDQdT7DIJEfQYIAxg44DIJHwIOU/fwYAERgUDIOUBPQhBE/hB1QZRBFjlx44CDuBBpg4CCHwdxIIcfIIPnz15AQeAQdT+CIIXgZwJBDHAM8+fPAQbOqQY0AIIkcAQKDxg44BIIX4RgX/GoICCQeR3BIIXARIfwJoSDyfYI4B//+BAaABn/gAoKDxfYNx459BJQnx/4FCQeUAv7EBIIv//AFCQeUAgPH/lwAwUHQYPAQe0An6EBAAfj/wMDQeZ9B/jIC//HgCJDQe3gAYICCgF+Qe8B/4IGIIiD0nAHGhyD3ABqD0ABiD/Qf4ADjiD/gEnQYuQQf6D7gaDFzxB5gFzQYnz4JB5hyDFATfkEwUN23btoCVgEBQYoCcIIRhZDYMJQf4ABjiD/AH4A/AH4AGiFx48cATokCufPnnzASocCyVJkgCdyAkCj158+eASsAgKAfQcEJQDyDhNA8QoMEAQIqCACweEASkCNAtIHbIAfdI1wIPMSQYtAQf6D7QAYCCIHKD/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/AH4A/AH4A/AH4Asjlx44CDsBB57dt2wCDQfWevPnAQaD/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf4Akjlx44CDQfQA/AH4A/AH4A/ABM8+fPAQfwIPPnz15AQeAQf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf4AZjiD/gEHQYuQQf6D7gaDFzxB5gFzQYnz48cuICZEwQdZgECQYoCb8hBChMkyVJASsAgPHQYgCcQboABQf4ABfzACIQbg=")) + buffer : require("heatshrink").decompress(atob("AAUEufPnnzATkAg4daIIXnz15ATvkwEDDrUAgPHQDyDghyAeQcNzJQ0cuPHATCDBDrUDJQ1AgAA3jjOF+BA4T4KDFyBB5Qf4ABQAaD9QAaD/QesH8CD/n/8Qf8//+AQfsB///GQ6D2h5BJQf6D7/yD8jl/IIIABjiD5n4/DAAWAQe8B//8QYfH//x4CD2HwMDQIf4AoP4Qesf/56BQYYFBuP/Qev//0AQYoKBn/gQecH/lwQwQADBYaDzGoZBHR4OAQehBKj5BBsuWrICDBAIAofYZBFBAZ6qIJJ6DQZBB3IAiDDgZBygJ6EIIn8IOqDKIIscuPHAQdwINkHIJEfIIPnz15AQeAINT+CHwcPAYI1BIIU8+fPAQbOqg56BQYcAgKD4IIv4RgSDCAQSD34AIC//wBYSDyO4P+IIoIB+E/8AFBQeL7B//HHYJKE+P/AoSDygF/QQJBF//4AoSDygEBQYgFBj/xZYaDzgE/PoIAE/wMDQeZBB/jICAAMcuAMDQevgQwR0CvyD3gP/BAxBEQek4A40OQe4ANQegAMQf6D/AAccQf8Ak6DFyCD/QfcDQYueIPMAuaDE+fBIPMOQYoCb8glB7dt2wCW2EAgKDFATkAg2atOmAS5eBhKDigyDZ2zHCjiD/AAMChEgwQCcQb4AiQb5BiQbscuPHATyDfyfPnnzATnwQbsBQD6DghKAeQcJoHiFBggCYQYVhdwQATgOmgVPNAnOECwAGQYIZXgM2dI1wIL2aoCDYibsF4CD/QcGYILGmyaDFwCD/QfaADQf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D4jCD/ADKDnILSD/Qf6DEHO6DJIP6D/Qf6D/QY8cuPHAQdAQfPz588AQeAQf8cuCD/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6DqoCD5HO6DJIP6D/Qf6D/QY8cuPHAQdwE7sGzCDZ+fPngCDwBBe7aD/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/QfcTQYvAQf6DgzVAQbECp6DE5yD5gCDFATqDCsOAIKtB00AhKDEATnwQYVt2wCXQwKDltOmAS6IC2aD82BBCQccaQbGAA==")) } -var iconPlanet = { +var iconEarth = { + text: "EARTH", width : 50, height : 50, bpp : 3, - transparent : 5, - buffer : require("heatshrink").decompress(atob("23btoCD6PHjlx9oLGAQuGiVJkmSpIRK2lxEYQCDCJOGjEhEYNBwUI5drEw/xEYwCB8oRGDoMhwmSsAFBkGM237NZICGj15OgnaDoOGI4cgwUa5dv332EwdHEZACB8+evYRCtAdBEAQpDscs3379+9HAW8EZPHz158+WSQQjFwUYsMs2QjBEwPrSRZuCJQN5TAJuCEYkhwUS5cvJQRxCNxZKDOIXgJQkh0mYtMk2XLJQXv1u0EZSVDOIWsJQsSpMkyVJljgB9gmB7YjLOgtq4BKEsIjCAQNLlgCBt+9EZwCCj8sJQpxB00aJoYCB5cBEZ4CB+RKFJoeGjAjCoOGzBKaAQeGJQQFBwJKSsAjIcweSBwRKRjojKOgYFCxZKRtAaBjHrlm4FJUN3hKQi3ShAjB2XLAQQmI7dHJR97tsh9gjEAQLpHlu2+PnExvF23an3794mF2BKFm3btsevImMjwRB23v3wmB3xNF5BuDCIPb8+eEwOeExIRCtojCJo5uEEwRxBEwRuJHAdI+YmCTYlgJQIREtrjCEwLdHCIiYBhF7OgnJSQgmFjhxCOgiSDAQvSX4QmB90IkQRIX4gmCEZICDvwmCBY3QA")) + buffer : require("heatshrink").decompress(atob("AFtx48ECBsDwU5k/yhARLjgjBjlzAQMQEZcIkOP/fn31IEZgCBnlz58cEpM4geugEgwU/8+WNZJHDuHHvgmBCQ8goEOnVgJoMnyV58mACItHI4X8uAFBuVHnnz4BuGxk4////Egz3IkmWvPgNw8f/prB//BghTC+AjE7848eMjNnzySBwUJkmf/BuGuPDAQIjBiPHhhTCSQnjMo0ITANJn44Dg8MuFBggCCiFBcAJ0Bv5xEh+ITo2OhHkyf/OIQdBWwVHhgjBNwUE+fP/5EEgePMoYLBhMgyVJk/+BQQdC688I4XxOIc8v//NAvr+QEBj/5NwKVBy1/QYUciPBhk1EAJrC+KeC489QYaMBgU/8BNB9+ChEjz1Jkn/QYMBDQIgCcYTCCiP/nlzJQmenMAgV4//uy/9wRaB/1J8iVCcAfHjt9TYYICnhKCgRKBw159/v//r927OIeeoASBDQccvv3791KYVDBYPLJQeCnPnz//AAP6ocEjEkXgMgJQtz79fLAP8KYkccAcJ8Gf/f/xu/cAMQ4eP5MlyQRCMolx40YsOGBAPfnnzU4KVDpKMBvz8Dh0/8me7IICgkxJQXPIgZTD58sEgcJk+eNoONnFBhk4/5uB/pcDg5KD+4mEv4CBXISVDhEn31/8/+mH7x//JQK5CAAMB4JBCnnxJQf/+fJEgkAa4L+CAQOOjMn/1bXIRxDJQXx58f//Hhlz/88EgsChMgz/Zs/+nfkyV/8huDOI6SD498NwoACi1Z8+S/Plz17/+QCI7jC+ZxBmfPnojIAAMDcYWSp//2wRJEwq2GABECjMgNYwAmA=")) } -var iconGps = { +var iconSaturn = { + text: "SATURN", + width : 50, height : 50, bpp : 3, + transparent : 1, + buffer : require("heatshrink").decompress(atob("AH4A/AEkQuPHCJ0ChEAwARNjAjBjgjOhs06Q2OEYVx4ARMhEggUMkANIDoIgBoEEgEBNxJEC6ZrBAAMwNxAjDNYcHNxIjB7dtEwIHBwRoKj158+cuPEjlwCRAjC23bpu0wRNDAAsHEYWeEwaSJ6YjCAQUNSRQjEzxQBWZMNEYlsmg2JWAIjCz95SoJuJggjDtuw6dMG5JKCz998wFBJRVNEYW0yaVBJRNhJQN9+4pCzhKJmBKC4YpB/fINxIgCzFxSoQ3J4ENm3CAQPb98wbpEcAQMYWwKYBNxMDXgc2/fv3g2IEAOAgAjBjy5CEhEMfYICBgfPnjdLjj+CgMHiC3JknDhhoINw4jCAB0IJQIANR4QjPAH4A/AFA")) +} + +var iconMoon = { + text: "MOON", + width : 50, height : 50, bpp : 3, + transparent : 1, + buffer : require("heatshrink").decompress(atob("AH4AQjlx44CCCZsg8eOkHDwAQKEYgmPhEgEQM48AOIgMHEYoCB4ATI8UAmH/x04JoRuJsImHuBKLn37EwZuIgEQOI8cEpXj/yYBhE8+YNGgkYoJxITBUPnAaC///nC+FjBuIOJZEB8YeCh/8AoYACoMEEAnEjhQDPQJKJ/DCDAoi5DoLdHAoMQgLjFWYPOnngh02IwXzwDjEgPGEYS8BI4MBYoSVG4fP/nghkAgZrDkngJQqSG4gvBg4sBQgkImHihEAWwP8ZBMBEYl5/+cSoVAGQIUFh04weJn///0gj/OEw5KEz45BzhuCTYQAEgePB4IACAoJuBnAQEa4XHjxKB//xFgWHJQsCRgMDEonipwjENwUBDQNx8+evvn/hTDLw3igE+EgZxB8UOXIvEJQUfEYOfv53DEQkgga5BJQvzx84cAj+CDoNh8/eEYJKDuCSEcocnEon+/7xEgFBIIcfB4Mf/IICXI2DgDdBAAn758gCIq5Dv4zBvJuIOIfjEgvP/ARHgwdCB4P3AoTdFAAk4EYk8SQgAFTALaDSQwAGh08//vnDmBABYmEEZYAzA==")) +} + +var iconMars = { + text: "MARS", + width : 50, height : 50, bpp : 3, + transparent : 1, + buffer : require("heatshrink").decompress(atob("AH4ATjlwCJ+Dh0wwAQMg0cuPHjFhCZkDps0yVJkmQCBMEjFx42atOmzQmLhMkEYQCCCREQoOGEYmmzB0IEY4CBkARGoJKBEYQCEzgSGkGSpAjDyYCCphuGiFhJQgCD8ASFgRHGAQKbB6BuHJRGeOIsINxEk6dNmARDgMEjQjHAQPnVQojIyZKB6YSDNwK5FAQt54BuDXJIjBEwK5EgxKKXgq5BJRdgXIojJAQJKMcAM0EwM2JUApDoCVFExa7FkGCgAmIkAREEwUEjAmHCIgABhEggQmFpACBCIojBEwRQCzVhwkQU4YADgQmBwQCCI4IFBCAojFAQojGJQQjDAQgRGEZICBEo4gFyUIkilFJQUYEAZrBAQMYNw5KDSQSbCNwwABgOGEwgCBsPACQ5xGwdNnARJcAVh48evvnCJK8Chs+/fv33gCRcB48cuPHCBYA/ADAA==")) +} + +var iconSatellite = { + text: "GPS ON", width : 50, height : 50, bpp : 3, transparent : 2, - buffer : require("heatshrink").decompress(atob("pMkyQCFpH0BAwCJv/6CJ8l589CJ0kyf//wIDpVEChM8+/fBAdZ8QRIp++///0gIBlMkxI4IuZKB+/SKAPHzpKJ/YkB//pKAP2BYeXhIFDx88+fPvqYBnibEkmUAofv34lC/RQBBYdcmPCXIYjBEwPfvnzJoILBQoUlHAUuJQYmCDodw48cuBKGTA0WEYIEBJQ6YEQwMMuImBJQyYEkmZFAVkyVSJQ6YCyUcmPDjgmBTAJKETAlJiS4ETANPJQpxCJQtxTALgBEwnfvohBI4NZkmWpNlcAgAD/wzBEYaYCy8cJQiYEyIjCTAWS3wlGTAVIEwkerJKFTAkmOIclToK8GAAIPBIgImCufHyxxG59pEIS8DvfypMr968HEwOHEwfx8+cEYkpCIeSoiYByVf/uSkmTEQP7ZIiYDnl5AQNwBYgCGyOn38k2+2pIRKyVeuPPj1x4ccCJVKSgP/5cJA4NSExMps+cSoMMKAIVCCg7SBpd7TANZkmUHBMevPnjlwcwXCCJFEzYDBA4WWKIIRHpEw4+eNwUxEwKYIkVJk1IyIKFHA+DR4VcJQYCBJRBoCkxHBAgNkyyYKkmXEYaYMAQMSEYKYNAQOHEwnSfBYjBAgVaCJdJJSMkTAK8KYQyVKAQ4jBNxiYEcBCYJXIkgA=")) -} - -var iconCompass = { - width : 50, height : 50, bpp : 3, - transparent : 2, - buffer : require("heatshrink").decompress(atob("pMkyQCDl//AAPSBYwCFv4RCAAOkCJNLCAgACCJm2rNn34FB+g1Jvny5cs2XPn///QRI9uWEYP2rNly5NHNYN82YjB/4mC5YmBOgkl//9y1bsuW/4CB/Nlz//9I4D3/8I4M8EAICB55NCL4g/BIgRKBAQtnL4lf+QdCI4YCD2Y4DSQPZtojHsuerI4Dv/flnzEZB3CHAJuB8ojIAQY4CNwJHI2XHTAY4B/4gJrGBAoSqBpf2EZMQmRxEv/5Nw9YyVCAoO+rf/0v/Nw/PjFB4ZxCn/+y7dBJQyNBkAIDz/6/7dBJQsYsMEhgsE//+7IjFsTYBwAIE/4ABEYs8uPEiFyF4gRBXIImEBAPSpAjDtuX//9+YmERgMcuODBAU9+xKCr68Ev4lBNwm//IJCnhxDDQPx4xuFJQhBDDQXwTwpKBSos8//HjlwYQyVG34aB2zCG//1Nw6SFAQTgD/JuD+wjFrbgCr/yMQI+B/lxEY08UgPpl4jCNwP+I4wCBUgOk3/8DoXxI44CBn/0yREDzx0EAQlndANJv4gJAQf3/VJkq8CJoZuGXIPpkg4BOIZuI5/9CII4BEZAmDNwIRBHAJxDNxH+CII4CSQW+NALgBtomBt5uCHAbjB2ZoCAQPyJQP/NwIRCkm//4gBIgP/SQn/CImSYALjDviSDQAYUDL4ImEEYYRGL4X/76PCI4P/SQYCFl4MBAAgRJEwYRPOgZrHpMgA")) + buffer : require("heatshrink").decompress(atob("pMkyQC/ATGXhIRPyNl0gmPjlwCJ9ly1aCJ1c+fHJR1Hy1ZJR1I+fPnlx6QRLpe+/JKBr5KMuYjBJQMdCJce/fvJQW0CJUlEYQCBSpvvJQbXJjl0NwnzNxGQwEOnHhgF78+WqQyIrFx48cAQXz4ShJgAABh0+8cP//9LJEhg4jDuP3//0LhGQgYlBgeAn///5cIy8MuAmDCIP/9I4HkmCEYMOgHfCQWkCI0cuBuDgF/CIP+CI1Ny1IkeAgHANwIAB/QRFrj7BhkxEwQRC/4RFpbXDgSVBg4RCSorXDI4MJAQMfCIP8cwImDn37fwN58+kwHgLgSVFub7CI4NyBAJKDLgkuEYX78+evKtCLg0jEYRKC58JMoRcFkwjDJQTFDl65EkojEAQMdcwn/+gFC3YjEJQLXEpYRDWwQmEdI6SHAQO0CJUkx4jDF4gCIJQgRMXIjCEARIjCCJ2XEYPKCJqJBJQIROcAUpCJ0kybaDARtdCKAC2kAA=")) } var iconAlarm = { + text: "TIMER", width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("kmSpICEp//BAwCJn/+CJ8k//5CKAABCJs8uPH//x48EI5YjCAARNKEYUcv//jgFBExEnEYoAC+QmHIgIgC/gpCuPBCI2fIgU4AQXjA4P8CIuTEYZKBAolwHApXBEAWP//jxwpBAALaFDoYCIiQmDDIP4EAT+CEwnJEwYjLAQLaFEYomDKALmDNwoCIOIZuD8AkFgCYDHAQjMAQTdDNwOAEg0Dx0/cYeREZtxQYOTHgJuHOIvkXJy8DNwIACJQ8Ah4NDAAfxEZARHOIIkHg4jQAQb1CQ4KVJgEOnDIBSoIjNAQPBcAaVJcAKVBcDGOcD7OBMQM48BuH8f//JKCnhKNggRBkmfTQJxBEwhuD/gRCyVHJRlyCIVJXgYmB8ZQBAoIKBXIQmCOIt/NxAUCOIImCIgIpCBAJuDAQZEE/huIAQWTDgImBTYQGC8gRFcYpKFCI8kDwQAFCJBfBEAX/+IjBiQRIEw4jJAQc8v//NYwCIOgJrIJpA1OcwbaFAQWQA=")) } var iconCharging = { + text: "CHARGE", width : 50, height : 50, bpp : 3, transparent : 5, buffer : require("heatshrink").decompress(atob("23btugAwUBtoICARG0h048eODQYCJ6P/AAUCCJfbo4SDxYRLtEcuPHjlwgoRJ7RnIloUHoYjDAQfAExEAwUIkACEkSAIEYwCBhZKH6EIJI0CJRFHEY0BJRWBSgf//0AJRYSE4BKLj4SE8BKLv4RD/hK/JS2AXY0gXwRKG4cMmACCJQMAg8csEFJQsBAwfasEAm379u0gFbcBfHzgFBz1xMQZKBjY/D0E2+BOChu26yVEEYdww+cgAFCg+cgIfB6RKF4HbgEIkGChEAthfCJQ0eEAIjBBAMxk6GCJQtgtyVBwRKBAQMbHAJKGXIIFCgACBhl54qVG2E+EAJKBJoWAm0WJQ6SCXgdxFgMLJQvYjeAEAUwFIUitEtJQ14NwUHgEwKYZKGwOwNYX7XgWCg3CJQ5rB4MevPnAoPDJRJrCgEG/ECAoNsJRUwoEesIIBiJKI3CVDti/CJRKVDiJHBSo0YsOGjED8AjBcAcIgdhcAXAPIUAcAYIBcA4dBAQUG8BrBgBuCgOwcBEeXIK2BBAIFBgRqBGoYAChq8CcYUE4FbUYOACQsHzgjDgwFBCIImBAQsDtwYD7cAloRI22B86YBw5QBgoRJ7dAgYEDCJaeBJoMcsARMAQNoJIIRE6A")) } var iconNoBattery = { + text: "NO BAT", width : 50, height : 50, bpp : 3, - transparent : 2, - buffer : require("heatshrink").decompress(atob("pMkyQCoycMmHDhgLEqVECg1Bw0YsOGBAdKpMSEwwjCmHCBAYDBHA4jCjFpBAUpkmJJR0lkmRL49Fy1ZsuWBAWkyQRGxcs2XLAQe0ymSNw9t23bAQnSyVICI1IEYoCBqSAIkwjF7dupMiQA5KH/KSIJQ+5SRBKH2fkSRBKH8iSHJRHPSRBKIH4PSCJBKFn1JhYRIJQqSBkdtJRscSQLgBJRliAwONcAJKM9MkyAFBJRm/AwM2AoJKMUgNCFIJKM7A8BOgRKMmVJg8MJRqSBAwMGJRqSBzVpJRu5kmTpMhJRmz8mQ2emJRqABm3cyK/BJRWPSQUauRKMSQVmpFbJRdSpMLOIODX4JKJpVJkYgB+gCBJRQDBEAQCDJREpkmNEAQCDJQ8lkmQEYpKJ0mScAIjEJRGUyVEcAJKNSQLgBJRqSBiVIJRqSBkTgBJRoDBAIJKNSQOJAoJKN0mRAoJKOyQFCSp4CikAA=")) + transparent : 1, + buffer : require("heatshrink").decompress(atob("kmSpIC/AWMyoQIFsmECJFJhMmA4QXByVICIwODAQ4RRFIQGD5JVLkIGDzJqMyAGDph8MiRKGyApEAoZKFyYIDQwMkSQNkQZABBhIIOOJRuEL5gRIAUKACVQMhmUSNYNDQYJTBBwYFByGTkOE5FJWYNMknCAQKYCiaSCpmGochDoSYBhMwTAZrChILBhmEzKPBF4ImBTAREBDoMmEwJVDoYjBycJFgWEJQRuLJQ1kmQCCjJlCBYbjCagaDBwyDBmBuBF4TjJAUQKINBChCDQxZBcZIIQF4NIgEAgKSDiQmEVQKMBoARBAAMCSQLLBVoxqKL4gaCChVCNwoRKOIo4CJIgABBoSMHpIRFgDdJOIJUBCAUJRgJuEAQb+DIIgRIAX4C/ASOQA")) } -Graphics.prototype.setFontAntonioMedium = function(scale) { +// Font to use: +// +Graphics.prototype.setFontAntonioSmall = function(scale) { // Actual height 18 (17 - 0) g.setFontCustom(atob("AAAAAAAAAAAAAAAf4Mf/sYAMAAAAAAfgAfAAAAAfgAeAAAAAAiAAj8H/4fyEAv8f/gfiAAgAAAAD54H98eOPHn8Hz8AhwAAAP8Af+AYGAYCAf+AP8MAB8AHwA+AD4AfAAcf4A/8AwMAwMA/8Af4AAAAAwGD8f/8f8MY/cfz4PD8AHMAAAfAAeAAAAAAAAP/+f//YADAAAQABYADf//P/+AAAAAANAAPAAfwAfgAPAANAAAAAAEAAEAA/AA/AAEAAEAAAAAAZAAfAAYAAAAIAAIAAIAAIAAAAAAAAAMAAMAAAAAAAAEAB8Af4H+AfwAcAAAAAP/4f/8YAMf/8f/8H/wAAAAAAEAAMAAf/8f/8f/8AAAAAAAAAHgcfh8cH8YPMf8MPwEAAAAAAOB4eB8YYMY4Mf/8Pn4AAAAAgAHwA/wPwwf/8f/8AAwAAgAAAf54f58ZwMZwMY/8Qf4AAAAAAP/4f/8YYMYYMff8HP4AAAQAAYAAYD8Y/8f/AfgAcAAAAAAAAPv4f/8YYMY8Mf/8Pn4AAAAAAP94f98YGMcMMf/8H/wAAAAAABgwBgwAAAAAABgABg/Bg8AAAAEAAOAAbAA7gAxgBwwASAAbAAbAAbAAbAASAAAAAxwA5gAbAAPAAOAAAAPAAfHcYPcf8Af4AHgAAAAAAAB/gH/wOA4Y/MZ/sbAsbBkb/MZ/sOBsH/AAAAAAMAP8f/4fwwf4wH/8AH8AAMAAAf/8f/8YYMYYMf/8P/4ADgAAAP/4f/8YAMYAMfj8Pj4AAAAAAf/8f/8YAMYAMf/8P/4B/AAAAf/8f/8YMMYMMYIMAAAAAAf/8f/8YYAYYAYYAAAAAAAP/4f/8YAMYIMfP8Pv8AAAAAAf/8f/8AMAAMAf/8f/8f/8AAAAAAf/8f/8AAAAAAAD4AB8AAMf/8f/4f/gAAAAAAf/8f/8A+AD/gfj4eA8QAEAAAf/8f/8AAMAAMAAMAAAf/8f/8f8AB/wAB8AP8P/Af/8f/8AAAAAAf/8f/8HwAA+AAPwf/8f/8AAAAAAP/4f/8YAMYAMf/8P/4AAAAAAf/8f/8YGAYGAf8AP8ABAAAAAf/w//4wAYwAc//+f/yAAAAAAf/8f/8YMAYMAf/8f/8DA8CAAPj4fz8Y4MeeMfP8HD4YAAYAAf/8f/8YAAQAAAAAf/4f/8AAMAAMf/8f/4AAAYAAf4AP/4AP8AP8f/4fwAQAAYAAf8AP/8AD8D/8f8Af8AD/8AD8f/8f8AAAAQAEeB8P/4B/AP/4fA8QAEYAAfAAP4AB/8H/8fwAcAAAAMYD8Y/8f/MfwMcAMAAAf/+f//YADYADAAAAAAfAAf8AB/wAH8AAMQACYADf//f//AAAAA"), 32, atob("BAUHCAcTCAQFBQgGBAYFBggICAgICAgICAgEBQYGBggNCAgICAcHCAkECAgGCwkICAgIBwYICAwHBwYGBgY="), 18+(scale<<8)+(1<<16)); } @@ -65,46 +90,44 @@ function queueDraw() { if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = setTimeout(function() { drawTimeout = undefined; - draw(true); + draw(); }, 60000 - (Date.now() % 60000)); } -function draw(queue){ +function draw(){ + + // First handle alarm to show this correctly afterwards + handleAlarm(); + + // Next draw the watch face g.reset(); g.clearRect(0, 24, g.getWidth(), g.getHeight()); // Draw background image g.drawImage(backgroundImage, 0, 24); - // Draw raster - // g.drawLine(112, 100, 112, 165); - for(var x=1; x<7; x++){ - g.drawLine(110+x*10, 100, 110+x*10, 160); - } - - for(var y=0; y<6; y++){ - g.drawLine(113, 105+y*10, 175, 105+y*10); - } - // Draw symbol var bat = E.getBattery(); + var timeInMinutes = getCurrentTimeInMinutes(); var iconImg = - alarm >= 0 ? iconAlarm : + isAlarmEnabled() ? iconAlarm : Bangle.isCharging() ? iconCharging : bat < 30 ? iconNoBattery : - Bangle.isGPSOn() ? iconGps : - Bangle.isCompassOn() ? iconCompass : - iconPlanet; - g.drawImage(iconImg, 120, 107); + Bangle.isGPSOn() ? iconSatellite : + timeInMinutes % 4 == 0 ? iconSaturn : + timeInMinutes % 4 == 1 ? iconMars : + timeInMinutes % 4 == 2 ? iconMoon : + iconEarth; + g.drawImage(iconImg, 115, 115); // Alarm within symbol - g.setFontAntonioMedium(); - if(alarm > 0){ - g.setFontAlign(0,0,0); - g.drawString(alarm, 120+25, 107+25); - g.setFontAlign(-1,-1,0); + g.setFontAlign(0,0,0); + g.setFontAntonioSmall(); + g.drawString(iconImg.text, 115+25, 102); + if(isAlarmEnabled() > 0){ + g.drawString(getAlarmMinutes(), 115+25, 115+25); } // Write time @@ -116,31 +139,29 @@ function draw(queue){ // Write date g.setFontAlign(-1,-1, 0); - g.setFontAntonioMedium(); + g.setFontAntonioSmall(); var dayName = locale.dow(currentDate, true).toUpperCase(); var day = currentDate.getDate(); g.drawString(day, 100, 35); g.drawString(dayName, 100, 55); - // HRM - g.setFontAlign(-1,-1,0); - g.drawString("HRM:", 28, 102); - g.drawString(hrmValue, 63, 102); + // Draw battery + g.drawString("BAT:", 25, 98); + g.drawString(bat+ "%", 62, 98); // Draw steps var steps = getSteps(); - g.drawString("STEP:", 28, 122); - g.drawString(steps, 63, 122); + g.drawString("STEP:", 25, 121); + g.drawString(steps, 62, 121); - // Draw battery - g.drawString("BAT:", 28, 142); - g.drawString(bat+ "%", 63, 142); + // Temperature + g.setFontAlign(-1,-1,0); + g.drawString("TEMP:", 25, 144); + g.drawString(Math.floor(E.getTemperature()) + "C", 62, 144); // Queue draw in one minute - if(queue){ - queueDraw(); - } + queueDraw(); } /* @@ -161,49 +182,45 @@ function stepsWidget() { return undefined; } -/* - * HRM - */ -Bangle.on('HRM',function(hrm) { - hrmValue = hrm.bpm; -}); /* * Handle alarm */ -var alarmTimeout; -function queueAlarm() { - if (alarmTimeout) clearTimeout(alarmTimeout); - alarmTimeout = setTimeout(function() { - alarmTimeout = undefined; - handleAlarm(); - }, 60000 - (Date.now() % 60000)); +function getCurrentTimeInMinutes(){ + return Math.floor(Date.now() / (1000*60)); +} + +function isAlarmEnabled(){ + return settings.alarm > 0; +} + +function getAlarmMinutes(){ + var currentTime = getCurrentTimeInMinutes(); + return settings.alarm - currentTime; } function handleAlarm(){ + if(!isAlarmEnabled()){ + return; + } - // Check each minute - if(alarm > 0){ - alarm--; - queueAlarm(); - } + if(getAlarmMinutes() > 0){ + return; + } - // After n minutes, inform the user - if(alarm == 0){ - alarm = -1; + // Alarm + var t = 300; + Bangle.buzz(t, 1) + .then(() => new Promise(resolve => setTimeout(resolve, t))) + .then(() => Bangle.buzz(t, 1)) + .then(() => new Promise(resolve => setTimeout(resolve, t))) + .then(() => Bangle.buzz(t, 1)) + .then(() => new Promise(resolve => setTimeout(resolve, t))) + .then(() => Bangle.buzz(t, 1)); - var t = 300; - Bangle.buzz(t, 1) - .then(() => new Promise(resolve => setTimeout(resolve, t))) - .then(() => Bangle.buzz(t, 1)) - .then(() => new Promise(resolve => setTimeout(resolve, t))) - .then(() => Bangle.buzz(t, 1)) - .then(() => new Promise(resolve => setTimeout(resolve, t))) - .then(() => Bangle.buzz(t, 1)); - } - - // Update UI - draw(false); + // Update alarm state to disabled + settings.alarm = -1; + Storage.writeJSON(filename, settings); } @@ -213,19 +230,27 @@ function handleAlarm(){ Bangle.on('swipe',function(dir) { // Increase alarm if(dir == -1){ - alarm = alarm < 0 ? 0 : alarm; - alarm += 5; - queueAlarm(); + if(isAlarmEnabled()){ + settings.alarm += 5; + } else { + settings.alarm = getCurrentTimeInMinutes() + 5; + } } // Decrease alarm if(dir == +1){ - alarm -= 5; - alarm = alarm <= 0 ? -1 : alarm; + if(isAlarmEnabled() && (settings.alarm-5 > getCurrentTimeInMinutes())){ + settings.alarm -= 5; + } else { + settings.alarm = -1; + } } // Update UI - draw(false); + draw(); + + // Update alarm state + Storage.writeJSON(filename, settings); }); @@ -234,7 +259,7 @@ Bangle.on('swipe',function(dir) { */ Bangle.on('lcdPower',on=>{ if (on) { - draw(true); // draw immediately, queue redraw + draw(); // draw immediately, queue redraw } else { // stop draw timer if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; @@ -249,7 +274,7 @@ Bangle.loadWidgets(); // Clear the screen once, at startup and draw clock g.setTheme({bg:"#000",fg:"#fff",dark:true}).clear(); -draw(true); +draw(); // After drawing the watch face, we can draw the widgets Bangle.drawWidgets(); \ No newline at end of file diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 02ac5c706488f0cb3b2fbe865f8f52691471c7f0..70db639ebf28b9df978e731ee731fda5a5e61e3a 100644 GIT binary patch literal 26993 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%0A;2nDme<@4SRQ6~RNe>i zL&)Pv(_XAcnT0Q!82>RZc1kFaOcZnFF8>z=ayljPDz--(#_FM~o^Npz(UDhYx z&*x{3T~p@|u`0nIf<0Ey%4>uf5rrhZTQt#NUC%^0P`f+gGy{NM*|H+!$hsTu91YqA zR<`fztB6$s?VtrQRvSPnhMk28KHczkY2i>&h&NfVn+_0hv;c+xh-pp?|-{X&gdg@m zto&^kfSD}uPG_8ZJASztUtKD{?S?=1tNl3s!iM~%{WyNx5R15e+!9N)zi-OF-IL>A zZ;ChmVOxIOm0#@1@pn|i!a|cXvea%ZTLlxKT#4P*=8 zkBbd1Rki01T)+Cafc6intbz^m1s zieXzB$QIj^_lUWL-?8%u<~zj-&31jBX^z*6#3=W20ODPNlL5JV&Ry1f{JIvV;u;1B zTG-lc{J=}$BtWozvu>N?0;but_GaPD4_<4g?(_+?aBw7(L`{WO4$On@hUbLO{{ISzZbG?JEn_O z<|W*?_8c|XNroWav+st^ZL`gljv=S#A+0C7TOGI7YgeGl7t6TK7J^u2Xby18mTCrv zYdI+`zlV8LFfbZ9;qt?5%ey2vFoW{(Ci~jmWa_oH;54kQ&7%*OI<ez&I`lMr*=ngf z+D2ToiSV!X2G{wX4X}o_wZ{ePmyXuYC-hHT>)rnFab#675rCqHg#PQdO3S4?8)+h! zO$W#QuoEM7XVt}{hq%l3`?3>cL<`hAWLQ-PS4&A?gI`ms_O^xRl|R%?IM)+Wj~n z467%L-P16ZFY>S_kk~YB&WaA?dU16Pvt&8ueT{WE(FC1OhB2-H|Ho3Y-tZWH#M1Es z_1P@3kGCOUYe;%B222zAVn{#&>pWzn=v=d8ug;q*Pn+&}8%RvY#rBVr3PTOFL>!{x z+{gqGZsT4S-+>Q~dp#1d*Y8-6~Tahf-oe%5RjY*^Q|3(W?A z1I0H#&2qH1MGra6JG*65$7x|?wp%=ca1?TT0=ex0SFwS9_gbKb*a*w@BW|G9Pl0fL z_6!xf<8avBJRnayx}eOC8P)@|bYOzt&fD;_ri0K*tR5tfmy$*8lvgn;3ZlRqpw--c zSoVgYEoN}x2YkfQ;Y@~Lb||LW*e;3?SYWYszte6$kC6Q94qrcO;3e*#4fzUoG+swC zoFGE6GH7SUx}ECo{aa=;EXJ#vf0}!YPcV53ReoShqvXq&6PD<-L=O^n?-Wb3Ebwyp z3YYQq&imn`5sLcN9*+34U084Pa)1t)mewe$YkYRXPCI{C3Skwn^@BFIuFSpNlj&T_ zytl;4oIS>nExB>H^#i7nqdgN1^IG29GK21%N$t(~>`|oGIlE15m1n>vwXw$`Y@yE* zU#xeS={=C|w4NGDw@=$@78C{%V?km1eE70M9$WA&rft_6O2{IVclTiNwxP}=@KqD= zOx)6qDd;9TqCG%pz^=w>Mshy;4oZE^&b8qvrJ^mq&)o%l-1iQwSW8Gxs8*{6do-XISY z@!(^v+lye3#9A5g$6*@~?MH2cBI;D_wRn2)1kr zdml6FFVL~S2l8xV`+uaUKkDi6?-Uh1wI{~GrMsBK;{8z`On3%Ng8gFb_R1esO6Bki zNA==y@osw(w*5mpS@E)H?=8=8971ret|?JF6%3&`t78MLH132To5nV`+N{HUQA0b| zk-z+4=Z72yM+A90y%qm6uL4BF7sar*?ywj4{Pf4{g6wAcfE`{jVC}=5(VzHP-DGx- zZQO+j4o0wm`E-s)ecl5@8oRvA;RzF|=B_N{oDKo7_ShQs*H*Vull2yxd|G{HBXmbj z0TXjv828ORw`F>{a>vTt=n5%H*K+nF2-aV37U89|z7<+lMr;PLN9iC`ax zDcHv$*6gDyZi@VJMAXo!3G;1UKrzv^EOw2eFP?P zUm(vVO0}E&>Q4s+EGRh7WcBiU=s;cp?`HnXAsp{J0k@cT-xXjUc2mM)B{AU^b9SLn zjkY^On5+?7`2ZnGt#^-Vv$oObi1n<}rSgf2p!Sxfn;6dJX}8gTpS9XhSuoic(F5Gj zC6jg=V$tR&64C%q*l;`w40I1L!QU3FEpM`WEKqtQ(oR1vc!PT$T1ME6UF+GFX%nj0 zZwIX|r($5o`K-HGNnuMQVt-GI{0kO0Ipf88fpi}0wk#ZOdD{>I*ES{tJx0EtR_s{5 z*%Ulci+D%);;Z=FJ3z`)o~EG-O#W~@9Ac~BINZ2`?ky>(_Wh$Y){#{t-I@w;MX>1% zp6@idEAQ~lGJ9q=Yqu+5-miJiJJ{-Y0wqIQA=ZFM+9|V)gYF6i367HjOe#JPKoTiM zb(~g>%$xDkIEYWP)G#A*Yy_QW~tpLqY z@Lhp*ooilN1&jX6rz$9ZLNb@ed%OogIe*H9uU&gGtvUkPi6?kB`<`ZY(p+=UfXT}W z?19nq9u7|EM%&Th!`e2Bka1(^$7P{*K-lf_HqDbCUIj~Id)ZrHaSyh}VY97DrX3d$ z(Pj&DkwPdvg8f?d5O!|>q5~ar4)Me=)Y6PaopDwR67flx@`&vk@KJ7L;SGz;oA4qm zGwyOef|*jVmIOrCn9e3!gWSo_etv)_zWtvPZH@Y0u+w+CKj#HgOD- zeQ61q1^3M5OE|B_7HBjXKh0uHlcng)iT`~%5er^kktb|eRA2=y)#D>4u zD9I_eC=2;V7Ka66EQv72KE{P;>9@i*|Hp ziCCrvLd~F}Cd}8eFS}`Kx1YW=P#!P-iP|77^UTg<+zo)U@4(t|YMzSYkZvbVI5Guz z07=`GImwm~JA|K}hAkH$KgY36rz-&8BvPS2kkP|YnFez4CByuf0bI#w#V%ulKIw;f zA|6h=+L5j5f6r<)gEI%ZhOZx(oOn8AvRIDWEd8>lJ?+_I=>06pe+TX^NBilWVXm+koqf?8>=+AeC+8b2 z{j`SxtH9>L*X4@zGTV7Egtt`ux+&53{MEI-WOcuF2=_H|#*qcJ7TI#?Ks zwZv&7tbl>Ad$rMijB|OjuBD*`7T1Z! zkA9pE#nWIpBf>g8Tdn#I_F6IEXbMwvPubIL>=bnl7G7!_901p4>)m(`9Jl?zdG`@O zCGBFdC#0J!j8FXZ_vpjYMgnXDPi(*2t%CvNIF$mMZ3l#L`PZf=SOUa)Z9igZLAL(a zcxN&1m*RG=(=n)P8hkdjW^rhCJSap4F<(BJoty>S3+Tt@8H-Jxz|ajX!(p&;3!v*n zukKhJ?!&^fm(J!n9Qea>X`c!xpxbDbH2M>lbe~of!!2Du9EkOj&oB@d>##UQvaOw2 z{aBh`Rv(eS5!Uy?GQHNEbkpy(SVyQsI-MJUfzrgeI;KK@JHNdAA2HX<&mleeRTOq&0>6Qh7kAR+B?P#*@C?1GZciM(IYuoND z4sdiKa<}*_J0DsEmY&Y~eQj1TX=;gHz)6E3Zw-^_1H%;abta5lTStIjaF`Pt{LURc zs+elT%~3k+KXhb4A@E|3fPI}YfxtL9>naZ(6_|3}zV=DQ)=nc?T}r|$_vzqCuuHal#?r16lK`!KEP}{~ z!#^%tuS53Z_n9~-0B-pCG%5E_G0p-gAUgVy&-k~LJzqgIkI`H0m^Sc4J+pH@E<>TG zvpKSDHO^COI5-uh)?IgIAy2An4?T2hUbN0J&Vm=gnBwn;N9H&P#X;3BE+p56dF;{+ zCNa5+v8#yTX?$2>#&1hk^P2YxTjl0_nEVj-BQK?2@EXD(<@Kk9!_T}7>s0MY+g6O+M zp5nJNe&bc_PG;3 z(LlBnPAZG^Ol)OqxU&jR8w;)m{~7CLjXf|&dVlXhUWZ6==KPrgw(BGfL+v85U1;Md z)M$C(V~DCbqWT<$++aclOXqxA<3xwXh!?R}D=(WDd=C&`ab6MT#u&*XN$e?aVVZFC zgcrcbK93#o5fqxQqa((K<~pLC48Pl{`C8uZ6q9_USPy9RwqJ{x8`n1`D<2hN~GnYLEGaBIy?0gOYqGUziyNc~I7-2kZWXmxbGocXn z4U{jRiZYq7wl+MVRsA_On~*xm8VKeK~j5p#H9$3jKC zXS5vwM`SlFuKU<1$YN=p#@H_x#&-2R2-DFPj#IQ(V^5g6otGO8PQ4ef-C)*A^77l@NDjC_di)o^_hD5LaiNHYNPC~Yxo|?JN`73_ctPW$DfAs{zfG4 z_|s6{FCuwHN}vA6NZ#?Mp}fBl$vgful=n9xdB>lI^8Q97@A%iDJP67i1sXl?iLQ?R z!46m`(FJ_^)XUniZaD4$9HNS^K_7=km2A5)pM{uN8Y#?yC&Y~IqfvVdYWJupM~z~e zvx|YHs|U~OESm8)yGwU8tvbWe^qHOOc637%m$33~o8u%y{-4nq!**axf_SyvS2_gA z(6HfHUWe*@>U)}X3;gW~n_vgjiBAo|$v~*)9vsOJvFX@sn|EXG0mFpeOrd$9)!?qCQ*~a&Ux}tE+p}t+N`_$)xbTm5| ztwgLUN0tLv`rVdQ@a3?LofR@A)`d*#es(Mo>j`@q*R%VWfe&nSz;7dTkKItngDN829aw|wNM^LN1x1!x?vd~y7vxW_RF6G#%*cYdB6)b8w)rp5 z$|_U$hO_u!<*u`=~~E&tjFO*p^VgiP|}lE>IG5N6L927k5_dwK3@ zb(nq~i8Gr$SL4{{Q#wudY)$~Z9KL~lc(KS%U)$9d=)~l;y|{V2UBh*IKq(Lly8tV= z);#ukrw)y>yN+ZWK1fn5?r|&ptf91mre&S?CntcRKM0cXWN4O$|2K zju)JuotzitTw}mw8O9riS-*5S7&kV}WWH_5d$74WvUQkPI>k}AS`FHX>RryD+_n0* zSs(+J&s@7P>*N`Wlvmap?Uco^nHKqdz=;K(i?WRO9&E4!)17I$oVihIhPBu@zM8SkUZ>@6V_`^cD~T<1KDjjuVP`lR zE?>4&JQ{cj8(=itqj$)k_SxV%;4iJrsCKYf5@r|QuvNmoLF*~Xj;tTwLLbp%69$OF z?nbfx2|c*4>ty+1SKwBe$+OEE9Dq=IigSw->W1PTHrm^D%W~k_vSD0orjr+zBHOIB zk5u>>A%=%- zfh8WV$qIYd=O=!QHMN}rN^!$iqP1lun#$ji&=-#$Ctw1FaExy8$Vh$VJT3=T z?A0LFyQ&dxCvM;|_dLCUJHD(oM@_Pb4SE@E63@|2Ovn7+o&py=wFjVT6{7>RJO(ad zO0d0n1?R+gB*p61msOi{^2;reO(TvwW@Rm!-qrF3V?juBW?4!D1{9%)HSAFAF&*k3 zPxirs0k{i->L6-9)&p)A-@jm35IK*l>*LE+ItBBz$P0x9_XQ(@&d9tmx4pDuTzhQS z=r+rFj47Z@O)_Q=yRzo76;Cn(3P^O!>o`2=P8LphQY7xawNW2#bRYrYHSXC#mD<>cQJ=+GP(X%D0D= zzQBa*qXYK^SA|&aVaNBLko4(scV2&ORxx;*!}J6uIJUFNp%qhOZn8s&qI7=R@65&F zMVFNgduA!7%f1Pg?Qy`_!16lYpR|{9d~*k$Cp5MhB0o znK?R3i$BtJ=5avpg9pM6o*Lxjkd(2eJ-WC3c;-j*#<Kr$l$OIeZMxjU#InuZ#3#-|5|j~4?<{M`y9>&&z^>5xi8Oz`tOrl z!k%lglX{0$x)_q{wyUu5yV&W)7uJ0u7lXBM+Nbv0KFP-Z_>n(UE)rzP7KyY@X1&;~pRQeOu)QDc?!KHg(FWBhqL1y{ES8K0L+7*+|n~JqIu1d)u)wU--lr&A@qF3z*4y zN>{ZaGkOZ1GdVG!r(!yr*Q+`=}=#e95K7H}NYtJ2q7fipojfvY_7cz_aTMiHhyI0F0T)CK!9Shws?#DlKDZ{aF-NYeoX3xIdg%`LJ zVZ#_sM5vx*0?wJa@kC+G^h76>6LP#!be7$h8bvqS|k zo4{+psAE)KlVDXYbKk}fUXMe;H=Z8K13!w^wd^1r5YS0^dk&gMTcyu%2;Atg?qCgO zundC_i-?3>9;GTi&1S)KpI-rvaEO9aFA~}?Uk~h>yNr7|JM_q)R@xKa%2ArI>h2)wO?k^cSo7#oNY8a) zx6c-VX;)xLn*-qOM{2i)MUIxXr6pStWgp=%Gk`hSW1OGXck??Mo?3M{0e^9P1MU%T zi&e2s8(lsb`eD0lvwU`?L6>!JH|oy^VWwX2O?TmNAjKZTY*$YN1U_)=39t+f73cAc zj5<+Vh*$Au9lVCb8um&S=?<%LE=-LT8AhV<0H<|r08-;B1)Fh zCUEPu!oS#rDMoPkfkRVwO%ViK4+14XY4d#n_lyKD2?@VIo_j#Gxuo+KGv@e#U8v=V z>10&tYR>Z)xH-3|{%-p8hMMEW^1t97wDrLj>;vdd=e^~L4>j*)xw!!@o=Dopdp7;g z+`9GPm+pcq@y9Vg?C{z(TGqB-4#C`m1DgFTZ4aHWlmV5KNsT>J8yfAolD7+J7#ZI3 zIa86(bF_5$8Z8a1&tFLiOt?vjqoP1~kg~H9c_-6sX7g0d+jC-e;IqEp&kF?YPkfU{ zN1zMuvrpVgD;!|lW=7V2keZ$RY8B*8OY4$`@i833TAtydb~pzdEd2uW_vukPoyd(0 zg}-K(6x7yxW42)s)V;_Czd*YqY*5+)2 zWog@+!}O$)*Gg|IfFIjq9i^2JYv3im(7A23CF5QPMjs;~{zwkqLx!xiV3pvaST4Be zwQHUqE01>}1W4h|PCLfD@ESFH`0PBILnpKSXtyn?Y(F}~wm~91g9c`A-KOVNz`>pL zf%S4y7fxG2AKmk&puhmF*@B@R{F+1FEg4*nUPg31&nFl!b}IWc!(@$`%T?c4;) zY4PW~E1Ml=&EJ+1Z)6Vcs6X5Ddh7{V`y`_0HC%FmNFLZ_Jyx@NOfbCb#oy{_Uc+%4 zthqH^PSXTghvi&A>ylTvvx81{4PacIf3*0t%$<$ik*N`GPz{I*CKTbVkp4MV^;TALq{493sRSa_Lb7a;@P)`_n>_^WVMC2 zur>p8>##eFVsIW6&~mYcCzL50`&#)qoJ<8uDxj3;+^LL zLpJAX&AjI#)Wf!}4d_S<5&%O-0!E)o-ozH#Uw`JDP2s%Pu z?M=>!NwyD}I??hh+m(@_^?urgECcKN1W)$O@utp?H*Df$n%grw$9;gs_zWGLMjxPT zC_b|jwO_k-(NQq&Aw>8bwpO=$pUUcF1zgMNp?m22A$rJ~QavPAfX8zLkONU)t#Pr3 z+S%zB2Da#401}S;xsYB+=LPq~U9@AL6X(gptRhZvC4D~9AH^P^6vfnhyg{1jaRABl zKJ2%+dzj9J_jD7xpwa2i-~|-Js3>+gm;!t~RIXX#vJ;P{3_J(A!0vAA@Oe!K)=F=a z<@q*w!B}=(K89}B7&hSKbX+uR?^cZF=v#|PK&jXY*!q0xN|U{HI=F{X91c=%o+blX zK{75(WM8-OqJ2D^*dLsyyLufKSOzLTFM!4lYCEqI##-)mh%c&$nZ6jF)4+FQ4 z2vFphOdRoPjbHV2Q=rKf2B_KRXj==(-+oNXI&CBH7|D5S*Qx^&hGXHK01e<7Sf7YA zcqH&XM;vVE?9Ll-2%~d4frq&OT8bU)8qsOONw1ebOzJkFYBCeg#!c|S&SlNU){z6& z!l)KFH$KP3mSZV(FjhZUF?V_du>BFZpLjX$-t!f=YvA=gng=$5z4MH4k5H+e?r}_s z2T0R_Ptlolp4XW+-z=fZPI3Cf<1IYk8#ZM3p(B2)-?g1&?ol0whsrhsw?t#hr_OLUiR^q&mkK;yyjyc_~l#@fZ^^BQQJP}Sl3Ul z+3CR!o&w-tnqya;I?}SA^9rnR4(o`?=BC@zvz&PS znf~>78mVQ)K@hc^>Jsg26Zc`&cwy$Cv4ka+?S#Th1e=yEjbs!$K1g8QY zV^}@#7NMzN|ERqjd zYmP1Yjja7h)qW;wyVV0hbj;3}`_wJZphSH3p<5?PdVuslr*7R=FWeqpY?j@EDo5TY zm_}Or=p!KCG#4A64G%2?0D-*KDto`J4B-9yYyALoK%zxSnJ^STM^I zZIQ4A$^#v3l+OUmtDlF(+y)e~byA-*F{^2{tM9HG+wNv89v`rqwrzHc2LE4=W?;#> zCs#oL4^L5kohHLWvc4YNuq+JRMK5P@q$k@bRWt~S>%Ki8zH}!ubx$S%P1%%oa2;=r zLqP2I?CwvB-pHWCWvoqrZSkT`T+k&zPS1N-zm+Y4YkN4+HIGlhf0nX2*g^n^m*Y>P^fQ7@zF(9)X9=6mxXYc_4zRS`Vtp7Fa%K>-|57sej zHG-HSSrW)n?a}NWqkiY@GVp7CSNvkeZj3{WR)$)fZ-B^w&1tt0Ef0$DP#q_|I{ogw z`-N;44=1tYFNDKbm&vv1)Rp#_%xRuyExg+8px>H74QSd8>b}}^(yW_<(>%^aA`8r(R5(bR5_6Y+Cc<_XdoUEd7oVdZ26CencjTxBjG1+OY z3r@=>)^ItR-mD30>Z~+JK(!s30-7xk<6a)bh|TJlE!@E{kj#Isty1AW9?McNVg8)Q zY2SVOWv3~<`1meb03!jnaM{3gJQA-4ru0My&&4%!XMMIb?2g+uM`z2Oc30p~`IaEb zrck-;Of~_8;bE7{;lQ4?>HIpIiQK`%N{T8D~({Dkv zu5bhgj->YP{Lv$++4K?sD_gtq{~lK4X`uy`fT!H%+ceN~&m^)873WutPCaH&Etp}~ zaDeWs)X0(j!z1N=@M*cv<`nxR&9o1Kw1c{UmpwTPZ>BfCjQJoZ2iDmJPyzAhSRG63 z*|Wzf%MZ`m9#DwY&FS@AzjXt0C9{|YqZHvTI%X`S*)hX6yM^IR9~f#wWAhAAk3hPY zLpk<{z+m4prulYq{4`*HS(LOI z`Qbqh_*`^0b4P$3Dp&*u$riG(2SepuzuN7=n>ubs+q5JpN2kM*Xmn@1AC>*TK48f* zOa;tJC+_0G4(5*&Yv3&YDyy(a#<|R%^yz^l*5@o=M$ zr`rkm=|0Bfc|Hg8mbU94?7qh2Eg#YvFOO839=$QFnezmVt}7nNW4`=U5BzfCz&pOq zHol;z#S_S$p7${@LjHXg(mX#iHU)&zs=iOBjqai8Q}fe@f8c2G&}h?yVd6V6pTNB) z=bXzd|K*Gfv-;Lm?H2E6+D&3#F^CFu=m|{!u;b*b;pF(UjuWIdINA4$H1J85YFMvn zQ=n&)A+eUbKP};ox<}@~i}W^+gMqETu!V*#_Y6o3+di=qjjs0Gdj_F1lYZ_&IsV-^ z87PMptJOq)#QuU;pjURg+UD#*IW`b=qsPVaOdi}|SUY##a}VWz0q7Hd1QrUdZ@yHo_^W+Rl!H2EcBtUo4R0nMA7?vG50LRpo9U^Myarwl%?_SOWGnkr?3xCF+qTu#bzhK6joI%Ep*hUr&r9CarRabSW9!|PX~)M*u7uCD~H~Dl5N0$ z!jahk*7I{7?gOxaQ97=1DHqM~xo5V<&(xi34^wb}nWHEV&x41K_x6}X;{T^ZJFcB2 zm#8-f7XVko{&CrzbL`uLy)4cAP&2Htr`tV$Z`Z$X`thIcIzR{*JQnq^1x)@6WeR>z$1Rm{(3W zZrNtCSUm6s)M;N8mK|FMx7|aM)*idy$@bHp51tkgC>|Y{@3JhO&GLD$`s=wO;V@+C zl?roK*ac?-fVGq!2FY?xXX+cy^+2uL&I@$r?wsz+%5ZLJzXY(M08LJh zrwz|%kZ)b@0m|LAUzRM(=)U9xyJ~k%H>ztl7$DiupsfS|nYMc+-zf}c=azM~cdNBv z*FC?netUUm1^%MS;9nIPIC}Zu$5rF7f82RIxP76iLHg*K-oVWbd?84lZeyR`)qrl* zigk3m%m`zehu;QJeGaf5R)&q?!5#+p{iuE6U}<-$JGx!mfvz5axb`vQ%|#GrW3tV- z8Y$f0$>a@pr}5Q4D~ zi-8@3U|92h9nes^M}F<7(YX#&($HvB<1+cxvn{7(s^5I^E`W+A5=xgnR=kQ^lB(@- z_7){V08y&<_%84U`ml#4%&$8ItqG)OkMc%fM9!?#IoNSo#`CAMhM*9?m^CC3!IT`Le97BApe=Yv(LHkToXzzB;SVe~2IC5L zidz!8E3eoi=ZhlApDR55Eqtyxtx3I|kz0+EfY&E3vz>=$pEa8lFnoPl+KCTQATSuP zX#@!axc{n>9HUZ~zfEcpip|tibOl*)v@cY@b^FB`x z;oI2y0j-_axUn_7`IxKsnh{Tv<`5)O&7{cp0p>kn=*& zq65ZZ+u&@>t0}q6+IYOd^SR>0MP2c81w{L@IOj?Z%RU|c;yF9P^pOSPSiQIQ1CGwe zf8w#%aNIZ(Ijdc!dn~3Y)&SFs`_O_P2H==l`75jWwU~hVT=oc( zAU;Wt^dG-@XnJ-GWgj63ytl2Q>;f!E`(9o3--D407-JZhx(&=N-+OwvLc{Bw;B4>> zRL97X=c&(!_x-=?Qo1j|+f`!#00D(*LqkwWLqi~Na&Km7Y-Iodc$|HaJxIeq9K~N# z#jlEp9aKazR3{6fB92;xB2);qLaPoYmwrK$h9t$sQE)9d__0`ZaB`;p6LFm}fOV_vh$V(-s4KBJnIUOq+OvczV+|IPVh&Sx#1o&xyxOx*+i**AiJcxKQ{#OH~F#A3FAl?G-xQzM=t4yl?>`9jiTmGc&7tx#gMd-4|s()!9W*J%zR zibX6zf(QjA2yS|1UES6FWl4m_uAnt7?m##7S&unnnoWh{zKRwyC{P1uy^@1_OX$ zFaQ_^0K;GaFboC&!(ad~3;>3~0ALsl0EWQ;U>E=lg8{%W7yt|dfMGBI7zP7?VK4v~ z1^~lg05A*&0K;GaFzn|6?3Mqcv@P%I9;H^^0@!=cN>BfPqO>kmAbZryUHQ5Lt#d@) z6UxpdkyE)B^>b6ot`E@8DgVvI3=9w_%U6H!I+PjZH3Or5lI6j`*5K6|1O~IVw>@|P zT-abYn!T2T!3F}@b~X)z4Fs^g_JzR)0@&W434;w~U}#`iAM@Uyi(nWc_c^yA|)$k)m`aC`s(xidvZXGScn3xH^Xf;yOZU1{2B(n`rZ=H&11a~ zJsZ9^h*$CLYAb>k;LZ75E{MUvi-Ro1`lCmL(W5~Qh__*2S$X_{{0{^o-^E8f)w6T= zTyHv<)1-9M8ujj>TNV{Yca)ra?OoTo0Yw(Sll%SJweNG>KVEMwJ2&hdh~Q)1OE$EA z|5n*4a~RNLU(;4|ft=5$K>m6nL$p+C$%^4qJBw9N|A<7Eh$xOj}&J`+Ft%VDURFFN8%2CVX0Fwc6WvC&?CxM)ONC*{)!f!TPg1 zP0Jp)+~=u%&KI`S!$yxBB@^#EfAnJ+7`C?T$pLZBV#@nh7&s@YYPXQf5g^ni=vH-- zTA0fHJuon=nJG&qYo%m!8w&vqyr0dANgfeERm${W;7#3Ivppm&&z{B?tXo_!3ZT?zebGKqt&V;+6`wgiAz2QaKw1Bb3P zl>JL+;0_wtb2`9`t6S;7z;+BA?A!m;r2AAh%049+*oc9_xM1LIy%7AYTGJAfno@rontqZdqBR?e+1w$~`z?NGw0ADchNCtir zV_pl*i(2k8OKGWA>1R%5Inojb=BA7~-jm;v`h3-h%{1`Kf4cSozLpa5p%>lMdn862 zT3B+{v9;^rWvP9!ov5D%Zsi6ofnM%uNRo|PPf=<Yt~|dQ}X`RWTgiKw@&0nCHC%qFRL(c>#6d+ zhc)f};iF8W25#1yomjZ(US?|G+@5DWacHU7sm#^rg{T2e&k@B0#L&R@lap=$@8E@~ z`J83jHrLgYybwJzk?-z>xT>F7^<{Q1VBkLNdo++~r!r#T*;7xg_wO3Wr;hjdxtadLX^xEQr@4EQ#e!C zHcPCP7G1M+HyUg$4ZN~z2e!+wIFW(xoY|!l2a8#M&e^}Y@&O~lSOy-J8!Z)$cDMB;b)EHn zwE);;y9_MPG2;gV7zVQ=oiB1KzqfwQ7PK_O!dl-Vk3TZSf@=6vlzHEM_10`hxT5b&eOlc zV%zI@w&KCvMDkdpUg;1M~xthe>IzQ3DSfs@90W;VsIb7m&4kpuE! zOza+%nWrX4*Ktkiy{7ue*jC^2{)%>H&i{=2Us(`N*c|b^&v8lT-<)Xu#c{eubu&5| z4Z$r-aW9hxpSE!cCMG^{lX8KV(kr1Kr)z?R(F{B?M;C7hbeyZ!SD04jdA^hzl8H&U zP`|GqT9_g*`@I-gtBhXRZc4uM?jBm--^J^2f-nN_*V`Z`*2f~o0sj9>IYWP$n1W7X z0OA=Mc(hKe1y}2qn3Vw?$c3aA=`-gzn3REzGwJ_7Cq2RuL(8&RPRwH9S`eEj3;98B z#MwRvVE{g@TYk^ig(k1(OdD!n`E^ZwezqUDCT5}ZbC4Ev z%a|vKnZNf=`+nts47l=3ty5<9XfX>t`U4xK0OoIyrZZKNveQevE;om*8pzO@>q^UstY^-~Zi1N4FZd)(Zg! z{=o@dINTG(3k&ge55JZPmCXMYqiayJGh!q)mNw6C_?Sj@{$jOeip$6h(k$p799ib5+>F%iuSeAPp$ zN+4xf@ZRq>4x`OH5v7)!{V5}uD^C5K+&f1UN2gKQZX?OSXyo5y;*GU0kc)+#>>0sNKr^OF0uG;qmr zPa|DbGk!al*`hsc;_p+71`al_M5XEN$b;pt_t=S*x!M)E(b*|mx6ZfxmKD$~BHLE; zLd4#Ja78R+ND8(a9cAF(4YnQmV9_HO{)6i)W>4L+Q(_meF|+@-Q(LuOF)*nNe6-{D zb-A%qDLpThC^vEa!SqyneD03%z_p!Y`)&5kakL@jac_ghzyZjDMTtb|!qPcy1ut}& z`4$(#FU14rudn-Voyb7KHbifQR4JL4=XHpeec56M2c^%`yzx#9;pM2!nf41iGG^*i z)88^YD_Pqe%>BNRJUBtivl>T`zq9xRx1xcIaK$W4!%^@);s zA^0#)aYh|2qffk@C~Pw=XIis6dqoDeIJEFllS#|HWR%Kr7U%cXH8H6feZpf1oH`-p zouRo?ug1WsVYfEJ&MZk|+KG%9STeDm<4kdNT`+LS#2g2q<|Pu|3i)79W8hi7*qqNy z=@6z2Oq7#d(upWD$-uEZ_~L-nGc=grw-vlk@IusPV&76)7&Gv7?lPx%3F6#nvJITj zxTNGj(>jGgAN(yZ1T?U&g~PKfMDDUPh|FDRU>BT`A-xXV*xLgRWhqfEv#&6W-qfk=zt0A ziQ7ay@VHku;`ekvt)^wQ_X3g7HLQTu3-UrN4q&xY@9ndl&SJ|XTHA-J3 zaB^>EX>4U6ba`-PAZ2)IW&i+q+SQ#~mfW_sW&hEN+XNECvpFC@j!`|R=GUBvlq?_1 zK9G0{Iia)*AKp*e|y8XYn=D*zaQGyPh$J}p!53&?_ZZ! z_UrZIP4fNt`Tm){KBzyRFG_FqcaQM(LG$Z{`&Pbwr|-A*`OANY-+iO9N-J}rE5_$K zuVeq&K6h~W`@9Cf{WD&P*PYkJ*Vokpe;wDiJ7Gb7_jup_K8_z3=y!|!?W^#gtN;D0 z|5*GuzP^9`$6A)JHR6k({@~32@%`)jW#W$)zP{g4{QVE^JC{E^&e!kvUG06J&(n=m zSkdw&QG2n^Zy&=85vz3Vw-x@Y{LXw`_kW%L+A)sFmak(Xn>SzgGqNjhIMcb#alYrX z|DNaM7E^p;{qR@*3-3E!qVs6q*NXd!$~Cv)&iN;=VnfdNYv1x-;BWtZZU6Cu z{2;3AVBX8zc))SopO3in`I~HAd!H{}m-+jnLT9M!>jPLKuAR9VR3M#4Ij?+{^QbY_ z^JEn6S&Ya`oCS$s;5<`tGdTriQ&;8n%V~Ktn+r&oXt6Y`6>DOShQp(6r zO$`|u`N}EhTyo7VlN-DXOQj11z)T^eNYpJ!i+UsanOD(t3YHO{x(PO``fw`An zd+WWA5yRj@gU=ege(;?;-q)S(e3!f4?e6!Oh|f$j&ob+5v(K^Ox)x?)l~q?;eU0Y~ z50>IdPkzc%pZ4@;yvW*nz3I(wdF$KW{*Ldv_O+{j`0p2X?flxcxOd9e)$hB;cSEh; zKH}7zWcQ36i|J&?t2=-|NB8V#XG+nXbI*<*QHmV7$?V>Qb-H70VS3J(-}C$4{kC&| zYu`d{e{0|3f7`j>*8Lkh7udQ#?%PjxZRzLc-m#Asx~9j4_VM$ljS$<=sg3{JzyE*z zpgQw;rxiy^{jGhmi7&hIj52T5ZL~GR)B9VVUce-0duQXv2RnPS!zs-(-|fw_BU>xA z2k26+=Vc*Z<-wyxZc)Y{*L#!?&o-r+Iz)v zfh5k7$BhDvjau#=P#1*VpFBrD=fIm_%I-cY^7WM#eM=IT$n-&m?X z?C5X4Lh2>8`Jg7XbE|xL&Vp*Sb3Rvpdb{TNJhhGUdiZ~oH%{()r8wXC_$c#kv*fT2 z{(kXKhhD0^XMS#;4INo`dD__!SD?w@%Y*ws_v?!$@X-@rc((`l$rFt*Pv1M(3q0gH zVqRF{u~wTn)3%g~NDyvK#s;{H;JD9UxN`<@sf z?y|T0Imdb?AI2LNPV`xw1*|=D7e@sgb+(p!J8Iyz&KJkrF%b8AaP<;f(IULhdePA{ z&omaMScx4RtyklzhnHLrj;XDvco~74xw0b@(Ab1sVE-k$c z3l({dDuC4!5G7F3TnMxxig!V{j;bKfg)toco$KxO?dKKV+@@dyE68Jbb)Juf`)nXa zI`&*X8`#~4aU;wZMtb5O61vW=PgX5}pgQjUZQ5tC0_M14WAAb`G%KTKm}nr}iF>>* zz6Rn~b`4XIPb4iKKqvTg!$+-=JY=0Ws8x$cT7a)ed>H4@#2#jYspLBfjdfU zN2&R^uZh)}m;_`7?M1~=vb5NX5FZ4eZ(%T4t!H8| z2G=^3;)KcQ@qF(CXNB29tnbXLGs?|oBhYL-4pb8pB6rq$M6^J>1O7AL2sXNUFp*9G@8!_wX-j(mw(Y=xL{oY6of`BO-4-o%B zt58XVAES$aT`prRtygVCczAe(_RiZ#w1*w&`G!$dHjY=a`#|$p+o{GPN|>9kox89u zDCxRSo+n^k_%?!#6e2AdS5R-31B>KCLn6H778a2`0Kg~3JR@YVV$dpZ=eipBhy|Dc z+Bc#hi03i#kGdZ3FIE4p=!ekg51JnSk*fbh)59NB{l6>vPxUQQimX#a5mZJrwx|FnBv>%kwD zi>E9Yr_#e%5+I|GY4SmUWIb^NQ9u%Cjxy#NoBZABx*1{dF|k!_mbw`b)uy!c?GIaaV( zVN)|edh!53By1yS22sThq7Lgh?=m0}cgJu}L>;&?@!n4ciHA$s%o>J#Y!8+&hHUyh zkVt4a8`+`i5UI`;%34S;D-++8uze8-iFP7WVLbWE`Ih_9USUrvJfvsr>re|KpOa5; z%nd~6)6eo8d?^ho@8Ws*;C6(&aqGweMo(yg41qOS^a4b{*nkZ`hRg$<{4k`3XB37Y>gli|KjT7M2Q-?hYRSJj};u zALWAXBhL(PrYKWpGVPGMC9mL2^nD6K%@={NWy0&T@f_-X!N zHGmI>Kq21ncIav|BC}X7_PKEzX@~AsKNBhv>yF{}iASsll>Ov4pe-hD9B`F{@E}Rp zbV6*veeD_@parJFX{7Vm0cebW98kKC?*I|r10rx0yw{P|amKQ4Qv}B{T#OIvb4OXO zV}n+(O8WRKC`5j*j2jT(Rlx3hF97t6^(4<)>|p)gdu2rFW4>s$7dC`u)kLZ zcXY2TL0>G!s%~tt>|dFni^* zgK1FC*)G6#H|Kz17skoIBjuHTtM^3_tn;M+wc+a_yLv~(ESQu8aQ@f z0TvQW*LQR=3%`0}9a=KzGLDz8f|YLxQnASf|oaqyhf#8jIsa zG^eiOo#0(4M}y}!BtK&WatUW|EJAMJYW5^v_az^J3>??0*fO{X6cl3fYSa*RX;i`b zmkx_w_2!;qDJhhW#Z6%OUXBB^eH!+}Qh`0m0j)#82*7D zp!moUCc~vn5D4RYsiu4a-;VOU-e=^AphXqSbDM*~1z9NH6SK3!njf;Q%Kl5k(n+-`eKq=m+~e>WSDQW^17gIK~CYzd_IX zuva;SI^+w^T=E6Vml)zSj{6Psg7v{t?ACQ1vq<^j6Iy}a!20B#SXzR;CBPw zdDn3~4HSViAP<#0e3lU%RzdAzb+FqAY0ybv@$r{j0YiJSvT($5ncus0LX)ki$O6Ow ztGpm-IMN$}se^%auNy;A0^%Q`Lr~ zFE`H!K6%fEK)yR3`e3wQW2u6vdQT;ePk|9uL=K0vzD<=v|EQk!|2 zCzU$<3Yesm2MWx9DFNe^f@MjVeNZBn42HS3RO5rq6zi)EGqbH7%8bo%&4+*>-4T-8 zb3kZXxv-Gei6J{pUSQAo1}^@&^tb-S29?%zu?@1@H0prX!_)=f?9Qo#+k0yRAJXHs z@GGn_8;X-aSLzLhD4L!NsI$OC55{2=a=_4$8|HagLlA4gvg0AnsBbpb2P8jw;UY#L zaN2AM4|__F2axr}GGhg_s=WQ!0`R)z!7l++C1%VK3nL`}@*qH#QIwq+)Rvfh=Le$U z+5z$0D7bmDy?vpNGjv1{xyuE$E-4X zdbmdH1%BW}*mg|*F+u+c(?J2S%grHPEt4PKf>0KkHhfHYr8h%w(;64rgO8({(Q5%JezkL+5)CwPUier(-z z8v&_U`qS9nT<{Bwz$h89V7XCBp1kA~j8@k&YuZ8Ahdp}YC>UaX;dWTkj`N3w9M~CI z(ejyq)Wb^w$5sJ6-7v_uxRn>p)Az981G9JyFo1vxGu@269Jollrtw>PJ zTKd7>VE~fh?#%k}lKZu~!#EVu%Inn?nB4*2oc95(T$whuc`ffPu!(%-*3+YzUv&P1%*V0O1TjqhP!cpMzz5@W_Zbeg#QK#u6{- zHK%mrX%Uo+zN1@blDz^3X5!I-tN2?~6fquGA8#^xyrM2!5(-j$`2@V?1I~}3q??CX zFBX|=UVUi_@%FflqZ#+Q^lf;Yx8aPi8fdEc86nUWmOil&30=Eb$8_{pbk5%CNx*j| zD-b~AxSECbAT4ZZJ!|O^odgLSd}D!DrpeQL2B?4ztTqrB#1}EBcrVPzF#v}!M7F13 zu@G)RJ<1~t8i1ttaa(y1q;r@&08KV|+RM`7M!KE`3&xURl1^WX##%JMRo){!W;YV1 zgUf=2b$Eq62FAaDpWdY+2^d^?BEXFo7p)34RXHFc{+VqLMb*U=g5{uc5Zk4*6%Hor zY05O?if3sPx`HvAlHHwb!m-{55{gPgbON@|)DcQ#82kZ!U`l{eFbXrr{1)sWjnD#9 zoCQRS1#LH<#vY459wXy{zc2>IcQb;CdM!)=7Aa|$OyMN_6&~u;7hWd140D*KJy~~r z%Yzsd!01LqzD+p(8Z{g+lJ_x4NNk9 zmSjcL71xint>9-&+&j=1X;bv|W2Gg`*A)FkP&Zl4LHb65Lz}d1l-OC9V zK|8QFpl{r)s|$C7D&XDlNEmFS$!r1E1t7i6^a<$a=lHvU7O>>V(PH}>9DH)^s+g=t z-g0L%G||Y8`Dl;<{_KQ1oW_qV8Uob9c8jHb9s34M2$6@u*maXpAUK||b*_sdBj(2( z>jiBMfKq>ds7Qf-935#9hvP@s>L4=%k`3np5+kg4Rb--IX0g&|wDKsU$n0oeYg#=sd>?9n`Ao`I0EPlv4nV@$2u!xS&OApJpC0XTqGW9CbBf!i9&7w%=JI=j}n3# zF3>y@vJ-Q#pPd;jrm5216ar+sVvpKr5rE*Hp08#H!_Vt55;Cu?K=}P$apdx8;U{9Z zmSCOT;|Y&6bHHVw_2>-{7+Q*t zSHO9LTcD$&S~v_M?jD2dJ|1Ym#{u#etPj|6zx~-N7B3bU9mA2C?1E;&d2zG5qzIYC zHL-Cm30R=^DqGaa;+MDig~XhO3^S(mFfs@yg%M){0|ea4GF;Sl7GOgNy(KCrsY20Z z%TE@L0SHG&*a0SZVC-R3zQ6?ccwt8X-Uhxv39Pz;ITUlDup-u82Do#c5h`a`>V#aN z{|dJTusl$8u6R8+ESrrm>O6cpOcdbw#2n@~>Q5}osG|c6d16Eg6NcG;&T7dY7t41) zAXwuFQOV&SAaj5Nq;!|#;4uv5rcdDg^VZ7#T)wp(5199i1AE(yjWM$kMk{@dilg)gwz!xk zKMnitF!RMOlo$7m7DNFrX5cb)+V2x{^9Ejru2#uBbQ{mcDy)8p6@ZjxSkkW7MBH$H z4;)=$fjK=uLa8qckH?MgZ?ZJR7^}k#z&9fIC)M{BG2jWz``NkNSUi|Iw*pfE?X`7U za<+QH<_3PC%|hKei_gO$GyHK%a6ky%m<-DH%EeLhXxcaCVkUv7U_IAc%v*-n+Dad33oAoy1JIVKFf>*Lba1Nn^%NQEPhWbKCA-sCG-ckee$^2 z^13Y(036u)Caj9}Ed%xk7_yQ@$^Bvo20rKh&W9z8#TxedjsZME^~W@t8D#?x=ng-N zHR6Mh3z~)A8&$5LpbTOD3Jm|*hwEd1_7uU#K=z@(`=#)S1ucXyk6i>?>UD_`PMPLr zTb79+RpLL3FR)VZ+EiI=C_nH73o0DrR(nlbGkw85aAn|_1whfpm^iq!FFN7#{@fS0 z`^<3iAucZt6JKcT3J8ts2D@Vehv~o6uT=VJWW*wZiv79!t{o{+91d}Zi`;9zKsSjr zhRZmYr4~4Rh}(TyxC3rB`hwg*=rM8ySni9_51s>*>5Gp5OTn!@ud$9BbAoBvfflZ{ zvjS0@sl>#Ey}7V=QjwWWdc+i)B`yZ<0@$)5FNg@M0t@8xK?YF=%R3}_xu;%UqbX4D zepPn?ma{tmwhzZQA01D-t933`4{cGI*Uq8>WFJ!ii!H!)U0BYJ z*;*L102Ow@q}ssPbQx{0X$VZMZ?!fN@QW07i6F}WfV;bVzm6^Y7>rTs#2($y|6AgP z%YtDgtQEG)3N2WcF(IVzc>h{V7o4^Ut#|!t{b-Wh0A~`noNlPfEus5=0OJ5I_Te%! z)Zfr%H0XmNDd%X`ohPFXlKHiZO#2ktS;Y0{A9=oaNZcQc0&}o22RNT^To$LsrtJYB z;me27n=DH<35CLdL@q<_n7h_{iUUuJMeb4LQ;j|yfcCut$|hurtFdvnXIl zs8TQoiXK3gEMGJ-j7?t18~o^QJkueH!G+Z-9MZUh=aY3$mMH@5-4l@i1 z?Ht>o9|aNz8oN3!1e^^G0)3p=99%6I0vAfQuLLZ$&lM4aNomJpiuNmLrNn~&2GZ~^JvRnIN5JmY z9aF%!=1u;u3jlu_qA6jaTClL<=Ap~Sd7*ir?H!cb(TsEeTMpoh)qd>w6a8n#8M7$B z(Wy?R5RKjJ=mxuU+_5DXJxHw{Rf7V1jhLGRup35K!8rzgxaI>mhd$p2KJjQ*Scesy zw>(C}Y5sEiwHq3_RRv9gHNwx(oX!#fjJJ%lwwqy(B?au8(;j!(c~BtU6>W#$rUC7@ z4GLzz-)Ig4Rj$~mS*Eb@0sf|^!llrGdt&@E7S))?N-z;vC7*x6(TstBfB0v~5u9|s z1Fy-pmK(^qvco^3_t5|M2@*xX#li>+5zT5(qkse=9N=y0lRja zBFo~8?rs}r1Xf!%80}lxL1tri;~ZuwxLEID2ydW4d338oeG!%nZ-ay;jSKH70#NG$ zp3hcqhW5bOUQonkk^-fbN@5vPG}xRnCQF$dC}g%2b+tEf`(|r_>1c4q(qmxZ(eFxk z1`TLE3yXald1L`0eq1=VD`trf`(lx`ugx?sYp6o&XGn z`kM4;Jaji_Yx-QWjh2DQGcJP%KsO;+evpYm)*V1-hCN#T3y=<-TRAt(u+0u_#`f)s zna_Ge=(OQ?_HwYOL#xi0m_>+SZosw)jJ2Wiw#=m`!^UnOK;A@%(F=@y;~M{ zvZr7lSxzyO3+Cmc;L6?+xZp5W7!3*x+YSKKpFGvPcTu%B)v=-@afrG=`!6^6B zccl#b3OVE_I~`hL?(IH!tSP{91^!_5FDnwan!^(SZ|u5vcWo8876{Cf2fEjnf9F$IGwED$<|aMQ z3fAB=Y&Jt(AFF6^(+OG|PB0_)XuNjWOmi5)NQx{-YnLOyf~NT9(iV=KQ6_6@iV?88 zf#(l%AHi*Z?pxzot)S-lF}>xm)PuFhzMY8+7%jbOHJ>P68=y+_!hnLJn*knY>jYWL z(~Pg-mCNw_F?KW!dVt=wT_FW0s(^bPK5hvIqskr8iW&Alh0DIULkoYJuzEp_VBQhM z=n0uLLI&7LNxTI15T-yeupAgBJQq-Lu_&+Q9zt4E`f&*xnG;;bc>2@hF2v5DCox;~d4RmQ6j(e!1rL#-Su7oVW{E>@8z>(}XD)8=QL^KQ#J76=W^OXhO8gPn>iW7-wUec&xp0W|Pp^ekY6Ac)*F z{8h-f6STwpybT1803b^CafAR**a-Voqn$qm46&7fm)qgHz^lc6Mg*Rp8{sk{oLF)= z5;AUGNCcQ-QtjwKV22)dSvBF_L@AjhN+ncz@vZ?7x!Mm_+T30 z;rX!ZSSPR>5M^_>6^(+_Z+G!6QvX1x&YiESuSK9YAN1gy5vgX&#Szb4%E%hCCfIR} zbt^b5jGjJS`{JS|X%w$BlDxx;DD4268Tv6=&zj2U>aywO0l;8zEs@sYyglR45nn#= zstItja1BTe1kHvg4BM_noqQVL5>#@SI(jWeKwl>A#t@KsrMyY{ScfH=b#(mZ1SLRi zkjht>?$yXS0TtzaVQB>8g}1JLjmof zoVG6>il-hGTLWys6|?m4@H8Weh2UcTFF-A>D-GM(EM1uwUhTTUCClqj)onLKtk2USKo8lME^zkaoI(dR;9CO_ftuUDh2*K!Ys(tS0MvLe$Z+WlX2X}of ztnbDb_-^=G1SR4xvH8AvgeqRw13>()&YK{xw)jNrk@2=iT6PRwT5=oAjuY&RnY2w0 zgJ)t2aCZQYfqo|22dLDRN(ew|N=ANp}Ls@vvKH#JA`_Jy!j*_|P1eE9ZVgoh(ybFqgJF7fR zlbGT!KFtAJrg46}$s*7C>GGMcg^hbL`?O`rc>Z;y0<^y~UiY$M%{YR=aU2koMa9Jc z%9W7kg%N8t;Hyl*7K5PhW}N0>jgr0KCEES)*91m5fhGuU{w?soS z;^x1C!qXzRWR*@gU4`X&z;0>P{uqGY0PE_AW)j1KP{T^--Y}r0ov>;o#S`zuGZjD) z8U@s{S{TJC3LN5Q2?xIwH#{c96Wzg#AaChzJ3S1{y!y`cU@T zV!aj4$By+EihS?Lm#EgxSz|+X>x}}Q$~Y1*G}r@ci1oZB1h)w@yv;mygT_8@8|(Ym zTf<{Vi|@^L5TO>uRv6!Ft;b$KLbHUWlY7y6Lw4H|sjt z^tdA&>;`-fgOt9E6WA1Js&UG3??t^dPJjknc4xV+Eu{cIHpPq@Gdrn@Ly|76NH&&}9SK1=XAuH$le(j%!dm<xhi+jK^A*=ww z0gyM#3jsAp34ged0y|imF>!O|W_~bAyV2ONG;c)4Us)xjvRO7&oizb7%;0SEQyIU+ zP1hW(=0}OxY)4M$B94!X0NZ0c-+jFcn!&cA-ay;;I__wM&%SX?9vBq+9eU-B^T8-NP; zr)^t{ciE%}ueHrY6L+YkVEch%T)S+kEz2qI{Wu14x$?cxJAaen<9hnbP~W8 z8CPnH%xf1*LVxX8`fTE81FDDIv4b-O8^PVh!vf+56JwI{9!daGAn+uSS@R+*)747yuR=)OW_1mEu-vp zhEGuUWQU=xD@le-s{u@v?O|>7`#LWP1KGB$AV^zQENPA(SwU$+{|L*@EzMnDfMvbR z2QKI;To&$$a?f^S9~{Zj5Ab%~{c!y-rT)PIp{MU}#=5P0znO(h_bv+L&4+cd1sf9u zkJdz)BR);~X3Ly;5WIf)QTUa8HkvJb#L&N_{{bxXujqf!<^LP{9~7OR>pvcTCb;QX z&&qE4*Wdyt<=lt!tSYy9Ta_w$^Y1-|P%JB*AGed}nyx&(?1P2K7Mp*=`9Rv@vV+ z*i7!I+~$@bV7C!{yozbuWci&vM*ZD`-4Oh1T6SZ*Y)!PuywFcGkAt zma*%kGbVm}**YT2=RZzUQnvyT!L)iG%lYi?i15euh`;WR=uQ&3v62oXS#{?;#W-PS?aS_-1`&em ztX;QH^fCC%QVFZe?Uaz`)0JUJe{Nr}(C6j+rnYVNzAkt{Prcl_?_C+tJirjU;rI~y zFU_u{zQ=et;$oV5naxR3IqWG`P?usY92#++8Ju9G-8SX$7=CqPi*03~JaAf?;UH2EDT zM!?>l{lWJ30KkxwsMBpmJP;X+)q+EsZb7fT5QxuyOSh09_VaNL05V#e{WMurUk?Z7 zIN}CeDd5FcW^79Ura=FVjL6zvEF)ao;&4ZeB%8dRf!BFNa-ahhcIf+GE3#tyz5wCx zt$-bF_#&)czVEN00>6Lg@aIqcYY!cM`qT+Hg)v;X5g^$6DT%Yr`m40H@yJiI*4SF1 z8=rtcS}vd#V(XpfJI?yGLVHM4VTBF{8FCx05MH{Yl{R2I^=h(__;CD=qf`oRe@{_y z0HdWCK=;RW;eWtP-ht<6kOJ0_rOqOBZqg}wSv&H?Bk)YxQ6sd_9>fpg4i#ROOTq~4 zpB2&_U(bDidv25*9Yh|!b~`lgcL!aX&2QLhT+(Z6&TCx(-?@&XpI2393p6~X7YJdO zhtuYElP{bkFGFM7jlFh~?NqtLA2BS+5P?y4i$S4D1yyQRR*i@$M!j>oST11eyYLsm z`cZVX0}hg@xVXv*an&eVtOr2Br8!j(FUd9Tv3t@U3ufkGpUe#b%15v;_rkY28_)PN zZt`)SUaBTu+O#Cj!5B{MfH1FV1qpxJVvMLeR$xGOAT^J)(;*MCpHdJ*_QN)VW^o=? z8IWTTjy(ZbBDtrfn=j0%??9-Gi$x07ujLH7yyKSqY{v?>W7KUwXJR?_bK2IAf}WV| z7Ww(Pg~;bbN@kchs+Fv3wAuD7x3hX~%L8%#C<&m?KCp}yOr8wfy{9!~b5q639=q{( z1+0L*Ar6-|{N-qp@C&m^{&F-)_=VXde>s{Y{K9OKJ({HcHku^=Fq#A|@^>eb{FlKb z;crhS`7eV>!rz`u@?Qp%gugwRR*`S_q+3Z+QYxLy|F9`WE zm-7xA9V!gVadvXOY$vc)8oo^8aupb?%~KGC+s1L z*P!&QW1NmaD2`54FJZGha<>}fn(zIY&#*&)puWf96^2Ps=D?D!#-a^p?p2XgH#+aM zHBF28^zVN^f<3q=7mK`@#>4qFV z?=&esZ*T>)5KlV}lcmzdR*wE?C%q81@-$yGFIZAdyVti!vnI5H zyG0Wu_RD-fn5#oYj$OQj&2p5N%?%dTIDf;mm4!z6Q>NO0YuF#8cEnHfmmuUlf)x!D z;XN%0S$1(@Id0H0a*Y%}03P6vBBv>~F;f#LyV^mDT@ENt4}H%W*jK|#B`X=$o;Y$o z5<_I8=ktcX!}U6MYYhq(tW@Wjp1@f6_L3aiO@fHYypm(Nu)sz^kX`nS)j`S269t%t z+dz8os5(^I;r%*W^n|Ldfa!A-y~*>36=@>dB=C(6(O^I1i#A9WTW8$-4uhx{AJeSv zoK9tgc?Dc(GUaAprgg1p1{T%t(J>_9N4Y4Wg zDa(4;I1Mz1SodUs?#$=9v5P21atiyhkiFYWYIMI9>_xfk3Bnl^UU-TSj^tDuSj5>A zKQ}7q1c?212L@FhNq2%_OQ+LIUk8dD7}EDN54wwV z&1xAWL8G!=RB-xc^Lw!?hGjo4TW0aKc$kouBTg=MZmR0-?& zTHk_)&uB_8pk$57F`VhK`*oKCFs%0kdpQ-W;*z2ybzC-dlns#3SJPFGQwT2`bMbE0 zbl)s|?@oKV(5Q94ht$+QRa54CYPC9D(q$s+y^?x)O01nfgr^CXgPN;*9j}1$?wYl> zCz+KQE%Sg~8<+!pU7+6U0*fLiCQ+@=Yp!N-UX6*y_cAih+*{wMOT}qemUGTet6pX?RtpZ3-1!Az(034I zTKx+K-8_Z^3!L0zI4yk>*ZGr`YUK@^ENM(l%+lXbwZ|oVn z=9_uOt6|LE+oIe{yu_|lXi$KD-s1v|E<&;uM0PniCZFiO#*h)#TqjU=1nha3Ji z3?Cj?dv(Ga0|^46-z)D4!SQlr7>GuDXGM6y7HU!&H{g&15u(O__n6%dD&o`Q9-KE2 z1Or8;@M}t@*+;o{aI7KECx1k6$Zg#?N(15x*&*II(LHa#_UH$za7T|(C_AaYJlNyG zi99UvcoYMn+Ae80mLnn1%QbB~JL6?n0`GnDX{$^}0v3iZONE^AlpP{w(*%aGm^^>& zn_bmG#8~Hv_Yat_n5@9xGs-`}Lz;m5FrK`sdI*h1g>4GGGKRZj6sI+XPy-g-fq~0; zwZj2*!p7%oCevGy4U{_XT+Eck#cZLmgv(h8&z_Tq_>6gfVa4z#hg_htwcyGI_{_{) zaR!AAmY1NT?C#!MD+1&d%U$793OIL z$rc%0rsS?13?@(PnC(KahBkXU?2Yn%F#9ZmC14Lv4&VblNpw!kCuaV2$Z5W|)rM;W?~41E7P+y5ov)w6Gw96XD*)#Fy>->}j+) z$7WfW2s!QNQW@xdb>qV$DDdTdM3zxi+}kr{QoxOmE%OuTICP z_P3+ZF5A8b^LioKM(W;zV}-wb)N517!Z$ZaEDus_e0hWxvPkaXwL-=@2+^r3z_odl zP!93Xi#nL4w&H6PO$uUyHE=q)!PQ!{L(vlKh{(=8aet;LMfA;f9^Ez~ z3`#g`FyA9#`U1ihkp2M)Kt(PUZ>N@Rq;6LB*vDaOwHSTRk*@s|mW$QLVd+i&q+D$+ z?GaXRIrSWZbvOzSuZi_>)Fz%C5N=Nxexb1}NWC+AFjvK?D9gbN$DWGSC+HIq3k7!u zMLR@T@jftQAfx8_3BVxB8axPtB?BvfzhS^^{fqmWud~4*nFd@j8=+bV;n^X!{FR00 z$HIDakUq1R$Kmr(X@1=iq?B_q90=SR($}%aqVoRW_@`YM?_n`mg`!=~?88}iVg&E48gVpTo%_{Lz4VjwX)iOL#=tlVE7wdDvpE87x$_iVwD za$qqbEk5A1@&`;<0fboA<|s~XE1MI8y;|tIr|+H~KKFQZg-2;fOT&S4o6DnfpgYlq z2?uE+{71PwnGZ1CJmurL#%I4{&UU5T_DV$?6-_Z0Fr?GY3^ZDnovuCJ&T{upBo!p( zY!q%U?_>G*gC$3!~Q@wRW=Vtq_^P}ZE^>SW?{ zJ529>*Vh3c3-V^a3YMwwrrv?J4!Z%IN$VhkikpjmGkZd%v)vn>8K{bxwSoP3YJV$G z2AO`G8+&ah0{yX{uG$aOcB_4dYHiJ(7GB$z={ym4USOS7Q;+A;g#jtR=hXl*b_^Vr&{1~B zDiO8=x{i7eVBmf47_Q*UOt{7vQE2vWo0z~=IeIqli1h=jIZV|rxVftVIBtiB zon$M0ZX3kFn&_g(JYAm9Vq|n!4`|N?)YE@d@C0zyl0$^GJKz+b=qx^~Wb!)@yA!N^ zW`p=SdZ`*QjeU&*q8 z_nzx;Ii%FETZ2acOJLf4hs1`77`uQC^L7s_IIeblCQNt47`TwY$-}BKYegH500Nkc z??*)(s}Q@B1+hO)uz;)B19Djw-?2M+?Z&XOhjBU_xUcw55ZcnaJDpp+>oKF4+uf@`!0K+Pf(KoAnZpEOOdcV(nn|X2cbH)&on(Jo zwcad@1Xo+j39@HrZF78vX1(sLLJ6o&c6LBtWN_V*e@FK@hMC=Y7WzCcOx|jD6G+jVY9RCo_Jy_x;#hCqs{hs=-qg6?MlDh z>F(LS-SY&_kc3_Xn)f`0eK9aRC~n^=(HI@ zQ*Btw{qWc$2WH#Ugn83;n)3qHS|pvFZI&!rFbbHp!E3h#G{;_g=p}dU7&r%)SC44I;aV|NUe6V%>=m=!g0oAhg6=LNX;>Ea@$^EfU?Q*0DAb#4OWr`M3a(YImeT=qZc_bJYs7KW6 z+bM-@vHP`NQpryT&BW+AUGo|S_puo-uSv_9qZ? z-pvQQz=EhwZ~<$*?9y^D{=I`F4nB88Q^pe(C{k8<)r zV_cL|OVW2a!fN#5$l-T4kT@;rnX%fTDYM`{rp2e{CnEdifJyUM=n1w%=!T7Q)k77N z=U93+P#dR%L5p16neh55Pd+(5P2=dHV-BAX8z7`jcj)l&$SoOW(2buZtI17fny7}8 zjvYTfJzT(fR-WhpIa$gBW1e?6TL0CHIV|Ec&mcfkcn33D`;Ee1f) zolWT$w~Qk=Q`9LTxOmt@tYdf_l7sf6m3`GRZN~#F3-^$z+C3ZrLt?^Vq~>gD`&9#I z(nh?OJC{c}tM?nX+Pe*4upJGNK}?3J7yCtf#*9WZu$~{Idj)Ymu@w#yk?$VfbbL;2IZPPZU?EP|aXL%(GCU!UdGS>^e5XZuo!RAW z^^ySwjS2n&6Ju|Qfqy6E*axgxns$rb-Okt1KfpQ()R4nsIQ&xz~stzUbzzF)yf z1a0zu*c{4MP8dlWj*eQWNYZ0E@Yq4ZnhiqG`?1u=f!5ukknn0& z*?*6fcDVd8n^I@qeq(CWLAMQ;*3nl5#db)8N9^ulQvPsU?G;WKx2G6$L10*Qq|6>; zbylZ+zPpA6f#Qyi9eFSdb6Y&$Pmdi#N|H^hGnnx5j8s8m@EN*V4u zoz%~|w%z!8d=UTXptFZtzsntL!#UXL;?YW)jy7kpB^hKpY{P!`^pl#iGd#xKJc6Ja zYI>}1d>piomr3F9bV%&cdYq@>*^dr~*ats&B+27gf0w4Z8T|Db%AVzi*!*dMWN+}P zU`v1BsRK+K;^m1Mri$PREOQij;kDB65WBRG>;@ddR-9hT?cvo7QS>*!lWi9CjPK%b zI*X+mW(%X9ZR_tZwx@dvo$U>6m|gd2t8ftc_7n%KQVdw0VfxBx+|!^!G^E0ppnyF9 zOkv^8cF&c45*CbQpFfTH*BNP#of7kap}W!T$Jy78_p9C1)h-1GA6mTkeA30y)8qQr z`Ap}xbDBQ0(yd~>@}6SuflbYk5vM~IQetyD2%y-~;Bj)7XRq7Aa~D~pt+^hZhe35t zesWs1v#xCkzj&=xj2`FExPWucL36eASvcpJT4`P0?knD_!yC!cy zs0ug}f^Qrh&#|lNf!^ISY*>Wq2>z?JHl2%!modVhb=mxrE&a^bx;C&%P5`tV6Ljbx zpwrPpu-`d*KRnbvs%@C7-&MEH=R-w!p;O^8 z@{S6#?$#k;dnWU_lVH}cny@)#Z^IGL(JDpXj#{7t{S&Ko0(An8MdUPn#w;ISW0{@u z+-2>_HEsENEGqL0H61eo=Gx6) z4uJz3H4jW0j)^Qy=&)liMJ*^Eb*Dz-x-wYTfgv6HH=P6x?-%zvM9u@;%w4id{~*B` zzGpb`z3g~Ri=$AgJD+lyyPxPF19EsMdpVBA%kJBolg$~)A=I(vS0ws__4 z`l@j||F8^pge^fLD~pnL-5mE2njx_xC(l3qNh!B)|I~8B;JUTkxHPx7IvsA;ay#a) zd8B;Y)}!^$*{J4L93|=T)Ys!Y^NnIV>#{xrXmQu?o+~h&`C}qUS{y!uf1jxck#D8YY(V#kgh`+O^Rm_pOrhF zPKU*`PdQqKiiH%MOoa4nOatWUa&FDSA=%}L=viTQxV-Y;yw5(7da-H1yV}w|Jmc9z z5HqN}g9a>Pd|C{*rAU9uftm-Q?EWS&m2-_96A!5wPF9;1%sR9kLq5XXjjVvQeqeM2 zPfiAA^G_2uCT@L;crQe{pZ8pe?IH|w@L53;Q+gP!tOjnVh>mup89-2FxErM(FJ(c`DYI& zAF>P`G|yq`KNr*MINrxF^$9c;XTMfQ?)1s+>?NnNyq1aY!2ov1It36sn77X~b#gca z+TqiOrzDNf1hFu!x3g^61jh@y*hSDDXpG0h)cf8h7E&q1j`BOq@u$E0XNCIi20~dK#7I(?-w20~KIS ztntS+f*9C%%XF7#_Pv(L+?Zxdw>-7zxRf#*uFZCvaRRdiS%>2o5l<6#r^wtnA4bSL zpYYnpFT`ou#bUAILG8^6LHGtoeq0*+y9K98^EM2P#JCwy@pP=_sf3<;G2>1jS?_rP zi;jJssWs(s3ZqdUaqM}Ag+e?N|B;=Iu1$Wi!%kCA%j$_;_XoJzNz#VS+_SBp!1D0l zae4H7OvGZodv9y@Y$w>@;~{Yp<`<{gJjZW3EWm0vkoxej2pE;KJL_McekQj(ZK^Pd z`-XNb#|UzlXNnoab$YmL^t{$+`oy!vibvOPj&0Z=Y1gLH<18^dc9Jq`*rt=?dFocu zb%A@4JHD}92M236{&j8%UHHuihi8I37HAg$Q}Bp89;Wul&i`4;GXanAdRestL1b6zQ=d7w^x z$I%>4)^{AuGqFBV`nT=FYW5)Z%kyi_&meZIM%w%gVh5O>;oO7Rt8*y2gPiSK$A7!K z?cT*__dX-Eg1{^jxy>YvVMhk!t2?CDrs5R(D6g;$?;e5b0Ey)q;ttDxa+do4S$uh<8)wW?9gMcVl;H>@$+Lt zSX+g<6S&Z`(93R}bAq1J((fJS-TAc#FtW<)VfP-@g{C*btp)K3%@hV!>v%ly0T5y3 zr;)&B`L?*f+A-bYu9>}_njN6)ITMF_KeEFgx=5n$Bj-P`AN>jV@y7v6y?HtTU(Pds z%9US zJ$&xdyjTC6n2MPg4teL7D?HwC?nHuzEWXjIE>Aj|-JLaxxDzGa-meQSe1_w04R3$T z=&&HpKQ%O#yTvKE8NOAZ@}AVY&vcq&w}yIl_VRQgyQHeRe_AaER&g4fP#xZgGYoNf zhVcO$HeQ|Bcq%EPv2V_N$BXu9;($-uCrWh7 z#Gmq9#i=wIO{w_9uOyz42R*`Wc#$eT*__N9j5(D8zs5eC7Ft8CB@{QCb7F-Wn8ag& zJwFYX3M8d7%m>A0exZ~SJj={+B+H0CH}VgL!ta^z;U5o$Py3)s z-t3eQFyz?tJV2MHt;W`n;Z(6JRz`RN%ePVRntn%*V=p}*7*%Urvq77u2mQj=@N<19 z@Aipi?Quq2j0MSqFr|BZ&V%Fap37wz!UTUbquBSs!Ji|tu5fOZkEu%YJtHgUeMZ(k zOv=M=nnRMG9WNUIC0G<3&gN)Wm`u$J?_YoCW+VTn$fQtG#FNVX^mYXpBAp z9{Xh(uYChORu4F_U;Qy+W}n?{C+X`jDo^opbhigoDX7)PT7)iG-MImFaZ)-!Gh3)* z(fQYrNe0LqpJZ6TS~XxCa1(^>8SGI=VVz73pCftz?bDMiokqz1L(>s%(?Z&QGX+=< zXU7}S1rS_Dh>x@!gXw@(>`6#y?ISYsNR@s31pLyb$7y)}HhqdGLl!Jmw4ZogL&Lf2rbOU&})Mrd(v7o0^3vbbFFg^?y zn_mxoffH8E7G2Ko^mN%|gOhd3*rVFoCsbbTNVSTmV=jmFmF?c=XU&B*norAyaUI-T zI)plR>nj|xWHoe2!2&m{JG0PU)WyyvPaj$Pj3Ubg9Wd$XsrG^k_9Ht!tsxeFL`${v z(SlJZ$3b~Q+0{PC^LJZPED{frKAH6-W^C(oQW zYOnq}?R?woBt)p;wORiCRQJMRst597cs&#gz4CB937JFb?USqL4pFUsMNr0_K~Q{- zbJc@h&o&(?orO6Ks6Lj?$D$!ru@6%Amvze@Ctn8U(ZJ!IK2;=ZTY|={Wvo231{)DhCq9`eQTB~P? zBMrP5oW{eSDvhllk4=5qG7}rPpWuk=%Hum8@3pMJSwGo8!CZJ?i2mg?s_vo3PDNNw z%UQd&d(M4&(TKKK2D^~~SH=vE*9O1j(L76FWLd!L(eL>EW6#Pr0hITg*Js(E>shIX zO$s@N_*$INmc?t9bctA;ZO)4B@uSvldNk%Vp0cS;DvnhdFx~@|wuIc0vS4YLUK_I~ zdUj;x1;zK)R4~f$fITXY21m(`c}<$4i0N@6Gn~l& zDaXWv1drR93^wdtn}Gr%+om@|!B96lL)y8O z6Lg}`r*mJ)L3g?gEOg-J+h+R?H}7Dg18C*2ZcG_y32`jW(tSlg_zQcEF>Jff%J)Nk z+CDKPII6f~H9XeYL(VaL5O2fvb}7AhOY_KZ(^?18W$E2MTd%$VPo#y9;z_P(VdbIW z^km-U0T0b^4kT%)d9M|Etmm-FG8t?896bgVU#8oTG2O*u>d?6!rzg9<#_M4AVnqiT zcqEz!ORTw%lQysI%;(dF1AO*zO1{#U^=<;K^Ef_-$N0Uv50BY}qiv_5KC}Ftwovdw z=*Qd#C?pTcc=fRsue?sKSWc9V7jWxf?>)TbwLI%IjivPmTMeY&vkrLX8)3N&<6EO~ zEW?}6Wk>@Qhsr$y9*=s(HG6g+K-Rh#Hm-A^=Thzyiee} zJ+r`)*w2I)0pv4q+M$#^Q&ITG_I&chIF%hBUR5&;4%K5~%wd2Y`R92}%`uRd#~U0@ zKrN7(`!Fv2Lu`2uf;XUXbx+$F`v}x$7XzN3BT%30)RBDzYUEXdi}u*4YEt~PU3=QTF&?{giuD?&1?o!Hxo!-+Wv9apo?po& z&m2q1Mru}L#0!^=pe>L@hRZ$r(GZ8tA!4To$H=Afzf>II(zK_GE&=>%e*@2MFFE~QGS`b)GM6~nsauze~*;FEI$By7p zUmFkh0H|kp1eOB;ob}N{nj4=duIg#VaqtEn8e8ijE*720Coj9Se$;EnuI_g}DIUHv zTybXZ(DSwtNIMvzW7ZGv8Hw96VN*uo%AOqbdX~}y4tbrRkUvjcL7c(#oG@I0&z_R# zd8Z!d1;BLlu1$V56}jW4Xr=&>jhzCtw$}`xrRYJok1zlU9R$M0jJOXnwBiG_6nB|F zLaV8n1w!J%WD~@2?K8%%+p$|%;9&9NYi0YM8|EP$4L@IPQgFaJp4%#R=fMKVpM8+E z(^0-oi+P=ZwbN!*$EnT z4^i7Mx3-68KC&-IPCXjifWl+cA3yaO9olzl{^-tC#$4lP#yLY7PFBshT@Qm}#|kRc zcgO+CWF+i|H&5pv?>9RR29|f^Z$>wmfhK(cV)JD2U3P9t^M2p`*Av* zvWeHSGokLt9eKW`2iHeQ-M4(NhsJ?`kgcNQEv|dr62dRwMk#w*65bT$yxpB(vKn-< z+r3}=|38{}4_mm@OoIrp#G)P_)$Y}=kV4(L>D>y=B8J81o1V)%ftU7y?IZJ_Sz0Tq zqTyuAPCP;ur0_ZXz=OJt5x?nECoseMQN=qJE;|osnQ8RYCro?6<6_YEaawlZD2nkl z;pgGE#wigwhu+ItRE1)pNf|u5$BHdJ8j5H$7xvMJvdp%uG@GzA@kCB7VBn~QyQECX0O>kdJDtQ@3zktdk}}Ux77B= zcelIo%ekzmAUk;6hR;6vc&qE}z_ZlEnV#9g1SiA|NAG1130*b4)^C7E(23UP=KzFV zNpyePp!n|Uja4lm+2tEzQ&@JtadwFAl|AjUN1JMnuSRvJmV7JU*vBw9I@Ekg{iMQ8 z2E4=5)OIA|{A%xeA!dNaUsl(TwuZl@uE^Q4QR#GuqDKuOVsqnWb7YvY)g`m}SwDll3k8ofbiTtwFTU zD0xitW-Df<_5xTu^dEW~Ovn8jdK>JZ`ay5S9`|sF!e>IGXVJ}FW#&PTplwffN)WW@ zg!DbdAa6SzKDGEF9t3QpZjl=Oifw&+&B+A7AfcJj?ss zpJOmzFd5(ziD#K^Si~E|Gn0(wkRN`skNM6+_U&y+g=e)&Pt=3ulp8SQug0`~Eb(*6{Vi8M_AVNVM6;xp% zMyp1Oi8SpeJp3b$Um}-6t_m1A7Epr<+3|z_!S8O(;?$&@6ifiUFSh+L1_XA2R>QWx zk8Qhk0{EYSE3M5YySIRb{Zfs5;ortATiJ3#nJmkrsG{4|AP5qLkNZ^{9~ zw?O}z+gp1drw>4ex=P&u2ZunkMA_>e@9yjF?cX!){(b<=<8sTuX~T{H000JJOGiWi zmjIvu|85`hk^lez32;bRa{vGf6951U69E94oEQKA00(qQO+^Rg3m6P11mfWQC(0|0>mfWQDiU;u#ufWQDiU;rR6fWQDiU;rR6fWQDiU;rR601y~JU;rR6 z01y}e2n--FSO$)Giq>QnHeuD1F|bnlI%ljk#yLZ@5e0VV!utD#*f~Pp$`}$^R2K!_ zQi0u}1SsOd3T)q%N4zMoo1i8DsAM7BK{_o(0bro@a;PuZI}beA%K@M!m`>6DqP}3b z0&99-hXMl>7~BPipjq3G87T0=m4E)pZMOrFZ>hlk#YyhgRDo#S?XAb?@&Eq+oww)?agM%sjCsjb ziC$B;+bHl3o^6MUyHojWp}^9U*u+Zr#eeT>%cOB7h+dS{VT^IW&hLgWfT<6L?l zBc<3osrGRlQu3B;pCz#S+pE!tC56sowTv90@|sqeiL!1eB)MZJX9wd(0qLS;Irof{u#V*HK`Dx`VWes^l*VRJeZ9H&J!6muXT<=!v zF;;J}Yn)3fX(jbrQUp zdeE|l~23Du+QrK;Yon^-{NTPW~|~X)7CvF|Mq;>q*d01zRJEkUU z#MVlY-p#9yNNeqJT)E-agTN&>NNC&F@sU=1y7!eFe+R48E8CzgD7RbOZ?>I~4rsbd zIgYSKshen90{3VY_d3SxoN`YQ&`{`>ve;gMM|4d~kCF29J7s7}yM<@sbv_BL2tZ=+{o!X@MpC{jkx}-fL)F;d*2dKlGeA@Qz)E;P+js81#Tr$ zOC_hqagVxY(p|5W(P%wMK0_c{##lr<9|{_^xhKIk3S8skRy@XT7OQor zWJ_j7(wXve7X=>uxPDqAv}Bc?5^o$MskA2$4-BfwtfAPs!R)#H-9~|T&pK$IpJrXO zPW$P34Jh!<)lz%EvFwEQG6vH9J;np?M!?X-${A%%HmmzOw8) z%h(VHMrqrD2V6vf`zSF{v+dxVd-I%lL>qt3JENJMAfmuS6!_{cEQ*W*@2bE6Y^}fm zKwtpo6WEt$&7i5~*H;c5baQWiqp>jE&)dO6e=?41W5+?obJO)#CJ z{Y8Dja0R}@+v))di~<7`7zG9>FaRhpI8ZjyZNKea&KP6f-My`mwb1|y3_t;XW+-sz z?K>YI9r*0xvlIUl+dn{ow^3l80%Re&XCX=yIQO@&w7uR|d54DDEiJ^MoSNf*dsi0L zAZ)8z%4^r{Zjpt^DUjwHdbnAv+9cISdSKLdnooI0W2~{+c>LabgyJLez*?{0dLCy_ zih3xoHO85eXuB%&R0Wni+Djh)H3f8jIUqLUEwM+PzGqMV-TcSj3FQrKZ`^l%z4zMy zG>iH1J#nQk0KdQDT2FDU_jy8bL)#nsU31#F_ez{jE%h~3fu(P~%)L1iXxzvqsGMIV z_7yj*w6SD`TR%Tk;C-?MCEs^hz@{LEmf5Mg4l`jjsg|zfbK%FfXE4vTti$D? zyh@Jq*Hb!3>2EDqZ71>+4fe#LUwB@XXl>9VpS`d1yl*@fG(P{XN9)m0e0(rmfjcPg z#SX-dQnp{8NAa-`Z&R%iA@4(#H;}EUQ{Hcs`r5zYlxk~ULgL#iuse}0__vM%`(8Ni zfj?=D_6T_&pujfwcUXaKp#n?u!zl1W6xf~ew>`2A|3BCD!Z8K5&MD5wu%&8Xf~m1s z&NB3QD$m(+E}Gx3Vj*VceIFgaLA;eKMOuG5+lc2MwG?o)oFd-TV-QE#+U`Z;CF$wy}&WZb^Ia`#sO@Tv79Q)o^;M9D};R@`ZL{Goy z-?>jEw~7MWHU*C7hyQ>7e<-F~D+`gE`W_m~kQ(10or0gcS)}Jx`~93o+^J1(74pE* ztVB8+QDNIJ=e<-Oc(h+E^~RDx_B|S&eXd>E14qX|#KuG@D0PA(Q?d{(BCMrar*oijV5Rq_WFL*`Gidz~dE3jc*h-WFVbLPFKsJ>2i>FM*YBS7Fe zo-Cb(ki3ORD~q8q=WW$gT5L|7vHu5)uNGt1u_S?0L@k-lqkS_;Z(XE{P!w?_;q~e!~wM@$}EDH zzb7s>`!_|Z@SL{NC?97mxsIEyPRT;n;*u&}tITL9vuV#d`1nyx1H0#S38&UEUeOaD z=j0*^oQq8gT%o)R*6!nXcNtjk&uP2N zD$aW3LhtKzm3IjRmcC|d1tm+V>)y8Mly?n~OiPJVqt05elmf5#xRuTd*%|)om9|KU z(^-q0^0wCbiw2zhNpXH++;^JNsi)4g#JTjCoznoBn4d1!h)8 zAL~`W)NI{)zQ!MC{MoNlKEGo!^I#H77qTvSkDO-ZOV?1#4fqK66Y>}J+P$0O5Z-;dlG0(`VSkl2FOByy$QT> z76O3m)6hBRP+))pqrdr~fgqwAAsXt~Vy;+77Y?1kbmK0)O$H!wmX=kB9 zaB^>EX>4U6ba`-PAZ2)IW&i+q+N`}iAZ=8RJ zJD-1_|9yY{ivRwXuU~)vMdV9~-_!3u+ww|_qB8-KsgKi_yB<hng&k_IQjnm&x6#w-v#*@GQ_Hq9F z^L?v--~N5NCs$6i{*kEr`s;L#uzl<0$kX|;%CE*hg+I6RYw)Yz&po-Eb> zZsof|4l6w23;X;&!{iZj+_CX{jFXG%5LIrloMY~Mz~_E{FY%V}pR$$CJtw}e@cU0I!qwKF7vP9^@4~~N z0y*3@q!MblTZ}CP&arbr4^JLbjxRS5N{Neyj5(zmuNF}m-kYCk;e2l_u|~g)ZQ>$I zs;O}|BRyPJ&IS2txg$eQNhOz3YH6ikWt69;nro@GwyKePT57qKR$FVmjrR1^b1%L2 z)_WiQ8F3_RU>S9^(Z?9i6R(FidU&me?|=Bp8{hQix4iXjZ-2-8OvGpAS!SJW_BrOW z;z|oMvFd88ud$vTu8pPGd6!*x+kKDye8}3DzWkN1e(meu_@2LS?a!_Lw_pDkw-)}~ zT0A%9_qD%ojjvv<{q+(-b5guBZY<`&jW=%qfsWqU-9ygNoAb`@5mAZ~dC213Tq}5E zTw&fJmM{E$cmH{F|JJ=-rT<&^7XME-cX@UHf85-~)&2K-`yXy?>F4ITv7Z)trguX7 zc5bucY1gc8uInlNS#y@kZ#VWQuKYZFL&BEawe>sld^3Dcn;g({cRo{1{pDk3RN=ec z7}v`W;orvmVp`AJ_q*P2)UWQH$L7=F$vv?7hS7KCVe9kdiki*QTG%7cafN5z96QD{ z?r%&^b@cRcPhqyY>$?U|*k>J)LwLX0`NZMljj@)`bMMJJH$L4pzF6Ov|LF1ITR#pJ zrH*+FWGC*BcKsqBiI0^(eDT7-KB@M%g=g<4j~eROIbL(}nM#UnKB<50`D$GpModrH z++cnK*5NHYNEoXiN6&6`Abz zweih$1>Sw5KM!I$%KLoSvTuxD3TJ-B;g#*Tesg|>1AJN!Pg}T#H10AHl=1N*`&l85 z+ILH#=BMs7!plcUeW&$4WVwfpb{ObVL!r1{ z@%h9Ph4^r~4HX&K)U~*-hGw^q_bG*+Tv65JhR0q{?xXF=J&XslJQ|OHM%<_`CLm$6 z!c}HU10(p=Q9>KLBm5lD$3bF^zqW6#LM!|s{!jamk~{MBp?us0LRgS86MqSK94aHN{!5AG_tf7T&R9 znvi0ih!52k($o@Wzn7Qq8|$qPFTD9c>)JP_;TwI0TE?wm3<%=blP5%WJAR;k1IG&1 z!K$L%2w4wvgCgh6)y#$sE$`Jj*rnrcIQjIT6^RdpT}z|PFK^rjPYQM_Z@OQs5y-M( zVpf{Fyy(QonR&h7qr9GmwOz=Ob{G%W)>;^>ijb5C9mc+fil={rUT)&&07MOi9a}km zIf`*T?;Ehd7-oKMguDO%VW27f={>z0gTk@g-_ucxU1zxyA5zWzxMh9)1p9K>e9E!- zmW+|;p8NY?yg>m^o(%;?J^8SFPkqzCsXo}bl=(gJ=KCoThm1GR7v?WK7%#Bxd)LV) zS@;;<5ATF10wA{Dy8;+rB(db&G|~;ZT(hloV^??LxI6nFaod! zCFp>4z6nnfaljm~i6U zHpZttA$<#I08V(hyR~s+VS{SFH6qvxwsRvb*yi|7rI`!C#);LC{ETDAC32;BkBASz zHDXoE$}toyBZqcjtZRnVA!oeaJ2&1(tF{mikR96G9&`*R$+7a;H_n&u#R4?$591KV z2Vut4F2n~^v_0pFhXRm%9Kpjk^*1a|AR+4e;m!-6ZiLV|hA-WC!p)81q%eoiHBes! z?#7d4t+)=eG@QCfVaA7Z;F;PZ^noXpfWOLlg6Vim{)G&DJN0^T;=m_vhI7JsZEl1+ zLVrVj$0#?3K)w|~sT)1wYPha8KMXAPDfj&akVJ%L;l3-5@K$chm>7YM0F}A8Ox_9W zJhS!}J6c}k0yu&30C8b!zmChy8%wsXf|f?k>29cCFA=Xk7fy#We6W$AQr;0ChC*@* z92UldOBoHQ$B6;0dD+-|10R{#LpuL#gj#JvTkI*_O4BHv-5FBvC zNEIB(1k|HDoDoP0#*7Cnf)C^!kz5#WeocPIj@DZddh2;S?DLE4;76tqI)Y#;cohdZ zI7v-2-W+omk$Q|hCJg+uHV_RIjv}Dn5d(sda##yhiBISGaXFy(56E+6Y}NTffm>%# zB!bO(bN?Wd)#Arb-9F+6)dNcBeLr~qtoq5rX1Z0nCAYdY>94cxnLU=f!Rsh+UJ$%H* zq^*s?!bJeLVyd8AJ~z-cOen;MIfQsT3FM090f4Nk+IGxB*$`R~%Bw*{sp?bFn)RIn z#Rz~C8(0iAy!zIOVP`r@^#byReUJ+D6VKc6Li=Z%cbkzXU6^eQH&88NeR%p-5Y-$m z-@8I0(i9{BBzuEI_kjf+7z4f+LlA-Nse7he3-WaviCGOB06Y5v_yNF zL}7uwU)^BF8^$$np~^^Cg&Xpjp=>BiS2Y%P9%VqB_`=u`D^@@wTs&fhf#&H&FFNTk7Rta`#R$g2`hhmT*S`hF*Quqc9o>A>g%A4j z0%A4n`;F9XV>iIDBzVN=U>up z^os5qGu?QDAPEEnfbamPU}G3`@SGv4NO8UaMy)*;;#hDR09@czod6>IMTgTN;ppxD z@M`dMP*8rvyhG^plYD4Q!6Y3FTCU7Z6f_Hi26fyw#zn63fIPkrD9eX}p>iG*=!yXV z5w`=r^Np32JTz2%k89)Q`Qi8t{Md0{J6FzY{Ua;V)KwL=W1EfLj>w!sSqYDMi z!#v|fknZ{o;(qq7$)>wMLI$_uu|6kV0&sd>Q{ z2rx1ZyBTG|YqWrGtcH zVSRvN3;ud-fMLe|fFuSo_X;)El*s_)(I>utXE^Nh<7Yyyy(1p6!?d?R_5*wubd5WI zbGyF?=^2$zydgWOFI+op|9L@hSdfebL0@rW5OmxeeBqnW1ppt;1z!t0iYgG#UUf)1 zE3^tg=Z$>Gl`pk;C|tkcByd zfz(vIfWJXcIZkvXfg!MRcl$cjzh7V!?In)3!WaV(zu}QGPsitJ+-F4m;QPR7MBe9o z1R?-$?xH?WUTy(Kcku)0DOwmot@vD2E_^VO&zywJ>M7$GQ4C6*K!De~xRGoKlweOO z;yACxn_~A3T)kRj&=1D}qJVL{Py##Fdbyxj;2aK6Rs#-d=S5DW-E-vzkh+ffg!#v{FgLG~vC(K1GWv&Y16V>*-z;|3z<6NM^EsuJn|`RB6n zx*)92uqt|pF^eL4u43R;K6u%P_|WS2a@ZNw#e`*PXut0z;W}?#?yuviLNgNBUz~F_ zi~~0ecs-;9at=KMi*{@mTm-aVYHEJ<( z7I0&jW@vTALULD-5ez>x0uw7U0Ahf7GU~~-X&QOpWOxwdflgs#3U@bvFF=h4cm^1K zKCCJ@5>d(!e&`}xiL?2zn}82s4lELodIB`?N2~=P4#Wn7#tZew93C$D`h%sP^k~pN zbQ+J2N#h35oCrw((Ka4w!%G_`d}3peQ6N32!w_~bG#WUg&Gibqbn5_KtjdNnbe;&; z0h4)U_HXWp!i(;JMNkxd9tQk|UfiI}yGV{h;cJz{h!6UMz$06;8ExhR^Avml9Z^Ph zdam&n!p-SRp?ut|HW$Q(HQD`9Q742J)Pzd%G(Zt74VWGo%>zh}%}A{QD41xVp_<0S-5Wpx2Xgs%cT6V|EvveK4(q%; zrpF-a+i^0l0pTrnH65@F_eSI%mla~$;y2JBt``fk!5Dy%ew`RifI)PCR9-L>9Knu; zGYwdw7P*Yv@t%5GX!gw~|BCvYwQ}IbI5C+QtR7dR5kuRbc1MHL2m)}KClqO%plL!1 zhvo@Cm;smw?qf(FIgL0QfEGZ=yD`FF`AoBePI~52$DBsT7sqDIx=Sc4pNInl03*MR zXNN_gc}UW_5V`W zi0divc#IY9!GLC!5f*NT(=)In!h%^OAch$F=?!m$8W<=yPcYBz@IvNPl2`y>tY?fE z(Gajgcvf5=keLgGi+|$a98Ei)@y z3JJ@mlEp`{_vS%==2q5c_=hvzyRUpG63AX2)f-Ph#l7(@aWi9`6`wP z@B`?X&kHuKW_sGivo?hu2OS|p2Kj)vF;8RYkW;|k0iDnosQ7}2;3=!TAQ^h$>oM@` z`$94Rs%f4O?JkDRIy4@sG_b;FOwWyx1r#mg+6Gr&6LAl6gpP~R62}rQEi@#q^L${a zX_TsJ4r9Zri=a5%VlEHdi&}ZIF~fNyCa?NhpoFT~tR>nC{7Xck|EYy&OQx>4^atXe>c$$7qT?nkKg zTp#8Hg;j2+bqUz<6Mw^nq9aXq4#omY?-Q$iPr$zlECHCNRA6x6_4mT{bI0>pCP(-b z(Uh1*UzS%suwZ~O~e zkd2E49z&o8B}4CV)#1d>@n1+Kw{@Ya_^qWnnEKKm<2+#^_u&~GHv#j16GAlr%Rs6r z5PX5)Kjd$&4v%|HsE*u)+rgye&$uFxq;UcUK>>n@1soBTZ72D}6+xysyV35NT7erP zW6#wMku*F9>>dvA;Xx3-2HgK1;p5kz6Eo4oLpw3g8+ivU2P>1%A&5I)!Hej15}bU) zmVQt|Ekow2;kxqPJmB^Q4V<)Zl>|G&MHC}&fXR#pg*ILDMH+WEH7q_cT%14^cSOuj zX->tFm{!A^s$k}OzxxA2;1?k!&%i>bm@mXIJi@w-=_v{_0=r>M$dFk};0LD$^x%^l zP>C5nFZh}B!~yR-p_VgT(PWF{Z0B3Onx@k6D<{YLVsATdjNl_xdw?*@F)F-S#Vx`g zfHJZZWB!ksr3o2FF_M7W6bY;a8t~#&VTqkzD;p8oAa@Ki?%BAzjuoQ=-|OGiZj`JR zfGD&J(2mkAQ*m%EJ_wuvY9GgIFdBr?Wss;Wd>#+;ZhW)W3iEn#Tl~VT!99?Q$B-Ma zenl(~E)aP#g^0O(npUCSI?N13saR${r7<`({Jy~DJRdw{N7TujeKJe}m*VsQQ~n6# z1FFZ51IKk`Z~_i7@Kv0i_y+)cnRfzbMO-ar1fnwzj%cB%#Q~=_V5G$WN)|2`{XQhu zn>+pxABM>VjII-J`o$d+S^yP=v0-3=(uN|Iw+BkTK_8%DND~hny3te|cr)iE47w_c z275=n%|K%BuvZ;Qf=H!N!k+rftb<0f-l)+;l_SO%^$WNW2;c+VzcNBzV(6RzEQWjg z9^<5ZJDzXgzA_qBfCOL@v>mEqcn?2|r&zH=vP@0QeaV&k*t{G5IAC&KGo8S6T$7BI z@6@`Dpz|H*3euc_{+QW{U&Yr}q3^r^1Q8nx0Dz0jId_x4;|qFv&{-a1le z$2M?mI0rB|dn0ufso)Du{rnm*LKd)cp zs=lM}=mX_iAPErP(P|J1-iI58=mmIQ7R-X{(PHrPLPBK6z{&Vrx6s(EweQV~0w&N9 ze4a{RjZy(I<{Q=F_@M*1x?wI18euLS zy?g`UVj%BUO`0*f{KA{8i^Q^BSVIF@w_Mu%yAIN-nn!mbbFhG749N9>=|e6~!2-~+ z%mm=Nd8{=Mr3;%iFtkZz1dy8peudidrZAAY<_qHkm|}4K;7c-BpAH4!lL{F+aJ8%f zImRiCaAQ<^Fm<|3U5UpO%6IVSfICpvHhs&%a_=};c`=|1x2ccA<;_c^vo>JFVwevD z4Zr8_g~>18jzh)!RlXhYkD1xUEZelIv~yj6+uJ1KSFSCmMesRoTnP53Zws%`#gL97 z@t=6CM>J=a2_Zj{x48+}$~ag)asB1w)u1-r#NG$M$KLU7XeEvpsBaz$171vAhhNbp zdKbbk5R1WGAfbC-d@@563);GHnh)>+oBE4f0YQpso)ermA9VxkaLFL%^jV`7&=3A( zaOnE1B$y^Xxw7^k1xkXY8*2L)4Q#^MfsBH%M=QCEiZ47!do5V;N1uMZ=FM(P*V=u! z!wHE2n&9`)Zs^%PfXUzbOl0sKnnAATLH+O`yy9$19;TLy*?q=(V}^_tf-fw@;8A&K zl5a%k3+j_*Kw98CNmQ3E=)O&`HS z3MME266|^NQLLHa0=)htwVcIRrxhIGK~^w-3q!a&u%XD>8^7V$@%KCMy8DEoJ_G>+ zkNCV7VgbM$CW#8h5&1A!i{PQOfpdlmKTx&Cck3LQh_C%_b)g<6Cq!N8!aKfea0TcX zfU2L;tBwj_L~(OaHRBfj^`O9HAmeS^!%Vq_q5kRi_v^1e{C>aZV4EEb(rUPUV!ejloT8WMCEXJV&om1xFeR*=)wT!bzXA< z6-X2_MV7>~8nvhH|ty)0ADg1GEOegukCy1C9 zH4#|z{-o#*>4s3I*Q!GJ^hpDAz?MiNs|)!KUK-$ZO5O1BrVL#{%h|KC@*o8NX(V354)rMuzunbR1kT z5l>8sskl{v4|Dr7Nei5~g=W|e3l)k{ho@e5#|N4dnH~B0MzI7Fq%^;i!`T+20YaJu z4DYZ;EF{nq%$f5-PA>hpz>US z59rJdM61?hG++&9lMo`H6Xz;0eL*h;1c+0*EfQ`0AcHO67v~|Jn5Gq@8GB9kMjtM| z0CRo}>hc1>)};+BxxOYKkYv3R3b70?a{i#R*v&L@ib&p?x4Dsu@#h-M$9)!FCW|1T z??SV!D0Kt*3e1cY3$BLC}(w5Y5*%4p3O=fcGs4j3c6<(A>;|n|)!VTWXn^<6OU7%?r zzBQ;Pg7~9P@P2SW_?lp#))Bo#P6uaH-c#<0TvV%*?hmSFjTHKK?1_f8>EOaH6me}08QXWAQb42PK3kc%9cr}Q~!zcg`eX{E!c0t+|kK~ixLVfoo`G) zhj|YfNO(7#A{gA{6I;eoEvc%X!A`3L5Ez_R21INNnb2NwCf;f+y({&>IDsay+4r3l{M}onhjs^9ziV4fqzldh#`E?h{v!$Bw8o|af_!& z*f1nK3Cjwgd!g&r$#V7xaV;xPW3ZoA)u%zqKX@~yef*5z|HG7aj^!SfP|YL={E*$m^a9hR@mDv z7>fxZ#H}?6@0910M-{w8<@DHjb%lZckgCc_3(HDT&R3c*=7tDP% zWSMjEPypQlpw+b&c+uF5HY+KxFi8Bzr$JL<2i;*7!QxPj-izh1&prG`03#XAe^QWd$P;>pvp)?+S0<2*s#1(u(qh8D00Ppnb z&4TSXnh9)n!R!yLSX&5}anDNyg8^H?aeTsy5d>-?-9TA@#Hc0!x|)f7iPi+8^}Ko? z36KXd*a01SF2Hy`Rj0KDqZ?R=FIpAPtMJ&GdF|z0IbmoMS1}r_Lw5YhAnJNV#qN8czE%n~3)<^A4&*U|t zdcT(hw#%OSXr=-YjK_uwyb`K_OagPjw!0ct<39~F;Er)VwrrP=J?Kks>tjgUmFGjAO1!CH_ktd<;2OBy-{WquK5wkjvb~v@~KMHTioj z9DsF(gRAeSr($iR-Ex+LN31FFex@&Sss_-EIIX!xo(JW^gp6I>rSds19Ks{U z<))G57kpXw{+~F)|Ka!RU%miCzz@WQ*dqS;U4(aRKKq+Me$P4{H{W)BWLZCQzXvzU zb6v}{0SJ`O12WW!@go*Ff4c^Be9rK~j)KR((cD?u-7Qts1zu`Hp6 zAVI8Pu+^Lm9HQe+f9Rd(KKR{R0Yo>f_FCpkZr*8eM!j|5Fhu;bJEi|;aLtB^UM!5s z>%3KdZtG^=Broj7Z6D(oxWj$pvLWzg%J*-xXt$jm6;lHa`Ihx?R)e6$@DpDCgY*Y0 zVYor71T4YNkTFrM+yKx#t>n1Z$;9EaCt|vb#vNB>ejGgY_1v-R0~I%lS`XnFr#Wz6 zQw&<(UtG`d1jxe-IY*g6)-T7iKud5e18|u)KOQMj!D0|H{EW$7%MdI}1JU+gH<$T-B1cOifnZ8s1xsKG0S>4F9@8?Q zuc2$b)mBX|ZKrktdlA5{L%DMzno84vfdWuWVY9S4yTbFt#^O*)nY0LIOU6{r-t zIAiU$Fl=K`vj!}0L+DOHxMr|9lux#e z;#sO`>(#dXaYGZz7_f7DQUG(wPJm&Q4tNO*Taq13V2Afh&f=3R5>Y2areffXG@e2s zD@<;wGG7LI?_WhKj)mv4?alC5H2H=-GUvuYcKA4l9pDcZ;uLdxaElffg0OAe0YC&` zyID8b=gi|I2+=*P8}{>R*2@-))Z4v|g$ohD!w1G=6x)%)ix-%-N%0~83K;Ns03PZPS?x?sCP997%EN+JqeD`^*Wz8`OJq;g$hleJsf=7U%+8 zBG&miu&M@LPUOtZV-Qf-#{w;%8Z3yd+Xe;g?XvhzchYTpdO&P^OtE*c*yB#X#{z9l z316MTQFw;if=BOe#_!gKS#^rIfU(|S{Q}r<#Oo0TgJ*B+UmyP84ba#awvt)GFB^~k zFgew{7>YZZMHH|%95;aLSxIBS6NxT?KJm4$-9*xJ_XF`?OX6e4`z4DyUJK6b6#ERM zL8|Qrz+Ixd2;o)vr0_$aFFzOIC#F_L7&YAxapwAK7sZMg@R9$S34@pOFhkJlhAa zx4AS}(Nyi5!XaSZK3M4lQnqe2B@YJjv4iw*gXgh4@iI68HFyqA0N@#6%Zo>j8jy4% z4$rB6{=A=v0^TRsVb;L<5UU=6-B*m}f6%sZN`Y>RZ0sFK7QR^(9<6nGw(YdTpgEw( z6bN3*#$Vftfu20kX?O&Y!;x3dV(oiaWmzE{h+YuYeEGHN`s)}{|AnIA%`KHf(_T9e z3xM4gK{UuB=xNu2-2%2MzcUWd5vT!j`Yt}f=|q^wwFIqVte5pJ0BugbUHvgZXJ-at z03U$pav4_D^v@Pl89$$#dw;z%NY{Yf^M@pvY^fKF=ZF9;_6Bw0PD^t++C(1QcV~B={1j*PvH@MnbS-{8UAQG04}K)w0-5t>4b9Ygt|d{u?Aek z&9M~=;s$J@B&;e#&C>2$B+hLEsbCwbC+^Ex6rjKXW!klyjt346Kd+|=2TAh&`Wa*3 z91aAMv$qlP$>9DMBk*)Ai1{P|jL6M=5lB0LW|1NO7>=fPN7 zThAv(Q0yD6mw+u|oDL!6*iQGD$mPRPa~Qh^?22WOOM>}40h@Tlalj0z3KrA9?KN#O`e~v9^OK6a6|1PlX_qhR`L0C9|B2d5Z z^oS*z!(`;65QsXh761_8_;)foU}6og7fvf#zrdfP1v}=G;FHHS%WDnJhYJ!r0VL2A z_{@TM!6&V%PRWctD&nvO!OmX|1Aw=&%%&okSPcJa^k`rlKnZhccHCA@!`{nf z%vOez&yV(kZfAd>dDFLqSo=7ZQ{yjy1YoTfPTqACyynaI;2JLL=O&=QNIYO0!0$hAJk#Jl0^DuJsWjdK||3Ui=LQ z{3N_-$~HZ`^Mn`bTK0QQd@A^BS;NA!0^Pa|DON969sLLW3bI(v2%W7Uh~7}vDidyM z_`OXkE*o-rr-O39j>eXU%!L0Zu>`1Jr1>}`2n+uiGfy@-O?~_dYuvy+knF|<;K8=# z0(`p;*H$3I3jIY=KpM&NH~~8_>b4}p-ZP}oB17|1fF+LUlp0}}@sQDy1kBk8H?UBi z6p^V>VNW=>YxvsbKBhH)H-?@cL+By28TaxSYy(XcZg~$6rIL-RWv^i3+lUwM zeTn;%6(>j=;s(HJ1G9kJdG)x-%6JrH$A0pyKxXJZ?r2$1jV0t6_#Y|~OkE?b@F5U} z{Wu6whpSt}-*Rrs>Ie1zlt<^(q?}BNaWw`C&zyk1U`G!I98g?wpO5h!KG;l&oBIR} z@Veye5H8(fsN0g%iLJo2NXAjzZn33(N8J%((*Z!B@9}G1Nyd`U6npK^Qt*i7QI37F z2Q-cJV;zV-PV5BVhOK!>@|?n)E*28qB?~4enrqecDb2wSRwrHr0LJH74cVW$ri~Be zZR*wDKaGFIJRc91`822&R!DfVIAz{p0(^|# z!u{+4HaPUF_kk87IwPlF39|Ok7U6aAVIv=lW1jLfoLc`rWOj)VV=(6`di@ff9%JAb zo>P6h5$V6GYZ2^75H-$q&`2p2?u&6%mXXaE@a5WLp61>Po?y0+cVB+98paoP(bBCX7;l09boUb;7Gf@ zmv^30$m=@;0DiI9`=sWd2k(rn$;NmeJHWtKpJhhIZw$drSzS*1OgOO!XO?xpMPqH4KF@90pS*M9F z2Z=39^M;k~eb@tRtOT^tuA*Pe4gxt1Gu*}rsGGvKzaD#r{J+8#3tMp-A(>*g+_|m7 zm4FZteEVq)CfcnC5_5XjDiWvetdMm0kf}IP?PKU&#y^X7A2{HNHwUfS*ckw$yg;kR z?grrTy^Qr>+iHrD=RqD5$9ukr;keoN;*Q^w=Nqtw`OFT6&!}=&l zQ7FyedyM!=ORH^UcqV6tMKdVlK*iqzz%JOknpYBRHXjH8oB$-kOF>Aoc;RA zQTb(d0XckD{H!Iz*_3lcY@s(ByV0E(c6t(GMMC)yQND^c2*<$Hco9SS*#hb1usHM= zuwtmsG7g+8xavitj4*7`I@ZOMD!>42gbzs7ciopIa1V!J*zz_|cTxlGu~%UO%6;1L zIL*^&G#u(ND7>&&vlv|3HU!{7F1+sNfR4bm9)e$S8riBshYcaUjt+2wk1}bCNcr{?q=3Pi01fI2tOnggZIMpt1ThhBaVmfUTsoyjwtj)&IGTLLXrVyYltz0x zPtT@_D~LT}bRZlr@fbI=uI{zm4`hY?5O)|6R2CMxhQIne*!#qwjC$a(uz>0=7!@gM z-JjFc;-vl*PI?K*>Fg&)IgxA-1Qx=3j&I49l`w(3F+TxKofsw)5|@=MorgQ>+m}XE8}Y zu@z5r)EwsT2A6HT#u^5UW;v-SOwc&VI6gN9zg(S90UC*13ZN(JjHKEYn$*(< zedbmDN}FHqOWT7Vh)&dVmSoA7b*^BXTk;N^@3GqSkTmv&Uz~3^oquS<8;k^6>u-L4#5zAdzE z2e6-Xo-h*vf_!zGXG3(V(f8OV#GUetC#>yYMRStU+yr271OWaTNxjfFOa7f75g@YI z1_Q!E=m%vn3~Nj#&f&1v8>w?DKys{t-*(^$M6bM8xiSBNJ2uQ!hE@N#XdC&!ey6lL z$<5N@t4iMk*N&&P!D(@}%}DKU``409w6FEp5Z3{rbo$?P1OykuZ9?;T6T1;Hgk}== zI-t<`mCfl{7V-BB?;QYtr_S(%v}{NaZnsl^QY_p;tP3y*^a0>7s%JjB>3QV0SG8o)G70qz}xX0REr141Ve>Em<|Pf z%vWUa>xT#T1DP1dymrfwW(Ly$7hh8n`U}hXK-N&v$9u6KV+62)@rR64|K5S7*{Bvh z>QiTG3yQt39BGnXnsLacH35T{qv5Qs`2<4!hAdc-U(IXWb7za1tYg$&Y0l+ot<8v{SfdD-L)hUR&lb>%Q%S zY{;6e^OkKmIvNHx<|&7p_Ft?MD+9`%1kZF}D+piobqIyiUTW2$ktRfVbnW+|?b@q&5s&v#lI>iA2b3}=6XmPx0YQC)I=J*S& z+1>irtbl&~^@o4&_gC9JtTHn~(G_H?cumu%6C;3E#Lo~?bN-yYR^6sdM}&5K9-nYk zjIqH~+rx~Q-qKv$YIjEJf{SDzDwpV}B48Baj`cwEde9AG-2;jcq9xyv(}owDjdao0kAs93o(XB1?PD=>GqQ>bQzD;uDq7T+V+z=#&^x-oC1ezIsgJl8_~G;g>;V# zY+_G^L%wnO0AW}haG*^deI+b&Q&!9BxBbil_g~2{*xYamhWy?ps;+EI8FoIqor~YF z!K2$)_!^Sk3AkmrdcZtICB)_!0R3g0+bQ#Ka^AA~&J(E8OwXgaz7r> znN62vBM-W>&deR>J3JE*jlVuA=iw-*V3r?if_HbsbGZ#39v3pth(w@=$xIkpvPpo0 za|tjpeX=P2hO~=Ln_W*ya|mWc=h8{|E7u&mS7zenRJwi3&Z&?Nw+0S&Toi zglRZ`%-RKW`ttf6uMOiw9Zl9q(;cyTpAkCCdfNB1Oxk9#+nO-233e3Rot%Xdt0OJc zRs6(tW|KfVZrkR-Kt?m1vc}at!;m}>`L*JoN0e7#Mo_e-9XHBkiHdWDZU8%c8Bk!V z7BP`U6{O6;-1lD{iQL{JfQG(4Fi_~4^8(=KwK`2?;%nY3AWgU$L!5bd(q~w(wLo|? zd;3N?k;50x?X+Hu3FJB$+N;8`cNpc4(W1eh)q)r}k}V!eVNeN8gu*~T!Pm=iP2aW> z#u6{Jkh_pnniw?fblEKuFjty~VwvzTCifWycmQU2rq_bgU?Wa6&>^3M;M(WrNNsTL z_izAC(F2zk2P~QhMAt2X!fqf#T)u5XFjch50$K+Io!QF<3qUh5AVP1K=Uo3@wd0@P z>#$S;9*zM{_WoH|5Wq^PNJC#o)}Spz{y0#_-vA$eZL&ZUj39nIXwDN)+T<^846!NGf{Axrrci4j%7id&MfM)GcS^{u;Spf3sySq zQ?QI>f5@`KqCc&7KPh2&MxKuo#SoXEb&Ozfpvi&7*5L6~i66WX3icjOPWJTno_TMN zbHJv-Wy~}-n0Kw19(b_TZQAK28CVAzvL-N3T`SP9W*4XY&{**P||IG987nEo8Hgxx#1hDiIoE zVAkeXp!Z|-M7S2-6kP1^@}=WS*@8iAqEo6Cr}_&7Tf~KOLk$}ctVt2xGoiC$CE8u$ z1(*pSJtLk@(QxI(lbR#25hM&8#{JAnJDX5GlNE@Cjl;DJ^sE|RujnPvFPh^qo{Itc z9N%(igY(Wu0}a_!X+3qoSAI$Ev44GJdRoXwea#G;6t}F%$pkobXVaKm!u}%1{58HR zZRf3>*<_H?9Ghj}K?yQ)-W>_|fq^cYEbLl@mfx?#X0gLS>)TQBPB_G>g37vov{nV- zD#cNcGrYf848mUdOjonc!CoEk&2;F+*3clFFG7l>0i{x}K+M!klCK_|I1R5t;!p+H zBG{V;zv7akqOJECFK7Tbnzj~^U_(6q+s-u<48?n*?$jVzci#JJLda3^-)oS?j&>=Q zqo*gp@o=s%mn~k812G-Zrmz9ldib>y7w4AZQ5?|;NDZP|{AP|bTQfJ{Y^584M=3o5 zyp}m%Gb7KcvJqP*tae(fpVmY~Z^|ldg16cc2=ngk2)5OJMRi|(@xn&7!I0k*wiWG2 zO|||RmxSIt0YFHSCmR-pCo$xYcd zgs!1?Yh8vt&H@TtYJG2;A4-I;<=zh}b<>BVFCN=+tbxTU6_Yyf*{=nsoPdAVzHI3> zpxC0b5w_v--cB3mN=`EZDnBwXv}H0;1%vO_$4?i33`cS+Qo&%IjbL*2{iPvR9iGn zvFBnSro82Dy<9~|*L6h6hUepi0Pd$(&Fw0`y5_=9RrK41B93%;&UBk{TH5A-rr(%a zhjSGRb=sNT{+%)Q2mr{#bSTDG!!z5xa3vExB|Ch(oP-ds z;50}S`#n7x*=bV$tIoJLSR!ZK3By)DbOyW+LaCYwG|+4o?{&a6w8*wvZr_v}))PTB z-Uxnpn{$)Qx{Uh*-P{F&@}*Hckb3&zPYN5$ZkEaQ7rVcfgGL@S7_za3s@gDFCHkj~ zv6|fcZr5S}RjWfaT$|#|u^agAD7Z*4z*MZuO)jNX}ZD_kGOr%8i05lzr*tp!Z1Fc5w%S2Dg3-jmx4N^X?@VVz13b(AN#1doru=;1ZLFf+i zcHpeFE7$60wsioWIUmXb|5(oKQQUUEf8&ZL#u(>jVU%23rN15eb$3mSFaW-m%W27J z1;M*HKt~zFAZ&L+Xu2Edw*fX0ai2#nryw99!a=)<(p5BLvF{g#0? zb2>cAFtR#N0$mDaMX4E={#t#D6}U~znUK584qz;z{fbRvh#_gtU_sQ4=-CZ~e{q)t zAd4R~n9`h0oxm$S80uktq^CmL_Q-#I-&w0&xIed`_IKD)dQNw`W>63`>Ypd-A*fG z#-XNrgjR8__yWr+Y$(MiSovXZV{u*t_HA00i^sGT(VE?oL%2pcvk1ISr}ve5U^NEC zLhKGrdE&4VHH7GRtTS}mLB7&WSQ!^>kMPqkjDDO5uiK6Q*FY%0lEnkRSxAM8d$$dO zezeyC0q_;8g7d4>!NbP}AHZ_I=pFXRYV8vjbXayVM{BPSpFM<)>hIG7t02VptP4R6 zwsmvGNq`)JlP7eomz+O2<1tyN0Qz!H{&oRj&(6yE&0BR6b#RPrk_R|rZ987kB}Ue+ zW0)>$5ApanCd(w%uw>5SyXC^6ciJ_d1+Pv8adiy3XyZ1}BN+6z>B$I`y5`!E>OdmJ z9Zy(%0o$dZInfdn{06G$*fvd^(@(+G_Lw-1(}8%kINQfQWPE$gm@zh6be=5;3;oF5`)A7b z;frUaGY+kS@G;uX)&XnZXXp-8yT*MZuFih02#rG)T}~FmlaY8kd0so|VKx2wZMd@Q z$wh%c2ghJrq5^RlrY4el9!;^Gp$r~@o=;lk{9w_*4BY>>o+ zEU+m*;*fmD?Su=Ff31mrlUrVGCSoA z5M^gBd=dw4WGmHl9Mv=iGU!U$Q4vCS8 zhJN@l)U8_c%JbNF??IOffUc~O94JI0<@nnLS&)=)YpgqK_3g}rRQu?;Ia8>UO<)%rCYbQmO( zNUQ~U@Z{3(dN~&4G%xexveS&Gz>V3<1?`=wn`OeMrRx2^2Z@K1()K#7%*Od*BCgPO zHI0Dte6s^WEzEMcDdL6`guR;NLi6xUhpeMmI8B?EZBjW|DZE|1R&;E=+xNEPhaC(5 zBGk?>bdH^cH&Re1PJ_V0<0J~(u8@EDOnl$W;lCTDb>{V{@7Wg0*pHVa@Mja4^V6I^ zV%x5bSKC;U&-#I4%Pf!Wba5Cua=FCVyz{H6LB0UkW}sb;w;T-6?5=Yi zqI;Mkax(2j``~N1jb%|bhjv<~><>csc_i1d1b3=gx$G|2uN@78U?fXCA!w%%A9s># zxH`NQMQ|Vppx^~3faiGi@SS9dM7M~K%;Xpww=3O+4oK6R(jDF`Ai4K7^l}S0-j{Pf zi^HSMf>vwsAAEA$tUlEm-C37WqHx@M$&QdP{qM5qwQ#8?*m=9v ztJQA1-ZfpbfGW-Vbj@?_kA3yv9_*+I2~4ksKcOK@6+-Xr@q8U14ykfV30D}eU8jMW z+#S&t%*KE(_L;T!MVH55?e8;JhsUeK0q5Gs_&HbY@C$^gH+G?h(@tEvGx|>m>P&u#M%s|DoYG@`O);Dq z@!e;HE4mJYbkL@i=ruUC=ysu}=~9`@_%rI}%sjA)QbvgHu~xqr2Kde7JUH^g(DmD) zM(*~^VV{=ijY?Ga1r~F_23T+gMuM|Nm&kgT7@V#f&ZKQb<$}}Wiri7qpEGV2K zT@LA5!~+iXejLgB+xXhu!Gg|Wqs=MDY+)Ky05|FgXY7y285Mz-1eP@Su8=>^`tyPXQO>`G>bL85f0uu=qW zkv#VuivpiqXliqM9m}!saQxxgLDb+h8!0kQt&Kc+GSoE76@oKQ-QHVX=P>YW_xkm$ zBn^+uB->;Cp)Bd$ZrQNx=teP{Q(T5ydP=@gcFh08%z21MO-y zg^7K)tG9;JJzMnI(a75b3w{pF9DcoE&a24NdH9fYhoFai=1YSzbYsO;m&S!0ck7H^ z=e4-}3OV9398`ZMzD!^z1`!ig&u{@Q!WlBbD2NR*9&0<97-O5E9+u(U3NHPcw(CRl z5K1@F_HJAchOjN@Hz%GQG_Mf3uex_%Yq|Arb?eDa$^g&@KC+(yX+F~y&T1u&+?`=~ zwlh`H`q%2j8s5+nC*+RfTHTW(0hoX_by||^a6jkfPe8}Ct;scTaDyDx z=jQM=8#NA4-j+vae*QfhyajLf?Gzso27snGNRY><_9IN^c!hSlo~IKpx}xw|_i~%n zbg}JrkC7X5hcj@N1C{xRbKdQ&GIE6B{%xroElzheKtv3g+meu8XVl*YAu~X!X7wKG6|!_t7cx7R2P=;BrtmzJFOV4yU-C+T6n#f#FkpZo=HQgPk(# z?39q@%FpyTvVZFppkgT>s*~MN?A$(3OtYpvy&yIhzVL0$!f98>x-b^F=roc&ZU>hH z_p_E8pz5hTCUD(d9NeX{C)nhRApdpxxm`XHA1MlO=S<;se`^s&o*C!(`g-DBn2g^_ z0cU++`rKgWj+V=s0i!(0$zfKX@rliBrkgkJXIsc{+R2ZBq}|W?ozgZ`!&!^Jls0Yz_zO zG(_511=8;RZny71!OqH7dkQ0RbT(Ur7ZL#*y#w&t&4^_>9gbt2XT~gUC?sUs-EVin zRmfwS^EX|slcr-G!#QYt@y_~5C+=+XSdU3p0~D_dgdC5wuvDM99A)FtH@SR#+EX4M z4tooZ<|7nrXPoY{&x};l`CwA42={7xzZB0nUDY_dc@M=acXq9Le=c`GeBsnWL?7Q? zVP_tq2ar`z3hrX@XJ=&F>V5V{o~7iLl9laB5MK5}`$4n#HG}vO!|6!aq-j3*s_f&_ zTCgAbRysec1f4=RTyyOui2;p6+N28DK`fe`Aw5m^fMe)RA-Y2Xb%x)s+b_8p@$<~> zRDK+Wj@{{Zs8=dbp*w4AP<-*}mL<>bD~?0{-O*!J>mA%ah_wQ6i~(3Qbl|vQiz~0~ z9vFMZGe8de=H}OK$&6Jy2BkUz`ptE4fv7V+E}S0@Gl%rz{IO2Y(=XgcF~Q!P?BbjO zv)t2-#2d8*Jvt4<#8VAsnq5o)|z>&$)rkktEiK+!B!RQXZOP$jJ;0FuYcoycu8v_ z97o*EI^aDVQ&Ni)yr<(L?9;J56*?8H9XPd*vjg>|SN8DWH!UGI`*B%H@wjs=Ti@+S z&eyo5^C|Nqt6GE@VYN=Gx!(4*w06GLPU5I;*5 zTetdlxLU0h`E@jy!AHY~1XKiU<1&}20dt9$3zg6$C$^~05M4aeG7Zy=ydAn=xy5rD ztMDQx=4qK30&i03^ZE>f3H?No2~^bJ9B(*{i{M?y|M2N?~86jWf2Y!J{XqO$mw?gl1k|Jhh*kkzq$Uw7YAcEzpy z72XnEb!v$oirU)QBL7-<3^9r>vxj|NDZ<~ry9f|5D7d>b6xIPGcRw*?2+4E^_j;@_ z;}V@+2wH!pqA<@i;)fS<46F6F4)4qlLgpyY&_Cgywh%9*VBn|^_d9E?tIdU80jGf7 z8lStx?$xnh+gX~Y2dkY)j-d?4=G^@dbBNj2-6C6dFC_K&lsjVRP$`S=E{DtFn{_oQ z*g}pok%|R(t-6o4Z@0fVxwC7_q7!i~5Usq(=4;XGNCAF5$x2!)2FEgd3k8R+56cQ1{t4no zWZhWFCD^a_bO#<+SF_qaY?eDD0HvYZHOk*|98zJ0DbNv<5{>YVCj2nNM0 zPJSwO+t`})zNV$D({xdG-}MwB<7B!u5!=0`Xl^(0Z3&ihEl$#H6#V&D3wEjFS~BEd zAgLhv=fowP_Sqdof`|I9vzh+2#XCA}bvdBob*oo;T`eDM;d3X$JbANIKLS90oLA`( z#`qS)cTaTMkmDq`yt)DBp*l!6I-6wn)-Ww=pU+%o`)NMMW@<>w(zIb#lFMD@Wvbv8 zYC45mR;{LH>eXRn4)<_^e}s5;`y~dZ1rp)?IGFoUohZ={;_sWDptd}sad5noa#1G8V(%u=iFhm`k7YhIOfwi zYA)nG(>*YO`_AucfgN5L7jJu?^Dm+TjbYavu~H<@$-011GAe0fB-sS(xia>neU&a ztmbD6?zcPS@WO&Nhf3GmYD#gsJ3R}u5AmC)2Yy-9itBaF!paUi9Aa=#kJ}FT9D%3M z(>g5>Kd~O0g3er>Gc3+s%MWgRoC+t1xU+uUo&9GonX9Nz?~{wf;399AqDv&4CG3R8 z*WN%Z?`Jdi@-KiC~} zkn+iP)&s6vj$xA6KFJi^D}t#l4oHS7+AD#rbLy7E?awTC(5r(F&%`BX4~zFOIV0N2 z=6YOXuDiHkX}A_dEdi$5<@ANKTrj#t#lj$m{~OePV_u(YXq+t_%{(f>b|#vXeS`Bd04X$2uZi5jNr>bG9ENVf!tkmI! z3?ms9m&bQYptcnoW+Y9~myFV3*dl%)yYdJm_1cPW%h-GFN>*W>0}SBkkZrn#Wt zb=99ajcWR5o_PH{HBjNVXrqI0gSqkT3iQWuez{)RVXGG79-={-FV^h5#`d^chL~6djIc%xB;?ASj=#YfG9OD`>aHI>U4v)9pm$a7GF9Hqe)=8%jF^iK^uUzs{W8!9%*G8Ib@ax!l7Yfe1yoU32YR# zv%-NSIx>XNaw!ieIThQ}xb&salI`+hHym30V890}5r>^&%~1|zopr(Dk7iIfbIt4Q zU3J%WeQtL`fg2oxo9!1fPzjqjBcoh?16i;Z2if7)w!K>573;MzW;-M+nanjfL09PN zxU1#V=3=tinafyJG!xW5x(fhKv74yH6bc_6PXfSuoQeV`!-v)GJhtuB-pp0&A@2v! z3{6oXmM#vB^nR_zaK^ub$WL_Obuh};6t)Utvi4XkWvd`Risk~*_<5^gjp3T$I5XLR z4@*ltUY992_P6f9Auw2tm7=_!#VczX>2(*oqHx;!COAZdAa87o2Qcc%(r`88eE-zU7SvMopmhJ zCf>(_Z>MlN5UIv^mgu?QsyR0;J8k>*{czPTWt}I_U{wIt`5s)q6W*PMw;czZTzkgx zBiKt;>$1Il7Sj*sETJ6TdDQFhrR?CVxlgw4!jU@`<%|wmb{*H~9IuAAo3d|*raJQf zjH`I>gh_WmlPisEp|Gdc7Gg()y+_GitX5BDRC69Qr={nyV#Hc6T+HL1b5TKepn>ED z6Y`2LxpQl@kfN|`MBXkYHbvSU?eRL%E8AbQ&KO1zds7Ysa1IVWhFXidMMWuJxNFzk z8R$*!b#^THlkZ?JrZbPUwCQ%l9WrBm4M^Tx{Db!s)fI#(b~kJ4ZqQrI zogvAmxUs{viNzgp!bUtB*PjncgJSCg;gF7(Sy@s%q^z0;u4nR3UcID zynwQFhnA0Yq3akHmt<`FL(?`P`r!N1ZBmiDc5tMHVk;PKwlGj+R{(-o89dzMGM03m z)T>$Uif}b+Poo99zi|`JrF8Q}1FcuvGLi*)$Zwn;p_CBN%jHLV*KrH3@pdaWLAs1`q==?=!L>o+}kNr5h&$u6es!M z`yJqcL{C0=l-f?)kcy+*o!+YUonZiv4NmE#B9dG23`4t1<8j>12hJ`p0<&Fj?fNFy zLOGQJ$k~hAow+9U9~g5xPXBTL<=H!DfWah_-PU5r;YR2)Im8tZBfI=~otDM@R`kzx za0STVPHjw!IYF-*NjIe4Oh}0C(siFbPt|~x8y-M<){o%XJWy8^o)I#R-sHs}3vaS} zu&sf=LjYYldmmGCnI(D7gpM=*o^!W;?yP@A7#)%|&)~dxYIXvEcG#F0o#)gz6uabr z;RWdDI8;kimT?USJBDoemWBF=REC}g(+A6{_h>5P)H55A`kbvWT-($3<$%)DJFVds z_gb-vxn0dY1wbVu$u4m`^|SG3?cMnM82lGyC8wB%%j%OH956CN`m^oiJD4Kx(;Nj& zGy>{)3!~7<5v$2rdEbd&Dw^<)=3qA~>)NTR^kRxZz$Rial#B*DyewFVWNr|1>6SdJ z1>LXZ5b5fC*ur5K>s_1j)}>3$?soccq@g$*3{=r(|k{H%Px;i9Zvdpr0%dt z2ghY$pF6eFp2Hne2|R#f{jG|z?g?{M93iH)wCdi~N=S7Rv{WJ0Ri=>UwIAicb0cQ6 zr+6l$L?@AF$2ss5Ha$j+EVxxX=5&V#s|b~OB65Unt;q>XIoc-Y8dEIXb_zh^Th0u{;(IBzqcKE`MPu_E2wMllA7nIKPhNCkvxrCoy3Y7K$`vj*`mvGH~9FA z!RYlf4RPyJ_{9kGm1u-VsPufjIIB(x)Ettz(yIK1!Du0vhoNUEPN zpaxC37M9dvxoJECin5a79LBI3Cx~y(N`JGz=6Rg~AfNyM0flKpLr_UWLm+T+Z)Rz1 zWdHzpoPCi!NW(xJ#a~mkq7?@-h&p7bP8LK(#7V1AgbJZnXw|`d^b49aBq=VAf@{IS zkHxBki?gl{u7V)=0pjN7r060g{x2!Ci1FaKAMfrx?%n}ht)ysH+Zdqfwwa8_gmh+A z2)&{kgW%DD8A-8>IZ;f&cYNI=z}CAc%kn?>=jc(hmI4F>;#tKoZQ>2$sZHBpyid$4 z1xY17CmuEFg2azZmpy)CoOhXHnY@`w&J***LcWFN7FG(TMm$LzQ8k_NxwOYB<1NNo zsiHLQ$zB-F>MP4kr#XZ;7O?~o0%TNBL#ebm(+40$T_tXSgF|2>Puc4} z@9u2v?cXzv{(b03ZNKL_t(|+T6T%cogT=|NYrrZC^<%t#;MB1VW;jYJwq1Mmo-W#Phq z@cQeoQ(Rn3Utb@0+;Io*zyCfTd~hL<0$fOO@gdsU+BkIR5YIgG3~Sb`AucYC3of{T zmtTIFC!Tl$RaLqA>Q8~!fJ40brkmStyN&nWdyjuyatS0Q5w~a&Teohdxw)CeB_;6G zQ}FG#kdOd#=D_cM$L?pJB@|Nl;)@k5UAmNm2M;nbGQusl+``}f_BSrO>@woxnrY7^l!@Hp_r=bw|2k-_EDrol7Mz@PpE6THA0;1$3Y?vpX#ZD1h{ z4KY0Z^wWIy`R625S3~99@ECl$9CCAE@??1833&bW{fvx^uzvk|UVQOIcJADXh;Yp{ z*YM_>Z}R1rU-6%?8BHdPMiZKS`}RpN7({bML-6?^@9`dYawh<*SjB(y-<;$m?&sZH zyJ!(#c|6S4>xmy2;I`ZD1y;h+819=J~@7Fem_rGt?2xI zL#*Pj&p%C88Ostia1bba5iUq5+lF`vA zL_|cQPk_;Uu-4X~n9T&7>DVg3n*$mJVq1Jno?JqEyMm&ml9`!HWhL~+gJOcnDwsMI z+%^~rzx|r(YOK}{(&B<}#tOLw5E}y8fXRR%JWPW?CD4o8tx{cWWy+LMY;HZ&4T9%> zs;!@6Q+kLE9_NhpUWUCvG#U+YaYhOXMrmy|)6xR{{r#+5xst70xBf>=V6(-F*=#|Z zn3%}1V;;^uA0nQ3ELeyO?-ne?6Hg2=L`O%H5EoD6)_xp4TAWTNpaWd6w2R2?+evgf zDJd!8g%|39c)$!e!^ILl7Xw6(|Brqg4lP+(HePEu^PAc;EpIIXThf<>`6jh8||5IAFF3`y3;2aV~m$bwor&Vzt_7Y0(fJ9ZT#~ z3sINoNlZ*cuOGr<5u#&bY0+q~*zF8PM6$L=hds{48K02~zloF-CpX-nW6~rWK}$4m zv}!Qg9mJ{@qK5S(BqZS0>k*5EjHp<$NtVqs*&FfPlj2L_3X?Vw2`SnYOnHXD5r0i3QTyhaZJ6F8j;I$b+a zQ3j%;qtR%<;ee1CMh#;mBs35a;lmp4d4QOh7;Lsah}aDA4lo)S!9@!*2r<40_w@7t zTEGD)*bN>oNN{1(4}w(#kuGS6z;1J4)jEjik0d@m0guN+Fc>5*E*71xlc*>o9*>7# z{pwf$F_ZV-w!FMNiHoa}1dd8Bxnja3>7+|K>0-hpx#UU$2@)3!t{SogQUsy}@&p_Li2}I-Mu7~0bOBTNT!KKHz%2qDl9IAbKK$?_2?iB;=bd*Y zIeC}Z?Jbg*cd0lW=LCucUKAJ+_)1`{z<|IL0>=f;2rL%p6jFbb5B~X22?PT2=9_Oy za`GOr+nXdWZ@$FF#)jMViomF3WPBlMY3syd>6Zx;ej}x&rE>c8X}RmJyQI6jTQ+ar zESZ^~2s)pT{a0b%eu-&pmb{rWB{sHBNID=d{pru*8S}~KpMN16Hf)sM-T`^&p@+p) zc1m2QPRqUb-X}dheX?oOX8H8f&&2Bu$ZN0tMUwU(5E`0<{CugeZ<4~ogYxRDuZh>| zm*vYpleA4gh^?njCfs+wxK5uIS9!TS_|QYrJ1`&{Hf@s3&sRvqm``$+{#lX^6iIAd zgUpyQLz#a8>6!Oa_pZrs{Zrv(9Jw0;A z9d}4&Wu=ssiahb8$beg9?YedH)z@Fk$e74WFN+*GB2rgZCkqxVkhZoq*&`zFiijd2 zAAR(Z{Pfc#k*-N1w@wnNs*)2T@{EWKi6U#)u90uQ{Z>RgBJz6?IU-V9BXZSMBJHgr zyLO8FElVV%kq_U`lAnG`k@of|x#5P1QdLzYM~@zrXPOdGD&W3 zt|TNRgvaeKyO=FjiFG(dQ&(3f>(-ql_C+)2lggj?6OZyJ0Lxg$pZPOKIm*Br1N`b& zi}~=w16+7vI?2gK=Fh(x*a@@(M}a4R@50)3b{Nk*38=sd;7`CIU>LX+IKcY#nPg=Z zuzR*u|_`70)035CU3&J;2He_>MMkJT) z-OE*1T}4Gj59Q@uJoeZ{eD&2=EM1xg%mMbWXU_%rd_mT%soDHLHvF#RaKEJSkS}v zDm$vc^^@J~-|r$XZxpjR#KD6OuDr5`lN}cB=`+AZJ-krl;_|ovNl9bu+U4TniwEfN z>eyUk`1bs1+H~q4@kwJ8-N=b}^%X=Wr1`!cH z`uh5Cxm@@R27F;#tiP`hz1~Z-1?T}{7{w zp(V>k(%>Lzsi~ZIUNq6s9^QW2Nkl||`iKx`rpJ&uI!wtSJXxxNCt;EMC(AelB z6f$9ni=#R!ifFwa|6n(DO%=q(I|+5#2#i>8#=vMTL>U1_sIIQY<#G|#)rGaG2~B)F z^;Rp2DH?+=nv$q!Y3o;Sit7Zn}5+0Sg$vr z*Xz+9KYpBsh6c`ZmQqUTrI*v;y_a4}Ddj9@X=rHR*s)WzwkA?lrO@5o&BTcliI49B zs=`|M7|;Nm1xmxK=jm|i21-d!H!*c;H22(7$z_+#ATlzNv9TsDy9|bh8xaxWaO^)P*UIc$=>U4AicRi$FgKv&xNoH*OaxpNlYc_)&;|Gg5YGnqgjKzU!^ zxQnx`jWkU^PN$dS$B)s}RKVRe@m$ezj=XGPaIlREZ#SK(Ax_j(V6~25vyE_~>I@wz z0V@673=FiAlOwdY)}eC^GI_F>*GfvbGR{klZh*4ZI@~!z`9Ldvb2lk-f>hO2V5=X& zT0cT{Sp}&rL40Ss84R_OeThm-UmX$ggTxhhDLHnGCZCUU1JG6vxhnLxwqmjLFne~8 z+S)TjW{+ac7@@MVl3*}McQ>eQaIvb=bM71ogM;LcjZs>9oT*cN#K!j1(BMX70nN=m zdV6~bgzcYEU}$KF=Bg^r4+hb9g0#a$Ds7hr~u}(hufRZ$d06h#pc5k*mC@7}%g#v5;l&*zg5Km0^s zOIX%j0;dH|$O8{NA$@)QvSy7cpMS2($jFHN_P4JH91^G%xKyB7$k;7^efw?k`~C9K zM<2=7ty`rd6q4ITm`uZxpZ}s9K73fJYifk6uNGQb zBx9!{fBTy%fj~(9_BU02{85$m_K@6ii%4aqBE=<&JpQc6;9y8ruU6&TZ&h&*h2-hq zs&cqkk?Lwi7A_QNZ4Jo|MUnSZRYIYVy#2l^+qNsx+7^;a7Kv0=DN?K`@>^Avp-@P^ z{Z^ILt5tEkL-O2nB1exZQmH6%vxu~ZLh_TU%7>~d!B9y4rmC`25ou9Gt`U)%@ViyR zb$zX>@?H3N{C$rX5&5}4{&nyFsc#fT5miJ&BBF}?eDD8PmWZlu6;=KCXIcOI1|?kn zO;-5$XJO^#BKO@Z($_5_|7w?4RQ0bS%07{XdXd>qQR>dgfddER)mL8?kH;gQfBv~_ z+_+JCdV1uchaQrXCr`@BlZrg}ph!aNBy12NwrA0+Wv{bgxLJNfy z;=@NJm6T9IkRT=GQEN?Mcz7pQTyZHQBg1TKYGUovPco*K!eJ9I1K0-a3v1&RpfJ47 zR)n>4fWgo6FlQw&x@QkrSy|N7)KFPjNmf=CJ9q9xtJN}j@?^Gd-OB#`GpVlDh0X89 zVQoByUVk}0-+qdVqo}L%&^h`82d=(?#`6YXYil^Be4LdZSebWzK3leIVegzdv;tCI z&K=p=)E+*JZ?K0eFO6Z}z71q$rE=@7aeV#tetLVaB09Q{vu8UvxN`~UkMWN*4YTsJ zY~K7e^XI1{(n>`|F?ZgX&Dpbu2>5%s^pa@y?%hCkb|f(|!yG)YmFut0qPOP^U0vt6 z^UhRCN`4|LLM0dYVdY9LnwN_kVqDJt5| zwby3R)m2V+M;*5(CsVv_8!;ket16qn{+bIjGYK{~QGNUv_h)BQSy;%};2@Eak*r&{ zj-1$7A_wgp*`Xyf6Hc8fp`oFkq@*OaZQF)Mqd{>xS*6vIsnO6_so}&44LLcmZ=VLY zTZ1(T)&g-rzedAut(HvSWXVw)8yiSSPvA%G7Id0uf?esXS@RQ_nVDFuR?uhw(EO{o z-DuaWLF06y>Fq_kdpBfdfuR(v9WZ+_#5qA1fkxAbR=XCB=D*_pa8%ZPqV8cc#skjMYbf_dJCo?=ej8>~9B{C9IcQ+p`h@vYhi;4;- zix+pZb7vgOmc;<6;edQn*ohT6er_O0T&#l2mBQ)MIsyS3ilTDl2xv48V3?7S5mHlA zaX7}p|8)TU;jom3sHg$b(p>cQHRJPXNKZ;4dT0m+b>TXDfM^B>VPs^4w6ruF9uM(~ zLafO}-!Tmqza5RChrz)z;^XZEgF(#ZAnVp;@a?zRBqSJ#j&35`)XOU=(IjGJbW~4T zS{fdY9#ypvli{QPIwA~_Sehf~?bTqnI}wWo zk6urDdOF$JdWME9_{~mwb2M1S>}btq26Z|Tl9KRe89{`2emR`@G#eyX+j%>ga8;iwaL8sG^l$1oa(TJizFcEY*h>D8BZ8C98tHtPaVm6yG zgad66fW-p3I4A~`SctTZ2M&|Nky;&)fFB)|L`97d3dN&EiwhTK(l8jTq^9-}5fSl! z9)%GRkem#LI?$-&q!XN` z7FkSS0yCM33l~$uy9*aHnaKp2$;vvx^yxF$ytx{WCxYq8$r!e7WqL{q^X4UR>7{1o z&YekS=0(7KU}o6yG&LNLb&a2UXq4=e-Ap@g1{EG}tlV_qOYc6L4o4(M<=G65SaR-9ns#C&RphN$T8XZGCbBwcP~@&(Dvog2@c zckW{D+zeDTo`wc1bLPyUx!Fc2W9ou_3}%ItloaAJGdZBsk)5B9)9J((_S0K|_$&`;a|hX>6%w+C zNJ<*TMu;ouBOX7o_?SWmdJ0L+PbFjORCKD2{DFL&UMGzO!tGR@7+oH%iUIdkTanwt8HhrqfzP2JK$ z3Mr$ELmZ-n5-O?W00$_ejMJQ^kU~m3OF44n97RPBP+s1}LHlWHo_dOgAAaC`dyqME zto-qhFS336&GhzafS1B%b5+=sE(^OquA`$Pi6f2gP;~$Kly{VIpt6`Vk58j+<5%o= z#BgHPEJ|K_iNc+?(c3Fw)BI83D6hOS#?3b`-7P>( z_}=wEJY8MqarEeKS+eBUghC;9?%cv-kImxn;U9VLJujuD*KzXXM-<+0KBaMS9RBBr z9DZ;v<&7o8*PZ2|haO_>+O;Gl>6kh-g6E!lntSfK0KdPUJ=?bM_{^Cc+`Jj3yPK=x zr~mi|56+oGeQ`03b*H%h{(RP~`HWOU1O?huo_-uIz8KD(JHg&< z+jwHuEcS2Q2)(^r?sW3^*I(zqGBSuB7+}T6AM?YHyUEiL8n;lmUa6)`wC_=`57H77MEWs__oh8X5Bhu3+X`?(*0FZhC& zc!^^iWAKlI+;r0|EL&E~1sBAUFww%T)zxgw&qwFUVsOyLgb7W2|NS|fP9rmBSozCe z{=&|kkA!2l-vGZK_ctyL!cFOL_AD#o;&7SGJXll1SCb~uGCIlwr`+)V1ZZmjOku=T z&8AHm#Kx+$x3`m*m&d++T|EE15;oUs!}poO$CH3zo_>0m2OgL}R#ql{zn_K%H#Ifs z?8)q6WqUopTHnEQ&rRfDe-;5%!&Rw`e026KSGZhcWoJ{Hl0trSGedPYMn){;<~C86 znU2-xBd4*E^y+Flva^ZE3KARJNmElE@$s2xG#a|Py2!}LU~q7d`e2Z{q$DOaHG| zkdQ!gb2E0k9b;@P%|IsLp^s5UNhh7Q);0_V1M%^8pb1FCjY==QWRO80dQ>1mQGS+X zh>fKc$N#+bqUVa(o&eh}h`%qOCMNtR_ z1DMTVRD$4FQ4}LSUx1)iA*j*fAN3R3VkB^x5K0ST5g`}|01A4&;P?B8P*qSA0>L0+ zHWO472nix40s%j&ssi8-bG1XE5K1sO-l{+VMNv>y@cBTmf<{pY1_D?BB^X2njA9_* zpMXvQ7$o5LV-!IR%QA=Cr6>xjRmGR@Lq#QSL?JF11hbi7C={;WNO`%R2@_6WSM@}9 zq`?FsAtB-Cehy>>P*AWkLO$n!i3}4*fH(kBQ-gpGpHHZ*^^=ySVpmn{odL)dLfx$> zih`u1;P?B-+ci9luf862!UPC~AP^ik&g*Nz9Kw{8L|$HAxDWfo{b-^ks3H<19Uu?@ zO&%C>#(4n7tLO|_@r1nOSk-Y_03ZhN`9alzstphb1TdLQKljDI#>}KilL&=E_ zq0leighs>C6P%!#W*TUqlu`y6q>3ueWSqgh$j!;PdDPW87#?2Bwbw4DuWyiV8_rU` za3ONw0H>q;oShIs*B762;*v{f5uxG85lXMSj>|PwNr3C*u{6>on>_NB&%14*tTtY81t?Ov#pdc%j#xtDulyj}*DHi7W-~Cb zfwGI!Xo&LCvU~$4PTa=lJzW&o>bNO2k3Cy9<8m2EPdBn`*#}%TdlvqV4vv)_W%?Zp zIdHO!?rtG6at5ncugBqV;C8#&vSlMPW=!DBnN#%Ew{YXciR}8}hjC|-A({8ygWKjn zu&s*YM~|{_+B8n=-;d4XVV*OK)nCJf8DJl6X6p|>uz1D{TFc8BXli2aym(>&03ZNK zL_t(hZZ11EZNh4`5|I?ahkVFf<`P-i0%c{ea3Q;o9fODnrcRy8ci(+SLP8<-z9#fL z{4gUIjAlS3$N(GJL?m{S&;tJi@~FT@DKL!@wCn^%7#cG1#TQ?bo0x>7w-a zTzZ1`_8zjbve>X;19rO|jYh+#pMJ{h*|V`VG{C6}n6?mh9)X|-G7`gtAI-S-Rd>S3 zwHz+0rL(t{i5X7#eghO_!7LYOzk!TvIo&zH>H2S&ddDd=MT^0hjyvxhpRI)a3!z^l z>^Z38y6djv?Afz;JRauHpU;m!{>b#{(@9E7;=>O=XW)i`i) zAs6yHe#cWh1;B^5eaKsHy~UwJr|It>=FU48v3j+YsZ)c*#y4{D`|nfq-~UZ>XD3H0 zD|z;gJNSCrHWFfEIe*F&p8xDKp1@AZtbXE zvIFs%Zh&m_^`(Zne;F#_Qa#!A$qrdg&J7RGkzV)6z;8slHrLjmny~B|y>+#Pnu$2C zx;mOdCee1gA5~RtC)J9v*YY`4XkA3riPy9aH>%H1w@R{zZS(xU8Tio6A_kmoqp}1F zU8ZKdj}m#fQLwUw=j8-hV?i^P&)>>k)9CY%kcrAQLeA*M7vYILyXPU16*<|vC-NlU za0MFrWiey_OslF^m~uTIXH$?^>qyg$^a<;?+%pkSGc^Z6uHp!&ebqLlA0gEBg>~3U|GOIgJrQ^z+#m zrb|^57R|UJ%a8YCqWavBf$!FN^*;*ey$jv!wtQwfJMu%fp)RWIa-d57`Jb4l+}xFn zMvWmf0yZO*{!k(V|J}MD7z1TbnA^6jw1SIn1#f(tHSG@jNPPiCJaaolUbwOp2^M|* zcxO$q(fqOVrOlDeS(zM=a9@@ zlT=Ji40NDfu%yW;d!wUKH1Fi}h^cPU z4MtL%2^yV5RsKtkyPvn7F{WCw6L;fr|CM}ysnUPTwMk&Tb>kYs&Y7ssUJ6QEZYN8w zl#r0|B^gO4=#mm_eg2hz9v#`Me38;JhVC8;qq>FSiqA6AgBbK5$@Z6ml+e+6+^+Ur z=vC2&Ds{G$;!pZNlp@0HTCh82@`nKAV#Ktd+7??$=_@}G9|eVkvNHR$)|KPG>ux&u zo}M01(eb6_AJx?LGSD0UvOPqkT=fT37!07SDLQH&S(|+Ltj32@LpERBzB$kT8z~i=U?rLnNckjU_ z)bn_X)1=X%btK-R8OEp+G{z+@CdRP-!jp*wA8_^<5P?rN-!y?8i9~C_pSL&9lF+z1 zY1@POV7FX4QBAHi^t7Yvbw|>zAb8(3ukrB}t@p3Mr}j7nnEnAcfZf16c|pgBAqIZA zd)6^;z}}o{-B80&E1p#LJEf|sqDYN z@g6sizYwX2&=p7?6#`doIYJ`a)WYEsprRqCqT|jG(aA^(Aw{Hxk9dbpI`zqgAZRGa zLL~aenMt$a#@j&uvp)k0PML{$4MNzE>;$1IgFA=Q|xA08}JH3!P5fk_xe)dbeHw#5PwMM7_4pHI{y z#iejrV_~KLdg&1Sd#hkY$9E-reeWb%r~53G-nH@lH;wbbsRYW1*XP62%R3Blgi^Rx zB1Nk%IQpFGUuqD-Vo_szqH2f2AAJ}hRIU_DL~NgauMrDbz-QyVzw^))^F_H3twN@S zcJt7`e&sh_bR5rzIdg;b7lH9;Q=jrjN{0L|8;6;?T2aVtN#@4%=rP{h`#nRDC%*TpGX(yYCqxl+z z^&js=-_t>HBGkk2lPOZ#YM=Z*Y@A$Or77e59`9YLO#|uYcd^8^hOtY8QjFT9v!33r z@ZK8(2kTDz@9T@Cg^f)DRhEacd+p;Q##>_aBrPs(7!ltO(k}?eA_T zQZFTO%qkZO>W*`mh=@??*JvUAB6fE6e!x7?fqek5gI=x=2So*qjp`ypNit_;Ro#cj zXlkBPPcNkBk22zFRajMxO1>Q*(cu4(85xn~QWFP5Ifva@iW`^Sd6fBZuR!(ZP2MynjA3cZ17;4WIch7x2r-GEZtMr>Ts0+1Uje8zRjYLTY=}3K! zNgHNJ8+$`etrMW&e}=S11ml0Z#suhw<$<|X+}>%EsC1W+>-pwhenW$fZ$~yzBkWpM zE;hrMUM@=Fh2?Ayge&u5K4a2vp#<&chM{*mq^Ip0Lk9KdkR}f%oJaB(g z5gnLP*jj5z+I0F#OK0|Os4J3+u$s6DnHw@3EQ*rEAfChO@49*$ zZFboq#`X0K|Mm0_9KscGB_&zznKPsH(&|J(j9v$-cT7GY>Z`%C@9Bs;y{qfVVMiK? zkukd=FTB5ZivP(LiO;!QJWpxdGS21k_`C|1gEO(tY>WsV9)A3I8E%CR*Dk)+!xdkp zP&>G5L;v~VBL>ED36>*=~EPYlI&BO~fzd?ZjcVqK1J%u)ROwY-uSy(9hlbZ^lzhj6hgP{&Lk_4qQiYg)>IzSD_Ar zUr*e=S|gMfxnXz4JJP$lw(qdQ0xAR<^42R!BhwGpwH*kWEgHKT(>kJ&a_H~$c`%lt zIJ#_&p)m*yE)!V-1MQ{iM)0F93y<>)TLL5SKZ7Ul$`J+g-Mhf__^mTJcnCAot%d+Zo60EGG z=l341m!o_H+_wMS+}!BZqs!b%Y~agCri*TCV{gV{+ZUgdm`)I5$G953r}Hx3!@-^2 zEXXm4-(2NioNBp?&>5?r*O;BLq~G_Xz=;mjBTjJ|kmU~b->45_4e zy1pApNtqupmGy!pBxEr*NjY;tqb9DacJ>X}j&zexWmjE17USepRE+MvIzay-<8c1+ z$RZ|wt*lIH5cG}B10Qk@uPM7RuH|H~Lohz@=Xhs60pAGW7j47II3Ak7URBru)6Yan zVWa(0g}p+S@X4}xN6sVyf8i?_V}IpPM{*%XCpb~%DF3T730uMcxqkIw++i4k~ZwX`}MKdkCBPZyGt;|K}4jT12J zTr?puy^zc2bTay2Ny7P&7AYsf6{nFiv@ny%o=V=>+}xa>K90r5f7U@vOjop=Bw#)j zOG-Y7gxC>T)axC)lOLK7A8*2E%*Wsm9wCWOar>rpvguG6WX!1npIwRI%(N!($wDH6 z$!@G6^XYxy+=9ab`^CrS-wigdQwP9c>UiMF(}w)hdLJjy&b{A_G1w99z*51%AvVKA znh2$7S`RX?al<2;4-OCWva`V&at0@Y@JY+50GQw24#`qE@@8n;cHrz~V3RV^z)c+k z)jCd8KGNss+VO5~SZ-H$u#xd2!BfME+~2QZU6uifSUC0X@ycgO(nq;T_o5606-XE< z@TM|WY>QZq{Qtc>;$Jh__NelK3i2yk`A%ukU~DXQ9waEFsmXrh`@ZSPJ~%1}p)WYI zP(L_iLo@>BhcUUR8$O+TgNBh|NhRlnaf%Q6M9uPL*C+4enG4tc;mfhcoQZjAYG#Ln z0@NmLJ8j39AhS%RrlVTwRrjhmzS{6*F5xjbuIrd&^CDLL?ffwzk#fI77{~1cdJR%C zi#hXZaWEn3gjJwM#-EB$4N|!ToS|go}OGN=y6inx$nJQd1`8u_8;1U zg5L$R=9LoGH;8XKr-fWeFjtL=$Ez#kE)8#U^6{#Ps;Xnm{{0}^;bqF%vx&p8$&8bH zV5>iQkUa*YL+NM1F<(MX1MLaf6yc+aPvu45C(a}*KAVxz&TL3$!A|ZLVmd*oZ zI@Zs;J6%l~1BnEj<*t?|7x z_Zh+K77LHSnSYf!y~Dh4i2=v$?^dyi#d zbr^rV^i#S6miR+Q_Svladp>f;N^#R+4eBp5Go3kPoosE`%c7l0YahztykYjf(J(T` zgoeU@Yjvps>g^Ed7`BODpNgO`#8;mm*C^cQ80|Q@hQiCL61!9JHr5R`nv()H3N=-gpK0-gHc?+E;YAGV4_-as|tvr|?cq%$6featT_QwJO5ylF>-j8jbyBGs3qt>7c=HU1^L6X>0bx>JlM-~2J z98yY;i!{w%TtJV}r#-p#UyjeBMK{qcPO?yf?*My1o;@vwTk22YciBL z005xH? zA{ZCysAN{%tZMH(c<=AFJnql?hzsiKR6t?N$m982Ig*$ut|-$@`r+|$=kc^H>FwP* zJF9L5E5m+YF);me8nwC(2S8CXYOU0Ny>;NPbPa5hi%W#|kH>pooWyJUS;R8MjUi%A zDMLNts4_{mcd%n($)s#JYR}yA|3EMNL3e#U4aO7N_It17H5l`Yb30KhI#qi6Zo<*k z;GZgP{em$Ey2;F-+NN{MPGj411qL>@jG9`)vd5*|QJaHwkK8V{2#}DF^tv8gkGFgS{bz=u7W%8RS?lXg z)h$_OSvDI3RM^$K8gNXPM=Gq zU@ECiFn4{eq@z0;@{2Q5qx!!ep<(x3nbgI@ci!{vW9!sob*GPw;w_6h6>g_!XrE9% zrFLAIhRWD3XK=HO9(PmNg=uYebIRMv5g7JCbA_`s{r7GP3hk2;^asV$KaFbNEZmzT z_xwKGdI~o0d75S3-s`u;Ihab$g-aAwTHVsSr@y|Q^R53TBlu(Rj%ZCxfR5wx$q6!@ zTXVPz3AsEA`UjEGty7AaxJljJ-o{xwByM6tQTDYWmzE1#+%^85OJtg5-1OLw=3L6<9o7)RH(h5%K}zc zhY*pG>&z!a;1Sly7{Bwfu;79x@Hwnp8lF$i0`T6~O6`H2p_+Zi&g}u6?Y+IYxH!MB zWjjE&0i99c?5u-Eg$}*O89MlT5)uPWC8ci!{4UWAR&$08zs3P17m68$?ry;q*lwo3 ziOFI2m9e;idau$*|05KKUoVX4<)>N*?Sb`>|N8yfugz$PPj;0LZRquoYI@eWyoAgK z8@B)4kvjYoglL3PX)RBlDN~=CpMR^UH#(ce#4*<$3zgL{`+cDi{$}x>rE*wtVkPI* zm>-L2q$OjcLw@HXiV93lRxF>zqowt&*4TuD!`)r_VFZEj{Zage{{fMG3{qA$8AU`p zJ;1mwgvXMhnK+^|1gF?Z4^<%72i5DQ4gwARBd~CxVPOU4Qgc6h#Tpt`&&(M)a`z*` zbr{yz(u|3nn|{>hgXik0?cXEqEHiO7W;P<5iBBry<{;>Q>KEpe`$(m+*SDu~HxMyl zu5<0-HXtrllaieLZg`iPJ(Wefa=?VIhS@G^v2xDLc zq7n=Cm#A!9-TeN5VAZskv~*0#$(cAYp;W&o%A!VP5K@bR78}yv)Iml=0~gfgqpT@8 zUjhTOg&xeDWblz&vH&wTFMFUa`dw5)^*rRXhHw=$i%0^rp-5lb&^6yDPPoA%8Qf?_ z5z$K=0s_4)fu z9Nl~MwgZntJv7%;zEy5PK>$FYN=uJa)n;PirzK=$pylLv7Z-hjF{hxVC7~$Oa=l2f zqKTD-4kD+FE;Tk5UPMGBnT71Xy{sQbgYnyR?HB+uCBNuI7%A6G5HmHUoSC`q?j7ws zMea~m>GHpEekd*T`H-7y3R=}KT3Y)}lmr40=vc}eg}nzyWGoYsDk=bC_F0~^+&xK^ zpzIqhT)`e*=#XcfBB^cs_-|vXQfgM0Q51VutgJzKVOlILS8-`2qU>*0Hz#ofrV|dL z5ft=7iB%=#_ekujh0f@zu&V-*s0PfLGiFpqYzhhr?hJVx+z$5Xfz6(hU=7f-1D#k= zPcLf1yxTZc;@h)Kea~3Ys)~%99Om(Hp6b^`@ck3Avf9J6R)md+_^9fnHlAr(;G7Q+ ztS%maF225I=V}~ZUY2!r{cK|cH$B&KP>CySAyd#?i*98ES??$`U=qBqui->Id$Lx` z{uyb_7PFzD;p*h1;0m^&{)r-Z*A(*O$76Ex;jSH4h|lzz`OMt&vgHz@Uo~*RCnF{i z>7MOQM=RC1fYVwPx=7`5bQH2vIH|d6ZBy9X95OmexjUvHR`rvWlT!jX2ak`B&G8$c zTJZd|7BQ~mh>u{ z=N$cF#d|#)tI_^qWrg_hBRmj$*4A+54;%*{i9J5GIG-l^_`GWdj1oC%t{5q)^!DG! zlQ{6uLW9+9g3CBf+v~H0kBELI|o!HwoZ#_T=(g8*lxJ?9`a~pLN z-A|vJHRuz|=COjhn8pN|>@V_3BO)SL-EXYl6f~ng4A*-T)W#(y;3YZXR_@!!o)jM( z!fbX?iU}e@!^OK80+vn&V$XVUYtA=y?&V$Vi;DokHcFS)*sB|E zn4-SZq$RO@Wu<(;q)HN@;u76}Kc=m9DkC-WYU8IPHNz19havtoSSo0ZNfOkeD5z_g zViDA#!EIV%vthZaL-&_^JD_Gt0;lLgjZu*G(l0p)Ny(j(BBHq5+&X~Kky*_##*B{2 z^LX4vgIN*&=I!GSP`09%mqkJOLUTCF5SN;2NkdB;`z8&({VnK@25*j+x-A>PN6SyL zH9pJhnpdjcZs{b97aIZc@RKC*!V_MxV+e`mZETB^@i% zRla(`KdKS-Gg60imFzNED(LwS7c0`8~VM z&0)}ufiYjtzZnZeg3|iyuAyO=gM;sJ@E*dU5q51?oGhJBnxMMSKOhN+ zy1Hgp3ISs%BvHPc*Ckx@x`eqCYUtJIgA{dM7C0b&(Z zTIU}Ntbd0b9c>?mzp=7%X7hX#Ju42n+8F{(=o^QAc4iCje7f7a6>#+tdCG_#bR=Uu z?l<%#BssFF>?t}e&NVLQ%AnU=^V0g_^#VyP%`q_{kjSVrxX~4q!fnTzlVgB^g=G(5 zjftr#QT4TVXx`fWFKqB=&hIGlLK#|MrL;7K%8Jr1)#Qwya-+8}*M}KQ2JVNpSqE86 zCyfycyIe!JxQdL9X@%E5M@}y^{va-mMtM3ouwJPP0&U8Mee<2O9zzg9rjQX+9uzmR zErSMfM~QX#2)M>Yk}6XMqf%qcf8Il1(FEyuRcb<$imOQw3CW(9CawxB(w&H5myB z7~l!(IlN{)U9{q{U5A(|l!nNhcXYdx3nH9Vt&lw5G_6GK!nX$`!_{)vl|L{v6?{> z1c)kjF0M=9)H7tql1hMlHZQi%HB@4p`Z&jR4! zbfNZ*{)sk8yBVOkv_fFLgDxVVLAGS=?Lq zQ>1(jX8HQ8K1O04Q%U~~+DMjhY@Yk0<8Z@tZ{EV{!#i)u$iqaz>Igxc%xkZ6*D_N55;m6xPR-`GE&xs4N|ek(j_dfZsuC$hfKW#n?RyLUF%g4h z1m2Hi?7D^U;B0Dm&5F#+z0c*}@+b{W@iM1X5#_1wJODfrF0tkEu*7r5MSDe&NV14; zTl@#{L7<($FT%ll0#b4d?GhPu z+frk;6iaX}?mxi8|Gx0>)vVaNvf$$SlOx=y;paNum6e1WTq8?CPw!t&&xaL;T!aop zm+y`E8S+8W1tJwU0Bsj8o`F9&fDZ{ly}F@Xzm8-T-l81X>M&s6g#GvI#VCo_WRi-^ zK$|}LdNd@!KOAjITj)B*cBF0)N9^;^cSXPxdRloqZeH1A717?btuRg;^4g^aMf6Cq zs*6Bd*&|6U$6k{)EpKG&(`ygdFh`}~7fjuygBIV$~O+nFNY^Go~mZ_Q909(D8 z%1z|KoYm}rp2DTjbFl+%I1wkRpn&rICluRmKKgkVX_Ek=F1+tZl0hfAhB=u{OaL&n zDypCd%VYO(%;le_WtC{KQ=#ul#?>$PAMwH(Fm6q z92y!J90a7xTb@EZk3+F`9ZXlNt5}LGMx{$&yu#MLcX<}DP3{h-h=Ohu0Da94Du7%- z2RLyEi9jZNMkLL`0!TXmL@#)v+}2itEfcaB%sJbOZNmJ*(T+K;n8>)TY=kYl;96O7 zPG?>PepFdSMb49Q`oG~}Mi;{=^qTD5odJ2nDf}r76cpMA|sOrtc+7d z3U8pZre-f{o5LPujX@X7?r4PRDnDV_S2Z?wXU;Gz=sJC2oH$Ck&5NBOC}`-MxkFdr z1qFCZ=hpf7)Ku5e0#CWd#PHKSEgCvo|Cl-|eww_s5QI-dgKQRO1gM`z7mt}uNX?mI zlg%mV>BAlNMp+Cxp?E9*BqGQpG8^?;_M&tX1ul{$2B zbcZGq6BOSX{@tSCTEu_`H2UqgUn;Cz^V&UyB~OY{p)$S!pHoU&D{XjWB;n_(t7N)- z(HnVTzuj+VVRIbgesUioo4HKQ!_!l1ze7w;+R2E3?ZtqAx^2(=f;-qFPj&BI&JA&U$gAqKO<82X0^SA^ani$s8x1ve^qj8y|B6HaKqvlzMV7u@&*p!) z+X4lXNwecYEdR^h7LZcO-2cv#X{|1hel1heb=|?_VX;b_HX#+%2y&Dak{`)r0I!Jc z*YPO~n<>%ta`%g&VQ#tZA5Cd#>HMZ9jZBY=FK=4pkH7a4Z+31_9bD`QzJ3EVKMgvS zd_3T$)KXJZ!7wfF%^?o}khqaFuA!Ib$2a*8ysz(Q=*mFtD7}+nmKpQ%;wc>aC~{|9JiOQld@kwH6gJk9QfaTJE#kK~nSjS$3?NyQmJOPq zETL_7*pt?h4z<>(lc24u%@4+{4OK%EkEhr70Y74BG-VnTY}9C!>VuQ+rwNI_I0wLj z^afA0>Bzg2pssuWa?oyKVp7}EkdQQbu%3XE9lFw@@~&woah9&R$+Pt?H;8zZGvwAv zxrx&-{7a!JEgc=O;NfwmMRars1ODyq;gB*n_i8xvbBy2isaPe*%iCp zV-n%n6$Xy+9QV;XBc6No9oO z)+=atw;i%_d>?T;Q}>Wn+um-ZlpOw7Io)epOWzjY=W#ErjM$*Vor8 zf(th=ARz`E4c*srV4l}CEM18lJ;>)^1056|SeO07>~Zm`U(EI}@bEL<0Q-alaVsl2 z&5FdP5cCr1FC+_w!Yk8afR0uvlHVC_hk#_n7R*csIXoXZwYUok;2YPx`1GPYA_9qE zXh_3gElinsMd0q&&J>9+S=zRKVi@hP@EaTFU#|Oc45#A?7Y>Lin@}826)GvJbOnCI z|I5W&y=Ypu!AR??J_xkco?kY?{y~p$$hUPiS}0btO%NR4e?mA1K`LbXsPQsO{s`UAkvPN;lvo3=J^(`J-f|^-BqAowC%5XlLJS%s$w06X0M# zpSvBL|GraUzH-&hcllGUjFIll7v|{ol6~Q`1Z`@2w@gihOo^JV?x>wL7CsddB76lN z5Xeef*9WiXGZ&_-1PZ|YrS1m z3T9?h!0&oCGk^dPzz;}BFgR7EwmU_+)HsMRzy|Hr_DY-DYt9a8_p06(q#(#F%?Q1s zuJ4WL-0~FdI~NcnO)I*<*vI3zKi*_oKBMa@K}9Lvaq7I)f)>`I%}80II*j}QD9(A* zZmqf`%*@f?)lj+=5ZR;q4Jyqrxb|#S0uf-5Jnn4Q+e6TqbdToka$w$@TRVb?C?9tA z4~$jVA|kf#{99-nw{RusC@9tEpbh{>V@Ii)CYZ}e>gW(61^H3P>>AY(iWQ^+2kyCt za$7>IJDU>n+~oYC%)#}~YyqdxLCA^e8M!{gd;bKwIg;F+x?B;)ilL6Lo|%qw-~^!3 zuR9hi7$m8oNNhN%I$v?dhZGeR`#D>C^Q#2-e}Y9H*^>`t%ZcwGR!Z>?u1etO1qOaQ z@u;d{Zd`ZfHp|p_w!qG8b8Cw5H~oE1<)|~A(9#-GXZRRjKH9105>3#S$c|`zzwMb= zHAWJs+vFJd!e_c(%r6=^Ggv;aapQGQVGt6cp`%1F4{c>CtZ+>c_?XsozdJx6==C4@ zpUf|ApHKfhGByrpMog~ADJh|XT2;v5A4WK|(6GpzA@*<z9T~dY&;)%(& zxDYzG1#fFU)F9-zX$a!0+d8*vOBk5+WtS~iH}|OtON5Yc0`SScWmd(;vB_Wb5ApS< za-f_4VCpffskUBVy|}y#iOQ0Ciih*)cE>3DIyGfP#a$Y6c-k5l_BYI&)&Jx=fgA5M4WGch3qoEO;1OUocP7pQd%2o_w+LMJ6EZ*vT=#hxN7o9XKd{ra&c4|ZUgM0$hE-4QTV z8-X}lX-R@5a``Wg%BX3N==yGMEMbZJN)aifX0H0~BbiyI-S}eh#xO2}g22Ig`#Z>u z4frWj7uO3&$P{=8ritfl zUs@COUKcy4*6^f)!Rfm+)N+c~e8`BcTNS#jO?bO@y1ozn*_mqDD=w^p68*AOcR0f9 zCX-#KGIHFw1QK?bk~wYOPgQEQQ|86MYBQE6F#)F| zE~oW;`$;vkV>{t@E^tXea26Mbp3`<1nejOXi|{;5@5vXaZOnF?V#>c}@c{yv+JR*4aVivA-bJs3F!R{n*8asBDp*!X>VAkVIhn;D~#x zQGT{{xWSa=V19r&Iceznd_CuSvtVXnX}KAQ|NZVogQiF>?U&tPJPqiK>~cy%K40$U z5aMJnY^?VmEhJl6N=3jKKD!~yB|v*TIC5I{gcPiG=9R@-*a!r5tdsC*Nq+evKtrQs z-XL24E8f2Ai9GP3jC+fKT#$-DW#o&r5#&MeWp)YwKto7~%hDo_xrKp=GTO-As9oi_ zq)i1@1ZC9G6%Jymu%_l<)6F9J!vn2db0C;<#Fv($r$;bPV*ZoRaSA;M37OZ_#QAQq zRWyWVZb7>lzpC)17VElz%(y#(%xRI1_Rheb6>?|CMM9z<2`;C!I$A0&M87DbbgC~U zCO)`gq2JaW;`|&QIH9&;rSns}9=f{Awhrc!OQsK`zLqp;D0gPhNQZ;?;sAXl$RJ#K zY|+s#^+s|~h<>#nMmc?HanM+es2RVqurNgx{}DZUZAMzv>+Jr^DB>wlD4QYzRtpOY z%iDYSw=nRT&1|z#lO-a&TED}WuChwV&?x6_6IFgJ-Cyola&4+>a@&}fQBR^~AsL_@ z;3Li#7efIfg{}YuataD1J-xA-Rox3>PmCuoY6c2UPApUsCZ;GLZvzb%5CTylAt5=1 zg@K^!17N=dIKRMT1dLi$l$3d-9Fx)I!Kl5=@GfFF7T{9>t6-OH-|EofjSD+XFzIS<7dmO)BLby8Xo#Lq$ed38%nhyn0m7~G#`TiY^uk>M8VZIJr>-~gCo##c ztte5ce&h04MvNZcuLz-=uo&#A=XX?OqPE=r!bQjmu)|>$y!h(1ogYQt4^1k}5o%ThA-`4aAIBgtkGV zCi8mA%`S!pqx8ZLd7&aHYf&(YPhQiX;qi#?tOZm_i^UZmJ!DaH#C>Y)NNIq&;Vf=| z(h-K7^A1|j%dl7YmpU_py01_)-Hdm=Kysh^T)m8tEu$}|*EoPgw!0ABs?jcFj>1T?3hlQ09tGO(wiA(NM$|8hNl zRJ-$rUZoctG{ehm5$?@N8Y|=ZIf~q_;9Y81GS{cuhL?qmL4i}@3_P2ds7xTg0kEwq zpi%UDGB2-U4!(OIgiUwaSf8rqi$s?-uI#EGF z(nkHXY-A%E44R~M7{PnMz|@*8^`lDE+3inl*CA%h3Zqw>9>_uC&e%%EFH#{NBfCJ( zQs}kjJiq4*>nB0A3l1g)>csN*TNky@Ejrzg3Bk7rsP0+8uSujQ?_)yIl)QYn(_*^Z zqkrmoeY56FYkj&H0^x5&Z-NUr@rA&&r`z+U{O$O91}j9m@W1Z-&9HyEvva+gkSu6x(|Zfe13@A&nVCe*uP={n>a!hf&&NMl z`T6PF9#>AGqDxeY1_^&IlYqJCrZaZv+ADU=QV>Y!uXs~T0MZUVF;|IQ?N(~--{i{| z_0h95)#|HmhbllTNL+i`WwO7s^--PS?QuzxastWS*Fd;byJ&^t_*09w}i}a8I-M>PD9B`q&>H zhwhtB(Du9%0vJxM3Im%`IAr?xPM;F;;wY8JCxkmI-rm=0h4O!5 z*7b?Epoi-~Zv))wf50x^4ofUFjaVJnW%l~tQJms3Qbf|(b9p=yl1MifbHQ{^+DE{0 zV~mfFL$v!L3xKSsJsc&B&aai*&tn2x?Kz^r5BxmTdFb3yqd~vDz0K^pWBgL-9Y)Mb zDES4_3<19KtIN|--B^?30h*1CO*+48?7x4OVAlm>6LtVzt))%PdY}A#?Ox}9I_r9K zX@a<^EoXdYyuBKWDOmb%wekP`2XS$6@#Z-cR#PJ&!1a0j?sKAJOM{+77qYmh!0meB z46-@naR!_2TsTMbTKZWJQuux{p8mNd0u!NvhKB1Fn*x5?lM*XWKHH{F#G!U7Q5EkvCm_WMl_ak9k0%0am;>DgszJz&LfSYye?=ad8l= zol4g7*tj@2c=*l!7_zI|sO+z4VDYEr;aDHS?N8|X zy1pvy45l0tM1p1X`nvINN8V*k1{wo{dMkD@d_*Xnkd$FlHXk3KWOlsWzyRSr;qpLg zUq7ncuVpMLvQQABmK-!BB*RCO8`qW}J|g7F<#piTNSSBD+c5c4CZB6T)-15+7X=yo z``B)cvFYpE+^8$A=?~YYH!>cb8XvD%{*_Q5D|LKa5l9*^e((GwL`h?spUe9U)ywd~>a_z774Ps85W3+yt>N$l1 zzLaK6@U;~fH}8Sv#&~ZugO!(;c1+;0JiX2F3$2yaPT%b^S%#;l{n?p8%Jr&y?#-jg z4R{)GEWI5l#82z6vD!=2=n7eJKy41~+K4`0Y8>KP^B@DV`kP4JY`ak#pQJwY2TU}6 zdbb^ojU*ro+zELIWC2<>TDz=SGx``133Xg%z&+f(=Vno<6 z%BUr!ct!Jwh`|IHF;QY--E^csg8ShtlAOQM&=rW|Z4alQziIET%hEJj;@fF<+aqLc z7|r1FrKPt!V0VY~f8-yng?U_%Y}Op^%p~nefzBCN76x<0!}0;W9*Kp~f2!xDX6@YQ zaWz5pc3!_J`)}tp7!$ni;q>c+c$VFM(1qq#R-U-)*}c5p9D-V>0B|}3fYUI3ygB~g zA$&jbBfq#<3dkGVi+m^X^N~a;v1v?os}Dizs3{ExHas3z#q~db4plU+P=c@MnkSu! zj7*qz6H3^?HkCtV#&Yn7-G~U5`@s`lZtma#)o=+TGZz5aB=1KGKNM=C%DA#Mt ztY=5qZRe~m-(DX$E*@qXPH`XuSzO_fk-94-u&}VrC>Z`K6}zc1s260U{kFUl?thjs zQ9CL-geeal_pjYxU}5jK#kk=}1imM4eIg}&Up5meUC?RGX;h=Z?Y$a4S7vx4LU#}3 za7W&h-Ahy~tlstYPY;vIS2{WxUn|K;Y2mYUqx{Ynk!LpyrY$*yNk}wsm;@{BeP`ff zV%EnajrzM#dl7y>Zwd!NBcNie15beCDDa!UZ&-v^^{XO)Q5RK$mPeH^Ge(cO<-I8( z-ry3MpKwK7y(3C$f!RMjH3PIa(6-X^CMMXaMh)*@K6q7I;uJaX%j^7ctR;H*e-@xL z0-A(HquyD>nxVU|ck}xXNs~J8HI`OW!}Rfirj~|GNH8@tYU|5E#wRAm5@39(HbqRUhyby!np#>wnN1!s1q)2EECL5n00zb?I6R_fZ7pgH zaKpT*i;J47-?`qAki=izpaE%YfBn-j2S;~L@1&(=59)rqEJ{Lpmw#k61OSh*mCEua zxPBSzABly8?oJlqwd!JOCM3qjQHTWvp|F(ygA%NKyj$ba1x&euzJ6hD= zjNihLEE8t?*R#OA(x0zrS^mu>tn33LLje_Q?DDeWuX#24kIwcg%JlN?Y+h||0vkOR z0_dRWHS72Fw%;ZmlnR-$psTL>`|z*L?C5p&cS{S8(?1MggewGNUx3lX#K!tASQGWZ zTx<2iM+sLUuK&8doVwyp&vTN>7D<+u^tPb+5)uM591a3r$NiQxc@2=%SJa&HRR^7L zW`w-{p=J(QQIJ`vY)!$*fz8OMgPY*X^t9^M`LMsihjW)oN>Ah@t__;gg5Rya>+ABJ z?=`av@Z!HdJRSlar~UMH3Y@u<^EkLj=A{8Cx*rIMOp7bira5tnkMr$}{js8g2LD<5 zQt?dmMk!4#N|)s-uC2Xh-Ofyl+1EzEp%c_k&#(*~QW%>DgJNC3mB^ZGoPbDPTn)2w z*Hi)@-@>X)SV{9B4+)HH@67X2`JCI|slH=io`?AC6kI#} zW%eJK{D{?6UKsr4J53{ta?8Sjaf!H^jKD%^4;Dy7H?J=l*EEaD5+%nK!ZXXV^L;C- z5ARJ=&?H6o%m5ZVyrfdxjAd#&hmpTH`?e`Zg7_6Vzto*Y1eGVK0#*6h9 zt>E?y#%5;TT*Tu$_HSN^owOf+QNzSzvR+j4>mB(ip8zC^AuiUdH|X7*`06W(y3-U~ ztAx?R0E)}Xqm?>IF;mvW)R-UQ z`3g$goTw!zF*2kV2&lL(KRllg!F9!EWieHO)(=oGF^#Ke3vGHB1?qqyl$!B=iFis% zLrn|jXCO5bkLN}GMjbjyLnbtOIcc3fo#x%$(b37=H})L^;HyT@t01$fMspC{eQ7%YGrS(kI|5R zbW+wr>ROv6&V|38EgBVH?`NvKDE5R)UkSHfh}(db!WihloA%AyAQU7X;1w2MF+$K| zu*75Dqq=?(TMi`!8FYUECNBvC1M`LkK79Yz-qF#44>-jr-6}KniEr>HqwTXEk>fAU z-y;Q+o zwElkT^`mcmgoF~LWMlvzom2a94sMqr4pfAhnHg2Jgv)6abZT1OU?scQyojAN2HIUJ z-`{14VF3ZlAUtX1U~0bQcas2VN^6xG6n=-Pl^Ng~@{5X8z&8*W6%Gy#fb|k0<2%z- zVFE}+6r@3b-_OrLPx3G}UJlwd{&*EBq=8ckB6E_wdwbW@6!b;j^9}xcL@kcgOo@~H`3iD-3?Mo zhqQo{NJ^)|D$*gm7thT5$IkAuGsxcj?r)syoX_Erj9?zkMO7tcGA1VTXE$$Uzr6f% z=#h%^3xlbk7Q0PVPT7pktAh&UD{v=)I+d4qufE>Qscq0PBxFq>40kbx^&_tH&q3bNi;&9ZUOW+QHRG}r<+KL*_ z&AWcW5E?T(kY&b;>%$mW+}?g|e7(F9fp-1nQLSB7ZQRr1DLx^N^tZK0b^noxS-$1o z87EJdSdn*d;ieA^90i?t&W=g5)=JZn8=6g?uA?zwrs&5o3Z@4jjv-wpO(=JTewKWU z&upah{%g$Mx@F?dO0*CgvWhhe?cQFxtMD-b0up?L&ON+(KU+Wd*258fYAt^+a4oPb z>77sw5073c^Nig94na8UgZE=5)7I(u6w&i`OuU+Ec6Qusm<&kBcngKke&9YE`YfZh zkJ!PKw9i^j5=T8K{0cosOXRY9oW@!ViFgBjKY#W^7XD6fb8|-U17zppy1{h!vmbqo zP52}pIq~tCsA%(1vefq~FaO3$nv+i{{c*FnEeU;sjcT7C0fjl@kr2!QU zEg$l#;8nr3Yr>nE?uB#<3&+DAYfJ_qQn>f0!y~4r2kKi&m9aku*wnUx<#%~jb=9>5 zT=;YFV8Tc-Ga@$Da;8FC^msz0s3g?n`(FAzl0cK{RE8w9T78uOBY(mVe+)Ca*^N65 z*dF~VF54|&*ZbQZ92Pgc)M7jmOKCi^x_Wm7Ins1FEYSKsJ0d1=5z%;ds%Y=m2?CIJ zLHLjeowKqu{LZ%^Q=1wZjmerLtexY3<9TOUxw}2oaP36u(n;qS(m7w$e~TRQrJG`= z^Yrwr_dK#Zj2e1Lm&i;9a4F|sZ$1GOE-5SRs9xiShJHQ%jj<2yZB)luY+PmQ_pYvK zIljW>HajI}2NGg~Zh;aKGxEjwdp0=TIH)C`o_5nR;7B&12?ii6Hs7;vUVWEoG4GsU zr{iP{2kS2*g{KBK5ZrjBiZ|T9qUo62wDC1wRFpH{k|~X01Nycegd=fW@9)3 zIB*Qze=tI85?#Fmjn}WUsP@Cqp`M^A%@@p3M4ZWy`Gn4PqdXS}N8?eIwQAx+`gpA7?V5XE=azd$9O`&o%v zE+=}3VCd;Q7WxlJfH@iUSMs)=(OjHwFjdXbOo>iWjhpE)`4 z0PPo({JV_gsIavkdO@f;Hg+kcJmTe;<&yoAVGuM7vQDD?IUfmS;1tHK=_)X$)SPlA zD>7<8{@gfvhwbWWZ+{;GI)vF@kv*Oz=CzPUYd2%+yniqI{A101^NNIYRvySUCS_;G ztgOho9}#T>KSAm(*1u<5F;Yb8nwpYku;PBo#E6sldahkb^0Sh*s5Yx)(mh`PBUTVA zqM2;(1+z8zA-`>I(9kv|e~fQ>+0D_oxG%D5UJlJ()-BlW zVcMS&B1r?!J0!n*Uk1kNZ%}?4LIxgE4${qC8I!!v% znJjcB>tN9EHFNWippHRV zFd{v8@Zk7(ZoY*t`TctuquM)V44AW#^}LeK&M+x~`;$-8D@RzWz(Bs?`0aiiCf2e8 z0>mWE;Iemj4uHYfpNsCv2W!6^FUa7=wNidsA%4wmA!D?x&i`IjzcD1MsID{VN{z zv8!L+E!SEIov~Pv(Xut2m$oqPLxcEjFb475fg_IJyyvAP`FvYvkY`9pn{zDDWb(B1-~!D9 z;%(EJkBR(MxsN)}#A2z0B$t*u`l^k`zn!h@Bn(pZ{yOnv?CWql&pr+O(dZ_>Ol{^WcB9)c>M_a0gT_;(`FRTCF zjBt(QK-~}6zVCX6?lc|M?aiS`k^kaPzw6A`Z%NHJJ2knux_yZP2G4R&kfy#q8>nt^ zFuofCL1+`)DQWQW^E@j~v-q9L0b^Er$UU*{j1$Y>fFV?Lq$o&0ub0d-&Am8CwIyu@ z;vs{@b6bg5@1B*r3R(n=z zzkQlcgxe#B8-rc1uL9+&=Q@3%t4rUu;&rp17n_(Nv13~sRPM2S`4WpqT~05wpmfvH zOF^FYZgE~-{sqU;^mO^~xZK`h-lXk(ivu-}lT+}?aUR!_(!#rg#`MR6N1xL@9PzBA z6nO^ZaMvQ=A@0yJ61qwuzHb#~c$|XY(sI6JzrMacVcW!#qIl=>0-Xg0UAvJ{8fUtW za;lp{33!;eJc4v|=k@0d!>q>YhQABEjQJpw1$u~+|7z4BKx zOv_L-5B?qrd7ZKgcjR1uQ?~8ha0C+w@nGy)XIbdo#~QQ`)Q1mWo&Q<8d&jws2BzQ4 z=(l@Pq^k+`7Ejkc5EPLMr{LUkLO)?rzi(8lu7RLaxrz{p@CfIg z7a`6y+1Ty4gBZ3bqlS+$57zF#DEgbXLZzxb4t{*U+v@ve$LqZ z$w`n9LorDub#+MsKX8k#DU?a_uzL(QS`IZCWE$YHdn|#L`R>m1^U3Q}F zv9{QmO7G#XIVzWo8@lt;y@`tsgSIgRMGVQA_Lt(SR#+Q@zepwgL?IK&35i4@Qc_Yd z>DYIi=zL2_DLOgjg?$x-r<|6zn5SBv^YT&mq>Hbqc}nQ7mO7Pf(k&qP8h;>P~F z{Rm4gb~L}5BRjBsU8knwV|0Ji8_ic&c0BrQm<^GHA?eA~z`k4FfT?qdZ2d1Mr`K*40D*LN=kXte!1sNIji1hJKVxP-B zKhYdVmsTZ@i>;Js5+{zevF;p+&vP65B6F%ESLF-@K5_1u0=%~0NdQCw&Y=?sX7jna zz6lQf?l>-X_5lXQ1qB5p@OXjCfed2=O2DTqE!`2>IDu95$3xV>`=H4O5Eyrx8Hkh6 z#xVq?oRU6D7^JRSqAo84Aap_}AdpyRK6ux}R`0kb36rV8IO-iZ_RE%wj@|qdU$r%% z{N3e`c6d1H^LLmTc%RiU1=Y})l-K!w03*!Iu}q1puM9|->%V&UT<-D$@Ml}w+cSY> z2Hf=yuJ<0na?8|q;6|6MXvxSl#b<_OT3y|^`S{NU^&+S2OG?p0>3DMc@P0cg1$lWO z@*y?|L8GE#=tB%fn7sV`>s(*odgukJ2Pt>vSa4Vv{uHL&#~vx3b)60Ili~A`nV^XOxQK_-;@N7j>*bHoGnhTJV@O*~h9uk{2G7Ogx z>ElV+?J!E4k6u{7!bLkbT&#pDlH}TVLSI!Ral8I@C%z?_5XIRAN$|sR5kFN%sHIbAFfa#_1+s?>9kxHOnb-aDa{}jGg{_ zFz>8z`f;HqB@O#%u)gp8%8&1Dr6{sHJ{3+D6=EIqml%feCBbXfsVi)9Be)D>jbtPNhvAV>(6}<6LS@d@j8su z!gZnwN>R+^QNbn!RXXV)HiII*V1g6W^VGosJ^-nvy;|)b=LR-O@H_k-isyz-sN*ZX zk`T_uE1ia_*!F;M6Mixjxt?27s3(B`d2SM>d*i-sF&ZqE7|H0HBfe+c?2RE0 zQF@|iVG%d_{zPeboGX56itS=8&hJ>8ZL322claV@GK|5LuqYR}roOW{A7S^s&|zX$ zg)nc9w<-lznB8)_-bcH6c7aU29Iu~fLLz^YwJcJ>m?x34xoMffZ5juWAAYA6EwIF- zK`YKiai_R;DtiX~)|M0_mqX*-n9r<9|J9FH*ZMb840}-#34>N+iEruU6g_oP!9hVe zwXgvAmV-nXg+xv7B}2=J%s`9?i;ayduhmz{@~Wz2`oY*?^YL4q%S(g1f+8UCyaeNz z5|!63?Ol+jpn&e~NAxe!?7XUh*sdq|yl&Qs{A6T8Ky{bD8}9+8>CV|W1UecRgNMM_ zz!K8m?_ATUbw|pvaiEqjzB5ajSZ}XJT@5n zuh5f4QYu5(l?{?@aN#0|L{~0J(q&)iZ7!rJ9#a{dDhD8t-}dOR#03|jsSwEL`%!B@Njv{-3gohg{G)SHO=q#myMKxK;n6-rz{s&;3&LjP#+9My*zMn zgO9>o(`#Z#1C>-&1r-z!!79cEXKXWI!MOm#6{%*fjP-SU$HBL~Wa>y+blbi5)%*e~+d6_Ebwt;LV!@ zX=#f*tx&VNZ;3fKv{-T!iZaBeN#hzzNs+W4Dg57Mte4>6eRLQsRX2H(K_XyBqEneN zHO2RBmKX;Za)F2mRS?)Aw6$`QrL&i#^z-Msb0fOC!U#_ZVlTqku`vJ5*QtbS^j+BH z_7(X&WCDf!Z$yDrXgv85ns4#RhzC6jajRv6md)}j8 zECa+6hR4Tm(*{Di3ch*n6+5T0^C0NwJ(S;E6DG!PJKkha-9mXoG|03 zM4Zg_YWLuPhT|c7Dwge4LHSW^VS7a^q_>k26D1+p(qn?dXX%AXi<2&CUPvmZPX=K| zm<+(eOcl>qUgzAxOsID96i*6PW^HY4Ozek@dez_)h_so$oUpdtc6LsLT|aNcekzzS=3a{_(pZScsCMNL6u3YG2@H{eVIn==>VlP52VN@Ok09TNs*!3Px&c@l@doudeF z+YRmH8ZUXA-!jj%C`o(CY~thcgin{pGw1Rv7#Zbgy?8OgxG@0g-L#Bi_DaOc?=(o# zv9`@IQdVH;k+iCF8Z^^5Z$}S}`*WH#eF1RSW?`H-9vJi>@3gzJp9E|3odvGnvf*Ko zd(BH|!2AbTFKn#K$lHO_W$)jH`y*=pBIU_UNj5U7UtQSPT&|Bx2ceym8sJ7jGYkFr zN*j(8=g|fH9PhP=#Y6-g|DE)H&>tx)7aDv!{wgWAi@al{r&ymO*Y^(stAYY?lSvl? zoWvkJ32D5Dm>8&o6@La?UPr;X#yzo`t{WC2C6O6d{d#CRSIwgN@*%T1Vh7r3Ri{eE z>9op&pIg!Vaud`+sKyGvp|V@X7%=5O<$`arp!Z?be01B0?Bkn_{3V0G0TZ;PBv1Ym z&GnfY9_^LOuL%6?eZADOt@?%S%dTrnc>AfofbZc0DTwyQ#JoC^c^ur8;%f>j2vmQl z>@Rm@maX;H$;utw^w+}=ijr30{~YMj@Q=_uGt{LOx>YG13(f`;8TT{Ynoi-YU$wKV z&M}hJIt4RiP78&kubdNUiIz|Fcf&EQ8V8k8RV5|Y_kIHxO?%EhM> zNmDL{mVuujSzn&&araxZ$iOm8$1B?97`0NQ->;(Gt|nOtf^GOMs8@n-Q3mC)#FPrW znL2k{JYFuMa?1C6%*gMnir6-hby>0;e8t2x6@T{(`|;z)qCjl*CwBd^Ih+Kq;a!Ng z^J&1_nVCCyc~H>V3I&+3?}o(dtN#!kAN{%L`ieruXNk$mr&6RAMI%I?q}|Vks=~m} zpRjI5NJ^Ta{I;!S+^)p>T;6_3FKn!Yj*~NH$-rxB{rmrW0m9?d1}mc1qGZMBWnK1KE=<*(u&ypGF*Ow#{ef6o(R3~k zrSBYt>^ONC&zEp|#>D?@dQok);**ggBJyUtquJ$MaL8;;rQHM;-jjve@JHuzQ}px7 z=icMFPdgS7O)8ceyJ_J=O3J`cblA2+STHGV!p)$rQ(`*zfqmai1e7!XGn7`deslm< z$^p&+9>5ZGI|p@K-3nnMhTgue%;GT*wJ<14-oNJKJsCDuY%Vq)aJZHhu)mgOPxbTs z3t#f{>r95XaI{%Z-Y#{r@a)T%6n}y^X5jSIDa!s9VTp)&!)v}5lc=G?G0&_zG7S-5 zT}rGAk7=g)>v^jw^M+w_i0+1jgupUID{*reSJcoTbNYLQ9tgFm0Z5w_0*D9RnpU|Tk>0cGc~ioR{uI}NF=H6x1`Y( zqVqA$ltC{0>{u>qij9r4-MM21@7Amt|ANJOU!28A>cP~HH{jqQ2}jHYKO6O5B{MU# z&H53}BvbH4UxwYPEsz8%-2N1FEFY?^Fnw=t5&}vVrJkPh$S4E&C{k02z=e0{A!=cX z1)bPm-_E~s!lV|@f^066iY={=H7ZHW#MI}3DQUA4KT9TkA$QJ@sw#Vi=g;1_@Z-PK zw~mPJE7jyFX-I+^tII2tzLLbmB1q)Ub-thY)B{{>amkG$1fwn5kP# zad8t!Ow^37k-)X}9lE%(&N!wTSQf_YVC0YMh)RrmVxp|V=(10c<9A6BCnk_Mp%gZW zLpmIsO7#BA7qD(JaKZAsB1U=xZu8BxFzRhk^6$3KAdD%Rn>{BJM%~p59~QQEv3_#| zG1XtgruU@p9OndtpaRWKFTU>I!z}JHc5K;aURn~cyYQei_msgkS-W|I>;&*MJNcWq6*h3sJuUi$}z5rG5_&De5=M}5IAQW-| zq(CI*KA|4+;3EO(>bvm4Y&gxw2n~FMYR?gQE)oAz3r|MEuP_PlHU11(HsQN@vfcFfmYXFH*zW~ z&oI|BJ0n8+%@TkMiEf7jgmQztr%Y;`@eqhJ(AU?u=nbU=0)U)Zo#5s$Gh)3%uG}3^ z2<6ifojKd1SKr|dajO5cN~g`|Jm1*uzhlM1X;!76XF_{!Bcz{R=Aa`N&+H|?S@fy5 z&sOt-^SuyGJVl(G0q5*fyK^&kAsn2#MHF4H_I1KiL9Q>k%_!_71Wtm|KAi|}1(8+% zdPp0*LM&>kAxq$LkMN&CuUov_1WtJp{08LB3!kTQVJm7Ryo3-J>z$zxLQzA|GtNZ* z#6G#EhEuQ8=ORzyiS>%j6&qGoc6P`5=5Sq>gai%u!-fFWg$0W9f727cqDY1LBa@SL z|DvM{3D6U!eM0c{Cd43S&+Dp)RO3fK&d}f7B(}hglB)hMzqKS@#>U2lka%PNKTAam zh8=85Iwnaqt>m!J4Png;j|t^`#SEL8iU3UPe#|2Ni9AMjEJsWvJT9)Vts%3abUZO9 zRn>IOQ&_}1JUrTBC0}ayAu`>Py`T??=JWiIL_c4nl^FCUm=k&k#tIiE{Wcfo_?0JcF!R#O``l;mh@+CE#AjAx5&lcA$ zS~GCaz0;Bree}XsuaPD7CYmKuN>Vo~N3~C8IC)~zLVW613p-mzLLFN0u9gKOBQ6zg z;EHu$Mr!DSwKOg+0@^#tD=a4`j0n5$_|83Q1M9i*iwlu{qa*_=@B2`weY&Gb`B0H$ zKUl`Z=3X;ooS&nD%5ivj=yP+igGniz3^YtQ_Cc4$o$>|#D1ealK76v&4e7lhIDLj=;fxCmPR{&w6(ll z68uV~H9dbn1I^9j%rHE<=&QZe$59>=uq61pXPbW+FITeDUaf zIlmC;%ZSj=vjzzMf&!=8_A&F_JHem7R!qSBH}OucPxN2?mj^fH5-Bp+1CVL?DgAx1Owgk?Z^RHV(vr))lx+eL9Xr?f&d?d zPg>pLbltqNat0oNQ0X(Rez8#Dh8VEq3DSog=Vivn$}*{SCY!RdN|RucU^+no87_Vy zGXq0xYpc9$40@@=BZQa95g@4XGce*7%;IMf42Ep7ga(tM4h&9{l6^@IM$$}5;vvCg z80b$RB3CLiQZS$hmSdrzyN`#j@m`sMK{_#AH;_sC;SC8v$Sabm(1`==;&P?lZ#ELe z9ktjQ+=0>M&&$ioXgE1zn*|>bDKWY)3z0?=-24ZU-M1R^oI)CpvRN^mPuR zn$``hdJ$n%lmfY!^`(}#aDBr%EqiwTN%x~2DTwk!AYnj~d_D6lum{NiIoj%U-&&{o z5*IdxvKd=A)IliPL_KD_l#YFL=<#fGvxE|YJ;##egHNd|0*~fCjmyY~C@_gQq6omviWMQsfw9`nY|D9^*gBe$(9u9Wj7eKD!9M> z)RmN!%~vm*+*_Ei75QV+^evWB$=HRTEd@QOCqQ$rNU5+$rZBKm9Ds1#6mdI>$|dUU z4VJX#19=$8bsZN>WSI|xdZJ|;aFY~d6chp)tp4pr%l;%pziiTnRIsnF@2-n5e}KZy z_LNdgFj>1br{+f4%+DSp;qY5r;cTqJ$-7c2&-DoA&I|OKmTfXpo&v3bn31%*z|yE? z10;|X1l}yrSvDBvcy0@U+LnB$w(Y4oBn=E;&9|N98TegLKL}B3_9=GU^P??%*1R32 z>9h6@OvDD;;%DvBdKA3Ay`|3c%r6-~E;79kKZ%9_jgF!s+tyETYB!dsX0-1p!5R6i zZx3^b+@YNjC6+4XQYV3WiCxp^QKGy4W(cu#mTJNs#03PMVm0X;yaYPjI~26{e|k(m zesDlFhrQlWsYJxeT6{`v2NMc5RWkT-^;%uZwY0S4?d@yYxvgS#dwX9UM3eHqS>Ojj zIv&hA!|6O$7T?O~T7E8jGZr^#m%wxnUZDKB198u-l-aF`I`j1eOE4`OITS;*+>twr z$J%%iM!<|*Txw8C`UtGwD+X+@zzJiw?DKBdnm)}~{2jRZvq0s&Pd_}uS7)6N5{XWa z6_!ZKcRAPgB(aJeTh^TN`L-`|SSPlMBM5FQ3^GPQ&7&7Mb>Xh?+Z z&^vY%xbLFglo@B=VSMSZ1}8eMae2OR5m-}HHRbreY*SHGY=9H zCRSF$VA~-flI1c%BCvlV@DhrTjNz6^r%tSTetK}c?1FE#xM*WWhZnw(GAKZeaEk^Wcln<_L2(`20@5oF3{Qd8TfrJ}7YrZ*H0*_KP1I%GGN0 zsvOt*E+Rn0VjKt|$Z6@%d^i9)D8>%FXmDmw`CmIhx@7bBntI6dx=&`Uour;G;4f))g zfVroEOJ%ziNgHuaak6@_Q{RZ%Dl(3bS1@ROJUyYW?5BBO*checMpZUizT1pdCZD*V ziS0c`EFLL-#Fy_<#y=i_AYb;F#BtXpxa9{ywqW41!k(QY4Nd2q;9v$x5ue?c`|@rA z#bRO}+NBYZY(*_Xk!59wEGar(ReqsHp22?Z=wJR~afh}Zh2?+@S^2LWw z+|kwbF{ElLwZ}LKJr>dXIx&|$_Be76?sv~oyDaS8HazLm$!b7pH!veW&7I3VRrH`G-siB zOxI0%a%sObzbATx@!PCBoO%1jMk_z`FV5MHw(sXDU|+ z=a?oq9NW5EqTCj{U!yHroV5K`q*=vFAjHF@N?BOQqTJu5KaT2b0L=ovT<=;-h;k+;;jS-S9X9cXAA zP=e}@Bsy+)1_QgF$`&I9A*yYzZeBr7i9wR6P{QE%rP+JFm`(SbS%O%y; zmdx3?_FMW3qUvNEK>qI8p8}&(CXZZPj(OWjx0)uk)?T*pR~1Vi4N9 z@Il0=um6yos;Q?Xt)oLE;{KoXhBJ>wq3MzLZytJ%hcZeS7hzZl+1V=4WL8~W-Pc#t zV1u8ojPu6f-B>2=BMe2wydsMFRK&pm^<65I-}b?JVF9*+h)ZZ;T)Q^z*^ECI`0SQ` zj7@zAeq1TCZM9f|QS<3d}VmvH9vkj3uPb=2)niDoKICEHwf|OzAa50 zGp&Z+g?ptljygSnz}PHKGXoY16gQBV%T??-s7T@;=Tnd=K9?m}!SFh4-r(^#QI6AG z{i*zHjR+6_q;GI=!?{I1Hkx75f{p}rRaJ$tOcQrqeR?WUntPWqove6|~kvGD6zwf2|FV9$l z@ZVXgV^wLGKw*Mj1E*9mo5lW|$LHR#gfyVVOF#Vg?*ML_+@60oYb__?67A66Xfu62 zKkhdGI2%=S{VJ9`VLDQ2_{Uo}MXia#LgyJ!vGl+UIrtCp&+< zS87%_53X?Pl;@@BMU9OHOh0_0`WoF7zvuY=JzaEAqQUterVfizm;nyWVDFq&kWq=* z%!a$N=uy?2ovL2jsriM)2+I;$ z(jC+)=hZF4`x>#$sJuAC12{ z`RU%j^%p##H%3_0;_R-juDk$RR8Ur?INn1(_+2kY*L5wN-6Azb`Mq9I7y<8O0Q$!8Qyo;H;A z6R!)2tVfcRyq0D>sVkt#@Rm!@NGzuTS0p$aIHhIRwabTWe{NR49X80ZW}e>6&!b6T zeZKHPUy3{Pp>p~J_+uj=?IauXlU_)O6bAB=`7~^tu{tz(>Sm=;oSO3axqj{65{L9m z(7BP8XeXxbE4;4rdcNmCBIn%m+$Ba_(N*M|uNz+ym46o3|IoJeCO!AR=7=fT+OomH z8s?mkNQ&+^qm_`z1uKas_n9Y-{}Z6O+C z6cSV_%F$tmQ&CqN(q0aqHsrPNAa4xAX|f=M6n&LX#VB&p_rK@imrg%(cBaFUqrPWq zs_*3mL|dLREkypu3JMDF;RWX_uF(gBds66q747Li*|~)icH?)W4*o;h55Tx4_GRg5ho$sL%4EINs zi=|kD-|1bY6lk8KL0 z?G~E@%V(pR^8Q;pE`MGWO*xYB?!JKlc|?TNd<#BwfP7!UYIEy3Kg7XvcB+p+{)-@? z`|iUHABj7u%T=BU$|xs8mk-Z>h~^|mdZflRXGyM54^6Mq?sLv90X<8t!os`%{bvck zcX*-S(aXgGTwi<+5#=z32Br$%>P{HGws+U~`Z@DLJ=%~-f)lQIZX9%s)$Smkot}QF zh`X+L3R8QZ`EqMJlbVo)fF(K8!A}eR{nf?*C15$_rWSuCGv{Is-TX5uuW}htc@m+e z-EwyV=DnSH(f@6hx&0#W!^PYDav9yr_$+Z>ov$9Ee?7Qa-f*VbEp8`yzWyg!``m+- z#(3MK|G+IOJbdvWRm!NgoeDL4Y%lrjpWpn}kwU`=;|OScJBQ(e8wn=reOqKE)3{y! zG#Z!VbtdJ+3Dgnt2Tv&k|CEFm8u#7SggeB^KkpdwJ?ekksjdocnsLWcmnqKNu?yvG z`#G9A%Laqn&lrhmY0Si&2JwsbZ7Q(I-X(>D#Fz4X&D{X7bm$SQ#C`tUsb#_9-}jTh zUoYJu4g^ccWj`ufC*3iPSxT_|BA-Gze%R9{lZkK~nw<-M&$N-^3L zx_+XDjCpy*X}`5mrF~E)v=l#{8ctS%5+o|-$`;!xewSZ?ART}r?&>YBudjQG&2d&x z0cVDa5k<#pLuGrSXGX6%k@yt0WC)LeP1L8FP`ATQ5B258Z#blTa)lAyJLLVrXn&@Z z{#@)7PW);^v$VjO_%-S3wmz=&w2jQLg|c>?J#KG5Z_F%0IFRv@2+M}|Lj4y~2cedD z&J1f$RVdzr3qOwVNRc4L8iBnDtQV_qw5L}p*VtDltcP^U!(T`?P~BI=VU)HtCBT`u zM)8hSMPVZZ4-L%h&_nJw>Bs0(qC_LBaFzM65Fo%8wY4D<%3*PVIrBcP3_r#w{nVBKy4$E`4HQ)A<`Qux1Ac0EZgt#8I+1GY^toKN*v{0AIvJl< zbBzqYPNShmcz%CTXscCpFC#v@ikq0?YCn&p5Y}Md`8qR%53%=eZtf$*LPGVHy~uS) z_v4 zq7b5k7SI6WcFP#~n`aP+jo%vieOIeBJUpBL3_ioVs|&~g&b<#886QL%=qhPKUwxD1U8?x-4rvI($kxz zq+A$~e6>tc$rSK4v`O*7t^4zL#MW{Qy|B7E1_}`u0-D6cM01jZS5hNZYH0;N=A53w z#8+qkRG;X_0&-@e=NInek*qZa2Ce!gZxS9`E_`jn_G3)}D1uX@(dc1PqKjkDSvydo zA<@FepML7?Ex_~~ENW4wr}+$wGu(E%ET*QWS~@yY-vuyZ2Bd5&GN2ku|C_DW(`%Xj zE2z;aDAayR&rPwwzFHBKf1sX?q{2y2!^Vd1FXg@S+`5S#JV$Wb#U&?KGB=N>6scl2 z&XLbqjN~G*c;?J&VI`%8o#5(f;o_#5l-w8CV0CAyxMgiP1T*O{h~W2zMn{29aa~Kb zGCO;g5(l1?v!;!(Ofa7E@!@By%0Y-2I*#E#Pfi{Z8csm$7Zj@(oprDM07aMa`1SYM zPRq=(Q|%j1KfjwNr-s*iYW`;bEwunn=O*n;r`Bj}-2djte}O9wn0|cTH$Hf^&F`w> zap2K61TKFRP|Xz|Tkns$^`am-4xp~qQQ$7y3c@x3l&+#nU7lOZ#OtQHcWh8?Y&`u- z`=0Hw*FzSHycb7iN$JQZwG z^ww`B^%ar-?**_G)hA>XwEkwxtr0uvPVFUj{+H@$(xn{#^O98;VU2RFqS9WKCoO2$ zvpkcyG$fdK6|+e->L%KihZR>Ef_^bN4S#dD5pQqKx~$;Iz*FCTor_OJ^|eSL>0T!= zia;T(bJ^3h98Cv~?w8pbW?I@na7ET4k39*wLyQ0lhSz?nxr=rG@6PN0_VzBq7Vj#% z#Lkv_311i-u3#% zd+@#1e*IF)75CL`uzUzty1Qsh?*oUtuF5QjDI-&O1YJWkU~Bp#$ND=aix#N;H)(^I zq`Y@H%UhPMe*y*u1|-03RY~v!yo-dQXV=4G&EaI$=QU2jw**KiC=Fl|1Q)}36Sv#G zE?ieeVUbi(&?Y1#gE5Y^edy?@D17^FcweAsgsxCF<`N5ESCc+iPzJljP-2yQRUjRA zq&??`a#}_=;>O`Vj1Q9sGc&xo zy54Msq~ker#-ehqrJ3cgbuL!It;OtQrRKklurE*e);CRGtqHhyw!BpGPJf49oS31{ zVPtPV%UiJY;|Hj!@(d4}g>#V)4Ac$pMUV>Pcl%;{Z9KJmWncEmL9WdLZT|iJipsYc zJR2IZK9{UU`T5cBc{co;7+WMQ^B6fe9#+nLDbpyNYp}u&Lct!G(eC-0josjJD9dTY zZaG;X^TZeD5gQxC?5>7)++AHYfS(5!n69JryR{!CPh?hBJGo10a&jn;P8ogw_?Oj) z51`;7{O+GR3d~65Y~hrTA3x@P8-RCiuKpDUpf^@LN4dm8IyYiPpykT~UQB~OXM+r` zX3B5XjHUt*yq1=}K-@+IsIGUB+Xom#OV;SwGHM4^tvf-Z)=x(&&Takpgx}Y%`(#nl zIXXG6USCjLo{$I4FUcz@QQBPnULD!i7iUif16^znC8XlhT2ZWoQklz(dV9cOl;8wS#y zbc$O_*@}Dm_cl_xOhu2BN$F)>R<~Z278E3W_KLVzltv~7n!TR|_4RmMTwE|fRA(UoV>3YBz}W`*QbX^N zgXNB^1(j9^z1Ux_wzRgc@65jC>UuM{y|u;Te{)Tq^T~V=3x@oDetxs3LLwqi-Tm9? z{EsPku4_e>dwUU66kUJh8TZ3T*kiwL(4NE+@E!PwC|K>PHo&pF7?il_fqex?Q$1>l z^D8U4+uN34AFRDvfskLzubMV{4|VV$<_SC*W+h-X*!Sj zfV--~ZMNgvx4qNTNr1qj8)?;GN!GHlos4bNT*+frB`d&*P$a zGgUD0C6gEJ)_3d7-=!JhxwvC|_hXo=Qz|2WW7dsM`}eOM-Jm5tHX5ydl@3t24Sg=l z4R_nB*15*#`wx=@OxqHXZ5rnLG%{7%%|2li&UnR04t}4Y>8pSB*=_CJ&=+B5xW@WT zE-cU`CMNa`#E{EaS(Tn&t=w{gsKE%qUuo!tfOiiM{NC$Lvqt!q4SFycjhV~NV&^A| z(QUL&fRQ&bT$l0VByO6mU%$qGd1r4+NVp}m@u2p0pk~ML*SEYw#ieZ*~ zL&Q2>CW&JvPD+XZ5OnB_d{4AZc{BPJnqJFTXlbdj6-%%G@fnW{#_A^SRv?IUbAFo* zMXhp`Kfdfu#}W{blvgeF)tS4izbKWVWnER{;mKNP2ovKaZRri`O*8(Sz@yH&Lp9C1 z-1dp9U&dzl{p<9DUn8Bhophpo8QtBS0>76&AI?u&>mMZ$o~i!?J1Tkcp%jkyCB$p*>iB`A(fcRNQ0A8 zr|*@YMoW!O_e07B6#rXJ@s)p!gFDjCS9}tp2#EzxbO}BtwS{Yn@LCMvKse%aFd9Ay zj~Rpa854aNZosMH+rw^~?^UEobD*X&i;JUXRHe>TnvUntK1BqG*dGjxLXtn&7=`{y z7zVZh52f-yQ09bv48Nzyrkby#)J^tu#)ed*r%qa?C10I|B%fT;v;*H?!ZmG7|zv{lwD8UyeJc2%iR%nR+Bk@4|3m_f9* z&A7OakczXUD!sS6e8k{!DY&kgsA!N!j-&ECN#yWQtZ8p%M*Bst{N%A<{g+yg{2hd# z3<=}@cF+FfU&PYt@q3Ypa`&2$P?Vg|QCB&;g}CEabb8%10o6d&9)GR=0ZaNE5Q7JmVrS2abB&2 z%w2LAlByl{xx*F(Ky(J3Fw-(q45r#1o}PxEjB96sG69QO$5+zFwghksZ>;{0o>iXHS2rGvSux~{Iv4Dx?m-EvR!0who;(9b39majt~ zxx0?-e;$O2Df%eyX}29h6CJ~5K)Ba$vA`dk1<+yj_2h*J9*N#)+;CN z+JuwDjG>{=)(4h^zLlHPC#H~(gX?1dtg!>W{+mqLiR5G~Ed!c8CSL&NT^CG5Q61iA zkxj4ZLxvd$Z?CNy1)YoH%BqfWHU>_J8JCyoI9TMX^qUmHH3_v)$hfB`SoyYZi0f{T zJ`8>RN(53R4&eJ4gx}f!%C-Qxz?#LvxrDr+Cx2keXr*=J0K`@Sk%B$4;Es4BO{{~?;8jv zcx5}l3VR3BfLj3lGVuM4$B^CJ-2RWIvka@M?Yg!%Al)6(jdYiUG)gxT(nxnpcOxK; zAT1&yASEe{f*>g(U4oP#4d2|)cf3FRp&lUaz1Ldv8gq$d+8pgX!6`V#x`X2>-_S!c^0!T}}qsLFEG*3-hvgSc;OVV`#LZd@es_ z`1z5x7dtccr7>PDcQ1Z(Yn`PoFzPS3&h?YNA3Kk9@{`oD2OjIdO2RD2xA*x+*MZA@ z7BM{0-8HI?goFfL;0g?BOUuh)iY48jt;n>i!ZtP}FtES8uCK>?=^+ukc@uLHsp0N$ zf1qmJOz<%EuUIo`NaF2anzgkxuc$XKPBQ5WmY0WLVhJYoBcIl*kn@)!D#Ag|0oUs) zyt)W4{^Ezd1GvoAqKT5;-3$Osp+4$CKRDizM77Kc)?s(;Qhgz z{wVx+KthuJ^rMbWiJgnQsKh66j6gGd(v9x>wSrn#rSbpJ+5h~hK|#H+;@{R(DgC)P zfOB1@Z%Let-V#1t&SD#QQQWXI?$CB{db*#3JNKvgKCz&%S#MuGEq_TG?8>gLugAB& zl*_b(f+iy)8%%PJuyo(pb|t*yri$jK2rhP=`1MTgTl7zAO3H3;&OvKuFI@wo<2gI8 zSN_?gNZSslWqd_RpaOldWe*GcdUk#eyfkpZLGCrgwd@N|5@KkEOLU^vywhxm9I_SG zHa6F5AHlyBqN%L_W>&ba&YFgK_wws~S_YYSnk&ZdH;rKO#W(>LsH zj8WG@Q1q+-X(m-0jpwdbRssR-WDP$;x!*@V)M3??vkQ~J2}^2jz3>pamA^Uuekm3r zmGb4W-KX{`xNe=)3x*YIed(ow83O+WjlQ=qOZ3tn|FqA>SpS)Qur>juWfXp?XL_Q{m#OgMBLT{BH^D zu*!;x5TRv21IGHwqZF$$Kf$Bj2$Omax5WIBVFnhKXiy>%D>j0TW6h1nOUxo`&{TH+NRyan+F5i54^uj*o!{Db)Vp@pR4z$11>ZY z@#9zAay3%%ZEX@jA%@%%i+aAF&W!hUF}b)G8!VzhfoB2ZDV#lB{7hhKujSd|34`6! z)d*7f^z^jZ;V$hXGbz7=r-&70L#jZw)$6f81pBwayz?TKIAHc;GB3yOxRUXu>j%E=N0$fk&$ffkJ|xoMwzBiOO5+c+Mji~YJ`oF?&b+yk^xQz#GIk)W zsvyLy#VL)L^sQ0& z!l2Vc4e7E)8gf1^=eJOqV|ChpOS%xy{{H!K`Fo~)d?7tO%k@MG1|C+WeDO^BB_4y7 zMU|D+l%`m?YU+S(;||$zPzLDsnpcy}nWe5^f;WTW7_5kHH-!xFQSiqPs21 z-hw>;EzdlKh)X_Vob-NTX}OZp`f~Al&-Zm*-C>}O6yS_bKb{H$T6#zZEgq#ocohLuEldJ>{uc6~%R01CbcNtZk@SrUt?o%moUn&_shoQEEQs zzj?zTbjFTG=V&6R?J z5=#rk2A8#py}Zo&wR9fZ+p|FyStk4Iaps6vog-P;f52C*8v2q!M9M-hae43S*RRcO zfsjF^zeioL?Xhnw9fLtnym_Tqlqf?bcZl=Z(~Ff= z-6=Lv_t&ZEtl#fo;KwyJN$5MWSoJ5$R!>dL&JKR^{|n9m(8l%_|LF%qw8pR_NbKh3 z#vq&Ood(6EyrK;BHY@RP5K-bNshE*X}e!g&4pfyHf{zMyi`mh|R)rZ094? zR?-GhBkZ#PYFYFh{`u{jjJEcKP|mGh@%6lG=ht|W`*1Jq?02ycq@3#vk-j|L-&erq z1@|Q(Az^T)===J50sfrC*jV&WpFSz8eO+1`LKz}(nTc%wEJ>zV zH1g-v6p2zb32PfQ{imUkgtB&1y7aJdw(g-J3f4dpT4Nh0clSFs|9viK16WNq^8srn z^1jONxF)Y6?URfJ_>Z`9y z&S8{f@5LF&_E%TYuM?l9EymQ>=MSZ4LL&{9n3ympDaI%bO}3R~s;F3T<=fJ>HmZca zBUhbYFt>uqoHeAv6s$udbN_z<;Hnw|$FFuL`zl>%^7`Wa(az1ytyXjNYY$>A0D@#k z{oC4i?~(!hNz3U8Udh@^-$plPKE65wLtZwvt>{14RKkg+rA(lp@66QRD$I(39Kp@a z4W@-VCZ>99nH%?MN$!Su{q@bT57p-U(ieqnsN6GYg{)C1Nio0t8C1vUUbVIQG2$=z zb400&O&Z)C6iwrGrc4ec#HuI93c^_a+%1J)s(maM!;tl= zPb-*!g(uR~2IV5`R3^1HX7;Ytx1_!DhX2KpO-$=yvPh)xl`t0-ZKcH0w*DyRA%@-5VB?e-WSuHD|r~+YySblOn@rdUTewj9b0u)~$;Y&zD;$6V{ zV{R@7v|>-lk~l`)NRvRBcN@!QzL=-WSr6gEqM04B;44u`@Lw8Ti;0Tz+6-sVdXIvv zLIIN_=+V#sw??M5l$weU4piuuF9Y)my!UCDCsUcR$s#VCHb~|=s_ca7yio&H)(;LC zmJ;7W;r}@-Ea|dFK&cnOlf+jtGvhFJzU#X{^5rELZM~HecIIXTg;`6q$V;x0vZ}a8 zSs(nb>bmVuUDs!A?YzVo0ak#sG5RM(*LbA6eeqx^m45A>SP!eSp7jES{M-hf%JC81 z`|1Sm{q}(mHlHhNr8O*;#c2Gk>4t{PSN2?NXL*&(o_h;{JOzq-G?Z>4N^I!Q=^d(= zL+z!CVy@@1JeH7`XhikUjQnRWPB&o?@3Q?%XGnoI)`<-bEn{!!#Yk54d%_Zhr)#9u zU}FVO;m0}rcWG&9gb4kgHgH}te;jsuJ{EG+ws@Tk1Tr{4 zKmROl5YgSGMEe{NQ4`QTazpIp>-&9n7C!%j-g+`{96&@vpycg#cZ$LsaH9I}O#Ib0 zsPsrFk`$%R*N70D7AS1Ta|r~=`gmt%zkC4?zGE0N8t6lv+o#60GdjRY0vFoh>FH)! zmJ~hLADY~}ozPRhR0U+5{1sxcwNwqM0WtOT*DW!b9-y0ojR4*nmB;zA0j-4Qi}VI7 z!K#Erc63<=o^RU=%3JP>2JnTF8?b^z@3s^g+4J9OsH&o!`3gjJip3|fqUJK^%)TFL zbEw27d^V%+_W2QZ$vXC$@mrQ~OFmHLsX{_Xl9Qin4WM`qs`V_fuWtLe7i-qo_FZ@O zjf`NCk&!8?EmP>M(9%`3cX)(;B#A&L10%QjsW!0%==__Hrd%Ukw*>~^8#D4R5`%qcG;Zb?8Nx0 z(1Eu_yK3#Hn8e;*I0n&L_E*BviNdDhxu0@V9O)RT^L6)$vug-t6e}K&5)wUV5ca^} z&w*u4m>P!yccz&q4X6xjgc#abZ0jD0+U!16#E`?1XOQK{WXK%i{g1!po;CklLObGk zQ6|DvRjxr2%rAr(6F)SqwKXpcx6HNv>*&}j)fS|@ySz+z56LDJJC2utD=Ul`n~;hG z^KP*)g*N?XYi)=pWmFVu?4x1Pm4MAzZ+22>UUv6pX(uY8F2EHSFGu5(t zIbQ<4qP}EM2n+8RJXDHC#_Xq8!gz~pO&jv_>MD-N^ON>}>7Ek<l!PP-{I3hE)Vnr*vwhhe%i^?N@@UToTZgj;LuOVWdZ7A1kub@Z{6{CR3a`h@zb8dRjqK_ zLa-dSZTe8;oD*pO?n_-^uXK^GpKtB%mVWvKH~#YF&CQ|uv0zojeg@RW8N!iElO-e^ zLEdQ3-rkMBN6t|{*(D-;+g{cNN`*H*j7@j?xz!UXwyNymX{BwTVWa*=wXY``SA9>a z?|DrC(q7?U{z97(F;znKsV0lF&+2SDwQd%NsHfr(k%qmP&ttU@c}YEnj7`ifT7qQ> zaz2JZ5Bn0Z8jdlxs(2@MPMTXe5)PIEz@8?>pAbzy5 z(ci$$UPtKW{y|m=O;p0_h4QzZCvKkeQ6^I8vB=9m{)X6)k}8l;Q~Lt%v%)VhhLBPm z{Bl7r^s4pg(}zSoH?U!xW)u-2OXvdy5(&mgCT?!rM&qxr3#A)i+mL* z#AD#P5k-vZ{Kp}*kRIv+8k%Nfeo>}x3@t{x-b2IUVx?U z2oYeY^TULFpPr8GOU6e8;ALNXI zwwYX1*Gf)CreQmJ%zS_6o~$fmj{VL?^=r&g4RRc361ubrUY2;zyJT*<^2NFwV5+fz zt=QyDn|4LS++p~e*9^qJe)ak(d2l25Cn803$GzZSWl4^nK9YR1=D~o5y_8tN`h44H zc=uBTtyNAa7LE*iY_X;;N(W)9WQkaya71dVhm$a}kr7QpgXGBh-+;&ELEt2QEF*IV z#(7vAj=qxC0H?KLNg9NGp+Qz1`u>6A-CBiwI>?yv-fMfpj6~X?(*sNa?d;dU{zhOX zpeCnwe6Y2pZ+%l(m0gTy2O8h|7&};N(WD(H>04S;7?tS1=rOmGP9=>r7G~xEN@jRa%Z{S1VQ&c zc0ajO=}8WfR2dPD5nEM>s~!o3-6+1ce!u*Z+t^=oEEK>hme;h#@w!SlXBIp-(k3@7*DXFR*ejpL*ApPKB+I`px%_O;AX zRY@YUe*t%3bj9M(=xAf7kNnutysdA3#%anq>q%Va7hp8>h)}*a?6ODE!NP8mv$bO_ z@DTGU!a%>fE5k_W)chZ1K(@DOQ4OZar@A+KlT#$Tc9k!2Bl0~dxfT|dAu{t+Smd?z zTP06Jxr5QC;z4Df7AHr4FJX9jXIk>=5bDgJU+A8qI+19rh6e5nb6reZbTtch-`6&Lhz?kHB$JT|($zG_+ za{J>8$4I!_i5!0j^z*wa&4NJP@K`R+RW8Je`W6-nKx7>rnHpU8$ju!Fd~kn}@HYkI zWhq+++UkMoItsn0m*GE*uNsYi-gMsa%?dqXVBe-1pS36OUF4GY`KV`Y_oQ#Z7Yp$x zDk_WUQieSDT3h9RCh)`q+A3j0znYvelC9pjFU?B$aCgMVg4eKjfOfv`ovHBn)4JHp zDE!SD{WRysc%?}EucQgH9SbbNPVcc26nJ+3kwt#>(S~5Tg5_&`5)yrj`nkvj7c$a> zvKaME)eoik58?57zslW*K2ibQ{lu`~{roGEo|i0LxT{fHs8z^O}3%6IJQlUC?L1XIaMvcw)f zgj1v?Y!2t=A!|tQ!g51WHVTb0>iMFF1xHt@9z9^}D>E=!9P3Ld zn`{~X=UAp49TgP^v#2i2sd2MU3h5ri($HUpZ;)ka2hK75CC!+|4i^2a@Bfm^qso30oIN0YETIxMnqGgY z{&(V$g0;=_@XrKTw{oQBN2CKe7=hM5%byI~A9<-|prx#)CIojDW+9=IPVo%)i{odY z%&Y0YH9Slo!Nmjfv-xG&rA8m^?U_Jeze7r z{rdHBb=5LgTfzKTKK-5MPCLwkJN9!Qap+J)`^p{}RESnId$FVN_7EwGudcFB+aIJ2 z9r(r-E%BnXD)1{eTg-^^+ny=^nAZ!dVCLPwCTjJ2Sab%_TJ^*@*9=0OPN6XW6* zFKwc8ugeg~pM>fE$A!b|LEJFC+-)4KDDz62HvqfDB{ogfVSCJ;a%&}rJX^R~I!P#p zEmQkbdpkQfHwzQfnq6A$?T^91K{`gph@v7o*gU~32_dG_H>cOaV4!%{*9E-Ev5Hs0 z0grZE2mz|C0mYxNEP+xfLW*ZH+%e!oj890Q`0_O9uyoLy^|@lAjIP0Vy2US*d;{pN zNS}ua1r7Z1)JFZga>h$OgUyHh{9LXUCC78FQ##G!Glv_clJ@D7{AVo^g8 zS7eltX0={vxoS2)^Bob9nET8T1fpVM^!vL^%C$-xn=u-1@d%j=Yxr|>!`(eSyXTF< zeeK!Ui0vOpzHe?`Wfa5xPp62PHkZ3=HiqsqS|in9xNI)wuafX*I56S+x-jNzrM$GF zc4lU>#s|Rar;T2fM~|$)p*th`(S^|9H7E?+pNkiV2Pt7z7XRA&L7Pk2`-lp7;wk z0kTjKa_StW{sQq2UBp);_;yk!s3Z6R^iC6#WgW~~r5wWE{O?#8@;0R?{(j&-v(29$ zh3h<>bKPL&7=R+bw2}2M*<$H-KvR0T;EBgE<#uyH2CXL^9=L8`oB~4x0Z=2=qH(EJ zJA$GRg9nmT)?or5cHII|~8*T>F2@H>iNmW9LpFA5A1 zF<=nThIRl1?;Fv92m0P~9W>oC?S*g1*PejIQ=Q4gU+N5p>@nC?1LMZqT3dtPf9dGx zXz$p9ryKB`9Xnxwzh%a_*3gq`H@i(p?3+5f<@pch`(MvbP0P7V1{awL_vDszHM?LY z9{}IPkYtw1`YxKk^28w3%}wIj&&OU~_pwO3vdm@VBI4(K#TnT-I0)yP&{nsfSzVps zj^<-L?Fuby`cd|%kcnwh$MjG1IGfeCA{JQ7VPO7#SR?HIJ41SPKt!|Dd-059e3 zre!M6sQ&$Kaq0?WB=X7W=yv&s7R3@67&yAo%@!|P_}@|>A<5Lbes&UG-P}}yhP=D# z>Vo28eA*@SgNw8<3Ij|7hOUO8AE}z*ZH=)P7brg$?z?3I(ufwt`dc|(x21dc*eSMP zV#K5KZ$bYlzKhHs+t#cFs>FX4#mswj%t?x>ADtPO$3n{Aw&tb_Q(aoE8U_ic9$FOi z_P<=-$&-D4Evl`3t49qA{LtX}URL=!JQBKfn~QoTW)*I49%LE-rluLaJ0~-p zyosPEX=(BpO^}hcNBY#$L%m~Ym!}|YdTNT#GBU1`4Ovf5jfr`VjeD=CxjCYgi3)zt zMvMxfMOgi=u3B}w?8{d;GKy1rwd!9*7HD;Von;O=%kT)-b)x8e-xtd)FC8d6b%(AGd6zF;C9+m0;loz;8NN*WCIK zn!oehe1yj}O_Shio8>lrosP<|7>0|r^&i?8ZqLqdH*LqjpL(H!%*=OPU8(ge^!Jn> zd`&aP+1@5o(Wou`IIZg7AgnH1<2SG+>irv~xOl;^=4A3C3BMDnZX>a!Zw;%pp$Mx6 zHS5Rv^iW9BZLaZ-JM)ErL%e_JE534$28C8eQ-B)QR)*!hw^ ziBK1u`)osUv(6IeD*0De0)jJoR*$6P-|b3LuahnJ5>&F6yrYYFkuO-eANrPvZm8$m zCQ&j?fpXd6Wd<8*s@4@s?td0*jin{hp3z(FdTZ*^!{<})+{USs^COQaM+>>=M4G}b zF6i?m4F1*oRk$pZx~!QaPOq?DUt3=<);8_`UY{?Zl#FktA1%fhfvZN@G$3oGfagj5 zJbroB;^6+4kvut^pW|?-oGjPWt7UX}43Dx!eYutLCG1Eay_}6wv?7$K(XZ>aB@!>t z0{T;XjP`&NsX!!t)>qp!hq~AqC*kpDf|#&idaGZ}oAVg4V5*-B;wpFK&xxFJAQ8^P zS1iHzX~QQ?Sf_j*f9~KlV@uRu?Tk^)i;@05q3|QWz*wyGgXgcl2@A!V&Ns#Kh=edj zel(4p(!hFT{Dzmzl+f~*4E-<IJ1W3k9Q6chtm z&xr8iZF7O!f%3|UprH|~(9i6ibRnWjxfdL}Fcn4tLE;98MeEc57VB*6>=FRrbO?<5 zg#LcTy62ZZz;Ik-BbBe$;-%xfsQp#mLEyemLzw-`W~!c=}RQ=mRS*Cl&^V zfACTl-NpSUv%yT%$r_&*&0=Dd&;;xP(sTUpm}epfvk*NS8e(FKd_9w;rK2-Aao~28 zLM>+@IH6IsHY>7-?`G5e4gwO00wWMip+M5l|75xAKZ@jJ?bf!P+0GCIB-*57_py6j z;(K1%-)W55Ns7e5m_CEP_;eUWbq#5W-zi|JoSvDf;J72zpE$BINpT=S8DUo?{j8k$ zVSho9?!1D^^SktaQ_?-Uanf~YK5W%HNn=K!(xT`RQ;YSyZ6B!07#20w?X7BXLJ7y7 z7&`fcO)79@D;eDClTS&R4Om)upf$I)eh51EK%`(I?kP06VTtrSKV2ArCWy-F>Jm`6 z-BcSu=N6|3ib8uGeipEaCttyf22 zu7QKpkkcdR52kQywc-9#nVOf3SrV4K%9>Rsbq4p}53V))w^${LFMo`zb8$n8JYY25Ym*xSv`S46>%AV?7Me{`T0No zBLX%lw7sLjWDo=8C5r)+uFFdBC@GoQ2^@ZgjLdiZC*hF}5N`?Km_}LshF4siL94n} za-_&(ciAj6$7gl9j>?Gm=}sK-$n;yIzhLw&RA%CcPSJLM=g8`-MiE)9gB^n>!R!4- zq_J^NP((t&UG+{CH}_dvGjH!a6&e~Eh-rrh2VH&RY2+axx<;37FXj#(Dfhx~8+u15 zIJgl0VFm`T<`xxAjskS_gYLd{^miTnpDqpEQk@t?{W#3b=tYeSV*jAaFdMAC(yg>6)V@z>m`qx6(4ua^N_}npdI)fusiHzW|ZdT zbhzqBx?<(tRNrv=v36>N6%ac-O8QR*-S9p?#gdR4`_kJCJj1z~M%^u(U`Fhu6 zRiS;OkV!{S4wwl6Zgw8hI(S7IYy>;}{uJ62ewJt}T-?Vehut$@YgoT*?2lPQgh`bs z3Cv0(#f(Y!TX8h|hC1@~s-xM7R95L6P3hnL(BI#`xj9N5|FC#@y?xPbqZ^G~BBT)C z8RzfD-FpAO;;7heB^s|>em&pxe%UwhJv&QjI!6Ez65#2)A_Qt*Wxc>#GaLat4=s;0 z>cCcVa1dZBU~1x^jLSV=RZ)lvgA{Je+1dKqo8Lo4q4bhSyLWfLt)Y)e<3*s#dJFCT z#Bg_a+rrv3T%9eiIuhC|DPWeGc7qlB%u#EWnl2oPST> zyt(UB6jt3yhWSHdmWrBMJ9mdaR?~qTqV@`c#zs(ey!EEmPX8$#)%4r$nfW|Wh<=6KK1Vc0 zL$*}Z{0bMDhGXUL!qdNDOQK86bhr*)4=_2?lt<%c%p5Jh(TOF~(0nr1>x03K28l&T z7(i~Sfq_i=)#0hB90*t3)>aWb(uRjsp|u$jy^25Ph9Xn(`Gw}k+1oL2sFkd(NjzE> zN!r?T3NMP4y~M>}A_sM;*n4t9O=LN8yuQnrnf%yI45g=}%R2lce{3a^+8y0V%V+8< z9$PxPjXoAl^M`+rUPJWF{go&|Sr*w;{VS%#MlUT{vMlsvDTl>3pWTZXwX1SBU)4gZ z5!`(~exI0lsH}{xl=9J1cs@s5C<9L_*79gg`1R|@larD7r26Xe^2{8WVIx^`XIFo@ z7LCGv;6*d_yZqAxO+iIqZvuSx?mxHOylZrv_Q#HndSmswn@Zq#-`m@ZWIu`2la}?L zH8x?aKJacqFYAo@T~liJylb~{R9SYI_Li;L3!{{U{l(bsH@0r>w5Lt;wWaMU_zyj} z?y57S(WNOv7o;-Ni^6AN_$C>u&qy)Q`R-KdBF$FTWNI4Bpuha8X<=;qbIbH=dF1 zSq5EI#_^V4R6~WjrX^Zc1FJA+nkGk@W%_JYTBst!-ODM*mRS580suG#v0cZ8)%Er$42}7m;gKq@SEL#G?a@8Wb^_$beTWu=1-BP zl$o`egkv+54>OhTJWDZ)b$=T2VF1;vS@ZH!#Ai!YRpPZxS_X+rn*Pak0iM>p-rjAe zg$t7Fi}RHo$Mw%C)4bNl_D5J)RiA?Xw{QjXd{B@Hg?NLsYsWb^aC?xK4sLW;F2^?4 z;w0bv7RKKTB$%@kQbw}u`gwOpDq1T-EGr}oVx>eP%{)$vxP%&R$x#N2krvnNZ)=yI z9$_H9^sLS#SB+|0AeeTi$?560RAR{o5_1hIBVdq#N7w3SJRy@x(}z2W*VYSv6mAAP zGNwC6O;5S{E$cjgPr8$G8p=S~ibqRQZ!aH+Kej6?(aRvOzvOxaApklD2ajj=Y&PSs zyO~%cw6~!J_kOiO=iv5t--+3+|D0M*V2sB@AoxHp2hT4W^!GcxX;>@cFI&|B}MEEs|7aAIJ+_ zxPj%{{q<{-`}JkX&Cw%lh;W3NY8d}kl59R>p1jGDakz8sTy%pP;ZLVuP3CaI^6i>* z?WE`vHnnf~4t=5zh`fB2oo7g&zvMjK?mAzy7ANhFGvUqoWpj0Qj);NK%SA7(5f8+Z zybC(XOde6oS<}}&*edY#I0%)Hk`jhaqd7?Yz{!#YVo)Vk;^GSrlWE5wkIQfSh5V!I zqIyt}Bp95#`}#-N4TKL42Vs@8tzCb6v~02Hke%M_R3Q+k-Yo6hV<80H^;2t zcK~zEQ&{xE*1hl@H{-}g%I80MGrTy#c-3f?O}#zO=Zp6EGd8;lQo=4}C&vC*{mZu+ z1Yp>8kZn0F6r$C)gc7layZLq|COnehkJNu_u=O9RYy06iqpTKpAly>=n{rI24dLVA&I)A=rc$XWoH_N@> z4fvwi9y{H^(YOkv>=h;lM-Sp#+wTrMLS;hkD3aMp9yN)1VvV`U(Y?*ooS~q(y!%*Q z9!0T)puHnOApyzW>5Bq$)5OeJ%8M0CB&4e})p^i?t-lq?8rWNNRZbCDTk8U690T$z zZqQ)C&;J7K=up1|&vsVUO~I#qPgp*SapBx%%b+HDT=!)yG)LV^C^KMml1o$SB|#jE zq}?oK$Qtp5a0|b>GC4f;E&lL2w(G#lAxXi$0bg+PKS3?JPV8VC&0VCMu*rtXa|cI` zi71@^MIF=M4F9{4&aAGk*73&mD$l#e#1;>F8X-xamX?=SzhpnfzGy(7dq3}QeAF*U z49XFNC}081`?gk&ydYTMIhxrzQFU@NKKSLQ#HsJ%qNm;7*{}J<;D0((6>oh0RQxmE z+-;l@Uv#}sYh1nkr>3~QJ?18Oc}^Wo!3?dt`=PlxUc0e~eniTzQFTQQOfBx2^)|t` z`uDlBir847a)x{7hputWC(3(Yj8f2C?O0{6ua6s>bW9f>J<_9X@R7Blo5T?OCuhVa zD8BXXPw|HdMMp=f4vzbipD?B`>DRDveObMKaSunld);!HVt+{^e``i-dcPHY5@qG| za$95;y#O2cX9^jd|@HT|3DxehKij%gTG*GO-i6A#|=1;+&bPebTG#B z1|Ggvc6j4=|Nc6RBS%nCDGQ7+HrltuHe@T#ifgjHPqKLsI5C894)2Zi_i~Y0%M7w#6PpQM}XlGICd+C#$qhCG~YF^U?K$J-^csUH1+DF$@oJs#rhlq^2dQN69dkr55BIb zWU3`qmJ%^7Ni2F)ENT=fIMl<%&hzMeIply|0*&6LKanC9{Z+_~m{JN&SyNLM+>AXS zad|sNR5`O#*4gtUz+Wap$%8^*WyLsQ?s-!1DMZgkg1DO0ePZe*3ne*_Q2P1$M2LT1~wG9LQ1G+{i#vs11_Iu9VPPx|@7`-}P0hiV@D@`iEoN2xT_1Al}l6;TYyE$ZCb6y*X; z?qwFrj2b2(&M6;-sU5u0i__AGku9{eAhis~Ovpj?+6!7H3lT}sQ#bCZ^K&wiQ{snq ze0-_G$A{9o00BoZV?J}nQ7DOHW)et$VSbJIND&qPvC@EyIjj2PvX4GU^z_@D=D{Kz z>!10isj8~08Ns2gl5X-i$C8!V2EE>Pn_PfpjepZkSC<&ls6h}BV`5aNvFE&V6OQq3x*Jp)22Ll`p&@uY{#yZRB}SaZxrdOMtEi$CxwkhZcz(H^ zyMDx_XcU*N+cx~*laFR9;t=9xaYC014=Yk{=Eitfdv~vs7?~<5yj52)Hyx4%t@!A~ z|K|nJi2G`roj@+cPUDT=TavVko7#Pl>voA3Th zy=pH8DS5M*xS-qi*vW)Ja)PQxZQ7Kzb?vO}|=g2FP^fkmGx zHlMwCpiEhKD!#pA#1c|IrAUDqW1LtWrqYU_r0g?!TCs;a$J-fRzTe?HgQ0b{neXMS zA&-HH)>r}$&H9|(fK{Pr1{OX2V`pa@W!e86YO~6R8;s}jXUh0Yut(u63I`}+7~WJ*t-%u9O(KxAiVbaVr@DFAT8{jo!LgCkYmG^6zVIjo84 z;g0ln8n@7&C6jo@f_S0~ZQi-u9>pbY~6Dv#l z^$XLbgQB%<TLkSBm71dbr@u;G;pg2_4)(-5Pym<9WLqp?^z9Tv7k@{+3 zw(_H*toRKg-hOqXYxkqSQE%S(eW*_%Akd01Gne)Ee~^>&eQW#B!qJIoVP`!kSSpi+ zXwzF9J_ZVKGy`!G(IEx}z@*?w@=fr+6@Zv~1}yEpzL}x@hyC7F>SR&}R&{R*~q0Sm-Na#?pGY873;zO?mr>Nllm$oTP59r!g4rbSU+{#tq%8x zT$pBO_ZG@*Y1JWI4$zt%HuY)Hs zqHgBtWyMEuf+J945Ln-<{f!YkhIMSe_@nfm-q#aefZ++>bC@6y#g(Av*%7Fl&7yxwzSI>`wRPy;z5(s8kx7JOY)0 zxOPc$XF9I_ugjm!JwHz}<^NOt{aY100Enp%^eu|2?}yh0<^*I!a)E(VEiFp$SIckB zG^&l&!iS?2>(Mef2=zRPa~~*aGMgr}_QYST{AWExk4qZ;TFfh%kNNzboA`O~l^^Al z17+uZi~V2LS2qF~D2<+9EW4ZR@F>Q|O}wY{0O&>$Iyk5dmor2VX+B|Nue=I3zrC0N zj@vxK;DnFg1$Ng#2w3_3{VD?8JTR&t;Li|?cK>%O;5^NVFg9rh3BQbW5F9Y6eBoMJ z^hNcVkpMfpZ&>-ANsiW5LHI{9o16WBKsTG;c=u1bh9dn+nE8c;?!BP=?lw}3Qd|>Z zl7t93zRMFoNn_5J==th69GL_fn)nrWTs848gc+}&Q})O)a%V+GMMuBZu0pq#A+?cl zm&8{7uZE^4P)2|_F$`bx?sMbt$IJ53{;`62&!Ee6@DEEvk47)g6uDT;dWCRMI|d4I zWt?DS+KUyr3M>X7BZ0PjD_2H$>&gqkFc_4j5am69DMPC{51}v%{38UZVi|MuMVn{( z;Mdy^K9xYkj6W}TxineT&jHOZq%6JWG%9rQ?lP&S1TW=O_E!uUmT$-nugAT>33g*( zxkj1ku>K)%pUZOAiR6unfk$9x++C4u40QC>C0RxRTSGPn?BX{9p>s2e>FHK*)JkpU zTMlyJb(3@B9i7%xeT3Y6*bl(C2tK37@=QwjMHqC0dtEChKt9^usV~xwTERmv;^Dw7 zm`faS>R-p}Ke&tCVnI)uK?f(6h@;ny?K|x~hdXC#8y7dyFjlW%EEG;FOcXgCPUSxLsAL?gVQUt}uR{E{1 zDj_R2GZi=r>Zj)T6S3&9;ozt_js6H%EORja==0}KBAAljXrf7u( zLZi-`2OpC$nL}a|ey_W_L&J`}LW4fzH$8r%q%6aTf%V>^e1RF@`tnyFyjf&&(HHYIV^t?X>^SiJT=mokCZeEt_h85 z+MxR!f3^^v4zBggn#_9=q;O2TN5=gY8cGgl|BSyiK9M?I43UPVL(utp7Q9rufBuw} zmPW#9iuc(>sVv|7TN^~K5_VLqg?=w;J8_vgIpZ;i7!W-Ph;sv^s}QiO7~0@$n5LEt zSD%{wl9XbmD#X~ z7vLq7rT_k|YiWgcR%mQ&sjODBVegCbz>KS@Pek)co~m+eX6PMOJw5i)vZ^#t59pd4$NnyLZv4e*k{jE3VWG;H>*zhM!pLUouZ+K^PA zAFEQ0{(;I%u3t2hvfk8r%{4cdf=uu;z)@oCK~_&J!82rEDLs7zN&cPK>WT7dGS=3tDJdyYmFaY}E7eu# zJId~cxCl8v`Jw!rJ5w-F*dm@tdqd6vhy3#$WKHB!KDvkYsBc1vJv^~;V5*p8I3kn7 z=jL0(malmeW+nY;b!?wR{^sgJCXy<2kc|$#6@{JXAWRvF;qZ3j@9jS^bdEO!Ke$g= zk?x_X%J!m2V#{}1(fL;6x0~$2GZc=+g|tzBkv?60i1*w??f*B^xleb)Y6&h{1SuCn zxSa=i9&g@27>kxzK{VK;FA57e`r6L9pH%ngF2i-muil$(GviQWS$PG$%x}MNpIXZ3 z&jhugove}Ek5zjkM{Cmm zW@woNXP^6GMU{!Mt*)dZ1zu@M|P&4e_saz z0H6YrDZuCPfcPKnc!t>+u$K`o7`XpEuwTB7;DccthJqn#-=E>ef6Ae2vTd(50Y=34 z-qo*87iqu3mmO~8vG2}WFa(a#ygLneCg~YHibIuctl9NT$k85q{_f#okDbxePF&Ty z$x}Y=>qTYa%Lui-$mw2v-nV-FbGE-&HyZ9uF*&}Q1} zk~Q+Y#f00vZD9i722!sy09k5SvkB#Wb;ghS{M};w7DKdJ=jYezn|{4`KqaDTWR&@( z;4&T>F!gcgG=|%Usk9fKuuAysrb21mGY5wk=2t6Z(yvXH3LtC!q^zUE3{eo;{d4Pf z=_8=Zw)b2JUhQkFcx}YOUY>ve9FP*eG{k=9MW#<9z?HA`CLnN~q|VYVI>hDQk zC3!h$0$s&uG(=!f1t~wxk@p+%@6VdSFB%#|B@0g_n2ltVmSgY4HuKUX`=q=3R&Fk@;F`>pDz^W#Ey+y7 zRSr>)arxai9s6CMQHi9rHE0*!?kC)^bx>vzVy(u&MQ34Si(Of<1b(rP5!0VnNkD8M z1G{lm4VT4mhLyFg{=xNWghBP~Gs7kq>d!HF74XS9I}@a&GKKqCTuKTnFpz)#l!Mmu zjfn}7!ecKSTu-XJ)m4lRzcjk)%rC$vc~?cxB$~UlL|*wWx>=N4SXg^uQr;Y_=b?^AsX|GeHaTfTpSfl2)7S1{$pB|8y3xBANeS`PQpSDYHFHChPRxZ8h zRl1Uh=4j}N>v^Ax@2!M)53MSD-#!`OGK1#jwWiHEC<0|a{fby&zfY2r#ZdSL^N{){ z>#)Q~@A~_ZnEU#J?`k_<^p~?3LF5K2C#ok_;Hb-UOyx;n+gXr#{A;IF#5o;Sry+tP zZ{UAC0xc80fA&Z_Za>}*1Xd1jZCf0RLQvZ<71*ULN*8DNZm86J)V58OlqNEqbPV55SA4~ww| zlKe$K*lAK?_e0q}Xq&7MDXfi^WpHFV%q@SGtKxJGn|R=6EjrX}@63VHn@`KhH1nW!$Ne@x33=jqf zFTtQ2v22}6&;B}>g#m2Z!q4Y_aq{nTThFGqIF0>V!W55k3Hq;k1^}I>VwD{CjrLDG z)+(gS27+kbxffkob34yBr8^Dvx}-ppSPCK@23=m#@dC#eCp!p2=H_TE@YVSI{gZU{ zg%8%!H7x7rf~~1sBF=8HUX3Zi4h&>NkVb)7FTXJOJ_GPCXWLY;+g!u$$UeFqtj?fle7KWk0nH`(0H1%QhxxmwT;RBQj8j%FO zY-J?{bGgql^aJ;6KYe&x%acPigqlr=PG;$UMM@&q^RTKKca>Gk;h-0Pm)G4YI_}*U zl!h?MhvDJ&iSZ0S_tET7+S_GI%P1)Lnf`;72qC$$o)f1y9lIcLLLU+(j{K9uyo+%M zovPYeB`p>re98O-wHS2V5EL@o+(43v39^Zqxg;o3J-j$1R%kkMc%9R-Od;6B`d+kK z=0_?q5)vnQ5;7-sUtgbeF7wMdCl)DZwnle30`EJrQnc`1fu{KaYQo?u36s@03*jA; zaD^f3`d9~XOnLT<9b&==YA=9s-Q0NTDJTTXN>d4HY)qoD%s-_>?Q>iE*^|+4@1RrE zvepP;wu@zCVIms8u z8#=yp_sz9;72ywRj(`6iU(kZ`Q=RyzW4Q7G*5QBuWrrit;qr=@4+oZM>FdkbZ?T0( zd>yuR-C@{;EZI#d4l`-F{8#d=cSQ}9Ysq#Tdlj9N*)F>d@b9RmY;fqIN_ zO+Toab%qF%RfWbey!D8i@v|*W?&wJTVr`2L^U&f&51$QiQ$t8yG~jrv$lyvkv`VMq z2+X&97Ck5o3=GhyKd|fu;|IEoqvL(}G;O|o;zIA!i+;p&u5eI>R1PmZVR@}gdPW5I z27|1^lh}J6WG_XDjCF+Eu^GSpjAEZuc-W)q)r$YHO;6q!N4Y3RKSWUVDX$_)B^7<| z9WE|p+{cd}CuY1f%K-g+2v(CoYF86>`N;$TKEmoL77giZ1OrJ`^%2kT+dNmAqRI1r zPtI45)?c4pAB{@v4|eQ#q{Ceb0kh`O`7OyamSDR30lIePKKa+j8Y--*5Qs5C9|$mv zUY9j0@GS0Pr0Lx^h+p|TL<~j-R@Q&1>{>f$l@gc# z;64L0gGXL$L)`8hdT1`?qz!PfaKv*XfC-moH8$M8V9=Y~s7%4Yk25Cjk)N`F}K>WmJ}H*R{8R2-4l% zozmT1f+8g?AR;9oBHbw=-5m-dASm4}jf9jmC@qbA>wd=f{@O7HxHnw)d98DE$0LPu`!Os%qsvEs|vv@oh;5Lc7kMN9?_jXlyTw9pR{T_9;TW?NiLQZku0+-uDRoLl7#FJ<`@lOs9O4n} zcARZ?ABsM{kYXvATw7cJY}5YH4hpUsIcaI{#}wy0QfAndD+qsN#QWw79Sf^{`-99! z>^3_>$5=Ha28O(ndyhSZ1n3mz3W)l1+ zkgkeS@Q&e)FZ&=z#QmXM3IfSJBYK9Xd2^EJ&jKRa9tIc^d|*`EJ`@)e{BqvF&wgLi zO`v7Z36d+$B9y?UfayaX_T30*w9VxVqF4SQv$&`zT*~ypX9!A$`^?oWIblfuQh>n= zn^#^U1?A;vTl>A%{9`|UC|g?6Lk9zObcA2;!|WTY#(`GuWJAWo+mr zpY^mSLNH89SkHHNK}v)T&1a84MhI;PXopk~LmN)!GDa{Y|K%}y+>$}C7J)R_ShEh) z(-SfCiVW@Y&USwPxwauSyO>#vh!EgS;gONQW~!~C;V;Dz1po7!si=^iq|@L5xD?=O z`uc+JvVFN8am-9Pj2CMaefW|LE-E>B`Tju;S}9*7shl(b#DI4L0at@(8kj)9bqrx> z!arfs(L*25$;BD<-zR4+4_!2ao&zdsi-rB`ghYXNyF_HA zmjjO!77wnvxBm_(`?mhpPZ~@TZ&CM4Ie(>)^dg`2dG~G|Y`@FTeU!T%n=$h<7&J{8 zxE?eH9TC4&mA*M@Z@{tsQEBS8H@KMyN=P5@fEYPBe=C#lNJ97T_|z0r29cr=d*sQ< zNgt2z&GVHmbj0?^V~oD6qACTre*FlIuF&C8CE@z~%c9CkE%;0ek$V0MpM#(4|Ca4@ zJMVLDGzxRuSYAuzNbH@dH~!#2tlFVgEOL0`{nEc_o-mv%h$NdhHLRePRaPbgrgs4H z%uHG(53gxH;Lp~XcFoh%gxF>;%;|uqL|65?vakMv4)Wm z`4Z073xRJXVf$YkEi^PR=e`KtkEMoFFhro_`{?*jxsG>eI{T;wjOE34lTZDE*e~8p zt}m4GJfg?3cB7RhooaWB7BOg(`Vc+Od*_vZIvi_y@Vvd+Ar$xYsD8Dp?flg!Ai>Xb z+Go2ct z%xCyPqB+S*OWBf)rmvZ>B0Ex+eAVGABqb$-Qd<0uK3}A?UNeCMyy>uq0(L}*e$58n zkhwX5nK$WaWO(h>3yl|2{0X18>?mhvHFB~8r;N1ZI~9E|CvsqA0m%ZTqhn>unm-IK z9Vmg5My%|?Ns5%>Pc+q|h|~i^sCKH*b<&)LL}ATG0+WdeCs)x)$6dg|&bGd!p+>ae z%EP|m@X$}Ti~tUuM!mTFb94-hk}B;GGwEEP=^s!z$w~P%@($ll#C`-FmuAqcV}1z> z3hDBFXtS&}GRiMdo!Z_KCZ(02tTWQo(ZO|i#o-)#$K%f36JNBbkYm~9*fxjzC56UO zsReWj~vR^kqE42V?*6o4n z?L^MME-Yc|giObxW=SM%O%SvrVQ?CCk+rrli&Nj9CGj+ zpaum@RXm1qUBq<_4ICRhV96pa+`M?{uT^3Nt{0P(B!ybE)|(%G-FAZctoQTsP`%$A zi@5c~8hxZ6@{8pyz>CU1C|lAtND48$dX4EI47m<)st(x-;Nguf?m_h@YS!RgUui=* z*(rIQcXwi#aUVF)hqw9P`KYCCs86U!j>VmbuBa<=7nfWO+&CZ(!gXQ5U5wj|yx#WW zXnpXM#Q30GBbo;9`+n;KKAVO#S}W2p9Evn4$)w^`+;2!o4cz<*Fh(LFBg1c`(@ro! zhKBgs4pWIFLziuCC}8)_;ls#_;|OjKm8 zl0@)46Tr)8%&ss$A1SW)*fZw@wmYtngXe`?fZjs`(wLHJ!^+LRc!#-ps-MoC3Xzf6 z@hK@Nspea52YvXZ^{%^VV#HkO{V@3QW(-GDOOh+<0#FM9Mg$%sVo&xsCAs;{UzxGo zlpEyZCP3ndBjWwltu(9MQ3?RO_tnLN>fz{UyzA5YC7^v4i1-+`uXx3EN0F>@vj5th zGfH=Air|^1UWpAR#V06$o(&F2%ynA2;Nt6jj}iV(D=1A9qjirUOt#I*(y|wq=zZ+m zOU4hv(dGucckbi`D-wh0)C9;kRxma%6YW?#;A~|klsjE*%$m)$A4+^;QFkQZ$ckWiXLH~gs0LTwlEgNd? z{ht@0mrUB1@<4RCn2LbsnBR(2-cT3Wap67zbKAcgop}s-;*N4{T1!fi)#a?Goj1y& z(Mvv^kJe3lV)u!=C|*mMLdpP$Y@grcxLAVI?x{?>M^ z2NJ}HL4Oz#XN`=s1aubQD23fUJpL`P_(BaJBm~s~ADZ-Ci$+(s#%nWc3dnC$Yn#SU zAOFzR%}?#+OQHiI!x32@P1oVxJkcVgf z9D>y$u(XtwGS)5`lI$9xp-lxzSyICV1-;cbH311oT#a{5u*0x_u&vHt#*AKh(E z)tI{ecSdymyAkEO_UNK%$L>qm|XeZxd z{P-<>Zp~VYg!t%Rpz+wHkJPn;tnS4a+kG6n5Y|Hm-_b~7MY6~N9EWPK?ck36Ityy; z#gX(bKOi7AR&+iP^&!HcXG^h@^=S!ss;(=;vd~B>-n8AyMqfK zggF%&kq>{0W;d;3^T$!I!)NZIHTz`gdP5j$Y>$ryd5(7~s`!CBqP{wA>U~l$bwBc# zyzb;Vp8iQqI90H#fLNf{9lHN$wt31TawK>wJHs9n7Rf4wcF^3Gt`?;P!_$WTNKscO z>CR>|AbJp;Eb!VUi;lRB(&1M939WS*@Jb+5{OZ%BcAYuZCNBk$rCdF9shq&2DtXy( zC5y79xbK@*h55O;ZLA@panI4zgOk-=zaV=UMkqb>A4v)CD_Ss9yfdb!&F=6kd^#W@ z-sSb~Jjn;7+VeNoGUR6o7%TU%kcIV170&|;jyV|MB_nsx`a`!@`q16c;}`Oto7 zMn9$TKTLb~26N|XJFX#A^QmK}gpUYzR0vkaBRFJozoGfgI| z6T8Kyb&+YSJ$bcXT%Dg{r=?+t_%yr|in}+M#O8Q;q^=Z0t_XqjCr_U8zg#p0AOf&- zWdQXJ;G+ls!WAaB8J;xT-W6Vwz>7$fl69Ge9C)mkd^oD3SP}_yx+2jzL|$1^|6MwL_~npt(};L{Q&iK{ z9VfoM-RGOHEw_kXloC;hmJ8XtE9xX-@4Ryo>z}M zSK1bDLfY!@XeyFr7v4%3+=Jv~j!e!Ruhu_nM9ytue%QxHIfHItq=K_$J$$r2l+GKV zQ}O=A6JwpaFJA_1qe7fpb9Rjud`{ESjGbKC(Po|tR!?H{q3TpLi%?<*1_mC07dh$2 z!D8*1*LB}&t%m`a+FXcve3M5<-)>!7EK}dzcr_|bqeggrb!OGNFZKEO7_N*%sV>OI zUz&zzss+N)V%Iz8omQ(&8||pYlK4L+i~sgGMMcHmI}^zNng*8>*WHixAc2T_9nd1i zKSW&61VN(Fe3YDqP9PB+VsN-!l5+$!n$gjB3I^|!=U>*>ygAd#FDOV$Pm8#i&~{n$ z6)$=72GN-L1ZvtLtI+nxqXsOpi(ac(fUgegwp@uYTQHEJ76mfEtT!C za0gLLQpwFt)W)U+SgOy^W*bRNy+lmJfmXYsvk(=TM|$U~=sG&`PBDkT^7g*6E+I_J zLKKsgG&06i1i;qUS!Q z@a8d=1w+famksNkFl_=OUD>on8KoX;6Yh}8MYBryw34T%_ciA-?dM}#y%LJx(=Bam z?3Z>Ahb1LEmZg>0wzvOQf`j#O2?*3c*1mg}==Ur^9AuB4Kc@oo7EwgR-%OkzF5FsC zD?UOI^7z2|tQ8bW;B}#A+NPSxzcxv9#exk26dEGRO<|UPSgg^$dT3rV3%!_pV9o?i z8`SuSfE~owl1aI_u160!Ylry@mLBz?#afI^j#B*W>6(w# zna7Q5*OAds!rQFhA!S<1D+mj`7ei?zkhWDR)IoUH&0DN@U?7}|KNw)9P#A*1K6*4# zg>|-H_fi*_1&_jf_9cuOewWWjjc-xG2CfC=Gp!s3uf(!IXidn>jPAF#+?gyB6cV!3 zulV}B3pa8k$@yUUtgE-)!hI&~l^4fbS!R=DR3(kUg3ohu&iZ(HF2g2Gr3jHKWw3j; z#`J^9>j!0JScZ`!@0`D6;upkkbt#BVI(&a1jGx1st*0r_EP}p`v*G0-bjMqA@1L*M z#u_dSg*q6!A!FRt-R*Mf$Q}8MS*v2*$3qC}1JU+(e#uM|PlCQ^cjG%LMRUW>(o-FX zzoF#P$QL=f?+z0H_?l-NzXa4Z_sZ+|heZ%*lEyeuVz;mJo7c^imhY4l_oym|#YB-b z3qF{&*ZZAx*K6C|Xbg_EtE=jH*hPd6)_#(nj2F|IT)k{Udalj$t(<+bt`1DeO=dh_ zHXUbf728+&EbGK{St`Z~?LQecx-<^Dh>(Apl@NT8=5?Yg+*(o5TU3!dG9C86=EJd- zac4er%Hed}YjSDG%s_m7V!QBmDR$72c{!59nF3RW())(@!=w527RN8xO^bStBZ5|b zV{!8@V7<6JY3GbRwrpx;Gl}IyPlX-m<59``KF>{3qiF|=zu;>7sxNZSgM>YE=7hTm zmYO+nsI58tK>^%h$bdS4-Nd#&FS+vSney^qZ*;W#9S`0JL4$!tM8wK!ob(1%0I$NC zw*mOk7N3NRrEnGbgp>NkDJ?O{0qX5?<7nPs{Z&_2eUc#^*L$ylM6zze zQI>ncG6MG9L@1#r5=6tsd8OB1b3##ZxVX60)bl=mq-iocN%7&8*Cjob$855nD7I1V z?4T7)f>H4UA87-#SbFY^q0rV}PE}R9@0N7DBB?`sR=i{}tYa(ZdM9@0MCj;e7J{d_ zKlV5OUHSDaQnEPwAuTq0#lX{II5I4}6f&DSQ2gG2^J4a45=BgHS1;lOhYTv10D)SI zC{R0s1D=3tA!ICd7#Zg}8ssZ*Kd17oLb1H|r^4G!M$gpJjISXj*+w1RGkSBwe|`$N zQ`^|=^SwFcW!6?H+-S~O-emJO^8P9=7?;CiI`Ez9ijN$*VW*q|giR`8o38xlyH=o? z0ohyK}rxl3qeXZ}SdA10sH)!WlZF++OfW70K8;N&f3+9*^ac}H~Ze@E2jvz5JdeL01`VSdO=MnEVTao zx+Wq|o&ox~%xC$z&KAXkzf7XVrfOU}o;%A020@DsWkcT5{uxh3d|E`y*R-HU&l>kG zG&MxXr`}=zXsP8EDyMXSIbZ**VB!VHBS=76h}|z)Qu+Ew zy`M!Cj4jesR7?sv3qyeuC9{i*T0Lw1aA;M(KDI@OfY5{j7@TEj!h|s+6idAS{P3>N zwF?(?x_ztN{*(;CK-NvoEbBi}>(QRrA3r{IF&J>p|1;*(@Jk*+&I7JXz{SNi{XPnI zCZ(|`<C)SwXy!OU@({9h$NmJ$PkhWG7QCoUYYlCI?Vk!mLQD-$ zkv&MJIWd@fnMiq2StvhgIw!s8pG_d*oE;b&5Y_&jeS9Tv=C}RNX{z4uXSs2GNwLE> z+l|TjmpKy)n@yV%B^Na#eM|MJmzT7WuHj+S19`QAI8~m(uw)7aK^QF4>hA7>Q2n?8 z^s?N7f}oer9Ym7j+qZgR)`H74((+dmwHG%ax*)4d2xL)?Sit-)_tBygeim^~*cTH| z^Vq`0Gca(ZDy7@}9+c_$d{yH)oBd$qYy$=(x!~;mmp29RPbvF)fBbAKzqfKw5y$WI zIb6YDeSo9N8oKkq@ep)y;4F3PBYqEOV|39>!OM#PT!=J~@ll{52(q?0oQC2mAk)}6 zI)Y*q2y;+oSpH3G?Z+oIs8ApWtv(I#L?T+!;M?6Ak9HzVC2m>L*x<1HUfkN2pXM|-fR!w=!-g$U^sQJH#Y@2z4Z?48b1L7ioFvL4 zVRHl#uIy}T=<@|p4>-yP8B5op7(*5fsE;iN#X1V}(q@Y8C=V^Eyrk($JrLyQNw2JQ z+WW>qW-}S|tgRFF33m4O767U)eD=)EV^H_=>)`E)XkMYAk1uT|o=Wwt6?H_D#n;wN znb&9Vk$&FVi)9g=jh>f`?p>wh63?hqP2`1zZsUT_o8t727rNFLz16c~kfUH0aQm;3 zD!K;+#GnSZ?koi}0(I?MlER;_qd&-S;Z=&skx(*KRuE*BWjY)4#lM&s?e-%62WfH&Yq*z`%%nqOVdfS!y+je08Y%7M!6^swy001 zjFwh0(QF0oG12c56XhR2CIK&N@uyGk4i8jyP)&=!OHD!%n5L& zHsPv;Sg#;lE1ZU({Gs&qf1oJMjL-$A-W4=D$!4mWS=8VfSftz*eSo?y1bhpT^oI|N zwJkp`fqe0BkNGVv8QJ~gXG{bWzNjx|)J39&m$#1cv@iWrhx!fkDQAYG(k3T@460a2 zsR3t%p;bcQ-`*~Zz$EO`SdJIc9&h&I5=_J@Q7ECX1*?m|P?0hi(rwx9h*R`TPXg5# z?a3H)va$1#(jWX~k#CGKW(gY~%WmsWl%$k8qMC!H79{3@fE8ZKDh7|0g+(f05k?&% z!XrBzg{<5gT^>BZ`*j>IV$M_|Kxo&tg4SIe!DvmJl$vVzySF#oPDe%U{`y|yNJ3g! zd+K||-aqvO@u@1g#i56ZEG|llV`rT>Ti$O}J&TX!`Y;N`9#-Q=yujs-3OJ}%4%f|I zMYP| z|GgxwprOHu+KEQ2jtf5^;681;=a0k|U!jJp{WqbAD@wr~iTV(yFjyv;$el~6c+Rv- zl`+&JJSJr2Q!8!!gbUek(%U(?T1zHt=XcqStqi~?+<)2Z#nIH&6>L@WF|3r%o73Za z_7s3|RC!6E?0$E3d@ z1J;e;X8KA)v>D!Ih<-N2wtRTl2Jof;-OKs0URsLg{tdgMLj&&oM-Un1_1yb;%PbD} zx6x4@@cBZel%iD)A1;0%2XpAb0UsrHNGTf0oCk(SK_ageacJy(8d-esgby8dXOYQo zcgyWv2Gt6i&%;VqR;w3oc%+nTpHoSF`8=U%mM}k`(oXQj3?H5nsaRHgX=z&OuogTi zS}9R2?{M9PC{|V;}PL~%KWV^;WIyA}(E3aj~Qv=kO` zkz{>m=Wg;rkQnh!fmbmO=;GbFIF&27}07)F!T_z+aGs6nzm$L|? zfWX7w9#^+xl7;A$f!EqP6g$F6#RO%ChzkaIHXynp zf(Q?QG5Ix=e^~#>mK>iRqx)g<=A(jwe#GD_jqEG=Z_zQN*2DFx;NuaCkEe@YlH}6U zXVf!bay=fVH#Maf_l)#84=8nzK|lx*AxahFj6R~r;geJSpi-+|E0qp@C^sHeJXe}xy{%{0BWd};rFNYt%M*O+G` zX!D&I1Pt_y$irqoB>1k7Uga00iArb?12hHv)R5-Po7mpk2NBWT^1!QY32p4n)}Ll_ zc}1*^F9at;et|EiiB{c>(gawt-(LOe`tU@X9$#%Xo1ge!)4R)jA0H0t)db_V3+e_E zr{ebaYKsf6O_~oK^xVqP1c>BER&nc4lSBX{mU*jmyIeCldCtajn;e31tMI2q32E=G ziO=zs2!^=?RgzBl&m6`5UsFkE(Xi-;2EAjEe}8|>BqlhU@@7b1)5UG(v=S!TISqt+rAIoed0Fhfsdt zME_%oSIcgl*qiuY{K0v%A(~w8gLk*g)(ijHic?-QnEd5)f3&h&k@sw|lk)O6uWp*I z!dlniTH>46f9hVF@cxYb6GpRj(MiMl(;!Bvg6_Cn0}!n32%jY^Xq96rEdY@LS!MxV z-Zlt~o&)X-zVOHQCDWth<1stI$*C#On~{F8v*TvPuJk9mP>Zx}C9x%WHDBNC`)$JA zZVfarh|MP#siy!rAm_7XcjT>==PYRQfF|5Tu)z?_e`q2>v=~;kT(ZN86VP*q;BWiy z6Zpj79gE-|M3L~=vU0@`*QDK*lq95)js-KMLAF_2rQJ5K`c+|Se+@9jl5AUsu6a((rZr-VZzb4T!Krir>mlzMpgUL@bk7P19+ z+gyF_{>8}H)md8qUL^&is5uL_p5jey7P&DNa}au%l!~Dt7eqL}q2{)tn2hK=^<$&_ z)8_RdLf{a+i`ftjddh`1=-78Gk?wFA7~E;`6AG-2)#aqg?h*V;ThO_jiTQRzeOtdb zqVdqi6`2Iz)+LaR>N}>aHBxk#e8xSK6qhfWoozAz6e}U6(qvh4$Lq-xCW}HXq3S^4 zGH}1lB!>Sm2r1ut=J3y<4DYt#yH9je+tF4WeMXONPNGzmCef3GT zunZP?1n3dDGbRgzItOU1PxdNEtSmZ1J*i1vV-Ow29x z+z=T%413>Dm{0d!_1y&C-50o2=y?U^X!qXYb~wmx7WPjnXVf8=bd8TL-{IV%$D+g# z50Yd|IBY>rC>mVP|5zClAj^Z7C!|!NjcF;k*tQ@-Lk)S zcGcSv6cX|YqLF3oX4ur%*e~G6yppz>iXUoUQEnMqp8sbHE}Y0j@7c>qi&soK%xxwN4B3{9ZH(^bi^B>s`;uWoi3%4FKFnl zpy#Kjqm`BC7d50t2i!r0=)$SKjO9Ijq7D_V=xJF~CX*zY`dQ`Yxis7({{J31?;L1E zY;;8sXrzrtPdriddyby+3=^M}wP4;@mNqZzXh3e<@m1m6PANMlV|5L|OU1i3HusT{ zF#x*S4UZ*+*bi5G?VX%9K-^iqgnPEGhfvEuUmqzNKu<$RAP}j&sro$C9Sx4#_QvaYOhnr%5?saH+xNq8BX6K zfYO^KeY1^fJJh#c-OIfKJuBDR#f?yApUmSI9D-5ee0x*V;Itw~Z1b$f`kxQ+Q+K?_ znrR))o=d|JvIngP-U9KNnL{%(qznuUPy+-#V&Qz;vG$KmyTL=#aDBv!tp;fSEH`z<$>UToeLM z%WC8l%7`H#DkU+~I@1N{!XgF_|X<2$J>{t&75= zqxxL&9y~2<(OS!Q)+MJ{lQGL~x*S*kb?5~ZSyG8F=D(u<#qL9_HZ>05&y2|GUI&4&aNQoqOq3NtB86}F>omorIlDWR58$x&_I&8 z+=z)@IGpt({SG%e>JpJ6x(e@kXz9*Ke(jgYpA9mT0|NQf;`HsCz8nLi?@)gDaJ9c$ z>RVpUmAJ}S>N_k@UO%xnAm+lifBsOxVCuN^{g0=9rU*~@z-$e@dUCjtDHnKh-*4vl znZdyU*ASQ;DTKoLd1;SMCi01i)n32;3R!)Hx%v5#!6OLJ?^L`Ts5E^8T~dmm{V_sQ zW}phNjcQO9RAnqY>y1n>mMEMZ7Wc68#XyV#c{B_|Ka<47`s;qVAF zjhr~TrlSE4unykR9Oy)r-osWon0l<}(zt#+A}w7qX!_Z4HcLZ z+e<}-!2IktSt&*3_({v66!#;`%g2jYU30>dD#|nU4PMJBToNh@y|_P6ZXioWWw18l zhdq!dUp`r0ZbC;t97*4JR(@139Qf;)?dY&qwtq+>Y%(G;()*&LkP&lXAydNH9~>%? zn2NRbb1Fv)1q)xOVl3|cS#%J3u|xOZmGpzU=A@VW?^?D;exviOhv_jemDuu2Tnp6L z{$XG&3`s~Jc4~aVqp2y?<0*QsxMF$#`tA(#KEt>{n8y-p`ee6Vx$3=AP=(yA9bDeEecGy1%=31koIWR<>+msEDT<9%##`b9B6Fs=}v1BzVIN#v^ z=})x#@Me32&2kv$oflp$LC@F`?b*^RlE1HBc{MX|nrxZh{@b6e_hk87SJ$wR1xd#% z&~DZom9gyOs1=OS$SF=VzZ?vo%5t}S@TaB9l)^gWG*;4l!Bx;=Irge}}6XPZVe z&kGAMXDMb~W;zonoN_A~GZq)I_ZoS!S9|@Gs=~~9`@mQ?2v!zd!jSSEhw=T^oIrtR z&i8^$ytj*fFEpk!HEEEO%N@RsOYmNJmGsKP^-EP8)PIG6O&v;Ibq(IbF8#B4yUDdL zOg8Ztd{G2AEp-(%wSH{~U`zFDN?{_e zc;#2x?oJ1h#t8kyqZT@rEGyJCH5yKvcn0CRXJ<}aW>u(f`~G|W;{%fvH!#k$;408X zWp6J?DIMEblgPoqz&7(Grpr)3Yg0t}_fk(w#W*SHhy3EAgq(+ZynhxoUBlzbM8$ls zU9hgW)e6r8WlzLg7#P8tB^Y!k2d%*bM!DY_%dVpi?dyS$SWrLWrEo+<-WT_6jWRc3 zRd$!eC5coo$*cEFDl9}9m&Ef5#Is`{=qLS@pZ;qr`T?&U1)~@rxto#TR zr^$o6eg1v2pOoZO2pQc2+W$)pK+C21Z7U~PZH*Z^zNyibG>zen6WtT&+1zDw-qzVfx<_ zB*T61AF;6a4T7k%^>^ExER>MO`UG$9i@8v5zWQf^`Hb+fAECK0KJy6*2AfqWmmH5R zJq_=)Xd533XekL>D`Xt+?I9)1o68W4Z+07fLwDE|Ya z@cGNdeF!7WfDQ5Dt)ebkOq}woxh))RD?x_jt!(P1MZuk*JHD}xA}CaHME+=?Y|=9@ z=+4g_*wrD-L{J;AR6xhc84bd_<6R+3smPVndGU*Np2WVv3LqIoU+C&aV`G|g@+0vs zlY%$nzM`((OPr&Vl0#ha0i-BYycK9dB5*5Ewegx%)$k#Sr^bmjf4A0$!jI}ms!@%b z9QY_BVDN#<;@>S7d~H#&YaxnQx1xync=I}7%=Rf{ERajK=ca{k*ZD@y{;cNW3>zRY92&+^sHXW5S!gjxJ(Q4-C$acMCHFk`t}>zJ-1ko} zsAb=XFee7}^>MJW>GG1-^r>iVY;NW}yEJ&5Cy>U<$!QJVDNJngPxAy{9oiLVu#>G+ zQ`Nl`go<LCe$Nw{ z@#HLO-`@V~y2(3xwB~<$f$cX#sqv9!G(Asm(|fZ#zZbN$?FQ3z$yO8nHa z-4OiZ^Z@qIX#M^7nG?~&I%Unws3Ev@e#<&;Vq!7`H6&g;$t7r^CA#+fE?+y_TNW%N zR`?2Xr~*F!82F%p!3#YaB+k85$E6>B=YRPU2MfPwaO>fbk*Qi+Q>rIBZo~(QHlWe{ zPN%DE`XjWpMJve{pZTN)A)6$|Y4x1gybJ2w7q~s0FB5SKz1pi_c~p~nb)wv0TaHM_ zB790ezq)Pjs97&b2?#Gy${KgGCA<>b(99mS(fl6sE4Eh;6tUxBXm zCfcAvhye2&FFDV0+OvOsrk)Ei`K-S$k8@sMuc^lB8>|fWTYxtaVc>QA>4nb3q+9DD z(c6tfwW07(wEHi2vGnx;3bhJ}`m;X4Z10^X+<@37zw!0hyb0;0k?wB~nmQ?anCkv_ z>fqniyG%@ZdFZ_3eIs-gM^yl?T6ug|M*=)y%*CyPk4! z7}oEe;_f;z?$zd&a4(ba9AyY_)I{_8=97&rlC z;nImPLu*U^B?OPhYRw1|A&D_7r%(L#8>f7Q0t=t3s3GrK+_$<+wPIx28f(q4_=Ph+ zt``CW%{`x^c!~=OgFCEx8{p_cz+NKr&4pNwd!;*G)Ccsj`ObZd=!HGf`S&b$K(fAj z*9Jb(&JZmYJ}WDUtJ4fh-vj(mBkd#WS9Gm@j^vUVt<1L=@AoVjShOStq1C3VP_@8u z?u05G8tqlJwZV^fd6fa?^x_g0Jo2{LIkn@p{>d{+MqE-x(ThjGqKXI)reDTCnzuo>G|uMll=MPVpq4_rKBk9CZM1!kUup(JFBXucE2Z& z?%?8Gmx7Uz(Wlv+Y9nPkhXF>>uXl1rhDPlP`u+Y1WVPN(#$exr53RM0O?=9ah$Wh} zFT0j1Wf$Ren+E3-6Dk^|K^y(J>7nzMd1Yl0Nl9W&W*nWJsCs(YB?YUm<>WfTBenuJ zIGtblE9E}NFDx8=z$-(GOUoxkZDd5ti8*9z=K#s6Pcz>o9a!Xz?*&h;#%&dU6~%bG zpf%bg^N@0KQbuFQTS+P5{A!5;7)1RjNcPcj8GU_r`Ot(7i#b>VmR45ULd785#t>{+ zMDW;Se=(-r9D#v`XA{>LckrNuu1S%=&x)T2b2KvSjmoCF!)reqQen-(=q9G)P(<#^zu zhT&(+&vY_&#X{rxGhPjB3Q&TL5+vl*+8nvxk}(urN!}5=pnc4M+e(#m;Ax*Oode4` zAV}oZr%dy-GVX$#Uthm#d6^c@pZ#x+)rRmt!wh=Pz<>)d@_-qs@g?&G{eYddQ_}nN z^j1EeZ43MfZdn&GkdK(*Q3hHmP;|hi4yE9uTYvSkQdLf8YoecUV$SCGJBCgw99-SA zBd07BV+vWTnshA-7wev`$nuP1pi#wk=ZJ`@!(Wi&Mjva^4X zI5#KQ-tJF&|K6oDMz~=3&>I~K6&*F`{Ki*7gH;WeX(lwarF)-7t^zA}g6;gq2{Y7G z206eV>pbDo|2?+>ZVmO*FLAk=Ve(V&_HgKepBAvy48*|pY$KjlU!pgT6!n~zV^NCI=qgWmmW!JH*ecKb{SI?Gka^GF58aQ zdNC|!^!N+DsyI$fByK30bGpnjt5bcP08Rl{@MY{j%XVw z2UlTyX)R2ojtr#RohP|!GMfx6xXZs}{;QuK*;_!}*=5lYBaXVOsH<{>@q^WyFegr3 zJ~sYi87(eayWRDJ7zf5@M0fGp{bDzcX#Q#&7$nL3hmm`JlUu%Z*Jm^QbG!LF2y>_g z=jP*LvZrdu(Jm`jlyB)1m*5hDtOPf{$9+S9*;n5YkYow5b&`h28)wO zENG}flw$7TJxW;7*6oig%z5t`#W-J6q%Nu0UwL9;VP$!eCD5NH?9GiN=d^Z7wkDC! zs_E+9a~9A+7tAp}yFyC+K3ju*y3ZqT@X|kly7c~kkNf@$YDv>jT zkX!h=l^;d=%_scdypZc#4P>U)OVm{Zah0^U;UhFg-PLJNOpXge8@1N)yw_=WcX7bX zkBCee*E`wV{=2#Te5dMZD|OCDFQ{X{q!2)aKfTMS4DafHzStOcU;G>|8c|2t;`uZhu#>>X(Lg|IfI@40Nzzab;1rxHqT!!eUrG`5_cwad>dTWZtC z78}X_e9d^yy)axI^w@I#h7$ea!soCX^*)B%>$R}|E(~Hg&3x{?e~(ovUAjiN@yTgj z>~jr<^H&d->vOuwW)Exzh6Pa3$>Bc`7*B{w61a!fQ3#ESN_{W;Cgu=Fv&p`E63>7_ zLD5eg@?c4W@i}BCT&;V}Hcszti9G6QYqPf;~abf2opws|Dh%S z+rIPjUD6okQM=0nuf2AMw^1_Ycgny02llx0ula7xsw1RUhM#iJFwT9rqyRjNhNkt9#PFVV;jOc)f*@S-zQReH4h2v zO_0(a4Nb4TAhbh3&I9g`?%&!(8LIh(ghI{yC<`j7d-hRwg>+0u`Ou}_;Ggl_s(pP7 zty0qJDcnq#T~2~`XtJNb>~Odd4`{MlWDA`gK)}je2h5w>)Xd zybG2PCjJCO8Uk=Ex+W&zKNpXa_TZStk&?+0dp}+F5W$&81U?c&8%Jqw0}h`y`+qg3 zz_-jjOL&eL&=3HO2|@B9zYC02nzvnf<9grH(;E(d-~d>EiO)(2HBD6Y=f#+^&+$QL zG!{0%%ey4ces)4)9*GqcUFd zNqpLRBcvQlQv#cft3BfZ@%;~*p9fu^q~eAAZ4QZ+o{FoycT)1N?c8+4aQz&agd-ODO9l2JozZ`KuW7o zOZoj`7f)}S(_MqVW3$`O*3~HL7k6ZJ1%EHTSPQt#sw@FEyO1syf%<5C5U# zvFG?YtoO6@mWoxBG-&lsc*fSeZG8XHSlfARYj}%UJLlhL4(Xh{?^oqw*#GvEES?o+2npCpa&Ux+Ze5kD@RZ+pcA4iz)MRej#b#;29 zkPPyb1dEZ;PUKiO*RnK{v;UcR5xPFj;>sbYRo z3{JwGoh+%6ZwRokbc4fE;*%e>m+?~_PQ;CVbbB~!VGUkRcXxN%c6yUUcHV5h0ym-w z`|Z3>-#bsX=gFu;4-c_3f6%NOS_#szXstRr6$>i##*>kGxwB7Ka{E5;5nB4>iI{fT*qsNyl}CM!)_v7hir+aM6;PkA_a{ zmneF!%bNXbKM*GNOwm0+#4#Q|P!=K3DZJw&G#-jHM5=oi)79;!w0z(1-$>Ky{}hmIg|pY}_aoav!({tT^%niGJE|H^QL<{bp+f7~iq@ z;q43b$C9yo@lS^^P#F8$Tx)LQzTg7Z41^fLs6rqBOd#UF(SStW6l^`B=Ve9e8JijX-UwoO6PToVax;`eq4r{IQKbQS zU?bbQP_WQ^_R@W$Dv8njLke5-F(A>c=ga*$sRjLzHAPUa)R!!&>JBZxzCHjlHGLS4 zK^v6yN|!ZBj;z<}oo31Jq}UQ++`4*F&xnKpTjLc+45{kCvl9$frO z=<1DB$Hs%!U(WK|*8;f<)W^rg$k2I3a<{Ic?&IZI@9Vt3m?L$2MuhK))5 zHR6Z`={lp;5+iCLwzd$&V|2|Y$(2(V)mbzts5U7ALa8)n?Db5Jtvga2)pTW|`K2Zb zLY`=Muc-EW`wLx(Yy{~LsF@1BJQCJ_yn6$>O^N!BEmC0I0?aaomuvbg(ShDN zk`MAw^@f65iQiye=Kq#NqO?jGX-grE9bOVssO{f?7DE6i6lqFJuUwwuMms#Rky+~t zxlSjG(KFo0<&D$6;GoE-4^ZlVhuK+n!p6sQ2AZnsq3)1?vP<7xM-1C@-(Bl2eJ6irtKr8ejUiF8^UIxzY6^pz2qB+@wiJK(ceaiIa3T~pTiG9tJ+6zE>wk+6 zK#8xZ5WvTAb#(=s5oD5h_~gOfe`j6eySBCmp#1aikk-}BZE$>i9~dTjdwb8pIuDEB zOVBd$z)-3^h&jKCW~cl51lfGpKk_)y99)^Q;(3ESs4jp>f6)?v_Y`+zK3?yNxV`nv zR-!fbzrprw%c(nH)2fR$aHSWpDy~GS=g?eeM1*?dd+qxgNUg80rm3VxAgvDViCCPS zAFvU}@G@{qns|F+Q@|3EXrt4C;d&ODgi2QvK8XKQTC}L*T^!GPXm+;ym#lxkhXoV> z46Dtf?XWoO_oVDA)FP#njv^v_q21~&NVsGR+HPIj$|^^^C8YUrH!%pvaT)BENT9_@ z#OwSCCYY2(`1=8*ZHnHgtNJ665U8)ZVKys`oDvcX>#56 zo4J9Vy){{z4){1o&vyLP_Qf{JXK~m2-Sa^n=S?Ye0wj?Dq&uR*Z*>u0lw_Z=E1xh7 zE?8}oa?wO8X+=bG=jNno#P^la5s1hc_Ln{3e2@%@VM_lSq2m~#X#31 z-Ov-iLaWLQeAj1KWiE8=ahz_Wa|J0a*7? zx$}(ro#Yc6)>B%{!+8&joLr`|cgdT8738~hwA57AA8_MLB|1++h0p&*l|cJxOpA$i zS8;OPn6qnMf&W(xfiD4!X`_rSrI6tv8qPy)b^PjW+RNY6>5m;Rn(2V;U+`c?y^@A3 zv`bsc#Jo3n>~Q;GO`&vfU?dYx_}{V6C61*^g>6y332j9B?v#3G?vJnB)ov{d*R$Fd z)=N=Q_~uW4YkoZ48nm`5O{(Y)nd|BvFE&Oo1^s8~D-`S0rP$rs*Vv>iR(A>PXj=mU9jVwV0I_SSVsvs&VFH90wb#Vklbh`uM5PHWS z+JoO~sh5vB-d8YJHR{O;EL-gfvS?l8{CnuSKO;Q6;`_2b#^)C6d229#_VEw|-4|&u zahZF!JVV~WvLj6%Q~|&>)hb@bZ!+kLS~IVX`!6=>L39rdQC>ke*4vZmPqA*XO3tG0+eQ0YA$iuV>tD`AI)uZLuTFdQ5aqwba& zI}d!H1I_ANrbCli+li6Fsl`Kbk#z+lBRH)rY#yBY!(X2e;|Id#E9Cxi`U^YrI=2|? z?7*;Q!8FW44ILfTuDD}`&k*%X_YX3(WBVJSRAM-%i)vxu9dCGs%mXDg>Bi5K@Mi-K z)qs#J80xrlk1~407RDH%uFDI!D$07DN9q$m=M$luW=?#7)be}p_rW-3wE`=5Daevw+k(~|_3SI8_yt3k= zApO=Gx2N65X4Fbeo$`lafr3IT@ucUUG&sJMv9V*MX{ ze0;D<)dpdh_k8}X5g*TPOu7FYoDc&@LRe^z>1#&!`F=ozor_EA@I(hz0+YG{ ziO%^Lxe`jETQ;^$lS4JyuZTjcv@IME_C6Bbs8sdzrf?x=TX{c6)!M#K2!@{TwJ*EohvTdWDiBug|xc59k%^p zRtO8jL!tj1r>~;!XA&L4_Jz@G_7Fj*3Pm6Xp%JA%g-jO@MQ;7J@{L9eEU?Z=7j(02 z{UnhUM+1qzs4RtEh2n;&fGnm@(|k~+KUSd;h9Mlj{+NB{tR{nv8_X^RleTy+{K>MZ zQHW~lYLT<^SoStQlMgA+q2Ku+3yyd}g7<{acY>w*Ofqt&zre-FK5tLj=xn$rIZX#y zVrrF$%X9LL&oE9HDF=Ocb2VCK6Vbg5RYdq}ogV~51{}K}@gNPpeArRSCnh;tUPyFSJ0X_l~9Wo&qcq4;Kk}K!Cgi5FkK;eXD*suZuJt zT-|bsn%v&~_gWm(n20OFq~DR_&f}d3Zt%9TztomH7hylG&-JE^4m)pTMO7@znr}!}fvGPV@rJA}enTPxOV=gR zAu%!I(b<02%QY=?<`)Xrznmq?PTSA_UPLg}vsEpJVD zoRdjN$UHpXQ3D1g^-^2w!AZoxi-QHbyAbWWXmj0En?y zY|MubA3n!DqhVuX->8*zBZ~c^bnly4f%`EpPc_Ir^znz_ z-jnl9o(T(ccXuvORiHID#}y4hM!q1k0}Z?yO2(ON0s9~s({ z;84_ML}|6s&mFk?n=_LMWx~<+!7Rxr*NmPNRcR_r0E{>8TVCo8?hJT-j1X}h?1dx_ zaX2j2$4ZJ@UhT2?h*z0Tx5_#C+~c-4xkq;K=|BAa!_#u36=mOg#}RlyXZ#{+HrvK> zaekHac*rG!_L4i0nUS%zGpL>|+z|q(nY-tkqk<1q=Yz1$SJ3CDt{V}9g3cht`Fm)H z-`?TYw?jc$c^WR;lfQ)>{oB=NV!0`owXo!rzkU!&3hynKTkj47LIhS-r`|Ijx5J`s zjp7osbW5!;`11!;bfg^RcgUsSp?-eZL=n(cTEnuevSs5kc~q)NvH<^pPfA+Sxz@Y! zE%QAyK4`pQ>vChE(&mPj6w}y#m{rmLvvWB-U_0!IKEI@cAF4(Qc~35Hk(mN0wr(d3 zL>JzdWABB=Dv$fm#?8UFz0$brtG8eF_rK#UhnFIz!>9knqNv+<|DooDZ+uZ^GH0aU zy*i;vWSyd|vgn#0mQq)T*f%Ylc!Dt^pT|%bdhPKedW63)&iI&_CPZFc?T4>lHhD~# zOF?4Hz`(_WU$3GIh2;6BxvLpwj*^#F1sGgU+B7jfjinL^Kk_ge`9jB}S$z6O2U87a zFU%Gabiv1@F8Fl?>CQKK7WyxZbJLr2YJqcEsABl;k9bz;VlpUAkN8m99ilg7dcgrA zxX;(j&o?#fT9v=S5iRGnvI7zS{QH_L-gnw}Q-SzdQ(aibjz};Z7CWtEh zK()W-&x1UFAm`GBvOO+3``_fEE)8=#dhU1x8$p;inzxt41_3Kv_ad?ZQlW%S*y5XW zlF-B13GP_ezi*+mh5ItcepxWqkQ86|7$n+c*4uHO*4j);d7AW z!mU}DbePg|yAt5n39X=5RaEaGJU_#~dFjG?{HZo=i!gY_yLVu=4-++Fq&tM(Z(rce zm#jZ6MOFwT?RdicLAx!KI*iMchJb#o49f*L^Pu(G&57dVmh@t z8Z;qHKc=Tuq2CmWe#-ug@(YX&Yk%&tv$IWpn$3z9CX&AN0?okiby9QjsckoY#HR0C z^*Sn$u(Y|k!nu3iBO?2Xj*c8xIfX3MZhSE@?aXy&b zs^4*bYUNn8g3E**7E#G7Dd}sRAiuo3U9^G|f5QoPBR`g>VTP!`kgct)LcB7^3ZDW1 z;DO9_@3spd2Lmg?ftotoUq1!KFj+-IvFgeJF$lF#vfVOD`DC1@mOy&5g7wH@;j|T{ zL_yxCI9##^7Vu!_C&lydUg~=)h#Q?A>%urWnlPnnVbWb?FVNa1|#fbseS_~*Q0N0<A}1%u>M+s(YEfP$xnIR_ls(6Uoy5IhNuH%}spoZ=R<=~~ zf%~C}Yw#@8L1_asjhU-SMk=3+8D>OJjAqieW-N9;R`iHZaC|3zdJ+w#aMtW;GJl-4 zHNNRp(T(BZ^9k6XIf?2x9DHV0;#S&FsN1SPsH4oI&gs+=mH%g#wc`+V0}Y1O4jbOadr!?So*4qKD>dBi*%n_6)d z)2TJ-hdKAOKm9KJw7GMn(meQ#|gkV`@c6X$eypD3Yg zjQxyGf={ljdT@B~GlTe7i)emcanSV|uiXI5c7VuL5L*{1IgRZ57(biuC^tfw<1^eFhp`3j3KJ{q@uW7Ve+qKs;QZOjkB$za zBoC0nY-|pC&$Mkn5a%y)4lTg4b3uQ|u(omz?cto~PFhSCbwrzBXBBiBDgX!o&>=#h(fWJG6gNuKKsV*h}tGizqs$>Cuh2VNl$K~Z_@ z7g-BLb#+)2_a4DFdE_>v5yJRKdPyG=_eZmes;V<9*I+JgU4RT4f`oSrXN;aEP4PO% zx8WR`nSrdXt|E}*5fNE{Zxl%iF*i4kD+g|*N-f`yA9Wk7-ezjOLn$vckmN~LV3VT4 z%xi6pwrPwYBlq3ETyG-2ON3lYl}lqGyPhD71rA@MTyn$E1EJi1v^Q<5Uu`%;d4Xh>tSh%R3eVX}%Yzfl8QS%gWFvpkY# zU8C>zq#Tb>y_eVvK~=jX`p8am#VZ#*=o3ZfvmUn3S(!MgmgHt`7_X-Sc1|?K7?$`o zLo~0q4z}`>CU#v0#dA^l7NI6KC1v!FT^#bGKbkIjntkJ;=vdJdof?`KLFLhlx>AC- z8R)ya7_cW~>)@nPwc+nD)yiF11AVLe6Xaxkm2kg;7%<`o`hcxbyAI5;0H~i< z%fLO+#@-1Rxcs)11OFyxw`fH$K?BXP^JvljDwoC5aVM~9HPA><6I;9rTYQBYVrk&8+N${~lcd0milikC zG)PHJLn^9xA4$!f=kA5r)Tj|zl8YnH$)It=MBe-T1slulJqy?%7*~{gYiouT(rt~4 zN1B&2@C#tq*`=a)bVT#I|Nl#!9lJ|h&LE8~wZafus;%krcLcv18V!Ml1}3Wu0;oAb z89AE0fluk^MCxHBh8Va;bdtuo6sSbJbl!VT!QKYvm-fHRMwR!1KuqB4@8Mx{2Zzr9 zz;j;kOWgO}yUf$G{Wf7zOCaj8WKSfHs=bS0Y1xVv7thmb75MX@=)zWVcVbRzYNthj z7;uGXS;2nD@i~E4eQ1;icXC#Sj;RH9l8E;#R>-*SDOP zF~7u>&Q@bIad)$K;XIG;Gp=0gCsENFo)*|p*YzYTuV8MvO_hoY$v!OpQp<{MT+~Gc z#-3SiTz0<2(5~jpfBT~auHz(;19J0+8$I!4)^DqzYi-qu;nCKlC??}p+X(M8Q~mtu zKCc@7Y8)8$jAM=W;j|lRv>`KAU1+dIE0zrITXO#%P)aUhED;#ULEFW&KelD27k3yL z-%Wk0iyH6%OHz`oLf1PW(6#xyDNG@b%Y@iwKW@c9>2xVdN%a%wTA(o)gAx4w`=zY3 z^xKag8K8QDi2&owpYy6m{1FqK;o7$7e@zz_76xF!Q!^kFJ5-cZ*M26@e&CO zQ#@W^>n}=A!-#ncOvr;Zqzf{JIdL5y?RnkyQ1VnFw+F_H0IiMlFVj3W&XlocU+>TV zUWXV1@uYySlk-~kblX?jGxVi5OzPcVZ*;R5XJJ#EP2g)w=jvv-EhSG2(=x5oD~;54 z?s+THe|Bcg$Sd{i!2`O{CUvYkH<$PXdvAz6JU}{D#PGI=Za__MP^+&T?fecS&x~c$|wnVQ8Ag79a3h$9hZ_LQVlc$d5wMiG(~Bu7*)P zDLEukG7^TVS6ZFTu6WYwUxFfyLmk4=rC%sp5L+oFcT$)VD#l!Eh8*vLNtUJL&XzhC z<1GV~ysKy`t7KL0b{Ssmw1Ul)4t>^rnLzaIx?VE>7G>r^3c6kuq3(C{rmn9@x*hcFulkreYsSFwFKBKtjq3e>Mk+cz8S=%Ba zh8JV|!EtD7(*ACf3`xQ<7Zm=q)|j|rfCU#Jjza6RgE0^pP#xq+2caNQAjfbvZ>G+j zC@!I%5)4i{cG%HnQYEAkMA|#Fb>-jykdcwGep~fR9cHr~-?zO}(~}Y6l4@!hwXJm# zIXb==p zX;L^D>z5owGv6=n5zyLp3>>03+{dcWy*&x4&CK@y$Gv<(LWlSK#tu>QE zv$_&g*z`;5ABwW?k|8srLPv1E=)=WAIB;phmd7DXfPNDxIq}CWY5*6|PHZ^khVy3k zsHoC73cgI*Pz?=jJ)ToD(c{Wft(=)W48M{0O9uy53?n;Xdv%3_8--r8LOc{aSJz0s z97&bI5)3}UaIGv~95jJLcT8t~w(*gK^yCn&3aKOg@Yh?TT>_wzM;js)CZK#3m%wL!z1^I{PUaAfvxqmVD^4sgW)phrO7OcF z?|UYl9V;n@k_qQg5F8Y;3JW&E?!@oI+lQ+V21G2p;iJEDxTa@47@Llahk_%{C31 z3A0AS`^-!&`upr@nO2hhmk6-M0BD_3e8m-fL!lrL2}+arh8nS`Hj!dqGdkI43q;_U@+0 zRVxnMB?k+E92+7ln!S&7HD%jA)RrnYiK)mn>ybR8@w$lHh+pGZ zEe42Cx4%@dHt1EMyyZJQn|Gd+dShqz87wx^SiETeE$S2_wqnj?j8=N_U-0Ju2ZwXI%?747cB3aj-EHLx+c7#fiqGlHC0KF1Q`|<7vn|gnK@OtjtDowukHV%tm3eN5z%x*~iE%z2L4^SMx$4ZksjD^cH7pNG}Yw zR<8lit$4zbt!_e?EZkVJu|bA zMZe!OJ;p=ZSP|SP09+ubQ%}sm@Efwd!)5#lSb#YD6b5k=BUVC6)(MU!;q(oeny6@` z+3pEBj{W;?SKCgED;;yuECXQ!4tr+t5pX3~A&UxiYokHXT4{`R38}lkEZI2PCcAY? zWAu+X9NG_{2-ZBD#X7@gW?=rDttsB**oz4utFah(VO-Cc^BRSBPefHWHQhul&sRx^ z@c!P<4FIl3dtT>_|HhTv)%_*ja5;7LHmyNi3seJcc9MyVo8!JL=?#?++XmhnEH(T0 z@+*JlvUd=?T{vsG=ufrbd~$fP<3P*yA}P5&wWOID@R;8Pye<~k(-z_SdMc9VWsZ~@ z!}p4s*kvBH_kAp5ro(AyK0WW;tWqn(i(~=|ygbI0S3WV2wNPNC?PT_XvG5B3e2QJkw%nCr+2) zfmQtbrE5M*Z%gqJfsybPJ72{do6yNN5Hf59BQt*kKtvEr1EjszW&7aoiCVvwpa{}{ z$lPalp*kI00WU}Enom$uZY9MbNZT+=u=jg;z zXFPjz(tH4j559qJ#*|Ol%!;1E)4v+G*?d@FVZSI5c}o0vsyn`8K?!`*wj>K zrAYs09yBngYp?b2*#0dxKG5B*8_Rw8AQU8uA@Y0??{n612g0mWn201Fk6&s7o`hzW z_tnGGW`CCCeo_o>LcKp5FnM6dQwUSu`+kagyd(vNEwHe#ug;CaLPkoQ;qAeQfIgvt zcn&pniJXBR%6P$FfISFcUfF@q58!=ezT&+d3$|^Yph(PxCiru0y5#WB*{kL?@cAk? zd;2DdN$&9|vr8r5OwSI!g3ex0Y?@^}&wn_=pmeD6yUu;h`g2;AR*m%aO`Y3E_Oy2l zx9F(b#{&*Y>u@ zoei#M-Uh@{q>PO*qze>$|57O``amF`IgDV=9{dFN?y&5X$w}sujd_1(F+Ef&=8#Y0 zY(~WTIOy-~XN$iBc@5B~T3T`~Wu@gkLB8zS6HLSXOdid7?=PHoeZ!XYCAxAtaao|Z zOAl#bBg?9jTHehKm74mA6I-vWZt+KRP5kMK!N>(Ka&htNorJr43YMWB_g%?l8+8Cp zM91&?wCrG0Bl|(?0v1VCm(OY0MDmXT;@pJfHL+6HYN90H2k}CE$!emy6DeAi=uiTL zes8TaTN#-k#Fn$yo4f(aa&WF_-Evu~Z_quu!>V7-{H~(|_~ZKaB;5L+Q&P}DUVkK4 zL?K^xJYk>*vnw}H>dg-CGjZrBpOqKb|k(2YJkSipwhS!BkID5U*;g76ElX5C!h7>WlxV^Acb zv|6W4rNARcz|pZ2xD*v_DqG1u7@v$wON$;#4}xKlar7{kShO5eARD9|UJcP5SA6>k zg)so%+#PEE;N+Sq{JWE=wa?d?n?DZ&0Dzj72`J7=~j-{TDJ|6x!)si46cZ*ST_${bVyWG)6Txg!2SIRLR}gd4T5P4i84H# zM9NxFSR)Q3!Hip7uo-Q69nH#(5LJf9-(Nc+r%L8~k0ho_@BKOJf5N$FUF*uA%;nqh zb*-9NZ_O`x2ATQicN+`<_6BxU6&<|(&5XhtCyc5pIrPV1SlgXlE)H(3Ptxk4hjb(kniI_*E=$Hojs_IQPj(ZDPf5XMf#jDP`IpwWfYGb)5Sm8*D+>zy?f0Ii-t^bE5GmxQq+M+#feU8Tq#0#O(ep z%$YDznXt2@DZmhJLVT3ZPVvspMSPQpaC5^>tIW_#6=grdut*U^jj;`lo3Sm&@we+F z6fPv#kkZYYeMo{-JTQ=mnq+_mW>OX=hp|8#vXzLio--{^WyYI>9xpTap6Z91W|TZ8 zoRrwRVe1oXaG;IEq&3BsokZZ$%T)Ib`$2U9-5_5qn-DqR0(D^nvA|bf2-axA^XTu- zV4TK`%`>4T(N^(iC~MZyDU^0Obf@!udhuo9!|5THRI{&^@Z}}yx6zoivDmu6LyZtk zGcUd1)gq6S#hm32q-+I`s6)HuHph(>?%#izO?XAV-QPK!)Xp+tD^szVBI$QaJ4 zeJ)P*>#2T(<=C^a4zIpaO7*jBQs`nO6e6g6zb?SFDzM4x*|NIcQ(?-ej`dVA=Fw41 z#0U&36eeNEhZre0)}k*a$CO)9$i=XhS@oW?*2TrO+#Hi7;z?>&$*R@=r-%v@$<0NM zIq0FBpAVBL3!|H+3W24^=>bwt$j**Rw(N#$OGd8jMlx)l zFxK;^S12l{IZ4M6)1a#DHE-X7Q5Tf|_%T=_Lc_|6s`E)JuTIsF^e z1n(bk3wL33%?X3YQ6;Q{KP(eu@=lNVn6t&52!ARt4;@)U{O>QH&(oXIE+F`qJ7Ic1W#(qU5UQkOB5sPl;WZM_KC0Snp%$h1u z*7;z99N?ugva>Bfzt{l8j38eW3U6;*wqtpcrk0Uct*orat*`c&c2d&K1>7SgB9yS= zjit=DQLMjY;l~Ut`k#|U2uSm;VQmzAFjjA%8maci&4Dgi^oHj2(yp~urgX|7u{e>* zx*urv7yN5OsBNSxr@N@<*kT!4UCmKxBqVKnsAN!$$~=0o*_rcEN6VF5B=YFT%^&jP zZIK;XV|V8hBf=8pnmzEgr)6=9o~-}`O|XwNJ2T>8P9KU+bqRR+9vcye-uDCInK8P8 zi|XdymKcS|)VxlzIjvk(sY9MzC%x%Yk-9F2DUr&*<}l-S&K>pMQ!lcp^q4-Xr+`~Y zkU**?!mv$YsG z^#qTXsHr7w#PU?GxT~jRhKAqW5Q4qmq?V^?CAm*Y)g? z(J3f&;)~TBZd!rOKEsPk8(yntOiR%5HkKxQ(Hp(6t$T;^4NQTmaQ&hVVf?n1=32du zw@%UlUtUSY`*Eh`(1)XU@A&u_ka?)QN9}gwY#?P?61HWDZKp{KS5=5oVP}R!yDX#& z_w!ONbG#aJoz|P_T`330Gt=`W+k08mMyn2%E}cVsf3Vuknl2k`QXUB2N*5$L^Ntub z;J=0A?%nWzXFvd-^$Be>*jN_x1P&Tnk4YqnihJ1sGQ@smk(pkl6+jZDQaSr|7Gw&o z^IXBFY!$b#_ND1pXlx>AAG|`sWDQqcxE4YO9&$O-f+~U@otE_ToIsO#ZGBcDi(NtH zZ5NXLf&#CGxlI$$S$YNjfbl&jZ}of3ul}^oUDRomrQvD*e~mD>iO3Ko`w39!zy%}V z+;VG<&K+3;_oofL4TnxlhcR?tp1yGq&8Jc;VHd9>`j<$hR=_*C&xh_a2a1o9!9qCB zWiDF%+wC73E<$WliasqmeEsOlos!f6BG?hvoC=UJ4v(b{iYRa9YQ2k>$2^f?xHppGc--T@ zH-Q&Cf=zql^dC>1sYLKF^YZX(Ckx04BPA&e0{ZUmmj|?}jgrYm^ME)=>$?Nu^kiO1 zx%@a~eCXo$(V;Y^R1FQIct_x*RE9t-fR5nsw0u**-W3tujHE?XtT3k@ZqPZ&{~dH;1d83N%lk5SFnM?az2S$H}+S(%coZ}s(Yz|qlX zW?R_omUPtPc>LWQVx|AvdBDa&P)SaXdDEE%3oC%RlQ--16zMZum_bKcIkW)%h^zz_ z!o<3YjL{nZ(I1(NFVWlXsm|Xj5o1QdI&bqn3X5@k(DZv-R@8FF8vB z)snJ{Dh_LSU~SZmj}OZ1?8OJV-pL|V##l>@2O<;!s(dC|zD|mW>P%+1kProz@wsn&9r12BJKt~%uF;xm$$8Sdm-LRTtZZC)ZCIG7hYx$X1r+W3*tGU6u#Oxo z?MmZ4@bTTVd4n_y$e~M@x^iLp_~cwA`DwP zDmk5O;H6J%3yzK-a~O14y#+f-BB7&iEsGK5RhH}d4#nFcpHZ7H_WENj{yi1`*Voqv z2Je8J93o^9T(0!nP*L#@jD$HRi1DY8@&$`kNU35H@ztkiXEVaV!5thN?_9PE`YPv2 zW5udjT&jLVa8>W-G2#^jglr+h4l4jZU_3U6scyRI0_RlE| zxZ%4Tk}vco0s+oEiHP5Zwf}X@%7gwt2;c+F6h=nIMs^BB4_Li>9BGEJO7b@G?BBb} zO8&*mI@qjVF=&0qP)e7~x0Z(X*N#{BKaWK117|O#mAbvqXS!G0kVYqXHt{++Yi=|>uW?*qDLryibT;0O;t$HAXS4y=C?dC zQ$Lt%f*^LLf_q;dWBZLKNtnhDj5MMAm8;mrrTA@e-N69s|w??_8TprA5ln@?VYd_z$fc}ib5|P z)u5FY8#C#Ey6}cVx8V#9m6mRn6wQrZqAZxF9bP@qo`i*s(t)Z%x6#0sN_-;}ou5yK z|C7SPCxe810x5_{>6<-vBqBB!O@R}Xr5a70hSUWTrlCut-kVZ7F?_=U(a-e1eX*tB zU38_HA*BS7Xf!JB=RZ{H%8||vVG*UI=Su08sG?=sM1K}WPi6SAcqrucmAbOi+^g~i z73+T^Z}H?8EoBf_oq&#J3@OjY4)&(tlhLRhtc8jkF;#wveLBQ}(xej6$?WN-bE^_f zS|5(t``*%;yc=@F_33=Fp^rFDrIMmlmmi-z8SCAu z!FxdriOKJj91`NH=)V4!CFlq4tu1%6G%Xc~(2-{V#uKunZo3(<#w3Xl)Z~r zbI|3CJ)fdI;V>~KqIcRA>POhWscPcmW7%*HKKj@E7lJN{iMSL>R#+~J1!@fF2p|nr zYF!6_X??P4NeoDX8ERpov`O<41sFE_)dfoFpAosfeRG2GP?M`}$Pe>|f-rUc#U9CZ z+IzZ7ck6k}_4|@aSuk&Vfz7fSJ09rcqe{NoNkx*C+wl<&v%g?)=mjb9G-H4&1-+4v z6i%*x8hS$#m6fLEh;+f$NM`B%>X`-`FJ08Q@G`Uau0*$m%6Y_oU#Guiep#934+EZ< zy**Et9a#gvJ1HsN;$Ok(Yq(iFfs}v$QD0=OmzrsMXjBRlV+Y=cFocIw0iByZY)v3z zMm9w7F56^P^$io0Bi01@T#X1L$l6k4AcggUf$6(@*AlwRe|>1AK9bq`>Xf|LSR(!k z*daYh3-#3G!cUy!G`~zQD)S?^>oRN{HlwQ%lIX!@A$a#zJf94!^Mw-KL1y*{+PjgNfo z9|gHIwVYrc-IfI-O?iQ8ovNmkHWkHf|Mr%mE)GXS!xon=&cAIrn8~gSFa)eWW+6h2 z8OKDtNR>s9la-VF92r#_IfhLsFCO_L!BRK0XIebX7(<*0BJPev9>9=4Y4uukzc_B_ z!U+-;_50gTxb-Jq7_+CRXRB_21gk_T2a{{E)LTb0%s8ocjOBHad>#x^H(N#N&y1+V zOHBOydVMF&xKU|oaIbp23&7cr8XS}(A0|akT==qsT~;26NM0U>-leKJ$s)Iv1+E|q zG6pK`JF0CL@+C^~6~<7TSV>7;U4_SO(r5&@o-GMooMkLTa=9dsG?6S&RaM2t=6O=W zetsk80Iq37J!9}@t+$b?q%9-O(h|j1aaO2}eN46#e^`$x`Eb4LqljKff$D{EIYT%& zZ7ipulLj)zL`Bu!Kb>K_Y=|l}HcIw>Xhxiz#K36tBE=DWPBLMjst!04dR>EV-o4*S zl+jRC#{%U29L#ycJKDr70Y;OUPs)<@U8n24pvNoe=BBaYGVsEamK!L8lNRf?ifCT9 zfF%>pT-@Xl8NNuIlA5C8c}*90VH9xR&&$mR(>ZcVn5R@B1-xkO1w zfzvkcn-GkBv7d5zmS>dssz#j1~sQAqNcD}v!^PG{rR#X*R;CIvW8Roc*z}(yKA78 z8icH@9~`DXu4t(Ja#nnsGs*=>v*NdBFPQPP0QKYxk`tr`4c-`b#-x`2&{Wl2S>VyM zI5;7I6Y>gKujQnMUBBiu_Pc(=vu^O~rzjWc^_;5DnP2g(qgAGsWv0@=@VL-G;u&+1 z;i=fuEt$xR4`PY(87&DZQ2%rQ=myTaY5&4dale~ES^#TA40y2>KIc*M@nXYj6S0=! zXVlH#%zg1otKS_yJUGffUBKw{{}vh*Ed(juHt@`hP!{${Uaera@q|ZoT#a=5@JHaguYE1&$fhTi4g-#O@?3BT~<( zk6W-yXpYPKeuRGfV|=En<4rg@d7D5rOuE=|MHTc@nz^m=vs2dx>&a&*D@@{W4X=tQem55-wJ^mn0wZnX6-OrY5 zT38s!k9;Edei|MO6<4Zp4ej+~)j_`@+#xnxK^e;Ug%AlTn32zt`dr}+(Q4;gkIIfw%Zx5Qs@xSzh%c z(YT=c&&?i@ts8#Tidnz&Zg|iadUd>48@7QJ0a(x@*jv-`&{Eg=+}P3VAIZwOfaJL` zV6c#X_yE={mXC+Z)4bl!$ok()%i4Ge^+e2{nzXUA}!6h!p`)w=?dA#X_#uXa5MV1&fm7!mE4kUbLC%$Gwhc2nWx1T z`M)%JdtbkUsJS!&^lJRPHZGGx5yhhj(^)E!mn-heJ&L_3hb&&m;+BP z@_R~AlpxF7{jJAQkz%x9bI1WJ=WUctDnnBKh{k+|Hz#${AwFWSw2XONtR)#&YHg{k znW73dJe&M^JRG(Gjp7s=y-+4z69E=YlB{?b(4i}2NW@jXG5NHxpj%kHm#=mxk*&id zDM^*EHIul|g|yw+pp#wY-Ed0z@6!J8;J0+iG-eh1w5m15JE3SfB(yqTp}OX3s^%Ir z|6aeX?Y*Q)cZkPUt}|UDz?LWE<|^y0BiLo}+|S6#k}(QqQ<33EYE=x%Do}Cj#dM=o z(W6I(`e9l02JurswF$-Lkqg1X!qF6!pciNXn}NiK4-|GyNxV&&V`F$EBa<71azD8X zsRO@cuFXL-@+r9IB+bnk2L~~{>$eVP4(V744&~&!%e0a)Nx(y)^s16dSvgi?rCr&% zc!|UavJa;{+`XEe4~r7g(`D3?GgBbcs;Zu9wda#gR;=9FGGr#e@|-;~LcsaOM(`{B z^({?Fk7O3QrLJEdNI?)oi26#hZeW?jQafvh-UmDG0YdKxszx z#TW|mOpiMj#kGkvn>3W+k!oKq&uXDc9-5}bAA~t>nVbEvV$7yDwVRrr_4{i}%ClCw zc@`KE0{;Oomd&O~$-VWz$w|2Ia7d|!o@*+>DIO}Ns#D>2t-dg1d3SzF0nbnl-csqR zxZ*C-Mm-_)uu+^HHdlU11Q?3R!y6O^h@@SUq@)cV391BOE3xJM+E&H*@Y!_PhF4;f zfIUCor`TAmTnk>(v{}Z4JF8^{U(A#&`XHf-t||>7HaxMG6-AoTC>5zjEo#oj;=K-@ zRue&i0KqOHdcg#xswyu<@b@%c3c3V3wMO5scq$3__zLML$jCi5ob2NjX4TqZ-6j_9 zoY|2GZ~N((%Ee&WCgA|sH40&|UPe-M20_md_X&xdp*8;88M&Zf6FlQm4F-*EhR+|Q zf6@F>L9;?%&3*qLY|a5b^(Wz9gHXv)2ayPPalwvEvZTrRvxQ;!2&5r+l-~KK;w7)o zPmoAjG88UCVt9b`9jUGh?*Fm?k&&$Ed=l}Sm`unDb&|{J7=4`XUo;LrV(0MZ)Yh`T zl3561=~f;4{e_p_!ugq++Q7q4qN2bQIldJkEr3og!`J^oD3yYpQw{&BEc@Ftb4-FZ zfNpN4Qf47pBwoW~*2JJv#%WQ}_&8TirfU7I8+VYe8B;<5Rhe^JYK8)v4W~JX72VJ9KTnj9 zeVc?`3~1yY*~2qnrVa?Cf|KAx>H`TSq$0JDS%UCx6UnVd+|MJncv!ZOienb_O z!F676r0uuZVlPRiWlY;3@&?enBqMdo7HVqtv#@kY5i_iS1uDoh*?~-`4+}yIb<$TO zO60Tl_n57JEsi=v*zM;App1ghEXTh-0j?lD=-5@v%yP-OT<~QI+*wW@N{1b;BZm>f z_SCYT@ohR}T4>AclSaAK*@iv8h1cipai?=uRq1)VjL418-2;oQXa=E zYJediqf)O;YtCtn5hq591X!=g_uCVI=jw-YYQXDj0p7<~xe@66P}ti4Ny2`o zB`YBjlP##rSo5+?%6{rP=w&|-21(17Ha3!g#%T*=-s#cN1iAo;MqTYBTYR!YX&ms- z#G8Y4dAoczG+7{~c@Jp1YG1y5*#Tb3R~=aN>S@|+MOSi_zSsX%bk1RUwqYDzSX#!L zTUg7sZQCuk?3S@?Tgz+NUbbs_E!VQO^xa>_`)|kd)bqTzuIqQ6qZ=DF{1^R6&YPkk z$p#geph5QU8Ls;=xai(zFoNdmlm z9cQ^oIWL7E`i||%Pc=Y+nisxEcexq%n)>{RCTD3`{o8$2wye?)+2kQbOWd+qZZi}` zwZ%Bdh#2y6-hqvqmjWP+IxXiU5pic}Wol@{72qA@C)s?y3!#Chq$v}FFtn*09%b!b zAFzSOV*jLCmM}oAH3Udq?EXs%e+V~~GNogluu}N!9UD}0cYE(kU*fNYk5N^vk^}_0 zJ4>}2MA|beE3{ctc|#TRb<_?d)u(LrzJVyVH|GyJ9^1OqR$F%ELG7nMqvK-xovl)% zu-yowAkVPB$ItvMH-D7#YPY%4P*Pq1T*~ZRyXV8M@3EH`#yw2U4{XCOI9)Z5MdCr? zD@kr2Zcv8Dl{BRTHqOodh%9a|*ZBRsv#k-TG?2NpGL+%0aa4hf-JTX-&dRBP3{0D2 zpf8=KvR{#)cD~aUk;f}KaB16A&A2R^Kek*965`_x7d3MwmRHp|UKW8w9U|*q%aRSJ z%fk}hpA}}1Bh>l%TT~$iwd+&QwT|i2kuv?Ff>R>F$@WGMo_$M??5A}Jps{E@{87&B z_rwj%hYbzO$IGUBqjW=#?S0>W%+~p|ru?8KhL`BsXZyD?O_t7y@*(f7f5c|}6uo?A zkz|>=Nv$?DZ6u|j-`8Xv#@qhEI#)ATEjxzx^703(2j?oVmT3jhyCEKrX?f#(m{)e8 z>cRf=+JW8x-580o9oh1brKLiT&Ini6ag#+xwz0IhjbX%6V79i73WJ+$fJ+B5I=EnrV7QxV0`{;G*IQ@xIsXYu{J!f)t=6Grz&_) zno3vYn2@|Sy0zB6S(5ebPw!Q64*$cBYGl+lGv1S#InPovQz{5C_MKH*-kq}Ep6K-q zMBR|peQhQ4t(3_R?-tyUZ21z8o9ccwR4m8i#v0ovCA(a^t=S8dUx$lK1jsEE{qa}%-fY-F>NyUpmt#DLvJ3MWRt zx#@1(1bB`gGWr9uC?gRK)APdZY||~(;gEj$g@#(QWMP5f`?Kxw-m)dzXPbAZu+#mLfD7}Sfl$YW=n73tC}w7{QB&hd zmChM4Q{&@N?{^1s4-VPknY2sG$oJ3xQJfEt>b&4pt(^Z`&>$|MFl|#-%FT(9Q~e(F z9e8>1Z*RM03!Uw5NeDPO!5ptw4_UnH+jqI#O^YZhZp0uy`N+sfP~I5%otpSinyJ0b z##oL>{Gpqq+k-sSYVNRRFk}vcWK!9a2TlwcX@GjWiewfO%c-GBm4|b%ycP_?5E8X4 z>G11mb2~FRAM(QpL0i^Q(5^>wbE7UHu8aeb)c52;M3j`2!f9x32Y}(;&Ci3?ncWo; z1FASNy4B*lnyd>%3MM9aot-h!F*iv@tc47fVw9ub2Gz{p_7fi91*QrTMnoK_bF9|J zEf#WeDRU%`=NGa6o3KFc>jQ|iP*r3BeRmyJ&QBQwN^NpkI0XfF zpQbmp%O71m#eyY1gXIXY!M`f=F57+>=x0{di(+KO#Mm^^z-gC{xQBtbV!@bwq%^j% zE&6j>%JVU@C|`E8(9}_in`LEHT2{V)ZaHGngo*|L9Hdb`nq$+fyy*;@Pfo{-K+>M( zfg2f@@3*iK{va$L9of@^ z{vI0c{FJJymV=*GWpAj{nldsLyv!PrSR3FSeT5?JW2|U|+ zdagII4XY1|lv5%V!G=N&ht0AH18Yt`Xa3!?)>j^C+q$1ZsYi4+Dt}j%Y4!dd*2QPG zg@@cCK)5MJ6b!o+h@Y_~SEdiL+1Y<#y%!Qm^G}CA3KJvf7JGAjlK~nCM5^<~ufxp@ z%MUC@rD>-)mpp#V3=r91`d8cUbDbPi9FOl#{E%cMlnxNO-(aHP&dK<-fC^ohK0)%M zy!`K}`^*ZjqLLkh)yawe(pL|>PpG&dS=Ge2g@up54k4->49fG+K@m^2 zBV#T%zR_{-8XI$L2?)2v;=&>$kxWeZgF|9wv=(I~!fqO~&`_X&LK`$%T@4x-vFB3P2wd#{OYQ20@+RZ@HrD8dgDrts*w+*% zXJ)2BN@4~`!&SjXJMA4PV(IDTl=WdZp8%{ZRZVbiE}~?#WV*mRa@}-R zN~Uz`nOV{Hb*1fT^xGa0)n`ATcK%$u{Mn_wtfI1*X+f?&+NA94W4l<*!re3xUOv;L zoVhQ9fhXgNnw{&fhQ!&^p&9OAF&^nrQK6im%I~Une=oDu=jUhM?-x@tN6)V)xN~aL zuZ2gW6CM>;Rl(&{afI)#XsYr-FA>6hwsmE7v0$z4`qLwnR+5mICZ!?9@qBT@{+NYF zl1s{Wgj7Z3%<_({wssD@ielAYFfdpYzkFdRD?3qFX9w(ns`&CMiXHK2R2tjCupM{F z0C}VMq7Pu&17KxS=7z*kviBlu+8qYV+8%vM{LszbYT{U&n{f z6T~yw>aGF?WSv~ytKK%X}%Ja@30R~>Y4F;-JUz`9MiUt*S#}lI#{%f!Z;f_!Pv(Vhb zQ!nn-73O)w@G7~pG<2XMMg~)$a3L%>*7m$$!gS;Yf~>BTm@G~(Oosp8xT>nFOZ)$t z8(6Z(y1N6ypFWW1JvFbPKTP;HKGKc8w+UxF5G5r|2@H6W6o-R>S|%gUiwYmYitl=* z_+Bx)0Es`gO-M}*AmSs5*D}O%YK6Hh4u7I1hsX(^c758}8VE>+hX%4KZD^?FkK~^s z!&iyp7hgWAy3&(YRzk@rpsdi-A`P#5|oULf_U%?M>o|>`tc%WW;bpI%w{ zUnU2(pYH(Ngp5H!PBt=1z?(BZ#~0=1#`H;fzJFx#Qn(RUkw%z@kbc#PI4`WtAY#!w zb^Vz!ZEp|Lw#nYUg)Fr%%pdr=B8xsydEeP@t=QDl5S8tgHW7F{`jghdlFWVUu!RGg zH0=)3nDcWIS-H52ZkW5drKNzmgN=Vj)w@7~WM+OKBV7ZiToC(~O)m>QhU1lGk&XU5 z1T-cxHZ^K`WYeRCc_M>sMff##2R;#%nV{>t#jCTswcoyr&LG<-tQZ?exNTb@)PiC^ zF3G1ZaWbikifz7SiJPq@rXh%IA8MK=VoKW2|I9oy!_hwwQ}0?9`25J_{8t%upHShq zkx*}FmP0QqbGK3_akdvb@oSlZS=d85ZEs0+SIKwktg0&a%*;q0=MQLkXLz_ws4AL2 zENyKm>MihD2&AZK|3&CIj37=7WO}&>*WCMi4>)*u9*>PTU-ovU{a*O{PELO3 z#&^%0tjffOldf%Vmfoz_`*?D4>QV4zGS<8n^ZzP-l!>XSHS+tw=U!o|=uEEi{A_FB z9bQnNe|*b^$C2|J^ZisprJjsRnY3H$Ql~Ktou(O^;6isS@$T_@UYKTkTmw72%bs|h z?;}AhQHFvy0(kSW`Y)>t#DEl+0(FQiF|ojjH>bj|Goqky5eT+KbADv>P3@w4x}zOf zpstrLzoQ5PX)XYg?#Rnsz3R)6318|S8_tdl?K!>E7K~ptnqxG zClTMecqo{*Hb6#u3>o{ytO^D{wUjuXDlHy8Fe+ywvFtT~zdsO?G7|y?l{Kl-S{dqE5RJ%AvQ3qJ9~5 zZtPuY^^J_Zvs~IX21ZvRcM~ef7KzfH?Zz4iZYj1Xh;s;b;8@6!;Q#sXM}JFlPGeYs z%gXcK7`L*LvB^Hh=yC^fYYT4Ly0At&csB}X5M$kFnf`M7TvU9yk-?-5_f)E71qCF~$gx=a9iM2Cc~pHT@KD){*kBMtbN zm?Vx&xNTmDV-WHo#*jgwk+2SvZXltP2!gT#lY9I7PC>+=9x%3;d2okZTsX3qy!rD> z9owF36oaGcMf(?qd(99FONC_h-PTnx#TFGg?N^vdv(tzg<8hV^nfXE&zJvsIA5-J+ z^PE3^z%A7*i8ZkV_Jd!P7q#ayjf4G@MPiL zcJ^`4=aeQo&P8E;QW4~0yK!Z@U>}20ARwmNE;E+d|F}?-tpW-nMg%HXUF2o051{{dT~5G7SEASoh3OJ3{h`W?us;jB74nOS;) zJmT+7#*m>;J3n)!9FJx6<7dSrBw$!5<&0jo@!H2ln>}Q6pLV^%y6hFz8i^2T>E|0S zRAhjPsyTqyg@oYaAyWoKbUiCftTfK=>?!Ug$_;w%B&tMSmN?C!(emetmke5b6T*=c z@nQ@L@;en=kT6=Hmp%#A7s4(HdQtyeg(o2@%D`qJ4~Ue^cyp-X{OGg8Rc>uXnXEUdDqXfta+K?(}5!J!!W9A2ChS&7Sg zZmYsVar8maOX( zRQSCIz@t)A(-*laOSRL5_VyB)n2s6!$bEe$w^_p(3ZF>kP_tZ{H5o?aVJyS}c*h zTX0BxAmoy*7$BE3^ii2KY$4USxpAI9^Jgl9fnj~z5Yg$lXG28$GD4Z=L&|1Jk{lh) zsnd4tURG|CpjJ9LdQ{y7r0R+~&GtdIe>x08LkD*r_CLjgvbC&%K@R`ZdExAu0CoG9 zv$TPzF7)DAvNXegxkQ3K`nr1UyL(v<3EBU=Hv17hUt+k-Ty5nSDs(8W_MWNx(Gawr zbSATfm;lh>5&-_?fFk$leopCfM(b0=ntj@rbziMmA|5gZh8*YTn?*TO(<~r3rcX1t zEfJTBd*?$}qkxI|4|FBurGj=n9{-C1$KAZ(59Q-I?NX4+e~Rp!)%v%$?X0Gf3GwqE z^nKkN1q!8Gj_pKDvF;^}!ah*mjHGA@(r9UEjm>LlT>fI4l72m}v0ZJHTc|RiBZ-p& z06JnGzYgs~!qt$YDy&RC^TC;<%Rk;{BmMosU<%iDKV75ighcVb^kb1-Kx%Ge=)FIw zUzgg?f1{wm18zSEcx~g=HRi{b>v4BN(mp}P?pthE+BAN?`V}Ih@$ED&zA%<5qjJvC70GH708X6=u|m?-j|5dU_e} z@nyhF4fZ<#h6*(en7qJOPW6us|3ci+MiU;~LEnDfP$<6z4(yTPG1=W0k>M!FTP=l9 zy}4x;oA`i+nx@Ja+;{KrPmfGZOuj}R+X|MKZI&lpoR`6UM_MM>FDni8yq@vN%w$zA z@9ZCnQ_;zg1T^MAVK!jE0>LLReD<}v_%+#2Yz4yqu(DGC9_U}f9LzzMx%j(@a+3e^ zmmmMRsx}%zms%ns%OTE`DT%*?dGrFC_;Xy}j4Na^63Rb}j@&^|2`u`SwKW==|YdJ?c% zxSBRg8P|#@<*kpzO^kF@U5bn&JbfZq^?yIEt=mYOs%3a!;@S}CLW1T$HW@NyV`NPK zK?=*w^lkf>sc)r2lh1d00X`sNYOyyF)o+wOPUui{v1BTiK7q8dVgfE)#6%}umNYjb z<>tnFaj|{xQ%V2nv@n;wXr$He#8ZL{KD17fv7`@>upG)5vkUr+FPIC&zx}$&d5s zMwSMriT}qP`-Pq*3q5pz-bY zLuKp*BK+p&CUuG|5h~xz3=}jJnxRAd>HLZN*G0MH_5Ts1XK}qp8bXH;o;}`>i=pyk3G)9L+{_XDs>OBFmFJYLjShLd%s^#S1>%PiVoS^+D(fA<0C9O zsQa_c?VGku4b}8b-hR#>I4c=D+PcCso<8~Z(e`VXDh<0Fi-VZ24zr!bw#2 zFwQ&2ll7^mY*_h^LN*Ie!aB>W|Nd17^KEV}I>2sHp;Lx=uBQa2?eBAs_8#NmiIXT7rVuI_4hH+B3 z>^Q&vir?Iv&9QZII==Fo#iTj+?UVRGt-h}Ab+^5d4mExkSA*}@(mYNUD^<9oh05*Y zW!r!M+NOhX>dEP%4(CcAXwZ#TuXQSXEpgE%@?_u{yFffd9FXae?@^)N);l{-3$2 zipsw0wDnei8Tq3WJ#Je4gSPxW~ie0}@P&1-G;71bpvNJ74%tosht@wnjG zIFtgw8Q;5iJl;D97=?l*-=l4pTVjifWB_LS^0~Dyc})<;dsQMc6#lzzdf;O>>fT^R zIF|9)-8#515wGNmc55;6R0uMs9rt+dkwGvHE&lQ~j2uLsLWf1(V?<=IYH}y5H^)!`vmwnp+nOP(KZGtqYs& zAf9%xMGX$tx2!#nXIYw^{UP3wkTPvp)oFJpG&kp|(AAhKQ4lhHP^XUi!Ey~@+@8)i z{P}9AAT{LNWM64IR2(F)YhhIE!nap5LPmcEU1hOYCBo@YW$DVEf-|QtS*5YH$yK3pt?qVB17lzN;Fml>NS$m7ATJr{r_@FrUaotktf#?0t6zzy0%9 zM2};ay4K=Yt^kSWgL$5ICFjFN(Af^iX(di7hJkIW@aU+%^UIT`=WdEtQG2`ILe(0{ z5AOzqC%KIl;mYo_w*+rvgZIcOpv%p-2iIm-4&weeTvY z18<7qH{+a0ecnjEo zSzzDMARHnb!T;|sA#mbRWpR0fn?pPxtQo_4-A|(^T~pQEOO|6qlr}9CYqGl<&T{w% zUUdDR=MQFGLlg`QsGgT20qUB(yMJfqF8i?@K!ZSl?eD)S6Iq?JtLsd0ofo0X`t<7R z2ucE!4NXXo{Fe(_g7}1lX;Xq%BY`j^R*u|ex#9Y*yu0T#%})mmUDs$U=6(IawijNn zM|cKR&I#T1DpSHlMbio+q)LZCTP-w7^llqyF9*>cwAb9(*Q!_-NSgIy2o~>9)By^hU|2)P7 ziBedo%!)r*?VPo09y^1E;@Ncuk_I{ZXF1^&UgFE7MY?rG`Qh^#1;KyAR9YlA2plM1 zA6|?Y9&m#M4JYPDW>Xdb9-^t1Co~9Wl{;py)epcKpba51-##PdKbPdh9~J2dYDSF;-Mm4$qB*naYSIQsNT3kq1^?9mJHkk5F16BdY_26M7ixgk)h^NyqR0R+o<(@_!L` zk*(V<-Kgn`F{$5qHpRuKat6p2Z|!Bx;S>BY>lGNssWv#@{At~|lUVKDyu9X`GLGyMnFy2NN?3f`Qg%tJMO z7Cw|AZ8lR=gWqmim5>& zDEh=*8-nUB60m>pK zK6xu|=-7Y=j|psUA1D)(10wwWUu7-;{i{}8RmxP57lP&VD~CH!ko+rbS4LeB?WJ1Z zxqH~$`u7hMFq63gVgj>7va(Xs&_Lyd_1fYT7sGS=^5#S$QTFwLvg0RF zi@i6X=K_^DGe}ZRK{gT*7;G}wcC-0;f(9k2l#zW9i{N(kY2L^N&WSkjga%gj7(1px z`5Hk8+;DK6O?dnZF*sklOnJC%QBCljRcO_eY0)q)HiEtmPl@+jmZN3!P=HT`-lC#~ z1?**>P$)z~IaAatz)Acg`iMk7qP}qc_s!lA5kp@NXX2$Z z0i%k2jWdL+{$NoS;sgxwwxy2c(Y=YlPsCkM*8b>-O(`jFkwT^yaf_TEiYecAW!r>^ zetovKE|}QeBHHGc#j%{!_PA1@)cW-7(zW^*YjZOIDSdFg2*0t#BjJFwFCNt-Sop}l zDkeIx0I8oG{lTTZXB~(9)s0x#*-`|35jdb;+a+~)Pu`yQLR3P+v2y;_s5$Ox%3o30 zuK%=u`W%Es!$k*OWe`Z|$UYyAJYWRJYm+2*6gccgtX0A6%HNM__ z^%gfSLph6c+?QCTYgW?b;9*E8)ZSgwr<-r2XlY(8TfP%R ztvcx*RqpUWZy^)6@zVGX-3QH&eQEC<2p=ez>&uzvc?CJ&iYjl}%aoh>OupP`g9}8Z z{o7V%L#Xfis{?R=&ODdCWJ-E7Dj`nTemn9>rK+0~ty1Ha5-BoRNG|ABI1 zA}tIX={EG=E|O|qv%xzX!QDpqlEl=e03{&}r&YTMaS68?CsPzhDrMNuL5FZYB$%nF zmJgROpn@xljCdg~A(fOE-!t^yhMGQ_jFK{e>8Em?vpJ@i7|X9ko0h9deNG3#@i|@r z^NOt3^wcZL(6F&x{>%#2yE zZAPaBrVnDzy)(#aCLvZrSnG3+qfn{-{H0)89&4ASlVnZMEaKc8b9PiiqVOjTS zs6gVNLa)?f-Ind>*M;_<*qt7DwZDgv`R#gr6U}DR{7qp=QAtLUoE83IcYj(!c6Nx! zDdvCseu0RI4ajH0rWv*+pZ$z7`NPlF+Nzj6$?$agr8!@dDk-^W_uoU>eBZcX z(jVT_Gu1jhHsX4opYl1juYvO)Fwdo_sj>=-_1Oh{rK`Hn7JAx*QddwY(xun;??XBa zYgTiXfXK@QG6^DYy0Ej)c3^SGscU?cTe2{tCHKzBn*c%zF_iEKDIgyPoJC zMBf%>J%{RX*AwG9c^?SVU7{Rmg5`*uR-Sw5%rr27Hn;dC;g>r6|Hx3Gr*jygXLVsY zIdc6b)IXhsTK-Jt6BFwE58Tlw+s}Fm^xDixXhKi%6jD{C`DDVL4~U9+e!&+Pv++a! zR^m;Kw5XrdQL?*tt%r=1FNP_Sz^)BOuc;rX*AY72)1UR?5xiccVvN~nTu6gyiz7NzKUYMAqLPF8txHrgj$iBFI1_gIY_+op5dh^xl z?AR}}V~hJmBp;GHghU*IWD>a2gX|^;DRi32@Yt+Nr?)D(GRbgSo`}|YqLA0GL*AeM zi<~%`rTe1;cU70335NkW40W_yRL4qZ=CYu;;ag3VAfv@2d{gwEOrbG-@8typl=$J%}qc_9HbN9Tk&O-}N;+m;GP65Zfk#X%Q8?px zbEvW7%riDN2K3FB2eHKC-u%cd`aWu^U+aJ7+Q>{Dyb7BgU!oEHPK(ng=`~?-Io3ub z6fj^X?CkftLV$}oUP%d+tQS8}+W*V#lfE&ItnY_>sz%SqP0biv@7>%z5M^1re7k)y ztgUamd+#I=6hu5esc6cK$DASm*EMT+EK0@DFPB29Z z3pDPBJGV~P&NI1@07LXB->>Wbz~+$blTNrhx-2*SfG;0Xq;Oy+n%1RN)3Wa?IX24e zdQSQVm$6~n*>~XSiAk8UR{K3T;Oq3hE6^ zBQHDZuBu8P4e1}{;xBMZbXtSgE&gdEOxEdZbv@Z2Y)saB&mEp5%v;jNNW;e&VcCKa z=}d+hxZ)i^Aaa}#jGpwl?b8*ymh857aq|5jEECI#s{dES>E(-m4DUHmV%9*-N&AWz z6~4;*2wfb1yg@_>%8sI|XRZ{X0AV|aUp9lBXmUW^@*~m0OA1P`Eo`kGZ!aWaZ#VU2 z^<6;mgp`*TTv^$M>q^VE2fT>7+~u^4sX+2!u0cS!g9*u}6ym1h-nI|l8{V`=$DkFc zPu3gv(Pb+VZaSiCXhLvsBsDdgDVP};h-lH<@rhPoWn7kQ-T#3YZ3U)oog)*IN@;bR zIC^4QkCnL*qc|yB(qSe+WKlGW5*BFX6yE-x>G zq!kc<=|l`|#NzZ$rH?9`ShK3AtBaGO8=3V-rz0*@!KwFwTM{U4-Q`3INh~g=wB_W} z(b2iS6Ed@+nd}t>g6YxYW1@qDtQITI!a3`V?Ck!dn*w>c!a0lWCS8<#s%Y&@Prc#~ zByoVjHaw!Td2l55*=vBE>3dnDs&=|ZZEZn5hAVGy1mgFrKz*5<)+j*qL4cF`Y-P0* zq4ic=M)uI?YES;ReRKclLn0{I(0BPnP$RH6vlq+IpT#06c*0om zbO&K_k(O9(MA?yQ26M5R?UDM7Qp`;s?dKv)RdK`kiwA-wt(8sRm4ir;#>UA&T_C?rH|arUAH^R zE0?sfMk4);p}~vP_r_3vn#4u%n$X42HUj@`?+K4rtb44Mf zaB^>EX>4U6ba`-PAZ2)IW&i+q+O54?lI%E=W&6)j)DVa_F&yGSk)FXF{#^@pA~Gwp zy1PoG^JEp%YEKSE0BzH(_#?X}+gFZbNz%Qw&c`(HnQ zhdZCY&;R0IzYG8Q=hxrAi2Nw=HU0jzy?K{5<}C9`c_H_5J&%_NV>xt&aHnI{&=z+{&MSQahLa`y&4P_0K=Zja6EO zSEU$t3h6$7KfgOj{u9#6KmHxl!|Pn=m*0fzeEI8i_-Szbt-y|NK1t%UaeyYs5GIi8aBI9T#@-d6e3_^0rFJAXQVp8LHgo3rkD5B|*1Lu6OJE99`k z8@{m5*BK_anB$I(uQ5(G%AY-{#U7{old^xp7hCFSrHB2SabIj-PVw)13FmYB`Men( zK6wRR8Uq&#yybuU=lVbW@_+K@`o8HBh5Pw?t+=n~f^!@0oPYBwHY9w1_N|-+{_D@5 z?Z5xYelS&bu$*Onc)<4_ze|h~{$X3`>~rFEg|9!a2v=KwF2EA;*@c_I1#-A+NF~&8 zw-{RptmDH5z1(?BISzIploA&=8FNZCUM=D>d^YcC;k-7MSff7%o7jkwYHI9FPcNI5 zbHRREez2jpq>@W1wY2hFrI)v+nro@GwkpWIEw$WAtF5)C_4YpL$xnIe)1K$)&)Z{9 zU|{LBxBm3r-#1<_AM|pqm)F1iWWe%RWVzWkN1e(ig{{=I+i+Miwhw?F@bT?>D9EuNk7b?xt6 z$u_VYs5^iH2YT($12hMw}< zS1Dhdt!{Sg``W{Ee|LR*TVS}Y1{_O1ssH{r@g%Z9TQt$({5=3?xpM(elb5RV_}xhJ4$`91YSI` zLn2b-f-%oa^r>fOOAYJkm_QBXSuyWc*sWeCmR#4%C)^!N##7$HEH;UFCi7vvqsJbv%jX4x{H5`tEaK^LV!5 zCmj3P1l4!x=sdjPWR9;5z3nQMcfrqQHJZH@P+&#JlQGe+6t6k4LTqSoQ?<{*0>2&m zo^8iCSl-E-+I91wY*c-78>P)wxJ69;d*J~uUwUtw>+Z##B%X8^miz9ru{0pa!cr3; zIxe33+<&aZD139bJeK<#6aIvSq!=)d_-%j%+>8%i+{P#1U=a`W`p!>%uW^eb&&E#) zef{h2=xaeH`K;%wdBstlxv`j(KAs6*D}XC_3w_P`z2CM$w2eWIA?4v|1DnE!0JZZ0 z4#KK=)S5q>W%nAfh}5_vOqo3f7E;(?vFjK2jrU{e37f=V$_ExaIbkOG)6>{R*R;$Y z^6mxp6+R8?BglX?;a+7XAGK6iE%AK=(y~9v3q!E%TCJ;;eFu#Jw_NEtukc<-^{KP7FPmWL{$-!lLpLRVZ9`OyO*1^Z39 zGt4XY7GFYEVLt>zY&&=h*yM84uend)gM!Tbd)o>uK_>#{X9w8zSS7`|<^~ghNl<(C z#HZ}E8Vh^_L;wr1zY_U#C*rJcfA@(I?>^XZC?h_*`vPpS&jnA!mDnbXtH$L5?(_vB z@rA4P1W0v*`wN^Fb_6)?p+7hVv>lHDRs$3PFbyCYF>@OKdb(?!Rfh6x_)*~g-i9v; zFek?AJ$i5zAsF8bC>K@J+_$z$+0R@Cg~*a_;x6u_vWqd#=X!>?FCRXw#GU`k_edf zA_UFVcs(crf0%iBQ9+Fu&qhHo2CE3-`g5ch*M;o?k54oT5c>n_;l1{1xYaYcmv4eY zy>dzHlQrplIM^6uMmrU3y#QAL@P>f^rSR^dB#sbHw(bJv z#x1iM(2fVDw|BsD-dw(Z_K%3bs-@5&qg$aGe;?W#dnG=i--88WM`j&?08@z~ zz*;Y8%@i&?<6{$~eZV{+Yk__>r6u6THxw+a!5KzLPlegMx6e2*(9WvneV+&%-U}jw zEQTo)z91uVkw6p%;~z*u#|68uMF>E1z|{Qkc&stJabbKpz~{jG_rgt2&f}YVB%To( zN3_IM?f}_j;o-G$a}iJneew0pI}B})w}+!O{N)=9%;v$d8f+Q%4Uy;3u=qo6Vj}cS zBT;?{&VV8=`rg>3Totklu;%$f2VNcxMv7GZy@2<=Dc9R;l9_ptVi zVt_K$+bBXX3DJO(%Y8Rt$5qdK6cP!mkRh^&AOwcB4O|CBVbsb8u#yiYIA7={qAt-` z3kgl!z)2u|NLBU$1~>?xA`mL=BR)PArtntrhHx{6f`f})i*@0rKsmG$x%m4CJcBz& zo)B5K+#2GAG}?DIU_%sIfVFgDL^2IVJiYiFnI+*Coxrl?9&m548fmFQK}bTgK%;`0 zj{pEyco_~3vS0)~%O-k-j3TRe7GR|S3vkZxU}pn6nK12Ff+ZVz`Zr-KfC&(JqxMi* zXpv73#J_U6?w6?iyblJCW&l#gejnC>n|vWZ1$<}AAdQfIL@k;R%;^Ljewp_K!#daQ z;ez>YVio*53o#Ra2V1$##iiY6_;AI)p&j=(;V1+Nm~D#hb7$z(=Ht0^xOmhmd-#ht z;SdO8{N)8v14{={C7kuZ&yW&j-r?XhYW1Bn!2g~=Y$ehnsPLsE%S8?bf*R|Elzr!d zNq=lU8{8zHyH0#(4Z=APj*1(mupkUj`Fs%x@ZjEpvTu$tBSN79`mJJ~fJ$zJJn$eq z=wyUhLmFX<4e3lYhDxkMv98@7+)hdgjw18X?f1={vBxSF5CggUPR*$hE5Y!AJwUTi z_52%<{@kVYcx9w(G)66K1MS}78 zF2Y*$R`cuMs58L3^wD^Bh&xL)_6NrTJSNJf-zPr+ljc!lmGcS)<15$1nHso{s3e5J zi3p8xn_H=Bs?f#71+DdLS)Mv#yUJpSU7aFfpS50q~=B;rXgn+QE_ z%3@RzA@<{@0D26a5FU|N>pg;JgJAc2#Lo?p`~cg97*!b)!vKMeIA#&yv`+#4z&nrt z=)*9v2=*SLvbjrZD7k;~sCP+g56dMaqe?>Imco7Y44OkD;cVbuU+AKc^iUiOu)(|8 zX5up81GGhlVh)0|A`lWTmFp&kkXeL8Vm$U*vFXlkKJu}6c#P~CtY47Vo&&y?31$H^ zU^xs)2QeN=A&d=y7J&sK3p{myzzSL&a)O(8ar$l$xPhpCkp3*^meY2{5@9zH#8894 zNR_6%d`Nj=JA&DVeuP5ylV|}f2nkVo{UHZ1wnM)0Vfbn@c}ff)5TA=XKv2PO1}6D} zu=x@2-5VA!{n3JE3G)NS5q}SfM1nlehYkz?7+w>QSuDda1Ju0ZV&;_4i$KS>i36qq z;N7svTKNo>qm>xUt{h_AI+PXGd;KBCP!eJ_?|K6G4Y#|IMlTWU%|zfvu*E4^A~+3i z4@8SBAMWfpu1i3=G8k@L0g8!8!wlmgqQyM$3-o??OsgMw2N(gQMC%Wr@4(11_F9Q! zKQ2Ne?zY{NQ>3&2hK!*VS zy{KeX5)c+sa8W>OqlPer!gDXvo_~@L@%rnVfB6cwyjx~PkWt@pFBy)G98E}JNz=Mn zC*m&miy5u!t&*XHW*-pU4ZXsJ*qZ8sz+X?Qqhh3uEi{FTyu?2G%bO4xgy!*N%>POl zQTC-QM~*D>MA)jr6Z`*wE(ifadKZ06g%Yab8e> zup5lY;YbjaC2TjaZ_kbT<--V=Rd4wP`E+E>)z|^-DzYPZgX}dm)&;!h3Q$X!n>Mp% zRwEJF3Bf*oj~I_B$n^19V_z6Wf}SkA5ROi)0y{xVRMB``%;Gc0_r3Gqq<)xXMg8FI z7GK~bnCrE`o`xZ?xZ}=dE0K8J6e=taV{P4!0K%=3J**$}6Xa_1UJK+D4298gL4*oF zgA*%73Ai7eY~F{pb1{ITn$lv^r+fsfJJp*T&x zB8}hb@}aH?3?UE8{*8e$)XrYeHzAYY1UmW?;IQOBh`0c8hK_(olHt3zBz zk`2=Z!|}NZ0%$#4%QO$Pus+Fx7vNLAx-EBKwN2Q%9PYyl2@-Gv)Wpj!ZGsecINphM z9`^R5yGyz|3#=Y9VaWsAS1<5lTD+Se<6&;8z*AtWoqaaD8A5#|{s_7*hr?6XZNZJj zw@R+20yLq1;5_@dZ@bn4RxPKbm$;QId=ayk z>j+)TzHdSQa$xuFR3Qz`Y=V&X;$j&if)a5@fH53fEHpGniR}n?>?nM~+dCw=g|`lq z;sZE=%B-!5#E@R@4HSC6CtSnw@KNmd3i*bK5qmOk0R4xH$`!k*G9nTJ95&o4Zp+q& zO!#;b93QxQorG$!I*8AsI=&;ufdk8J0XZB^V*N>GDJ}VJ zdA~+X#e_GURuwhMl_4C&ygH^OQL9E!Bd|UqC=3bMz1p*P)79~0x&X;A=c$JLqZo4i zUmfk=zOp{R%Zpy)^DxPdrN!@xubntZYDtKi^#$84MxfEzDOedimk>fgha|((Zoumy z_Q22#LpwJ3+xo7I74Tm6fu*qD$1WgLk7*bSw`QXzi^6h$83S4k_=S{rWx|Jkf=jaS zl_;Y7gr`6XAm(G*O|fc0&VmvTZm`U(5{N@a{9}f!86t@r{p=i&3p{UquT(oB8g+)% zfrJ*V3wo_uyw}GJ#~3Lbg|G(z%3)5D#cC}KbA30DGwKE5f1n7_0(#|vKI|NTM~rQl zCZdaLB;F2lvJ8K+s~dg)R=~z=3%V7C2J_!0SsKL3!f`jFMkte(#t&_6=tTp6V_4^9 zyKu@+_02OPj(WEM39z3)kRf9icqSmt^F4E?WU(D+F>t z&0Zh2W0wn=0G~HoUGQ~i263E?_)scu{rHipRLRd4!XeRL$T9Yb7@A(;z#c!0;d(7~ zf)}@C&cT+zmEd&vC4S7?rgc`y^^xJkWIUT#XsOF|(gfZOgTb~TR0ndlr4ed|h`}`w z=((_ogl}G0t(T$=stV^G%~~053Qw3=CwvqF-Y-}=3K0;jLU;)9kl_kix`Fb%#jI8R zC3;z0G4lZp&_C^@eS^t7f(0%D$zbs?K8P>kAjC4zJ+mb!D12Ah_6i4V6$}y32X_$4 zu^@GqJvWBVe7!>kmq+ec$u3%^nY~xd4`E9d8n*d$czIy?e~krj_W^lY_y#|0eMJ_V zAIJ(H%jiaED5FLzPsbakr8M5l`xk(2yTg=ymjOY5ln{9Bxf|D;bo@VyhFpLjSjc8e zVKg5A3mR4Xh}hN-Y8dZddTPs`+dPRrW#a``CltSMzivvEwIgzyAw=A7^f;7}NFhVV z;2}-Ona9fDMh&L?yC|xf3t6yHF3RNgM6cOD(V!^sc|!U4giStSseQcDo>J~6QrfAO z1>!;8&y|Q~!@QtbRtNw#LA)pM+!kdDZ%^O-47d|&P|Lt()S1H1BVFwF<1aE>r-Km}t! zH9{Dcvk>p^$;Xfs2`zE%QBGGS*5tv|NFMKg=|4f4xWHS*{sK%!^> zD_AO&s@Qsff#5q^`Panb8Ow*(v3yp)XulQs3A00(8pa!1gpHinpXDW%G#2!G;JOeh z0#K0AW1@uPse@FT6gKaH?FM89YxbB|Ikl^AUyxF$9XAMv2!w{hH3~LSUkiW)aHtU` zj0+LTtqp8KTSgWE7q1msWK0GtFO#xqD%Vjb$c~8_Dpm^?0U#qiV0z~IfJ3O#u8{6& z8`M)wNgD0sIQ=r;09my^;6deOg7>N5E0;3>K!n!^qDguT7vcxTF3okqLLzG9ctpSK z0A4o_SiYtHF2g(}Y&M$Oj8*`ka}cxj*bIZJo|rbF@_SB!3UbX8rhE~! zwT&t)9#2V#lgDE%{FYs^IB7;QXKC*IMAm6ek2lmWXeY0|86AFvYufq|Yy~==(LR_7 zN;491P6{U=E_byktO5s{p>7-6YMAd9z3blXidLGiv)BB2XzAAoVFk#z$WFzc7XbmV zMp>q5m6(lXE5m6h`heMK*I3j?U>rzT$Rdvh%NY_B`1(ZDR5>p(u=$b|k&r~eL`ZfLE{=^=U?c4dg9;zKsSmq7-Gg9mcM=Bg2%!BYG}a6@ zlcus=C-~B18Dc&yV_w|<4T)$*HM4c&u_4s?68sRN0w*S>B9QQgYU4{Gl341%2|6s? z1bxsIBP0b@OHALGA-v-0tmTKk`If~@bNQ@4e{az_MzEiIB2q?T2m(mgNj?wZVFR@& z;1j~ju)xJ8;AKXA1O!WqVt5knZE-P4_26U!<|C=9R)TO#`L%L=zT6sN9WT0VO~!5z z+EDY&;@}SrvO&P-X^1tm!}C_}#9)8d8w?UUa9>)C^`MFlym-$GE@ zZ3}0qCQ3`ms{PpzrEunHQ5=eMq4SgK2asYF#ODZ7+nd+zimdkB!JA;kRu=3R%fZqj zG!Ok~A(EYKHC{HWS@dIv*NF>o?g7P;xG#%Z#Fkwf;<0NPAh}hZ`}ZJ^YZ&yNbrDm! zE;s|ofYQO#sD^1?75zaNHSM2=)i+Q*o7xRdB;l!e8?Gz-<7+mXekM{PcWXcfdkd@) z#De}qkt26u$B3=4-%0gB8qGGO-R-i3P|uN{id zFp~N3i~_s-IzKMXEoX-;>UDbfBM*m-hmxOUGJ~%_g#e3S_fU}5gaRuJZYXcj5rk<3 zP!VP92NcVJR5k)Uf>7vmX5EOYm|6L=Y4cji{uAU%eUtE-yN1-$1WIAtgGGZ9v3Gn_ zH>rR@Lr(1Qu-bs)eOcSnS8M0^d!8W3*JH*V;kZ79Z7u+h?a8vmI1XiA;NZ=31NJ8; zaTh}46@j!$tbR@_k*xcqrm%8!Bh(ha+e8Cm)3B*2#im=|KcV!D_pesk3j})F+12;X zTde^!!MZ>}yDb(Be-v{U@4}+-M_|)&os$Co*oE8b=1Gj7Mk!>RU(Klu%kt}SqRgOW z$*Qn$AM!+|ln*t<7#zw#SM-3h#(nMC?Jk_r3t$L@Y=uEhv^j<#40)+kkS+29M8sE3}?xqu)w*?=5l$}h#7e+!zmi9~GoPNgv z4Kx3>95)<)UO(RNx(obRi2BuvSS6zVGqn&F{nt8JiqkpmUo$KxzoN&Qkh!X}ScE80 z75s&x4CEk2f-=yQVWC7h?hBDRZu65wJZMITm7z43iZSmAiGcXyn8gVxH)}l3SG=dy z4~rqPCNX^FREf!bC8q+ol?)`=4L?ItChY`_*x+v24t4}X$9CV16!40;F5IYp>o?vo z&Y;YhgRydw;sY1&*fFc0Y(NP%+uMr&IZgmJAR%FmBeG)YfjfNL#vZOdmxZP8wNf*! zA2p&>CIIyBGT_=^vPuqWwq%~*Plu)xN|rKNo)6Tzceg=k+fu5v%=oJ|@y_p&9;2ow zd>%hC&51XaV%PR9k8~cX5q}`~hN~g>rmon>W{dQ8S_6a1N;$M7Tl*GCBvi<<2Ykg$ zA#09!KYg6bl<+p&@>;SD$K0yyb44tn6u5M5^hIZ zM73cnj%gq8^BaWK7eJZdMhwGD`gVQ^{{A_Hg?`ccnr#snnd5sb71&*aZhG4>uIl`? zliEMk%*{nWJe=PD`ve99G;-2xLAFbFq?4q>XwM)oz*{cx1Jd=KHjXbAAHlwUbi_Cb zb)Ma5*h6-W-Ebk_=n9& zus{cMxN)AZ|MH{HciFl6pb9o9`D;YGfw6pk-JL1=2z&uUL=>d|gIQkKB^(uAuwJ`& zJ1#2ZAia<)E#NnJhOP#0fW9GHmZ{BEEz7^e|FvCIB*bJ{*(&&TWDgwwMvd@BVzRqn z&d+&^*H#R423T7GRW_Z~A*A2-zraH;ySm4HYJKQJ$al5$Pv{$Gs3ULG1E$Oax_iUa z4&faO$tx1FyEF-SaeNUTbVDI-w6FzGv(mPv*yI=cyRFG!@8(P3X-*B8v6yc;UHXnx zgYv-(1u27NCW12`V8!MLFQWlu(dnPun=KQlm|+rjo&HqZPD%i?&NCs``)N?sU+t$% ztHVWD1=Sfmdg1hK+Njo$92T*METSP1z=aaOX7m4>;?)4-gxYTwJ8@Vd=srSXK%61n zxbEUsenpk@H^Gk$Mf!|o^k3FY;77xR+im1W>Ib`}9eeyqUtj?~g5W0V;?)4`4S3mr zcRw!=j2O|Q%=GmuI9d1 zuIug(dW?W$w-fhxn%TH>zki(oI$iv11L30(nXn$n3v9vp_Kzry`M}}ZWlQ~g3`ULk z+QE#dSqQ3POI>FNaLj=~0wbMD!cICIbgZY_^ZpiSFy!V!Q4`PW{Tu3I?;wcmLbYS% z#{La<;k5i_yKPEy_JP1LjB%LnHZXk^qV;EbNcEZ9o#&tWw=EsdnIHYN;`5ximh>WJ zoO{#^NdbuR$%X>{+a?ua`?OO+HTW!o!{YlMW z#n*$Zm%u+Z987ewEz?NgY@`LHzr%VKTZX=O=nSL&<&Fk>3?1hd1CM_pJEpm&W?QfG z#e)8a>^SMi(x@5E;BZ2$ zzSV@6^FubhhB`qh?BhnVoi5g4!r1|aYV(_18h-6a*1m(?BIPj+Zg0PuP|CcVQIkeK zHRxMohH$|a@ii=Ya}!o~;YFApk;cRw^xOV$=oZq#H12I%qYVq&@^M4Duwsiqd=*QY z6R8flMhyfl4Gaxkia%`$W+!6GKFNZ`vn}%$U~KlqSkxzw*82j&@B$a;jCl{V10v~h zBBwjkfs;K6e(dDQKzze?xS1C(ANIs$SgPKzuID?A#geJS?FX(N%%V9k17n8_eXMS< z1{!`Di+!@h4-5?EqZs+U!_2He-elrdoQWj3_SJ9|EcnNnA58pP3i;w{M+k(SH z0KpW7FiLz4Q-gfn3Pr>KoF%vBbouINRft0>gyGX04(%Rrxu7OO>mi(=cWek27_MxA zBuZ$4Z4gA%?Bsdnx$FnS;QV+PytylwbFvJ0J2bp z5(cG^6&35y$!Q&!Fqbtuld-Sh5K%gT_EZ2aHp&a57*7ijyzfu@^ndFsF(+6Y+x0?7 zx07RoLf}+HoW?$U_YqH~%K?u&nWh2yPi@UMr17A4=f){PEWFDxSR9N6tcsK#dzX(* z7*00_D;@I%U70txsR?*PDq&?KXDw z5XePL!V6+-PjqY%ZjIQr>~$gb0TtW(Rg6Tkt2QCR^uF7!N4w^go-16$5w{g6)7o{`r0&8zN|O`y$|0 zIE6inju&EIkl9x_aWJ}JK4w0+SPrb$ZxqZTvps+g3GQtBbyd`;U_kx%nZ>gT_`SZ1 zO}(cgk2tao6U!hN5Dy7~k{px?xG`q`HMoU~N0!q%R{ETR`fVefrJS#uNoO}5pJ73Q zd2I_BqEG(Q*Z^2l;c-$nG{%)cWK zazE8SKoH#zir9HE0&ix8))}EZ4Zf9_@HwMu4@t)X9b_&_<8bEtKD94f4||9gdh_1A zWLDf)2z^1z4|Zx}3!ggC>EAZZa>m1l$9_13;;9e={sJ&or%W$CaylKHZO(nGU26`N z!@+|yZR!~U)~QQa+cy1HAu)zDt%XWq%Ilf~r95F9KpKu`J^l`}2&HBCA z5rk}bc7Q>kc~ViTr@77!q~j4YKg1rQ09>ItvJW|dk5~)Ci#yb>zqT0(;or-Hu^|Yh z+8#SYY(KU6o5cgg${++ME=6FvJw}O7QJ-`tmo8`IHxdeWeL-Y9kgT?UCYlxR5wBjr z@{8v~477xFjur8wi8Ijxm&ATAjSfDA*?Ei#pzq)))?DGUQcs&nkDDUJPTiH*`CozV z_4~#*mfNWsM05ci*id3+w_9pJN1(I;!<7JomDUBhH%O)FE;GyRVX-IdmOaEK``_cJ z5$z2CIE`vo{jcq}XgdfM3lp{rCX0ffeRqUccs3NaIuMLQS=mS0hiGTLkR_Nqz;KeC z%Qp1wDLe3`HMZlg0|tV?YUN__r|+4__Sd>6M7%}ihlj=3yu^DZUOm}XONZuCP9>6E z7?G8~LBSd?dkq5CSIkNi1q&vq9Q_@7K-}VoAdS_vfnhnd-j@qVXaGyVS99reT|8@b z-fjFDwb=;V=8+V`k_-xf{r+slUq~Q8{T{iY-fTxXL*aHlq3j5d#fI00>+&?GH@5)< zPP*YdWuH3Y$^4C5!HD;?lQ>V)-6xD=Ho~vp8QL4XV2px@H^*fj~bw2kq8to z=3KCcT%|*OB=FcMfDHG;AfwX;KH^bDHo%GkSmQ_q&00yG>{*RVu+fRXWJ$FRaxBX7SeJ_HB8Omm8*Zo5JyOQs5HGCpJ>x=1a7Vz> zaDGn6Se7cFHC45>3~Z?lXK`epb4}04ffnGbC;_Ccnewc_zC3D9J4c_} z93LHa@B22p0JoTUMbwpF&pR>Y<6&f&Cfo@l z-0yQwI~XRBid%k1#%QP6<8T+xUs)$t3M7N8idGW?idACgNN`?@h&C1j>QFLkL6}zY z^u`1cn3rc2xS0zK2W;Kan|M=jB=GS0P{sW@Inc-YiNhvPyyt;P<@I1OBY!|=yc{HO zmmE6x2(JdSGQqa`u-DJ-=SO<_*y}TjQy{1&T1*14}iY_&H2w=4O@`8qvF|cYlh~vpZcedFBeD1K&=v?ILB3B zZ1ATKuA3iR#X~W^F>sk;+3Cu|i8Z*K(`y-I^B@~+GZGfx?i@lt+41GsLLU94P=cfo zafrB4{5eN7T>vAWm1l$!H;Wq2acMifk%--zbvR{T6RE?qb)G5Zz%?7_z@_pTyGE{` z;VGCpD`307xc=wJ29_X8u~;$~nr$&A0&XOGY_{CKk~mLW5&WYhx4tWQpj2}7>29`S zo-<)`Z=O~OQ$tjq;n?2+U31>nCLC5pZD%p}s;7uF9LKX@pB%{tnr)>xW5Yc6ZBp40 zLueut$rF1#0>jdZjgq#^>~-;pm|eMvUN$F~h^wsT{;Db;ieX#gY7DIS8_QSUE+6>t+{~=U^7uAyQFd}miAI|Z}JxnnpxVon`It-{_eLlkz-cP{x zG|h9K2iLNB(&GR=JB11SaCG@)_l(4GE4!RIsOy}Qg5u7m=C-}Z%Lcaj!bZ4C!!X;a z5AeRI?Q?G@6T7Jj#X=hzl-F{^y^XiWJzZl+x zyb-D#wL}{T0PK5##3SKHa2Wc!onV;yNGz|No+&D4+G%WrV6JkKsUX{wepPWBk~^G; z%+nF8Gd{G4{S)T%Vm+~`#tEsXYi(MzTZg+M1w5)lvr6`7**pwim8(ySa3-F^6`kEf z$iMka27cWEa2uqoU=_llnW7Xbw_%9{L5TjyiE#8fL2D>mp!DNGliU77)CEE7^Asj? zEi89x9@awT(nJeo(J;lbHLnDrz;X$4JnEqt6R1 z1;vV%cb)JB;s00w&rzRNvGa7U-q`hFKV8oL2vKsoMNSO8j`0CIYKQtxyT^fn=XNp7XgPnsaPZ*yCl%4} zQDy6f;XR&I^LkX@QlTiJc*SeFu7!KZ^Vjv-FbN}mu?c`7JDuHU@{+eN`I zB+Xyi^_vzHoz5=A9(3HZ@qXk9!7@QIAbl8(lOg6=JX{jBkUToTdF_1aImA3zm}4;_ zdrHJp$oW0SRd3B%0;^0Qh(%AT@Z=juN014xDOz~)dwOzI3CJ8?h6ta}ZyFd?JFe!j z8Fs}Gma6A8zV_3bDR@{Xu6h@bVz%1q5lu*BEmqCJO}cIls}hYbGjjSuwIhRDU-n4s zKO?bc?t(4BXO=5yD)H0}h&CSe>8V_{v%*lXW=8BB3}b`&&e?dyT1!+_HvVOID4%DU}EPTJ=}^w5o^GWYu=wNF`j(slJ6*Z zazl>)b7#dPb+2ynvZUXrxy_xw(>yVxgIC4*!=fJHrL4|!%)v?^hNqn=i< zbj4K(XOAT9TkGQkWa7!TRqJLr^iji)y-nA+r|Nh?qFWrDMAKE z-s|J_`EU$)t?a$DMn6pUc4y)A5$t2fEaQl{|GPf1aeSMkkuLh5b8`WxkAP zZ;QCypXEjs+~yF!%fN4q??a3?k6{6Rk{MPHQ5z1~Bf&CO(EA;XpXhJT@xZAF>5uWC zn7X`xAWYsGlie%?d@F6H`l|mm0?!HInK}Ul!cw6?JFDT}%pdg&Q6IJu>>{(1P2=U*17!<3<9Pg2k4Y`1PjiEX%lXVeyqA6kPa zO>pDa&@$|1v4F*ea2e;xn{Z=a6Q=qd>BfyLs65QyV_#3s@rxIH#)Akvq%1qLc52lp zak%&()0+U);2`*)zhhG9K$&1-u; zs}u%W&7Iqr=vkef_F#h6(2(~@FiAR$5>|QCbZL3Sj~!M}{Cs)*Bo=|$IpOtHF(I5j z1INlX@f~hl77)+<$eM`vp8mwuJ=wz2sK+B%7XdN4r!?U1c;pvtO&oS(*}ZB9<%uVs zr(TH}HkOv(nO^6d2JRC7=Z-vOs0Qqr&$tcf{wFI;GNKGUaHn~mvl0$1%1xg71HX#) z#@irgG=Otl9yamLWk1qs`|&9A>BuWe$aJ;&!*hyuKT}~i1StMF`{+3d1fVRi6@l%X zi@Wj9?D+;_tD*JPbTU|@fp9t^Sku}ZpL zZRb7*l!e>lQ@97hD@M3~WZrHFR{uSTr6*m0MaBFGR2~9g78NzkuHT;j>3LJU;jT=8;_!x4*6jK00D(*LqkwWLqi~Na&Km7Y-Iod zc$|HaJxIeq9K~N#wW1XVGl)85s7@9{MZ`&~P=pGhR%q41eDn*NG$bi5j)H5!!H>nN zgNw7S4z7YA_yOYP=A`H%CH^ldw21NGxF7HCJ?`ECT&<*NR@)e$>9(1S$AoldRS3PJ z8-w7{ff-4$j5$$Ez;}GzBf!?XD9iFc_vh$Qvz7t`1mao6Fm2)u;;BvBV7yPvD+Ng< zJ|`YE>4L7rbawT98oo$^0~CfD&sB2TB)Km z?#W&l&gv`6Os6@7I2N%45dvgXP(%qfqO|IySV+=-%*Q|A`bBcdZ7y~vC0^@`j zlD0$R=9o^VbtXehJ85uRN^vtxW&$K>DNdMx6Os^!aqQT|B92WG+l;LPTh_5UtYfuW zNqZl^-QUqaG6VIPbkY{Sf4(#C_x;TCKF{|N{^hTpF|}_e;i(A2<2hb?AHj<+1xw>xR94WK#TpPpXJslg#iFFCmTZU=s! zjADXpI9V1XTI(FRLlO}#Bh)pcieXkn3yNUHDd(_G&!gpHv_{sVne!B9Qm9G*#aRTP zQqH4hlLQ@C2xQw(Tvel>1fC0Xv0;uGaW0lDeR)%YS0n#;t_HT4_gT~WLT8^ z+;g)PBW*$r*ilL2IC78#By^FQD*`-+ay7a!V(I=%9`~b5raw(6ts%z_^TsW(~QL zi6|R*Bs;e995zcCU$7Rf5Jxl&3b_>diGD6Dc46skVDi|{`R%{}uO2$YAFGdl{NrrD z>pog<+|JnfH~8y^AHH@-?%MY7zFe`IbX^S*DMWH=iuU#f@Hnw4I#r59y_9AATntG& z$H+wuXK9%H^fJS__4s@iu8d9ay@TK9QI<3_%KD+HEE{shwF)?v9 z;BEKazt8QjM#{^C>nvo);~2RDK354(VS$;8bIi^zQu4dFQVM|LW2IQli6I|tT`o?Y z>EkCqeu@76e*UjIdGaLrOo27mUB|C}^{cA^{my&#(dwnv?IEaS@wWMypH|5&O;RvY z*o&7K%hXZU-S}mdk>MfUeB&s$ed0#aiCLa`=GzPn4e|fgxuGFkt~ToHeN0VFy%#gq zP760hoXjm>VO*)lqU+SJF5>mBqY4{ZxreI3*EuuSOs1)czxm2nFbsoGVX&-3!jFaLfb&z&Qm&l8PC>F(}+Z&Lr;c~4Id0Jq+HD+>z?Jn_U6 zSNV=6JbdQQzKVF_#0tfU6!FCrOQ|eYYaU&$AeSYa*#zeaQ%@ukVP<9qfZe-yBZ?wkua`rI4)Mq%k8t?#VWQC} zkw}Em(NPW_JjmeSAe%RD=Je^)eCbPHqP4Y^4I4Hf%Q7cUoZ#58V^^_tb+r=7WRV*? z{1j)4tnUgTxdi^iDWIBuJhn25bp`9pC33k1YLy|T%`NB%R~h}_2S4D{sZ#(LhQYwV z06TZ?A<S4IgR_ z_V)IYip^1@oJUTWS#D`6v5;`!ibPo5tuQw~!SbSq#Y{WikQ+-j#`k~v5FVnGz~P>J@>|r_x(GYttd7(o)^+&ku62^DNUT^L2!?_w`|vcW=(9;YZa8w} z$Tdb&Q+amn`q&2ww`!M3?WCQFvMK42C=IO zr|4wMmMzzqwY7QJdhag2x_9pf2Df(YTCOBY+!h(5+pkip3L&?Kz%4_q47MsaHggfb zs1O@Xv0-x)|NQv#w6wHbV|dqnxAV(Um5*+_ojt0`@#Dw2bm`Ln3GR!#c5%l852FS= z_zb9(TXD5C5>s8svqpvLDhZFAKrUP)R8W|{5@$B-At+1y`KLZcRdqcd+qjWm4xC38 zWO{phsjKcqd}e^cmN1{V{gYHxwQ%952l&~*z#k2^b?a7qJ|FjgaSvB6S8xyfmgRNp z>8vv-$X$^GeTTs$I7K`5N&?Hp8FE51Q|Cts`#QMy{&tcUFSS~M zh2Oo&9iJZ|m2ohTyo=_>b=YNY}l}YJMOrNFMs*( zNT%aNtV?ul&oYyOu?3mVa-Q^J3E{beubJEK?4c?*PXBKfNefPTJYxjwI}ig-rUy?G zcDXp0bCWVQ5{mr}u}UNCg{F=sl5vxjc!I?ulzrEejbEnGA7;@kGCN;DEG+Spqi4Bp zbrYLzY{B9PlCH>DtunEkK#QkLFc>7C9B1?T4w8Z!U9&P3P;}tVRzs;LwX?ovZM56!Fxrpq)R#m8B96 zr;iI)rtywCQP;1+Whrp{_zS%GriB;p>|^3gnm~<4oiakiVIg`+r(EYHP$QBlRF5qmuo|Nfe85@Gl zMy`}5D3?gnK~L8RHlda+4F=IjAB#&)EEW})%f+pmHc_qQsH<6|VU0j-Z4DJwLl=ig zc-pzHr=1nkMNU;ICbP^}BqEZ6tVSYC>J4OKB6Y7Wq}%R&aG%vtO{xf5!6b)3#?YZ;P&PDD z#WJ#`j5BMplFL&G1X;KOf<>oTs8BHkDrSX>zZOk$vr+(?vj)4kNT+X{$-x;C?g#-- z2qpU#j)rau{vgXaH-^iBD61?j>14AhG+&tMxe6`^7}EwL`DNtNvQD|86P-)p5p9%< zR?=pSPytkr6Tde=(SVg|H*S}c=v@cJ zlS4_`Gb&b}hOW#J^3@O@UBKQdaxsy_bXqBBb|~s(0Fr6^O##wrmEL+8of5?b&>KYD zW(KR%MWt-RqS}y^EH!wzB{Ic)#mkarC7sJrRCP*ak!(^WW&_jdVLG~kW`R%k`cX>; zkG+&e`it$K*>`7K2+3yQtFL5u=%zY6K^s%qG&e?SSRIy_&yJkR%30igK|d3P$U#|d{tJK$D$N;Xj>mXxmW3f`r zOj0GD0m0BY-=D_o6?rF?Ve>~6E}YCz*C=!7l@t@B!`QqIM(0HS3!$fyQzS>jeE zaB^>EX>4U6ba`-PAZ2)IW&i+q+N_;flI*yaUH>_X8UoRgz;Hk`W}1P9ueIPeUstb6 zB{SvC%!nJ|PA7rW?0q_1>wo{Ref`IO{70;{+*dAdecJQf{F7U5vGYy6fB&@e|8VE? z|MSoH=U4pwpMHMz{pS~vA0@t~-(TPU=k=YRm%qQ^ug?hIKmYuye|{6|p9}r@#a|ap zesbiS`Hwfr&*SgsA^*8hTfc9fR^NYmg!ub9{=D$q%Af!C^LthJ^IHFY{o@bv%PP&n z2c;NS3h6%oufID;{uff`KmQ+7<#mCtJ(bk1-;a zGw{+FxR_i0U;erNyI=ml{JHiXKas3w>%(t@qjJq{xO4uWSFs^s|Jk>47Wl6}f42Yr z2f;#A*}-y_x$=Ph{(hJEO8C2MrL)h8*A>40R482U{Br@8h|ezE3@VVr{e)D)6Ye+0 zHw4zPvO%3Yk15BG9SEhw$xX(b(i5*YqB49o?|H*{Z7lJL{utZDMwIlVm%VAJvspP8 z=}&s{Q=aE}AB|jp)0^M&KJWY1x4pflnro>~eQT|)_7+>h z2A1};x7F5K@A2wvNE8p|IU;WzG2jVmGDB~ILsH2TO<4hAXF`xO) zI@|0kTnkIF@+#|D@2abR0<@z)(dprd`pU{oFV^_R~Vw^iF8s3Tc#yWbgOu z>l-h(b&vMc{_v)<*Ql+BQWwiGYGGm0*YX_)yR%v7ws^qFVxvR(4VN#SyylB`ijNTZvqvB>s}#H{Z|K3Qyb~9-Os!+FI9>8tdG`U|CjYM?>22UW=XC z^X002Ei6rnW#yOkxZ^C(DDCE|U)|{~rOmtNE3H!J*md^zS@)V@J@;Q?TC=871J0$Tw7$3Z!K+K>_mAsVu{P{@zw3J2lg7Q;p7EOx zs#DfIC*qwa#-F>NZd2Wb4`X{?UcU++9t-uY_l^B);Tv&J6FmAC@=ojbu%vxR1A%Gy?b8AE2GG^o_~q_Q39?yS?H05*u-`J>23qR=5!+ZVk)L zLZs0V86-aR^?YURz>4h3BIWPJ?WL#mjL2ku_I>SMSKE=7yfuD1MJ_fGt2ntNzO*$x z_v^0Am~h4{G;6>jzJ>cJ;lqOPlZ`B0Vb}VtXFS=Re0hvCM(43#{B-wyyDdC=f9sri zxiYAF|(cp zbcw-YeX~v>&E4mG(02B*zGYo(5q4#KG3WWkfe4~5JX&mZu$bH~Yk|Cs^j0J*@)Q$f z(c5z)3<$~1J(T!eY4)CQL2tpEResF=Y%W+577mz*egQb&wLZ)fl7k81Bk#UHEE@_G z+Y@Tf-xXPn?-?LQJ|&}IQ=wV8AC!;uVXX(-J3x}$+B-VVhE>O&U;=YyU0K;ZFMSTS z3txu94X%YYeltC9e|PCM)L3T5hz0aNKYg{Z@XV@hV6ia+Ed~G6_$Ne#MMB1<3E0q& zh3y{zY+}#jR>Gk>XxhTCBfSk|*UAjJeo2_{;yW<4*z1JFyLAA_!RQIop16-%GCTXQ zg<69aS$~8zg%9b3xM>G!nO{RLK(#Tg-dg0QW9hShW%rJ0kL%eeFAx7=RxrZv)G^ob zyx$s_-2ASMYuJUo3B4tBt$f_?_sj>|fphMwBh?T=q!6`v=0eckjM32mtn~s6(0W#8 zEQI&F(SMCUUSTwCHD6bMc#Js&P@9K+aC#V8@WZFA4B!lw2<*jUJ$D5R0c8gA`vvR~ zh?pBkhWV_F5xJGW@vc_{ct2b19hd=c3PBtlF!CV0_XCUkaH?ay;%wFk<^$^(n4WLH zMYo8;p|D`Jmid4l8n)>TST@XkEaT-bO%Dfh!H!69CfmVd$YY8!?++-csf=H5!v(R6WQ&dh5o!armvyP7ixR_mgh7Yh&8>nQRQf!v|i324vn1?v5Pd|-5x0;khg(h4Eo zxXsPF6crcKfDNmFhm8Bg^kNjcUa$Lh-XAV(G0=|>g~1|G@P))fgK(Qx@EFyPHC1sz za=;7lO$P;nFu|yR#kSJ7OStx{Yh^hhcXMLf@hJ!ka)#m2Z~-Vfju96<@dd03cE2HB z0pA0R2;d-GR=R-t@4}D)2Hr8)cz`7QF?_5zy7@MC8=M%>&Sy?30|xoQ4L|wggOMHl z9p6JmRXOe&1A(e6b?RenHV=f%?{$xF$0T%$nk4LH*=>M6pXI$3@;Q1+{>pxpV{j$_Xaj&1PsG`fKi;_KyeXR zKA6ivY57=0EvK($1U@8H9`jN(?Z_J(4Kyf%Wj|Ge)cUn*0co%bA9sbwVPo8}Tmgz0 zOq4h#qaCONMkL@G+}a1ehDu9~5c-!3TMe$*y zY1_R8$-iZ;!ghl8dSYrk37Pt|?{bc2()wod6cySHf zHwuoQOlUo}UA z+}m%B__|@K6Ep;Hf8Of_li$_y^&{@6I9cLxw?9sRJ;?G6xLfI)kqieR4U%~g0mQuK|W>T?A8Wn zAyorB0CjvT^a51|U!vnj+p%mAu=IZFKjNNQt}rj51Deb&;0s|&3Eu?JLTTDl@dg3Q z!wX>DU_W$JQ`2lYQ6C5Po8IM@nj99&u^J44h0K^8O$?-@Su3Ww}IKYW{G&<@MOFiZdPLn z`AGGILD&IsU^?LzbmQS}6kk9OKL@7jP1MWa$*5BeBP z1jq>X3bT7fCC2>m0N8ho8~8b~;|ZREYZ#IDCV^BhBA*QhWGS(m5H|SLyE?4x6+;-P zY*)|69fMy0mdF><02Bd(Vgd&+0AkZIMOHhfMI18a9Y5q^^S0 z5-iS;7D)g30{S=K$_`*AK-o`)r-v{zcW_5U7KY&MC$Jv7IWB$Ohx3PH7IzN}gD$5j zRswa8f`X&sxFVDWyCjGJY`N+}L@ZwA`QCcH0}`t0;ApZ!QhJ=2bMP+$^Z}R95;hJ& z<0Hbztv)Zj2XdTo8 zoWLv_^07tt*OCD9>|E{(AOk!tf)qi0sA3$IOTu9>r~!l?3SPL3lj*}L@_ybn!wTPf zxu|up9fqE_Y|rSygCRk|FzhkxZiZ`NohO_!v9zFm#Lwum@uevCf3Nwitl`530#HGd zELcQ4z-r*m@vQ_r9RWsx(3Iyc5`a4c0l)8FX0~buL)VKvJwb1j9=g(uYjN#Yjh&T; z1R?+$K4W3g9i3Ruz%szTQI>;`@TUeeA@dScU{;2DPnDE4Xf1>Q9ZMOc*FgjwUiK86 z$Ae)4HSi`-A>chz3@cbl$*8M12qlWGEJt_Fk~!3)gbP za2uKh2Y<{L3{|7Dm#`P;99sJE;1iOHL}4glhQKXA=4yUaHrBK*mrH0GLj)VbFgN(; z8zV-5LI4lqDg<}D6NL8Wv_$r}5dj^K&OW?`jIQYBEmi~lOh_H>t?)t_2ukbz8_K|$ zLqHms8sb?aZ)*6NfNezLI*QybqyJLL=JHm+EGpc3^}{}#HA@3@30wAz*(tC1v-3Rn zdrx5N=q5TKb{GDHMJ>|*w0&gY)B23+8O~*+g~~4$7j=ap;f3Dh-eTwm#0!inLSnH2 zXDG!&xf)~!5v~n)c*6o^YCN+Rc5%m;r!rCuMoqCpSl^;*bN^`BDwhE{JQa(H4+X}) z5>Om;sm~O!)$#zI8kYEGHxoh%iVi@MGCuQOYZ+6U=>os$RKU@%vBre;oCbtH-)vGJ ztrypXQc(MSTnv!J&<+AO#tBJ6eJ?z}7z$l#+7B~E&=(9k`c`mX*zO)C*csg%E1yW_ z%i^r3VA`kI4(xA;ChG8JZL*cxk1c#CSiJ`~$@QMVi*O>m7=8#C2Aw?kO?c{xfH%zE zVhvzN&+Dr(EFI7Of;zxOm~drQR{fJK!1yw`fb&4g;+@gc#d2W+8qWKMzF&wJ@F9a| zL5i5FoLasGAy^;zSaP|ph7_3cVlXS#P4l@5z!n8ixWOj z8vbb+`K!=0peb)fjDUwIY(MN2KO_HnophCB^&<#Po09;1N^`@^D|Ho7_UuL*NeaJlH%1))d>@?zXOxF;g{py;w8$vBjW zVdGH@(T=R0I+=o5fyVEc%|s73+m3ZmUY5y1x%B#891+^d4`G|LUvFfkj0g#)u*i@A z{u%(lxX9b33K3dn`f=9ay}nInXN>SZ-ao7fUOk2lwpo+p5HzK-!4R>j#w)Nvj~U&e z7Me=KEVF@$4N|b~`IIQG#rI?5$0x$$QH9=^s|ACCg%v((!c1A>2K0_Mc2^3<;^UxR zV{fRbdi1cO7up2T;!XhV(R4-thbF^=-jUp?fG?J@&WQx#eW8+AZ(h4G5!h$QKCm4$ zGNjfLgqaLaf^STB1w-5TG9Va4={Q0*$801(?8P}(^KZyKA=%2;s(nhB@A={Ddx?$S@`gF8qleKzf1;4c=H0ir1^zrEM)WrVm0W3M~O9rh8H`~xSAm6 zqY+wM29E;`3I(ioeW*ypJdX*&V)>J7%CI$#umQQYE(i*8{NH8|9(Qc^T3=%T-~lWt z7UGJqg9u?YrSpwh+I{ZDP`vy_|J{dnz%U!nolyUB^YyJFy~*Dj+yUMXKp%z_4B_cC zstMx#na$uGJ(yT%e=Hl?kJ3D#ewe)JT_D`y;N!l)n?_!&zkx-=!tfvx%=ikTvthM` zG-oNZSvfYupi0GqfnEbk9N_g2XarA)Xk%5QtYF<3G!U10F-$}QUtsC6#q9)IxUqKB zZisEr1+ic6D(#8GxL1IFs4#%?%d7>2>ldPsRFq=f!v;n|7{`aVHfe()Mue7_fCT`nLFNK>iYc)E(p57dQ6j3vt@Q8pO4?z+Hb;2IM< zR@oX52_UY_2|C4SUSLEF>NU?yjJ zUKpUOxMVCLzbFUpyk;1Aj0b0$JQV?Hrsw3%K{c8@P)CKHYC?6cF!{l)-~k{vG2OVM5zWFbz!MLa7W4-jfO((p zHBZpd+&&TWAeunsFhT3ao?>j^wAf%6%V?KD@~*ctL-juIfFXhs%-X~X*2cr%(3Jtz z!-SbKe>MJ5K@GcMsQ~<#4jd%6Hs#8E{K?Fsu}B@4o#s;t-X9nZ2xhxC9xYY2-(26m zfB4d1^*Fi)OG0q9R8KX|1pBroD6m|Q){)!j1Bfd5jkrN>C@-TB)7T&ij4n%#Sw8UR zz=h`u9D)#8i}SE$5hTm~&(&@`2h^*u&UjjjDcFS@OC(`3SqFtM!_<@PRUvjWcoSRz ze$l+ZksHh{`aE%?0MZu(X-NKwA3gzgToJb`Bx59DMC}sBgtdYKf{Wh8PW52+sjeMT`WfR3-&#|_m3~HHC*}>=GZl&>z-(&>3(Aa9;8!-IWbUaW@k!!ick!1^kJ3SJRLJ4D^dx0%?wLVJBeD7!>nDYoDMN_r1GWqGdG^ zYlpHTAW>+U<1dQ(g1e3XLl{2v`M%6L>NK&WI{|JHBg3ZX{GCg}QKt%b@-YA{)AA>S ze}aM>Ag9G_O+}Y36w7VL%3(Qp8F)|X+<{t}egMwae3zZafD9t?>@Ot7aHJvcQw317 z_{b25wsy0e{38Rh>?L6v6n;xgEAQP)Kh9@9ADFUqT^z<2hQ#hX;abqej=q4qLC*m{ z3kZNF;!Bgv0-1g>xLdD-jfKjL4dAih3I)Jvv0&JzeR-Qby&?e&+ZR;4(D0cUFBW$i z2K_#mnE57?zFUS7UuZXOg#YQy0MHi<7aN6{#{IDzq90%&SQ}x-tZUC?)mUTzX1^;I zmKUO@5v8#_DB^oDFqe_?+gc@98xRp+jpIaSzz5j+1avAH{+}%h)2eSlV#ZbtXac%x zIS^vAF96)r5jE~LmwH^XAtQ+ae}O-S6Z%3jKxo+Z34z44U?aWNJKWk-bJ^`S;SIzG zCwBbfy?WNab2%I}&~2d64=@l%&m!V}=7wln1H{T=xr~?Z{a!fF3>ZN!0akBmrh^6? z9wdfY{u+M0NNbIp+%Jl6Qtxh{`oycI#o-v442YO6(87nKr^p}F5)*w$3`7&61#30b z*Fd3pI?+F)6lYc2fGh;~o7j}X3edC0F%!--txKbylE9kNtBt-7R&u{~DW;5Tj^PXV?AD2)i5$j;|OzLJ8B#{eFG6KVhb1uH-2mT3YR z(p-Y9`n>`(bHf^yfO}d9CSE8;jR*_JW${)QzT#QP527%j(pG{)Rty^g3IHCw|CKHx znK%J-36-5&@*X494p_}ASeVOtyW2coWc7!^7(f*8=o{c>T;wpk7Iww;0&H-Byl_?X z-?(g0ERLZVTDp$<-UgPSXoy^fL1Vj`Dba$~FT7&~J2e^MR7(I~`2}xBLq(WZ986u| zg3OO)Y&912ZCKojIUVMyD_g#E!G59tuR%;KzG-8-6bznDK?1^#)b4At-zX|jID-3( z*@|J&1ubWT(JOd!{`lG}-?@i^9*t^YO!PC@{&m4aL|6q*bbr>J-6z_@?FD0?4KJ$u zhMPm~myU{sw**Rk1+jq>0D7Pig$QU25PzrTqP4Gv$zsbE$~IEOahb6N3RXPJTcE(0 zJ&Z(zx`8{U3eZ6QsqzQ-TcYS=H;aNXZU|yFM{_K?4(cuJ9QTb_cr_mRwqOHzo2@du z@)sWX7yt^v! zA-VKGRd0j{lkpnsdks*s6upl6-T0NT#)V3m>@)y1d>uA@r6Dn#7?q0P;Ys1z;EZWy zQMQ`19ovIr1Ap@}({RXId$iCS?dHT%^B{~G@W&S%hWc`(&z&gwO&huf;GZB zTWE~2geP#v!S)eIDYi_kWcml9e)nMSK!*hOC}R!<+UPe|K$Lf}e*FvM?e%2L?OPZ| z-Y9fKvUxoo_{w34NmLB=MO#^%G(vG3M)KSuYlPfN70EO&#j6!WqM7NI7X zn~%kL^=@~&U`$*(1Dk+<`|eg^Cwx61{;q)hCP*JTy1+MV=YiWSEISvWH;4@8sjtgi z+h<_GDy{$+hCUdNp6g`g$DNGIX|CTRkn;TWo^tn*EJ%~sg?Y1U7-Tl;v!H;7F~z=b zSp7oV)?p{Px}T=Gpe$Hr?iQPjAYi>fs;~WnXg?y6#fs6=&OSk)c!@n`wYCr^JTc2! z=8BcCR_L=!SyqVPr&DW!CcE}v#v}PfiATf-GlwTP? zjA!C`Aw_RI@r=WV_h9#esT+7Rk8BR;#RCB*AH*4nc&hwkNlkItx7GN+?27#yUBlB6 zW?Xc*cbLZJMWNfu>Kl6lj+aV}`zd_zx*t1wZa8hUm=G79dcF0lh^{4jY!=?^M%hb! zZi{_Bk;VYEkDv(h+*}C0%m(ryml5H?GXqK3PtcsKEklDX4_zi=p$sQ+hNBy&YPDN9 zJYpBoJ+LMVLi2U+QyuuLlp6R}ELhZ`=y3F3*)q2%>S(Gt>krmz<21B<^5fUoXuS|< zgHTrVC8O?!S0iGuFek%4C7Za)A&&vyh(Sjmkj!pr;jX2~&A@t>JwnZT2dvwkRx;p- znk)%k1!IAO=(sFOwEr)?5t(PtvJvR=Sp5qN9Pb5@Vp00jEZpjf3;Z|3k5*0iL)OFO zcQG4Ub~XHkt;OWt#+A@7DF6!4FUv8kLMy+bR}MVVFLi3bA1KVabRH zs{pJKoV|9P05~ws$7q$dyaFnS3kdG7i4}``w(?M6as~PBt{#$vOF^=+d6sxWGvGhC z4TD=eht(Gd6vzQJkL$BI%2XgW+wKpvg>N$-3$nwZUB;@?BRI#*-_3$noDA<)(PY-i zSfLpwycN*V5`U}=x`=PLzXdac3}TNSD<|N|4a|R{8XzqE?SpY*QJY~>5flUy06Ene z<9FkpmPjQF)G?|(U!dlWf*GxiF^>nv_Xxy)8CnbHqSAacMD&%cgEAUr=>q8W3AP7i zGk&vn(^Ki9=&)Gd`~l+h;C!ujo?aCE-UC0+!N^HLs|HrH~Bc(idM$Xn{{scueJ_FJ*H^)WUE5WB}DLgK^ z4!o`4Xj=-i;`n{=KW`c}cvzSRcsvp+_82pOjfDavu%skFUcmjMNJ@khfJWuoAR7h< z8K0mvT>EF&nf3^b+dywiPR#-WAT%j@vc~{AEAZm6ZRFS(bD)56ya#qv4JY2F_VML+ zygqgh`vgy}CyWJ9#1?K;6F81iTC2KjtVov2)tPXWCY{81=qVa(+^}H$kt6di>F7w) ze%p~{9U%{6t`Lg`ul-Y6nEy2o@YmN1sMy2`8q8q$8|NX!z**o(PU(ECmSPp?L*(w# zlcr@~7*pFBPC*A~@p?`LW1qj%miJ>grS>wIlFkEx&X|ppX~?-P>Ltz3)m01dAD{LN(6X>Or7XsXekWq zoY;hE#_Uvm6sy-RmakjBY9hd*dJw`_UGgo5vUMy&*6oboEfGiqPsLf`xUvE7+Xf7K zim;HM9r2^>7xD<`f^Jyq1b%#Neh`H8j6?$RU@=7i+3i%##w*dtJ7ZRx5%yvF8rX;9 z@A3?R6uZ8yF97KBcn?ndVGBSO$A+_J2X=k7C*gt;#_#GULWjqLz`RhdW#E9Tncgui zFyR^&ABk)5pWRGA%srnZ!-r*fP$|fw0Zr_F#YetRFp`Zl*C&em5P;8YG{oITdX}hK zlUxl<1nIKg&!R_Ibou9GIPLv(SW%uNI0-qyNyQ zTau0NT&7)vWr3@+SEtB%0*DY}3#vvCve+}EKEQ{bK2gec0(<$j>L86}!`{_$Hr>t* zm*4*3L%2nx#@4*)=9*E*5Nr8B+mEH&FfIdgtU>RfRMg_aW??p=o;FQ9sTucj$^eRX z5-9-mr}~m+C**5Mx(!zqsEI3$z!GdYAH?>va5~v|FDvvR0wG!EY5IF;yX+xO?n!pu zfqgSr&aP>=w_*8l=bG*-nf01Latt1@JRTW0dzI9I~KK6wH_*+5}rx_ zjt+6pd0r-{u?qE6v9M{wus4zcH3Mwf+=m;PELgIG7D$fi`wU0+J%6>Wiwm_4J_14H z2aM41d2rql_6f>`RM}%YM)4NlYp8TI;lg#Qt_g1iV1A-y0C#*ZD>fdVa&Lz|pdip= zfRE|mnJozepjml~1pzKsI3EvXFo8?0U{TNwgW8wVKOPI>kYI6qQTOnq`+clb=ci@% zJDP-U_N*Z}b{{5l5#4g$E+CHk!VqH?0!A>|rLs>w=luwbo27VB0)exzpOuxeXd>t$Zw}B?Z#~=h-G)Uy$*%G1C5nq*+?q zLT@{J5?5^kZ-7RNxLq6$rW9le1Cn#hW=keQTrC;_?cU8gx7+r0K*Do$B6E4;T@#ro7`H2$?5 zS{ge}lMnKUY-iK|+3Xs&Z5hyP(hdw@83xCbwW*`#h=;&Jc2V{Q@lIIngpah_3<>th zea!o1hm0|mooq;H0f*&WgEUceP&v1WYrV>y?w_~4|L0#J1EN}EoT!xW7&(F+V$P?9 z-j>W_#2lLNMr&lVlGjeP{jk=7>mCgMO zXB~uRSTd9(`8KOzIB*1IUZ14`;Km}@0d6{fAX->r$2`7oR+tXp9GtMMx0$AoD##fw ziftOGbHQ1mB6bY}nDM5Q_r4ACr#Fcf=o=D<&HgnE-YF}~k|b3JY@IndT1R*vZ zY+ph$B>}=4d;I7g3;&slgAyCKhiE_mZD#tyds+15^u8mc@x$HLAD(1EAT=9e2W$%XZz%>mL0ZN zT7beg?oqm}tZwB4wlvUCvo{Q4foTlwsYn&diR1sIA( z0ye_B(liW)iLnxGlnXt=-yqwvMu(>G%n36#&YeQ6qouvpi?X|ViYgPiUzKwI;F!ep zyXwtW3tix<_q1G(Ed;~m=yO!I6QsHf^Hx&^I5V6#c)4=hPR;1ktb2biYevxIFn0$F zB*3xV^iTLvfc;A|;5txE0|#67ZlAT_!D^))7AVKC&kJ3ZSlM7?;V@#jZjl- z7VP$hf1`!#1v{AQLUhJdFHtPGkJ00kF-Kiivt78Gj*3v+EgRI7;~Fri_6AsHb`p+I zv|Fj};Oq%AN20HA+kL-I$$iGH;1{9ox05#>Oxs~|kTVAzoN7T-SlNf)L5&a?CjxQZ zffo^77K@-B?5z`@+L`CJ@n~4H@3Z69FM>Xl?Ke~Z6(Mv}Ox+-Gz_ytTVd`~Zi>1)UI(H9O?n`#~+? zJp;*R^K8p%<{Mu7djVa=86wdNiVrM;cK?Y$q`#5hfBky>SHJlCS99TPO9U0~5725w z0?L2#Zpj9D_+m4`@>&qVPFQ{cWZ!lb;dQN40k^XDcsYyyf91|-FOr2Tw{Xx=-W}cjB%hSa1M*xxdbdB8c;>AqJQCjHfN@R z0eTPv00ZbT`h@zvX{5^XDHgC;M1_OI9^s4;ZyecYC;9_7a!O3F|6~Q>g;}BJc%8m; z>rXj;;hEM*-3PYjcvT@|mGa_{>s#%Qd0336Le?yz%V3MrtcAl!v6y$XAq>NK5@goO z!(ZNYJz$a8f3;u2+ou96z}jFX7(41Sx(UZ|+iBtGhG=jE0%G{UHjSHS9|hhY&jJg<)|rI>cGAf28;at#KDuvE7lt)X+}DM@vf;Fr1F#@p&IUxmuz!|L=5F`sGe9Py zR@Q@?uzZ=%w|^D>Q%ZnDSQ3NOfRLPEQL^i<+hnEBwD}1jl!|TipcQVso!w^ZKDgJZa}L7_?KV(aS&9X5 zZCXOI?Ll<1gOQl|9vlykDv#ZP+9kFL7YY%5^Ek5&4duPlX+x)~M>%G_@M#v%z4izO zc!d>mJ>1T#kb|+q!KA(wDQ>4dJ%-wgy$}feIOFBCP@f&4HjHHlm&MKv4baHaEsC?@ zRrWyG?Stg=FmRWBs(nmuqk*V?Gt)e+F8L0|z*@kwtA06H@ee&N7G}Z}@Zgpqg@;eN zvn^Eb^__-b%)8GeK!&qCk{BA)+wtkUb&HaaSR?LkixZhMW@heLuaG=g*G zj1{&B#9Cr#PqQ2kDt((YvbQERfUfCgsO%$vc1(bsH}G;W;?+^0COdp!xLl2A2(}4? zp{4u<jqCwXGVNRk$KSXO(y!E)0W;oz`|!`6t9JQ!tk@hvTjRH zScuqI&S+NcGH*GprNu2LD{|MqWj=OSW!QyN-Ch&sHf3Vh#q-#f7pT6B4*+S{;r}GJ6B>zx~O5ruck-GzV(z9WOpn~ddtC?Eofpe z!+>Vk&3p!AJ?Z)~9+?$C-9-+&yRF&#Y!Yp#C+eDP6*3U+SRU3k$ysAq>;)P#Y=~Sl zUg1OE^S#v`X9gbNRe^=g#*TIRy5or`O3E=PU$CeMB}Vek@LNA_zEIKA1Lg3B&~}(M z`>b{fHY?u15XhSi=rqTZS-(0B|JuWFhy_0306pu9t!R6sH-O;Rlm!S9 zgM|M8qiu6YXzR=`1Tos=2Fp4O zf1ez3gI@x*9LiC(;4j#JTV@)M!M`ma1ipbtPQQij&Y(y%Fr80_)caaT6D&ml%a;rq zVFQb0wY8u|4o&*vnV*LpNbK(Op61>J$C}MLMt06@!0ThLp>5G$Atk-`3cSUHo6 z7U%SHc`yV~{AWsL!?Nu+0{yWT-QkKbC`?c{p9lGT>=$bbxlfKa!c|(%0EI^}vh{MQ z+n)-(zo76qCuA-~j5xMy-U3tbLQ9bP->37~9qG_FSsB}dg{feFK*c&W_&r^ggy}lJ zGpEwL7$4HLDq8DizYpvdGJ4V~*;$4-H=l7@AH$Mk=~WrziU(4Hj zy$!IQUhLa$N-PdO-zi}*O!l!^0f8za6+pk?xGhH)8;G2tb14J!Jl<_z79Ol_d$DkT zt%jYgO>(wx6-UO?n_P_xTyP1@D|h(hY=!2wgX0ZIbr(#T#k)^2sl#A*L*LXPw9*0< z$3_&8I@m%k(k&Ne@zN~LAcDt&0jBsB$6%4aVG*#Lc>vR+!ASwasN+!#B?5CVtT5gT zla@xdfge%)zy{VI+4LVruW>o7t=utEv+;gDKf z=IvAmD5Pb;EqrHk*48{Bj4)T54|1rNGspn2cMr}@;bx3}$Y1eU5STC84`4yh_$(HF z&Zr3+Tx5^Q$xIpb{Oqae`Ai_NZAR>{r?WMoVen|H`(ng}SgXagdD;7CJir}Hh)yBd z%T>LQ!@$-=Xw2m%oX{&NGRqPIfMWP#hfci~Iob8;c;Piu=oXkwYpb8HUZEvT3u`AK#)D7!K}qLW{Q(Z}2^Korwt@Onv!HbZ+lD{o4l-ItbAnMg$$E zij@Qber&JPcAs^I9$O&xm}Ekorvk~Q8neeLLwXFKI@;A-&JHQ$0!-=|VK{>_UJvoQ6>ztDXGe}#mwrb(|%x zG1MRHydjImY-7flEXRi%<7-mQ&q2%YWdl5J?d(=|mJl2e^9ig;7VW^TgNc0;Cpru4 zqAoZ(BF0gL7E;+|D9cV7`6(lkk6O=jdUPjXCY&)2!G00P%SMMKAj-)K*kzY{cbKY8 z1NF)~0V{%4;^r5@`Ob9dHpqO_IVBaVj7@=SFDIPe-^mKh z1M0%6*;xk?^**q8XZEC3Eq0fH-iMXd7J9Q|@e}1jV)3Tj5X%>F$4KI5w&j7>ottj9 z|8o=Xne-#eY2qF{cE4A>rt>3iXVcgZ;4I-`ktPreXN1j%%iNM)4B}(tA0Kz}$Cw77 ztAmrQcnQyC0We6o+W8Axe+*)|9fJE}Q4327)+5Kd7L zie6_%sJ0->5#ifpZ*tx##yKV<92K;&j9Difq2%eS~!c(Ud zKUrArp$gL)c0j{xpjvg^XP#y4*5y)+IYPU3c16eGKFwX1x z8&ER*T$591oFq0~t20Y}!0)zN%5ZjPlu5)j2{HMt!Oj$;BP7*5a5 z@^pkq>#u|SWLQ|ITi(VeU*QD9Unfc5(iu;rF_R&%{PY4Sxe0f z;9K4^z~52w!Tw;kKo8^*2-VDLKSQi-B^#$p^Rauyavzu>yuX+i+$NWy8VIMolT#hh z4_b#{wbm^-vxmdB^@fyrI z+CC0daBRI@3)}^cc-HId!QNaC?!gjT=kz|-5G?o4;mWiE5vMfwPWL;&kss)E!%0V z8ApuUY#_#Twp{kECtR3AF&1~7_M8n)AU>dG@5dT!Ji z=|ujZGsp~DX4+udb>lqT_M0m(JgVwcbmLN5xc2F5JoyPz{K4t68mfqjn_4{sjaIR{ zIt=@Qk-9Y;-4o9=_2*=N+IxYC3z#_6+F+nBmF z1mpS)4RN?`DHo_2jE~X783F@CtI0WO!=Wa4_@=>uaD1X|u(#PGFmO1f+;}UNVq8{^ z-d4*Z_OH3G->@>PV~x};`G=L0pfT}yeD7gvIv;EBA4IV~n_Pi4YByN36gJD*2Coy6 zJ@-prnN8q2@twaww_rNv(q#Yj`Qqt`20T>QH0($Q$LptKXY6^m_;7jBN5sGGujxu+ zHla06Vhktvo?|s~l@LG@Y(u-IbE$DQ4pF&J-LCU0l4KJ^Wv=VYNO-D>>@f2I-#r;? zfqt@1*~$ZUEhJNlS#@&EB;21H&jyeTJbUa)#VQ+*v@_mw5>S`y+(FZ9;5CO~e88If z2Q5D}!^w2(F<$xpGJl8=90}v=)T75kYdZLJ*vaR-hx(m)Jd>l>j_{Fo=}AT z!&87B0jF>rAl7trOPl;gVD>s>zs7Ab1O(*-XfCbv?WARm+cs&#Dn4dminXY0Sab$1 zY~RDrvLg*0=U2~=eG{a*++Et`SppVb0j8Z9fN$ufShN9Wwrc=CK)}D*g$|w#Ae(#n zr8#ddP%J$~t3{UnxtfK2=Eh!Ym(VzD1$M5)iXFjJx|EI&iFO{NR==ZyoL*}+env$c zfb^L=S`JyjwX`0bmEu7Ml6c5CyIW8F z?lXb^v#cc;tWEYU!;6|%b56#zB>uB$#(|{;(BZtI$MN&xSkK8AzYa$TH=tu=3t{$m z<|mspv@w6LlW4M&s-|G97JOw6411cLMgWgG<3Cu$&71I(VW(M6Ox2TdUrtHjy z>L3&Y3ak;E4e31{uqfwaz0y7hqO9y>Ur+ZbV}j%iV6IbOfhB4%i)dx!M7uDGS9h|R zr?>_g~QoZr2DlZ%wEA4cNGWjp!4|7VbO1`d6|y!dW)R%yZho(iwJ#=L(NZ$kEW) z>1zK^Xcl2f$dV^p1^I`gnpo8fi~l3!)hy+SBrdxF?`b_$G~-}RVz&bMm{uMa#$qqh zI~-v((Qn{9RCGTMBe`LaPFMxwTM3|aI@%^aHjKS#gEQKD%4N1$U;wE3)gA1Ai#+t@ zAr+6uj+_C!jtm{c39qr*s4Vk2Lk0`#j_E1Y=cu?8k0}8FIl|g8`uXDZ4u7-|Yuvb6 zpABDTwB*;41Sw@H^27kMnila`-C0dWfX>3~jiq_^1uy>{Pl2N0+s-ki!-hvTacQ`- zOv5&56g695@|=+cpbKYCc$gH}EUc?yGKQ_@Ag9w4r4tQ!cb?@$aPBtKZ}2s!aNF$& zeh%g&wdppfz}z$2^EnCA`HE5r;ZMQ*F`1RalRk zAVAl$^xy;=N_3QpbgKLYcwxogKazPn^kO@>I;4G0u>wzKEWoo*_u^a-KZBsoiNBvv z&cJPRAME$9s|C2(RJ9Tv=?Evz#$^@f=@aXYZ8Y7dz~sGN>0=Ejt`0c~}>^$R*4xrmP(i zB-nYNcv>f$Oio)IY*QcRXJ>v0wZz`R8P7skf8ba{+k z+6n#Q56`^ZSsaONVyv8kdrzSg?IN<%#tI@29(&T|SsohZU~-Cmu)o#Dd~XR1 ziKbXV-MfJ&JSqmunD54!K$@+GMri|Ud+AfM@qK%jJ?84c6Ti_DN`fh7Pab+~$+PUD zIcjPKNBYcD1!&n5&KM=UEbPYNtR8?gTZdfE@iNJ><7Qfc#g;^{PKI@sh%qH|((52^ zco!;-%^v#J@_9rg_irNWbATW00b2DNqKe~qtrM|?1(X3F#^gsUjcuvUc2I#Kokmve zO|s(kPUl#Ibxz_q5o%L|Sis~VS)YeF9glV}6^Uw>8kXESK|_~; zys^R#&G4wNSgg=)!=~5~q268d`1I^-9d5VY7gB41gm5==7j|*<*HJZLX5&URoY}Py zY8Jr?wKcG#^{cQ89K2=I0J`tJ_Hw5DpE7fE5YFkY9*;H7xd)DA!|lDEQgY5^tVVZ1 zKhE+|Nb4xzo_GOyO|XIsvm+i5E~kGO_%{~?O0|*3&P?mGr9JrsxN+j9lTTIYhkSW3 zfDCXMOUjlq|6>wY#A-UEXK?s5Ui%r0rm{Gjal|K!wvm1w1MM2PJe+pvPcX4gj0j z6{Q_|{GiWy%r3?1WVp{c7Qi=o-e@Jir`VHwt;sX7Y+hfM)1~`_ay-}Z+7tDt*3%n- z#+u@^{bzX&kAo3w1#?3)0i(7IqnY+*8wV(+nr`PEppq6=dd^D+d&5GlI8=b56J{{$ z6Rl%Od3b~49=Y;6F$RlgzJX_QQnYt@v8dHi6s6|Vw&6JG4^ej7Nz{X*Xf^&i(4sgn z!Wk@MSpDu;=WfSMu!X_FtB$?%v@2|)=>b@XQ=6Rpe8#eW+D)P93G3S*>qJ{KSr{ac zYn|)69(zQC^`}_F_@^7pn4NQk@F(m29a-vF3FoxI$EtO0uY;tVN#Y1NYerAL|F(ob zoSqy&yCsv>#d`=fw%arCfWl+jZ3onHxS9<)(WxZ|=^%?B{|`a&#Jpr`vdcH|8sJ9J zuvuvtxWhQWcy?Cyb53gDuhx*B_?49+-IjAl=Jx055P1jkVW)1WD@OW-2&fm%DK-4# z*$uZ9N1$w-p{Jdhb>VBm_~Sue2cj8!t^SSAL?CTcNXg-FufwYB(SWRnKlR^#^|Jr% zxSZ=>fAC*^{hZl*Cy(uP6{17c8$in%SzBRt)Y!j901GmbobGl!^JTOHtllh2g3$zj#al&lE-Gb6Xmt<(Wwg(v}7)!>%^eHh8H!#PQgMD z?=xDszS(+6>)ow?!?}7g04!_4jv!aKGJ9g4{pVndWw3NvrNsq4OB!sJvzY~^ckS*$r3wQP1SAhk$o=@{3p_TO$M0Z@29b z#=OpHYL23f9xUqdXv&BMfll_a=ga8>mL3m#!;)p7Q=$v(IMW7B$j55oX&?A$629@B zb`9YyKth%rdfe5<=Vd#-K2Hxd7lV0%EL+loPk!Q4JR`+pUhJ4~+@s+Phsd8<=uSoX zE^wQTX2Cfo*~z#KtLXGtPw;Wxo&7DZtrE5VIgP;nFN3(nL;Q@D*VWo({oR@W0q#Dh z#CE6XSP?YLpq@dFm=LF-J4ozIfc>n-3Fkahz(&#DJPrvu!=Q3FlRY;j zd9cJr05PX_+daZ_2ZWkDz`Zyn?TPpF2t=!fpW7xTHX&9ge(W<-^f59xC(4TQVGXe^ z9v4$R>$zX>PR|OrtOZ@DhAE~~ft_i)&!ICI9oxTVvzfJf`n!Dj9TkL*RdEOrAmwuK z<$fGUeBy}CkG4~vJw8QVzsZYQlIAdmZJ~|l0k`E~03HcTJ)MwxP21|t=ou*p4s96O z8E+l}5l+#2#c?1taeFv-v#QiXkE<;eTo>b-AwTzJGdTNs4m9wnrF3SY-P@5`wj6Uu z=F4t}TXDxH<(WUn9iKk^^jMo(V!A|*mNiy`v-Y1mTwmargIEX4&Hc*o)>pzr`aBuP zk#QiuxNITz{EHX?qs1nebbJ1)gZrKO)KpLQ&yKTg`FBba$%VjR;4ELTP1kDn?TJLo zl23>qh})BC(Z`~3avHxQjNr)KBLW-)s)F9l7G|h=w~={+(Tg(|mPZx^(8%Xpq^MT@ z#-0NokDOV+dqAhqJ8p|MqWxz)u2mF0|0z{i<|S&yjC^M*mU_+pcyP9nLl3BZf2^-{ z>rnq*1Q&CTp1KF+JbCXRH^Gcd;~>u#%s!r<6pOP*B<2zT8wA*E2VvO+*1-}obmNC7 z`8++!0_m#r!upKpR3}es(>H2@Z3u$58X5NV$7l#g52k&$E2es&OmsK8MJQGkU3fH) z$c5x&Cxtw$DbUIiBk}n*1I9J(`DdOqTLz42c6z1(G;-vy$<2MS-C%gn{K^g+-sfE1 zZKH)x8f-b49tr)x{lQM<7NZX^sO@W3?T$W7yZQRv8@dwaZy+4=fm-6S36Jw{sT9Vuf$pf2ywIk;Uu(UM$PBnws@B&MwjQ zZ`dQaRLR{g8N(IPtg*#Q&LV+LMRdt@yG6VEB)gt7Lz?Aj-Ea}s)8g-EUS}?4THRt= zORUUKy{FQ}=|=2RD;9`iRB=VX4`=3jJ`Y}n+YF8uX*PjhW(%Ae@-9=CcJvjeMf11& zkYfi}*|*Yc`;hlRVV#5A_T$BIT;kgRJK9d#x6;ne5S=HMe4X}pV7Jb_dA?z=IuJv9 zj#fYUIHAE75UUc4KDw3zOJl-iaz zmqoC*<7SLsba=ZFpQDKlj^zy)joHKzGOm~=%_WmkG(rMx5EIs=Y^yF zp2!O*^7y3a_!1r!{fAl?e6{VTN#V7^6YJ&i_7_b3`3VZPBzmMK*kwS zij6fcrNW7B9508)Jzc>2V*+6QGk?2?PqIy0s7Qr8D+;?qp}6Ou=gk;dn1<7+ zc>qu6wsZcy%u(7x2=eJ?lAmWL7{@;ck=QkLo87b(U(O~@io?D+=Z_+sh>z0xUVk<0 zKj2Z%AvrTmFcVn71zs}2XNI9(doMs5nAv-^f)jdxCee5-T z-a9s_H~#?rV(%Jr&lXvrc}w)5n%W(h3%(;;xM9tq=j?)s!5)q%MO?t5$=ZES*)~(k zkHvOLR_mmy=jtB(Tx}~o_Fy`L>8XVGfW|mS^%jY7&AR8et1HP@`-;4 zSMoSqtJDoYi*q4pCR|~sCICD5z*8w*qH`X#xo8M z3DlrqR4vAB<9{}m%SsebcO&&a$o-^v~9Nc4{(XBT|WGxwVNN@Mt zk#c(yiDS9ShKb?KmdCKMxacPs@QNqAX>(x~_j6a>)WxtK0y*QcN;rXy@qqQJ=eA-M zJ;?xVcnybmP@5S)PdYpyK}S2DA(x0sv#8H0@s5b_7!X#;scmUz&w&RQZPT!T6y##Z zkU(tUcciK~JIE&6d6Hc3IoKL*djf0?LuP@-PPXegHV*LbpluJmZK~G$Txnsen*~tu zBrSm@w}Uawt;J7PhS!2wI|FHr{0jg&V6NtJABzq>xKB+4pgdTl0s%8q6*LkaiUPvM zb{3DJ0A-CAT<_r|-3W*GSdf-;=9g!OZO=Kb+tiBt=m`IE24?`L1|dngx91z!8VJIx`!tiGMx^sGe#=z=mgF7Za0~jd{e2N9#NWdp(xQ zGXe@wBV8tz=b4M_9LsLUlVmQQn}6hoP$1Bvr@&bg{bNh@zlr+&3rh&$#EikJr+Ljm zzdw#3^2Fo?hjyEh99RXg%=H}mGhxBQIa8mb&{#z@Hbbzj!1TyOMCbHFot}krY=@^} z)zjk)G~>pvosCUd-fe49HTVO_>Sth~18_XCIv(QeSxH(zFoksDIY)QHUbn}9e86J? zB6^$UlAh$@#DHd|+oqcnmI`(2bpLwQXJ~(+2 zPd`akXshRuL{FvOp8E-18iuCr2k@k$f`EB08;>?*BKwR0sWN+LVQ`oqjLE2rvwf7L z)8THFZ?-%K6y+?*V9Gk0tH;w?(Q9X@V@5FN!-E*Ddb&O2)DHTS$Mmoi&(Ye$=@Vcv zEILnM`;ic5vTNNb&~Vr1EXc@W>FU_=y^})>-)Wh;#rrdRGFKHIJPw8DrNLRTwcd6@ z6;aZMx54Qw=g7bD{srujcW1;It(z;HCZb#C=Ul#1T^OB8&fYtNyk6z8X;vg*ffWyt z>U|>FMi{zP5Qv^J9!Q&?&+tZUxPN}yiSn$q#nNd9xBD<5498c+xNJp63u4;+n z>v2F>J&%8N_~dJ~3%*iqL!$N@T9!~Fo ze=}c~Gk*t&!}QE;!0M6@Kx&CYP*M8n)qw@s?F7|wRb`j2DLcNULV9{}C z;7q4Z+JI!R&moaWcQcpmv(AiXb?%%mZIXcJ&%oYq}d&XQd zc8@Eb8KCu9#Hy;l+u^hx(-R8fgLP=8tIR5wlLoQy#&J4qzqxxLqsM|e^l6Oi@aS^_ zOL(H=p89EQ=HZ=4?o|Ei*re=1cph=-p&$-FDX)=MAd6=TAZJ%`s5qMs*0d_nT3&lz zAJ20#<><`qXsIJYcsmD~8+2wZdk&khYXVK&WnPcxk-jr{D5FE|Uu#sHiIpr%i;fX% z7P*dN6o)6CSaSrcNW+;k7B6_{+T}b?sEI8R>2}JSnS|5a5^UsIXUv>c`o@N{C3&7# z3U=?9DqHtI8<;}7KA2tI`?HHM=m#v)vOd`pvT_!xzP9Bej>U5$A*M@7{Q$YYp5;XB?V87--J@I8 z`8nUUBebnJgcVEVBn*ryw8CRbJrl<>z}n@!4kzhgo=UZKDxE8CAFc z2aI^zNrr>yHllk{272uY%lTSX$r*mC&C#~OQeS7CuyX***IvHIs!Puxc9dE=nVjc4 zF}~a5GK*8rA%6YaJ2=$LZgRd_%82csp2+c5yV2z+7EW1A7SFLs)v~)<(?Qvf=flp+ zh5~!hF}~u3a;g{~+dVvG7c_6tG|#Tlk7xL}N5C3Ezso^+>AZPd-0OxeN9UE}=$viw zfs{Qq4{NtQF>igAGMcG8ODs-&WU2|f3*xR4L39lh^?HKedk%Q^RCi!>x1-+5wPrE3 z6%FGI`O@5<6oLgQ7O(0frptPHAkM&`vGvGGkvYfquP?*g($B2c}`Fi?xz~iG^1mzrR~5?7_NY@oe^AC zaX4-m<~6eiSH5ts{)^&aMqq`uiD3^K1Y?++`Qn=`Cc=W}=peJ`5!_Cte$Pn{+<^vf zIo$)Cf(!5O1q1M)S>SB6+SBs|3<6D$m$gsL%FYu>bG!_|${9Fl1yuI)K;w1}tH#V) zqQ|?k6Q|6ZJ38f@^L9>X+#cb(9LV4#SQq&5)NW|c#^+1dZV0!t4w6NK5MxjKZsQD% z_Sjn6e0Mu2Dd1~{=R9unJkDe6{Y>`PMBK-z8wxa;2_VGYZUc79BY>a=?->&AnKWN> zsyRelFk9fCmiXI$w@d{)=fy@>HUqzQL=DP;z+^j;oI!ZT1_3J!(4tIi3#QiyKrMIz zgU5WLjnN-~+Yub?N`P{>(D2l^=@AN!6PTU^gW@^UGnVQs8_%>IP5|*3_chMBk?FCU z#K}00<2&=snujT2A56(uQ};xz8XOjz(mY2U2NMCbjyS95JZn#j#=i5sw{@SlJvB$a zOLxGbU5W7o4W0JiyFH|qXji9>c#_n|5;)BYYwa?5SbWY<#&Q`XhNe4nFWhI)&azot zJI++pRE}0~g*+EsPGf~&oM!*!ZIX@+`{CG7~KZ9yf-^)7tDe{3;6S0Gxj*Utx z(6`pH+>Ci(`k$vY+Lk6jnhGXWX&;)sJ$|pBWu@D?PoU(xmubP7%X}!V%9)ziEt21> z_BL+nYZXoT5{OL68ynLmt3@+UyW8aEeF_xapXv94MaE?!X- z7>*}R;_>zMbyJVds9EhGcjSYPz5i^BL)cI_{rC=e}e%cucR7|0?@HO2n&5OwV zFz@7*mNZXDHbqEMSmKe2k`l~}qHIfisn!|em?L;n#fFa9N7L0U;dZttFb3cqQ~oaj zF7fyn9(30Pmps+HgB#(L)eihVp%K`lUyyMUR9ksO;speZ*$jDV-R}yzX~S|c&It6h zxSQ;~y@!p>h98{Um6S?wWiT#^6E zEZxF>?nELp7u?j!`7I9(ib^y~#f%gfxoh)Hp)gky23h$HzpE`Ndrk}6XQ~#@%xK zAKXgjp~IBw9Fb>l404uoT7K83%zxY#MviE`L@x7A`M=f;8>hyoV*0XXW6axrA`}xdOh+)-5}l|Sl(;NA3`#Gobvb8 z_3zp~?YG~Ikj0QRPhuWvi(HN0>NJu{HMm}nTFC7b{P1+1_bu4mNCTx_n>Z@cW9a58 zol$ij@@ZCo(R#z5PX+O51+?ATSN-C^DBE)=al{CR9a19oXk5LQX8@Cz-Cg?+EHysDG2XBTK$sO*v79Pu3ujI0w{)6+ z>`)(KEGFA%_LMec60+U{E&c@N)O}2zzjtBDe45TW+B2!}6Aa&moSCbfAQ&>9+LQd` zd1WU!^UY$hn%8BwXVZ48;c<=jeTl?Ql0NG?=s;O((gq2hBg#o=u$75kKH6!KB>%o( zd=NU?a$Kr`R6T-3y3`QIwI$S|o1WX4pJBX9H$y_=&6gjN9B++u_h52+N}})zzL_*e zt7;2I*!JFssg?xhW$E26(Mg~gJ@U9YXe2qJj?K53Nn6QG9{3zLl1*&^`KP&C>mLOx zzV_sZY&f;N$}($R-q(r|-jwZyu;Lt>Xr%?xd4O zL3p1GH>}qkwb4t_R4tecn@Dr;3$^FGl=M+UP))i1@mwubF<;{uJi1vH>m(E4i6_8MhQMkmX*4VMK6E&fy<+x^fOJnfng7i#F1XJOz#BTl=f#rK)u zYHpqPz1UqdzoZYD)1O0)8`687z?7vrxcRahR|yTqIaR<+5i#g^Jc?i7&F*ckb)$Tg z0IfX9C~>!E*s+MJ@V+6 zzj)Cuoj9@^5W3~mKsM2f@ZORzlIKSpYQ2}Y#03&N17#X#7%WZJFR2+xqMxhn8XE+; z`?dyNoZ-VDa(;%k^B?AwvLkm|aww6viHYGhS3jS&(E4jh>Zl)8oE(Skqty~6V$ASy zgM-({6dWgU8=L6w@9%d#i|-(6H2#juQ4V?!2U7pc%|j%BupKEy-x z(Mz3}pzDQ-_C!_Yn%^Vv?A+OA1?P*;eZxo``x|(yj!Eft*z>Jzh+SOE&z{L|V0}J6 zorn+8!Gv6#adV8bTZ^$>eGir7^$O6nNlRSQRI7qH9uryeeYfL4>3grmW1EEea2Q6N zI@*rw-S0s`z85Jd@3ZA^Rg>WP2z;^5oyww`jAy6W`XuPG%&d*fa^9K?pI*aTl17P+ z*CKgpKZwL^qt{F0I%nZ3M$syMn{n_l35MFr(&R!#$`Kik)V2w{iK^6`&sBeKsin1} z7Ppzfd{Q!k|2N!gPSm{NaT_@=pEphcn~a|FnD56%!AX2I zUtDgE$;mY5mdk`$*i*6$Cbk9N?8?K4{2g1T>Rh8u>huYg)3Mqf-lq~Jx{<6$Ry7lf zQ$925dBWz3p_7OEinqLctA%)9$^ad5`u?nIU)a9nJhpX7%1Peu*3yHX23~4UQd*+= zX@O!d@xlQ7C6DOhot>jcHR`?49s?xjlSMTlQe(v=u3+{hfo-ai?`OX@8lI$#CZ})2 zL;s4pMydbb$;^4i_gRvwrjlHSlXX67{k7(CeB{_Tlh``8Tx8a86HCvVrEk6_M_Pun zbRbEhlb2u{5@%;WH>?Uvhb>0roymS@w zm_`c&QV=@8Zb2fY*jZv_N4{DoOWF&XzPZ$Z(viyN^*Gl{Ekj{S|N0)Zqw^aAoUQO& zNm6)^rId_lu@ZxL%UERDjM-4AH|8TPW!1Y^Mxv`QoDXr&Mi+>e5PLOdV7tGC^tHSIt*KHW^B#iloeP#W$G?F7FVi$5YNaQa*7KRDR;LloU=nVXaZ$CI!EMlCXdkdqpabMNF{pZa*s64aGPq#5@P$CVN+ z2%03tMaH&Ui1^IY$Co+*<2lPcPvN*{N+>!p{f|*^l4dvULFNg_PpQTxVrwPYnQ)7j zwU`}HGW->K7+sWpSi8*Fst?tQWuB?Mp2xtHc6o8Wr=Py|6abJfzgkwNk-m~u&sE=c zo-o)TNcOA-f_(@pa=*FSu%LEYCdxUaBt=TjCol|MD8O!9l5$l0q2KCZK^$}^h;d9b zn3C{~Gd5d-d2Lf3ik7x5&fMLyj6Mv5ds$EUdG_44AgzOjEJF5E_Hy~NmIzsmy99gM z;#&{OeDb&Q9G+t?=6r9S zIP0*@$wdk9)Lym`?J&TV={XTU62jy5md(#OVmOIZ$aGg3*L@Q&%P$Z89r`Bb=vvW~ z4-VJzPmRW*?k4JYjk z<2@8Fs?UwP>S6KFFj;edwiTd1o>V?)Res5#cq>&sBzOFVlF3S+tV{!mk#y&*=lL!)f%TpOC%&A-`68CY zU_ujxr@6t?{7{AF=5i;PcG;cL?PH0KE!mcw*)MF7XJi`xTt0%O$9ZUDspjk)qVv^i z7TU|A!mb%B@kVs&z!>byR8pvnp(v*1$FW1?$g>ZSitgI>Q3yCy&7IxvlutBiOeoHe zfPeitrfzhAj1_(yGM9(=`I9QUy%&3?Qh}-NdOlI2yac{jQzTQ6OoDQeN4)T1q>YpR@#N|yKh)&|6e@y8J% z^(x7M@~+~@L5x43xyni!d=v~T>qhV8%@w8M~^=`5SZ zX)5uB&DWW{9SB@{W=7*{~{|t+}9%aHuDcSB-Q1YKhkQ|eWa)p!-&z@5B3F6QB zH&jV*C2|DO6GCNbZm%V8nkh-{A6~=8t8*bz*`Qu{|4@`y9_3%oqK-a@l!zF?p(P!UyC~8LvFIt z*-q>0D+XntoZKp0toLyDRx50miQBzC&uT<-*p{Bw0E|3n(zK-KS3EOvcqaOLB{u{_ z2J?L$USqVp{cXJQRIuMt2b1+uuBYAc_NS^Dm|XVjBC34o?|&tRhZh-i5`dg5kVJ8owg450U}q%L;QUfg7|&cpf-*z# z(C4S?HYWTy&z-A;=5rCZcS_7}5*f=B`WQ1QjFKmC?KTJhyQW0QB+}_YF8XZHk380I zTWfh&iI{J#&jdC$mgO|JgZsv!xa`~y6in1Sh8$2&=S$(j(6dnnAa9rZ{d=89PZBov z&z~Csy zsjgXLWwtcD*uaN8JC+?^@uNV7K=@K8I0rMm#8zjjj#MuFzE1a(tlfFkPRo^OQwlqY zxyLp0F|g4_kB*#lJ|UJv>V9Mmu1xs~hP_Az6|s{J*PTV*UgP<|9hfg4ed)ixUOrgB z6-6^X$3L3w1N1pSdo`%}lyGb$=U^WZFigx#-k9>3w*dBDKw%2xsgBbWoJ||2Kbm_w zO;gb`$>2Q)MagAq#^W1?P#zJ@`u*4~YKis)3y#WV(HtJG@!V3gR+nk#HRCK}lakIHP2^IBVnr~g!mwWG>^VoTs?aw@_Z7tt%IeN;8_8IH_ zJ=?HoLu2!El9-Z^7w`E|(mw|@c5l}FsCDgA3K`N!--92x<8RCu7wsZ?AGmqhn%J!C zr^JEE#=Pl$L9s5D4N*BY*Eti|naRG<@mR3%*BoM0#evZ*!LLi%k`T4*iG9BJYN9yJ zfy?ch`eQFOacyi{ZQs!D-HtU;K3_I(XSBO+0LB(TkC1%dNMQZ>C}xhzxZHz$in2a> z7#5HWHn+!Q2=bfB)1Sj>8%H(ytwE97P65Wxq2`*mh#$zWwqrUN625eLJAIoH&_R>p zEMT0Gw=*$DBbBN9E(qwC-Ue@p?9wj1CP#V^ds$EuucgM^o_QMc0Ne1WXb1{5cymoq z`4V}6^y{KA{x&O-m@YN@=P9GAn^N{#Kz?!KT7u|6isq5$cR%npO%A~8P z{IcE3Y)3g=hn0EWQy(NRePYSpR*NI4513vCFy#Z?8;{S0{-pirgKuy?UY=Q3zr2mk zD6sNrQJdigx~90hgM^z*SHpx4W_QmP%sE2y&84qrR;Fq_>1{}5dLuyKy7mpQev_ff zJcN2WfADIU)q+pbp0>)>=AVf4?%TaC02Mt;{U*Y1jeCBk<~tFjfT7eDck%A?c20Es zpz$&FB7v5cV5dNxB7&ZB{&kmn){NN3d%ZD4 zIa_eH4U2`f(pmG6=Q%At|5baM6CbK@XTy0V)f$a*-~+`Ut)7G4ihU8o#4`AP`A{!8 z#MWRRiX=1V)jQE57l*HDaQ#|7Wn(^f&7SicKQ2tjrwc;)XICI;I&U*K8~KYt!nlzv zIhVYn)J~gCa+_{}Li7;F5e)$hANOY(Y#-sHx*EBM4nq^8m zQgbcEn!U={DBo$j2K~JL0A;DA-tm(A_ethRj8EkhAeZxjE1?dE02 zo6kHW%ex;vcp4n$>N!y89yzLWS(jL06HE+o>>gH4Y@gFXT$6BBqdO`;(r8$AgxBb)aU)U(I8+qlg)Pc=H`eNu&+*zd9K%RMp0g`lWDO;0U2&Pgcp z=oqLtUuQQ%@~8|*QfE)SpQ(cmRQG{EQ=-D_!qGFY^svxy;|85yo-eZG`HoIdg8VrK zwm3qG-V}%1YSA$ml2qcW4|c*`?L5kYGN5~Hi}lvzuEgtF>X`yka^Ef&h6-IPK;tUQYHrptKp3e~EokXL4pC1FgR)hK+^2E4Q zD=QYxr;WGQ`b;@30#Qpa?`2vf=5eSzZnjxEbU$R=`1Rji#-(O>dJ z_EvPZd(%#8IY{R>9A+>n`?OOZqO8m}{Ithr3B`byMO@#7+2u>%^{%OaKws{`qpcW<;WufoL~BmH$p|(>lVs+>EM?1yZtt=l z`S--pm3no`w-g1m-AB7M1aU0mj0%HyX5zO@ zu-QB;t=3&>UC=>ZIM!%*EkT`{$$3RXV0^v-ZkdjN=zy3^gFbmPU}(wB?v1DArx6Wma$vd)8GkJK%C)mr?P6Q7?H?6gtMO&ZEKQdgLR;Vlk9On^{xF0KA2 zArSpt8#$q?eB60oJk`3NgG%$4C`2^fLM+5mM4qVU=W&#KFWKt^fi<}z|KURSUdxG~ zXh4ZTIPT|IrU)~!#g}*Bu3kvdIgF_~)wCBwxAhFl>J$TVHP@@wM!q|^h9mT@nx2S5 zl6$F14pPU`5(+K@7Ru1ael8R3nt?PKK%}H4ysVsTgs#c5|~2KFuuh$ZqWGH>VWMNvEOv(6~w}-z`tm%sh*L zFBtMBSxa5$WVEx`Z5F(iH{g-S%zCnN%2`wEl+QpyRS?W|q-*`?D{}N8VJoa##kILClb(SBF9L`b>?%LXsq`?YvJ;@Sm@fU zC(FJ(Bk%H+tly$}9A!^->24xW-j^nF9>u3Ro2wJ*Z?eD)o`19r+Q(b$vGh9EbDFQp zBUHU_a?ME(q}NN@g5=a_siG5rrM0)_CkB4pRhQkVAnhV0b*$Eom=ZtV1dQ*sZ>v4w z9nQUC&9lA)$(}2>h)vM}1TBV)18ASqTiQ7#>papTFj9NzCG6ysnAOh-(?O0oDV(7Z zaZ*Uz3%cFCn<&Ru?bpUQ`&=7FSq@)b9-m^3e?uC>ZM!|T1B=zP81^X)ZGQ(1FGJAA z!b{qo-Mj_j294$SeTgH6qRfHu19bMQx$xwc=M5&V2=92(SN?cChO!*pv2y~ja5!=b zFDm%~9a|N`fu)S)tp}FCect~`)OWYlLs>3?v>YnEUb;<39?GMcM*osn-joBC2#k8b zO4)uS$g`A6TKT8p9Od4r_1!g#eO&TVb>;jqvmouUdHm>1$HT!jVRFY>!fa1QPtn%K zv%t!FjYVRDZ6o7MIt;-FQKJhvgjVIqxD+m0?o7q=F4oN;3A#V=m z-17gxgqf!U)x*4+eiyNGNcA}*QS`6)-6aQ*xNPCK5&8`lH7qG%gq7m3+KBRjL7&xi zBeI}EIuS{VX1seUGBm%SCC(BwX{;h$?8soI0N+(sh<1~Tb>PqNBk_sw4^E}4cp``v2 z=vt?;d;tGWrCP5CCSPrz2?M;Al~Qf=L4HO@TmPuo#K7`5Ice^+&9q~_>MtcKbqe-K z!E+gu(yYtjN-6Upd*%CzqWMb<+&_;upFEHz2j|zo&+$BKqN3Zo@Ay5cz665g1&qGL z(V_iZ`4Z@vvji)y&RwcsCKY?heki!OXtb{Y?!)Rn~nZ7Io~n-0fMb9|AD9m=cBgkmYeBA0i@m z;d`({kQ`(Ty5D8tJFfYni{Wmn@!W%?y&216opzHyJEO^p?^opgTd#gwpOm6U@{X6j zz2)*v^J>EdNSMS^)W1yRcuA$|iuMX^N-&m_T4!_WjHkXD!OBFPBk7;S&zHwxdYSV1 zRl()g{dN*>bHYSEQq}vhZ}KY9sM2;H@`N^kF_)<^U2Bx>CM<-BdAgPOk;rAL=KRIv zo7yl&5^-bIAGS31WpE}E(C~O~dnzg7@)bC#C$bX*o)Pn|617^Mg^fbM$YCFHTgMu1 zy#eN(m;x0JrZPT<(-VChyOZu=cv);|l*aPCpyFggiQ?2ME*mVdhY}(u>A}DNCJAU7DLfrux-% z=FxVU61|kW`oi9j9T920u`OkWHCT4$x6R=3E+30ttvZ9pix67zT8ciM;^QXH zgcpnDjDG_=22|9bB0D6w3EtXztQS$(HTT2}bjtZibxQedBx*Ps>C&q(bqz>M0=Tvz zNPRYpxeU&F>2sIl80zI+sF2YHGUYX*w9xB*w$hz-G#R0!sNC8x=eLh5G2_m+qmzXF z=p`6f$~vnawrTyE$GD+16`L5kd(pUUX-^$Je?=5X7$PsFoXTMVv&SIa701??%(p1w zI8Kre_Xg7uDImv4XXqLZ1nE@k6jq;{wEVSBIx$fhg(hEf;wtwP?Rn9t`qVoD)7Am- zJYZd(!S(^m95mxkkW8-CthIQy6qKDA>yOuHXV)3$p;v9yGr1ut@(3i!h5Ed5+^u7{ zzneoX9i6ADTrA(b>sBqugGsT;#O=l$T(&7(I+wp@ng~aKV%XD&+C_ilwy~qDGEQ@vaye| zK9Cl=)i>&lMcSE?>Znm9+MFayO4#R0jTQi{*6y0olrY*-tNC||(qkM(DxqTuZl}7e zBSb25LV2}~o}{_z-Ijo+w)ja~c2byM+!n~Kg=WB%@^&ymq^DK^s<^3BBKyiQc=HK5ldUgkgpVc3%SE#r(#q-a*#7@+C4nT*GTbY@iuy`md~;L(8@NwJJMQB1&h zeBC3!*1IUn@;~?I=uxwl0t5u&S;a7I;tk@dP1|6+Ps}R?NhLlf9yRHL#E(puJ$_@H zcbQ|EyqQYQ6Z6DEzJ=u$Rtly@JV_i;HJ$Rgw8tvrEyh}@qBQQwUKq~mE6Yr$IfOVC zu>=tUWK>W@2{xj%>ZDjm(tgaxKj8XBa>?W>LLtWj%FrOWey~6I-K~|I826IGF`)g$ zaXyBD&@ND~I?ng8XHE2lRElS%AysdN(&QB{F2`@U*+rs(VVJjeWP zzRO1#M^nW|`&;qM&UfQg3AxU2)bKZXN7wfsZ#~}A*Wcz-dkM4m>fqO+s>`yd=pz33 z^Sz}S1?=Ce*A333t9aDd&oPJc%WLN1;Y&S2q8MY z^Zc(0A>Q(uK#2UfuI$IRz)E`@Rb`9?PdHSt48kBp;1D_c`5uHAt{8sH z;s<6PZjE}@(m(~s35s_B8_4$j=KZX{?FdVb5U;!OQP=?Xdx6$R3n3adNF1TPqaSrt zf(OBlusC7Yy?v#&#>gRvopm8XL~IBM!Pa+J{gy*e8-%>?z8e`yxxVeEoWI~R`|Ewi zj!4Kf$O_{eC+N@7=w~Cb+j+k-~_WQ9{*b{ zk&m!7rV#?L3Su?n*f8*q=ZE39;+nQ=t7h;8W3cI8{eU<5 zIu6P~>--#Dpq24_3U5IO>{DP?Lv@Zc*LvaU;5>jKglGQY7|v0&PpdHE#IOM%ie}%! zsNnu?E5%pu4$P-)&H>&XA$m@*CpB`(ME{BGjQf|z^XWU?9SZCq>{E^W6fjL=e}*$f zMCE-NHu4$>-u1P%0=QMu7)&#u5KGW|sg)RxL2)AI$X1Q3tAGUzh`WZ4Gh2{icG;vzcX!!f5ipgr zAKjFoce*YmU8!*H001 zg_7GNyO=~Hjti{OmL1-WXzI@=VfshvSGo)#nCg(nmT9{BBYp&~pd(s@=#fH=&|;QE zMB!*LvIlVYgGXD3*`UZSpjc(kk?gqglJ~MpX~#L{@ARV}n`lh5gwcZUtEKtc-GdN) z|mnjuulcLTu+6%j{K~B5-+oIJkm=nwMms&B+&d=XDvz;%MM?1zGDG+lI zV-k%wa_|-oaf>gH;*}9f_E&7SmWeelB2TYVDmSv_?U@l>oFEYf(N9=MCdSyw&xt-^ zu_G7QpXK(M^&5wVYTWI z)1WhcNN#U`;;X~hPDcp8F4r|YthO;vi{(GXeCqfsJRB-#JO~@cXhfS4s)R$x2fqk5 z_`LWFIYfvvK#>QtUf>ERWQcOsTBFST5pS=xZ~=awgb)lT#?@IwIX5yV{rNE_F-M;) zs&QRUqKnNI@%c|b-~YNf;j&cD&giOleQnh`na_-Hqjh4L6vj6+{}tc-VzJ|AatM+? z89~6W>~f#ywnG}bOtT~go1&3t_W6uq3MU4Xy~4jmtpGP$L2VS44bAGO5Px)B{UW^# zrx_o?7tf3#a_1z3$nvbCmY3@V{fa8l+6IaOku}=&tmOC2i2-E~9)Hxu(0&}(bgYLW z+VxUG|0IYbVi^ zeuNHDpfC>tdUXLRjO*L#BFG;R?S)G{fgi3?95^D2bRuyHL@7#hA2xf=v{`NF+RTMt zJtt&SWhap=;|yX+bL775@SBu|&zoPWB&Jf6su$A8gqO6^XN-`7mKDg&4e^hEc}^Vr zZ*Q$&wz~fdp$}5-r}M>VM;`IB*mcKkdqA#hQCvexOpEDXE7nQD#Cm>5cd2 z%!xdE3D;@Ed?H{5xbCg-tM_a;;T5Y*XSJf~C_!N)byYyjqpOzUm5KLQ;a`prhun=F z6&gSl6_K*e22mvYEB?lYQxO8yfC@F?QeWt#UP&shO;vZ+8ym6}zU%@ThzhJ)Wi#r@ z)^W;u$n0Pe_v?6s7^=})PGDE<^ZiE5#2ij|gqVpIybc)lx=R`}(neDtQ8!JvKiP6_9v39lioG=H@S+J=#&#rSft98CCd!0n4&HvHHn0m!BLP_x^LPjDOoR z*WWWo^IK0jirATU%wuQ6;a@y^w8L`r)_W_mB6q^}C905dcc`PMx;6!=thQ5!Xx_d! z?B*{Xdl{Xf_8`RYeAyk|;_Z~OetqfNJUTKewrgXb9`(gzFQXhvcLW0z-9sux(&tJT z5J-F(v6}UU`cW5%xH}2K{)=pm#-9Bygh07^u7AgX6V$i4As%9;hW<6$!{&9ie}Qfo zO?jiry>k)W|9@UVaFGye^n3|wY=t?f8QKw?BvK!R#x#Xs?@O)-d~2wE{hvd(?I%GOw&ybLYQfQJoZcD@qNIT#_3H=F7Z&QSq*M#>=yTf^jluc$Ca zNgcT?wwdzH{d;yDcP;~tc?e(xMc8Hf|9jT)80LgL2@(}m6P@f<^ks)iy-6o^?b2Gp=oyw)kI&L<1l3<-`$ zh_D0vTi2^7)Et3EDXB)eeoMsT#3C=fa@aK%Qzs<$MmTsjEX#7Zf8@Z+ID<%1gb12p z5&dBK1ZEE@T2O2V9t{vpc|>QaV+Fp=gG^n<)P&on>yLPBs)qlwykYQPSUzF#!yyFo zad=c%h8ZBnOR{ccp3Usz5Ri)RnO+RKFTRWu5aRWW7OCQ+Tnt3$gIi~0wBxOh*DKH9 zZW};i!)3f5A>8VB2=PFI6(KAq(9xPO_JxT5TcX9`e4fzK*{(ypoymXHWpofi*W-|n zw;R_koig|-wV-$#MeBVopbi_BCG&H}=<1}#l+`d=3Pi#o)~M@^ zF_nAv;B65MrK)%o6*ydnh&>H$#FSm}#>xn)gT)fNzJq-so;OHT$0Uv{j=@|UVcYqw zua5W~W75PwO_6`Jd+y-XwEj#9N9gAaeiY-u8lx-ZH8S$8T+F%HBj2fLea>un`XWTd zK1Xw=w7MPj`}pFz`JvJj&ilSIx6UT}3^x2+5zaA#kMc%Z!sGB-k;A&n$mliS{k9sPUK9=#zieYu9qznR2Y*nkisatNH^IV^S}HKaHaJMAFt;eib}3jD^2gAgKgayJMu z$Q`Xp)sOQ*FUG9){fGpyPhY1N|NS}`A$)wRtJ0yU5~Y%Aqg5@+Ugy5553KJRde4cY zW`kzkR)w(oW}hv^>H_Kat-+$1WGYAXrMzdx&}Y@yfST$Mp{o|?zDKKF^XO{KT9#Pf zl#iax%2Gl|W!L0arVUwHgNX2JcwHSOh%cMAU- zq0_6*_3^#u#GdJpTM0wQb{Tebnd#CgS#KP|8)SQK);$|evM;<9$@_iVcV;TuYuf)A z*e~;(=zeXsFH$RmR+X;2m$-XYyL$ef=X%eH*$tyoqTQ}B)*7>dWUu!(%fT8eOpq#L z+d1?7v}f%L!LcSlW!_jF2JT5`pu+t+j6;Y7`$7>ygp!l(jLkg5!un2^dwpMz4N!+L zssr{w%`25vy=ozf(gwE^^8_Hbo;x#adle^;FNYm6MUpg;Ah_DAt_Rwm2 zL^0R>*g}xM5h0ZN6oVc$aEQ5R$^;@}eOgnu>M>8x+bQoCL1_N{+nn2O&(|f0zqhe=e_jVmq*|IMJdw3v+Wc^W&+cllX3viA z-O8h@<+@dyqtRcpDeCz6_|$xC%o8CR-Ff>JtSx&ui8sWZa>xbU+^Ope5h9}Fkl77A z7dz)#p0R@z2&9*Vm3@L9_ZK{?{Td!G9Z1{WD8eE7^{RQDs9Yh~88H<))YhFNf6r{- z)xqH%ULhvEkKM!BkpAs@$nO=3;9im~=8$l0(%s@+UYvW4NYa9KA@Hy}3cv z=%Gd4E0E=q#~L)>%PkmJV0U29hcwz0s%f&#=zHr`m;rG(18Y8-~N(r)ZeO|fp zS{a`|1Mtq4l1}2B=e+f!=!KXQ;48Ex$)^} z&!VhqKJ3~BOg?8m$2GNhGgMHRO)C8kv-;srJ=r}KWa~;=)x%;x*cn6`5f6g}foGo# zCJWBgu=83P=*RR&rRyU@h|jM|)1M8J*X)A-YHi%-xQjG0Ikk+lt>>)J%+Em$Th$eX zimdxBh4*Ewbf9_lfj3%`11jS)Rbk$J&g}p~xZiqwwaX#=S{K1Jqi9u1!Byxizw7oK zAEXn7zbKJ`*U$dq?!rx_xQ7rxAL1INGK3H}J8}k^@dJ?c0jiROSnTc_t8d{93(-l-!u;acNvrl#)V_AyGsm4tt6W1*9q8G|e;3Di#?17W zf*HL7p^nyiCObc7QR0f6C`+R6kr@@{ngy%JjjLPG1^3_~mPr#K% zW`TBa&i`9LuXExxorn*$u_k8m=kcfDop3#-ZeO?$z+=JsCx#Ac0U>Zj7)c|eP#&?h zW^>+~bz2e1s$ObdB{N`#NL9fCSpj=1>vrn&Qh!A5E=Ep~Y5aF3wKDmtwRN~BJAvgLGLx#2%}#|$$07PuK(3ANmzGwYWeh{}bJEKA z&K4zVl1N%tTLm*}@2jJ=E4bP(iORAqB8zFP-X4)D%Sc6MSWyoltd&t!rX{PpF+`|V_U zv-jd7ADa$&i9koenIjAZ(>^~tYHOmE%`_E^6Wp^^*MgnNm(jTunRn{#p+aVfbRvAJ z>%rp}8b+p(z*-lrY*J`7puqNijqqA~pn5}|yKC!!O-1F(=13OLFh=V@sMe_sUXoYk z6jB{QGCKvY(S9eeq=SuiZ6(4XUe~WJ#?Z;v6^9TVZ7WeCMS9(Tvpv2)_h;Yf*-hkM zoUYM?NenpD%cFvp(MD{5yaCr2^u3(r2qft9+mTObqX!3$k(tRsmArCF<}H)bA6wS( z@8DDR>mVvj9YW}w7Mb}_B0{i!d|vHZqjkaD4iaKjrK*b%;CI_OsQvLfYZO-K9k5}H zjUIm8-6nz-Zk#$xGq)gKdP7tv&qWBCscAP_0WxK|=vyfYKJMe1kC{gz{ntJfua zB|lU9sF8`4*%7NZ)p=Ov5JKixe}~_asBWY#@EUkBj}z2(C(Nd_II5fxs;_jhQ<<(> z$3gY-U=2bPyK>)_ZB)8MJb)SHP8)WL!!9OB;rqv@&Emc){$EfIK$aKs)Dw;&ZC*EM)hsw~4>k*={ z)?aHel+Dj(C1t;WB}XPP5$7}7HK~FUGgn*Q7Oo+hZX-VLR12SQyaPSYQS>$wgaDR~ z!wLKGgH`0-@vSjM{W)7{i$^k>IXy!)(FP=mSE&2c=@u(#v_3>?)gh1PKo&;>A$W96 zv|_uJvx`jgIc&(Q=*?h8hhulgAWo z>lxg(r^#`yDsN+@lK3lP&1+RTcE^>>-8adOJnEV&+jcftc8cuRaSjeuv~vV1_QJls z(|NzHdQtF+W)wBlMmw=gv(^)54-vWJlL`otSfx1nkHq(}Gvy#`kjXQpJC0&+sv)*VI6}NA3qHhjoj?Zcd4>(PoH^obX8{QFs3pep=qTG zoC(5)WaJ5X2?v7?d42^=L#*g)wSYx0b3d_rbzjpIjFURg_6q`2F+Y&I5)6)ggEojdT7KcjHR zD8jBfglN}V?Q_~b%Vlh1!k*3%E458Zts<$ZB~=zOsba827j7w!J2XmIg)ZhNJw50@ zGdooptXPqZSHC@%afe^Xc$aoLKhDomAHBDr3q*~0%A^JOXr`n6m zGGXoNXcOon^)=U58@dJ&`$A-2M5?s4VES*DI)6Nmgcxll7JEYOtTt-Sh43(-*Q$2y zLvU50B8)03Ghi#Th<9DdaBVtXtrA}sRk%ro2Jf{ZM~(jq`Yg=#$GcRhUhz4K`?QA& zdDk78v?KDBy^*Oju6cvSu`&SBes0-R{`FKu(*~s>$K&vKV>X4OHlCBB%z1uhjxl59 zC5$nW%rLY%g|E@P4qsN0i&ypIc#vLI{_jdK2Cq+Lc%Sv$YBJK&j>y;UHcfMzKc$#A z{MU=zb3H<7kcNfTw);^1Z|UNwXuiG)Z>ZKi!-*Ex8+LvEi~aqWtTu9fT3<`kif$9A z;CM_2^8gQ<(48g}0W_ObXGiShK2MG|iB)}Vf4Yv7@aoaDZi_Z^DVz6Xf+a{@|EjRy zW;l!XcZylROK#D?PnGV(h&>Jav}Wj{Su9<*Zgig?q!>J5{q=WGZav`HRC_mAuL=>C z3E7S6>0?#L+tOz$Qyk(DjX~P}$&FY`I%_1h showMessage(msg.id), + "Delete" : () => { + MESSAGES = MESSAGES.filter(m=>m.id!=msg.id); + saveMessages(); + checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0}); + }, + "Mark Unread" : () => { + msg.new = true; + saveMessages(); + checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0}); + }, + }); +} + function showMessage(msgid) { var msg = MESSAGES.find(m=>m.id==msgid); if (!msg) return checkMessages(); // go home if no message found @@ -163,30 +182,30 @@ function showMessage(msgid) { title = g.wrapString(title, w).join("\n"); } var buttons = [ - {type:"btn", src:getBackImage(), cb:()=>checkMessages(true)}, // back - msg.new?{type:"btn", src:atob("HRiBAD///8D///wj///Fj//8bj//x3z//Hvx/8/fx/j+/x+Ad/B4AL8Rh+HxwH+PHwf+cf5/+x/n/PH/P8cf+cx5/84HwAB4fgAD5/AAD/8AAD/wAAD/AAAD8A=="), cb:()=>{ + {type:"btn", src:getBackImage(), cb:()=>{ msg.new = false; // read mail saveMessages(); - checkMessages(); - }}:{} + checkMessages({clockIfNoMsg:1,clockIfAllRead:0,showMsgIfUnread:1}); + }} // back ]; if (msg.positive) { buttons.push({type:"btn", src:getPosImage(), cb:()=>{ msg.new = false; saveMessages(); Bangle.messageResponse(msg,true); - checkMessages(); + checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1}); }}); } if (msg.negative) { buttons.push({type:"btn", src:getNegImage(), cb:()=>{ + console.log("Response"); msg.new = false; saveMessages(); - Bangle.messageResponse(msg,true); - checkMessages(); + Bangle.messageResponse(msg,false); + checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1}); }}); } layout = new Layout({ type:"v", c: [ {type:"h", fillx:1, bgCol:colBg, c: [ - { type:"img", src:getMessageImage(msg), pad:2 }, + { type:"btn", src:getMessageImage(msg), cb:()=>showMessageSettings(msg) }, { type:"v", fillx:1, c: [ {type:"txt", font:fontMedium, label:msg.src||"Message", bgCol:colBg, fillx:1, pad:2 }, title?{type:"txt", font:titleFont, label:title, bgCol:colBg, fillx:1, pad:2 }:{}, @@ -199,28 +218,37 @@ function showMessage(msgid) { layout.render(); } -function checkMessages(forceShowMenu) { + +/* options = { + clockIfNoMsg : bool + clockIfAllRead : bool + showMsgIfUnread : bool +} +*/ +function checkMessages(options) { + options=options||{}; // If no messages, just show 'no messages' and return if (!MESSAGES.length) { - if (forceShowMenu) return E.showPrompt("No Messages",{ + if (!options.clockIfNoMsg) return E.showPrompt("No Messages",{ title:"Messages", img:require("heatshrink").decompress(atob("kkk4UBrkc/4AC/tEqtACQkBqtUDg0VqAIGgoZFDYQIIM1sD1QAD4AIBhnqA4WrmAIBhc6BAWs8AIBhXOBAWz0AIC2YIC5wID1gkB1c6BAYFBEQPqBAYXBEQOqBAnDAIQaEnkAngaEEAPDFgo+IKA5iIOhCGIAFb7RqAIGgtUBA0VqobFgNVA")), buttons : {"Ok":1} }).then(() => { load() }); - load(); - return; + return load(); } // we have >0 messages + var newMessages = MESSAGES.filter(m=>m.new); // If we have a new message, show it - if (!forceShowMenu) { - var newMessages = MESSAGES.filter(m=>m.new); - if (newMessages.length) - return showMessage(newMessages[0].id); - } + if (options.showMsgIfUnread && newMessages.length) + return showMessage(newMessages[0].id); + // no new messages - go to clock? + if (options.clockIfAllRead && newMessages.length==0) + return load(); + // Otherwise show a menu E.showScroller({ h : 48, - c : Math.min(MESSAGES.length+1,3), // workaround for 2v10.219 firmware (min 3 not needed for 2v11) + c : Math.max(MESSAGES.length+1,3), // workaround for 2v10.219 firmware (min 3 not needed for 2v11) draw : function(idx, r) {"ram" var msg = MESSAGES[idx-1]; if (msg && msg.new) g.setBgColor(colBg); @@ -239,7 +267,7 @@ function checkMessages(forceShowMenu) { x += 50; } var m = msg.title+"\n"+msg.body; - if (msg.src) g.setFontAlign(1,-1).setFont("6x8").drawString(msg.src, r.x+r.w-2, r.y+2); + if (msg.src) g.setFontAlign(1,1).setFont("6x8").drawString(msg.src, r.x+r.w-2, r.y+r.h-2); if (title) g.setFontAlign(-1,-1).setFont(fontBig).drawString(title, x,r.y+2); if (body) { g.setFontAlign(-1,-1).setFont("6x8"); @@ -261,4 +289,6 @@ function checkMessages(forceShowMenu) { g.clear(); Bangle.loadWidgets(); Bangle.drawWidgets(); -checkMessages(true); // force showing a menu +setTimeout(() => { + checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:1}); +},10); // if checkMessages wants to 'load', do that diff --git a/apps/messages/lib.js b/apps/messages/lib.js index 4bda60e65..3094b34e1 100644 --- a/apps/messages/lib.js +++ b/apps/messages/lib.js @@ -17,7 +17,10 @@ exports.pushMessage = function(event) { mIdx=-1; } else { // add/modify if (event.t=="add") event.new=true; // new message - if (mIdx<0) mIdx=messages.push(event)-1; + if (mIdx<0) { + mIdx=0; + messages.unshift(event); // add new messages to the beginning + } else Object.assign(messages[mIdx], event); } require("Storage").writeJSON("messages.json",messages); diff --git a/apps/messages/settings.js b/apps/messages/settings.js new file mode 100644 index 000000000..ef6266cf6 --- /dev/null +++ b/apps/messages/settings.js @@ -0,0 +1,35 @@ +(function(back) { + function settings() { + let settings = require('Storage').readJSON("messages.settings.json", true) || {}; + if (settings.vibrate===undefined) settings.vibrate="."; + if (settings.repeat===undefined) settings.repeat=4; + return settings; + } + function updateSetting(setting, value) { + let settings = require('Storage').readJSON("messages.settings.json", true) || {}; + settings[setting] = value; + require('Storage').writeJSON("messages.settings.json", settings); + } + + var vibPatterns = ["Off", ".", "-", "--", "-.-", "---"]; + var currentVib = settings().vibrate; + var mainmenu = { + "" : { "title" : "Messages" }, + "< Back" : back, + 'Vibrate': { + value: Math.max(0,vibPatterns.indexOf(settings().vibrate)), + min: 0, max: vibPatterns.length, + format: v => vibPatterns[v]||"Off", + onchange: v => { + updateSetting("vibrate", vibPatterns[v]); + } + }, + 'Repeat': { + value: settings().repeat, + min: 2, max: 10, + format: v => v+"s", + onchange: v => updateSetting("repeat", v) + }, + }; + E.showMenu(mainmenu); +}) diff --git a/apps/messages/widget.js b/apps/messages/widget.js index c40e9aa05..3a22b40fd 100644 --- a/apps/messages/widget.js +++ b/apps/messages/widget.js @@ -1,3 +1,4 @@ + WIDGETS["messages"]={area:"tl",width:0,draw:function() { if (!this.width) return; var c = (Date.now()-this.t)/1000; @@ -5,9 +6,11 @@ WIDGETS["messages"]={area:"tl",width:0,draw:function() { g.clearRect(this.x,this.y,this.x+this.width,this.y+23); g.setFont("6x8:1x2").setFontAlign(0,0).drawString("MESSAGES", this.x+this.width/2, this.y+12); //if (c<60) Bangle.setLCDPower(1); // keep LCD on for 1 minute - if (c<120 && (Date.now()-this.l)>4000) { + let settings = require('Storage').readJSON("messages.settings.json", true) || {}; + if (settings.repeat===undefined) settings.repeat = 4; + if (c<120 && (Date.now()-this.l)>settings.repeat*1000) { this.l = Date.now(); - Bangle.buzz(); // buzz every 4 seconds + WIDGETS["messages"].buzz(); // buzz every 4 seconds } setTimeout(()=>WIDGETS["messages"].draw(), 1000); },show:function() { @@ -21,4 +24,13 @@ WIDGETS["messages"]={area:"tl",width:0,draw:function() { delete WIDGETS["messages"].l; WIDGETS["messages"].width=0; Bangle.drawWidgets(); +},buzz:function() { + let v = (require('Storage').readJSON("messages.settings.json", true) || {}).vibrate || "."; + function b() { + var c = v[0]; + v = v.substr(1); + if (c==".") Bangle.buzz().then(()=>setTimeout(b,100)); + if (c=="-") Bangle.buzz(500).then(()=>setTimeout(b,100)); + } + b(); }}; diff --git a/apps/mylocation/ChangeLog b/apps/mylocation/ChangeLog new file mode 100644 index 000000000..7b83706bf --- /dev/null +++ b/apps/mylocation/ChangeLog @@ -0,0 +1 @@ +0.01: First release diff --git a/apps/mylocation/README.md b/apps/mylocation/README.md new file mode 100644 index 000000000..fd597397a --- /dev/null +++ b/apps/mylocation/README.md @@ -0,0 +1,41 @@ +# My Location + + *Sets and stores GPS lat and lon of your preferred city* + +* Select one of the preset Cities or setup through the GPS +* Other Apps can read this information to do calculations based on location +* When the City shows ??? it means the location has been set through the GPS + +## Example Code + + const LOCATION_FILE = "mylocation.json"; + let location; + + // requires the myLocation app + function loadLocation() { + location = require("Storage").readJSON(LOCATION_FILE,1)||{"lat":51.5072,"lon":0.1276,"location":"London"}; + } + +## Screenshots + +### Select one of the Preset Cities + +* The presets are London, Newcastle, Edinburgh, Paris, New York, Tokyo + +![](screenshot_1.png) + +### Or select 'Set By GPS' to start the GPS + +![](screenshot_2.png) + +### While the GPS is running you will see: + +![](screenshot_3.png) + +### When a GPS fix is received you will see: + +![](screenshot_4.png) + + + +Written by: [Hugh Barney](https://github.com/hughbarney) For support and discussion please post in the [Bangle JS Forum](http://forum.espruino.com/microcosms/1424/) diff --git a/apps/mylocation/mylocation.app.js b/apps/mylocation/mylocation.app.js new file mode 100644 index 000000000..fb2f73fa7 --- /dev/null +++ b/apps/mylocation/mylocation.app.js @@ -0,0 +1,75 @@ +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +const SETTINGS_FILE = "mylocation.json"; +let settings; + +// initialize with default settings... +let s = { + 'lat': 51.5072, + 'lon': 0.1276, + 'location': "London" +} + +function loadSettings() { + settings = require('Storage').readJSON(SETTINGS_FILE, 1) || s; +} + +function save() { + settings = s + require('Storage').write(SETTINGS_FILE, settings) +} + +const locations = ["London", "Newcastle", "Edinburgh", "Paris", "New York", "Tokyo","???"]; +const lats = [51.5072 ,54.9783 ,55.9533 ,48.8566 ,40.7128 ,35.6762, 0.0]; +const lons = [-0.1276 ,-1.6178 ,-3.1883 ,2.3522 , -74.0060 ,139.6503, 0.0]; + +function setFromGPS() { + Bangle.on('GPS', (gps) => { + //console.log("."); + if (gps.fix === 0) return; + //console.log("fix from GPS"); + s = {'lat': gps.lat, 'lon': gps.lon, 'location': '???' } + Bangle.buzz(1500); // buzz on first position + Bangle.setGPSPower(0); + save(); + + Bangle.setUI("updown", ()=>{ load() }); + E.showPrompt("Location has been saved from the GPS fix",{ + title:"Location Saved", + buttons : {"OK":1} + }).then(function(v) { + load(); // load default clock + }); + }); + + Bangle.setGPSPower(1); + E.showMessage("Waiting for GPS fix. Place watch in the open. Could take 10 minutes. Long press to abort", "GPS Running"); + Bangle.setUI("updown", undefined); +} + +function showMainMenu() { + console.log("showMainMenu"); + const mainmenu = { + '': { 'title': 'My Location' }, + '{ load(); }, + 'City': { + value: 0 | locations.indexOf(s.location), + min: 0, max: 6, + format: v => locations[v], + onchange: v => { + if (v != 6) { + s.location = locations[v]; + s.lat = lats[v]; + s.lon = lons[v]; + save(); + } + } + }, + 'Set From GPS': ()=>{ setFromGPS(); } + } + return E.showMenu(mainmenu); +} + +loadSettings(); +showMainMenu(); diff --git a/apps/mylocation/mylocation.icon.js b/apps/mylocation/mylocation.icon.js new file mode 100644 index 000000000..bfb38d5ac --- /dev/null +++ b/apps/mylocation/mylocation.icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4UA///t/7j/P3/vB4cBqtVoAbHBQIABBQ0FBYdQBYsVBYdUERIkGHIQADHoguEGAwuEGAwKFBZg8DHQw8EBYNf/1Vq3/8oLDIwNf/Wpv//0oLG9Wq3/qBYJUCBYuqBaBqBBYW+BepHEBbybCBYP+BYSnErYLDyoLFAANq/r8Ga5T7MBZZUBAAhSCfhA6DBZhIGBQg8FHQg8GHQgwGFwowFBQwwDFwwLMlS7Bqta1AKEn2q1K1C1WgBYf/1WqBYIDB1QKCgYLC0taBYoXB/QICBY0//7vBAAQ8EEgIABCwwME9QVEA")) diff --git a/apps/mylocation/mylocation.png b/apps/mylocation/mylocation.png new file mode 100644 index 0000000000000000000000000000000000000000..7148990a42a1c8858d933d2a4cb35b80123a5505 GIT binary patch literal 1909 zcmV-*2a5QKP)1f{oIeq9#IX zOf{({O-*cUKk%VRxp+%YMPU&efj|3B}%Gtc{uFh$VRFTVr&05N+hmOTqw5{SsK zRq^~hp6S9jhcVu7mJ0i>}op)z!;xQ{&^&`R#GVwH9WEaeQfJ>BoptFh|R8ypn@@g4s~Z+ zAOYPL+%Al}QXb#%&nSE%3DC#3-bG{mOV}Y--E|?8ANqHT!{ow5VmbiFlKYm+Yg=}jras6GBg@72L>|d5wlEoY`!pQ*klg6p{<$e z$#!B+vczB%x_gHNTpqkfI)1CXn97GaO}wJx(crv3fxPd-g^QPyJirPX+zpdCg^qxx z+HRqt@!gU}&xek#ArY4!IV}HL*|GI}Ifw8OaN;kPoErn37e~l@O--0YqB?4}jo;XW z*U%8=mBiSa!W_zufTp%x&$Q$*##94z^*}BUmc@nj>xj>20>D?LI9MS6!ACTmJw@}W zPjPbDl6>wJS1@?fHzeuwyndoVNc@M_IV<<#JS9jLwtYTe^dcPFZP|{G#NA zlgSN{2MP=3kB|pQ=anAUMi(und(mRV7+O9)PRobKFmvbPee)(_Gnx?~K1@36D!HN| zS5(~V7IWpn{S!nFBaT@20KbkVz;V7ka%>d(M#~j{+-=jB^-&!?SIeSj(PB=tUQ5!k zSUh92Ov)9N&a{tbv?PbILn;!{`^pIjoCBIlH4$@0Z_e~!=%m%MmQoabrG3DgK)wPj z(^M+(Vh2xRNvvr}{R0V3DRW1-p-)Eq3plK9B6Tdbwq%Z^|H#*Eeo|Ca)kc3|kqQ{}9i za){L#)Eq3JXbu73e@4gyARh*`1`D{VK4fhn>?vm| zUkgcMFSt8_dAjvflrXX3}lk(J;L2)mG{uD2UIU%<)dn04%Z zEU)a#GDqILT9#&60f4T3HS0f@UoEZawVs}5zn+It; zdy05}f2An_o|m1Qe_YO3egpt4e-p;OpMX&aLZYviL|-qn{&AGzv_{fbwj#|<)So#+ zqO&6k=}X9h_hgvEXk8A+is_A_SuwHg<-WKLC`J%q##516Wri@bM_#-pp+b46X zY+vZ7kIu)_zXP*srd1hwu>7xwE#@y_@(}=J`&0ix`2m%$U21`%`amV*p+W%wvTO5x z;F+pvRoszmlU-Y0tJJ+>0RVKIco>y8B9p2V!U1N)9*q_f5&DyjEjZR+for11PJ&PI z%yN0Itv52fIQpwCdv<~ZK{z!JVy{A8q8gjsZ+0gfxxXiC>NABhx4bH?2lq4Q zgK!ZSufKt_x339aD2(DTqT80vkG~=!p>r%WONZ(l9n_B#jQ0IcjU&x&LnG%_t>)Zqt1BlDAiAc(cJB&x2{WGTFW%7{v){1Cd|LGtdNV$Q1rxsO zqDp*V00i8|rf9@RleF8mSrIlTCe3=LS63z+-Bahtf^q!F6_u=O$a{+G>s0Q6c>=#T zmiO?o`St$_bFBEXobD{%;>7Hq#T{;TET&slX{Z98uXqMLqxi%Bc~>b^wn3H#4hy{I ziTBF#1@-@~B&e!Qn=`6)^!VSkExB1lz9JT_7Bt(I)LTMa1WN!BB;y)72K)iQ2g!hT vfnGqRQ;-viIVr;N(+lDs-76CL)93#HbI`dUZ#9t@00000NkvXXu0mjf9c-jw literal 0 HcmV?d00001 diff --git a/apps/mylocation/screenshot_1.png b/apps/mylocation/screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c61b6b35272dabcd77f7262d0ae6a2e9099057 GIT binary patch literal 2847 zcmeHJX*`sT9(`tdj6tJeh#^Z^do88mZD>N4QI)x;T<^E+#aA~Xs}2G@$ZgN9v2Y>jlqEg*DD`m%hRa;pL!7t{o6EBwJva6|zJI&ao4NFi8B2XU@d}{= zp^OCpEOgwB$x!Dv<8+vdo+`;DVb(U%`kx4sX_dY85{s(6|Th2LvD>&(-3GSCz) z5HCz4o0oLfU1=p%E76aq4(hkxcl4j}FOM5ilTpu>I1-2N#=}LG^=rR1`(H4!ps$;3 z)&KHGxMe{7N-esDREc7VlZqs#U&W(BbHvZB^M6H#Z(&1iHU?i{G5zi3qOrg@e@mZN z7C>M;_6qu;Ov=@ov5X?!ZYienws0{MHMK~}$$NJ;J|zKu3a!7(kxSHvigBmS4KNU8 zahM-9B5L|cuCjm^wd;|oI)|Dw$@=&~Dn;=YR4!_?q)4iDTe%2!Akl7%3scBK4bqXI zPKbPW5+8jiP^TrLD6i*6GT=(t=i?`93*u7;4`zyT)9Sy8n9_gIWX?`k0;yxL%2ljV z>H#HT7q<6d$GE4d9=vq@f%WTzIVwH1@HF|20yHl7-chDXrfB>0l@V(Xnqc}1g|Kcj zx5CW$^JCp^I#HJ7a3L@ZosecKx1b`zKHW$1tyY z{05Vg_9{TCM$J5shE@YhzfDTHXoXqyM41sC6P8(*raDSF>TR=)`QVx|UE`@{Y!cvl zy;$39Kq_{Fv6BBPOS(Kv{oUuXR#RTOuJ-Zl%JrTDWszD&tG`?5ijukS>!<`Vf9-s) z%L5}$!3S_hul7HeffaXM9r>AdKsz7d=I070P^WEm7Ro?8Om~C!(z$3@WMN8;L*b~n zJor{(D&S_iIRR**vc}jAwUUCYNuMFglV(}hzEy%lnB{Xb{oDq^yZ2E8GD2c+#CZ+y zSq-%3zWH_h*!FG`R>L82OB4CMQ0GgG7-6kv0_F4DVKENX`Euzf7Tg@>=Cf;9}(zL5P$QoqbK@*6TtI}#kBb+4&F9@MKFpy@*J&FD#DS~VuJ4*I%)j& zjSlmnx?^mSDR>18zHG{qJ$PO#u}x1mAppz;{4N@9+cqVZhzHXu?zyiKx%;5~=pL<* z%`&g7D2dl1i0M^q;qrPy2BR_=;)fgiwi`^UOou-h{g+6Uo?;d4eAGlqUf zk({3^)j!)^4lVF4RB*`HHKbr{t;92OPVFV300|t9^+spUsv9;F!7j9j!Y~K}f>Fdi z1)rBM5UeM@Gvl)I1D<yaBs<35`#$y^#nUgB&*xz^@?k02L_ znmf6R+YPqVF8I;fM1X-D?a_>}>usxDN@^ANy~zZ!zj})7Hzxkiz9Gnf5qY7s~*|QVS-**z?@unQ?(Mg*^>FPM|1^ zmpGMH)d$P+86H%4vfUeZU+%_Pd+!8Mq+%0astUwVI~9;GG8G-5sqg3GqwCi7P&J=H z{RidF+IzwK%dc<3ndn^UKdiju?)b%2g_LqSZOO0SV_Y!>ScWgAm89qBgDkHrm3 zzirzsPj8<%aG?G_J5*jkR7Qn(2G*^F?cZEpHBj|vNdh)|5P|K>eRDOr&57M+sKeifi_28K;!Vp&P)rX}koxrrOiIgZ5hCeJ`FA4I!!@!11Oc4f)#)!tSdtQIu zx=F_N#MaFwQ8l!s(AAU*GUAGlTJ+}{3ArnbNFqYN-4J1pt81Z5pU>?Km~PVB!&o?E$8EO7Go`{@cfuwSIPV-jk9_1|Vi;3bJB)z#gd8ffgV?^dm-$2WhH-CpaG0?ZOf5}ve*bMmcJ$v!E++BJ5t?jj| z$*oV}wVOf3Qnc$L7hK1XXzq)#L>m&_ctAE>t@`yd*4Z!k~ z3a}orGZ-3t7GtKhs~+cqL&x)7(gfyoVw9o5mQ04`Z2(3VqmY8Fz~B6huf^CEAt#x; Pix)U!N-|*?xyAkq*A-bw literal 0 HcmV?d00001 diff --git a/apps/mylocation/screenshot_2.png b/apps/mylocation/screenshot_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4c4404540ffebeec33f1a4dbdcdd560d25fbf936 GIT binary patch literal 2642 zcmeHJ`#;l-7oU&G$iu8uQm&1jgrv(Jxg~d%9#3SO%Q8%+2xYdpOv)v!DYpzI)%WW* znIRcVM2SV&a*2J7q-|}5nWxmFKjQoS>3d$UbI$91Ugw8%-sg2*uXpyTlkUH%Z&wF_ zK)-oXdYTX{DIX@@v(?yeSo-tz zdn?Jv{mtkCi#0@;{1ZKN7wG`v`Rk=GzbrEqO867d0;deW9G3V1kX(q>2@oZuoh(ZD z@r7{f@&ne0tH4(*)$Tw|<;|4#K)&ne7v{%pYKwBbv$gB@SW!*X$+0P&${tmeJOj|r3?$L!4T(_Rs^4Mg7Oni$!3J(Bdv2PFT%4{W(F;k; zrHc5(4K3<33(@9d$Y^j&79(|1m=P%WXz9Y!IA^g$O)5!ZY@LJ=(8>nIP5f;js;Fbb|n{LHB zrsVaP>#o+TFXWrZ@>wh0PMGpL{-&d_^x~vCuUK*x2+%q!toDNtij$aY;TtO8{i`Q{ zQP`sMk+1IyKvvDuO?6V6-Qbi;)O1`mggnsH$-M(rBu6C=(1Q2Giq^O$=VFfdT&-Ez zYoEOByl~;k!@n3g;Tbj3~MqIgFV)hLxrQ759}r-RmDZeIG6)k&~z?b#|j;aYQVUaKDU~Ta4V_cK-Xcch~rsBHQ zcqaDS*mqLj2k{sIH{+jsMv0W0mT>t52592=sZ*ZrFfW~?NpZVcX#nNCF1^a7? z6m2qa|FIC;*y1Sz^>Tmwr_4fMmoO@+WnB`t{$4);jqay zCXV>5R$Ale?|J z*xk)Bo8~Pj=9m}<%e+RJzzX@QTHB!knYCcbVKSK;ENKWxOvru zLZW!d@Om2A;9Y_FF$}(lo9<2*sr6U(gsVrtxG>kQ?`U5FkA3k3N(;K~kCrwl!?=5z zaQ!|7mX8M13}gQY zg`I{u3B1~SEX`v7w(POSOW}+C8|~)q8Buc6aQJx9alZ+!#mKzq7MtxWy^>+_hrVHd zV1Zc<;?Gg}w;5T7)+A|Xfo{NO?tQiT>=(q2F6sBk2?J|4m6qKoW!BKV;x@RhJ>N?= zTW^a(Tr-yPVHG>l*K)5sh*>Qit@V)9jGt5^2bNIx8W}5-tn7nH&Hh2?0ag6l_r+ay z-dRkrKh7kEeo;BHFm_E?q^0vUMe6KQV57{iy4jwoo!T^^`P08?R67F0a^uf3?f!K; zsmsi_2+H65!xE{js4mdnov2N@n5!LYVbo+07LbnW>$~<6nYb&BlUP?1dz|*-L6szY zoqKM7ju* zvH-IAXr9NTeM;cqHblapX(OHUs`K)2sXDN6{fn+% zKgN#+994d_uE<5rjF7UjZ>_!gJyFZ^EBaG`)2DGH1q$mRoX@V^ehgqZIH)c+RCsn-8>YCi8^9t1e*ku&Et2^~6_IWCx0k zEmp@A&l~!PzpQ~5`vEvA_9;OKka$5RqQ~~TYGv#eo3#ms4X#fn7QRB{kGO<|oN5zW z=Be2=ea_i@Q7?R!9(k6HMYLT1a8wYDOYLFC%n)syX0eXO!d%Y8WA=N^S}S``l5?w9 z_}pU3CzlH|UM!>;fvh*U=UQUK;=U|0SvrA2U!qwDbfX@jY-D5aD%SFIR|$6wN>MxP z4hD4Otr;jJGH0 z$EfkgZKIa0eKS1JcnzG-OiLv)eTC3^A&sbAIsJazTUjYGK?&UE@ zyuh93&rM@7>jL3Yr)0O)xBA%$SUAQPfb8u((G(3p=qGLw{*V5bOr$EkXP_#pj;2kn Pi$sv8>q(aeXH5D(w(Zo_ literal 0 HcmV?d00001 diff --git a/apps/mylocation/screenshot_3.png b/apps/mylocation/screenshot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..81570670b7988aa92f6e6fedc007c5bedc2a387d GIT binary patch literal 15562 zcmeHL%W~sJ40Nhe<;(s}t~uqHs{I$;{9E~s{FH<4#%n}TA|;M1TjqGl!8CwI4`$@Y z{`K?UKi@e1w)YQv{;{v$-hK!6$>)>Pr>#CQ*6@#WoE0yWU{?Dqgkr`TnlyoyE%@@9nKlCQr&W zU!R-&+fJ*Za6KVPFHGW919Y$bT}d0PS-h*IA$!I+h<8D=0G<=SpjiOV@%}nl{P6R- zV(a$!)x{2A3faG($jr~3xJU%^NnVJI&zR&6(%_Cy;ox|*n98f3a?jCI*F(LwAC`Zl zvHO+4K2G4ZO4MXkq)?^fET7hUI4>K3BQK?DhYNP~aPJzkc>6)$(nPH9V5{mz*38VF z#hV588ck#~_p-G3V^|uYn-h5Rwps~ZG}MSE%JRzUCNKt}5$`eA(AH+J&SiKBY(!dr1$H1mzBN*@!w&t zZ&_YYh@f*o2svWj8!ev13tFf4o2c4X>LA)5Y(RHbh~kO1*IZt-%j&YU>f-$NmG(riPj^|~Id_&##Hn2MJ0C*fi z8eW=RZ|CZE(AaD+_X9|_BMn#h;+=Ww@4{aIBU^ZRZdom`nX8cxVk)l%Hq-p$Du4xA zOrzBTn;A4cmhLg8yMHO0_rv$n?~0)GVp%&5i+9dqY~9~zKxT#w(1udei)FBtwa%+} zC+WFP!b#tnZ}EDD2V6yT)ag>v^Ss!qnq$SQV%J+JLTp65s*)jbC6Y7aj^t&1XrK(1 z4M-?lu0Fh2#-m^b6gI4}p%`v)dXcwCDIH5)Bp6YTGhKm7O@D{S_tbMO>?K|tSyNZk zWerNT@Tyn47y@VU4n_LH8_}U_yB+hjYkfV7_f|#Ky5)Hddxlq+-!gSSAfRmA4&9Kv zC%$C(J+;$#qjG9Q-l_5?55P?@)RfzktQ8KMRPx-};A zTFF%9(qb)L4vu;aO#Di;>z%;Mnmj!_AMoF@>4Bv5QftC+4TDS!H~4toUTdvoin;Gi z9@m>|Gwx^J_jaCUGs!d82-N}-q4MiyBSpGqB4U^uEK*+NJTy3We3>} zFd`dc3vX0X#`rchIGG8&rH&=MtST*4$4)Tc*E^pV^y_yIV>>h26<_5@zwr2+cl`H_kX>>=F7LB=ONaELox)OiA{G0{8v3gXkt{Fs zg3tcBUXubwsUEdIQdxfJy?k7($#Zy1FSSbX@GdP|Eb6sByk{Sd+dZx uGlus8FYwx9qjPmTbG8`H#n5hV$-NiTxw?HXXNzyv_epd!#}*;qB<4S8=}L+K literal 0 HcmV?d00001 diff --git a/apps/mylocation/screenshot_4.png b/apps/mylocation/screenshot_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ffae679c9dd8828f966f5873891f1d6e51961248 GIT binary patch literal 2818 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 25) and speed up rendering 0.08: Update for drag event refactor 0.09: Use current theme cols when drawing GPS info +0.10: Improve scale factor calculation to fix scaling issues (#984) diff --git a/apps/openstmap/custom.html b/apps/openstmap/custom.html index 88d94ed37..eeb148f54 100644 --- a/apps/openstmap/custom.html +++ b/apps/openstmap/custom.html @@ -63,10 +63,17 @@ TODO: /* Can see possible tiles on http://leaflet-extras.github.io/leaflet-providers/preview/ However some don't allow cross-origin use */ var TILELAYER = 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png'; // simple, high contrast - //var TILELAYER = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; + var PREVIEWTILELAYER = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; //var TILELAYER = 'http://a.tile.stamen.com/toner/{z}/{x}/{y}.png'; // black and white + var map = L.map('map').locate({setView: true, maxZoom: 16}); - var tileLayer = L.tileLayer(TILELAYER, { + // Tiles used for Bangle.js itself + var bangleTileLayer = L.tileLayer(TILELAYER, { + maxZoom: 18, + attribution: 'Map data © OpenStreetMap contributors' + }); + // Tiles used for the may the user sees (faster) + var previewTileLayer = L.tileLayer(PREVIEWTILELAYER, { maxZoom: 18, attribution: 'Map data © OpenStreetMap contributors' }); @@ -83,7 +90,7 @@ TODO: } var mapFiles = []; - tileLayer.addTo(map); + previewTileLayer.addTo(map); function tilesLoaded(ctx, width, height) { var options = { @@ -122,16 +129,35 @@ TODO: } document.getElementById("getmap").addEventListener("click", function() { - var bounds = map.getBounds(); var zoom = map.getZoom(); - var centerlatlon = bounds.getCenter(); - var center = map.project(centerlatlon, zoom).divideBy(256); + var centerlatlon = map.getBounds().getCenter(); + var center = map.project(centerlatlon, zoom).divideBy(OSMTILESIZE); var ox = Math.round((center.x - Math.floor(center.x)) * OSMTILESIZE); var oy = Math.round((center.y - Math.floor(center.y)) * OSMTILESIZE); - center = center.floor(); + center = center.floor(); // make sure we're in the middle of a tile + // JS version of Bangle.js's projection + function bproject(lat, lon) { + const degToRad = Math.PI / 180; // degree to radian conversion + const latMax = 85.0511287798; // clip latitude to sane values + const R = 6378137; // earth radius in m + if (lat > latMax) lat=latMax; + if (lat < -latMax) lat=-latMax; + var s = Math.sin(lat * degToRad); + return new L.Point( + (R * lon * degToRad), + (R * Math.log((1 + s) / (1 - s)) / 2) + ); + } + // Work out scale factors (how much from Bangle.project does one pixel equate to?) + var pc = map.unproject(center.multiplyBy(OSMTILESIZE), zoom); + var pd = map.unproject(center.multiplyBy(OSMTILESIZE).add({x:1,y:0}), zoom); + var bc = bproject(pc.lat, pc.lng) + var bd = bproject(pd.lat, pd.lng) + var scale = bc.distanceTo(bd); + var tileGetters = []; - // Render everything to a canvas - 512 x 512 px + // Render everything to a canvas... var canvas = document.getElementById("maptiles"); canvas.style.display=""; var ctx = canvas.getContext('2d'); @@ -150,7 +176,8 @@ TODO: resolve(); }; })); - img.src = tileLayer.getTileUrl(coords); + bangleTileLayer._tileZoom = previewTileLayer._tileZoom; + img.src = bangleTileLayer.getTileUrl(coords); })(i,j); } } @@ -163,7 +190,7 @@ TODO: imgx : canvas.width, imgy : canvas.height, tilesize : TILESIZE, - scale : 10000*Math.pow(2,16-zoom), // FIXME - this is probably wrong + scale : scale, // how much of Bangle.project(latlon) does one pixel equate to? lat : centerlatlon.lat, lon : centerlatlon.lng })}); diff --git a/apps/openstmap/openstmap.js b/apps/openstmap/openstmap.js index 554a71ca3..d995aca25 100644 --- a/apps/openstmap/openstmap.js +++ b/apps/openstmap/openstmap.js @@ -34,8 +34,8 @@ exports.draw = function() { var cx = g.getWidth()/2; var cy = g.getHeight()/2; var p = Bangle.project({lat:m.lat,lon:m.lon}); - var ix = (p.x-map.center.x)*4096/map.scale + (map.imgx/2) - cx; - var iy = (map.center.y-p.y)*4096/map.scale + (map.imgy/2) - cy; + var ix = (p.x-map.center.x)/map.scale + (map.imgx/2) - cx; + var iy = (map.center.y-p.y)/map.scale + (map.imgy/2) - cy; //console.log(ix,iy); var tx = 0|(ix/map.tilesize); var ty = 0|(iy/map.tilesize); @@ -57,8 +57,8 @@ exports.latLonToXY = function(lat, lon) { var cx = g.getWidth()/2; var cy = g.getHeight()/2; return { - x : (q.x-p.x)*4096/map.scale + cx, - y : cy - (q.y-p.y)*4096/map.scale + x : (q.x-p.x)/map.scale + cx, + y : cy - (q.y-p.y)/map.scale }; }; @@ -66,6 +66,6 @@ exports.latLonToXY = function(lat, lon) { exports.scroll = function(x,y) { var a = Bangle.project({lat:this.lat,lon:this.lon}); var b = Bangle.project({lat:this.lat+1,lon:this.lon+1}); - this.lon += x * this.map.scale / ((a.x-b.x) * 4096); - this.lat -= y * this.map.scale / ((a.y-b.y) * 4096); + this.lon += x * this.map.scale / (a.x-b.x); + this.lat -= y * this.map.scale / (a.y-b.y); }; diff --git a/apps/pastel/ChangeLog b/apps/pastel/ChangeLog index 1277f0d9d..2ede0e161 100644 --- a/apps/pastel/ChangeLog +++ b/apps/pastel/ChangeLog @@ -3,3 +3,6 @@ 0.03: Make it work with Gadgetbridge, Notifications fullscreen on a Bangle 2 0.04: Leave space at the bottom for Chrono widget, set back option at first option 0.05: Added 2 new fonts +0.06: Converted fonts to font modules +0.07: Added info line that cycles on BTN1/BTN3 (or vitual buttons on a bangle 2) +0.08: Added dependancy on MyLocation diff --git a/apps/pastel/README.md b/apps/pastel/README.md index 324c3915a..66ae0e189 100644 --- a/apps/pastel/README.md +++ b/apps/pastel/README.md @@ -1,20 +1,45 @@ -# Pastel Clock - a configurable clock with custom fonts and background +# Pastel Clock + + *a configurable clock with custom fonts and background. Has a cyclic information line that includes, day, date, battery, sunrise and sunset times* * Designed specifically for Bangle 1 and Bangle 2 * A choice of 7 different custom fonts * Supports the Light and Dark themes -* Has a settings menu, change font, enable/disable the grid and the date display - +* Has a settings menu, change font, enable/disable the grid +* On Bangle 1 use BTN1,BTN3 to cycle through the info display (Date, ID, Batt %, Ram % etc) +* On Bangle 2 touch the top right/top left to cycle through the info display (Date, ID, Batt %, Ram % etc) +* Uses mylocation.json from MyLocation app to calculate sunrise and sunset times for your location +* Uses pedometer widget to get latest step count +* Dependant apps are installed when Pastel installs I came up with the name Pastel due to the shade of the grid background. -![](screenshot_lato.jpg) -![](screenshot_architech.jpg) -![](screenshot_gochi.jpg) +Written by: [Hugh Barney](https://github.com/hughbarney) For support and discussion please post in the [Bangle JS Forum](http://forum.espruino.com/microcosms/1424/) -![](screenshot_b1_light.jpg) -![](screenshot_b2_dark.jpg) +## Lato +![](screenshot_lato.png) -![](screenshot_monoton.jpg) -![](screenshot_elite.jpg) + +## Architect +![](screenshot_architect.png) + + +## Gochihand +![](screenshot_gochihand.png) + + +## Monoton +![](screenshot_monoton.png) + + +## Elite +![](screenshot_elite.png) + + +## Cabin Sketch +![](screenshot_cabinsketch.png) + + +## Orbitron +![](screenshot_orbitron.png) diff --git a/apps/pastel/f_architect.js b/apps/pastel/f_architect.js new file mode 100644 index 000000000..685b2fa03 --- /dev/null +++ b/apps/pastel/f_architect.js @@ -0,0 +1,9 @@ +var widths = atob("CBolByEeJykkJCYhCg=="); +var font = atob("AAAAAAAAAAAAAAAAYAAAAAAAADgAAAAAAAAeAAAAAAAAB4AAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAD4AAAAAAAA/AAAAAAAAH4AAAAAAAB/AAAAAAAAf4AAAAAAAD+AAAAAAAA/wAAAAAAAH+AAAAAAAB/gAAAAAAAP8AAAAAAAD/AAAAAAAAf4AAAAAAAH+AAAAAAAA/gAAAAAAAP8AAAAAAAB/AAAAAAAAfwAAAAAAAH8AAAAAAAA/AAAAAAAAPwAAAAAAAB8AAAAAAAAfAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAP/8AAAAAAH//4AAAAAB///wAAAAAf/APgAAAAD/gAeAAAAA/wAA8AAAAH8AABwAAAA/AAAHgAAAHwAAAeAAAA+AAAA4AAADgAAADgAAAcAAAAOAAABwAAAA4AAAOAAAADgAAA4AAAAOAAADgAAAA4AAAOAAAADgAAA4AAAAOAAADgAAAB4AAAOAAAAHAAAA4AAAAcAAADwAAADwAAAHAAAAOAAAAeAAAB4AAAA4AAAPAAAADwAAB4AAAAHwAAPgAAAAPgAD8AAAAAf4D/gAAAAAf//4AAAAAAf/+AAAAAAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAP////4AAAB/////gAAAH////+AAAAf////gAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAADwAADAAAAAeAAAeAAAAD4AAD4AAAAfAAAfgAAAD4AAD+AAAAPAAAf4AAAB8AAH/AAAAHgAA/8AAAAcAAH/wAAADwAA/vAAAAOAAP48AAAA4AB/DgAAADgAf4OAAAAPAD+A4AAAA8A/wHgAAAD8/8AcAAAAH//gBwAAAAP/wAPAAAAAf8AA8AAAAAAAADgAAAAAAAAeAAAAAAAAB4AAAAAAAAHgAAAAAAAA+AAAAAAAAD4AAAAAAAAPAAAAAAAAA8AAAAAAAAHwAAAAAAAAfAAAAAAAAA4AAAAAAAABAAAAAAIAAAAAAAADwAAAAAAAAPAAAAAAAAA8AAAAAAAADgAAAAAAAAeAAAAAAAAB4AYAAAAAAHgBwAAAAAAeAPABAAAADwA8AGAAAAPAHgAYAAAA8AeADgAAADwDwAOAAAAOAPAB4AAAB4B8AHgAAAHgPwA8AAAAeA+ADwAAAB4H4AeAAAAHgfgD4AAAAeD+AfAAAAB4e4D8AAAAHj7gfgAAAAf/PH8AAAAB/4//gAAAAH/D/8AAAAAP4H/gAAAAA+Af8AAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAADwAAAAAAAAfAAAAAAAAD8AAAAAAAA/wAAAAAAAH/AAAAAAAA/8AAAAAAAPxwAAAAAAB+HAAAAAAAPwcAAAAAAB+BwAAAAAAfwPAAAAAAD+A8AAAAAAfwDwAAAAAD+APAAAAAAPwA8AAAAAB+ADwAAAAAP/////AAAA/////8AAAB/////wAAAD/////AAAAD////8AAAAAAH8AAAAAAAAeAAAAAAAAB4AAAAAAAAHgAAAAAAAAeAAAAAAAAB4AAAAAAAAHgAAAAAAAAcAAAAAAAABwAAAAAAAAHAAAAAAAAAcAAAAAAAABwAAAAAAAAGAAAAAAAAAAAAAAAAAAOAAAAAAAH/8AAAAAAf//wAAAAAD///AAAAAAP//8AAAAAA///wAAAAAAPgPAB4AAAA+A4APgAAAD4DgA+AAAAPAeAB4AAAA8BwAHgAAADwHAAeAAAAPAcAB4AAAB4BgAHgAAAHgGAAeAAAAeAYAD4AAAB4BgAPAAAAPgGAA8AAAA8AYADwAAADwBwAOAAAAPAHAB4AAAA8AcAHgAAAHwB4A8AAAAeAHgHgAAAB4APh+AAAAHgA//wAAAA+AB/+AAAADwAD/wAAAAPAAD8AAAAA8AAAAAAAAHwAAAAAAAAfAAAAAAAAB4AAAAAAAAHgAAAAAAAAeAAAAAAAAB4AAAAAAAAHAAAAAAAAAcAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAH//AAAAAAB///AAAAAAP//+AAAAAD///8AAAAAf+B/4AAAAD/AA/wAAAA/wAA/gAAAD8AAB+AAAAfAAAD8AAAD4AAAPwAAAfAAAB/AAAB4AAAP+AAAPAAAB/4AAA8AAAP/gAAHgAAB++AAAeAAAPz4AABwAAB+PgAAHAAAPw+AAAcAAA+D4AABgAAHwPgAAAAAA/A+AAAAAAD4H4AAAAAAfAfAAAAAAB4D8AAAAAAPgPgAAAAAA8B+AAAAAADwPwAAAAAAPA+AAAAAAA8P4AAAAAAD//AAAAAAAP/4AAAAAAAf+AAAAAAAA/gAAAAAAAAAAAAAAAIAAAAAAAABwAAAAAAAAHAAAAAAAAAcAAAAAAAABwAAAAAAAAHAAAAAAAAAcAAAAAAAABwAAAAAAAAHAAAAAAAAAcAAAAAAAABwAAAAAAAAHAAAAAAAAAcAAAAAAAADwAAAAAAAAPAAAAAAAAA8AAAAAAAADwAAAAAAAAPAAAP4AAAA8AAP/gAAADwAH/+AAAAfAB//wAAAB8Af//AAAAHwH/4AAAAAfB/4AAAAAB8f8AAAAAAH//AAAAAAAf/wAAAAAAB/8AAAAAAAP/gAAAAAAA/4AAAAAAAD/AAAAAAAAPwAAAAAAAA+AAAAAAAADwAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAH+AAAAAAAA/8AAAAAAAP/4AAAAAfB//gAAAAH/Pw/AAAAA//8A8AAAAH//gDwAAAA//8AHgAAAD4fwAeAAAAeA+AB4AAAB4DwADgAAAPAPAAOAAAA4A4AA4AAADgDgADgAAAOAOAAOAAABwAwAA4AAAHAHAADgAAAcAcAAOAAABwBwAA4AAAHAPAAHgAAAcA8AAcAAABwDgABwAAAHAeAAHAAAAcB8AA4AAABwPwAHgAAAHg/AAcAAAAeH8ADwAAAB4/4AeAAAAD//gD4AAAAP+fA/AAAAAfx//4AAAAAAD//AAAAAAAP/wAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAA/wAAAAAAAH/gAAAAAAA/+AAAAAAAH/8AAAAAAA/nwAAAAAAD4PAAAAAAAeA8AAAAAADwDwAAAAAAPAPAAAAAAB4A8AAwAAAHgDwAHgAAAeAPAAeAAADwA8AD4AAAPADwAfgAAA8AOAB8AAADwA4APwAAAPADgB+AAAA8AeAPwAAAD4B4B/AAAAHgHgf4AAAAfA+D+AAAAA/D5/wAAAAB///+AAAAAH///gAAAAAH//4AAAAAAP/+AAAAAAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAA4AAAAAAAADwDAAAAAAAOAeAAAAAAAYB4AAAAAAAAHgAAAAAAAAMAAAAAAAAAAAAA="); + +exports.add = function(graphics) { + graphics.prototype.setFontArchitect = function(scale) { + // Actual height 40 (41 - 2) + this.setFontCustom(font, 46, widths, 58+(scale<<8)+(1<<16)); + } +}; diff --git a/apps/pastel/f_cabin.js b/apps/pastel/f_cabin.js new file mode 100644 index 000000000..916677565 --- /dev/null +++ b/apps/pastel/f_cabin.js @@ -0,0 +1,9 @@ +var widths = atob("ECMtGCEiJSIkHyYlDw=="); +var font = atob("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"); + +exports.add = function(graphics) { + graphics.prototype.setFontCabinSketch = function() { + // Actual height 48 (51 - 4) + this.setFontCustom(font, 46, widths, 65+(1<<8)+(1<<16)); + } +}; diff --git a/apps/pastel/f_elite.js b/apps/pastel/f_elite.js new file mode 100644 index 000000000..a5cac2838 --- /dev/null +++ b/apps/pastel/f_elite.js @@ -0,0 +1,7 @@ + +exports.add = function(graphics) { + graphics.prototype.setFontSpecialElite = function(scale) { + // Actual height 40 (39 - 0) + this.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAYAAAAAAAfwAAAAAAP/AAAAAAH/4AAAAAB/+AAAAAAf/gAAAAAH/4AAAAAB/+AAAAAAf/gAAAAAH/4AAAAAAv8AAAAAAN6AAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAfAAAAAAAPwAAAAAAP8AAAAAAH+AAAAAAH+AAAAAAD+AAAAAAD/AAAAAAD/AAAAAAB/AAAAAAB/AAAAAAB/AAAAAAB/gAAAAAB/gAAAAAB/gAAAAAA/gAAAAAB/wAAAAAA/4AAAAAA/wAAAAAA/4AAAAAA/4AAAAAAf8AAAAAAP8AAAAAAD8AAAAAAA8AAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//wAAAAP///gAAAH/9/+AAAD/gAf4AAB/AAB+AAA/AAAHwAAPAAAA+AADgAAAPgAAwAAAD4AAcAAAAfAAHAAAAHwABwAAAB8AA4AAAAfAAOAAAAHwABwAAAB8AAcAAAA/AAHgAAAPgAB+AAAH4AAPgAAD8AAD+AAD+AAA/4Af/AAAB////AAAAP///wAAAAP//gAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAOAAAAHAADgAAAD4AB4AAAA+AAeAAAAPgAHgAAAD4AB4AAAAeAAeAAAAHgAHgAAAB4AB4AAAAcAAeAAAAPAAH4AAP/wAB/////+AAf/////gAH/////4AB///+/+AAAAQAAPgAAAAAAB4AAAAAAAeAAAAAAAHgAAAAAAD4AAAAAAA+AAAAAAAPgAAAAAADwAAAAAAA+AAAAAAAPgAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAcAAAB+AAfwAAA/wAf/AAA/8Af/wAAf/AP/8AAGPwP//AADh8D48AAA4OB8OAAAOAAfDgAAHAAPg4AABwADwPAAAcAB8DwAAHAAeAeAABwAHAHgAAcADwB8AAHAB4APgAB4A+AB4AAPAfAAeAAD4fgADgAAf/4AA4AAD/8AAeAAAf+AAfAAAB8AAPwAAAAAAD4AAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAf8AAB/wAH/wAAf8AB/8AAH+AAffgAB4AcDx4AAcAPAAfAAHAPwAHwABwHwAA8AAcB+AAPAAHA/gADwABw/4AA8AAcf+AAPAAHP/gAHwABz74AB8AAf8fAA/AAH8DwAPgAD/A8AHwAA/gHwP8AAPwA//+AADwAH//AAAAAA//gAAAAAD/wAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAP8AAAAAAD/AAAAAAD/wAAAAAD/8AAAAAB/PAAAAAA/jwAAAAAfg8AAAAAPwPAAAAAH4DwAAAAD4A8HAAAD8APBwAAB+ADw8AAA+AA8PAAA/AAPDgAAPgADw8AAHwAB8/AAD+B///wAA/////8AAP/////AAB+f///wAAAAAHx8AAAAAB8PAAAAAAPDwAAAAADw8AAAAAA4PAAAAAAODwAAAAADgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAB/gAAH//wf8AAB//+H/gAAf//h/4AAHJ/wf/AABwD4D/4AAeA+AAeAAHgPAAHgAB4DwAB4AAeA4AAeAAHgOAAHgAA4DgAB4AAOA8AAeAADgPAAHgAB4D4ADwAAeAeAB4AAHAHwAeAABgAfAPgAAYAD8fgAAAAA//wAAAAAH/4AAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAA//wAAAAB///AAAAB////AAAB/7//wAAA/AfB+AAAfAPAPwAAPgHgB+AAHwBwAPgAB4A8AB8AAeAPAAfAAPADwAHwADgA8AB8AA8APAAfAAPADwAHwADwA8AB8AA8AHgA+AAP8B4APgAD/wfAH4AA/8D4D8AAH/A///AAB/wH//gAAH8A//wAAA8AH/4AAAAAA/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAB/4AAAAAA/8AAAAAAP+AAAAAAD+AAAAAAAeAAAAAAAHAAAAAAADwAAAAAAB8AAAAAAAfAAAAAAAHwAAA/8AD+AAB//AA/gAB//wAP4AB//gAB+AB//AAAfwB//AAAH8A/wAAAA/A/wAAAAHw/wAAAAB8/wAAAAAffwAAAAAP/wAAAAAD/4AAAAAA/4AAAAAAP8AAAAAAD4AAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAP/wAAAH8H/+AAAH/z//wAAD////+AAB///h/gAA/B/gH4AAPAP4A/AAHwB8AHwAB4APAB8AAeADgAfAAHgA4ADwABwAOAA8AAcADgAPAAHAA4ADwAB4AeAA8AAfAHwAPAADwB8AHgAA+A/gD4AAPgP4B+AAB+P/h/gAAP////wAAB/8f/4AAAP8D/8AAAAAAf8AAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAA/4APAAAA//gH4AAAP/8D/gAAP4Pg/8AADwB8P/AAB4AfD/4AAeAD4d+AAHAA+AfwADwAHgH8AA4AA8A/AAOAAPAPgADgADwD4AA8AA4B+AAPAAeAfAAB4AHgHgAAeADwD4AAHwA8A8AAA+AfA/AAAHp/h/gAAA3//+gAAAB//+gAAAAd//gAAAACf/wAAAAAH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAABwB/AAAAB/A/8AAAA/wf/gAAAP+H/4AAAH/h/+AAAB/8f/gAAAP+H/4AAAD/h/+AAAAfwf/gAAAH8C/wAAAAAA3oAAAAAABwAAAAAAAAAAAAAAAAAAAA=="), 46, atob("ERwfHB0cHxsdHB4dEQ=="), 50+(scale<<8)+(1<<16)); + } +}; diff --git a/apps/pastel/f_gochihand.js b/apps/pastel/f_gochihand.js new file mode 100644 index 000000000..8ef926f39 --- /dev/null +++ b/apps/pastel/f_gochihand.js @@ -0,0 +1,10 @@ + +var widths = atob("GRMtICcqJiopKiwoGQ=="); +var font = atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA+AAAAAAAAAAAAfwAAAAAAAAAAAH+AAAAAAAAAAAB/gAAAAAAAAAAAf4AAAAAAAAAAAH+AAAAAAAAAAAB/gAAAAAAAAAAAP4AAAAAAAAAAAD8AAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAP+AAAAAAAAAAA//gAAAAAAAAAH//4AAAAAAAAA///+AAAAAAAAP////gAAAAAAB/////4AAAAAAP/////+AAAAAD//////+AAAAA///////wAAAAAf//////AAAAAAP/////4AAAAAAD/////AAAAAAAA////4AAAAAAAAP//+AAAAAAAAAD//gAAAAAAAAAA/8AAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAH//AAAAAAAAAAH//8AAAAAAAAAH///wAAAAAAAAD///+AAAAAAAAB////wAAAAAAAA////+AAAAAAAAf////gAAAAAAAP/8//8AAAAAAAD/wAf/AAAAAAAB/wAD/4AAAAAAA/4AAP+AAAAAAAP8AAB/wAAAAAAD/AAAf8AAAAAAB/gAAD/AAAAAAAf4AAA/wAAAAAAH8AAAP8AAAAAAB/AAAD/AAAAAAAfwAAA/wAAAAAAP8AAAH8AAAAAAD/AAAD/AAAAAAAf4AAA/wAAAAAAH+AAAP8AAAAAAB/gAAD/AAAAAAAf4AAA/wAAAAAAH/AAAP4AAAAAAB/wAAH+AAAAAAAP+AAB/gAAAAAAD/wAA/wAAAAAAA/+AAf8AAAAAAAH/wAH+AAAAAAAB/+AH/gAAAAAAAP/4D/wAAAAAAAB////4AAAAAAAAf///+AAAAAAAAD////AAAAAAAAAf///gAAAAAAAAD///wAAAAAAAAAP//wAAAAAAAAAA//4AAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAA/gAAAAAAAAAAAf4AAAAAAAAAAAP+AAAAAAAAAAAH/gAAAAAAAAAAB/wAAAAAAAAAAA/4AAAAAAAAAAAf8AAAAAAAAAAAH/AAAAAAAAAAAD/gAAAAAAAAAAA/wAAAAAAAAAAAf4AAAAAAAAAAAP+AAAAAAAAAAAD/AAAAAAAAAAAB/wAAAAAAAAAAAf+AAAAAAAAAAAH/4AAAAAAAAAAD//8AAAAAAAAAA////4AAAAAAAAP/////gAAAAAAB/////8AAAAAAAf/////AAAAAAAB/////wAAAAAAAP////8AAAAAAAAP////AAAAAAAAAH///wAAAAAAAAAAf/4AAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAHwAAAAAAD8AAAD+AAAAAAB/AAAB/gAAAAAA/4AAA/8AAAAAAf+AAAf/AAAAAAH/gAAH/wAAAAAD/wAAD/8AAAAAB/4AAB//AAAAAAf8AAA//wAAAAAH+AAAf/8AAAAAD/AAAP//AAAAAA/wAAD//wAAAAAP4AAB//8AAAAAD+AAA///AAAAAA/gAAf8/wAAAAAP4AAP+P8AAAAAD/AAP/j/AAAAAA/wAH/w/wAAAAAP+AH/4P8AAAAAD/wD/8D/AAAAAA//P/+A/wAAAAAH////AP+AAAAAB////AB/gAAAAAP///gAf4AAAAAD///wAH+AAAAAAf//wAB/gAAAAAD//4AAf4AAAAAAP/4AAH+AAAAAAA/wAAB/gAAAAAAAAAAAf4AAAAAAAAAAAH+AAAAAAAAAAAA/gAAAAAAAAAAAPwAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAD8AAAAAAAAAAAB/gAAAAAAAAAAAf8AAAAAAAAAAAP+AAAAAAAAAAAD/gAAAAAAAAAAB/wAAAcAAAAAAAf8AAAPwAAAAAAH+AAAD/AAAAAAB/gAAA/4AAAAAA/wAAAP/AAAAAAP8AAAD/4AAAAAD/AB+A//AAAAAA/wA/wH/wAAAAAP4AP8A/+AAAAAD+AD/AD/gAAAAA/gB/wAf8AAAAAP8Af8AH/AAAAAD/AH/AA/wAAAAA/wB/gAP8AAAAAP+Af4AD/AAAAAD/gP+AA/wAAAAAf+H/gAP8AAAAAH///4AD/AAAAAB////AA/wAAAAAP///wAP8AAAAAB///+AD/AAAAAAf///gA/gAAAAAD///+Af4AAAAAAP/n/4f+AAAAAAB/g////AAAAAAAAAP///wAAAAAAAAB///4AAAAAAAAAP//8AAAAAAAAAB///AAAAAAAAAAP//AAAAAAAAAAA//gAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAH+AAAAAAAAAAAH/wAAAAAAAAAAD/+AAAAAAAAAAD//gAAAAAAAAAB//8AAAAAAAAAB///AAAAAAAAAA///wAAAAAAAAAf//8AAAAAAAAAf/7/AAAAAAAAAP/4/4AAAAAAAAP/4H+AAAAAAAAH/8B/gAAAAAAB//8Af4AAAAAAA//+AH+AAAAAAAP//AB/gAAAAAAH//wAf4AAAAAAB///AH+AAAAAAAf//+B/gAAAAAAH///+f4AAAAAAA/////+AAAAAAAH/////wAAAAAAA/////8AAAAAAAAf////8AAAAAAAAf////+AAAAAAAA/////4AAAAAAAA/////AAAAAAAAB////wAAAAAAAAB///8AAAAAAAAAD///AAAAAAAAAA///wAAAAAAAAAP//4AAAAAAAAAD/D8AAAAAAAAAA/wAAAAAAAAAAAH4AAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAf4AP/wAAAAAAAf/AH/+AAAAAAAP/4D//wAAAAAAD//A//+AAAAAAB//wP//wAAAAAAf/8D//8AAAAAAH//g///gAAAAAB//4H//4AAAAAAf//AAf/AAAAAAP9/wAD/wAAAAAD/P+AAf8AAAAAA/j/gAD/AAAAAAP4f4AA/4AAAAAD+H/AAH+AAAAAA/h/wAB/gAAAAAP4P+AAf4AAAAAD+D/gAH+AAAAAA/g/4AA/gAAAAAP4H/AAP4AAAAAD+B/wAD+AAAAAB/gP+AA/gAAAAAf4D/gAP4AAAAAH+Af8AH+AAAAAB/gH/gB/gAAAAAf4B/4Af4AAAAAH+AP/AH8AAAAAB/gB/4D/AAAAAAf4Af/h/wAAAAAD+AD///4AAAAAA/gA///+AAAAAAP4AH///AAAAAAD+AA///gAAAAAA/gAH//wAAAAAAH4AA//4AAAAAAAMAAD/8AAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAH//wAAAAAAAAAH///AAAAAAAAAD///4AAAAAAAAD////gAAAAAAAB////8AAAAAAAA/////gAAAAAAAf////4AAAAAAAH/4B//AAAAAAAD/wAP/4AAAAAAA/4AD/+AAAAAAAf8AB//wAAAAAAH+AAf/8AAAAAAD/AAP//gAAAAAA/wAD//4AAAAAAP8AA/n+AAAAAAD/AAf5/gAAAAAA/wAH8P8AAAAAAP8AB/D/AAAAAAD/AA/w/wAAAAAA/4AP8P8AAAAAAP+AD+D/AAAAAAD/wA/g/wAAAAAAf8AP4P8AAAAAAH+AD+D/AAAAAAA/gA/g/wAAAAAAHwAP8P8AAAAAAAwAD/D/AAAAAAAAAA/x/wAAAAAAAAAP//4AAAAAAAAAD//+AAAAAAAAAAf//AAAAAAAAAAH//wAAAAAAAAAA//4AAAAAAAAAAH/8AAAAAAAAAAB/+AAAAAAAAAAAH/AAAAAAAAAAAAeAAAAAAAD+AAAAAAAAAAAA/gAAAAAAAAAAAP4AAAAAAAAAAAD+AAAAAAAAAAAA/gAeAAAAAAAAAP4AfwAAAAAAAAD+AH8AAAAAAAAA/gB/AAAAAAAAAP4AfwAAAAAAAAD+AH8AAAAAAAAA/gB/AAAAAAAAAP4AfwAAAAAAAAD+AH8AAAAAAAAA/wD/AAAAAAAAAP8A/wAAAAAAAAD/AP8AAAAAAAAA/wD/AAAAAAAAAP8A/wAAAAAAAAD/gP8AAAAAAAAA/4D/AAAAAAAAAH/A/wAAAAAAAAB/4P+AHwAAAAAAf//////AAAAAAD//////wAAAAAA//////8AAAAAAH//////AAAAAAB//////wAAAAAAP/////8AAAAAAB/////+AAAAAAAH/////AAAAAAAAAP+AAAAAAAAAAAB/gAAAAAAAAAAAf4AAAAAAAAAAAH+AAAAAAAAAAAB/gAAAAAAAAAAAf4AAAAAAAAAAAH+AAAAAAAAAAAB/gAAAAAAAAAAAP4AAAAAAAAAAAD+AAAAAAAAAAAA/gAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAD//AAAAAAAAD+D//8AAAAAAAD/9///gAAAAAAB/////8AAAAAAA//////AAAAAAAf/////4AAAAAAH//////AAAAAAD///4H/wAAAAAA///4Af+AAAAAAP4f+AD/gAAAAAH+D/gAf4AAAAAB/A/4AH/AAAAAAfwP+AA/wAAAAAH8D/wAP8AAAAAB/A/8AD/AAAAAAfwP/AAfwAAAAAH+D/wAH8AAAAAB/g/8AB/AAAAAAf4P/AAfwAAAAAH+D/wAH8AAAAAB/w/8AB/AAAAAAP+P+AA/wAAAAAD/x/gAP8AAAAAA///8AD+AAAAAAH///gB/gAAAAAB///4Af4AAAAAAP///gP8AAAAAAB///+H/AAAAAAAP/////gAAAAAAB/////4AAAAAAAH////8AAAAAAAAAH//+AAAAAAAAAA///AAAAAAAAAAD//gAAAAAAAAAAP/wAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+AAAAAAAAAAB//wAAAAAAAAAA//+AAAAAAAAAAf//wAAAAAAAAAH//8AAAAAAAAAD///gAAAAAAAAA///4AAAAAAAAAf4H/AAAAAAAAAH+B/wAAAAAAAAB/AP8AAAAAAAAA/wD/AAAAAAAAAP4A/wAAAAAAAAD+AP8AAAAAAAAB/gD/AAAAAAAAAf4A/wAAAAAAAAH+AP8AAAAAAAAB/AD/AAAAAAAAAfwB/gAAAAAAAAH8Af4AAAAAAAAB/AP8AAAAAAAAAfwD/AAAAAAAAAH8B/wAAAAAAAAB/Af4AAAAAAAAAf4P8AAAAAAAAAH+H/AAAAAAAAAB/j/gAAAAAAAAAf//////wAAAAAH///////gAAAAA///////8AAAAAP///////AAAAAD///////wAAAAAf//////4AAAAAH//////+AAAAAB///////gAAAAAP//////wAAAAAB/gAAAAAAAAAAAfgAAAAAAAAAAADwAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACAAAAAAAAAPgAD4AAAAAAAAH8AB/AAAAAAAAB/gAf4AAAAAAAAf4AH+AAAAAAAAH+AB/gAAAAAAAB/gAf4AAAAAAAAf4AH+AAAAAAAAD+AA/gAAAAAAAA/AAPwAAAAAAAADgAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); + +exports.add = function(graphics) { + graphics.prototype.setFontGochiHand = function() { + // Actual height 54 (59 - 6) + this.setFontCustom(font, 46, widths, 80+(1<<8)+(1<<16)); + } +}; diff --git a/apps/pastel/f_lato.js b/apps/pastel/f_lato.js new file mode 100644 index 000000000..a7c13fd30 --- /dev/null +++ b/apps/pastel/f_lato.js @@ -0,0 +1,10 @@ + +var widths = atob("DhglJSUlJSUlJSUlEA=="); +var font = atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAHwAAAAAAAAA/gAAAAAAAAH/AAAAAAAAAf8AAAAAAAAB/wAAAAAAAAD+AAAAAAAAAHwAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAB/AAAAAAAAAf8AAAAAAAAP/wAAAAAAAD/8AAAAAAAB//AAAAAAAAf/wAAAAAAAP/4AAAAAAAD/+AAAAAAAA//AAAAAAAAf/wAAAAAAAH/4AAAAAAAD/+AAAAAAAA//AAAAAAAAf/wAAAAAAAH/4AAAAAAAD/+AAAAAAAA//AAAAAAAAf/wAAAAAAAD/4AAAAAAAAP+AAAAAAAAA/AAAAAAAAADwAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//+AAAAAAA////AAAAAAP////gAAAAD/////AAAAA//////AAAAH/////+AAAA//gAH/8AAAH/gAAB/4AAA/4AAAB/wAAD+AAAAB/AAAfwAAAAD+AAB+AAAAAH4AAH4AAAAAfgAAfAAAAAA+AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAAfAAAAAA+AAB+AAAAAD4AAH4AAAAAfgAAfwAAAAD+AAA/gAAAAfwAAD/gAAAH/AAAH/gAAB/4AAAP/4AB//AAAAf/////4AAAA//////AAAAA/////4AAAAB////+AAAAAA////AAAAAAAf//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAB8AAAAAAAAAPwAAAD4AAAB/AAAAPgAAAP4AAAA+AAAB/AAAAD4AAAP8AAAAPgAAA/gAAAA+AAAH8AAAAD4AAA/gAAAAPgAAH8AAAAA+AAA/gAAAAD4AAH///////gAAf//////+AAB///////4AAH///////gAAf//////+AAB///////4AAAAAAAAAPgAAAAAAAAA+AAAAAAAAAD4AAAAAAAAAPgAAAAAAAAA+AAAAAAAAAD4AAAAAAAAAPgAAAAAAAAA+AAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAADwAAAA+AAAA/AAAAH4AAAP8AAAA/gAAB/wAAAH+AAAP/AAAA/4AAB/4AAAH/gAAH+AAAA/+AAA/gAAAH/4AAD8AAAA/vgAAfgAAAH8+AAB+AAAA/n4AAHwAAAH8fgAA/AAAA/h+AAD8AAAH8H4AAPwAAA/gfgAA/AAAH8B+AAD8AAA/gH4AAPwAAH8AfgAAfAAB/gB+AAB+AAP8AH4AAH8AB/gAfgAAP4Af8AB+AAA/8f/gAH4AAB///8AAfgAAH///gAB+AAAP//4AAH4AAAP//AAAfgAAAf/wAAB+AAAAP4AAAD4AAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAHgAAAAA8AAA/gAAAAPwAAD/AAAAD/AAAP+AAAAf8AAA/8AAAD/wAAB/4AAAf+AAAB/wAAD/gAAAB/AAAP4AAAAD+AAB/AAAAAH4AAH4AAAAAfgAAfgAAAAA+AAB8AAAAAD8AAPwAB4AAPwAA/AAHgAA/AAD8AAfAAD8AAPwAD8AAPwAA/AAPwAA/AAD8AA/AAD4AAHwAH8AAfgAAfgAf4AB+AAB/AD/gAP4AAD+AffAB/AAAP//9/Af8AAAf//n///gAAB//+P//8AAAD//wf//gAAAD/+A//8AAAAH/gB//gAAAAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAB+AAAAAAAAAf4AAAAAAAAD/gAAAAAAAAf+AAAAAAAAH/4AAAAAAAA//gAAAAAAAH++AAAAAAAB/z4AAAAAAAP+PgAAAAAAB/g+AAAAAAAf8D4AAAAAAD/gPgAAAAAAf4A+AAAAAAH/AD4AAAAAA/wAPgAAAAAH+AA+AAAAAB/wAD4AAAAAP8AAPgAAAAB/gAA+AAAAAf8AAD4AAAAD/AAAPgAAAAf4AAA+AAAAB///////4AAH///////gAAf//////+AAB///////4AAH///////gAAAAAAA+AAAAAAAAAD4AAAAAAAAAPgAAAAAAAAA+AAAAAAAAAD4AAAAAAAAAPgAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAADwAAAAAAQAAfgAAAAA/gAB+AAAAD/+AAH8AAAP//4AAPwAAH///gAAfgAAf//+AAB+AAB///4AAH4AAH/wPgAAPgAAfgB8AAA/AAB+AHwAAD8AAH4AfAAAPwAAfgB8AAA/AAB+AHwAAD8AAH4AfAAAPwAAfgB+AAA+AAB+AH4AAD4AAH4AfgAAfgAAfgA/AAD+AAB+AD8AAPwAAH4AP4AD/AAAfgAf4Af4AAB+AB////AAAH4AD///4AAAfAAH///AAAB8AAP//4AAAHwAAf//AAAAAAAAf/wAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gAAAAAAAB//gAAAAAAAf//gAAAAAAH///gAAAAAA////AAAAAAP///8AAAAAB//Af4AAAAAf/wAfwAAAAD/8AA/AAAAAf/wAB+AAAAH/+AAH4AAAA/7wAAPgAAAH/PAAA/AAAB/58AAD8AAAP+HwAAPwAAB/wfAAA/AAAf+B8AAD8AAD/wHwAAPwAAf8AfAAA+AAB/gB8AAD4AAH8AH4AAfgAAfgAfgAB+AAB4AA/AAPwAAHAAD+AB/AAAYAAP+Af4AAAAAAf///AAAAAAA///8AAAAAAB///gAAAAAAD//4AAAAAAAH//AAAAAAAAH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAgAAfgAAAAAOAAB+AAAAAD4AAH4AAAAA/gAAfgAAAAP+AAB+AAAAD/4AAH4AAAA//AAAfgAAAP/4AAB+AAAD/+AAAH4AAA//gAAAfgAAP/4AAAB+AAD/+AAAAH4AA//gAAAAfgAP/4AAAAB+AB/+AAAAAH4Af/gAAAAAfgH/4AAAAAB+B/+AAAAAAH4f/gAAAAAAfn/4AAAAAAB//+AAAAAAAH//gAAAAAAAf/4AAAAAAAB/+AAAAAAAAH/gAAAAAAAAf4AAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAwAD/+AAAAA/8Af/8AAAAP/4D//4AAAB//4f//wAAAP//j///gAAB///P8H/AAAP////AH8AAA/gH/wAP4AAH4AH+AAfgAAfgAf4AA+AAB8AA/gAD4AAHwAD8AAPwAA+AAHwAAfAAD4AAfAAB8AAPgAB8AAHwAA+AAHwAAfAAD4AAfAAB8AAHwAD8AAPwAAfAAPwAA+AAB+AB/gAD4AAH4AH+AAfgAAP4B/8AD+AAA/8//4AfwAAB///P8H/AAAD//8///4AAAH//h///AAAAP/4D//4AAAAP/AH//AAAAAHAAP/4AAAAAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8AAAAAAAAP/8AAAAAAAD//4AAAAAAAf//4AAAAAAD///gAAAAAAf///AAAIAAB/gP+AABgAAP4AP4AAeAAA/AAfwAD4AAH4AA/AAfgAAfgAB8AH+AAB8AAHwA/4AAPwAAfAH/gAA/AAB8B/8AAD8AAHwP/AAAPwAAfB/4AAA/AAB8P+AAAD8AAHj/wAAAHwAAef8AAAAfgAD7/gAAAB+AAP/8AAAAD8AB//AAAAAP4AP/4AAAAAf4D/+AAAAAB////wAAAAAD///8AAAAAAH///gAAAAAAH//4AAAAAAAP/+AAAAAAAAH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAfAAAAAD8AAD+AAAAAf4AAP4AAAAB/gAB/wAAAAH+AAH/AAAAAf4AAP4AAAAA/AAA/gAAAAB4AAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); + +exports.add = function(graphics) { + graphics.prototype.setFontLato = function() { + // Actual height 50 (53 - 4) + this.setFontCustom(font, 46, widths, 64+(1<<8)+(1<<16)); + } +}; diff --git a/apps/pastel/f_latosmall.js b/apps/pastel/f_latosmall.js new file mode 100644 index 000000000..8ceb61ccf --- /dev/null +++ b/apps/pastel/f_latosmall.js @@ -0,0 +1,10 @@ + +var widths = atob("BAgJDQ0RDwUHBwkNBQgFCA0NDQ0NDQ0NDQ0GBg0NDQkSDw4PEQ0MEBEHCg8LFBESDRIODA0QDxYODg4HCAcNCQcLDAoMDAcLDAYGDAYSDAwMDAkKCAwLEQsLCgcHBw0A"); +var font = atob("AAAAAAAAAAAAAAAAAAAAAAAAEA/84D/zgAAEAAAAAAAAAAAA+AAD8AAAAAAAAAD4AAPgAAAAAAAAAABAADGIAM/gB/8A/+AD8YAAx+AD/4B/4APxgAjGAAIAAAAAAAAAAAAADwMAfg4DnBgMMHg///P/5gMGGAwc4Bg/AEB4AAAAA4AAHwAA5gYDCDgMIcAxjgB84ADnAAA4AAHOABz8AOMYBwwgMDCAgP4AAfAAAAAAAAAAeAAH8APY4B/BgMcGAw4YDBxgMDmA4HwBwPAAB8AAf4ABhgAACAAAAD4AAPgAAAAAAAAAAAAAH/gB//wfAHzgAHAAAAAAAAAAAOAAcfAPwf/8Af+AAAAAAAAAAAANgAAUAABwAAfwAAcAADQAAJAAAAAAAAAAAGAAAYAABgAAGAAP/gA/+AAGAAAYAABgAAGAAAQAAAAAAAEAAA7AAD4AAAAAAAAAAAAGAAAYAABgAAGAAAYAAAgAAAAAAAAAADgAAOAAAYAAAAAAPAAD4AB8AAfAAHwAD4AAeAABAAAADgAB/wAf/wBwHAMAGAwAYDABgMAGA4A4B4PAD/4AH/AAAAAAAAAAAAAYAgDgGAcAYDgBgP/+A//4AABgAAGAAAYAAAAAAAAAAAAQBgHgOAcB4DgPgMA2AwGYDAxgOOGAfwYB+BgBgGAAAAAAAADA4AcDwDgDgMAGAwgYDDBgMcGA5w4B9/ADj4AAAAAAAAABgAAOAAB4AAfgADmAAcYADhgA4GAD//gP/+AAGAAAYAAAgAAAAAADAH4OA/gYDGBgMYGAxgYDGDgMccAw/wCB8AAAAAAAAAAYAAH4AB/wAPjgB8GAOwYDzBgOMGAg44AD/AAH4AACAAAAAAAAAwAADAAAMAGAwB4DAfAMHwAw8ADPAAPwAA+AADgAAAAAAAAAA4+AH38A/44DHBgMMGAwwYDHBgOeOAffwA4/AABwAAAAAAAAAAAAPgAB/AAOMGAww4DBngMF4Aw/ADj4AH+AAPwAAAAAAAAADg4AODgAwGAAAAAAAAAAAABAAAODsA4PgBAYAAAAAAAAAQAABgAAPAAA8AAG4AAZgADHAAMMABgwAAAAAAAAAAAAAAAAEQAAZgABmAAGYAAZgABmAAGYAAZgABmAAGYAAAAAAAAAAAAAAAAGDAAMMAAxwABmAAG4AAPAAA8AABgAAEAAAAAAAAAEAAA4AADABgMHOAw84DGAAP4AAfAAAAAAACAAD/gAePADgGAYAMBh8YMPxgxxGDGEIIYwgxOCDH8IMYRgYBGAwMwD/hAD8AAAAAAAGAAB4AAfgAP4AD+AA/YAPhgA4GAD4YAD9gAD+AAD+AAB+AAB4AABgAAAAAAAD//gP/+AwYYDBhgMGGAwYYDDhgOOGA/84B+/ABh4AAAAAAAAA/gAH/gA+/AHAcA4A4DgBgMAGAwAYDABgMAGA4A4BgDAGAMAAAAAAAAAAAA//4D//gMAGAwAYDABgMAGAwAYDABgOAOAYAwB4PAD/4AH/AAHwAAAAAAAAAAAAP/+A//4DDBgMMGAwwYDDBgMMGAwwYDABgMAGAAAAAAAAAAAA//4D//gMGAAwYADBgAMGAAwYADBgAMGAAwAAAAAAA/gAH/AA++AHAcA4A4DgBgMAGAwAYDABgMGGAwYYDhjgGH8AAfwAAAAAAAAAAAD//gP/+A//4ADAAAMAAAwAADAAAMAAAwAADAAAMAA//4D//gAAAAAAAAAAAAAAA//4D//gAAAAAAAAAAAAAAAAAYAABgAAGAAA4AAHgP/8A//gAAAAAAAAAAAAAAAP/+A//4ADAAAMAAB4AAPwABzgAOHABwPAOAeAwA4CAAgAAAAAAAAAAAP/+A//4AABgAAGAAAYAABgAAGAAAYAABgAAAA//4D//gP/+AeAAAeAAAeAAA+AAA8AAA4AAHgAB4AAeAAHwAA8AAPAAA//4D//gAAAAAAAAAAAAAAA//4D//gHAAAOAAAeAAA8AAA4AABwAADwAADgAAHAP/+A//4AAAAAAAAAAAAP4AD/4AeDwBwHAOAOAwAYDABgMAGAwAYDABgOAOAcBwB4PAD/4AD+AABAAAAAAAAAAAAAP/+A//4DBgAMGAAwYADBgAMGAA44AB/AAH4AAHAAAAAAA/gAP/gB4PAHAcA4A4DABgMAGAwAYDABgMAGA4A4BwHwHg/gP/nAP4MAEAQAAAAAAAAAAA//4D//gMGAAwYADBgAMHAAw/ADneAH4eAPA4AABgAAAAAAwA8DAH4OA5wYDDBgMMGAw4YDBjgOH8AYPgAAIAAAAAwAADAAAMAAAwAADAAAP/+A//4DAAAMAAAwAADAAAMAAAAAAAAAAAAAA//AD//AAAcAAA4AABgAAGAAAYAABgAAOAABwD//AP/4A/8AAAAAOAAA+AAB+AAB/AAA/AAA/AAAeAAD4AA/AAPwAH8AB+AAPgAA4AAAAAAOAAA/AAB/gAA/wAAf4AAPgAB+AA/gAfwAH4AA8AAD8AAD+AAB/AAB/gAA+AAH4AD/AD/gA/wAD4AAMAAAgAYDgDgPAeAeHgAe8AA/AAA4AAHwAB/wAPHgDwPgOAOAgAYAAAAIAAA4AADwAAHwAAHgAAHgAAP+AA/4APgAB4AAeAADwAAMAAAgAAAAAAMAGAwA4DAPgMB+AwPYDDxgMeGAzwYD8BgPgGA8AYDABgAAAAAAAH//8f//xAABEAAEAAAAAAAHAAAPAAAPgAAPgAAHwAAHwAAHgAADAAAAEAAEQAAR///H//8AAAAAAAAAAAAAAABgAAeAADwAA8AADgAAHgAAPAAAOAAAIAAAAAAAAAAAAQAABAAAEAAAQAABAAAEAAAQAABAAAAAAAAgAADAAAOAAAIAAAAAAAAAAAAAAAHAAY+ADnYAMYgAxiADGYAORAAf+AA/4AAAAAAAB//4H//gAYMADAYAMBgAwGADAYAPHgAf8AA/gAAAAAAAAA/gAH/AA4OADAYAMBgAwGADAYAMDgAQEAAAAAB+AAf8ADx4AMBgAwGADAYAMBgAYMB//4H//gAAAAAAAAB8AAf8ADpwAMhgAyGADIYAMhgA6GAB4wADhAAAAACAAAMAAH/+A//4DMAAMwAAzAAABAcAff4D/5gMbmAwmYDCZgMZmA/mYD8fAMA4AgAAAAAAAAAf/+B//4AGAAAwAADAAAMAAA4AAD/4AH/gAAAAAAACAAAc/+Bz/4CAAAAAAAAABiAAGc//5z//CAAAAAAAAAAAAAAf/+B//4AAYAADgAAfAAHuAA4cADAYAIAgAAAAAAAAAAAf/+B//4AAAAAAAAAAAAAAAA/+AD/4AEAAAwAADAAAMAAA/+AB/4AH/gAwAADAAAMAAA4AAD/4AD/gAAAAAAAAAAAA/+AD/4AGAAAwAADAAAMAAAwAAD/4AH/gAAAAAAAAD+AAf8ADg4AMBgAwGADAYAMBgA4OAB/wAD+AADgAAAAAP/+A//4BgwAMBgAwGADAYAMBgA8eAB/wAD8AAAAAAAAAB+AAf8ADx4AMBgAwGADAYAMBgAYMAD//gP/+AAAAAAAAP/gA/+ABwAAOAAAwAADAAAMAAAAAAAAQAHhgA/GADMYAMxgAxmADH4AEPAAAQAAAAAMAAAwAAf/wD//gAwGADAYAMBgAAAAAAAAP/AA/+AAAYAABgAAGAAAYAADAA/+AD/4AAAAAAAADgAAPgAAfgAAPwAAPgAAeAAHwAD8AA/AADgAAIAAA4AAD8AAD+AAB+AAB4AA/AAfgADwAAPgAAfwAAP4AAHgAB+AA/gAPwAA4AAAAAAAAgAwGADh4AHvAAPwAAOAAB8AAe8ADh4AMBgAgCACAAAOAAA+AAA/BgA/eAA/wAD8AA/AAPgAD4AAOAAAgGADA4AMHgAx+ADOYANxgA+GADgYAMBgAAAAAMAD//4f9/xgADEAAEAAAAAAAAAAAAAAB///n//+AAAAAAAAAAAAAABAABGAAMf9/w//+AAwAAAAAAAAAA4AADgAAYAABgAAHAAAMAAAwAADAAAcAADgAAAAAAAA"); + +exports.add = function(graphics) { + graphics.prototype.setFontLatoSmall = function() { + // Actual height 21 (20 - 0) + this.setFontCustom(font, 32, widths, 22+(1<<8)+(1<<16)); + } +}; diff --git a/apps/pastel/f_monoton.js b/apps/pastel/f_monoton.js new file mode 100644 index 000000000..34de6eca1 --- /dev/null +++ b/apps/pastel/f_monoton.js @@ -0,0 +1,7 @@ + +exports.add = function(graphics) { + graphics.prototype.setFontMonoton = function(scale) { + // Actual height 44 (43 - 0) + this.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAABmwAAAAAAzYAAAAAAZsAAAAAAM2AAAAAAGbAAAAAADNgAAAAABmwAAAAAAzYAAAAAAZsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAD+AAAAAAf8AAAAAD/ggAAAAf8HwAAAD/g/4AAAf8H/AAAD/g/4OAAf8H/B/AD/g/4P+Af8H/B/wAfg/4P+AAMH/B/wAAA/4H+AAAD/A/4AAAB4H/AAAAAA/4AAAAAH/AAAAAAP4AAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAH//gAAAAf//8AAAA/AAPgAAA8f/x8AAB4//+PAAB5+APxwABzwfwecAAzj//jnAA7n+P85gA7ngAPO4AbnH/xzsAdnP/+c3AN3PAHndgGzOAA5m4DbuAAO7MD9mAADN2Bs3AAB2bA2bAAAbNgbNgAANmwNmwAAGzYGzYAADZsDdmAADN2B+7AABuzAbMwABmbgNneAD3NgHZ3+/3MwBuc//nO4A7nB8HGYAM58AfOcAHeP/+OcABzx/8ecAAc+AA+cAAHH//8cAAB4//48AAAPg+B8AAAD+AP4AAAAP//wAAAAA/+AAAAAAAAAAAAAAAAAAABsAAAAAAA2AAAAAAAbAAAAAAANgAAAAAAGwAAAAAADf////8ABv////+AA3/////AAbAAAAAAAN/////wAG/////4ADYAAAAAABv////+AA3/////AAb/////gANgAAAAAAG/////4ADf////8AAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAADcAAAA2wBs2AADbYA2bAADtsAbZgADm2AftwAHjbAN24AHNtgGzYAPO2wDZsAPebYBs2AOeNsA2bAec22AbNge87bANmwc55tgG7c8542wD9355zbYA2Z5zztsAbODzjm2ANz/nnjbADc/nnhtgBnCPHA2wA74fPAbYAOf+OANsADj8eAG2AA8A+ADbAAP/8AAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAABgG6AAAAuwDdsAAG3YBs2AADZuA27AABu3A/ZgAA7dgbtwAAduwN2w2zG3YGzYbZjZsDZsNsxs2Bs2G2Y2bA2bDbMbNgbNhtmNmwNmw2zGzYG7MbdnbsD939m/d2A2Z/7PM3AbuBtwO7AOz73eeZgDc/9n+dwB3H2Y8cwAZ4HnA84AGf/5/84ADz/OP44AAeALwB4AAH/+//4AAA/+H/wAAADwAfAAAAAAAAAAAAAAAAAAAAAAAZsAAAAAB82AAAAAD+bAAAAAHzNgAAAAPjmwAAAAfHzYAAAB+P5sAAAD8fM2AAAHw+ObAAAPj8fNgAAfH4/mwAA+Ph8zYAAcfH4ZsAAA+Px82AAB8fD+bAAD4+HzNgABh8PhmwAAH4/AzYAAPx+AZsAAPD4AM2AAGHwP+bfgAfgH/NvwA/AABmwAA8AAAzYAAYAA/5t+AAAAf82/AAAAAGbAAAAAADNgAAAAAAAAAAAAAAAAAAAAAAAGAAE///ADAAGf//gBwADP//wCcABmAAADmAAz//8C7gAZ//+DMwAMwAAA3YAGf//hZsADP//xu3ABn//4zdgAzDNsNuwAZhu2GzYAMw2bDZsAGYbNhs2ADMNmw2bABmGzYbNgAzDZsdmwAZhs2M3YAMw3d+zcAGYZm+ZsADMOzgd2ABmDM883AAzB3P87AAZgZx47gAMwOcB5gAGYDn/5gADMA4/zwAAAAPADwAAAAD8fgAAAAAf/gAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///4AAAD////AAAHwAADwAAHH//8eAAHP///ngAHfgAB8wAHeH/8PcADcf//x3ADsf//+ZgBu8AADu4B2c//8zMA3d///M2AbNwAB2bgduxs2bswP2Z2/O3YGzYzbDZsDZsbths2Bs2Nmw2bA2bGzYbNgbNjZsNmwNmxs2GzYH7c2bHbsDtmbtzdmA2bM3fs3AbMHZnO7AM3BuYOZgHZAzP+dgBmAMx+cwA7gHeAcwAMgB3584AHAAc/84ABgAHHx4AAAAB4D4AAAAAf/wAAAAAD/gAAAAAAAAAAAAAAAAAAZsAAAAAAM2AAAAAAGbAAAAAADNgAAAAABmwAAAAAAzYAAAAAAZsAAAAAAM2AAAAPAGbAAAB/gDNgAAP+ABmwAD/wYAzYAf+D8AZsD/wf8AM2f8D/gAGT/gf8HgAf8D/g/wB/g/8H/AA8H/g/4MAA/8H/B+AH/g/4P+AH4H/B/wADA/4P+AAAH/B/wAAA/4P+AAAAfB/wAAAAAP+AAAAAB/wAAAAAD+AAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAGAAwAAAA/8H/gAAB//v/8AAB4B/APgADz+PP54ABn/x//OABng8eDzAB3HHOcdwA3P9z/nYA7P/d/5mAbOBmYO7ANmebvzNwP3fs392YGzc3ZmbsDZsZsxs2Bs2M2Y2bA2bGbMbNgbNjNmNmwNmxmzGzYGzYzZjZsDZsZsxs2Bs2M2Y2bA2bGbMbNgbNzNmNmwP2Zm7s3YDbv7M+7MBszt3OZuA3MGZwd2ANn/uf8zAGY+zn47gDvAc4A7gA78/Pj5gAOf/z/zwADj8cPjwAA+A/gHgAAH/9//gAAA/4P/AAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAD/4AAAAAHw/AAAAAHADwADAAHP8cABgAHf/nAA4AHeB5gDuAHcfOYAzADc/7uBdwBs8ezBmYBu4DdgbsA2Z924s3AbN+bM3bgfsxt2duwNm4zbG3YGzYZtjZsDZsM2xs2Bs2GbY2bA2bDNsbNgbNhv2NmwP242zO3YHbszbm7sBs3AAHZuA2Z///M2Abuf//O7AGzh/8ObgDc8AA+dgB3P//+dwAdx//8cwAGeAAA8wADn///44AA8///54AAPgAAB4AAB+AAPwAAAP///gAAAA//+AAAAAAAAAAAAAAAAAAAAAAAAAAAADbBmwAAABtgzYAAAA2wZsAAAAbYM2AAAANsGbAAAAG2DNgAAADbBmwAAABtgzYAAAA2wZsAAAAAAAAAAAAAAAAAAA="), 46, atob("DRYpFR0eHiImHygmDQ=="), 49+(scale<<8)+(1<<16)); + } +}; diff --git a/apps/pastel/f_orbitron.js b/apps/pastel/f_orbitron.js new file mode 100644 index 000000000..b58056c0e --- /dev/null +++ b/apps/pastel/f_orbitron.js @@ -0,0 +1,11 @@ + + +var widths = atob("ChcmEiUlISUlHiYlCg=="); +var font = atob("AAAAAAAAAAAAAAAAAAAAPAAAAAAB4AAAAAAPAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAPwAAAAAD8AAAAAA+AAAAAAPgAAAAAD4AAAAAB+AAAAAAfgAAAAAHwAAAAAB8AAAAAAfAAAAAAPwAAAAAD4AAAAAA+AAAAAAPgAAAAAH4AAAAAB+AAAAAAfAAAAAAHwAAAAAB8AAAAAA/AAAAAAPwAAAAAD4AAAAAAAAAAAAAAAAAAAAAB///+AAA////8AAP////wAD/////AAfgAA/4ADwAAH/AAeAAB94ADwAAfPAAeAAH54ADwAB+PAAeAAPh4ADwAD4PAAeAA+B4ADwAPgPAAeAD8B4ADwAfAPAAeAHwB4ADwB8APAAeAfAB4ADwH4APAAeB+AB4ADwPgAPAAeD4AB4ADw+AAPAAePwAB4ADz8AAPAAefAAB4AD3wAAPAAf8AAB4AD/////AAf////4AB////+AAH////gAAH///gAAAAAAAAAAAAAAAAAACAAAAAAAwAAAAAAOAAAAAADwAAAAAB+AAAAAAfwAAAAAH4AAAAAB+AAAAAAfgAAAAAD4AAAAAAf////4AD/////AAf////4AD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAf/4AA+AP//AAPwD//4AD+Af//AAfgH4H4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4AD//8APAAf//gB4AB//4APAAH/+AB4AAH+AAHAAAAAAAAAAAAAAAAAAAAAAAAAOAAA4AAHwAAHgAB+AAA+AAfwAAH4AD4AAAfAAeAAAB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAfAPgB4AD//8APAAP////4AA////+AAD////wAAAAP/8AAAAAAAAAAAAAAAAAAAAPgAAAAAD8AAAAAA/gAAAAAP8AAAAAB/gAAAAAf8AAAAAH3gAAAAB88AAAAAfHgAAAAHw8AAAAB+HgAAAAfg8AAAAH4HgAAAA+A8AAAAPgHgAAAD4A8AAAA/AHgAAAPwA8AAAD8AHgAAA/AA8AAAPwAHgAAB8AA8AAAfgAHgAAD/////AAf////4AD/////AAf////4AAAAA8AAAAAAHgAAAAAA8AAAAAAHgAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAD//4BwAAf//APgAD//4B+AAf//AP4AD8H4A/AAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAP//4ADwA///AAeAD//wADwAP/8AAcAAP8AAAAAAAAAAAAAAAAAAAAAAAAAB///+AAA////8AAP////wAD/////AAfg/AH4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAAAPAB4AAAB///AAAAH//4AAAAf/+AAAAB//gAAAAB/gAAAAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAf////4AB/////AAP////4AA/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+D/wAAH////gAB////+AAf////4AD8D+A/AAeAHgB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA8APAAf////4AB/////AAP////wAAf/v/8AAA/gP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/gAAAAH/+ABgAB//4AOAAf//gB4AD4B8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA+APAAf////4AB////+AAP////wAAf///4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAB4AADwAAPAAAeAAB4AADwAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); + +exports.add = function(graphics) { + // Actual height 32 (35 - 4) + graphics.prototype.setFontOrbitron = function() { + this.setFontCustom(font, 46, widths, 45+(1<<8)+(1<<16)); + } +}; diff --git a/apps/pastel/pastel.app.js b/apps/pastel/pastel.app.js index 1fe3e4a58..aa4f6abf8 100644 --- a/apps/pastel/pastel.app.js +++ b/apps/pastel/pastel.app.js @@ -1,72 +1,96 @@ - -Graphics.prototype.setFontOrbitron = function() { -// Actual height 32 (35 - 4) -var widths = atob("ChcmEiUlISUlHiYlCg=="); -var font = atob("AAAAAAAAAAAAAAAAAAAAPAAAAAAB4AAAAAAPAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAPwAAAAAD8AAAAAA+AAAAAAPgAAAAAD4AAAAAB+AAAAAAfgAAAAAHwAAAAAB8AAAAAAfAAAAAAPwAAAAAD4AAAAAA+AAAAAAPgAAAAAH4AAAAAB+AAAAAAfAAAAAAHwAAAAAB8AAAAAA/AAAAAAPwAAAAAD4AAAAAAAAAAAAAAAAAAAAAB///+AAA////8AAP////wAD/////AAfgAA/4ADwAAH/AAeAAB94ADwAAfPAAeAAH54ADwAB+PAAeAAPh4ADwAD4PAAeAA+B4ADwAPgPAAeAD8B4ADwAfAPAAeAHwB4ADwB8APAAeAfAB4ADwH4APAAeB+AB4ADwPgAPAAeD4AB4ADw+AAPAAePwAB4ADz8AAPAAefAAB4AD3wAAPAAf8AAB4AD/////AAf////4AB////+AAH////gAAH///gAAAAAAAAAAAAAAAAAACAAAAAAAwAAAAAAOAAAAAADwAAAAAB+AAAAAAfwAAAAAH4AAAAAB+AAAAAAfgAAAAAD4AAAAAAf////4AD/////AAf////4AD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAf/4AA+AP//AAPwD//4AD+Af//AAfgH4H4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4AD//8APAAf//gB4AB//4APAAH/+AB4AAH+AAHAAAAAAAAAAAAAAAAAAAAAAAAAOAAA4AAHwAAHgAB+AAA+AAfwAAH4AD4AAAfAAeAAAB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAfAPgB4AD//8APAAP////4AA////+AAD////wAAAAP/8AAAAAAAAAAAAAAAAAAAAPgAAAAAD8AAAAAA/gAAAAAP8AAAAAB/gAAAAAf8AAAAAH3gAAAAB88AAAAAfHgAAAAHw8AAAAB+HgAAAAfg8AAAAH4HgAAAA+A8AAAAPgHgAAAD4A8AAAA/AHgAAAPwA8AAAD8AHgAAA/AA8AAAPwAHgAAB8AA8AAAfgAHgAAD/////AAf////4AD/////AAf////4AAAAA8AAAAAAHgAAAAAA8AAAAAAHgAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAD//4BwAAf//APgAD//4B+AAf//AP4AD8H4A/AAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAP//4ADwA///AAeAD//wADwAP/8AAcAAP8AAAAAAAAAAAAAAAAAAAAAAAAAB///+AAA////8AAP////wAD/////AAfg/AH4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAeAPAB4ADwB4APAAAAPAB4AAAB///AAAAH//4AAAAf/+AAAAB//gAAAAB/gAAAAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAeAAAAAADwAAAAAAf////4AB/////AAP////4AA/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+D/wAAH////gAB////+AAf////4AD8D+A/AAeAHgB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA4APAAeAHAB4ADwA8APAAf////4AB/////AAP////wAAf/v/8AAA/gP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/gAAAAH/+ABgAB//4AOAAf//gB4AD4B8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA8APAAeAHgB4ADwA+APAAf////4AB////+AAP////wAAf///4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAB4AADwAAPAAAeAAB4AADwAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); -var scale = 1; // size multiplier for this font -g.setFontCustom(font, 46, widths, 45+(scale<<8)+(1<<16)); -}; - -Graphics.prototype.setFontCabinSketch = function() { -// Actual height 48 (51 - 4) -var widths = atob("ECMtGCEiJSIkHyYlDw=="); -var font = atob("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"); -var scale = 1; // size multiplier for this font -g.setFontCustom(font, 46, widths, 65+(scale<<8)+(1<<16)); -}; - -Graphics.prototype.setFontGochiHand = function() { -// Actual height 54 (59 - 6) -var widths = atob("GRMtICcqJiopKiwoGQ=="); -var font = atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA+AAAAAAAAAAAAfwAAAAAAAAAAAH+AAAAAAAAAAAB/gAAAAAAAAAAAf4AAAAAAAAAAAH+AAAAAAAAAAAB/gAAAAAAAAAAAP4AAAAAAAAAAAD8AAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAP+AAAAAAAAAAA//gAAAAAAAAAH//4AAAAAAAAA///+AAAAAAAAP////gAAAAAAB/////4AAAAAAP/////+AAAAAD//////+AAAAA///////wAAAAAf//////AAAAAAP/////4AAAAAAD/////AAAAAAAA////4AAAAAAAAP//+AAAAAAAAAD//gAAAAAAAAAA/8AAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAH//AAAAAAAAAAH//8AAAAAAAAAH///wAAAAAAAAD///+AAAAAAAAB////wAAAAAAAA////+AAAAAAAAf////gAAAAAAAP/8//8AAAAAAAD/wAf/AAAAAAAB/wAD/4AAAAAAA/4AAP+AAAAAAAP8AAB/wAAAAAAD/AAAf8AAAAAAB/gAAD/AAAAAAAf4AAA/wAAAAAAH8AAAP8AAAAAAB/AAAD/AAAAAAAfwAAA/wAAAAAAP8AAAH8AAAAAAD/AAAD/AAAAAAAf4AAA/wAAAAAAH+AAAP8AAAAAAB/gAAD/AAAAAAAf4AAA/wAAAAAAH/AAAP4AAAAAAB/wAAH+AAAAAAAP+AAB/gAAAAAAD/wAA/wAAAAAAA/+AAf8AAAAAAAH/wAH+AAAAAAAB/+AH/gAAAAAAAP/4D/wAAAAAAAB////4AAAAAAAAf///+AAAAAAAAD////AAAAAAAAAf///gAAAAAAAAD///wAAAAAAAAAP//wAAAAAAAAAA//4AAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAA/gAAAAAAAAAAAf4AAAAAAAAAAAP+AAAAAAAAAAAH/gAAAAAAAAAAB/wAAAAAAAAAAA/4AAAAAAAAAAAf8AAAAAAAAAAAH/AAAAAAAAAAAD/gAAAAAAAAAAA/wAAAAAAAAAAAf4AAAAAAAAAAAP+AAAAAAAAAAAD/AAAAAAAAAAAB/wAAAAAAAAAAAf+AAAAAAAAAAAH/4AAAAAAAAAAD//8AAAAAAAAAA////4AAAAAAAAP/////gAAAAAAB/////8AAAAAAAf/////AAAAAAAB/////wAAAAAAAP////8AAAAAAAAP////AAAAAAAAAH///wAAAAAAAAAAf/4AAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAHwAAAAAAD8AAAD+AAAAAAB/AAAB/gAAAAAA/4AAA/8AAAAAAf+AAAf/AAAAAAH/gAAH/wAAAAAD/wAAD/8AAAAAB/4AAB//AAAAAAf8AAA//wAAAAAH+AAAf/8AAAAAD/AAAP//AAAAAA/wAAD//wAAAAAP4AAB//8AAAAAD+AAA///AAAAAA/gAAf8/wAAAAAP4AAP+P8AAAAAD/AAP/j/AAAAAA/wAH/w/wAAAAAP+AH/4P8AAAAAD/wD/8D/AAAAAA//P/+A/wAAAAAH////AP+AAAAAB////AB/gAAAAAP///gAf4AAAAAD///wAH+AAAAAAf//wAB/gAAAAAD//4AAf4AAAAAAP/4AAH+AAAAAAA/wAAB/gAAAAAAAAAAAf4AAAAAAAAAAAH+AAAAAAAAAAAA/gAAAAAAAAAAAPwAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAD8AAAAAAAAAAAB/gAAAAAAAAAAAf8AAAAAAAAAAAP+AAAAAAAAAAAD/gAAAAAAAAAAB/wAAAcAAAAAAAf8AAAPwAAAAAAH+AAAD/AAAAAAB/gAAA/4AAAAAA/wAAAP/AAAAAAP8AAAD/4AAAAAD/AB+A//AAAAAA/wA/wH/wAAAAAP4AP8A/+AAAAAD+AD/AD/gAAAAA/gB/wAf8AAAAAP8Af8AH/AAAAAD/AH/AA/wAAAAA/wB/gAP8AAAAAP+Af4AD/AAAAAD/gP+AA/wAAAAAf+H/gAP8AAAAAH///4AD/AAAAAB////AA/wAAAAAP///wAP8AAAAAB///+AD/AAAAAAf///gA/gAAAAAD///+Af4AAAAAAP/n/4f+AAAAAAB/g////AAAAAAAAAP///wAAAAAAAAB///4AAAAAAAAAP//8AAAAAAAAAB///AAAAAAAAAAP//AAAAAAAAAAA//gAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAH+AAAAAAAAAAAH/wAAAAAAAAAAD/+AAAAAAAAAAD//gAAAAAAAAAB//8AAAAAAAAAB///AAAAAAAAAA///wAAAAAAAAAf//8AAAAAAAAAf/7/AAAAAAAAAP/4/4AAAAAAAAP/4H+AAAAAAAAH/8B/gAAAAAAB//8Af4AAAAAAA//+AH+AAAAAAAP//AB/gAAAAAAH//wAf4AAAAAAB///AH+AAAAAAAf//+B/gAAAAAAH///+f4AAAAAAA/////+AAAAAAAH/////wAAAAAAA/////8AAAAAAAAf////8AAAAAAAAf////+AAAAAAAA/////4AAAAAAAA/////AAAAAAAAB////wAAAAAAAAB///8AAAAAAAAAD///AAAAAAAAAA///wAAAAAAAAAP//4AAAAAAAAAD/D8AAAAAAAAAA/wAAAAAAAAAAAH4AAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAf4AP/wAAAAAAAf/AH/+AAAAAAAP/4D//wAAAAAAD//A//+AAAAAAB//wP//wAAAAAAf/8D//8AAAAAAH//g///gAAAAAB//4H//4AAAAAAf//AAf/AAAAAAP9/wAD/wAAAAAD/P+AAf8AAAAAA/j/gAD/AAAAAAP4f4AA/4AAAAAD+H/AAH+AAAAAA/h/wAB/gAAAAAP4P+AAf4AAAAAD+D/gAH+AAAAAA/g/4AA/gAAAAAP4H/AAP4AAAAAD+B/wAD+AAAAAB/gP+AA/gAAAAAf4D/gAP4AAAAAH+Af8AH+AAAAAB/gH/gB/gAAAAAf4B/4Af4AAAAAH+AP/AH8AAAAAB/gB/4D/AAAAAAf4Af/h/wAAAAAD+AD///4AAAAAA/gA///+AAAAAAP4AH///AAAAAAD+AA///gAAAAAA/gAH//wAAAAAAH4AA//4AAAAAAAMAAD/8AAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAH//wAAAAAAAAAH///AAAAAAAAAD///4AAAAAAAAD////gAAAAAAAB////8AAAAAAAA/////gAAAAAAAf////4AAAAAAAH/4B//AAAAAAAD/wAP/4AAAAAAA/4AD/+AAAAAAAf8AB//wAAAAAAH+AAf/8AAAAAAD/AAP//gAAAAAA/wAD//4AAAAAAP8AA/n+AAAAAAD/AAf5/gAAAAAA/wAH8P8AAAAAAP8AB/D/AAAAAAD/AA/w/wAAAAAA/4AP8P8AAAAAAP+AD+D/AAAAAAD/wA/g/wAAAAAAf8AP4P8AAAAAAH+AD+D/AAAAAAA/gA/g/wAAAAAAHwAP8P8AAAAAAAwAD/D/AAAAAAAAAA/x/wAAAAAAAAAP//4AAAAAAAAAD//+AAAAAAAAAAf//AAAAAAAAAAH//wAAAAAAAAAA//4AAAAAAAAAAH/8AAAAAAAAAAB/+AAAAAAAAAAAH/AAAAAAAAAAAAeAAAAAAAD+AAAAAAAAAAAA/gAAAAAAAAAAAP4AAAAAAAAAAAD+AAAAAAAAAAAA/gAeAAAAAAAAAP4AfwAAAAAAAAD+AH8AAAAAAAAA/gB/AAAAAAAAAP4AfwAAAAAAAAD+AH8AAAAAAAAA/gB/AAAAAAAAAP4AfwAAAAAAAAD+AH8AAAAAAAAA/wD/AAAAAAAAAP8A/wAAAAAAAAD/AP8AAAAAAAAA/wD/AAAAAAAAAP8A/wAAAAAAAAD/gP8AAAAAAAAA/4D/AAAAAAAAAH/A/wAAAAAAAAB/4P+AHwAAAAAAf//////AAAAAAD//////wAAAAAA//////8AAAAAAH//////AAAAAAB//////wAAAAAAP/////8AAAAAAB/////+AAAAAAAH/////AAAAAAAAAP+AAAAAAAAAAAB/gAAAAAAAAAAAf4AAAAAAAAAAAH+AAAAAAAAAAAB/gAAAAAAAAAAAf4AAAAAAAAAAAH+AAAAAAAAAAAB/gAAAAAAAAAAAP4AAAAAAAAAAAD+AAAAAAAAAAAA/gAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAD//AAAAAAAAD+D//8AAAAAAAD/9///gAAAAAAB/////8AAAAAAA//////AAAAAAAf/////4AAAAAAH//////AAAAAAD///4H/wAAAAAA///4Af+AAAAAAP4f+AD/gAAAAAH+D/gAf4AAAAAB/A/4AH/AAAAAAfwP+AA/wAAAAAH8D/wAP8AAAAAB/A/8AD/AAAAAAfwP/AAfwAAAAAH+D/wAH8AAAAAB/g/8AB/AAAAAAf4P/AAfwAAAAAH+D/wAH8AAAAAB/w/8AB/AAAAAAP+P+AA/wAAAAAD/x/gAP8AAAAAA///8AD+AAAAAAH///gB/gAAAAAB///4Af4AAAAAAP///gP8AAAAAAB///+H/AAAAAAAP/////gAAAAAAB/////4AAAAAAAH////8AAAAAAAAAH//+AAAAAAAAAA///AAAAAAAAAAD//gAAAAAAAAAAP/wAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+AAAAAAAAAAB//wAAAAAAAAAA//+AAAAAAAAAAf//wAAAAAAAAAH//8AAAAAAAAAD///gAAAAAAAAA///4AAAAAAAAAf4H/AAAAAAAAAH+B/wAAAAAAAAB/AP8AAAAAAAAA/wD/AAAAAAAAAP4A/wAAAAAAAAD+AP8AAAAAAAAB/gD/AAAAAAAAAf4A/wAAAAAAAAH+AP8AAAAAAAAB/AD/AAAAAAAAAfwB/gAAAAAAAAH8Af4AAAAAAAAB/AP8AAAAAAAAAfwD/AAAAAAAAAH8B/wAAAAAAAAB/Af4AAAAAAAAAf4P8AAAAAAAAAH+H/AAAAAAAAAB/j/gAAAAAAAAAf//////wAAAAAH///////gAAAAA///////8AAAAAP///////AAAAAD///////wAAAAAf//////4AAAAAH//////+AAAAAB///////gAAAAAP//////wAAAAAB/gAAAAAAAAAAAfgAAAAAAAAAAADwAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACAAAAAAAAAPgAD4AAAAAAAAH8AB/AAAAAAAAB/gAf4AAAAAAAAf4AH+AAAAAAAAH+AB/gAAAAAAAB/gAf4AAAAAAAAf4AH+AAAAAAAAD+AA/gAAAAAAAA/AAPwAAAAAAAADgAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); -var scale = 1; // size multiplier for this font -g.setFontCustom(font, 46, widths, 80+(scale<<8)+(1<<16)); -}; - -Graphics.prototype.setFontLatoSmall = function() { -// Actual height 21 (20 - 0) -var widths = atob("BAgJDQ0RDwUHBwkNBQgFCA0NDQ0NDQ0NDQ0GBg0NDQkSDw4PEQ0MEBEHCg8LFBESDRIODA0QDxYODg4HCAcNCQcLDAoMDAcLDAYGDAYSDAwMDAkKCAwLEQsLCgcHBw0A"); -var font = atob("AAAAAAAAAAAAAAAAAAAAAAAAEA/84D/zgAAEAAAAAAAAAAAA+AAD8AAAAAAAAAD4AAPgAAAAAAAAAABAADGIAM/gB/8A/+AD8YAAx+AD/4B/4APxgAjGAAIAAAAAAAAAAAAADwMAfg4DnBgMMHg///P/5gMGGAwc4Bg/AEB4AAAAA4AAHwAA5gYDCDgMIcAxjgB84ADnAAA4AAHOABz8AOMYBwwgMDCAgP4AAfAAAAAAAAAAeAAH8APY4B/BgMcGAw4YDBxgMDmA4HwBwPAAB8AAf4ABhgAACAAAAD4AAPgAAAAAAAAAAAAAH/gB//wfAHzgAHAAAAAAAAAAAOAAcfAPwf/8Af+AAAAAAAAAAAANgAAUAABwAAfwAAcAADQAAJAAAAAAAAAAAGAAAYAABgAAGAAP/gA/+AAGAAAYAABgAAGAAAQAAAAAAAEAAA7AAD4AAAAAAAAAAAAGAAAYAABgAAGAAAYAAAgAAAAAAAAAADgAAOAAAYAAAAAAPAAD4AB8AAfAAHwAD4AAeAABAAAADgAB/wAf/wBwHAMAGAwAYDABgMAGA4A4B4PAD/4AH/AAAAAAAAAAAAAYAgDgGAcAYDgBgP/+A//4AABgAAGAAAYAAAAAAAAAAAAQBgHgOAcB4DgPgMA2AwGYDAxgOOGAfwYB+BgBgGAAAAAAAADA4AcDwDgDgMAGAwgYDDBgMcGA5w4B9/ADj4AAAAAAAAABgAAOAAB4AAfgADmAAcYADhgA4GAD//gP/+AAGAAAYAAAgAAAAAADAH4OA/gYDGBgMYGAxgYDGDgMccAw/wCB8AAAAAAAAAAYAAH4AB/wAPjgB8GAOwYDzBgOMGAg44AD/AAH4AACAAAAAAAAAwAADAAAMAGAwB4DAfAMHwAw8ADPAAPwAA+AADgAAAAAAAAAA4+AH38A/44DHBgMMGAwwYDHBgOeOAffwA4/AABwAAAAAAAAAAAAPgAB/AAOMGAww4DBngMF4Aw/ADj4AH+AAPwAAAAAAAAADg4AODgAwGAAAAAAAAAAAABAAAODsA4PgBAYAAAAAAAAAQAABgAAPAAA8AAG4AAZgADHAAMMABgwAAAAAAAAAAAAAAAAEQAAZgABmAAGYAAZgABmAAGYAAZgABmAAGYAAAAAAAAAAAAAAAAGDAAMMAAxwABmAAG4AAPAAA8AABgAAEAAAAAAAAAEAAA4AADABgMHOAw84DGAAP4AAfAAAAAAACAAD/gAePADgGAYAMBh8YMPxgxxGDGEIIYwgxOCDH8IMYRgYBGAwMwD/hAD8AAAAAAAGAAB4AAfgAP4AD+AA/YAPhgA4GAD4YAD9gAD+AAD+AAB+AAB4AABgAAAAAAAD//gP/+AwYYDBhgMGGAwYYDDhgOOGA/84B+/ABh4AAAAAAAAA/gAH/gA+/AHAcA4A4DgBgMAGAwAYDABgMAGA4A4BgDAGAMAAAAAAAAAAAA//4D//gMAGAwAYDABgMAGAwAYDABgOAOAYAwB4PAD/4AH/AAHwAAAAAAAAAAAAP/+A//4DDBgMMGAwwYDDBgMMGAwwYDABgMAGAAAAAAAAAAAA//4D//gMGAAwYADBgAMGAAwYADBgAMGAAwAAAAAAA/gAH/AA++AHAcA4A4DgBgMAGAwAYDABgMGGAwYYDhjgGH8AAfwAAAAAAAAAAAD//gP/+A//4ADAAAMAAAwAADAAAMAAAwAADAAAMAA//4D//gAAAAAAAAAAAAAAA//4D//gAAAAAAAAAAAAAAAAAYAABgAAGAAA4AAHgP/8A//gAAAAAAAAAAAAAAAP/+A//4ADAAAMAAB4AAPwABzgAOHABwPAOAeAwA4CAAgAAAAAAAAAAAP/+A//4AABgAAGAAAYAABgAAGAAAYAABgAAAA//4D//gP/+AeAAAeAAAeAAA+AAA8AAA4AAHgAB4AAeAAHwAA8AAPAAA//4D//gAAAAAAAAAAAAAAA//4D//gHAAAOAAAeAAA8AAA4AABwAADwAADgAAHAP/+A//4AAAAAAAAAAAAP4AD/4AeDwBwHAOAOAwAYDABgMAGAwAYDABgOAOAcBwB4PAD/4AD+AABAAAAAAAAAAAAAP/+A//4DBgAMGAAwYADBgAMGAA44AB/AAH4AAHAAAAAAA/gAP/gB4PAHAcA4A4DABgMAGAwAYDABgMAGA4A4BwHwHg/gP/nAP4MAEAQAAAAAAAAAAA//4D//gMGAAwYADBgAMHAAw/ADneAH4eAPA4AABgAAAAAAwA8DAH4OA5wYDDBgMMGAw4YDBjgOH8AYPgAAIAAAAAwAADAAAMAAAwAADAAAP/+A//4DAAAMAAAwAADAAAMAAAAAAAAAAAAAA//AD//AAAcAAA4AABgAAGAAAYAABgAAOAABwD//AP/4A/8AAAAAOAAA+AAB+AAB/AAA/AAA/AAAeAAD4AA/AAPwAH8AB+AAPgAA4AAAAAAOAAA/AAB/gAA/wAAf4AAPgAB+AA/gAfwAH4AA8AAD8AAD+AAB/AAB/gAA+AAH4AD/AD/gA/wAD4AAMAAAgAYDgDgPAeAeHgAe8AA/AAA4AAHwAB/wAPHgDwPgOAOAgAYAAAAIAAA4AADwAAHwAAHgAAHgAAP+AA/4APgAB4AAeAADwAAMAAAgAAAAAAMAGAwA4DAPgMB+AwPYDDxgMeGAzwYD8BgPgGA8AYDABgAAAAAAAH//8f//xAABEAAEAAAAAAAHAAAPAAAPgAAPgAAHwAAHwAAHgAADAAAAEAAEQAAR///H//8AAAAAAAAAAAAAAABgAAeAADwAA8AADgAAHgAAPAAAOAAAIAAAAAAAAAAAAQAABAAAEAAAQAABAAAEAAAQAABAAAAAAAAgAADAAAOAAAIAAAAAAAAAAAAAAAHAAY+ADnYAMYgAxiADGYAORAAf+AA/4AAAAAAAB//4H//gAYMADAYAMBgAwGADAYAPHgAf8AA/gAAAAAAAAA/gAH/AA4OADAYAMBgAwGADAYAMDgAQEAAAAAB+AAf8ADx4AMBgAwGADAYAMBgAYMB//4H//gAAAAAAAAB8AAf8ADpwAMhgAyGADIYAMhgA6GAB4wADhAAAAACAAAMAAH/+A//4DMAAMwAAzAAABAcAff4D/5gMbmAwmYDCZgMZmA/mYD8fAMA4AgAAAAAAAAAf/+B//4AGAAAwAADAAAMAAA4AAD/4AH/gAAAAAAACAAAc/+Bz/4CAAAAAAAAABiAAGc//5z//CAAAAAAAAAAAAAAf/+B//4AAYAADgAAfAAHuAA4cADAYAIAgAAAAAAAAAAAf/+B//4AAAAAAAAAAAAAAAA/+AD/4AEAAAwAADAAAMAAA/+AB/4AH/gAwAADAAAMAAA4AAD/4AD/gAAAAAAAAAAAA/+AD/4AGAAAwAADAAAMAAAwAAD/4AH/gAAAAAAAAD+AAf8ADg4AMBgAwGADAYAMBgA4OAB/wAD+AADgAAAAAP/+A//4BgwAMBgAwGADAYAMBgA8eAB/wAD8AAAAAAAAAB+AAf8ADx4AMBgAwGADAYAMBgAYMAD//gP/+AAAAAAAAP/gA/+ABwAAOAAAwAADAAAMAAAAAAAAQAHhgA/GADMYAMxgAxmADH4AEPAAAQAAAAAMAAAwAAf/wD//gAwGADAYAMBgAAAAAAAAP/AA/+AAAYAABgAAGAAAYAADAA/+AD/4AAAAAAAADgAAPgAAfgAAPwAAPgAAeAAHwAD8AA/AADgAAIAAA4AAD8AAD+AAB+AAB4AA/AAfgADwAAPgAAfwAAP4AAHgAB+AA/gAPwAA4AAAAAAAAgAwGADh4AHvAAPwAAOAAB8AAe8ADh4AMBgAgCACAAAOAAA+AAA/BgA/eAA/wAD8AA/AAPgAD4AAOAAAgGADA4AMHgAx+ADOYANxgA+GADgYAMBgAAAAAMAD//4f9/xgADEAAEAAAAAAAAAAAAAAB///n//+AAAAAAAAAAAAAABAABGAAMf9/w//+AAwAAAAAAAAAA4AADgAAYAABgAAHAAAMAAAwAADAAAcAADgAAAAAAAA"); -var scale = 1; // size multiplier for this font -g.setFontCustom(font, 32, widths, 22+(scale<<8)+(1<<16)); -}; - -Graphics.prototype.setFontLato = function() { -// Actual height 50 (53 - 4) -var widths = atob("DhglJSUlJSUlJSUlEA=="); -var font = atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAHwAAAAAAAAA/gAAAAAAAAH/AAAAAAAAAf8AAAAAAAAB/wAAAAAAAAD+AAAAAAAAAHwAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAB/AAAAAAAAAf8AAAAAAAAP/wAAAAAAAD/8AAAAAAAB//AAAAAAAAf/wAAAAAAAP/4AAAAAAAD/+AAAAAAAA//AAAAAAAAf/wAAAAAAAH/4AAAAAAAD/+AAAAAAAA//AAAAAAAAf/wAAAAAAAH/4AAAAAAAD/+AAAAAAAA//AAAAAAAAf/wAAAAAAAD/4AAAAAAAAP+AAAAAAAAA/AAAAAAAAADwAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//+AAAAAAA////AAAAAAP////gAAAAD/////AAAAA//////AAAAH/////+AAAA//gAH/8AAAH/gAAB/4AAA/4AAAB/wAAD+AAAAB/AAAfwAAAAD+AAB+AAAAAH4AAH4AAAAAfgAAfAAAAAA+AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAAfAAAAAA+AAB+AAAAAD4AAH4AAAAAfgAAfwAAAAD+AAA/gAAAAfwAAD/gAAAH/AAAH/gAAB/4AAAP/4AB//AAAAf/////4AAAA//////AAAAA/////4AAAAB////+AAAAAA////AAAAAAAf//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAB8AAAAAAAAAPwAAAD4AAAB/AAAAPgAAAP4AAAA+AAAB/AAAAD4AAAP8AAAAPgAAA/gAAAA+AAAH8AAAAD4AAA/gAAAAPgAAH8AAAAA+AAA/gAAAAD4AAH///////gAAf//////+AAB///////4AAH///////gAAf//////+AAB///////4AAAAAAAAAPgAAAAAAAAA+AAAAAAAAAD4AAAAAAAAAPgAAAAAAAAA+AAAAAAAAAD4AAAAAAAAAPgAAAAAAAAA+AAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAADwAAAA+AAAA/AAAAH4AAAP8AAAA/gAAB/wAAAH+AAAP/AAAA/4AAB/4AAAH/gAAH+AAAA/+AAA/gAAAH/4AAD8AAAA/vgAAfgAAAH8+AAB+AAAA/n4AAHwAAAH8fgAA/AAAA/h+AAD8AAAH8H4AAPwAAA/gfgAA/AAAH8B+AAD8AAA/gH4AAPwAAH8AfgAAfAAB/gB+AAB+AAP8AH4AAH8AB/gAfgAAP4Af8AB+AAA/8f/gAH4AAB///8AAfgAAH///gAB+AAAP//4AAH4AAAP//AAAfgAAAf/wAAB+AAAAP4AAAD4AAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAHgAAAAA8AAA/gAAAAPwAAD/AAAAD/AAAP+AAAAf8AAA/8AAAD/wAAB/4AAAf+AAAB/wAAD/gAAAB/AAAP4AAAAD+AAB/AAAAAH4AAH4AAAAAfgAAfgAAAAA+AAB8AAAAAD8AAPwAB4AAPwAA/AAHgAA/AAD8AAfAAD8AAPwAD8AAPwAA/AAPwAA/AAD8AA/AAD4AAHwAH8AAfgAAfgAf4AB+AAB/AD/gAP4AAD+AffAB/AAAP//9/Af8AAAf//n///gAAB//+P//8AAAD//wf//gAAAD/+A//8AAAAH/gB//gAAAAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAB+AAAAAAAAAf4AAAAAAAAD/gAAAAAAAAf+AAAAAAAAH/4AAAAAAAA//gAAAAAAAH++AAAAAAAB/z4AAAAAAAP+PgAAAAAAB/g+AAAAAAAf8D4AAAAAAD/gPgAAAAAAf4A+AAAAAAH/AD4AAAAAA/wAPgAAAAAH+AA+AAAAAB/wAD4AAAAAP8AAPgAAAAB/gAA+AAAAAf8AAD4AAAAD/AAAPgAAAAf4AAA+AAAAB///////4AAH///////gAAf//////+AAB///////4AAH///////gAAAAAAA+AAAAAAAAAD4AAAAAAAAAPgAAAAAAAAA+AAAAAAAAAD4AAAAAAAAAPgAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAADwAAAAAAQAAfgAAAAA/gAB+AAAAD/+AAH8AAAP//4AAPwAAH///gAAfgAAf//+AAB+AAB///4AAH4AAH/wPgAAPgAAfgB8AAA/AAB+AHwAAD8AAH4AfAAAPwAAfgB8AAA/AAB+AHwAAD8AAH4AfAAAPwAAfgB+AAA+AAB+AH4AAD4AAH4AfgAAfgAAfgA/AAD+AAB+AD8AAPwAAH4AP4AD/AAAfgAf4Af4AAB+AB////AAAH4AD///4AAAfAAH///AAAB8AAP//4AAAHwAAf//AAAAAAAAf/wAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gAAAAAAAB//gAAAAAAAf//gAAAAAAH///gAAAAAA////AAAAAAP///8AAAAAB//Af4AAAAAf/wAfwAAAAD/8AA/AAAAAf/wAB+AAAAH/+AAH4AAAA/7wAAPgAAAH/PAAA/AAAB/58AAD8AAAP+HwAAPwAAB/wfAAA/AAAf+B8AAD8AAD/wHwAAPwAAf8AfAAA+AAB/gB8AAD4AAH8AH4AAfgAAfgAfgAB+AAB4AA/AAPwAAHAAD+AB/AAAYAAP+Af4AAAAAAf///AAAAAAA///8AAAAAAB///gAAAAAAD//4AAAAAAAH//AAAAAAAAH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAgAAfgAAAAAOAAB+AAAAAD4AAH4AAAAA/gAAfgAAAAP+AAB+AAAAD/4AAH4AAAA//AAAfgAAAP/4AAB+AAAD/+AAAH4AAA//gAAAfgAAP/4AAAB+AAD/+AAAAH4AA//gAAAAfgAP/4AAAAB+AB/+AAAAAH4Af/gAAAAAfgH/4AAAAAB+B/+AAAAAAH4f/gAAAAAAfn/4AAAAAAB//+AAAAAAAH//gAAAAAAAf/4AAAAAAAB/+AAAAAAAAH/gAAAAAAAAf4AAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAwAD/+AAAAA/8Af/8AAAAP/4D//4AAAB//4f//wAAAP//j///gAAB///P8H/AAAP////AH8AAA/gH/wAP4AAH4AH+AAfgAAfgAf4AA+AAB8AA/gAD4AAHwAD8AAPwAA+AAHwAAfAAD4AAfAAB8AAPgAB8AAHwAA+AAHwAAfAAD4AAfAAB8AAHwAD8AAPwAAfAAPwAA+AAB+AB/gAD4AAH4AH+AAfgAAP4B/8AD+AAA/8//4AfwAAB///P8H/AAAD//8///4AAAH//h///AAAAP/4D//4AAAAP/AH//AAAAAHAAP/4AAAAAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8AAAAAAAAP/8AAAAAAAD//4AAAAAAAf//4AAAAAAD///gAAAAAAf///AAAIAAB/gP+AABgAAP4AP4AAeAAA/AAfwAD4AAH4AA/AAfgAAfgAB8AH+AAB8AAHwA/4AAPwAAfAH/gAA/AAB8B/8AAD8AAHwP/AAAPwAAfB/4AAA/AAB8P+AAAD8AAHj/wAAAHwAAef8AAAAfgAD7/gAAAB+AAP/8AAAAD8AB//AAAAAP4AP/4AAAAAf4D/+AAAAAB////wAAAAAD///8AAAAAAH///gAAAAAAH//4AAAAAAAP/+AAAAAAAAH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAfAAAAAD8AAD+AAAAAf4AAP4AAAAB/gAB/wAAAAH+AAH/AAAAAf4AAP4AAAAA/AAA/gAAAAB4AAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); -var scale = 1; // size multiplier for this font -g.setFontCustom(font, 46, widths, 64+(scale<<8)+(1<<16)); -}; - -Graphics.prototype.setFontArchitect = function() { -// Actual height 40 (41 - 2) -var widths = atob("CBolByEeJykkJCYhCg=="); -var font = atob("AAAAAAAAAAAAAAAAYAAAAAAAADgAAAAAAAAeAAAAAAAAB4AAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAD4AAAAAAAA/AAAAAAAAH4AAAAAAAB/AAAAAAAAf4AAAAAAAD+AAAAAAAA/wAAAAAAAH+AAAAAAAB/gAAAAAAAP8AAAAAAAD/AAAAAAAAf4AAAAAAAH+AAAAAAAA/gAAAAAAAP8AAAAAAAB/AAAAAAAAfwAAAAAAAH8AAAAAAAA/AAAAAAAAPwAAAAAAAB8AAAAAAAAfAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAP/8AAAAAAH//4AAAAAB///wAAAAAf/APgAAAAD/gAeAAAAA/wAA8AAAAH8AABwAAAA/AAAHgAAAHwAAAeAAAA+AAAA4AAADgAAADgAAAcAAAAOAAABwAAAA4AAAOAAAADgAAA4AAAAOAAADgAAAA4AAAOAAAADgAAA4AAAAOAAADgAAAB4AAAOAAAAHAAAA4AAAAcAAADwAAADwAAAHAAAAOAAAAeAAAB4AAAA4AAAPAAAADwAAB4AAAAHwAAPgAAAAPgAD8AAAAAf4D/gAAAAAf//4AAAAAAf/+AAAAAAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAP////4AAAB/////gAAAH////+AAAAf////gAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAADwAADAAAAAeAAAeAAAAD4AAD4AAAAfAAAfgAAAD4AAD+AAAAPAAAf4AAAB8AAH/AAAAHgAA/8AAAAcAAH/wAAADwAA/vAAAAOAAP48AAAA4AB/DgAAADgAf4OAAAAPAD+A4AAAA8A/wHgAAAD8/8AcAAAAH//gBwAAAAP/wAPAAAAAf8AA8AAAAAAAADgAAAAAAAAeAAAAAAAAB4AAAAAAAAHgAAAAAAAA+AAAAAAAAD4AAAAAAAAPAAAAAAAAA8AAAAAAAAHwAAAAAAAAfAAAAAAAAA4AAAAAAAABAAAAAAIAAAAAAAADwAAAAAAAAPAAAAAAAAA8AAAAAAAADgAAAAAAAAeAAAAAAAAB4AYAAAAAAHgBwAAAAAAeAPABAAAADwA8AGAAAAPAHgAYAAAA8AeADgAAADwDwAOAAAAOAPAB4AAAB4B8AHgAAAHgPwA8AAAAeA+ADwAAAB4H4AeAAAAHgfgD4AAAAeD+AfAAAAB4e4D8AAAAHj7gfgAAAAf/PH8AAAAB/4//gAAAAH/D/8AAAAAP4H/gAAAAA+Af8AAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAADwAAAAAAAAfAAAAAAAAD8AAAAAAAA/wAAAAAAAH/AAAAAAAA/8AAAAAAAPxwAAAAAAB+HAAAAAAAPwcAAAAAAB+BwAAAAAAfwPAAAAAAD+A8AAAAAAfwDwAAAAAD+APAAAAAAPwA8AAAAAB+ADwAAAAAP/////AAAA/////8AAAB/////wAAAD/////AAAAD////8AAAAAAH8AAAAAAAAeAAAAAAAAB4AAAAAAAAHgAAAAAAAAeAAAAAAAAB4AAAAAAAAHgAAAAAAAAcAAAAAAAABwAAAAAAAAHAAAAAAAAAcAAAAAAAABwAAAAAAAAGAAAAAAAAAAAAAAAAAAOAAAAAAAH/8AAAAAAf//wAAAAAD///AAAAAAP//8AAAAAA///wAAAAAAPgPAB4AAAA+A4APgAAAD4DgA+AAAAPAeAB4AAAA8BwAHgAAADwHAAeAAAAPAcAB4AAAB4BgAHgAAAHgGAAeAAAAeAYAD4AAAB4BgAPAAAAPgGAA8AAAA8AYADwAAADwBwAOAAAAPAHAB4AAAA8AcAHgAAAHwB4A8AAAAeAHgHgAAAB4APh+AAAAHgA//wAAAA+AB/+AAAADwAD/wAAAAPAAD8AAAAA8AAAAAAAAHwAAAAAAAAfAAAAAAAAB4AAAAAAAAHgAAAAAAAAeAAAAAAAAB4AAAAAAAAHAAAAAAAAAcAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAH//AAAAAAB///AAAAAAP//+AAAAAD///8AAAAAf+B/4AAAAD/AA/wAAAA/wAA/gAAAD8AAB+AAAAfAAAD8AAAD4AAAPwAAAfAAAB/AAAB4AAAP+AAAPAAAB/4AAA8AAAP/gAAHgAAB++AAAeAAAPz4AABwAAB+PgAAHAAAPw+AAAcAAA+D4AABgAAHwPgAAAAAA/A+AAAAAAD4H4AAAAAAfAfAAAAAAB4D8AAAAAAPgPgAAAAAA8B+AAAAAADwPwAAAAAAPA+AAAAAAA8P4AAAAAAD//AAAAAAAP/4AAAAAAAf+AAAAAAAA/gAAAAAAAAAAAAAAAIAAAAAAAABwAAAAAAAAHAAAAAAAAAcAAAAAAAABwAAAAAAAAHAAAAAAAAAcAAAAAAAABwAAAAAAAAHAAAAAAAAAcAAAAAAAABwAAAAAAAAHAAAAAAAAAcAAAAAAAADwAAAAAAAAPAAAAAAAAA8AAAAAAAADwAAAAAAAAPAAAP4AAAA8AAP/gAAADwAH/+AAAAfAB//wAAAB8Af//AAAAHwH/4AAAAAfB/4AAAAAB8f8AAAAAAH//AAAAAAAf/wAAAAAAB/8AAAAAAAP/gAAAAAAA/4AAAAAAAD/AAAAAAAAPwAAAAAAAA+AAAAAAAADwAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAH+AAAAAAAA/8AAAAAAAP/4AAAAAfB//gAAAAH/Pw/AAAAA//8A8AAAAH//gDwAAAA//8AHgAAAD4fwAeAAAAeA+AB4AAAB4DwADgAAAPAPAAOAAAA4A4AA4AAADgDgADgAAAOAOAAOAAABwAwAA4AAAHAHAADgAAAcAcAAOAAABwBwAA4AAAHAPAAHgAAAcA8AAcAAABwDgABwAAAHAeAAHAAAAcB8AA4AAABwPwAHgAAAHg/AAcAAAAeH8ADwAAAB4/4AeAAAAD//gD4AAAAP+fA/AAAAAfx//4AAAAAAD//AAAAAAAP/wAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAA/wAAAAAAAH/gAAAAAAA/+AAAAAAAH/8AAAAAAA/nwAAAAAAD4PAAAAAAAeA8AAAAAADwDwAAAAAAPAPAAAAAAB4A8AAwAAAHgDwAHgAAAeAPAAeAAADwA8AD4AAAPADwAfgAAA8AOAB8AAADwA4APwAAAPADgB+AAAA8AeAPwAAAD4B4B/AAAAHgHgf4AAAAfA+D+AAAAA/D5/wAAAAB///+AAAAAH///gAAAAAH//4AAAAAAP/+AAAAAAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAA4AAAAAAAADwDAAAAAAAOAeAAAAAAAYB4AAAAAAAAHgAAAAAAAAMAAAAAAAAAAAAA="); -var scale = 1; // size multiplier for this font -g.setFontCustom(font, 46, widths, 58+(scale<<8)+(1<<16)); -}; - -Graphics.prototype.setFontMonoton = function(scale) { - // Actual height 44 (43 - 0) - g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAABmwAAAAAAzYAAAAAAZsAAAAAAM2AAAAAAGbAAAAAADNgAAAAABmwAAAAAAzYAAAAAAZsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAD+AAAAAAf8AAAAAD/ggAAAAf8HwAAAD/g/4AAAf8H/AAAD/g/4OAAf8H/B/AD/g/4P+Af8H/B/wAfg/4P+AAMH/B/wAAA/4H+AAAD/A/4AAAB4H/AAAAAA/4AAAAAH/AAAAAAP4AAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAH//gAAAAf//8AAAA/AAPgAAA8f/x8AAB4//+PAAB5+APxwABzwfwecAAzj//jnAA7n+P85gA7ngAPO4AbnH/xzsAdnP/+c3AN3PAHndgGzOAA5m4DbuAAO7MD9mAADN2Bs3AAB2bA2bAAAbNgbNgAANmwNmwAAGzYGzYAADZsDdmAADN2B+7AABuzAbMwABmbgNneAD3NgHZ3+/3MwBuc//nO4A7nB8HGYAM58AfOcAHeP/+OcABzx/8ecAAc+AA+cAAHH//8cAAB4//48AAAPg+B8AAAD+AP4AAAAP//wAAAAA/+AAAAAAAAAAAAAAAAAAABsAAAAAAA2AAAAAAAbAAAAAAANgAAAAAAGwAAAAAADf////8ABv////+AA3/////AAbAAAAAAAN/////wAG/////4ADYAAAAAABv////+AA3/////AAb/////gANgAAAAAAG/////4ADf////8AAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAADcAAAA2wBs2AADbYA2bAADtsAbZgADm2AftwAHjbAN24AHNtgGzYAPO2wDZsAPebYBs2AOeNsA2bAec22AbNge87bANmwc55tgG7c8542wD9355zbYA2Z5zztsAbODzjm2ANz/nnjbADc/nnhtgBnCPHA2wA74fPAbYAOf+OANsADj8eAG2AA8A+ADbAAP/8AAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAABgG6AAAAuwDdsAAG3YBs2AADZuA27AABu3A/ZgAA7dgbtwAAduwN2w2zG3YGzYbZjZsDZsNsxs2Bs2G2Y2bA2bDbMbNgbNhtmNmwNmw2zGzYG7MbdnbsD939m/d2A2Z/7PM3AbuBtwO7AOz73eeZgDc/9n+dwB3H2Y8cwAZ4HnA84AGf/5/84ADz/OP44AAeALwB4AAH/+//4AAA/+H/wAAADwAfAAAAAAAAAAAAAAAAAAAAAAAZsAAAAAB82AAAAAD+bAAAAAHzNgAAAAPjmwAAAAfHzYAAAB+P5sAAAD8fM2AAAHw+ObAAAPj8fNgAAfH4/mwAA+Ph8zYAAcfH4ZsAAA+Px82AAB8fD+bAAD4+HzNgABh8PhmwAAH4/AzYAAPx+AZsAAPD4AM2AAGHwP+bfgAfgH/NvwA/AABmwAA8AAAzYAAYAA/5t+AAAAf82/AAAAAGbAAAAAADNgAAAAAAAAAAAAAAAAAAAAAAAGAAE///ADAAGf//gBwADP//wCcABmAAADmAAz//8C7gAZ//+DMwAMwAAA3YAGf//hZsADP//xu3ABn//4zdgAzDNsNuwAZhu2GzYAMw2bDZsAGYbNhs2ADMNmw2bABmGzYbNgAzDZsdmwAZhs2M3YAMw3d+zcAGYZm+ZsADMOzgd2ABmDM883AAzB3P87AAZgZx47gAMwOcB5gAGYDn/5gADMA4/zwAAAAPADwAAAAD8fgAAAAAf/gAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///4AAAD////AAAHwAADwAAHH//8eAAHP///ngAHfgAB8wAHeH/8PcADcf//x3ADsf//+ZgBu8AADu4B2c//8zMA3d///M2AbNwAB2bgduxs2bswP2Z2/O3YGzYzbDZsDZsbths2Bs2Nmw2bA2bGzYbNgbNjZsNmwNmxs2GzYH7c2bHbsDtmbtzdmA2bM3fs3AbMHZnO7AM3BuYOZgHZAzP+dgBmAMx+cwA7gHeAcwAMgB3584AHAAc/84ABgAHHx4AAAAB4D4AAAAAf/wAAAAAD/gAAAAAAAAAAAAAAAAAAZsAAAAAAM2AAAAAAGbAAAAAADNgAAAAABmwAAAAAAzYAAAAAAZsAAAAAAM2AAAAPAGbAAAB/gDNgAAP+ABmwAD/wYAzYAf+D8AZsD/wf8AM2f8D/gAGT/gf8HgAf8D/g/wB/g/8H/AA8H/g/4MAA/8H/B+AH/g/4P+AH4H/B/wADA/4P+AAAH/B/wAAA/4P+AAAAfB/wAAAAAP+AAAAAB/wAAAAAD+AAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAGAAwAAAA/8H/gAAB//v/8AAB4B/APgADz+PP54ABn/x//OABng8eDzAB3HHOcdwA3P9z/nYA7P/d/5mAbOBmYO7ANmebvzNwP3fs392YGzc3ZmbsDZsZsxs2Bs2M2Y2bA2bGbMbNgbNjNmNmwNmxmzGzYGzYzZjZsDZsZsxs2Bs2M2Y2bA2bGbMbNgbNzNmNmwP2Zm7s3YDbv7M+7MBszt3OZuA3MGZwd2ANn/uf8zAGY+zn47gDvAc4A7gA78/Pj5gAOf/z/zwADj8cPjwAA+A/gHgAAH/9//gAAA/4P/AAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAD/4AAAAAHw/AAAAAHADwADAAHP8cABgAHf/nAA4AHeB5gDuAHcfOYAzADc/7uBdwBs8ezBmYBu4DdgbsA2Z924s3AbN+bM3bgfsxt2duwNm4zbG3YGzYZtjZsDZsM2xs2Bs2GbY2bA2bDNsbNgbNhv2NmwP242zO3YHbszbm7sBs3AAHZuA2Z///M2Abuf//O7AGzh/8ObgDc8AA+dgB3P//+dwAdx//8cwAGeAAA8wADn///44AA8///54AAPgAAB4AAB+AAPwAAAP///gAAAA//+AAAAAAAAAAAAAAAAAAAAAAAAAAAADbBmwAAABtgzYAAAA2wZsAAAAbYM2AAAANsGbAAAAG2DNgAAADbBmwAAABtgzYAAAA2wZsAAAAAAAAAAAAAAAAAAA="), 46, atob("DRYpFR0eHiImHygmDQ=="), 49+(scale<<8)+(1<<16)); -} - -Graphics.prototype.setFontSpecialElite = function(scale) { - // Actual height 40 (39 - 0) - g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAYAAAAAAAfwAAAAAAP/AAAAAAH/4AAAAAB/+AAAAAAf/gAAAAAH/4AAAAAB/+AAAAAAf/gAAAAAH/4AAAAAAv8AAAAAAN6AAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAfAAAAAAAPwAAAAAAP8AAAAAAH+AAAAAAH+AAAAAAD+AAAAAAD/AAAAAAD/AAAAAAB/AAAAAAB/AAAAAAB/AAAAAAB/gAAAAAB/gAAAAAB/gAAAAAA/gAAAAAB/wAAAAAA/4AAAAAA/wAAAAAA/4AAAAAA/4AAAAAAf8AAAAAAP8AAAAAAD8AAAAAAA8AAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//wAAAAP///gAAAH/9/+AAAD/gAf4AAB/AAB+AAA/AAAHwAAPAAAA+AADgAAAPgAAwAAAD4AAcAAAAfAAHAAAAHwABwAAAB8AA4AAAAfAAOAAAAHwABwAAAB8AAcAAAA/AAHgAAAPgAB+AAAH4AAPgAAD8AAD+AAD+AAA/4Af/AAAB////AAAAP///wAAAAP//gAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAOAAAAHAADgAAAD4AB4AAAA+AAeAAAAPgAHgAAAD4AB4AAAAeAAeAAAAHgAHgAAAB4AB4AAAAcAAeAAAAPAAH4AAP/wAB/////+AAf/////gAH/////4AB///+/+AAAAQAAPgAAAAAAB4AAAAAAAeAAAAAAAHgAAAAAAD4AAAAAAA+AAAAAAAPgAAAAAADwAAAAAAA+AAAAAAAPgAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAcAAAB+AAfwAAA/wAf/AAA/8Af/wAAf/AP/8AAGPwP//AADh8D48AAA4OB8OAAAOAAfDgAAHAAPg4AABwADwPAAAcAB8DwAAHAAeAeAABwAHAHgAAcADwB8AAHAB4APgAB4A+AB4AAPAfAAeAAD4fgADgAAf/4AA4AAD/8AAeAAAf+AAfAAAB8AAPwAAAAAAD4AAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAf8AAB/wAH/wAAf8AB/8AAH+AAffgAB4AcDx4AAcAPAAfAAHAPwAHwABwHwAA8AAcB+AAPAAHA/gADwABw/4AA8AAcf+AAPAAHP/gAHwABz74AB8AAf8fAA/AAH8DwAPgAD/A8AHwAA/gHwP8AAPwA//+AADwAH//AAAAAA//gAAAAAD/wAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAP8AAAAAAD/AAAAAAD/wAAAAAD/8AAAAAB/PAAAAAA/jwAAAAAfg8AAAAAPwPAAAAAH4DwAAAAD4A8HAAAD8APBwAAB+ADw8AAA+AA8PAAA/AAPDgAAPgADw8AAHwAB8/AAD+B///wAA/////8AAP/////AAB+f///wAAAAAHx8AAAAAB8PAAAAAAPDwAAAAADw8AAAAAA4PAAAAAAODwAAAAADgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAB/gAAH//wf8AAB//+H/gAAf//h/4AAHJ/wf/AABwD4D/4AAeA+AAeAAHgPAAHgAB4DwAB4AAeA4AAeAAHgOAAHgAA4DgAB4AAOA8AAeAADgPAAHgAB4D4ADwAAeAeAB4AAHAHwAeAABgAfAPgAAYAD8fgAAAAA//wAAAAAH/4AAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAA//wAAAAB///AAAAB////AAAB/7//wAAA/AfB+AAAfAPAPwAAPgHgB+AAHwBwAPgAB4A8AB8AAeAPAAfAAPADwAHwADgA8AB8AA8APAAfAAPADwAHwADwA8AB8AA8AHgA+AAP8B4APgAD/wfAH4AA/8D4D8AAH/A///AAB/wH//gAAH8A//wAAA8AH/4AAAAAA/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAB/4AAAAAA/8AAAAAAP+AAAAAAD+AAAAAAAeAAAAAAAHAAAAAAADwAAAAAAB8AAAAAAAfAAAAAAAHwAAA/8AD+AAB//AA/gAB//wAP4AB//gAB+AB//AAAfwB//AAAH8A/wAAAA/A/wAAAAHw/wAAAAB8/wAAAAAffwAAAAAP/wAAAAAD/4AAAAAA/4AAAAAAP8AAAAAAD4AAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAP/wAAAH8H/+AAAH/z//wAAD////+AAB///h/gAA/B/gH4AAPAP4A/AAHwB8AHwAB4APAB8AAeADgAfAAHgA4ADwABwAOAA8AAcADgAPAAHAA4ADwAB4AeAA8AAfAHwAPAADwB8AHgAA+A/gD4AAPgP4B+AAB+P/h/gAAP////wAAB/8f/4AAAP8D/8AAAAAAf8AAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAA/4APAAAA//gH4AAAP/8D/gAAP4Pg/8AADwB8P/AAB4AfD/4AAeAD4d+AAHAA+AfwADwAHgH8AA4AA8A/AAOAAPAPgADgADwD4AA8AA4B+AAPAAeAfAAB4AHgHgAAeADwD4AAHwA8A8AAA+AfA/AAAHp/h/gAAA3//+gAAAB//+gAAAAd//gAAAACf/wAAAAAH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAABwB/AAAAB/A/8AAAA/wf/gAAAP+H/4AAAH/h/+AAAB/8f/gAAAP+H/4AAAD/h/+AAAAfwf/gAAAH8C/wAAAAAA3oAAAAAABwAAAAAAAAAAAAAAAAAAAA=="), 46, atob("ERwfHB0cHxsdHB4dEQ=="), 50+(scale<<8)+(1<<16)); -} - +var SunCalc = require("https://raw.githubusercontent.com/mourner/suncalc/master/suncalc.js"); +require("f_latosmall").add(Graphics); const SETTINGS_FILE = "pastel.json"; -let settings = undefined; +const LOCATION_FILE = "mylocation.json"; +let settings; +let location; function loadSettings() { - //Console.log("loadSettings()"); settings = require("Storage").readJSON(SETTINGS_FILE,1)||{}; settings.grid = settings.grid||false; - settings.date = settings.date||false; settings.font = settings.font||"Lato"; - //console.log(settings); +} + +// requires the myLocation app +function loadLocation() { + location = require("Storage").readJSON(LOCATION_FILE,1)||{"lat":51.5072,"lon":0.1276,"location":"London"}; +} + +function extractTime(d){ + var h = d.getHours(), m = d.getMinutes(); + return(("0"+h).substr(-2) + ":" + ("0"+m).substr(-2)); +} + +var sunRise = "00:00"; +var sunSet = "00:00"; +var drawCount = 0; + +function updateSunRiseSunSet(now, lat, lon, line){ + // get today's sunlight times for lat/lon + var times = SunCalc.getTimes(new Date(), lat, lon); + + // format sunrise time from the Date object + sunRise = extractTime(times.sunrise); + sunSet = extractTime(times.sunset); +} + +function loadFonts() { + // load font files based on settings.font + if (settings.font == "Architect") + require("f_architect").add(Graphics); + else if (settings.font == "GochiHand") + require("f_gochihand").add(Graphics); + else if (settings.font == "CabinSketch") + require("f_cabin").add(Graphics); + else if (settings.font == "Orbitron") + require("f_orbitron").add(Graphics); + else if (settings.font == "Monoton") + require("f_monoton").add(Graphics); + else if (settings.font == "Elite") + require("f_elite").add(Graphics); + else + require("f_lato").add(Graphics); +} + +function stepsWidget() { + if (WIDGETS.activepedom !== undefined) { + return WIDGETS.activepedom; + } else if (WIDGETS.wpedom !== undefined) { + return WIDGETS.wpedom; + } + return undefined; +} + +const infoData = { + ID_BLANK: { calc: () => '' }, + ID_DATE: { calc: () => {var d = (new Date).toString().split(" "); return d[2] + ' ' + d[1] + ' ' + d[3];} }, + ID_DAY: { calc: () => {var d = require("locale").dow(new Date).toLowerCase(); return d[0].toUpperCase() + d.substring(1);} }, + ID_SR: { calc: () => 'Sunrise: ' + sunRise }, + ID_SS: { calc: () => 'Sunset: ' + sunSet }, + ID_STEP: { calc: () => 'Steps: ' + stepsWidget().getSteps() }, + ID_BATT: { calc: () => 'Battery: ' + E.getBattery() + '%' }, + ID_MEM: { calc: () => {var val = process.memory(); return 'Ram: ' + Math.round(val.usage*100/val.total) + '%';} }, + ID_ID: { calc: () => {var val = NRF.getAddress().split(':'); return 'Id: ' + val[4] + val[5];} }, + ID_FW: { calc: () => 'Fw: ' + process.env.VERSION } +}; + +const infoList = Object.keys(infoData).sort(); +let infoMode = infoList[0]; + +function nextInfo() { + let idx = infoList.indexOf(infoMode); + if (idx > -1) { + if (idx === infoList.length - 1) infoMode = infoList[0]; + else infoMode = infoList[idx + 1]; + } +} + +function prevInfo() { + let idx = infoList.indexOf(infoMode); + if (idx > -1) { + if (idx === 0) infoMode = infoList[infoList.length - 1]; + else infoMode = infoList[idx - 1]; + } } var mm_prev = "xx"; @@ -149,12 +173,13 @@ function draw() { } } - if (settings.date) { - g.setFontLatoSmall(); - g.setFontAlign(1, -1); - g.drawString(day + " ", w, h - 24 - 24); - g.drawString(month_day + " ", w, h - 24); - } + g.setFontLatoSmall(); + g.setFontAlign(0, -1); + g.drawString((infoData[infoMode].calc()), w/2, h - 24 - 24); + + if (drawCount % 3600 == 0) + updateSunRiseSunSet(new Date(), location.lat, location.lon); + drawCount++; } // Only update when display turns on @@ -168,11 +193,19 @@ Bangle.on('lcdPower', function(on) { draw(); }); +Bangle.setUI("clockupdown", btn=> { + if (btn<0) prevInfo(); + if (btn>0) nextInfo(); + draw(); +}); + loadSettings(); +loadFonts(); +loadLocation(); + g.clear(); var secondInterval = setInterval(draw, 1000); draw(); -// Show launcher when button pressed -Bangle.setUI("clock"); + Bangle.loadWidgets(); Bangle.drawWidgets(); diff --git a/apps/pastel/pastel.settings.js b/apps/pastel/pastel.settings.js index a8aadd58f..fad36964d 100644 --- a/apps/pastel/pastel.settings.js +++ b/apps/pastel/pastel.settings.js @@ -4,7 +4,6 @@ // initialize with default settings... let s = { 'grid': false, - 'date': false, 'font': "Lato" } @@ -43,14 +42,6 @@ s.grid = !s.grid save() }, - }, - 'Show Date': { - value: s.date, - format: () => (s.date ? 'Yes' : 'No'), - onchange: () => { - s.date = !s.date - save() - }, } }) }) diff --git a/apps/pastel/screenshot_architech.jpg b/apps/pastel/screenshot_architech.jpg deleted file mode 100644 index b13ecc54a6fd52af488849869490b4924b5c9a9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38320 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

bE9_bAj8HI)6S8ut5Ow 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%0AiW#S9X&)cM+DGIPfb>_G&02I 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 diff --git a/apps/pastel/screenshot_cabinsketch.png b/apps/pastel/screenshot_cabinsketch.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a90031b9fa4b164a98809fa1be4c6524c5f501 GIT binary patch literal 3472 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 G-u@5TUzBwK literal 0 HcmV?d00001 diff --git a/apps/pastel/screenshot_elite.jpg b/apps/pastel/screenshot_elite.jpg deleted file mode 100644 index b881830ed9c15b927ac46fda6b7ad4b0eb3c300c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9486 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 xeFAyxBs-Y|mReSOecL1idHXH|Aa=^p z){S4A{|O-&KR31ih2%F4@}Y0ZaJ{9$A-C%}KmhQt!;+#MB)BzjEE1DqVqneeV)SnM}m|33<{@yZx6;K?IWKbr&j<)+vzv?DaXd^TNBPQA$C%TeHA% zhLgve1(QXe;{8P#XdNn+NxIA)p?q3I7RiW3&NhS>s-Ar8bP+^OZNCuSvWrU%p0mNW zaQu52lTP-)&)M;MVNFkpEMEHM($HB_7op5@O*zjJov>Y({)<3GH|HE?qsYRUf6h*AI$#|H`>I_}MH^ zD_j=))(!>Z0=m<-3w`y53u{IU=ZK+;wnIBhX3W>(4{8Q|m(0k&&x+TogoSFoX#z*c zBy!c3%?ZRsJs3`)bfY$CHv7X6Sdwxxh+a(p1_~yX_R1Dg;Zc|lN?I&_-A5jOee*(p zRf;tJ*^jY1Au?=lhvSm?1%DW>b-x*II^L))ki;I zmPt-(f5#BQI-B=fCk7{0PuVT`5sGBg!EmIuJf zVu3Ge`i;gH6tl;46D$y2RY_i?a>;U#n7JNVxhzBVkM6ulbc?^lZv}x^sL|K)AiG?H zwM5EbR?7PYc!vXz;vYjQAJjT9(RFM3yZtmcSh{>mn zT$SqWk%N5Xt->ezeX*GhR`w-XvlqW~mRt><`LU=lGo}AfUMenwLa=B~Kk-1qUqaFCHBcdB>E7HVYz@EkqIQHLu||?w%Zj zbADVj(c_(I^(Y2^>m_*gPn(H|2(pa}H8HN?##5qpGubHHSi{9NMdFJeD`9ZZWC^rV zcm~BH%dL6C=yeSm4_Zpnm~Hh*T-rW2Ki)Ar>tn6NwKY5DcXlyyO^wk~JgR;PaRkG~ z4=-@ikQwleg|x8!>Uh_mWNs7x{M{|b>B5;bC94e;-58I_F&o`b=Lr5}CT8GK0k`OM!sR%b>7~f;Uh=?O@R)FHo zAu`{6O2<*q3_i?JfmX#A#;P`lmkLk;Z8t|w4PP>AIIdBSApW|45H#Xk^?u%lv7Zj5jU8PcXg~5K2z$ zg=O09N9wUdyq#^hB$>)AVndFh4W#QkJ^Mh+ODFAr>raE<`J&k9FX2MgiBv^MnNqf; zlL~>+K*j)&j}mAi#p@-3UG(tAB=ZerA3>ipne*+($Pscn!4=NX%rg)spqBulhQsV7 z2suwqsME*ja7JfUayaLC0xVdfL8Y!sm}6Nvuo|}JlkGFyDNPViL#J;?-u))eELukP z=TSr641}&O*U-PAS5z@9`Sr1-@YYEJQIN=b^I|7){ns%Q*xNUEWt>4qrpq6I_NMH! zRQs;BT>dYhapAROX0^see^p&1Ew}O&WTMI9{OQcGJGHCfYVxF!b;1Kb;pxbF>@^BF p&dI-h>>e=Ly`XQX_AhJkKmz(~pZpaJi2o%5r|iz!Hd^DZ{|D|r$Y%fm literal 0 HcmV?d00001 diff --git a/apps/pastel/screenshot_gochi.jpg b/apps/pastel/screenshot_gochi.jpg deleted file mode 100644 index a3c34e4d4ff232a3363bdb554043f45993979a7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40511 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 literal 0 HcmV?d00001 diff --git a/apps/pastel/screenshot_lato.jpg b/apps/pastel/screenshot_lato.jpg deleted file mode 100644 index b99272bf911a03735b9b15e30381e2691e34477c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46058 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 literal 0 HcmV?d00001 diff --git a/apps/pastel/screenshot_orbitron.png b/apps/pastel/screenshot_orbitron.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5242ee825094ac672b459d0c08c3be07a9049c GIT binary patch literal 2668 zcmd^B`#aN%AOCDjGv!i|>&QBej7qLeMUovQ_X!Jyx!0Ae%?R5U(f5NhZ}kuOdAFOz&4lP zoV+%<;eUWCY<7CfKiEwI#d@I~f%+lcX#jv3xi}s3Az_90zg+INR=(CI+IZ7C=Grpp zz31v3hmWVIo%IaYEY`0j#Mpced$a6+qG4BR!23a~RYPH)I$_YDtK#=CD4*UeI#im< z#8OMOPCo6%Eil4u`=xz9MLySoAie|~S`m2Ggvj(tmW&8PHbW~Wk2nckxhwPZkQ@^CTNi-jWohz#g-Ypwn3hrWsG zHbx3HP+Z{SU=i(dmc92RP(Dd`brSO56oCMG!>Y&kyx?3Rn_EP1M>bu2ujYT8{sS9W zccd6Jw4I|Q@s@ps*tRKaI5eX0R*bn)U`T@lliXjqpe3$ftVb1FHI-3I{8}LmEg0bnk<%eRT*#5rp>`NWwkbYGIoDGVsPH z6mgQ8qI;JO6VU)PG-7Z2piWpf6fB@hW(ONJo`#9l5K)(=(LS(uzKG0rHYmcBf`0A4N7`w;LHvNJ;sOEz7Z z>lwgy)|Q6w21}UUXehFs*_$1rfJ-T1q@)KC@?3Ak1K4z#01b`$GV0b6+yk>5TlSTH zzngj_lP5TTSM5TT7(*V*s3hg-eV9*I5XKV6y}Gh8%vFFL%;L7gakbp$Z&5s?cp zI*+b_M4W6@J8=M>Km1HDv|VO6&y>^)8Ud+w=KGS$p8Y@ZmOVGewRZbLoE!XQ*C+hw zpA`>u9bfPXS$2XHW1d1Z`n8d!qXf^u?vnB+k-l5{yXat2{N^PoJT{&c*GoNr%udJM zxifmcHFMaka`od6Rs@M=5q-zNBFGJ5JE6+JQd)qaL~gZQteUpo`atUnkzC2gY?*rT z@fOjNWs#uOcpK1Q!695kx3R4f7BtIV|ZP2urIdy$g(T&S@sBNz0QFq1qro?W+saM!~ zk!#2R?oo~3^rk7ty(;+gKPw-ABbE_H6#I3_(6#j}RfPMqv!`F=l~r4_lgsS==KXKY zSrC$RS)vJ|yn|tdz%>RDOvMGQ=@5l*x{OBdm>kc-wg6n@oXKbo6zUO|e4=|c2^YYq z&z@LVX!Cy83#?|4LFU_c1hO+?e$js$=7V^&mN>30Ck&}N%06;VE?N|WOW-Cu-yTD> z2$x3Dc(yoqNmQ&6i#C6=HFfZvc4T@KvD``lwG*y+X7uRxAfyK;K?{^spV~b?P*_;p z$5$t#-H~xYhm%^TmX?Njxf3*Cn)yu)XfdDwZ~~Xd9zI2pC8{VlMOkV*F=smXmG7+V z8cQ1!%v5SKlNQs$0#lV(je`kTexjk_c|3l8RkA7&#tsT?_n(`3iRQvp6?W&$F)xK zl>9DGq@bjW@Tt`sbBU-2cwxl8$VCbK^>!c^m>o>yyknPKRnxR%C4Iw;9KySssN6w@ zxod0x)|>K81FTVVg|9ONzJTppg-)P(1aPQ56JZ8z zto1NMcQDBsDILJES)uaF0~F!mP)N*zvnbm}jt#3Kj7Lmihdbq2)zF332!$7+-0#fm z3s{tM?oaGDr~A>Cmlx)S9PSQ&wlF)xv%)1cTdL8GZb0JJ3X5#%-^;X~LZ~*%f4P0Q zWqvDI$SPE}Px~Zi{*irB_JopL#zY*TalApzk&k9jDz+G_AkHu3u`IWV5PR&7Q*CAi zfZJ{CxQ%ltNOv=&RL^vnJ1X%t1J$iuK%jejn%;IB8<2zJFe7^)^3k{7oZL}K26Bcm zp7}dfSuT#q(-bh+*7?kd(_Rk1uZlEF^UcToKU-ek!mRQkQ4Ew?H{&DVa>C82-Z3cc EUuCZMYybcN literal 0 HcmV?d00001 diff --git a/apps/pebble/ChangeLog b/apps/pebble/ChangeLog new file mode 100644 index 000000000..fc3ff3ba4 --- /dev/null +++ b/apps/pebble/ChangeLog @@ -0,0 +1,3 @@ +0.01: first release +0.02: included deployment of pebble.settings.js in apps.json +0.03: Changed time+calendar font to LECO1976Regular, changed to slanting boot diff --git a/apps/pebble/LECO 1976-Regular.otf b/apps/pebble/LECO 1976-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..05a318224400bacae73f2529f448f780f61b414f GIT binary patch literal 26432 zcmeIa33wF6)<0a;+dwx=LM9Vg(xDj;0EfW zojOZ(X3Uv0gSBJjOlD(}$B(zt*L?IEW4$fLMw=5-XUu-%#@9b(%-4glHY+F0o;&X8 zp*y~3tji|G+Lz6kJz(&~&u^H;7$3+OTeNst`tozn=s1lr^?8Ko?9B9x+MF3O%Jv}) z&qhX@De48Nui(8$_OhbOo*i`2&y4BSjA`*pGYj&%b?Rv{)&a#*U|ITQ%lQqdNb^KQ zT3-6H%);MCe8al`jyG@cgSIHuTZNZ z&!+XiA5h+rpTWD#B+A7~B3f{!O9ShLfY6=&vJ$>{}o`Ab*yx5nn?TB25=RghVjSx}Oh z(SK@6@(gRx$PvS5WiBbsO)qfUgqw`Anv45|%SVac|ByW|v!F01KhGM}f8fAD%~h!1 zNW(ugv2qHnbgQT!JtK2jdcjgFKkHP0Plms=w6y=?@KhG(F9T8Jg8){r0+z#;uxu=g z#S+CBBSQ=)wk!@y=vPxFN{=t6W z8gI+naGiU3d+y^Mc>?dk<9RRMm-ps<_}P3kAIHb=v3vrb%NOwT_KGlgs}~5 z3;Tq9$|qu5UW&!c1Ht5StQ6103Nf|_q;(0ujIRI*U5Djgj7@t#dy3u5o@URom)R?9 z7u(JDvky@B06W6IXFu{Yu(j@H>)5T}>Fe2T>`rzUTZ{9k0d>v=CUG_adcwwI>L|S>eT-hp6KXA=)zON#EYZuzQ+mm8cvDl;znYFT1)F|o z+TRpptf_{v-}j?u@vl)}^6-W3+u_lNlMW9&9QDQXhcEgf_48w&zw-G*pKsJko9WoC zmV^fa-^=&&kNC$(9p*nE{(&FkwQiL^jmvVpY5|dw~boHr|cB$a}EuygPe|_hdWx>Ffa?d^-DrPh;Qk+3agRi+#ms zvg441e&P$+cYGfEH@}b_<>#|w`~p_X7qQ=X1}MKCGJ?Z%*a@D^9^%pLV?LgJ$y3?4 zd=994ZJ4(20-fK<>iEU%XP(A>;pr^IvuFolr_f$nj9r_>@=12$XCicD<3S7Kr4l#D zYw)}Wd6fT<2;C(dfe0;mZdrHHrhQA>NFU-ko4MuaSM-H8QhVf~A3WXhcK*k<&G1lL zX?D0C+Q}1<27KW$TG9mnz~(U-=D|>hf~d<^xpTpjU~u6mfh6jdM__fIk@3Q?|6%-a zpUwG^cj`9`n}D;V86LuA_b^Ur3=zcK(1!3Y>Jx4#l&~B%3h)9}0XN~B0_usiqBWFp%cO9Ev;%+$9@-FBfd!T8(z<*@j zi9SybOsp%dZ6y4~d@z19?fuQX+_}2+7@^AuE&drEPRb)1Zyj3A`=ol|d>4m+Upb0- z5G|YP;{%7k&YjN^=(Yrfe@VUR5%PD14SJeL>ty_dP{^lw6 zE$!WKI0c4Nar9r&gVGu6iqM+>C}(2~yCtB!J2dF-$fqz~-i;96dyyw#=?9rs{A(&A zJHem+Be^*NQpS8<4%v4t5+lw-pNAlmx-re@3P5-W5)kFA#8`+$&K?2t z9s%nq~HB2E(VXc3<);>jWw<}pFnVjOq0{}6L%1{fQAq8-0iDPmlmgB%7;ZZtHl zdC*w$p#NNtJ+KiH@C%TC_p*=Kw~)Xj9u29sFCWDx@_9Ui7htc*!0b!3GsM1-2;0ah z`j7ck;}ESRYPfaR3yN>uvUUD{>c6FaOX}phr@o!sYXl0~Z6`xQZ!Uy?R@Qp9|4-We zRiCXP>k6W z!9GQnoeV}cpto^~yaT@aE@ylwABH_Xf+yhw;y6`eP_`Eu^f2Vj6nQDleVMSb^+JDx zaN?8wY!rH)fWBu6i&$g?Sd+vkWPfTNiG2lY{x{&`KeJlc>FZ#%_zgOE=p+bc@>zT~ zp98zZJYktwz|ZFk`33w!ei2{EuLQrBVB>3tp9Y&?dvH!Kej4PSD5OpN+5p0?upRco zPXU~R5aV>m%m`i;5RXD1WAKv!`2>{C#7_bIb5Um=emXFfhCb8rlLf|P*vE3v^CkFs z#LP6vF;^f5XESoX!mK#vRfqn6Wg$=+UYQ2$&0!pKxrph2ekE&*8C;2+a?GPGpdfoG z{b)Xlm=F0vyhzi0+KBmR;raae9NL88CWsXQaT@_~8v(HvhIlDXR9V2S2)MPsgj)&2 z?ZR5duL7)es_X2ilK2PN<6I$oTp(nRA|ZRM5wgc)LiX4V>TberBk83LdguVU>;}1I z02>aQE0qx*4A5K`SZ;gc#2Eo8z|AMT_<*DCu;C8E+MOfvb%Ci^*nUmedC!17cO=%5 zTIj&Om-%56PJsQlFYLUdV9#~?A_|EECVPT*hr;4JF5JR{@uS&k%mTIa2bG*f*5CB> z+#-H&MsCg$zD2~3iMUF{&x`ma5$_i9TN%sqmhgQd{vfL$eKG%7#Gi}!YZ3n-;^QLz zO~ei8K3$STtcy5W#Bm}{5OGft_s`8=oGT3#@u)(;CXEsCco9z(@hlO~7x6_R&L}J# zI7qrg#LGooBI1=IzFNdLig*p;!P1=~zE{MXMEr<|D@FXQh+jlJMA{|dY7y@h@qQ71 zB;tc2{<5%md7<>3h>wZ5PQ)iDmYIk(5x2WMvmjrN5phQmCy2O*i2I0mpooWqiX=fv zL`{%V|I64bYPvDFK3e^K?0O-nE=i_t9LYQN8L8t^c{@?xh4a6OHBtY+i9Mp`e-pP6 zHUFEKyr$&S{rec&KWhG69EF{fh+Uk-#=v`$3f*H7dx2#O1wizI@QFC;t%c7u-qo-!uH|;g%}_CTV%#jwkzu z$S*`*A=e|++8=Z;yAPK54bVRxV4E0uA0A{6v4`0s!kh6p+bTR7Pr@7V6#Nm-z*7Gl zd!B8BuCkrI$g0_!>@D0ic#pjgi~XnUGj@<2VxO}w*kSfB_9Z*QzJmwl2UzcqvY*&7 z_HTCl)H9LQvlGl=4Xly<&YE};^YAP9Dt--cM!J&@t|;MzYR50bvyX_$`>sS%>bID= z7i%yJz9bE)Snyp7+^;Xc0xizKsV=d8IFTeaj9-p;ipZHJa^~Wl`o2<>Qal&E>EM%b zEI!=wk8Nmlw=P!!FGlPMDwqW;c^T~IZjW?&4-;p2WQB+A~JRUSbr(Y~)DX|{> zI>ZC{wTRDcE-AxXZ=6RG8^#z+>PkisgPD$4`U5s1xrjd`2ep?5^D6 z-FSd^=RNp9J_sJ0k?_f!1uxP>K8a7}Q}|RqjZfz@c2W5(Qyy&4C?`MR|J{4sYi!vV7oEnJK6tNR0iabf41HV`a%iyKWGivcJM^@_w ztk)b!o-H2b77uoWOWgoIH55`)v)B56c|~b0|7R=tzsoI&PySzXNvR6*UJvm1!Qero z!9gbDESiViaxthT4?OX5&;#@!92ejvc#~K%&qF+$=OYe?obDoL2<3p@mm{9cFGW0s z7a*PvPA;*}C?B3k(?p@yi8zaBg*{?NwiRn^0E&gM;cC1GINd;wvj@9s zBpZ&Mbv7G;ot4T)VK?Ct4KD`WT)-~}f4+!c4IY`suLVC`1nQC?txgbB*$Xo31fjWj zK&>P{4+B?BMGi^T|JN{}7aiD0#7u||J>tAQ#cO%kvssW=g5 z;ny8|Zw}hi%A79d13xw9Gg-`M8s_sUG(@7yS%Na>h`G%ZYnU(AaE(~Q+r%2)jy0Uf z))8-HchQbwcZ>DBSFGoAVm-Hs^?X6B=XT5>3eb{lG6XYh#uPB%a@pw+m2j~FdL!>Z zcePsI-J;C?p=cI*g@<-YplWnV=5^#3MEAO00QRBT!qvE5}J8Xy_zB-0I zgq|Qh(`oK%P=mlz#sMd@Agx^_tgpq;53dH#ya)V`?jgL$UWc_{KW^!L3|;r%&~Y7{ zCI(KA({MWUhV_8Xgz3=R7lF^`@fG|!zM9|4@8eteV|*Lm$=~36`1||-|AK#q8xr-n z1)@q(QjFx65~M!TVCifrS(+@(l;%qpNf}bUv_iT{x=yN)ZjiKLzI!qIm#qusxniVrz}z~Q7%`mQPwIO zlt-1V%9F~|%5%yK$_{0x@~ZN>@}{y!c~|*BZKs+k#Rd7e@wO~IeevSVyrQue7i5-X zj$M|%xFA1oZ2pq`yv(IzQ_>d~7iA{9F|Ntw=Or)BDOg;*EGswjvgC~XBDd|iqUc<- zOfO0i{iKMTl;#>KZoesRzY|2A2`ybsXa&fG=0+1QPA{0)QfZQCHL1CHlH2Dbx6esM zIk_2`lO|7YX)vW#uT#YwrV6m8w$4X)(?!{IQ8v9**$gq@jO^mPCFupl%W~6;i)OfE z&M3@HFU%IrX1TFwJgZgX*&=`T;>?Vk+}!lpEl|yFRcQ`pI7c*{(<-+(FK6K3L1X8N z;pesykupS4h9H(q(NCtx$!xBX>GqrH_Pa#XS<=$gl2)i%(%dK;sLXDulp|W@ zxIN{#J>>{g+}OSPq~`dW%fXXfRm=Vjz9&K0xB6@cZos*{WH@f;l;fq@jU+fNF>|&yrD5qGUqg0Gm+A>OMgmOv+p{!^rSs^km7Y#0NMto-8l8e(| z*(nf_C=@9HoSSOlGW4FFm6J1k(2!w+n-d~;*>c?W1@h^IY$p8$rn1s58J{*eE3K%A z{%04ZrKhCLnV6Q6ot8NxEjd4Jaei8UvU`8`f8n}vveW zF*6HlL>@1MN?gvb=M{V{zl-0?AL5VmD*hb*l7BC?#o^LJT7bjkVrdDElOpM1afrMk zRpavEyV8f!C(?o{`v@2dyYf2rT8N7azpq=|;fxmEC6gcFi(9 zDY`Mhv@OFwSl3X&skNeF<&2L8msTqLmw~IWjonf?H^(~$)O`-(P*M> ztTXMbT-_)|b$^k$0DUy34$zGX+oE4^py@ldLic?>#;i|mDD(J^P1TJ&bDnPaL)EsG z5~?1kduQrHO{2caZ_%&>YNeB9S2_U6>D8EO$AvD`?9~kys&=3HR41+>OEadKHo!Dq z!6ZXvhTl$ZsGexr$v5iWi3IW>{am183v!&w0lJ->2dEPDpfTAD1n$?XR3o5!Z7Wo5 z_+Ql9OM!yN{ja^znEXBGa%d&ohluOc*oqo^Ljk z8Fua2=sRBruse0U`v>T~bz{D%8mYQ{UMUX(O4|Z{l69mU3-uCpyHW`{m3HkrW+=&1 zV>-1?Wr}7a_B%jX9Z+vuNqR6vbt*mHB3(??Z&zx*Us*7y`hH@QP2VppWs&LoF`V>Z zI>lzGLB*e<^jj+YNF+Q)R;nITF<%E}R{QqfiHSPzYQDoM87k`R4?e3px2)Ff=^o#n zy0=u@^7!@#QdRG0yBd~l*|ub(At}|2EG;cB2e8+hv4^X+m_f(74QSYJ zY9T+(B-x$GOkMNZmCNBsPLqG|cX2o*T7-s@m^fQ9MR|=@ru^O;M zz4h#D6-czL`$31BO6*EX@5WdG$Eu?Rb}=TFpH_7TKwOHdm?@gg)Ikn}LLfJk6hZ5U zrk@ZG>cT1*DHyc!1~V83VyO)!HI!*7AduP{b*$p+#umNt;Q6}dWX;eG=RBvfw`t#K z|EwDK>MJq1hO*(H{2`{7)>;n6U2Pf#W)OR@M86oz9{Qw87X_i}*+8OGIotFGgTWZ& zRp42Hk$Yk+V9TJX1;dEG+`L&Is2fXkr`E8qKtU--om#(b%`@klXPHK0lmB*ozP=e7 zC$&&FFnFB3!H&aRgK>84rMj`xjL=^&E>t!jRQfb+4X5@j-FQs*8%cVVp@BI7=zs#c z16G}Go)79&>@lk`l~(5wOl-bh7fK2^$pJeVtMAkRi3{sf0V{1^V}M?2@DQMqgQ04_ zU30J5uuwCCXX{j{VWG#nSN{@)Lv?JFs}NaL{b?8Zks74GtsD8K?;z1rsCpaieGG|R z8cgvAQ&Kdefkv>ch9oq$t;T~|Kf%*LPT)ZFY>ZXnJ28%u1f6be$XuC7iduItnScAyr_%m4)A1p?|) z>cA>XO+s)`Kmqc_H03)91F>GLNLGrIoMI=ZI9UN?t;EhXv>M$&_mLm6ZELAmc8lP2 zEUbZ%g2mZP16rzq?U*8JxfnsGgtRPswMLVw#L5vdijnPF13I^cQ<=5JwI;^KnfwNZ zPiSz(nc*Ja3dWXm7<6GDVM{rA*WhHxVfbzYHWhrbfP);TI7{caJ`GJ0#&g_^hPfQJ zIJhF=1;D2Qu%pAI4*NPx>bTR-Cop{RfNM?oegGG)Vc&p@61V+fe1{bt3MhTgu!_NZ zfGhK`2SQqaB@ONb`sU$UhVLafik@Kj#0$5DV3KD~GJX?hPjOt4=Qm3*&+}VlD6#ww zj_d1u9fOp?@AAM{&oRVy&L3cG2jiRC!f?p9O1QqxpJZ&O1YrVF34fZgR~cKw_%kxw z&GVSK2^W;cqe63i#U`o^JjQgZ%)G1AG?%X92tie4kABweYb4ir!@q zZFrF5jyt(R{vp9Zz(0~4MF5zp&M;Tlh zQVhdK2$D}BvwTOHE#p#rJAMNRYxe`NQ2DAScy z%5BO$%6-tG-+>VHi_)leh5$5IU8H8JSE{$FPpI#xAF2n{pS5nt*zA7X!mH3 zX}h!Gj0?#F$D?RHxpL>356W1oG&BQi2ZC15;zRhcGj5fvTPC2DBYl&GwztD^3TdNk^ds3Xx@bo=O@(LWCW?syqm@8w} z#B7RrHs<-5*JJj_d=T?(%n4tVZbgYd_mu_SSdCxHZgW| z?3~zZV(*K6D)yP!=VG_TZjXI6_T$(uW9`@`zv1uTxBO@O=lV1KCH`Ce5BQ()zv=&% z|ChKnaS3s~L-s<@lt9*%o0?xWM%pEmfkk*BRZ?fTQ!oVN3{gQtZ$4(ND( z$7?(8>iAyAFFUpC)TLA3PUm%6&?&3aL!F-Kw7b)xPTzO>t+Uj*W9K2AXLQc!ysGmx zo!57Mp!3_EYdU}3`IpZ1UD|c&)TMiu(OuHIT-IfEmvvp%cX_zWb6vJ|sqXSqJd1B1 z-z|P{{Dk<0@t4M56TdG0q4-DQAB%r6{!sjJvyGWx_A|$srRMeK6XuiVQ|2?~bLPwD z`{qIO2lLkiJs~!sXTq5YGZS(WRwX=?urr}L;r)c46HatZ=sLdZ(yq(8-q>|r*KJ+j z?fOC2?=8jh;X9!z)=F!Gwafa{vb*)@HoDtI-LCHTNVk36{@txU5Fh9rSP)p*J{de6@ybgL)tcSZ*u}rDRK2u#Y5CGF!?X6i z_r=bgA3ym-*%kM7y*f|5FA0 z?>g1%RCt}L3OXyV2k!>I50&+X^txG34o!>57)i}C#_J>%(N7Nf96YDs<_JO=1+nwAG!+42kM}_O!cm|Un>bE zQR6z@2kV4#=E928VM3D6x2$O-JytKyRM$Mjs?D@28Ex;G06s753K zJr3b4lr&KfRXdfMw<6p09fk69a15H?ffFCA7y0o}5>ETWq3Zfne?ysLLDGZ9Ls}2i z0W7WN-KwJqB5;yj`wx8?hNGqh`f0(q1(1V;;^7NTHoX_>q={(2YbB&INO}-#suE4# z$5{A$=p;^7lJ0vkXlHp)m1HGtlb#3&#lQ_oMJ5JwYD3irbWC)B9-gXQxf$<{A>=$) zrXs{pc9tE3aY{Laeo#R&=?pLEtD7f=W%Y-W9yc}6^}6QDp|ViYMllHpJwtTgN0FHm zbngcT>rd&v7YInwhORTQ4>4PaHuS?|pBa1$WDBM7aTAhfC1fMQLA_4l!kbF!Q-yv9>DF5*hS*?Y(LzZ#>Cm|NIgskN?t&B<7n*9v$#z4W z-A=QIh7#3=L^}>bb}x^U*09w{3vE@yYHp(Dtrgv_F=cyMed_2i$e^*yOi%?>h77&G ziN%atf;mpaY6f-9cNyezEUthq4*IG!JWMPu_Gs})dy74MuI`2YM1nhQHcPGwRgX0* z*6L(0fEvC_x7WnkahkoRK2>!RHRsHRTb#2(w*Wla`n&YLqRvPn%aNMB5-WwE+DP}Y zOYA;Q38kGYA*~~*sN+zc0PJNmHvU}Go2btM?jWb;gGzbuP3((g{r7B|i@UiXs;5HZ zv$GmgY4b;FUJryM$IS=%oyewrl7yLrcRm!_z3gA7 zzk+730hKMgk#>Q{cNANu^^T0_ve?JLhNRo{h$0IW7NqPXlPZh)yUqEu2)Qty+<%?! ztDJ6%#dlR^EXUuK`@q{}ywKSpl6Lvv>ifmQ>T12feQf z`m4wH!gTYGgjP$G2HJCNJ{1MntWe750SKbM-n3n?ZNgigfF)3EYm$o?7y6hgVsExJ z4mJm0ZRiL(@YSV+k~Ci}8amKu1P{&Xt^1B*4K)<*Hj}YOYJp_$B_?Tn1V5N)sO%PV zu_-ucWEuh>C+jR-u*|A4rpH$@A9jl8VL1UM4F(-W_{w0@GslG4#<5_@@qitGQ=Z7a zUVqO#k&UUKMNJ%zJj~Xvgo$T90TFyiheZcOY(e*XO(=_Y&0D%gI{ia>P(9sLy#z`% zgdX1u!lY6eTBr#ad{xj1BNi1PSQw!e0swdH=5uQ`actm~engQnb<>cPq4&U~2I!9y z%$hfuPC5YR9(G}?guN9McoP1X2jhBy&p1|35nm@3HR%y791gk+{YrYLf$pZ9J%YsU zMeZx+Xx&?X=@U9B!oF8`|B1Y?J1j83RP;0SX^m>ZxZr6lw3CI{u$$xt%3YY^3KTFh zWVtDDg`0>qM9d;tkTk$Ca6b1GAV5;8BC87>$aIpoe!0fH#-wwfLC$m25u|HIh?UEI|11v%Ap()urTMm( zgZ6wil@8iv>X|W;tjtWA-DF#A$r{tJR7(bN~ zY0ys&ZGPT=>{#M4)h_Vh`BU%Ss#B;X{*;(_45^_wn7gtF=T|SAlUHBgnMv|QnD0b^X~^!@%UaAu$Fmj zm`xz~JOz$079?5c&Y8d^Y=Nf8Oyb-166Aq^=KH)V;AGW#e7maZAUoA~yjF0gj!L^s zEKXfrpzdl|u>AhIKmf~p6M$9DLPP3po{4pLZEFxb9v39^I2|m*1XXk5K60oGphAvF zBF3`FbV0IL2LS|8kPA&bU|HQ)vpYZhDq*6SKDz`)1HLrT9yP6MVU`03^6wR z$HAG0V-Va7T$mPpBM~{hV%fKVPl}U$Y)J@~G<%ZW7sN>fi2n$QM2+I1LLMRBQ&%P6 z#AXDiacJ}2W6p+J@)Y0{9KNe<}}c290RGL*+p1M$Z*G zvYK1|SWZoUDyO#Lp&(KUq>E+8)`^TpN>Bi6u+j4}gpC|9zrtXt857=PzNa76?=n^2 za+u?vCcC_w@OWPVx2bQM0Ma4Td<=*MrbyqS4@_Sw=z1;q-zFfmz7T6iyf1syl{db_MLFs z+m%&4b>D9r^edrhS6zqE?5rv*(Up2#RSsr34CkwGH1vb2)Jn4zR6x?zNvcy_)xy?d z98u68>O`O^*3U4}_bENt$-k#uWo8Khkq*qa%sG^{kCXuBQ*>k0n*z8eY*05!)q z=nt4xo6#frSzIqil`;yMDL@beLacWE4wS4nF(_@WFH3dESVSIFJ=6=U{v@mq5x0p@ zB0*Ohz|7rsxlgxuuP51)T&^jhg-|Ss4ysFO#BoZ#FIp;MLUPX-szMD=*+$dLz$I^GxL;h<7!*g3w4#vna=jfBD5;pbG?!aMv>R6rjFr3@n za7@P4AA|scBb|;q@_cM{`HIk(v9E>$V>MxJ){+OgZGuVb0QXuS(yXx|cU*NcEte)o zI6=!!M2E-?bA*=cFkcWJCtn>neZ6hXFv$p``A!h05E^E4ed;7a48>UQ$Pc+VwQd=AtkwxZE58l+)fJgsClnH3_M3F0Nb?7H|Qu9oBKxCg6w2VAooVo z-ROegZiV+g2?ngoP4LwENPBEUNacd9{syjkxhZ^G(7eI`VEz`?z&j(7O_w>@1jnwJ_!yUN5KyqjOLAt`=@zzhTI0MpXA~e}^b=a|zhM5pO zfdLM=dYw*Up>4g3QacM;SSU&91zrKc*exRa8=aZL07t?pHcO=jGaT(3l!1FL+=xz{ z8fx%5wosDa9;T%`mg>Mm__3DW%iIP(p`C`!FiaCk!?s3i+vb^~QW|ui`6YHOx;hft z3}H@7Nl6K+7C=sE_2wM`rI>cRiwxNIu<3s&htc!XF_9}DKa8158`Nb2&~Q}Wx8-23 z-UQg9SMPvxNa zmRW=8{D>x>MPU1JDt26bDrAZykSTs7nZmU)V82+g9%w$`M{vsfwpWtn^Ql*K+{2-} z2M2VwCMGga+yx-Lu(Z6ndbwL4pm|6&=}Wgq5Qi4Ji?G|og`2A9^v1%;G%5F$#LNKb zmNM@E8`*6>Z~8uDu51FDB(JdV`EpW9HQ!zaqt=0PVUKc~lV}p|4Y;jxg%V^4DJX3A z3J+21B>$Q9E5j_r;+FOStqA!ktO?R`fm|*h1C8LNF~Twi(NWOJOM*^bAmZ2|=ww?s z>G4LostGNe(A;lWvMe--PF9warLA0a=zAFiV%HEiL7{E+K~!^Hq@62vh6^w@Nj5Ig zQG6>beXhMOywC#Ny7CI0>~nohA?G$1jWWq}*FZ%tVm*kl73(njeU98+ZiA}Eek8-t zDG*^~DEvKKNN}~tFF52c659s-oFcuDmujDz`1&a=Qz)s;DC}ijpuvD$!W% zD22?Ut;CX6V$Khb>e_{1Y1xfC{5?*o_5YHXla13=7)Ht>ykb|S?s2coxQsp~G-J;!^$Qi0v8;a7LWi1O4bxh(k_R;|?)?Sp0G6 z1((YJmAw^L=YUB1#m3j`XVM{lWYQ`5p|Ue!n050Bm@tEIWf*V@m^Kz(1=X&uvGCNU zcI|6uK>6b!B-HmiT^~m$Pd_19hexj578crs#rwo$V#AwV?GBZ*aJ)mhZdn5Cq=qB@ zW;^&(WCt%LJ9w))?t)kSWj!1g+i!vPh^_S}on@HhV7L<&^ACwT)xramjJs8?n*l;p z=;H@;cb~$5Wn0h*0V(+*R)R7SD(OgWJP3PH*sDoRq3=1??Jy&eGZ2DPT0|YB1rSVv zR@Z-Oc9?t#(llL2`>1~xG1xTyJ$;qw!Uz{xXr*iZB-_^-Q(W|N9d-5vJHY5#8^W5a zUT+3);|m6-I-gC}h;*1Ra6yu4`~F=nY?H!rR!a`5gY`N*(zWn8!Zzj_Z_D5yf!pK_ zax>jbK1+Kd9830SdxPq1@H`EiouxTvIU8UT+e(IwAc@A7T(5)ek%Q-9&;`ub55Vh5 z1+j;kn$h{_&W}2Y|;qf8&yQ>viNEdUjH-8U^a$ql1y;S&9!QE*!Ys2NZk6C|*!zWpQrztw0G00_P;hAxamV)_!RqW}lAX!l=3f5|ZGIK%OMU9^*;>6m7n2e* zhLMhxKa!P5`I`otTVzNK7D&{$0Hx26(AB~~u}I>^Bwdfbn^po!n(lpptP=GH$%3<$ z#JPwkFwA!IB5Zdf_rq%kOS`c;%{%UGJ(=H(Zu^-{LNVX3k6; z{le(uPd{__)`z<~a;SsfNp!qUd#AV4+s4yQw0qm_@#}5(#vAgxHe9VZQ9b`{N88cI zf3~CS=$}t_qMhi|dpXfvQ|lA_E3SICx4Kz-_oo%>XDxtJs-ix%LUXJNPrV)+ddt7T z$F{lOlj-=1&4<6r(FK2HqdUGt?1!(}&cR=rDZzEYYj9Vu0$1Md#-+Z8aa(R5F8F_n z8*5+UJNRSxTQH5dan>H+8u!HC_8Nk}Lo=Eu;ZAH|4IHVz9D-DchP?4 zA<2-UaUZQSZls+qogs~sCP{OoRnqm+P13FSTI?C=1!=eRru4q_59y!MXVPJOG4{RG zAj@(axxMU@JK}q>q4JsXIrv^IRh}#7%Ej_Jd81r~@5Ek|U%?Hw_vC-zs{g;`koZna zQ(}}j#Z)Y%r_x^;s*J&XwyEN(e}aoyjmc2GO2Ca(LRtxi*CtMkm#eFA-Tz*7llrLoocfabs`{oH z#9g>g)I;hw>W}Ji^*7bgxTb3zv{-*P6Bm2Cn?`>fSATksL<;#zK{k%TdxGG&Z=wvJ*bO1Q`yjGKvUI%I+bAGVD>3f^M7Qnjbj z{do;g#)0?4a)P_xQ}lqiZVF(j$pz-Ex-lLm>?TV$J_OIgC0;mivW$@bOmzJwoHUK8 zYjEQl2C^*UArop8_@T$R1oxVUnk^1o2;2a{sWjlZ7$%ZXhj6=jI>A{rf@0hQzp@0! zsB2Iv$Brg#G|V-hcLwQ!Ozi4R?fbTZEt>^IsJ}xD_V8$gr(>ctaBUA&)zN zhA0N9C%;+h**+ay1o@$|8KwbtoMl`>WH654diBB)+ zO83RW>PogDacLRrhW}_%rUVMfYwco@C30Y1STt!*1f`*b-n8rkWUqCp- zw;&L>A0fw`&?=o|Tq1FiLox7-``Y5_Jqdfk0v+(4Nq8YF(nl25<@g2#Ur9J1ick_R zuM@oZKtl6^#{|eo0xJmaqSM`Ol-U+Y&9TnLbdvU?6r8p7+Mpx~Da&la2jk*H!6a0@FZhC{D z8_E{rvx3_}ukIb8paFeu2OQ&Qha((~lCi_cx89fv#3wmZ$yr#bI-@kNYd*VHH&(%W zX4tD=)Q#1+zAroiu5sR2WyTrr)3RB(5N6^ zIyvQBSEul-;Y*svgT_#R55W%~J_r&Azw^+(NHVfq|IK>c$bsX>!2LmMfKIXt2M2_Q z53^VePo-6TDloTm()n0QN1w6W6Je~SYpSz8y_l>&gv4UvC{OWyot;H^XapT z+4!Rwu&dEV#O*#;&Jaj;O~C@JO?yq;_!rs(zEXgR7|L%LUSeqmE+ksUqc9ADO=iK| z4T#``GA`F;V>`OP&*TOsPJTZ_NV(Xt*cgN(kSd@89pS47fI&>`X(TFVLQ%jCe)_{k F{|A0DE;axF literal 0 HcmV?d00001 diff --git a/apps/pebble/README.md b/apps/pebble/README.md new file mode 100644 index 000000000..4b0233781 --- /dev/null +++ b/apps/pebble/README.md @@ -0,0 +1,17 @@ +# Pebble + + *a Pebble style clock with configurable background color, to keep the revolution going* + +* Designed specifically for Bangle 2 +* A choice of 6 different background colous through its setting menu. Goto Settings, App/Widget settings, Pebble. +* Supports the Light and Dark themes +* Uses pedometer widget to get latest step count +* Dependant apps are installed when Pebble installs +* Uses the whole screen, widgets are made invisible but still run in the background +* When battery is less than 30% main screen goes Red + +![](pebble_screenshot.png) +![](pebble_screenshot2.png) +![](pebble_screenshot3.png) + +Written by: [Hugh Barney](https://github.com/hughbarney) For support and discussion please post in the [Bangle JS Forum](http://forum.espruino.com/microcosms/1424/) diff --git a/apps/pebble/pebble.app.js b/apps/pebble/pebble.app.js new file mode 100644 index 000000000..ce9ab3340 --- /dev/null +++ b/apps/pebble/pebble.app.js @@ -0,0 +1,120 @@ +Graphics.prototype.setFontLECO1976Regular42 = function(scale) { + // Actual height 42 (41 - 0) + g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAA/AAAAAAAAH/AAAAAAAA//AAAAAAAP//AAAAAAB///AAAAAAP///AAAAAB////AAAAAf////AAAAD////4AAAAf////AAAAH////4AAAA////+AAAAA////wAAAAA///+AAAAAA///gAAAAAA//8AAAAAAA//gAAAAAAA/4AAAAAAAA/AAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//h////AAA//h////AAA//h////AAA//h////AAA//h////AAA//h////AAA//h////AAA//h////AAA//h////AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////gD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4B/gH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////wAAAAA////wAAAAA////wAAAAA////wAAAAA////wAAAAA////wAAAAA////wAAAAA////wAAAAA////wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////x//AAA////x//AAA////x//AAA////x//AAA////x//AAA////x//AAA////x//AAA////x//AAA////x//AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/wB////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/wB////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAH/AAAAP+AAH/AAAAP+AAH/AAAAP+AAH/AAAAP+AAH/AAAAP+AAH/AAAAP+AAH/AAAAP+AAH/AAAAH+AAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"), 46, atob("ERkmHyYmJiYmJCYmEQ=="), 60+(scale<<8)+(1<<16)); +} + +Graphics.prototype.setFontLECO1976Regular22 = function(scale) { + // Actual height 22 (21 - 0) + g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/nA/+cD/5wP/nAAAAAAAAPwAA/gAD+AAPwAAAAAD+AAP4AA/gAAAAAAAAAAAAAcOAP//A//8D//wP//AHDgAcOAP//A//8D//wP//AHDgAAAAAAAAH/jgf+OB/44H/jj8OP/w4//Dj/8OPxw/4HD/gcP+Bw/4AAAAAAAP+AA/8AD/wQOHHA4c8D//wP/8A//gAD4AAfAAH/8A//wP//A84cDjhwIP/AA/8AB/wAAAAAAAD//wP//A//8D//wOHHA4ccDhxwOHHA4f8Dh/wOH/A4f8ABwAAAAAAAAD8AAP4AA/gAD8AAAAAAAAAAAEAAD+AB//A///v/D//gB/wABwAAAAAADgAA/wAf/4P8///wf/4AP8AAOAAAAAAAAAyAAHcAAPwAD/gAP/AA/8AA/AAH8AAMwAAAAAAAAAAAAADgAAOAAA4AAf8AD/wAP/AA/8AAOAAA4AADgAAAAAAAAAAD8AAfwAB/AAD8AAAAAAAADgAAOAAA4AADgAAOAAA4AADgAAAAAAAAAADgAAOAAA4AADgAAAAAAAAABwAB/AA/8A//gP/gA/wADwAAIAAAAAAD//wP//A//8D//wOAHA4AcDgBwOAHA//8D//wP//A//8AAAAAAAA4AcDgBwOAHA//8D//wP//A//8AABwAAHAAAcAAAAAAAA+f8D5/wPn/A+f8DhxwOHHA4ccDhxwP/HA/8cD/xwP/HAAAAAAAAOAHA4AcDhxwOHHA4ccDhxwOHHA4ccD//wP//A//8D//wAAAAAAAD/wAP/AA/8AD/wAAHAAAcAABwAAHAA//8D//wP//A//8AAAAAAAA/98D/3wP/fA/98DhxwOHHA4ccDhxwOH/A4f8Dh/wOH/AAAAAAAAP//A//8D//wP//A4ccDhxwOHHA4ccDh/wOH/A4f8Dh/wAAAAAAAD4AAPgAA+AADgAAOAAA4AADgAAP//A//8D//wP//AAAAAAAAP//A//8D//wP//A4ccDhxwOHHA4ccD//wP//A//8D//wAAAAAAAD/xwP/HA/8cD/xwOHHA4ccDhxwOHHA//8D//wP//A//8AAAAAAAAOA4A4DgDgOAOA4AAAAAAAAOA/A4H8DgfwOA/AAAAAAAAB4AAPwAA/AAD8AAf4ABzgAPPAA8cAHh4AAAAAAAAAAAAHHAAccABxwAHHAAccABxwAHHAAccABxwAHHAAAAAAAAAOHAA4cADzwAPPAAf4AB/gAD8AAPwAAeAAB4AAAAAAAAA+AAD4AAPgAA+ecDh9wOH3A4fcDhwAP/AA/8AD/wAP/AAAAAAAAAP//4///j//+P//44ADjn/OOf845/zjnHOP8c4//zj//OP/84AAAAAAAP//A//8D//wP//A4cADhwAOHAA4cAD//wP//A//8D//wAAAAAAAD//wP//A//8D//wOHHA4ccDhxwOHHA//8D//wP9/A/j8AAAAAAAA//8D//wP//A//8DgBwOAHA4AcDgBwOAHA4AcDgBwOAHAAAAAAAAP//A//8D//wP//A4AcDgBwOAHA8A8D//wH/+AP/wAf+AAAAAAAAD//wP//A//8D//wOHHA4ccDhxwOHHA4ccDhxwOAHA4AcAAAAAAAA//8D//wP//A//8DhwAOHAA4cADhwAOHAA4cADgAAOAAAAAAD//wP//A//8D//wOAHA4ccDhxwOHHA4f8Dh/wOH/A4f8AAAAAAAA//8D//wP//A//8ABwAAHAAAcAABwAP//A//8D//wP//AAAAAAAAP//A//8D//wP//AAAAAAAAOAHA4AcDgBwOAHA4AcDgBwOAHA//8D//wP//A//8AAAAAAAA//8D//wP//A//8AHwAA/AAP8AB/wAPn/A8f8DB/wIH/AAAAAAAAP//A//8D//wP//AAAcAABwAAHAAAcAABwAAHAAAAAAAAP//A//8D//wP//Af8AAP+AAH/AAD8AAHwAD/AB/wAf8AP+AA//8D//wP//AAAAAAAAP//A//8D//wP//AfwAAfwAAfwAAfwAAfwP//A//8D//wAAAAAAAAAAAP//A//8D//wP//A4AcDgBwOAHA4AcD//wP//A//8D//wAAAAAAAD//wP//A//8D//wOHAA4cADhwAOHAA/8AD/wAP/AA/8AAAAAP//A//8D//wP//A4AcDgBwOAHA4AcD//+P//4///j//+AAA4AADgAAAP//A//8D//wP//A4eADh+AOH8A4f4D/3wP/HA/8MD/wQAAAAAAAD/xwP/HA/8cD/xwOHHA4ccDhxwOHHA4f8Dh/wOH/A4f8AAAAAAAA4AADgAAOAAA//8D//wP//A//8DgAAOAAA4AADgAAAAAA//8D//wP//A//8AABwAAHAAAcAABwP//A//8D//wP//AAAADAAAPgAA/wAD/4AB/8AA/8AAfwAB/AA/8Af+AP/AA/wAD4AAMAAA4AAD+AAP/gA//8AH/wAB/AAf8Af/wP/4A/4AD/gAP/4AH/8AB/wAB/AB/8D//wP/gA/gADgAAIABA4AcDwDwPw/Afn4Af+AA/wAD/AA//AH5+A/D8DwDwOAHAgAEAAAAP/AA/8AD/wAP/AAAf8AB/wAH/AAf8D/wAP/AA/8AD/wAAAAAAAADh/wOH/A4f8Dh/wOHHA4ccDhxwOHHA/8cD/xwP/HA/8cAAAAAAAAf//9///3///f//9wAA3AADcAAMAAAOAAA/gAD/wAH/8AB/8AA/wAAPAAAEAAAAHAADcAANwAB3///f//9///wAA"), 32, atob("BwYLDg4UDwYJCQwMBgkGCQ4MDg4ODg4NDg4GBgwMDA4PDg4ODg4NDg4GDQ4MEg8ODQ8ODgwODhQODg4ICQg="), 22+(scale<<8)+(1<<16)); +} + +const SETTINGS_FILE = "pebble.json"; +let settings; + +function loadSettings() { + settings = require("Storage").readJSON(SETTINGS_FILE,1)|| {'bg': '#0f0', 'color': 'Green'}; +} + +var img = require("heatshrink").decompress(atob("oFAwkEogA/AH4A/AH4A/AH4A/AE8AAAoeXoAfeDQUBmcyD7A+Dh///8QD649CiAfaHwUvD4sEHy0DDYIfEICg+Cn4fHICY+DD4nxcgojOHwgfEIAYfRCIQaDD4ZAFD5r7DH4//kAfRCIZ/GAAnwD5p9DX44fTHgYSBf4ofVDAQEBl4fFUAgfOXoQzBgIfFBAIfPP4RAEAoYAB+cRiK/SG4h/WIBAfXIA7CBAAswD55AHn6fUIBMCD65AHl4gCmcziAfQQJqfQQJpiDgk0IDXxQLRAEECaBM+QgRYRYgUIA0CD4ggSQJiDCiAKBICszAAswD55AHABKBVD7BAFABIqBD5pAFABPxD55AOD6BADiIAJQAyxLABwf/gaAPAH4A/AH4ARA==")); + +const h = g.getHeight(); +const w = g.getWidth(); +const ha = 2*h/5 - 4; +const h2 = 3*h/5 - 10; +const h3 = 7*h/8; + +let batteryWarning = false; + +function draw() { + let date = new Date(); + let da = date.toString().split(" "); + let timeStr = da[4].substr(0,5); + const t = 6; + + // turn the warning on once we have dipped below 30% + if (E.getBattery() < 30) + batteryWarning = true; + + // turn the warning off once we have dipped above 40% + if (E.getBattery() > 40) + batteryWarning = false; + + g.reset(); + g.setColor(settings.bg); + g.fillRect(0, 0, w, h2 - t); + + // contrast bar + g.setColor(g.theme.fg); + g.fillRect(0, h2 - t, w, h2); + + // day and steps + if (settings.color == 'Blue' || settings.color == 'Red') + g.setColor('#fff'); // white on blue or red best contrast + else + g.setColor('#000'); // otherwise black regardless of theme + + g.setFontLECO1976Regular22(); + g.setFontAlign(0, -1); + g.drawString(da[0].toUpperCase(), w/4, ha); // day of week + g.drawString(getSteps(), 3*w/4, ha); + + // time + // white on red for battery warning + g.setColor(!batteryWarning ? g.theme.bg : '#f00'); + g.fillRect(0, h2, w, h3); + + g.setFontLECO1976Regular42(); + g.setFontAlign(0, -1); + g.setColor(!batteryWarning ? g.theme.fg : '#fff'); + g.drawString(timeStr, w/2, h2 + 8); + + // contrast bar + g.setColor(g.theme.fg); + g.fillRect(0, h3, w, h3 + t); + + // the bottom + g.setColor(settings.bg); + g.fillRect(0, h3 + t, w, h); + + g.setColor(settings.bg); + g.drawImage(img, w/2 + ((w/2) - 64)/2, 1, { scale: 1 }); + drawCalendar(((w/2) - 42)/2, 14, 42, 4, da[2]); +} + +// at x,y width:wi thicknes:th +function drawCalendar(x,y,wi,th,str) { + g.setColor(g.theme.fg); + g.fillRect(x, y, x + wi, y + wi); + g.setColor(g.theme.bg); + g.fillRect(x + th, y + th, x + wi - th, y + wi - th); + g.setColor(g.theme.fg); + + let hook_t = 6; + // first calendar hook, one third in + g.fillRect(x + (wi/3) - (th/2), y - hook_t, x + wi/3 + th - (th/2), y + hook_t); + // second calendar hook, two thirds in + g.fillRect(x + (2*wi/3) -(th/2), y - hook_t, x + 2*wi/3 + th - (th/2), y + hook_t); + + g.setFontLECO1976Regular22(); + g.setFontAlign(0, 0); + g.drawString(str, x + wi/2, y + wi/2 + th); +} + +function getSteps() { + if (WIDGETS.wpedom !== undefined) { + return WIDGETS.wpedom.getSteps(); + } + return '????'; +} + +g.clear(); +Bangle.loadWidgets(); +/* + * we are not drawing the widgets as we are taking over the whole screen + * so we will blank out the draw() functions of each widget + */ +for (let wd of WIDGETS) {wd.draw=()=>{};} +loadSettings(); +setInterval(draw, 15000); // refresh every 15s +draw(); +Bangle.setUI("clock"); diff --git a/apps/pebble/pebble.icon.js b/apps/pebble/pebble.icon.js new file mode 100644 index 000000000..ecd7feb7f --- /dev/null +++ b/apps/pebble/pebble.icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("oFAwgNKiIAIFqofegIf/DAUzAAMyAwUQD60T/4ACD7Q/cPxIf/YCofcDhYiSXYYfuUZgf/D/4f/D6USkUgD/4fuogAID6vtDw/UD6vu6geF73kb6vuEAtN9wfYMIneD7JADDwIfaIAJdBD7YgBHwQfbAAgfkf6Qf/D/4feogAID6oAND/4f/iAdJD/4f/D/4fUDxYABD74iODiAftTZgfnYYczAAMyD7UT/4ACH/S+bD8DAKD9Y=")) diff --git a/apps/pebble/pebble.png b/apps/pebble/pebble.png new file mode 100644 index 0000000000000000000000000000000000000000..10f5adb56b224f3e4d037c4d195fbd9efc81b959 GIT binary patch literal 1213 zcmV;u1Va0XP)POM$%3@Whhhyn@nYhxDeg-e<-cZ zYFr2k?%buN)IY$D3u)c7&`lO@rMoJkr~#QIf+Nxtsa1-};Ey=&+{^zdH@zOnM{mX zvjtWIh=|(&%XQtCm^E8qH2}cN%z6O8ZE6bK^H45MbUEA#JEV9`wMn*=ov6V^% zySuwkO0~5~DF?#<%d&1sDYbW0Hk-xj>T1XM!^1;VDwVeD28LA&YzBCqmmwl;+y4GO zgb;{C^xd7DoZ$HQ*iU*PlgY#ig+iSt(^m8u_dq(G-UG14rPmA*y;>|5zciuESp-cK zzzd8G0~P~16+jM57D5&SEX%sZrKQ7UAq-RlmX?-oDy4Ra==sOnq?EQ&YLqXv|L}5|Ola!1|954-`%Wb(F@@^;gu`v9KmHh$=b zz?A|0PN3hg)_~-=MDC3mBG9he1EGlU<1aQo_~dDZ%=}?Bz_u0A^B$@-pn9+O6{;nG zYf}<`Kd>0H)5AUs5CP97fT*MJ>ls1HVDZr?Fg>Z@^Z2lhdcFPy5q)~`|M@n#Ym7~U z@i=f}MB(%|LZi#=!uS}FOsYUTu4=XV)%yDS`#mKI!$r`xf!P^_vHy8YA_Oo!r7#)r z!*gJK77zlsHtGN2E=(GYo6bbfrL6?V#{kEEG$bCJKfoG|15-%_#@%gTE_Ep!jRH5W zKPrx~n8GvTm)X0XOWzAv5#aiC_;mso1HT!XnVETOb91x#hsS?5Ha6yc10G}G4G==a z0W_D;`+?$l(-}Oj4Cr?P{buM5U@d|Tm+;LG`eQJ?aQA2PHJY`D-~SMJ@1qG$N#hLt z5V$g+-wE`afj8jn?CfJ9#B)u53qj%sekt5&H16ecxu1HCANV^UEJJTVs3G8Y_SYob z=a51f;5ZH($KlGQF9aO|PtK#9bBHKZPJs*{qGFiNOdzGa6DB^;5D-GVDW%+j=2&bW z4obR2luslQ`(eacDoQGqdX0!a=g{)uPN`Hf^6CuNH258Wo{y_`LBW(Tivi_w`7Z!> zIka>rrJig9&iR&6s|Cxlj2XbW7bpP8>Kf+e=CHQ52Fud_-hX;}itX)f?MqVtJlnQI zRr*e_8K9IZ_^r}bR#vdQyxcMV;NU>}(iDKQsrQ8d-aFu;5Vn2IdwY9OO8KrDkB*Ky zy)$y0J8xG=4+z` b5C9$mizYm;5j?(%00000NkvXXu0mjfggZkP literal 0 HcmV?d00001 diff --git a/apps/pebble/pebble.settings.js b/apps/pebble/pebble.settings.js new file mode 100644 index 000000000..b60600316 --- /dev/null +++ b/apps/pebble/pebble.settings.js @@ -0,0 +1,38 @@ +(function(back) { + const SETTINGS_FILE = "pebble.json"; + + // initialize with default settings... + let s = {'bg': '#0f0', 'color': 'Green'} + + // ...and overwrite them with any saved values + // This way saved values are preserved if a new version adds more settings + const storage = require('Storage') + let settings = storage.readJSON(SETTINGS_FILE, 1) || s; + const saved = settings || {} + for (const key in saved) { + s[key] = saved[key] + } + + function save() { + settings = s + storage.write(SETTINGS_FILE, settings) + } + + var color_options = ['Green','Orange','Cyan','Perple','Red','Blue']; + var bg_code = ['#0f0','#ff0','#0ff','#f0f','#f00','#00f']; + + E.showMenu({ + '': { 'title': 'Pebble Clock' }, + '< Back': back, + 'Colour': { + value: 0 | color_options.indexOf(s.color), + min: 0, max: 5, + format: v => color_options[v], + onchange: v => { + s.color = color_options[v]; + s.bg = bg_code[v]; + save(); + }, + } + }); +}) diff --git a/apps/pebble/pebble_screenshot.png b/apps/pebble/pebble_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..169df2d22cf0abf143620b2698393b8bed9f6706 GIT binary patch literal 2426 zcmb`Jc{tSl7QnwV(->Q06dLN~W$q-|lO-cE(NK}bzBH!f6_Zk!FdDz*Uz=dG7_b3C| zU$}+HMdr%xVZCu`T6UaBqzzyZ%PbrXEO;W(7P((QAyQC5y5Sn^UqN6@8jYf1xdjBj zB@n>>MEXQ6j0J0;rXi5_y4nr_7m-@s>Z@~_gDH_?nIq?kqrolTn)qi;qtOGl?fGk? zpU0j=wGXyoPrvd&YJl45XF^fIy4M9zfHI9#c`6juS}aCCdALA2%Ed_M=n7i* zFW6Gt;+2Z+>ovziq?mZ;L08gr=!u_CQ-ClD@j`g<_16h_ueB_kg&e=U;Eh?E#}(_0 z?g|S8lQ_B}jfXlrq!96}I2FM+f@&vBcF3I~_NG$|+Buz%*<_#OY8=JepAzE55S9p7 zD>E!5FpWs(#+PBRgAJi)Sshcpa0C5at3_hZD9^mSQ*)Q&^7BKIfIS%Y{EH~|`%0W5 zIPK8dbZ)8|H+658{MCgIQXVI}@)+*;%2vC22prPZN8Qn~B0 z4p^TmT?yKuKU&=4f?yjz5V`9idUBo3EH}ePaV*3i8wKCCsUkXidvtnF$>Uf*KgT?1 zT@PM+mdyx9g*YsH9brB~`c!9@ zKi?pX+k8{)q(?5R@$+ZXxum}=*Tx+i_xlLz*zkMIB=z6EC`W-~zpcZyHYb@$rb(Z_3 zOeJA_Z$m4dpsPMGXkNRy$iNq|3&?eF?$eL)wzH2-MNF`^*8_{+VRt>v;*uA0Ge-L) zgw}{N8)pXOFl&>p9W~DDPb`r_4k8JPh;-{&%gA3|XBC|T*r=+lbLx6g*LCeCD~@ZZ z7og+@I0V)4Ty+T{unqVQ6LA>3)k@m2;A9)?!f9wmi1 zGN0r{&0i&y$-*~-&b-Tz66W<^-Ar7=o0CJ$Lw*orf83_Jlea|b0<4P>xe*RqyMh$@ zxgME-1Mud(>3%4mb*v$1F(F74ZGkXGVK2^u2$MR@--CFp&y;JUHRhLYyG*@^Cefm3 z%=W#@x;zUj*YOd7iU`3!P;1yhGuB;PLn=zy8OmvgGhG-&st+n4-E)x<-X7cNu62rWGDp_ghf zJKogI6T?S7p^3+s*SIphr!>8C_dQgZJ3M>uI2bp2s<`-4$Mn8b-&Czt$;FRqKrhWJ ztEXh2%WSVn_IX=2+XL18C~df}jdwb5+1)oejvt3SxS(&$8;NvBh0o0aJQSlCzx>4* zlofPjKXNN{K|ilLk&@FD9+aF`s>|9_cHn+aH+;tctd=?z#aT5J2BzV}BnvAMwoy3F ziu`D)b3w+kmRU$(ku~C{C=2^7?Kx)r3lOXlD$-sin%s$YY4<{aGZUb@j0&Kl;i2I! zX%ND|@Y$(I;6qf?tZ)O6Hwm6AQsDPb)d+68x@v05aRHDE8rShhOzSwxd1?L~+y$Qn zR(iOHnY_JO#%1w8o^{0S-E&A=QJ*)}EW1(zgK8RTRCDju@n5pvs-;fGMqn z!@>v+%Qzt1XZU9h@K87?g`(T$_uv7xV>5*MQy~sXKe~e`3n`|a@B?N}M`Y-XqW9)j zV@%gB0hy_;;M^taxn2KBSGv64>B=O$Q3F1pL#YR|c7@w11G$%WTzkxXOw-f^RtojV z56Z`ahClsx1`klR1>}iX(=?oNK)>=H|0+>;Mpa>pvfqJ4r+Zt#Gl?~4xXQ=|Y^^zs zq5}!~RAX^Xa70<*JIZjXf5KPC!l18-MV$@f@CUTOUVEl%LWe;+80?lny_esj2(%-; zcsuKs{^5AkK4In(0lT7901YLGX#X;Zfz?~g+uFFToxN}L6qFrf*h~b$kI0*G;=XHE(8c8rr6QrJF81MOw zUY5>7KYq=t*JcDupVIxwZPFgT%~zF41{1}GK@R;5V+n?Y?`2Ig5Wz=MHLuGB(6mCX zq|37dn#38NbKIuu*lpH6(|BG%8|NGR%5M1zN_e5B=koMSyM+p*FJboSoWJ{i!##d9 zPlosNr{@_tm8tIaDrPDQ+JWI}W(?ZiOSfD@0h6kV@O_JKex5(AI*X*g|K#oz`(ED9 zto_bwR-+6=WFXRsHYlgew3OF`Dwnr->eJ>2sCHbTXuWLRQN& zz$rPhm9sUykFcYkNiVF8&4cr$(|=oRJI%*Sn<)bE;>C`NFCcWu+QbnJdbIF^l?p)U z!@iN|j1aHlfe1Y`FiTTAIphMMtV{CQhd8}IG}xsn^%CeXH1O!YRv#-q9I~^Wy*q%y zOX3ed0zh;3<&^&g`z9|i)i*7Z59T6)j9a0OvZzj)=>KE|cBP zz5WnT1OX8#iV0|g*vk{CvX3$%x9voy#Ile{W)LZ zn%}wmeTnbWGa57w`1lgAAFC7Zx$L*@tq7u%lsSO)Dy@SZhz8<9WFmlyhN4#iAF2os zSf9Rjgn_7tPZ$uiur{-E3Fr$5&o<<#Wt!~`!6(1k)`tMl9I`iLCio8hf zfdAXlR`n$@p#Qrdq*R9h(|Fd$I+v<=KIj%#J#NYp3&O)h*bjHM8mV7aHtnX;nPpV1 zWe=;W&dk5ChEd#uDYG! zU5uIdW#tc%@A<=s=8EABiINhe!r}vj&NiW+cll%rkJoRxwQR>E*)lHR#XUy2oGT%x*MoZ4GXG*E-@g zDog#QoE03eJ(zdbL|Q+5%v)Gx5INIuWUsJ6VWo`3RrzSZy#cg+g)WHhi!_C7Df0 zlZR0|yX|M^282)?i;S5l29m@7dn5TQXeQSNiW9-KMiDWR3nE_L{%6xC9#;3|osB2| z4&T}Hm|}j(TfH(6YTTy!tibu=Jmqge2tRu>BOTpI)+avXVqsPqEmhGnz0DZHHrQFn zSx=vSL-U~e5=yyB*3Z7u2aZ9Wp#qQ;(~}*b9Hb{9ZJAhF++L@rzP|ce4L>GK>R2Uf zfcm3N(hN$p;PSeofw)nA=*^i!Wp1}Y{iRD_?}M5d)-7+Rbk;gTb#5vOR$=2kErbCNOMe+<8>YfC1REJ*B@ zsVe-K#fQ>1tow4^ch1K1lf@~j>q9*vAX^bYlC!Tf-mV_1dlTy7_AD6iL83BxW)aUY zYi*{!68yC(wt${;?neufn{{U{xWOBQHawjsx`I~w(O+hzz5 z_3(dW)B_!7uEP4wtsrT-+tC^%cz)_voj~LcoR6i7gTswkS;OikYs@$EE4@9RowI2f zKvGsMJtyZ!c2i%ciA-^#!U*xFrUGkW;It4Q{hZ>dG!!)IZo2*giJe(Xjg#;8V7^jU zVfgkj+)E)cUcOfe<})}@m9Up^xc)bNTDmb={ZSxq@1T? zHS-RPu$?MDz^On=YnDAs)=QKx^o+mgvAT&LE*OzlHU3S5Xh1bA{c$PxSNT_A*ctPl z5=UxM9pjm0B>(#2d+c-%qv%A6ohy-WwSbcIeql88WC1N0gxlC5`c_UpSuyi#W6&2N%!T3EBf8`Q=Fat z?7e4T8d%W66L&CNX=II#g!C+CB495LuDvv%H8Zk7lG)IWTQ)TH!=Dm&efQG%ls9uKWSL57rE z)>9QWLT(}Yb^cpZ^X3srP>aLpCEgd&u*BMMMl!yMzDB)^xyo88;TqeOyx?c!@-r}Q zW!e9D1!SX%H@Mv?IWt&IN6EQ;YB44#jf`jd+wJ6Fvl&0w%oZoleV?QnZ(Fw2qu zLJ~XKT?QAfpPEA^tunKnxu$r*~jtZ&AiHktK%ofzx8^_Y4`kY z1`>R3|7+ahy1!v<7fJgeVK=SH-ItNCKn0@8fpQJn1hA8)0=QjMkR$UqBzOgiCpk&J z)j0#@GtW}9ASW!EM`?#VcA$}cDB#DOmaybs?_}^giVMR*#CJ8kFW>|V%^ngN!e+aR zR3G^Gt)wfx=5Utiu~hs|^Gd+|oX_PmR6jMDc7vMRX@F0_aUWeeQ5UIg}}G zG%5qgY3_<9TvVl0+#M&lEh)dwOr;?Jl^EAj4s*o5;o|u+07~#(&h}{O&jSg!oSt-9 zpD6?Y+tq1z4-M+u=1Udr06o&(y|@htCR~E4IM}P9rsl9q#M?IY0K!&pf1ENLFHbfk z3g&^4r9HBoh+QE1zdD_`8ga)B8ODe@=K&M!^ zd&MAuo^gmMMF~L4a*SV$VWb?>eN+r1B{^wK;w1orPcls?Fj6ecm-uX0`g}mbdN4lb REZoNda}z7$azoeq{{h`>onrt1 literal 0 HcmV?d00001 diff --git a/apps/pebble/pebble_screenshot3.png b/apps/pebble/pebble_screenshot3.png new file mode 100644 index 0000000000000000000000000000000000000000..0de8df516d1323045b50fcc27fbb616db16ec400 GIT binary patch literal 2335 zcmb7Gc{tSD8$UB&v)pM6Q??jOb!8b#(v%oNrm>Vlp)e+*+a;qymgGCGG)Qh`=_j%j zD*KXT$)v>1mZ_$ZXjGI&8Kz_!<<5QX@4w$)zdz1-pXZ$SyytnJ=lv{cd)(=YI87V? zK+(n7$x|Nd{#jVGe6PLpjv)_-6P|QOP%}uH1^_$a;^eS5mhq`@_~JEtEbY?r@`v#M z>!%jzX?gM&{k2?E6wt79B?E3*A6*Ra z(0_|8Zb#I7DZSD#iZGL^0HMz=V5M8&>IA69+=T_{M&0gl0!BzgM4UOvL&8bsGgADi zP8L}fyR>iUfaF>G!Ld^V8`h6eT}T+QsBC3g z5%j*WO)B{X!~F#ODCtzYXV`i$d-ycVxs2c+PWT+Zs-nN~!k-aRO*E6p_}1Zg!5z=d zIk^TO`&zxO4eC@^gEinvySn2*RFS?Ec%#0+SLZP6U zAlEK>bLhB~|BfFV4RW9Tq`b6rjO||dY>_w3?NS_7dsx)dp3h?+uH77`CxZktG(AyE zbakeJnCE@@y-UF_#+KqF6cDslshzip(KbnZP6(Gu(=M)VDJc%ya_~`QzQi(Tnma^J z+HWu$cHNj;H2Ql+t^YkmpaF-Vka`Qq@bhY*-z)_mX>WjL=DmD+$LpTCM_ls(X>K=v z+V-Bowz3_Zp@%1<-q-^3k8YT9$R?pn6w#8n-divC3Id2gUun8i_9yPPlfFF;CSi(P zV8USag%%YdP6s-l#3O z)kMA1K~j9mwuuSydb=t#2%JVl?)X+`=K5`}(Pqv@cwVmpB?zFtPoA)j>~UYZZQAh_ z+X?joswZX;J14n$p|Q=X9}(*WR}@%hu9|Z1uDFlTgTyyL5q|EYU-*4xNZboB_DfQ7 zF3a$Fr@8?G#NeH^${&nBG@Wb@F5q}1OzA5JS&KhtTL~YTk%GXu`E;3eB=k_G`cpK) zdA+6_3M_*R;1(*E?*H7w?riMJiu8%gY5VfhwE@|f^3oqC%p6PGA$^&P>hB7mbDB+L zRjw=Q#Fso1Rjh?3fMj3{dX5++JSNl?U{ggn{3~{mk`w=GT*gk4wIj!ZnTi~c!>TdL zq`w$|!#9u?o8+(=;MH&V0|^RBa1WnU0kFlbrwcF7N;OvA-iQRROte>68a}}=heDUW zM1@9dOA2a?X^##_bq((p4zuPZ{L06z+TS5DVXoD*8W|K;V3VRC)P57~_Y$`wC)y@u z1`;2J`8`XA!bbd$rqtm`)$}z#5Q5}uUB|#@UwzTXa!8g@@>}aWismWuJl|@|5|3>< zOeV2V5Uh2plA|3hDT(N$TtD`B0p1Qxt!>e#&i+|pcC;|W?~l)kb`ftF@`lI_uSH;SdsZ2%{6O(-+;7rMBUX}m zb$ru~m$FlNpSa#^ z#t&>`GQ|rvWvVP2a5q(`&^-DMBnn>DYEmchnfq9?E2_ zm=D_nU@fO$7abI^+HK0Y?tlOh%9;9ca%Q96*1L$7Q>4SD+;<)TmOM*#)|4NkhkY;7 z5vzoa4DYtrcaje2h4~Z92J-zLwE%%jLG;0`W2X6s6+&>Eg8jkFuLQU-8FiU;gur!Y zBLqgi@K%7~EXE+X?4a}-;H%Wpa-(XQbU<#+_UaNyr?6OLVGQX1o3AB+^LojI_8Txo2T?}|?A@Gy+InnbY47)uC^xd%*wfaK5P02ukxb~~UwjLY z49h>@U|NZaCGg&xej6dQw?$a(**UBVG8~OULDdbFFo?^JM@AN3E+qrCGoJmx*Taa9 zhM}(tLVF9E&m{2H^H^}DB_6WWHyasAExCAQOD?u3J&Uu{HVY+mpL6ykO3t-3OsSRl zq-5Q-OGr$mrrAK*9cgqpCOd20@eJ|m2?!3vk=9Ik*vJ3Sx!{*Fgw+Lj?rv0jQ9Myh zTLesi7G_n#s|7OY_;`SY{=j~Z;!0#F=Ch`v!FGgP(q~lg z5`Q`NYT}hMz2tm|ON}#=Pq2?I=h007Y)}uVd2;5d)Ny*d7sw~@;8i!aY this.bless(k)); + } + + writeBack(delay) { + if (this.timeout) clearTimeout(this.timeout); + this.timeout = setTimeout( + () => { + this.timeout = null; + storage.writeJSON(this.file, this.backing); + }, + delay + ); + } + + bless(k) { + Object.defineProperty(this, k, { + get: () => this.backing[k] == null ? this.defaults[k] : this.backing[k], + set: v => { + this.backing[k] = v; + // Ten second writeback delay, since the user will roll values up and down. + this.writeBack(10000); + } + }); + } + + showMenu(m) { + if (m) { + for (const k in m) if ('init' in m[k]) m[k].value = m[k].init(); + m[''].selected = -1; // Workaround for self-selection bug. + } + E.showMenu(m); + } + + reset() { + this.backing = {}; + this.writeBack(0); + } + + interact() {this.showMenu(this.menu);} +} + +class RomanOptions extends Options { + constructor() { + super(); + this.menu = { + '': {title: '* face options *'}, + '< Back': _ => {this.showMenu(); this.emit('done');}, + Ticks: { + init: _ => this.resolution, + min: 0, max: 3, + onchange: x => this.resolution = x, + format: x => ['seconds', 'seconds (up)', 'minutes', 'hours'][x] + }, + 'Display': { + init: _ => this.o24h == null ? 0 : 1 + this.o24h, + min: 0, max: 2, + onchange: x => this.o24h = [null, 0, 1][x], + format: x => ['system', '12h', '24h'][x] + }, + 'Day of Week': { + init: _ => this.dow, + onchange: x => this.dow = x + }, + Calendar: { + init: _ => this.calendric, + min: 0, max: 2, + onchange: x => this.calendric = x, + format: x => ['none', 'day', 'date'][x] + }, + Defaults: _ => {this.reset();} + }; + } +} + +RomanOptions.id = 'pooqroman'; + +RomanOptions.defaults = { + resolution: 1, + dow: true, + calendric: 2, + o24h: !settings["12hour"], + bg: g.theme.bg, + fg: g.theme.fg, + barBg: g.theme.fg, + barFg: g.theme.bg, + hourFg: g.theme.fg, + minuteFg: g.theme.fg, + secondFg: g.theme.fg2, + rectFg: g.theme.fg, + hubFg: g.theme.fg, + alarmFg: '#f00', + timerFg: '#0f0', + active: g.theme.fg2, +}; + +////////////////////////////////////////////////////////////////////////////// +/* Assets (generated by resourcer.js, in this directory) */ + +const heatshrink = require('heatshrink'); +const dec = x => E.toString(heatshrink.decompress(atob(x))); +const romanPartsF = [ + dec( + 'wEBsEB3//7//9//+0AjUAguAg3AgYQJjfAgv+gH/8Fg/0gh/AgP4gf2h/j/+BCAP' + + 'wgFggEggEQgEMgEHwEDEIIyDuED3kD7+H9vn2k/hEPgMP4Xevd+j4QB7kA9kAmkA' + + 'hUGgOH8Hn3le4+GgH32PuvfGj+CCAMDgXD4dz+evt9DgcL7fXn87h8NCAMP+Ef/0' + + 'eg+egPugF2j0bCAPAh3wh88h8P/8BNwI' + ), 97, dec('gUDgUGgUJgYFBhsBhMJhgA=='), 17 +];const fontF = [ + dec( + 'AAUwAIM/4F/8HguHAmABBAoIJBBoIUBkEwsEw//wAIIdDBoUQBoIfC+HB+Hj2F/m' + + 'E+CIXAoHEsHMuHcmH8mHuuHH8GBGIUAwEBwEHwH/wH5+EBAIILCCAP8oH8EYXMmA' + + 'BB5wjCgYjCAYMP8E+uF8mHsCIWHCIgCBAIXw4fw54tBgBsBGgUAnKLC99w40wAII' + + 'FBBIINBCIM8gF+iHnmHDuHD8HnDYMAjizEMYJJBn+A+OAAYIHBBYKjDXYKvDYZYP' + + 'D40AAIYMBZYgkC4Hg4DnDuH/8H/BYIVCv/wnEAjwBCAoIJBEIYRFh0Ag8AgPAEYQ' + + 'RCJIJNBfYRXKnFAvlg9ihE8dwsfgkLFHMYgJF8DNCh+AUYWAA4ILBAAJGB/4PB+D' + + '9CgADCEoIPCJobbBB4IBBAoJdDEgXggvwhuwAIcH8EDRIh/BhkwAIMOuAPCMYQDB' + + 'A4ILBCIcGsECoAPLU4oPDH42ggeAB4XEg/mh1zhkzh03g/+h/4J4nwg0AhjbDRII' + + 'vCt/wAIIVFAoKTBCYIXBDIYHHEIYVFGJJxHSI8P/8H/6hLF44BBM4IABg8gh6NEh' + + 'vwgngBoITBv/Av7PBV4kAsArCfYIVBuEABYNwA4I3BD4cPL4UAM4IXBBYQfC4kP8' + + '0AucAmcAu8PXogA=' + ), 32, dec('gINMgUAhMHhIAGCQ0KAQIKBgwEBgcIBAQVEhIJBhAeIBQIADAoUDEQULBQcHg4FD' + + 'CII='), 16 +]; +const lockI = dec('iMSwMAgfwgf8geHgeB4PA8HguFwnH//9//+4gPf//v//3gE7//9//+8EHCAO///A'); +const batteryI = dec('h8SwMAgPggfAv/4//x//j//H/+P/8f/0//gOOA=='); +const chargeI = dec('h0MwIEBkEBwEMgFwgeAj/w/+AjkA8EDgEYgFAA=='); +const GPSI = dec('iUQwMAhEAgsAgUggFEgEKvEBn0Aj+AgfgglygsJosgxNGiNIgWJ4FBEoM4gA'); +const HRMI = dec('iMRwMAnken8fzfd7v+/3/v9/38/z+b5tiiM3/eP/+D/+AAIM/wEPwEDwEAAIIA=='); +const compassI = dec('iMRwMAgfgg/8g8ng0Q40ImcOjcHg+DwfB4Ph2Hw7FsolmkUxwEwuFwj/wEIMAA=='); + +////////////////////////////////////////////////////////////////////////////// +/* Squeezable strings */ + +class Formattable { + width(g) {return this.w != null ? this.w : (this.w = g.stringWidth(this.text));} + print(g, x, y) {g.drawString(this.text, x, y); return this.width();} +} + +class Fixed extends Formattable { + constructor(text) { + super(); + this.text = text; + } + squeeze() {return false;} +} + +class Squeezable extends Formattable { + constructor(named, index) { + super(); + this.named = named; + this.index = index; + this.end = index + named.forms; + } + squeeze() { + if (this.index >= this.end) return false; + this.index++; + this.w = null; + return true; + } + get text() {return this.named.table[this.index];} +} + +class Named { + constructor(forms, table) { + this.forms = forms; + this.table = table; + } + on(index) {return new Squeezable(this, this.forms * index);} +} + +////////////////////////////////////////////////////////////////////////////// +/* Face */ + +// Static geometry +const barW = 26, barH = g.getHeight(), barX = g.getWidth() - barW, barY = 0; +const faceW = g.getWidth() - barW, faceH = g.getHeight(); +const faceX = 0, faceY = 0, faceCX = faceW / 2, faceCY = faceH / 2; +const rectX = faceX + 35, rectY = faceY + 24, rectW = 80, rectH = 128; + +// Extended-Roman-numeral labels +const layout = E.toUint8Array( + 75, 23, // XII + 132, 24, // I + 132, 61, // II + 132, 97, // III + 132, 133, // IV + 132, 170, // V + 75, 171, // VI + 18, 170, // VII + 18, 133, // VIII + 18, 97, // IX + 18, 61, // X + 18, 24 // XI +); + +const numeral = (n, options) => [ + 'n', // 0 + 'abc', // I + 'abdc', // II + 'abddc', // III + 'abefg', // IV + 'hfg', // V + 'hfibc', // VI + 'hfibdc', // VII + 'hfibddc', // VIII + 'abjk', // IX + 'kjk', // X + 'kjbc', // XI + 'kjbdc', // XII + 'kjbddc', // XIII + 'kjbefg', // XIV + 'kjefg', // XV + 'labc', // XVI + 'labdc', // XVII + 'labddc', // XVIII + 'kjbjk', // XIX + 'kjjk', // XX + 'mabc', // XXI + 'mabdc', // XXII + 'mabddc', // XXIII +][options.o24h ? n % 24 : (n + 11) % 12 + 1]; + +const formatMonth = new Named(4, [ + 'January', 'Jan.', 'Jan', 'I', + 'February', 'Feb.', 'Feb', 'II', + 'March', 'Mar.', 'Mar', 'III', + 'April', 'Apr.', 'Apr', 'IV', + 'May', 'May', 'May', 'V', + 'June', 'June', 'Jun', 'VI', + 'July', 'July', 'Jul', 'VII', + 'August', 'Aug.', 'Aug', 'VIII', // VIII *is* narrower than Aug, our I is thin. + 'September', 'Sept.', 'Sep', 'IX', + 'October', 'Oct.', 'Oct', 'X', + 'November', 'Nov.', 'Nov', 'XI', + 'December', 'Dec.', 'Dec', 'XII' +]); +const formatDom = { + on: d => new Fixed(d.toString()) +}; +const formatDow = new Named(4, [ + 'Sunday', 'Sun.', 'Sun', 'Su', + 'Monday', 'Mon.', 'Mon', 'M', + 'Tuesday', 'Tues.', 'Tue', 'Tu', + 'Wednesday', 'Weds.', 'Wed', 'W', + 'Thursday', 'Thurs.', 'Thu', 'Th', + 'Friday', 'Fri.', 'Fri', 'F', + 'Saturday', 'Sat.', 'Sat', 'Sa' +]); + +const hceil = x => Math.ceil(x / 3600000) * 3600000; +const hfloor = x => Math.floor(x / 3600000) * 3600000; +const isString = x => typeof x == 'string'; +const imageWidth = i => isString(i) ? i.charCodeAt(0) : i.width; +const imageHeight = i => isString(i) ? i.charCodeAt(1) : i.height; + +const events = { + // Items are {time: number, wall: boolean, priority: number, + // past: bool, future: bool, precision: number, + // colour: colour, dramatic?: bool, event?: any} + fixed: [{time: Number.POSITIVE_INFINITY}], // indexed by ms absolute + wall: [{time: Number.POSITIVE_INFINITY}], // indexed by nominal ms + TZ ms + + clean: function(now, l) { + let o = now.getTimezoneOffset() * 60000; + let tf = now.getTime() + l, tw = tf - o; + // Discard stale events: + while (this.wall[0].time <= tw) this.wall.shift(); + while (this.fixed[0].time <= tf) this.fixed.shift(); + }, + + scan: function(now, from, to, f) { + result = Infinity; + let o = now.getTimezoneOffset() * 60000; + let t = now.getTime() - o; + let c, p, i, l = from - o, h = to - o; + for (i = 0; (c = this.wall[i]).time < l; i++) ; + for (; (c = this.wall[i]).time < h; i++) { + if ((p = c.time < t) ? c.past : c.future) + result = Math.min(result, f(c, new Date(c.time + o), p)); + } + l += o; h += o; t += o; + for (i = 0; (c = this.fixed[i]).time < l; i++) ; + for (; (c = this.fixed[i]).time < h; i++) { + if ((p = c.time < t) ? c.past : c.future) + result = Math.min(f(c, new Date(c.time), p)); + } + return result; + }, + + span: function(now, from, to, width) { + let o = now.getTimezoneOffset() * 60000; + let t = now.getTime() - o; + let lfence = [], rfence = []; + this.scan(now, from, to, (e, d, p) => { + if (p) { + for (let j = 0; j <= e.priority; j++) { + if (d < (lfence[e.priority] || t)) lfence[e.priority] = d; + } + } else { + for (let j = 0; j <= e.priority; j++) { + if (d > (rfence[e.priority] || t)) rfence[e.priority] = d; + } + } + }); + for (let j = 0; ; j += 0.5) { + if ((rfence[Math.ceil(j)] - lfence[Math.floor(j)] || 0) <= width) { + return [lfence[Math.floor(j)] || now, rfence[Math.ceil(j)] || now]; + } + } + }, + + insert: function(t, wall, e) { + let v = wall ? this.wall : this.fixed; + e.time = t = t - (wall ? t.getTimezoneOffset() * 60000 : 0); + v.splice(v.findIndex(x => x.time > t), 0, e); + }, + + loadFromSystem: function(options) { + alarms.forEach(x => { + if (x.on) { + const t = new Date(); + let h = x.hr; + let m = h % 1 * 60; + let s = m % 1 * 60; + let ms = s % 1 * 1000; + t.setHours(h - h % 1, m - m % 1, s - s % 1, ms); + // There's a race condition here, but I'm not sure what we can do about it. + if (t < Date.now() || x.last === t.getDate()) t.setDate(t.getDate() + 1); + this.insert(t, true, { + priority: 0, + past: false, // System alarms seem uninteresting if past? + future: true, + precision: x.timer ? 1000 : 60000, + colour: x.timer ? options.timerFg : options.alarmFg, + event: x + }); + } + }); + return this; + }, +}; + +////////////////////////////////////////////////////////////////////////////// +/* The main face logic */ + +class Sidebar { + constructor(g, x, y, w, h, options) { + this.g = g; + this.options = options; + this.x = x; + this.y = this.initY = y; + this.h = h; + this.rate = Infinity; + this.doLocked = Sidebar.status(_ => Bangle.isLocked(), lockI); + this.doHRM = Sidebar.status(_ => Bangle.isHRMOn(), HRMI); + this.doGPS = Sidebar.status(_ => Bangle.isGPSOn(), GPSI, Sidebar.gpsColour(options)); + } + reset(rate) {this.y = this.initY; this.rate = rate; return this;} + print(t) { + this.y += 4 + t.print( + this.g.setColor(this.options.barFg).setFontAlign(-1, 1, 1), + this.x + 3, this.y + 4 + ); + return this; + } + pad(n) {this.y += n; return this;} + free() {return this.h - this.y;} + static status(p, i, c) { + return function() { + if (p()) { + this.g.setColor(c ? c() : this.options.barFg) + .drawImage(i, this.x + 4, this.y += 4); + this.y += imageHeight(i); + } + return this; + }; + } + static gpsColour(o) { + const fix = Bangle.getGPSFix(); + return fix && fix.fix ? o.active : o.barFg; + } + doPower() { + const c = Bangle.isCharging(); + const b = E.getBattery(); + if (c || b < 50) { + let g = this.g, x = this.x, y = this.y, options = this.options; + g.setColor(options.barFg).drawImage(batteryI, x + 4, y + 4); + g.setColor(b <= 10 ? '#f00' : b <= 30 ? '#ff0' : '#0f0'); + const h = 13 * (100 - b) / 100; + g.fillRect(x + 8, y + 7 + h, x + 17, y + 20); + // Espruino disallows blank leading rows in icons, for some reason. + if (c) g.setColor(options.barBg).drawImage(chargeI, x + 4, y + 8); + this.y = y + imageHeight(batteryI) + 4; + } + return this; + } + doCompass() { + if (Bangle.isCompassOn()) { + const c = Bangle.getCompass(); + const a = c && this.rate <= 1000; + this.g.setColor(a ? this.options.active : this.options.barFg).drawImage( + compassI, + this.x + 4 + imageWidth(compassI) / 2, + this.y + 4 + imageHeight(compassI) / 2, + a ? {rotate: c.heading / 180 * Math.PI} : undefined + ); + this.y += 4 + imageHeight(compassI); + } + return this; + } +} + +class Roman { + constructor(g, events) { + this.g = g; + this.state = {}; + const options = this.options = new RomanOptions(); + this.events = events.loadFromSystem(this.options); + this.timescales = [1000, [1000, 60000], 60000, 3600000]; + this.sidebar = new Sidebar(g, barX, barY, barW, barH, options); + this.hours = Roman.hand(g, 3, 0.5, 12, _ => options.hourFg); + this.minutes = Roman.hand(g, 2, 0.9, 60, _ => options.minuteFg); + this.seconds = Roman.hand(g, 1, 0.9, 60, _ => options.secondFg); + } + + reset() {this.state = {}; this.g.clear(true);} + + doIcons(which) {this.state.iconsOk = null;} + + // Watch hands. These could be improved, graphically. + // If we restricted them to 60 positions, we could feasibly hand-draw them? + static hand(g, w, l, d, c) { + return p => { + g.setColor(c()); + p = ((12 * p / d) + 1) % 12; + let h = l * rectW / 2; + let v = l * rectH / 2; + let poly = + p <= 2 ? [faceCX + w, faceCY, faceCX - w, faceCY, + faceCX + h * (p - 1), faceCY - v, + faceCX + h * (p - 1) + 1, faceCY - v] + : p < 6 ? [faceCX + 1, faceCY + w, faceCX + 1, faceCY - w, + faceCX + h, faceCY + v / 2 * (p - 4), + faceCX + h, faceCY + v / 2 * (p - 4) + 1] + : p <= 8 ? [faceCX - w, faceCY + 1, faceCX + w, faceCY + 1, + faceCX - h * (p - 7), faceCY + v, + faceCX - h * (p - 7) - 1, faceCY + v] + : [faceCX, faceCY - w, faceCX, faceCY + w, + faceCX - h, faceCY - v / 2 * (p - 10), + faceCX - h, faceCY - v / 2 * (p - 10) - 1]; + g.fillPoly(poly); + }; + } + + static pos(p, r) { + let h = r * rectW / 2; + let v = r * rectH / 2; + p = (p + 1) % 12; + return p <= 2 ? [faceCX + h * (p - 1), faceCY - v] + : p < 6 ? [faceCX + h, faceCY + v / 2 * (p - 4)] + : p <= 8 ? [faceCX - h * (p - 7), faceCY + v] + : [faceCX - h, faceCY - v / 2 * (p - 10)]; + } + + alert(e, date, now, past) { + const g = this.g; + g.setColor(e.colour); + const dt = date - now; + if (e.precision < 60000 && dt >= 0 && e.future && dt <= 59000) { // Seconds away + const p = Roman.pos(date.getSeconds() / 5, 0.95); + g.drawLine(faceCX, faceCY, p[0], p[1]); + return 1000; + } else if (e.precision < 3600000 && dt >= 0 && e.future && dt <= 3540000) { // Minutes away + const p = Roman.pos(date.getMinutes() / 5 + date.getSeconds() / 300, 0.8); + g.drawLine(p[0] - 5, p[1], p[0] + 5, p[1]); + g.drawLine(p[0], p[1] - 5, p[0], p[1] + 5); + return dt < 119000 ? 1000 : 60000; // Turn on second hand two minutes up. + } else if (e.precision < 43200000 && dt >= 0 ? e.future : e.past) { // Hours away + const p = Roman.pos(date.getHours() + date.getMinutes() / 60, 0.6); + const poly = [p[0] - 4, p[1], p[0], p[1] - 4, p[0] + 4, p[1], p[0], p[1] + 4]; + if (date >= now) g.fillPoly(poly); + else g.drawPoly(poly, true); + return 3600000; + } + return Infinity; + } + + render(d, rate) { + const g = this.g; + const state = this.state; + const options = this.options; + const events = this.events; + events.clean(d, -39600000); // 11h + + // Sidebar: icons and date + if (d.getDate() !== state.date || !state.iconsOk) { + const sidebar = this.sidebar; + state.date = d.getDate(); + state.iconsOk = true; + g.setColor(options.barBg).fillRect(barX, barY, barX + barW, barY + barH); + + sidebar.reset(rate).doLocked().doPower().doGPS().doHRM().doCompass(); + g.setFontCustom.apply(g, fontF); + let formatters = []; + let month, dom, dow; + if (options.calendric > 1) { + formatters.push(month = formatMonth.on(d.getMonth())); + } + if (options.calendric > 0) { + formatters.push(dom = formatDom.on(d.getDate())); + } + if (options.dow) { + formatters.push(dow = formatDow.on(d.getDay())); + } + // Obnoxiously inefficient iterative method :( + let ava = sidebar.free() - 3, use, i = 0, j = 0; + while ((use = formatters.reduce((l, f) => l + f.width(g) + 4, 0)) > ava && + j < formatters.length) + for (j = 0; + !formatters[i++ % formatters.length].squeeze() && + j < formatters.length; + j++) ; + if (dow) sidebar.print(dow); + sidebar.pad(ava - use); + if (month) sidebar.print(month); + if (dom) sidebar.print(dom); + } + + // Hour labels and (purely aesthetic) box; clear inner face. + let keyHour = d.getHours() < 12 ? 1 : 13; + let alertSpan = events.span(d, hceil(d) - 39600000, hfloor(d) + 39600000, 39600000); + let l = alertSpan[0].getHours(), h = alertSpan[1].getHours(); + if ((l - keyHour + 24) % 24 >= 12 || (h - keyHour + 24) % 24 >= 12) keyHour = l; + if (keyHour !== state.keyHour) { + state.keyHour = keyHour; + g.setColor(options.bg) + .fillRect(faceX, faceY, faceX + faceW, faceY + faceH) + .setFontCustom.apply(g, romanPartsF) + .setFontAlign(0, 1) + .setColor(options.fg); + // In order to deal with timezone changes more logic will be required, + // since the labels may be in unusual locations (even offset when + // a non-integral zone is involved). The value of keyHour can be + // anything in [hr-12, hr] mod 24. + for (let h = keyHour; h < keyHour + 12; h++) { + g.drawString( + numeral(h % 24, options), + faceX + layout[h % 12 * 2], + faceY + layout[h % 12 * 2 + 1] + ); + } + g.setColor(options.rectFg) + .drawRect(rectX, rectY, rectX + rectW - 1, rectY + rectH - 1); + } else { + g.setColor(options.bg) + .fillRect(rectX + 1, rectY + 1, rectX + rectW - 2, rectY + rectH - 2) + .setColor(options.fg); + } + + // Alerts + let requestedRate = events.scan( + d, hfloor(alertSpan[0] + 0), hceil(alertSpan[1] + 0) + 1, + (e, t, p) => this.alert(e, t, d, p) + ); + if (rate > requestedRate) rate = requestedRate; + + // Hands + // Here we are using incremental hands for hours and minutes. + // If we quantised, we could use hand-crafted bitmaps, though. + this.hours(d.getHours() + d.getMinutes() / 60); + if (rate < 3600000) { + this.minutes(d.getMinutes() + d.getSeconds() / 60); + } + if (rate < 60000) this.seconds(d.getSeconds()); + g.setColor(options.hubFg).fillCircle(faceCX, faceCY, 3); + return requestedRate; + } +} + +////////////////////////////////////////////////////////////////////////////// +/* Master clock */ + +class Clock { + constructor(face) { + this.face = face; + this.timescales = face.timescales; + this.options = face.options; + this.rates = {}; + + this.options.on('done', () => this.start()); + + this.listeners = { + lcdPower: on => on ? this.active() : this.inactive(), + charging: () => {face.doIcons('charging'); this.active();}, + lock: () => {face.doIcons('locked'); this.active();}, + faceUp: up => {this.conservative = !up; this.active();}, + drag: e => { + if (this.t0) { + if (e.b) { + e.x > this.xN && (this.xN = e.x) || e.x > this.xX && (this.xX = e.x); + e.y > this.yN && (this.yN = e.y) || e.y > this.yX && (this.xY = e.y); + } else if (this.xX - this.xN < 20) { + if (e.y - this.e0.y < -50) { + this.options.resolution > 0 && this.options.resolution--; + this.rates.clock = this.timescales[this.options.resolution]; + this.active(); + } else if (e.y - this.e0.y > 50) { + this.options.resolution < this.timescales.length - 1 && + this.options.resolution++; + this.rates.clock = this.timescales[this.options.resolution]; + this.active(); + } else if (this.yX - this.yN < 20 && Date.now() - this.t0 > 500) { + this.stop(); + this.options.interact(); + } + this.t0 = null; + } + } else if (e.b) { + this.t0 = Date.now(); this.e0 = e; + this.xN = this.xX = e.x; this.yN = this.yX = e.y; + } + } + }; + } + + redraw(rate) { + const now = this.updated = new Date(); + if (this.refresh) this.face.reset(); + this.refresh = false; + rate = this.face.render(now, rate); + if (rate !== this.rates.face) { + this.rates.face = rate; + this.active(); + } + return this; + } + + inactive() { + this.timeout && clearTimeout(this.timeout); + this.exception && clearTimeout(this.exception); + this.interval && clearInterval(this.interval); + this.timeout = this.exception = this.interval = this.rate = null; + return this; + } + + active() { + const prev = this.rate; + const now = Date.now(); + let rate = Infinity; + for (const k in this.rates) { + let r = this.rates[k]; + r === +r || (r = r[+this.conservative]) + r < rate && (rate = r); + } + const delay = rate - now % rate + 1; + this.refresh = true; + + if (rate !== prev) { + this.inactive(); + this.redraw(rate); + if (rate < 31622400000) { // A year! + this.timeout = setTimeout( + () => { + this.inactive(); + this.interval = setInterval(() => this.redraw(rate), rate); + if (delay > 1000) this.redraw(rate); + this.rate = rate; + }, delay + ); + } + } else if (rate > 1000) { + if (!this.exception) this.exception = setTimeout(() => { + this.redraw(rate); + this.exception = null; + }, this.updated + 1000 - Date.now()); + } + return this; + } + + stop() { + this.inactive(); + for (const l in this.listeners) { + Bangle.removeListener(l, this.listeners[l]); + } + return this; + } + + start() { + this.inactive(); // Reset to known state. + this.conservative = false; + this.rates.clock = this.timescales[this.options.resolution]; + this.active(); + for (const l in this.listeners) { + Bangle.on(l, this.listeners[l]); + } + Bangle.setUI('clock'); + return this; + } +} + +////////////////////////////////////////////////////////////////////////////// +/* Main */ + +const clock = new Clock(new Roman(g, events)).start(); diff --git a/apps/pooqroman/app.png b/apps/pooqroman/app.png new file mode 100644 index 0000000000000000000000000000000000000000..bd27186e04c7051f73cdf3c4e1e7afb2bcfde97d GIT binary patch literal 3969 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 b-vRKyOXy+oD= { + const d = btoa(require("heatshrink").compress(x)); + var r = "'" + d.substr(0, 64); + for (let i = 64; i < d.length; i += 64) r += "' +\n '" + d.substr(i, 64); + return r + "'"; +}; + +const prepBitmap = (name, data) => { + const image = Graphics.createImage(data); + const raw = String.fromCharCode(image.width, image.height, 0x81, 0) + image.buffer; + const x = ` +const ${name}I = dec(${enc(raw)}); +`; + return x; +}; + +const prepFont = (name, data) => { + const image = Graphics.createImage(data); + const lengths = Uint8Array(256); + const offsets = Uint16Array(256); + const adjustments = Uint16Array(256); + let min = Infinity, max = -Infinity; + const lines = data.split('\n'); + let m; + // This regexp is clearly suboptimal, but Espruino's regexp engine is really wonky + // and doesn't process nested parentheses or alternation correctly. + for (let i = 0; i < 5 && !(m = /^(<*)=([*\d]+)(=*)(>*)$/.exec(lines[i])); i++); + if (!m) throw new Error('Missing or incorrect header'); + const desc = m[1].length, body = 1 + m[2].length + m[3].length, asc = m[4].length; + const h = desc + body + asc; + let width = m[2] == '*' ? null : +m[2]; + let c = null, o = 0; + lines.forEach((line, l) => { + if (m = /^(<*)(=)([*\d]*)(=*)(>*)$/.exec(line) || /^(<*)(-)(.)(-*)(>*)$/.exec(line)) { + const h = m[2] == '='; + if (m[1].length > desc || h && m[1].length != desc) + throw new Error('Invalid descender height at ' + l); + if (m[2].length + m[3].length + m[4].length != body) + throw new Error('Invalid body height at ' + l); + if (m[5].length > asc || h && m[5].length != asc) + throw new Error('Invalid ascender height at ' + l); + if (c != null) { + lengths[c] = l - o; + if (width !== null && width !== lengths[c]) + throw new Error( + `Character has width ${lengths[c]} != ${width} at ${offsets[c]}` + ); + c = null + } + if (!h) { + c = m[3].charCodeAt(0); + if (c < min) min = c; + if (c > max) max = c; + o = l + 1; + offsets[c] = l; + adjustments[c] = m[1].length + } + } + }); + const xoffs = Uint8Array(lines.length); + const ypos = Uint16Array(lines.length); + ypos.fill(0xffff); + const w0 = lengths[min]; + let widths = ''; + for (c = min, o = 0; c <= max; c++) { + for (i = 0, j = offsets[c]; i < lengths[c]; i++) { + xoffs[j] = asc + body + adjustments[c] - 1; + ypos[j++] = o++; + } + widths += String.fromCharCode(lengths[c]); + } + const raster = Graphics.createArrayBuffer(h, o, 1, {msb: true}); + const writer = Graphics.createCallback( + image.width, image.height, 1, + (x, y, col) => raster.setPixel(xoffs[y] - x, ypos[y], col) + ); + writer.drawImage(image); + if (width === null) width = `dec(${enc(widths)})`; + const x = `const ${name}F = [ + dec( + ${enc(raster.buffer)} + ), ${min}, ${width}, ${h} +];`; + return x; +}; + +res = ` +const heatshrink = require('heatshrink'); +const dec = x => E.toString(heatshrink.decompress(atob(x))); +`; + +res += prepFont('romanParts', ` +<=*============== +-a-------------- +x x +xx xx +-b-------------- +xxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxx +-c-------------- +xx xx +x x +-d-------------- +xx xx +xx xx +xx xx +xxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxx +-e-------------- +xx xx +x xxxx +<-f-------------- + xxxxxxxx + xxxxxxxxxxx + xxxxxxx xx + xxxxxx x +xxxxx + xxxxxx x + xxxxxxx xx + xxxxxxxxxxx + xxxxxxxx +-g-------------- + xxxx + xx + x +-h-------------- + x + xx + xxxx +-i-------------- +x xxxx +xx xx +-j-------------- +xx xx +xxx xxx +xxxx xxxx +xxxxxx xxxxxx +xx xxxx xxxx xx +x xxxxxx x + xxxx +x xxxxxx x +xx xxxx xxxx xx +xxxxxx xxxxxx +xxxx xxxx +xxx xxx +xx xx +-k-------------- +x x +<-l-------------- + xx x + xxxxxx xx + xxxx xxxx xxx + xxxx xx xxxx x +xxx xx + xxxx xx xxxx x + xxxx xxxx xxx + xxxxxx xx + xx x +-m-------------- +x xx x +xx xxxx xx +xxx xxxxxx xxx +x xxxx xx xxxx x + xx xx +x xxxx xx xxxx x +xxx xxxxxx xxx +xx xxxx xx +x xx x +-n-------------- + xxxxxxxx + xxxxxxxxxxxx + xxxx xxxx +xxxx xxxx +xxx xxx +xx xxxx xx +xx xxxx xx +xxx xxx +xxxx xxxx + xxxx xxxx + xxxxxxxxxxxx + xxxxxxxx +<=*============== +`); + +res += prepFont('font', ` +<<<<=*======>>>> +- ------ + +-.------ +xx +xx +-0------>>>> + xxxxxxxx + xxxxxxxxxx +xxx xxx +xx xx +xx xx +xxx xxx + xxxxxxxxxx + xxxxxxxx + +-1------>>>> +xx x +xx xx +xxxxxxxxxxxx +xxxxxxxxxxxx +xx +xx + +-2------>>>> +x x +xx xx +xxx xxx +xxxx xx +xxxxx xx +xx xxx xxx +xx xxxxxxx +xx xxxxx + +-3------>>>> + x xx + xx x xx +xxx xx xx +xx xxx xx +xx xxxxxx +xxx xxx xxx + xxxxxx xx + xxx x + +-4------>>>> + x + xx + xxxx + xxxxxxxxx +xxxxx xxxxx +xxxxx + xx + xx + +-5------>>>> + x xxxxxx + xx xxxxxx +xxx xx xx +xx xx xx +xx xx xx +xxx xxx xx + xxxxxx xx + xxxx + +-6------>>>> + xxxx + xxxxxxx +xxx xxxxx +xx xxxxx +xx xx xxx +xxx xxx xx + xxxxxx x + xxxx + +-7------>>>> + xx + xx +xxxx xx +xxxxxx xx + xxxx xx + xxxxxx + xxxx + x + +-8------>>>> + xxx xxx + xxxxxxxxxx +xxx xxxx xxx +xx xx xx +xx xx xx +xxx xxxx xxx + xxxxxxxxxx + xxx xxx + +-9------>>>> + xxxx +x xxxxxx +xx xxx xxx +xxx xx xx + xxxxx xx + xxxxx xxx + xxxxxxx + xxx + +-A------>>>> +xx +xxxxx + xxxxxxx + xxxxxxx + xx xxxx + xxxxxxx + xxxxxxx +xxxxx +xx + +-D------>>>> +xx xx +xxxxxxxxxxxx +xxxxxxxxxxxx +xx xx +xx xx +xxx xxx + xxxxxxxxxx + xxxxxxxx + +-F------>>>> +xxxxxxxxxxxx +xxxxxxxxxxxx + xx xx + xx xx + xx xx + xx +-I------>>>> +xxxxxxxxxxxx +xxxxxxxxxxxx + +-J------>>>> + xx + xxx xx +xxx xx +xx xx +xxx xx + xxxxxxxxxxx + xxxxxxxxxx + xx +-M------>>>> +xxxxxxxxxxxx +xxxxxxxxxxx + xxx + xxxx + xxxx + xxx +xxxxxxxxxxx +xxxxxxxxxxxx + +-N------>>>> +xxxxxxxxxxxx +xxxxxxxxxxx + xxx + xxx + xxx + xxx + xxxxxxxxxxx +xxxxxxxxxxxx + +-O------>>>> + xxxxxxxx + xxxxxxxxxx +xxx xxx +xx xx +xx xx +xxx xxx + xxxxxxxxxx + xxxxxxxx + +-S------>>>> + x xxx + xx xxxxx +xxx xx xxx +xx xx xx +xx xx xx +xxx xx xxx + xxxxx xx + xxx x + +-T------>>>> + xx + xx + xx +xxxxxxxxxxxx +xxxxxxxxxxxx + xx + xx + xx +-V------>>>> + xxx + xxxxxx + xxxxx +xxxxx + xxxxx + xxxxxx + xxx + +-W------>>>> + xxxx + xxxxxxxx +xxxxxxxx + xxxx + xxxx + xxxx +xxxxxxxx + xxxxxxxx + xxxx +-X------>>>> +xx xx +xxx xxx + xxx xxx + xxxx + xxxx + xxx xxx +xxx xxx +xx xx + +-a------ + xxx +xxxxx x +xx xx xx +xx xx xx +xx xx xx + xxxxxx +xxxxxx + +-b------>>>> +xxxxxxxxxxxx + xxxxxxxxxxx +xx xx +xx xx +xxx xxx + xxxxxx + xxxx + +-c------ + xxxx + xxxxxx +xxx xxx +xx xx +xx xx + xx xx + x x + +-d------>>>> + xxxx + xxxxxx +xxx xxx +xx xx +xx xx + xxxxxxxxxxx +xxxxxxxxxxxx + +-e------ + xxxx + xxxxxx +xx xx xx +xx xx xx +xx xx xx + x xxxx + xxx + +<<<<-g------ + x xxxx + xx xxxxxx +xx xxx xxx +xx xx xx +xxx xx xxx + xxxxxxxxxx + xxxxxxxxx + +-h------>>>> +xxxxxxxxxxxx +xxxxxxxxxxxx + xx + xx + xxx +xxxxxxx +xxxxxx + +-i------>>>> +xxxxxxxx xx +xxxxxxxx xx + +-l------>>>> +xxxxxxxxxxxx +xxxxxxxxxxxx + +-m------ +xxxxxxxx +xxxxxxx + xxx + xxx +xxxxxxx +xxxxxxx + xxx + xxx +xxxxxxx +xxxxxx + +-n------ +xxxxxxxx +xxxxxxx + xxx + xx + xxx +xxxxxxx +xxxxxx + +-o------ + xxxx + xxxxxx +xxx xxx +xx xx +xxx xxx + xxxxxx + xxxx + +<<<<-p------ +xxxxxxxxxxxx +xxxxxxxxxxx + xx xx + xx xx + xxx xxx + xxxxxx + xxxx + +-r------ +xxxxxxxx +xxxxxxx + xxx + xx + xx + xx + +-s------ + x xxx +xx xxxxx +xx xx xx +xx xx xx +xxxxx xx + xxx x + +-t------>>>> + xx + xxxxxxxxx + xxxxxxxxxx +xxx xx +xx xx +xx xx + xx + +-u------ + xxxxxx + xxxxxxx +xxx +xx +xxx + xxxxxxx +xxxxxxxx + +-v------ + xx + xxxx + xxxx +xxxx + xxxx + xxxx + xx + +<<<<-y------ + x xxxxxx + xx xxxxxxx +xx xxx +xx xx +xxx xxx + xxxxxxxxxxx + xxxxxxxxx + +<<<<=*======>>>> +`); + +res += prepBitmap('lock', ` + xxxxxx + xxxxxxxx + xxx xxx + xxx xxx + xxx xxx + xxx xxx + xxx xxx + xxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxx + xxx xxx + xxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxx + xxx xxx + xxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxx + xxx xxx + xxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxx +`); + +res += prepBitmap('battery', ` + xxxx + xxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxx +`); + +res += prepBitmap('charge', ` + x + xx + xx + xxx + xxx + xxxxxxxxx + xxxxxxxxx + xxx + xxx + xx + xx + x +`); + +res += prepBitmap('GPS', ` + x + x x + x x + x x + x x xxxx + x xxxxx + xxxxxx + xxxxx + x xxx x + x x x x x + x x x x x + x x xx x x + x x x x + x xxx x + x + xxx +`); + +res += prepBitmap('HRM', ` + xxxx xxxx + xxxxxx xxxxxx + xx xxxx xxx xxx +xxx xxxxxxxx xxxx +xxx xxxxxxxx xxxx +xxx xxxxxxxx xxxx +xx xxxxxxx xxxx +xx xx xxxx xx x + xx x x x + xx xxxxxxxx xxx + xxxxxxxxxxxxx + xxxxxxxxxxx + xxxxxxxxx + xxxxxxx + xxxxx + xxx + x +`); + +res += prepBitmap('compass', ` + xxxxx + xxxxxxxxx + xxx x xxx + xx x xx + xx x xx + xx xxx xx +xx xxx xx +xx xxx xx +xx xxx xx +xx xx xx xx +xx xx xx xx + xx x x xx + xx x x xx + xx xx + xxx xxx + xxxxxxxxx + xxxxx +`); + +print(res); diff --git a/apps/poweroff/ChangeLog b/apps/poweroff/ChangeLog new file mode 100644 index 000000000..1a3bc1757 --- /dev/null +++ b/apps/poweroff/ChangeLog @@ -0,0 +1 @@ +0.01: New app! diff --git a/apps/poweroff/README.md b/apps/poweroff/README.md new file mode 100644 index 000000000..d9d7a8dbc --- /dev/null +++ b/apps/poweroff/README.md @@ -0,0 +1,13 @@ +# Poweroff + +Simple app to power off your Bangle.js + +## Usage + +Start the app to shutdown your Bangle.js watch after a short delay. + +## Creator +Marco ([myxor](https://github.com/myxor)) + +## Icon +Icon taken from [materialdesignicons](https://materialdesignicons.com) under Apache License 2.0 diff --git a/apps/poweroff/app-icon.js b/apps/poweroff/app-icon.js new file mode 100644 index 000000000..81a2527b5 --- /dev/null +++ b/apps/poweroff/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwgIolgfAAqkCAoNAAoMHAoPgAoMPwfB+AFBj/D4f4AoM/AoP8AoQRBAoV/DoP+AoN+AoN+AoP8AoM/Ao/4AoMfAsBQCAo5QDAo5KCAQV/AQJZCn+AgIUD4EDAoUf+EPFgUP///RIUHAoKVCgYFBVAYFBWYc/EQQAvA")) diff --git a/apps/poweroff/app.js b/apps/poweroff/app.js new file mode 100644 index 000000000..303e78d03 --- /dev/null +++ b/apps/poweroff/app.js @@ -0,0 +1,13 @@ +g.clear(); + +g.setFont("6x8",2).setFontAlign(0,0); + var x = g.getWidth()/2; + var y = g.getHeight()/2 + 10; + g.drawString("Powering off...", x, y); + +setTimeout(function() { + if (Bangle.softOff) Bangle.softOff(); else Bangle.off(); +}, 1000); + +Bangle.loadWidgets(); +Bangle.drawWidgets(); diff --git a/apps/poweroff/app.png b/apps/poweroff/app.png new file mode 100644 index 0000000000000000000000000000000000000000..aa186ab200fbadea33ae991b14989b237d77095c GIT binary patch literal 620 zcmV-y0+aoTP)e5S%GoGAPkIq9n527gU-|qvIX6&l{geD0s)px++5(U z1uXP>Ng(XYL64M_?Jm{tIxg0{aH@Z}IHkPQ$Ngz%-0t`!NFanV4_u0Pb7|9*NcEN{kjipP*IBMBr<1oYrw8y;xkwHO>qY$wUt2 z)B?$<2LZ1_d$0)8)vE>-f-MI!IpJWRoaF&g$@f;FE8wmw%E5wUOJ0OUD?JW0BLRo` z2hj1R?QOTD(^}uO-2y;)fQYCKghRN0PD5d$v*$ z+vGq(az#$CF=Kfg5FE~#P6y73`)2j!Ghq21*xc7gSXHES&#Q*iHP5pP39ouUt6gFi zW9ns=Y*{d)PSFA8gc(>Un(cVcfa^UaIdKGrh{rZnQ_Hg8Aut+0dZMP+=|q)0!`{Ma z9Q7L7lZg?SRrjh{V9{z-r$`(u_2N}Yp|JNJh;bz?S0_PFR5cp_0000 load(), "New Alarm": () => showEditAlarmMenu(-1), "New Timer": () => showEditTimerMenu(-1), }; @@ -54,9 +55,7 @@ function showMainMenu() { else showEditAlarmMenu(idx); }; }); - menu["< Back"] = () => { - load(); - }; + menu if (WIDGETS["qalarm"]) WIDGETS["qalarm"].reload(); return E.showMenu(menu); @@ -86,6 +85,7 @@ function showEditAlarmMenu(alarmIndex, alarm) { const menu = { "": { title: alarm.msg ? alarm.msg : "Alarms" }, + "< Back" : showMainMenu, Hours: { value: hrs, onchange: function (v) { @@ -162,7 +162,6 @@ function showEditAlarmMenu(alarmIndex, alarm) { showMainMenu(); }; } - menu["< Back"] = showMainMenu; return E.showMenu(menu); } @@ -206,6 +205,7 @@ function showEditTimerMenu(timerIndex) { const menu = { "": { title: "Timer" }, + "< Back" : showMainMenu, Hours: { value: hrs, onchange: function (v) { @@ -264,7 +264,7 @@ function showEditTimerMenu(timerIndex) { showMainMenu(); }; } - menu["< Back"] = showMainMenu; + return E.showMenu(menu); } diff --git a/apps/qalarm/boot.js b/apps/qalarm/boot.js index 6713ad9e1..5e9560ee2 100644 --- a/apps/qalarm/boot.js +++ b/apps/qalarm/boot.js @@ -1 +1 @@ -eval(require("Storage").read("qalarmcheck.js")); +(function() { eval(require("Storage").read("qalarmcheck.js")); })() diff --git a/apps/qalarm/qalarmcheck.js b/apps/qalarm/qalarmcheck.js index 9a3f10d5e..8dac43800 100644 --- a/apps/qalarm/qalarmcheck.js +++ b/apps/qalarm/qalarmcheck.js @@ -4,7 +4,10 @@ print("Checking for alarms..."); -clearInterval(); +if (Bangle.QALARM) { + clearInterval(Bangle.QALARM); + Bangle.QALARM = undefined; +} function getCurrentTime() { let time = new Date(); @@ -29,13 +32,13 @@ let nextAlarms = (require("Storage").readJSON("qalarm.json", 1) || []) .sort((a, b) => a.t - b.t); if (nextAlarms[0]) { - setTimeout(() => { + Bangle.QALARM = setTimeout(() => { eval(require("Storage").read("qalarmcheck.js")); load("qalarm.js"); }, nextAlarms[0].t - t); } else { // No alarms found: will re-check at midnight - setTimeout(() => { + Bangle.QALARM = setTimeout(() => { eval(require("Storage").read("qalarmcheck.js")); }, 86400000 - t); } diff --git a/apps/qmsched/ChangeLog b/apps/qmsched/ChangeLog index 27b5421e8..0b8d67e76 100644 --- a/apps/qmsched/ChangeLog +++ b/apps/qmsched/ChangeLog @@ -1,3 +1,4 @@ 0.01: First version 0.02: Add widget 0.03: Bangle.js 2 support +0.04: Move Quiet Mode LCD options from global settings to this app diff --git a/apps/qmsched/README.md b/apps/qmsched/README.md index 033014789..535ae56e4 100644 --- a/apps/qmsched/README.md +++ b/apps/qmsched/README.md @@ -1,9 +1,14 @@ # Quiet Mode Schedule and Widget -Automatically turn Quiet Mode on or off at set times, and display a widget when enabled. +Automatically turn Quiet Mode on or off at set times, and display a widget when Quiet Mode is active. -### Edit Schedule: -![Main menu](screenshot_main.png) ![Edit Schedule menu](screenshot_edit.png) +| Bangle.js 1 | Bangle.js 2 | +|:---------------------------------------------:|:---------------------------------------------:| +| (widget: Silent mode) | (widget: Alarms mode) | +| ![Main menu](screenshot_b1_main.png) | ![Main menu](screenshot_b2_main.png) | +| ![Edit Schedule menu](screenshot_b1_edit.png) | ![Edit Schedule menu](screenshot_b2_edit.png) | +| ![LCD Options menu](screenshot_b1_lcd.png) | ![LCD Options menu](screenshot_b2_lcd.png) | -### Widget: -![Widget, quiet mode: silent](screenshot_widget_silent.png) ![Widget, quiet mode: alarms](screenshot_widget_alarms.png) +### LCD Settings: + +If set, these override the default LCD settings while Quiet Mode is active. \ No newline at end of file diff --git a/apps/qmsched/app.js b/apps/qmsched/app.js index c6377d4ba..7be3339fb 100644 --- a/apps/qmsched/app.js +++ b/apps/qmsched/app.js @@ -2,27 +2,74 @@ Bangle.loadWidgets(); Bangle.drawWidgets(); const modeNames = ["Off", "Alarms", "Silent"]; -let scheds = require("Storage").readJSON("qmsched.json", 1); -/*scheds = [ - { hr : 6.5, // hours + minutes/60 - mode : 1, // quiet mode (0/1/2) - } -];*/ -if (!scheds) { - // set default schedule on first load of app - scheds = [ - {"hr": 8, "mode": 0}, - {"hr": 22, "mode": 1}, - ]; - require("Storage").writeJSON("qmsched.json", scheds); + +// load global brightness setting +let bSettings = require('Storage').readJSON('setting.json',true)||{}; +let current = 0|bSettings.quiet; +delete bSettings; // we don't need any other global settings + + + + + + +/** + * Save settings to qmsched.json + */ +function save() { + require('Storage').writeJSON('qmsched.json', settings); } -if (scheds.length && scheds.some(s => "last" in s)) { - // cleanup: remove "last" values (used by old versions) - scheds = scheds.map(s => { - delete s.last; - return s; - }); - require("Storage").writeJSON("qmsched.json", scheds); +function get(key, def) { + return (key in settings) ? settings[key] : def; +} +function set(key, val) { + settings[key] = val; save(); + scheds = settings.scheds; options = settings.options; // update references +} +function unset(key) { + delete settings[key]; save(); +} + +let settings, + scheds, options; // references for convenience +/** + * Load settings file, check if we need to migrate old setting formats to new + */ +function loadSettings() { + settings = require('Storage').readJSON("qmsched.json", true) || {}; + + if (Array.isArray(settings)) { + // migrate old file (plain array of schedules, qmOptions stored in global settings file) + require("Storage").erase("qmsched.json"); // need to erase old file, or Things Break, somehow... + let bOptions = require('Storage').readJSON('setting.json',true)||{}; + settings = { + options: bOptions.qmOptions || {}, + scheds: settings, + }; + // store new format + save(); + // and clean up qmOptions from global settings file + delete bOptions.qmOptions; + require('Storage').writeJSON('setting.json',bOptions); + } + // apply defaults + settings = Object.assign({ + options: {}, // Bangle options to override during quiet mode, default = none + scheds: [ + // default schedule: + {"hr": 8, "mode": 0}, + {"hr": 22, "mode": 1}, + ], + }, settings); + scheds = settings.scheds; options = settings.options; + + if (scheds.length && scheds.some(s => "last" in s)) { + // cleanup: remove "last" values (used by older versions) + set('scheds', scheds.map(s => { + delete s.last; + return s; + })); + } } function formatTime(t) { @@ -32,29 +79,35 @@ function formatTime(t) { } function showMainMenu() { - let menu = {"": {"title": "Quiet Mode"}}; + let _m, menu = { + "": {"title": "Quiet Mode"}, + "< Exit": () => load() + }; // "Current Mode""Silent" won't fit on Bangle.js 2 - menu["Current" + ((process.env.HWVERSION===2)?"":" Mode")]= { - value: (require("Storage").readJSON("setting.json", 1) || {}).quiet|0, + menu["Current"+((process.env.HWVERSION===2) ? "" : " Mode")] = { + value: current, format: v => modeNames[v], onchange: function(v) { if (v<0) {v = 2;} if (v>2) {v = 0;} require("qmsched").setMode(v); + current = v; this.value = v; }, }; scheds.sort((a, b) => (a.hr-b.hr)); scheds.forEach((sched, idx) => { - const name = modeNames[sched.mode]; - const txt = formatTime(sched.hr)+" ".repeat(14-name.length)+name; - menu[txt] = function() { - showEditMenu(idx); + menu[formatTime(sched.hr)] = { + format: () => modeNames[sched.mode], // abuse format to right-align text + onchange: function() { + _m.draw = ()=> {}; // prevent redraw of main menu over edit menu + showEditMenu(idx); + } }; }); menu["Add Schedule"] = () => showEditMenu(-1); - menu["< Back"] = () => {load();}; - return E.showMenu(menu); + menu["LCD Settings"] = () => showOptionsMenu(); + _m = E.showMenu(menu); } function showEditMenu(index) { @@ -69,6 +122,7 @@ function showEditMenu(index) { } const menu = { "": {"title": (isNew ? "Add" : "Edit")+" Schedule"}, + "< Cancel": () => showMainMenu(), "Hours": { value: hrs, onchange: function(v) { @@ -110,18 +164,88 @@ function showEditMenu(index) { } else { scheds[index] = getSched(); } - require("Storage").writeJSON("qmsched.json", scheds); + save(); showMainMenu(); }; if (!isNew) { menu["> Delete"] = function() { scheds.splice(index, 1); - require("Storage").writeJSON("qmsched.json", scheds); + save(); showMainMenu(); }; } - menu["< Cancel"] = showMainMenu; return E.showMenu(menu); } +function showOptionsMenu() { + const disabledFormat = v => v ? "Off" : "-"; + function toggle(option) { + // we disable wakeOn* events by setting them to `false` in options + // not disabled = not present in options at all + if (option in options) { + delete options[option]; + } else { + options[option] = false; + } + save(); + } + let resetTimeout; + const oMenu = { + "": {"title": "LCD Settings"}, + "< Back": () => showMainMenu(), + "LCD Brightness": { + value: get("brightness", 0), + min: 0, // 0 = use default + max: 1, + step: 0.1, + format: v => (v>0.05) ? v : "-", + onchange: v => { + if (v>0.05) { // prevent v=0.000000000000001 bugs + set("brightness", v); + Bangle.setLCDBrightness(v); // show result, even if not quiet right now + // restore brightness after half a second + if (resetTimeout) clearTimeout(resetTimeout); + resetTimeout = setTimeout(() => { + resetTimeout = undefined; + require("qmsched").setMode(current); + }, 500); + } else { + unset("brightness"); + require("qmsched").setMode(current); + } + }, + }, + "LCD Timeout": { + value: get("timeout", 0), + min: 0, // 0 = use default (no constant on for quiet mode) + max: 60, + step: 5, + format: v => v>1 ? v : "-", + onchange: v => { + if (v>1) set("timeout", v); + else unset("timeout"); + }, + }, + // we disable wakeOn* events by overwriting them as false in options + // not disabled = not present in options at all + "Wake on FaceUp": { + value: "wakeOnFaceUp" in options, + format: disabledFormat, + onchange: () => {toggle("wakeOnFaceUp");}, + }, + "Wake on Touch": { + value: "wakeOnTouch" in options, + format: disabledFormat, + onchange: () => {toggle("wakeOnTouch");}, + }, + "Wake on Twist": { + value: "wakeOnTwist" in options, + format: disabledFormat, + onchange: () => {toggle("wakeOnTwist");}, + }, + }; + return E.showMenu(oMenu); +} + +loadSettings(); showMainMenu(); diff --git a/apps/qmsched/boot.js b/apps/qmsched/boot.js index 2712cab30..c3bc49b58 100644 --- a/apps/qmsched/boot.js +++ b/apps/qmsched/boot.js @@ -1,7 +1,13 @@ // apply Quiet Mode schedules (function qm() { - let scheds = require("Storage").readJSON("qmsched.json", 1) || []; - if (!scheds.length) { return;} + let bSettings = require('Storage').readJSON('setting.json',true)||{}; + const curr = 0|bSettings.quiet; + delete bSettings; + if (curr) require("qmsched").applyOptions(curr); // no need to re-apply default options + + let settings = require('Storage').readJSON('qmsched.json',true)||{}; + let scheds = settings.scheds||[]; + if (!scheds.length) {return;} const now = new Date(), hr = now.getHours()+(now.getMinutes()/60)+(now.getSeconds()/3600); // current (decimal) hour scheds.sort((a, b) => a.hr-b.hr); diff --git a/apps/qmsched/lib.js b/apps/qmsched/lib.js index a3d36ed34..9b307769a 100644 --- a/apps/qmsched/lib.js +++ b/apps/qmsched/lib.js @@ -1,18 +1,23 @@ +/** + * Apply LCD options for given mode + * @param {int} mode Quiet Mode + */ +exports.applyOptions = function(mode) { + const s = require("Storage").readJSON(mode ? "qmsched.json" : "setting.json", 1) || {}; + const get = (k, d) => k in s ? s[k] : d; + Bangle.setOptions(get("options", {})); + Bangle.setLCDBrightness(get("brightness", 1)); + Bangle.setLCDTimeout(get("timeout", 10)); +}; /** * Set new Quiet Mode and apply Bangle options * @param {int} mode Quiet Mode */ exports.setMode = function(mode) { - let s = require("Storage").readJSON("setting.json", 1) || {}; - s.quiet = mode; - require("Storage").writeJSON("setting.json", s); - if (s.options) Bangle.setOptions(s.options); - if (mode && s.qmOptions) Bangle.setOptions(s.qmOptions); - if (mode && s.qmBrightness) { - if (s.qmBrightness!=1) Bangle.setLCDBrightness(s.qmBrightness); - } else { - if (s.brightness && s.brightness!=1) Bangle.setLCDBrightness(s.brightness); - } - if (mode && s.qmTimeout) Bangle.setLCDTimeout(s.qmTimeout); - if (typeof (WIDGETS)!=="undefined" && "qmsched" in WIDGETS) {WIDGETS["qmsched"].draw();} -}; \ No newline at end of file + require("Storage").writeJSON("setting.json", Object.assign( + require("Storage").readJSON("setting.json", 1) || {}, + {quiet:mode} + )); + exports.applyOptions(mode); + if (WIDGETS && "qmsched" in WIDGETS) WIDGETS["qmsched"].draw(); +}; diff --git a/apps/qmsched/screenshot_b1_edit.png b/apps/qmsched/screenshot_b1_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..ec82e92e6d2de47b89b0f76f18bd1fa58f7a14a6 GIT binary patch literal 3610 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 literal 0 HcmV?d00001 diff --git a/apps/qmsched/screenshot_b1_lcd.png b/apps/qmsched/screenshot_b1_lcd.png new file mode 100644 index 0000000000000000000000000000000000000000..16f9356b89928349ae9a2c4af41dad3cb0c981b2 GIT binary patch literal 4167 zcmeHL`#;m||KI!F+(zY)MC6o;9LlMvIZhe+Acr+kj-e(Yu{p%1kA!g7P1GG7bg~&M zImDJXm6g-#&gPU^+)`#nvW+=>c7Okj@8|Qwb-f;s*W-11JRi^N^}4Pr@3=R5v!a$F z38%fH_#1m*?K~SECo!FRWaF!IeCC%An&JE^U-E`xzI_3nFA{3 zNcr~kTYp?Fi?IEk*Ivv9+e9NpZunu5C*oYBwP*s8wl*wi!`7afyd-le%ra= zyJdXTf3Iq{B8VW!C1;@SUxO|JXnc6e*h59A=Yhfu3JOs*>SV(L-H1C)Y zo?@At2DYlr{m8R+L2TXP4CPo@%8`cPDs$(@C0Cpc0Qf0{n!if97YtzSaU2|5U0j>} zIw>sp@JG{nw9VnZty?R4;3~B3Y|F!GIg^57q8KBetD4aGF=$4h)G&lyeepwE!0i4o z;)KlV9FWDoXOG@U8GYquzBR-pO*(K(kMjcVZ5oCtk4vv>dlBj7++UO&{$p`uyuQ*d zZ8d%4abc~X5N)2oO%1#U1THiUWFjOB;mTm9nJ>kHx>{qTR5wT6_$5THypaC_ywF~) z6! ziR#=LAQ*3xToQms@lk5(*;-R^Vi6V}&0nFShGL!I*NI~agpH0S&EJd2wVOCdQAm#F zKN%Z!zXm)AYBxo42qjLF%ye;6r6xUvkv&sk_i%o15&9e&LZ&Jf67__g4!}ttMQ+ZF zadzB<{avE^S^iYTr_8Q4T$AHlKfHZ|A!aG>q95odz@f1$L=6hNG@OnEFU&$!LO)Cg z3ewvjcLqPr*ck8*uL)4{K4vO`T)EjD^+hZYU=CScgaPoGE6Y=BY3ozksCa~P*e+5G zOD7GVmcqMn8#)NT34eXhy)sY25~NUdBx}nqzb4~vn!PcwxDGMvs_k37U+#2+-rOXH zBaSH0?bU_Rg4S!TVC``AK_sKPhpRyOrtY*6B{hg17I?x!4C{1r45 z&kPoJMQ307xAP%@sYJhAx&}3(ml8EM)ht_X3~T&xoZraL1{ww;m~Cl zeIFQr-%d7^KKsMnu{y9>i9{sY+TobLP}d#b{w%5&VHf-b+@;TYU?zx=$k)fkU_gvu z?TiHohJXq{@o*l)|GpEv_81HZwH5cQz~QIB*YgECib~S6ynJsL4Hp#o&wtD`16OwD zT8FYb@??r6@3L8>(VXDVKvA4D&YPpBS1&5Kcz9X30iC0%qcNGmNvxXoXHRxoOQmcC zAu-BLrfwp%v?gU80w^8N*YZ@Nn0L-aq2GPpb9^<`m)})=f+u2~5q*nY?M5(~YZ70s zF>)MQ+8T6gR@0Irsq&L(_G7L1IJ^)tvDjU1ZV|;i49MIgy~-Oxkxsk+RR_6=vGc(i zb`2j><>IOGGG4DNq1(4w)IlW_4G0CoH`}#5ZmT#vh6OD*mgkGkt`y zO6_$_7a@Dfxbbl^$_CZ+=^T3#B@{ zxU)(T0hpp*t2y@vy&_WO$co*E4WgJ@KBa9bIl`faeZ~}c&9nUPeQmr_gHD*^gwE8Ughl*{~%@GyPQ114{PnqU{r-FXnf! zr5Xputbnl#^un!uYx_4;v{^@7o{7_x=7oIjJ;N*TIJ? zYcKrOij(Y$w|^2(uBy(N{gt%Z?Bw<{qz|pPo9$YHQAU4z;+yUY-T9=NuFo@!HdnC* zm7I}~N)r)d5a=`&kn(V*CWURAm}azD$g~#N_hTI~SqIv5*L7L-p*jzfFO?)BB-Z{X z!VP#;C87i4W*P|vy{(aFo||S3N%|FBm#`C`+6bqCJzhUjH^0i(SMn_zG~k zC)cO1^~o#~W<)=A27^A56RH9kDYByU*tOqoEEW^hza};5ttF#k0r7IfdR^w@zf1y? z|NY{1R_rR_SZ~#69(9#D#e;{t zvMza0R>-1H^LwSf20;s!X=^`|c;{h5^Ckc~9u37>6HWrbMz!!Su}#CpPsVVe3Oy}b z#Nz=O{dWARSDd9Zr~N19#g4YZUeoT+LCRGVx~FYN?B5`14f^!^bh$HLfg>#K^=H}s z87c`jZyG5Di__oLA2nrNx+R-3!Io6hs$}|bDm9FuhRuH7IkwN{gyW~2w}*Y=R~Uqv z6>+C^*M}~b-T@p_>*;hZQ5zKk5Y+OCS?lT_&3rI(oE+Ph_8o2z$1r>G8M&yB(^~0y z-{f};D4OMkteuc{&34)@XTB(F>xy~lpp~nYOLQ7zVe+1Dd!%6ut_>QnW#{^#3Zp4q zF5YUH`guU(P!002;(HS!*)Sj9fte33jxcdlXMLA@A3HYEhE;ah_bKOOVqd3DZPCvT@*&@o+J3l!|fF=F}(sI4pV5-&SjA(DLZAD z+hE?+4`J!UnQ^BudRGLcte{sjEZJ?$}(=L}~@?Lz9?t?L_;@ZqK2G zMyxn~>T5&%q_dMY@PG3^unko}jO)0=HZ==doO^7JNXGi(k$i$&Uuz^mYPwE#;O|e* zKE9?(>*AqX|6)e(mTr;*>NnJH7_s>=eZUK98WF7GA257$>f3HVs&tIOKGBV9cyk7C zfxUI_lBn}(%8@z;cIeVVV@&Gl%l1Nm_S+796Ge7Uc z@_B>h`P=!}2K1rRai@w6K{rSlNyE;0-Y2i(P}lp!((KjC&vn+UTy4TSU3gvaepi~; zTZE(w)A2>wHEc+!M->-(z{*6gYG$^8+j91A9YVm_T`60K%13>dG^1<}b}tl8JLY^7 zZm9EWY~i2(RJeSKjuRo8^B=LiC2_kb+FPW^z3}tYUCR!JD%)s_N$$JD77J?*ekWJF z*UqZTAdjDOdi^}}Gqte0%l{n%>-b)B0|s6&*}0r^mE4iPkAMTt%H>D?;rJYxa0yQVKqaH?sjX(s~GPl5|1TDYyy*HH~d%h`QJ!>AfkDzQK!B| z84RrapUMAUTmV~=l)ozaDW3dc2cPNu07LZ1$T0P@QycCnBZJ>v%`4C;*_&)%Jl#d# zi|6%{ku@fK^M&;JnI(*539rm+zFeL|WYU->a8E>r#(cfeCqy&c+D+f02!`h+o`1fH z^cX%!DjR1Wf?tHIBoygY8PG~#U`W2+l*)TmXXsGo^{bGKZiKy=cU|?-FknhzsRbUB v<$f$lR3hyF;CCmOXAx$ys{UJp@SOhqRy3a1E9Wiy8Gv~l^*&OI3d{ZvM!%xb literal 0 HcmV?d00001 diff --git a/apps/qmsched/screenshot_b1_main.png b/apps/qmsched/screenshot_b1_main.png new file mode 100644 index 0000000000000000000000000000000000000000..803ca69d5607ef9ee696fe121749d49243e70467 GIT binary patch literal 4050 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 literal 0 HcmV?d00001 diff --git a/apps/qmsched/screenshot_b2_lcd.png b/apps/qmsched/screenshot_b2_lcd.png new file mode 100644 index 0000000000000000000000000000000000000000..3f06488c39c6741575b4223b811533352dc5f046 GIT binary patch literal 3352 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 JuhBzC{|gbmTl)Y2 literal 0 HcmV?d00001 diff --git a/apps/qmsched/screenshot_b2_main.png b/apps/qmsched/screenshot_b2_main.png new file mode 100644 index 0000000000000000000000000000000000000000..f6d22a8b8184cce576295a1376f11da88bb96f73 GIT binary patch literal 3226 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 VS$oi8ar|rmS4^yptBvq6{|2w$^<@A6 literal 0 HcmV?d00001 diff --git a/apps/qmsched/screenshot_edit.png b/apps/qmsched/screenshot_edit.png deleted file mode 100644 index 88b7fcad4ac9df533f69b14675f1dcf3d9c25b1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3644 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 diff --git a/apps/qmsched/screenshot_widget_alarms.png b/apps/qmsched/screenshot_widget_alarms.png deleted file mode 100644 index 52dbe246463d0e7d9567d37683f8ecd9535f5414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3965 zcmeHJSyYo*5)MB<5gNNV7v5Mb^lUD3N^$OGX-T2nYy5NZ4Y7fC{uCpeUfw zEo(wX2w_PetwhhCt*`yE&fq!G{XUZLX=Gfjd7^ zFvmYevhTO&1cVp1_G(_b@X&nT;-u13fo`CWqTyPp%rUrVRn5%oM}34M{cdmUKSr$*u4(cp3 zXY_U1+HoM@E!8El#yA&Lw7%=L36*=Hj^Jr$vNVHQvRS>*^QvRba?O&ljRduUMBou@ zOy3MZH>vKUngNd#@SmP1p|@Qp#wE%5@s}-NYW90vH1&VorQNM!H5_xwop#Zo%8}f8 zI3cO9Meh$Ozz={%A9u2XM*qSxmgD~1SzRpnPENn2RIqu(I$~MaWYP}rOZ5Y@7vZ4G>g40DD zea1J%M`EOxJQuE!kzd#W|Jv)nYP}f`re`c~QQ zWKq^pW4-tG)ozpi-h363!p8f7&c}K%{Nu#CcNHuGu{8XwM?=z8<));dXepmOM=EYUa=fRu^_)8)?~0sYPX< zS1vp=Ehi^lx#C5k6>j}8?VlJ1ydGtt4rR za=PG$26)7o0#>ZmaUgcuCk{_)Hn~9mSL2;2Ll9=M!Ow{NL4B_M0DvAP7EE%~WUDhF zpyr?TWSd9}!NK!&D69#%thH1Ow+q=7*(G6Lp6lA4-@-M_XM8tp;i8Ld{=glYW-ljF zkpbkA@4Ks_!qJL1lkRs|&ZFXs3%zxzQLQ;C<-Rd?UqjO&T{6l`;hhczp6%m?aX%J^(sG?WmsoZ z{^S(PHL3*D{7W5ZyNkD21fZVQ@M^tv-Pk`rr`Y=;nj9XJ8ewOE7N!b04MF0q+A+wPpSb#>%PH#~hpulS%c)M$nN7+Ss) z#39~hV_uIKl#G0#Q%Z|#lDp{Qr~%r8DB~zYPg)@6_DBl3pmU6bOW4{#`64R<1H!M??6!t5%MYht2+9C7?Qj#UEzaYocDDy!X{Nt2M zPm`jMNw2(S>Cdm0nE)BRg)BQi{vnb;YrylxhzHbL%I{}!#c#tNABlcT`AsTMBj;0E zjsyzNC|53tycohlBAXJ`u-e~uBB4WFZ}8Q(y5pDv_PeS=K~ zhXmx+TNZ(VqrHSj(-GBQUD!A{{+nS-@}nkN*uH--fAamMQA!c1*>G{TEhzai&X&(N zr4==7z3|$HBlcO+256_Aaog*^)QTuSH-*Wm@|4?bv21JjaG1ZC!??G-JCVZ05JTq&iJ(B zwpaF^yQ;K)=rX~QggFsyv`<*D7!#`@Ef_fagjV6(-M`F=;w`r6%QgMN73nOr(Jp&#%OUEUr z+O{Ts=55{q2`Iu88HWHCKh2SzZQ3e>w%oD`yfc*1wV@TZFgfl}P0pY1S>9j1xlz;Z zkYi`smLSb7GsPSkWEERpzXDQ>x;=S?-C65RgLq5)Sr);kW|4GmPQW-XSEJ4yO|iHhv06-vi8-x)lu zPa8n$)Tb-`dqm@O_bzPXx)D(|SQ%tg35IRC$P8OPsNIH6bO6npNZARDDR-AEMn0~tuy@ICqV2C*-5bzy)g2`X zF#Y)OmeH>trL@ZJEGzUK3g~b(L#oJZ$2>Kb$Zx^Oz3T|47jO!kc!eI?H5=O2xJr>+26U@bo#EmYOlLgGaD`~OXBu|m4&b2R8fwjml9tfNA!*>2m-iYROnui1*q|8`ndo#{}AU&Nqi597n+MCm2O zQ6!6(d>%pyQ5|qIeVp@Ljh%Jw{tIH%#uTUwc|h);)T3^m z@)EY(SK|_S5!NHZ_a)Qo>6bf_ch_=INA?QYCW+B1p#5H>3KC@0q(W`w$VqQTKGn8y zi9xYj;|G`0+CErjY@U6R4*?S7C;ZN=jf12nAS^byDb}~bE`Pah`_#R0GiCyAj~+o} zOw(LV0dXEpgtjOIsBWn6Lob2G3p#O__925ZR0xll*9~Rt|JlAE6gG91<-nU4shW3L zFU4{46vkfOZ-u!Y#d1j|-S2xHb)cvx4_VKTs;;x36X)+2z+8`AOp(oJ<>65J&@6Zx zSMq3_p689Th`SKr#0yR3{$nhg6;xZ+O_m|B#A<$BqzXvv;X-t@5vI2xz@QE~6biynJVvB%!{ E52Ui~sQ>@~ diff --git a/apps/qmsched/screenshot_widget_silent.png b/apps/qmsched/screenshot_widget_silent.png deleted file mode 100644 index 38b133650f7f83ee1ca429652f9177f95af5159d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3890 zcmeHK{Xf&||DU(XOsD4lc5cp&I23hqQ;{KUy0hf2+)iSl426Z6cjbr^tIsLAGdhyk zadX_0>8%u<3M(^9ww04G#w@lk#%G_$^>|&+>v>(*>y>}p z7ykp&7zu;HemLageL^W0{?ibfl)Zc4^uLrs<-!TP7p!i;bQ%WRGJD9|Gk_8?SISBm z-=mGIv{lb|q=6P6INCsO?Q!q@b&J9W8TOT9?xcNeO0)^<*#BmtM#Bx>30`rB_b}}Q zg7I-h_6i+~%7HXAK4BI#f(tDV2n%6=KN7WP7x+SBO{#f^R%+;YAP+(Sd0KM2WUdbW zAFWD{x4X6XT!oA-8T9*Py-JCGn+SYR6W=t*ACK|qYSQ))Hr1I<{0ixS)xbQD%FC^e zM3{OD8PeGwX@p39GoZ~&h;mJ$UqxiuS@pXuqdbKBzfWm`ui+@lB5=bD$V6Bym}Pv= zh0XwZD9Y9=45^fnrBrVsj_S#cdKvV8-H`cI_MVJYt~45ct)Zd=P6IOW^V#mlNQ<}C z8m3;tKYRN#XYNHW;FNJw?&=8Co$Kr$CNiMU@a{`rj-mh@fH-&ckPRY0$3qzZ<)14# zH(`KDlr|FJz)_>#YZC6nkw;KxwLBv1{k%+ha2B=S`v^3$%5FvBLUAA;vXr!H!^~VHR;z#h}$>SMq*=SG@vCncr z^u`75Ub2Yj@)s`oe)wo4<6A6?+eM851dEvrXU0=Shogy02plIQxX!0kcnFi<@5Nw} z{(|BqBd)a{I|92#QuWe{p?G((wbt$VDXx|w=#rod((A+`xxIB#!nfCApP8d2EdEpf z<>FIm-A!Y%0qMx9<-!<}r0Hn)q<{`ZXY1;L1YZv-pSSNq>tpo!dOi+6;V}29j9z0> zka6M^UEm~Om(j|)9&8w{zY{~X&&jNqz(2NgwdAQ)-oofl$ixWY4E{s(cDsspqzc@b zrkJbh|*OOG8o@dE8AQ$4*sl%c#sSA8Du8p&(E)~o4Y0vt;{#1 zib~FlXEb<7S=H;ilX_^;dok7Jepf6znO1XeV_o#MK9u|wd-yu!$?ep)G|Y@`+WpRM z-$+il)>`HH@G)@F2bC%9^r>?RkZLfj@6LwE7bF%yiWU}jm z_WY^Ix!nt6n2UPDEHxMA#*@>>m6KU+xIVnFs!zz62o4Z_-EmPQZt$(!RPmA7cRz@> z6)05d4cq;ZgJ_Azry)$t=YrSFahnxf&H;vv9=npuD@tom}a8V%>W zkKqhjQuT}Y*8=>!$(u9N`)9K_zZr0O*hR-b5@QRJFN$pks@2TGJt_=-HlZyWoh)<- zxy3qI^@VwQW2Uo!CF?w0!eX2!*P^*wu0!>2o)j?K8UjDD*P0}m-;AQ}#5{bJa*Gmg zdS7}C*|oO);_}PO8N&r)81HFV0y}KNuc7GyPVZEjsh_(Dzd9n9nOcQK2S=a$=2sT* zqyv|Lxld}^4`dEPH4TBgs!ix2->1HPur0DZ;WYR)V?GNj?iKxYrmyZ*($65rwf{E!ZNupF`gfDPs6E~V zIMk>G%3!hOLYIOFPN+_Y%FeBwTkZB^i-I)Hh)8jQk8#`wjdSy2lsq>|ccE5)o3ucy z{W>(``^(IV@xqU>c9Bf#xxI0zdH^rue17*r2-%Rgypd$ytV*(eK)uzEynCK@`}rBh zF6H=uQo)7^tvr`+MvoI%l?ihV2}0hpzT(?K!In4l_Js8D3Pl9|l{6x}`*2)jG^0eP zJ^eX5rCix(6j@Bmg#`gS&9Zvdkaf7S`b zOJ;j49?fQ<=37e>)y)*zOqcBW z(B!|3fkAlVQbjLzcFQNb(ay5Y3rj%w75_^%k%+Jp#9}mnGCV|F_y%F}e9s{~U|=<9 z@?&{KB7Z1A@c1&+*7n$dp#_i~)>jQy=*#b?&Q5eRxE`o-Uq3G%`n+{B;}b~V_Llu> zcT%N2+87LdW3DS#L|W@Udx58JIIrxw8M1S!BH@Uc6GOB=rBv!(KJ!o}9iG}Ww0gyp zy)P_NYvYa%i2dt}R2Ypcf&?a-I=UwnCtO{KdiAOJi&U)qPD~cduR1kR%WtW|NBN2_ zE#*ND2_5M@fu2b$It;K&JOoydeqASJI0?C;_$XNfz3_5Sh4P?xtP~yOkd|j_281;N!LXhD&!fN|PtEi@yF{&lf-KJJ!Wge!dPpCF}NJ zhWf~y!l zU&H3DcAgYYC9K5Al?05F>7TjSCq}0`W*5`%&GSX^Zkgn3?9@s$Ks%-C*MpMp#=+}4 zTYgfD5Ojp5FV3Rf$GQy&LH%bfWBX{$%LxpgBxY4sXRa7g1}5G7Cvs0{1KUKf!VXXz zwg_HjNnbDHy$wKLkUQP9@#F*la@w(H!8zx8S|^#4$rr(jiQu_*{t*}$*&jo;L9Af{ zlGzv^8^c0p1Y9jB()um3p^cihgM&#X^*!!qI=12V3Vrvrurla9BF8JIXpxO_>QLh@ASfw>Qg39fWYz&Fj5N_+um}d9PE} z^h0a4AlDd&BQhh(@SrpO9?ijJCA<^{R1H9gtkkF?=Z$h`X3QtEstSz2G0$5h`lu%aVmSsGySQ+z)?|VB?E8B6gHL{s?udI_%ik-6@!V^P< z-%gra;e>kOaIu|BMu$eT+PaOz9B_D1eq&tI%MEb`v6i)xdz~JcM&ajc?Rjyl6=j1# z@xl4*lEQp%RE~!W7=w=}1-07m+n_Cv`;<%cjX_OrP5`Pwo3c+8({S6S$KtpT4AhMJ z9SI}?h}mt2-4MFUEYxfC(dC@`FyLvv_EsPlj%r6aS6c|TRDs)HJ!Y%C z9u^JvZ6yD7@&6l(p(8?N(m(#9Ef3p?NpkR8@hraq0}P&T(}RCfmITLcQBXEN1) {return;} // no alarms // alarms still on: draw alarm icon in bottom-right corner diff --git a/apps/recorder/ChangeLog b/apps/recorder/ChangeLog index 2ea6e9fa8..40240de64 100644 --- a/apps/recorder/ChangeLog +++ b/apps/recorder/ChangeLog @@ -2,3 +2,4 @@ 0.02: Use 'recorder.log..' rather than 'record.log..' Fix interface.html 0.03: Fix theme and maps/graphing if no GPS +0.04: Multiple bugfixes diff --git a/apps/recorder/app.js b/apps/recorder/app.js index d29959e25..fcd8d6031 100644 --- a/apps/recorder/app.js +++ b/apps/recorder/app.js @@ -304,10 +304,10 @@ function plotTrack(info) { g.fillCircle(ox,oy,5); if (info.qOSTM) g.setColor("#000"); else g.setColor(g.theme.fg); - g.drawString(require("locale").distance(dist),120,220); + g.drawString(require("locale").distance(dist),g.getWidth() / 2, g.getHeight() - 20); g.setFont("6x8",2); g.setFontAlign(0,0,3); - g.drawString("Back",230,200); + g.drawString("Back",g.getWidth() - 10, g.getHeight() - 40); setWatch(function() { viewTrack(info.fn, info); }, global.BTN3||BTN1); @@ -360,6 +360,10 @@ function plotGraph(info, style) { var t,dx,dy,d,lt = c[timeIdx]; while(l!==undefined) { ++nl;c=l.split(","); + l = f.readLine(f); + if (c[latIdx] == "") { + continue; + } t = c[timeIdx]; i = Math.round(80*(t - strt)/dur); p = Bangle.project({lat:c[latIdx],lon:c[lonIdx]}); @@ -372,7 +376,6 @@ function plotGraph(info, style) { } lp = p; lt = t; - l = f.readLine(f); } } else throw new Error("Unknown type "+style); var min=100000,max=-100000; @@ -396,13 +399,15 @@ function plotGraph(info, style) { height: g.getHeight()-(24+8), axes : true, gridy : grid, - gridx : 50, + gridx : infn.length / 3, title: title, + miny: min, + maxy: max, xlabel : x=>Math.round(x*dur/(60*infn.length))+" min" // minutes }); g.setFont("6x8",2); g.setFontAlign(0,0,3); - g.drawString("Back",230,200); + g.drawString("Back",g.getWidth() - 10, g.getHeight() - 40); setWatch(function() { viewTrack(info.filename, info); }, global.BTN3||BTN1); diff --git a/apps/sensible/ChangeLog b/apps/sensible/ChangeLog new file mode 100644 index 000000000..ba597a22f --- /dev/null +++ b/apps/sensible/ChangeLog @@ -0,0 +1,2 @@ +0.01: New App! +0.02: Corrected variable initialisation diff --git a/apps/sensible/README.md b/apps/sensible/README.md new file mode 100644 index 000000000..f79b61aea --- /dev/null +++ b/apps/sensible/README.md @@ -0,0 +1,35 @@ +# Sensible + +Collect all the sensor data from the Bangle.js 2, display the live readings in menu pages, and broadcast in Bluetooth Low Energy (BLE) advertising packets to any listening devices in range. + + +## Usage + +The advertising packets will be recognised by [Pareto Anywhere](https://www.reelyactive.com/pareto/anywhere/) open source middleware and any other program which observes the standard packet types. Also convenient for testing individual sensors of the Bangle.js 2 via the menu interface. + + +## Features + +Currently implements: +- Accelerometer +- Barometer +- GPS +- Heart Rate Monitor +- Magnetometer + +in the menu display but NOT YET in Bluetooth Low Energy advertising (which will be implemented in a subsequent version). + + +## Controls + +Browse and control sensors using the standard Espruino menu interface. + + +## Requests + +[Contact reelyActive](https://www.reelyactive.com/contact/) for support/updates. + + +## Creator + +Developed by [jeffyactive](https://github.com/jeffyactive) of [reelyActive](https://www.reelyactive.com) diff --git a/apps/sensible/sensible-icon.js b/apps/sensible/sensible-icon.js new file mode 100644 index 000000000..f904fc7f3 --- /dev/null +++ b/apps/sensible/sensible-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkG/4AG+cilGIxGCkU/B44AGmQUBAAsjCyoYN+QWJAAMvCxsjLQXzG4gYIOIZwG+YLDCw34BRIkFx4JFHQRDElGCJYgOCFw5RCPQwJFGAg4BIoSRIDAQQEG4YLBHgYAGJQIjCJ4RGBDoU4SIqNDwYwDJAQEDFwSRGDAQfBFQgIDFwQtDRoowBAgQDEDYQzC7oACTogrEA4IfF/4WDDAY/Fx4CCEYQbB/oXF74TDCAYGBUoIDDCwowCUoIkBAYSABGwIDCLogADBIKMCAYRODLwRGGJAaMFPwghBnoXJHoJ8DF4Q5DC5HTKogVBgAAFpoXH6oQGAA1dC7/UC5sNC4/dCA0QAwsEC50BC40AC5FQC4sgMB4XFgUwC40FC4/QBwkD+B5HDA6oFh/xSREFqtVbogMEj/yVxkFMwRgEl//Y5sAqhgF///SA4AHghgDgQXBPBAAHrpICh4XBMBoADC4ReBAALxHABUBCwX/bI4AKgYXD+YXRn4XDSKCNDAAZ5QOoZhSLohhESRkBLopJQIo4YOCxYYCJQ0BCxoACmURCoMRkYOI")) \ No newline at end of file diff --git a/apps/sensible/sensible.js b/apps/sensible/sensible.js new file mode 100644 index 000000000..c569ff720 --- /dev/null +++ b/apps/sensible/sensible.js @@ -0,0 +1,162 @@ +/** + * Copyright reelyActive 2021 + * We believe in an open Internet of Things + */ + + +// Non-user-configurable constants +const APP_ID = 'sensible'; + + +// Global variables +let acc, bar, hrm, mag; +let isAccMenu = false; +let isBarMenu = false; +let isGpsMenu = false; +let isHrmMenu = false; +let isMagMenu = false; +let isBarEnabled = true; +let isGpsEnabled = true; +let isHrmEnabled = true; +let isMagEnabled = true; + + +// Menus +let mainMenu = { + "": { "title": "-- SensiBLE --" }, + "Acceleration": function() { E.showMenu(accMenu); isAccMenu = true; }, + "Barometer": function() { E.showMenu(barMenu); isBarMenu = true; }, + "GPS": function() { E.showMenu(gpsMenu); isGpsMenu = true; }, + "Heart Rate": function() { E.showMenu(hrmMenu); isHrmMenu = true; }, + "Magnetometer": function() { E.showMenu(magMenu); isMagMenu = true; } +}; +let accMenu = { + "": { "title" : "- Acceleration -" }, + "State": { value: "On" }, + "x": { value: null }, + "y": { value: null }, + "z": { value: null }, + "<-": function() { E.showMenu(mainMenu); isAccMenu = false; }, +}; +let barMenu = { + "": { "title" : "- Barometer -" }, + "State": { + value: isBarEnabled, + format: v => v ? "On" : "Off", + onchange: v => { isBarEnabled = v; Bangle.setBarometerPower(v, APP_ID); } + }, + "Altitude": { value: null }, + "Press": { value: null }, + "Temp": { value: null }, + "<-": function() { E.showMenu(mainMenu); isBarMenu = false; }, +}; +let gpsMenu = { + "": { "title" : "- GPS -" }, + "State": { + value: isGpsEnabled, + format: v => v ? "On" : "Off", + onchange: v => { isGpsEnabled = v; Bangle.setGPSPower(v, APP_ID); } + }, + "Lat": { value: null }, + "Lon": { value: null }, + "Altitude": { value: null }, + "Satellites": { value: null }, + "HDOP": { value: null }, + "<-": function() { E.showMenu(mainMenu); isGpsMenu = false; }, +}; +let hrmMenu = { + "": { "title" : "- Heart Rate -" }, + "State": { + value: isHrmEnabled, + format: v => v ? "On" : "Off", + onchange: v => { isHrmEnabled = v; Bangle.setHRMPower(v, APP_ID); } + }, + "BPM": { value: null }, + "Confidence": { value: null }, + "<-": function() { E.showMenu(mainMenu); isHrmMenu = false; }, +}; +let magMenu = { + "": { "title" : "- Magnetometer -" }, + "State": { + value: isMagEnabled, + format: v => v ? "On" : "Off", + onchange: v => { isMagEnabled = v; Bangle.setCompassPower(v, APP_ID); } + }, + "x": { value: null }, + "y": { value: null }, + "z": { value: null }, + "Heading": { value: null }, + "<-": function() { E.showMenu(mainMenu); isMagMenu = false; }, +}; + + +// Update acceleration +Bangle.on('accel', function(newAcc) { + acc = newAcc; + + if(isAccMenu) { + accMenu.x.value = acc.x.toFixed(2); + accMenu.y.value = acc.y.toFixed(2); + accMenu.z.value = acc.z.toFixed(2); + E.showMenu(accMenu); + } +}); + +// Update barometer +Bangle.on('pressure', function(newBar) { + bar = newBar; + + if(isBarMenu) { + barMenu.Altitude.value = bar.altitude.toFixed(1) + 'm'; + barMenu.Press.value = bar.pressure.toFixed(1) + 'mbar'; + barMenu.Temp.value = bar.temperature.toFixed(1) + 'C'; + E.showMenu(barMenu); + } +}); + +// Update GPS +Bangle.on('GPS', function(newGps) { + gps = newGps; + + if(isGpsMenu) { + gpsMenu.Lat.value = gps.lat.toFixed(4); + gpsMenu.Lon.value = gps.lon.toFixed(4); + gpsMenu.Altitude.value = gps.alt + 'm'; + gpsMenu.Satellites.value = gps.satellites; + gpsMenu.HDOP.value = (gps.hdop * 5).toFixed(1) + 'm'; + E.showMenu(gpsMenu); + } +}); + +// Update heart rate monitor +Bangle.on('HRM', function(newHrm) { + hrm = newHrm; + + if(isHrmMenu) { + hrmMenu.BPM.value = hrm.bpm; + hrmMenu.Confidence.value = hrm.confidence + '%'; + E.showMenu(hrmMenu); + } +}); + +// Update magnetometer +Bangle.on('mag', function(newMag) { + mag = newMag; + + if(isMagMenu) { + magMenu.x.value = mag.x; + magMenu.y.value = mag.y; + magMenu.z.value = mag.z; + magMenu.Heading.value = mag.heading.toFixed(1); + E.showMenu(magMenu); + } +}); + + +// On start: enable sensors and display main menu +g.clear(); +Bangle.setBarometerPower(isBarEnabled, APP_ID); +Bangle.setGPSPower(isGpsEnabled, APP_ID); +Bangle.setHRMPower(isHrmEnabled, APP_ID); +Bangle.setCompassPower(isMagEnabled, APP_ID); +E.showMenu(mainMenu); \ No newline at end of file diff --git a/apps/sensible/sensible.png b/apps/sensible/sensible.png new file mode 100644 index 0000000000000000000000000000000000000000..d3e3dfbef76d1f4d89f0836f150715a1a796e870 GIT binary patch literal 1716 zcmV;l221&gP);L88V%$8I>Vz!-GZ43L{7;uQ&8ysK#o0edR-0 zk;iMxjUc2NN@yDDaCaJvM}rMJ)x7=Z=f!20r|+*WuD(`xv+1h6x$RyD0vGs+B$iNs zGIcKq6AO-joa%MMyCHi^+vsnL)O6!B517tc9BnSz;0-84@tc_k)I6gy3L!xoy5Pmo z-~T!yQVR%0{KoRL*L&D)Eu6V-LpvcHmXZ%4TB z{}_r-zq{$+s5PaL%gj;fW?a0p@!iTW^FcP5P ztD;ju$}t8iRse}-lTB=CcJ3iDFBrn{dm_=(w&}zL)`p|;c%p|CN2&74Ew(Da<>YVt z$=CkIU##G*fAMa`;X?8A>1NgrD*1uUIdPFK!GJgg1Vf9>m26?;Hzn*rzSG)1B(0Dw zMX%axlb?vX^4n`By5>H{f5EY6`!dLuIfcJ=hE<{E)m1+;5)d{yrMU_r$g!nGMJJKu z+?}06Q#{XOZsjG$g)zhO*c)q8i?rZqy!-uIav$nw+BAc2mu@Q>qh$L8S|+ir>XOH6 zaz4y(RhC;U_0*yQ_FA~r?36zNm~|3|?TT|jxY~g_9BD7{Ez%r9JEHRkYxl6< z8;;hox(QjovV2+h_PEUp)vCV3edI^6w@kK4AZJ1lW%-HU6>%>w^L*}L$5`FK?wt%z z*(J@S);sRG{nV1a!?|z}-zl_%1XLm?$e9pMA~W#fk^*jMs%IFm@q_mZOO9J#Cbd@W zQ0wW6%g056vFpkhEqjGQlqClz<#U*l>~~H5WlI;ze)qgarev3i$^UZaP$hj~GpCCT zpZs)i#L_}B4*hXnOhS}t!3-A`7RKpA-rH13XJo`uDlLSDhH`;{fi$gw4P&U1&d451 zsk9)N(QjzpNUEeWj1wr876dc;Z`rW^T&GG*Pn>z5QfWaj6BQLj)7mJWM8)((%N(v> zUrOZ_f|48P(Gh;|5bIuMo^6BqY$ZPfQ%jxjv_QJ;s{Rl*cOsGbWRX zrhCGeaL)P>mGm7AA9DeHD32O~na0M(K7Dl5DlssSTOPyNKc&JxVtP-{Dr~@v@PQT^ zt9x=Ofj>QVurLl*#BjOeg(#oQU7ba(h*A9k=lg%d1}}awW@Tm3#fJm-Z*qh%56PYV z@C8~a2W&`&>~?!lP!L`34PZ;+pX2t%NdpZ2`aeo*M8E)SNQMA|!9YuT6(d8X8Mbvi zT@nEUq7%uG)oKk64yIMT4NRk&>D+t6X&%xrpfCiiUcH(Y`T>vhKu3*HU!UH8sU&l70XcZxyN5a0ET_xia5A$f`k zd>P`qW&wsougpx4fJ%PCy`l$0A{rVR5)%_2_A;4=!JcKF v ? "On" : "Off"; @@ -130,7 +119,16 @@ function showMainMenu() { } } }, - "Quiet Mode": ()=>showQuietModeMenu(), + "Quiet Mode": { + value: settings.quiet|0, + format: v => ["Off", "Alarms", "Silent"][v%3], + onchange: v => { + settings.quiet = v%3; + updateSettings(); + updateOptions(); + if ("qmsched" in WIDGETS) WIDGETS["qmsched"].draw(); + }, + }, 'Locale': ()=>showLocaleMenu(), 'Select Clock': ()=>showClockMenu(), 'Set Time': ()=>showSetTimeMenu(), @@ -352,9 +350,7 @@ function showLCDMenu() { onchange: v => { settings.brightness = v || 1; updateSettings(); - if (!(settings.quiet && "qmBrightness" in settings)) { - Bangle.setLCDBrightness(settings.brightness); - } + Bangle.setLCDBrightness(settings.brightness); } }, 'LCD Timeout': { @@ -365,9 +361,7 @@ function showLCDMenu() { onchange: v => { settings.timeout = 0 | v; updateSettings(); - if (!(settings.quiet && "qmTimeout" in settings)) { - Bangle.setLCDTimeout(settings.timeout); - } + Bangle.setLCDTimeout(settings.timeout); } }, 'Wake on BTN1': { @@ -455,105 +449,6 @@ function showLCDMenu() { }); return E.showMenu(lcdMenu) } -function showQuietModeMenu() { - // we always keep settings.quiet and settings.qmOptions - // other qm values are deleted when not set - const modes = ["Off", "Alarms", "Silent"]; - const qmDisabledFormat = v => v ? "Off" : "-"; - const qmMenu = { - "": {"title": "Quiet Mode"}, - "< Back": () => showMainMenu(), - "Quiet Mode": { - value: settings.quiet|0, - format: v => modes[v%3], - onchange: v => { - settings.quiet = v%3; - updateSettings(); - updateOptions(); - if ("qmsched" in WIDGETS) {WIDGETS["qmsched"].draw();} - }, - }, - "LCD Brightness": { - value: settings.qmBrightness || 0, - min: 0, // 0 = use default - max: 1, - step: 0.1, - format: v => (v>0.05) ? v : "-", - onchange: v => { - if (v>0.05) { // prevent v=0.000000000000001 bugs - settings.qmBrightness = v; - } else { - delete settings.qmBrightness; - } - updateSettings(); - if (settings.qmBrightness) { // show result, even if not quiet right now - Bangle.setLCDBrightness(v); - } else { - Bangle.setLCDBrightness(settings.brightness); - } - }, - }, - "LCD Timeout": { - value: settings.qmTimeout || 0, - min: 0, // 0 = use default (no constant on for quiet mode) - max: 60, - step: 5, - format: v => v>1 ? v : "-", - onchange: v => { - if (v>1) { - settings.qmTimeout = v; - } else { - delete settings.qmTimeout; - } - updateSettings(); - if (settings.quiet && v>1) { - Bangle.setLCDTimeout(v); - } else { - Bangle.setLCDTimeout(settings.timeout); - } - }, - }, - // we disable wakeOn* events by overwriting them as false in qmOptions - // not disabled = not present in qmOptions at all - "Wake on FaceUp": { - value: "wakeOnFaceUp" in settings.qmOptions, - format: qmDisabledFormat, - onchange: () => { - if ("wakeOnFaceUp" in settings.qmOptions) { - delete settings.qmOptions.wakeOnFaceUp; - } else { - settings.qmOptions.wakeOnFaceUp = false; - } - updateOptions(); - }, - }, - "Wake on Touch": { - value: "wakeOnTouch" in settings.qmOptions, - format: qmDisabledFormat, - onchange: () => { - if ("wakeOnTouch" in settings.qmOptions) { - delete settings.qmOptions.wakeOnTouch; - } else { - settings.qmOptions.wakeOnTouch = false; - } - updateOptions(); - }, - }, - "Wake on Twist": { - value: "wakeOnTwist" in settings.qmOptions, - format: qmDisabledFormat, - onchange: () => { - if ("wakeOnTwist" in settings.qmOptions) { - delete settings.qmOptions.wakeOnTwist; - } else { - settings.qmOptions.wakeOnTwist = false; - } - updateOptions(); - }, - }, - }; - return E.showMenu(qmMenu); -} function showLocaleMenu() { const localemenu = { diff --git a/apps/slevel/ChangeLog b/apps/slevel/ChangeLog index 5560f00bc..3a6431e50 100644 --- a/apps/slevel/ChangeLog +++ b/apps/slevel/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Updated to work with both Bangle.js 1 and 2. diff --git a/apps/slevel/spiritlevel.js b/apps/slevel/spiritlevel.js index 492fc60e1..9db54b825 100644 --- a/apps/slevel/spiritlevel.js +++ b/apps/slevel/spiritlevel.js @@ -1,5 +1,7 @@ g.clear(); var old = {x:0,y:0}; +var W = g.getWidth(); +var H = g.getHeight(); Bangle.on('accel',function(v) { var max = Math.max(Math.abs(v.x),Math.abs(v.y),Math.abs(v.z)); if (Math.abs(v.y)==max) { @@ -14,17 +16,17 @@ Bangle.on('accel',function(v) { g.setColor(1,1,1); g.setFont("6x8",2); g.setFontAlign(0,-1); - g.clearRect(60,0,180,16); - g.drawString(ang.toFixed(1),120,0); + g.clearRect(W*(1/4),0,W*(3/4),H*(1/16)); + g.drawString(ang.toFixed(1),W/2,0); var n = { - x:E.clip(120+v.x*256,4,236), - y:E.clip(120+v.y*256,4,236)}; + x:E.clip(W/2+v.x*256,4,W-4), + y:E.clip(H/2+v.y*256,4,H-4)}; g.clearRect(old.x-3,old.y-3,old.x+6,old.y+6); g.setColor(1,1,1); g.fillRect(n.x-3,n.y-3,n.x+6,n.y+6); g.setColor(1,0,0); - g.drawCircle(120,120,20); - g.drawCircle(120,120,60); - g.drawCircle(120,120,100); + g.drawCircle(W/2,H/2,W*(1/12)); + g.drawCircle(W/2,H/2,W*(1/4)); + g.drawCircle(W/2,H/2,W*(5/12)); old = n; }); diff --git a/apps/thermom/ChangeLog b/apps/thermom/ChangeLog index 78fed5826..6ab6ba8e5 100644 --- a/apps/thermom/ChangeLog +++ b/apps/thermom/ChangeLog @@ -1 +1,2 @@ 0.02: New App! +0.03: Improved messages and added Celsius sign diff --git a/apps/thermom/app.js b/apps/thermom/app.js index baa38e8ec..7eae9b3d4 100644 --- a/apps/thermom/app.js +++ b/apps/thermom/app.js @@ -3,9 +3,9 @@ function onTemperature(p) { g.setFont("6x8",2).setFontAlign(0,0); var x = g.getWidth()/2; var y = g.getHeight()/2 + 10; - g.drawString("Temperature", x, y - 45); + g.drawString("Temperature:", x, y - 45); g.setFontVector(70).setFontAlign(0,0); - g.drawString(p.temperature.toFixed(1), x, y); + g.drawString(p.temperature.toFixed(1) + " °C", x, y); } function drawTemperature() { @@ -23,6 +23,6 @@ setInterval(function() { drawTemperature(); }, 20000); drawTemperature(); -E.showMessage("Loading..."); +E.showMessage("Reading temperature..."); Bangle.loadWidgets(); -Bangle.drawWidgets(); \ No newline at end of file +Bangle.drawWidgets(); diff --git a/apps/widbars/ChangeLog b/apps/widbars/ChangeLog new file mode 100644 index 000000000..4c21f3ace --- /dev/null +++ b/apps/widbars/ChangeLog @@ -0,0 +1 @@ +0.01: New Widget! diff --git a/apps/widbars/README.md b/apps/widbars/README.md new file mode 100644 index 000000000..c1cb73a96 --- /dev/null +++ b/apps/widbars/README.md @@ -0,0 +1,15 @@ +# Bars Widget + +A simple widget that display several measurements as vertical bars. + +![Screenshot](screenshot.png) + +## Measurements from left to right: + +- Flash storage space used (*blue/cyan*) +- Memory usage (*magenta*) +- Battery charge (*green*) \ No newline at end of file diff --git a/apps/widbars/icon.png b/apps/widbars/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3d6fcb053ae67d78eb078acb8a54ab2c15585db7 GIT binary patch literal 2085 zcmV+=2-^3FP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O=0(cI>DQ{nsdZ2!H^=aCk^-^$hOtdxKrCB$ZU1 zoLi2K1F|Ic7DABz?_Z;T@C!Lbib+bYIXnDfjWsm96nFgUetH-8bN~1p!v7EbbR7uj z;+v$jQ@)`;-9EV3@cpr$$~h9sspuTIDCA{1;AP%BiT-f(`*-F}oHs z5Y1;qIl7>;zJXu|ptDz3Q!a;6)u;~KvD09K5A^wT$QUUxhEfQvC` z5VRo-5ViUWOQ>OhBM**nc?-goCl`=4f)Z$q9In3jZMSZF!xvbd9-_fRna3wjFZyoq zor}!Ig2=ma#R`6f6}fO@F}I$O0wLZ`-qHs6a-H znIV_Z9;?EW%u@j%g6#xnumqxa*>m#QI|)I&2aW{PBu_tB5lTxT)MgR*VVpBe5WcTH+K_N;yd?lxk|3bId8{EO{llCM;2s zWDzM+r4=r*q>_u2Qfg^6R7MU=HCL&n*4kR2215Je;5wuj1AmXh|mZCGjoyEb47&QhPMCPOr2g??3k}z2EJ_R*}xYqgU6>Lbjpm>wufNc*(kRu z)s~Ne832}yXLF}_*XJ{^=w9YGU{QMmqYkD9#b6I}Fa;`*tjhu~^$C3>6K z3N~_16eiYoqdDv?3N;b-fM5!ZN0Elz=lgw@K1gX6`+c9E|w zn&O=ET`r-&u{;>HFdcIr(fEc*9OrhOBZkVQU;7CaJYuW2eSCpPFKt?H*N_Xvj;@F=MVU^R`e$n^{89W?e^zW zXhk#cs;fk`6xUl-pAn5RR!!&A4p@=aR)OSJKzH@1`3hE)haq8CCr!X9it0(bS0~#| zivd#{w(2kLGohH1vf_Q3Tg6~X%iTH^o*UzMfr5;zt{!vCXW^&)DE#^^{Ir|LSp!EJoJ>&HRp>zKYMQzCfK|6k zzdj1dP0NE0giX-$y%*bwj*KTb9SJhSy#@70rnJsDA^Desoc_`#^0p#yk7@h|?Lk`8 zIXQGG0004mX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKpe$iQ>CI6hjtJV$xxjvh>ALD z6^c-y)C#RSm|Xe=O&XFE7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~ z_a1le0HI!Hs@X9HsG4P@;xRFkT@?eb=)n*|2x3}draqTUCg3@~?&0I>U6f~epZjz4 zDmjw@K9P8q>4rtTK|Hl->74h8!>lMN#OK7L23?T&k?XR{Z=4Gb3p_Jyq*L?6VPdh+ z#&R38qM;H`5=RtOqkJLbvch?bvs$jQ<~{ifgE?(wnd>wM5yv8ykc0>sRg_SMg($5W zDJD|1AM@}JIQ}HLWO9|j$gzM5R7j2={11M2Yvw1$-K1a)=zOv5k6|FN3p8rB{e5iP zjT6BC3|wg~f29u0e3D*kX^|tKZyUI{ZfWu!aJd8YKk1SoIg+2Ikk13}XY@^3Aao0K zuerT7_i_3Fq^YaK4RCM>j1(w)-Q(R|?Y;ebrrF;Qsu^;J?z{j10Afi* zK~!ko?bxvmfG`Y2K^w9E%AW;D0d7FK*G5rta_1^(?|O1M$-~DwtAn?HIQ~8X00000 z0000000000000000001h9RcU$a(CTso0Hkr+XTifCQ~s100000NuTNhh;s>3_;>d& P00000NkvXXu0mjf=x){y literal 0 HcmV?d00001 diff --git a/apps/widbars/screenshot.png b/apps/widbars/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ae85e42f5512bea974b069e37fe222c870db9e20 GIT binary patch literal 9787 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∓xa5}{Mq#4?OGe$!443PswLE9c|w!vYX*^6l~;8pKjczC%+RqS{>gqdl_ z^J0O2D4VD*csRtvfAph(n$)1@u)-1zUY8T1;!E%Fm#8$S!y6^`|ntA@nNd#P=;zN1_uWj!iAov+4)NO?~_0GgYR$u zvORqNBgr5-x8eV6+8Rz6iAa{w002Nm*hxvL$xBK7FAe;k@|_=;DkAqooOIY!v!WC) z+6xnFT&;jPCQi^EFHWsw5&4^7w$U4$GI1I%0cZfcyE|&WG%&2Mi=Zok`2qOi?yljH ziv2eW*I>xUbu-!fnaukdP-0?TyT$=uooiLT&%u#yj0e+rGJq+GXl`I$DVn83w=2+p zwRdoCoMGcz^zQz^B#;gzn(C8z8YR;!Aq=)V&3}&lQP03QbUaiBZ=CXydfqbWl8=Ip zBFyDju6aN7*}Qpf#Eqo2v;GUyxMYS7SfB=U+9F5qO9bIy%`HAu z@@I-B6mI+W-+_)Bi8zqIs77`y!4>FJ0cj=Vy9`80%=8+ zDYG!wHV?}GG%OU4#;!h|=Pz%7@|wCKG*?%|1Y8FHt%EJ&%f8?Km1{c~wM1@xJy>(q z|5g*=%@sk?|NOu6D%BJG&mpAM2}C^-KyC_rvL;lCh)hrF^3!Y>puoKMUI;eE*f z035fxw1n2bwS}$oq;d*O@z0kpe;PO69sUVkvR_DE`rSKPF}<)PM5+3;*vL|Gg3gySN!9;eRj$^4}2Kiqx7r_6L7s?-|1;M%43p5svas^Bj&PemL^ItZsnjVM#~(4E zOwJp*iQfG5R`FMGSVdOMoWC-;z}a%<@y>Dkj<>hfg~Dz=^kq%RHq&*^Sl=dfL8s}} zE-cEjh1%q^mu$SjZvJk2?&Ki>AEu=z)8sVOG%DY3r-~`s@}g zZ8qQ0#VJe_*@L6^@cWzf*b=jU`rvuRkG+f#0`1 zo5;1d_eEdQz^iL(;O~AqzXITWQk6zsjH-x0j}r{}(v^{bL#e@;yUpFQYP-qYdBDG(dPW=zGN z`)P|opU-KRg0i$q(}czOTtMdHPHGp5%22gtrNfcsE3K7A%AJXrZGLMpHj1B-^TWi)BWRNAfKWgn#rur zdi;p`{-IZf8#QMT+nY5KDdW)E{&37Tr?1TJ#pfI?L!U;po&r$H#vkRtzXidn|p~Fz8{%3}qNxzJ(6`m@Wo20AV-D6E$r5h4@JF`D~%nEq+ zRfw_S68aXQ;Hj!y^_rTLE8#HKyERc_uf zvK+^pkbv|1E!8jeH5j`k1MI2y1uZg(ub9?ExxHK7o;o+&H-cvUI$8H4nKtt7AIPwD z8%9LqR%_nDXmX(E^Gw75Z?2M#LG59YDG9oIHVPmdUxQXWabQNndS;^GLnL*hyIUD``6P|Cf#aH;4S6O!8kG0{BNl k;s1!~f8qa!mShjfO$C>0pjsLKvlIr9mr;>!kTeVXAI$A3ApigX literal 0 HcmV?d00001 diff --git a/apps/widbars/widget.js b/apps/widbars/widget.js new file mode 100644 index 000000000..a1134f31f --- /dev/null +++ b/apps/widbars/widget.js @@ -0,0 +1,67 @@ +(() => { + const h=24, // widget height + w=3, // width of single bar + bars=3; // number of bars + + // Note: HRM/temperature are commented out (they didn't seem very useful) + // If re-adding them, also adjust `bars` + + // ==HRM start== + // // We show HRM if available, but don't turn it on + // let bpm,rst,con=10; // always ignore HRM with confidence below 10% + // function noHrm() { // last value is no longer valid + // if (rst) clearTimeout(rst); + // rst=bpm=undefined; con=10; + // WIDGETS["bars"].draw(); + // } + // Bangle.on('HRM', hrm=>{ + // if (hrm.confidence>con || hrm.confidence>=80) { + // bpm=hrm.confidence; + // con=hrm.confidence; + // WIDGETS["bars"].draw(); + // if (rst) clearTimeout(rst); + // rst = setTimeout(noHrm, 10*60*1000); // forget HRM after 10 minutes + // } + // }); + // ==HRM end== + + /** + * Draw a bar + * + * @param {int} x left + * @param {int} y top (of full bar) + * @param {string} col Color + * @param {number} f Fraction of bar to draw + */ + function bar(x,y, col,f) { + if (!f) f = 0; // for f=NaN: set it to 0 -> don't even draw the bottom pixel + if (f>1) f = 1; + if (f<0) f = 0; + const top = Math.round((h-1)*(1-f)); + // use Math.min/max to make sure we stay within widget boundaries for f=0/f=1 + if (top) g .clearRect(x,y, x+w-1,y+top-1); // erase above bar + if (f) g.setColor(col).fillRect(x,y+top, x+w-1,y+h-1); // even for f=0.001 this is still 1 pixel high + } + function draw() { + g.reset(); + const x = this.x, y = this.y, + m = process.memory(); + let b=0; + // ==HRM== bar(x+(w*b++),y,'#f00'/*red */,bpm/200); // >200 seems very unhealthy; if we have no valid bpm this will just be empty space + // ==Temperature== bar(x+(w*b++),y,'#ff0'/*yellow */,E.getTemperature()/50); // you really don't want to wear a watch that's hotter than 50°C + bar(x+(w*b++),y,g.theme.dark?'#0ff':'#00f'/*cyan/blue*/,1-(require('Storage').getFree() / process.env.STORAGE)); + bar(x+(w*b++),y,'#f0f'/*magenta*/,m.usage/m.total); + bar(x+(w*b++),y,'#0f0'/*green */,E.getBattery()/100); + } + + let redraw; + Bangle.on('lcdPower', on => { + if (redraw) clearInterval(redraw) + redraw = undefined; + if (on) { + WIDGETS["bars"].draw(); + redraw = setInterval(()=>WIDGETS["bars"].draw, 10*1000); // redraw every 10 seconds + } + }); + WIDGETS["bars"]={area:"tr",width: bars*w,draw:draw}; +})() diff --git a/apps/widbatpc/ChangeLog b/apps/widbatpc/ChangeLog index 09e4fabf4..99822b5a9 100644 --- a/apps/widbatpc/ChangeLog +++ b/apps/widbatpc/ChangeLog @@ -10,3 +10,4 @@ 0.11: Don't overwrite existing settings on app update 0.12: Fixed for Bangle 2 0.13: Fillbar setting added, see README +0.14: Fix drawing the bar when charging diff --git a/apps/widbatpc/README.md b/apps/widbatpc/README.md index c75154f72..48c6070f4 100644 --- a/apps/widbatpc/README.md +++ b/apps/widbatpc/README.md @@ -5,12 +5,12 @@ Show the current battery level and charging status in the top right of the clock Works with Bangle 1 and Bangle 2 When the fillbar setting is on the level colour will fill the entire -bar. This makes for an easier to read dsiplay when the charge is +bar. This makes for an easier to read display when the charge is below 50%. ![](widbatpc.full.jpg) -When the fillbar setting is off the level colour will follow the battry percentage +When the fillbar setting is off the level colour will follow the battery percentage ![](widbatpc.part.jpg) diff --git a/apps/widbatpc/widget.js b/apps/widbatpc/widget.js index caecf8ae4..3e5ff47b4 100644 --- a/apps/widbatpc/widget.js +++ b/apps/widbatpc/widget.js @@ -79,20 +79,20 @@ // else... var s = 39; var x = this.x, y = this.y; - const l = E.getBattery(); - let xl = x+4+l*(s-12)/100; + const l = E.getBattery(), + c = levelColor(l); - // show bar full in the level color, as you cant see the color if the bar is too small - if (setting('fillbar')) - xl = x+4+100*(s-12)/100; - - c = levelColor(l); - if (Bangle.isCharging() && setting('charger')) { g.setColor(chargerColor()).drawImage(atob( "DhgBHOBzgc4HOP////////////////////3/4HgB4AeAHgB4AeAHgB4AeAHg"),x,y); x+=16; } + + let xl = x+4+l*(s-12)/100; + // show bar full in the level color, as you can't see the color if the bar is too small + if (setting('fillbar')) + xl = x+4+100*(s-12)/100; + g.setColor(g.theme.fg); g.fillRect(x,y+2,x+s-4,y+21); g.clearRect(x+2,y+4,x+s-6,y+19); diff --git a/core b/core index 996299a28..23854083e 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 996299a285c95136ad0049febb5399ee837c42d3 +Subproject commit 23854083e0c3f83c649073a2d85e8079efc471d3 diff --git a/css/main.css b/css/main.css index a27498397..f4850babe 100644 --- a/css/main.css +++ b/css/main.css @@ -1,8 +1,52 @@ -.navbar { background-color: #5755d9; padding: 0.5em 1em 0.5em 1em; } +.navbar { background-color: #5755d9; padding: 1em 1em 1em 1em; } .navbar .navbar-brand { color: #fff; font-weight: bold; } + +.container.apploader-tab, ul.tab.tab-block { + padding-left: 1rem; + padding-right: 1rem; + border-bottom: 0px; +} + +.navbar-brand.mr-2 > img { + margin-left: 0.3rem; +} + +.panel-body.columns { + margin: 1px; +} + +.tile.column.col-6.col-sm-12.col-xs-12.app-tile { + border: solid 1px #fafafa; + margin: 0; + min-height: 150px; + padding-top: 0.5rem; +} + +.tab.tab-block .tab-item { + border-bottom: solid 1px #dadee4; +} + +a.mr-2{ + display: flex; + align-items: center; +} + +.navbar-section > a > div { + margin-left: 0.75rem; +} + +.dropdown-container { + margin-bottom: 0.5rem; + margin-top: 0.5rem; +} + +a.btn.btn-link.dropdown-toggle { + padding-left: 0.01em; +} + .avatar img { border-radius: 5px 5px 5px 5px; background: #fff; diff --git a/index.html b/index.html index e7c7c31cd..e22a1f9e7 100644 --- a/index.html +++ b/index.html @@ -21,8 +21,9 @@