From 3f18f770e9d33c5e5d0657c6160fa8f30b21831f Mon Sep 17 00:00:00 2001 From: Claudomator Agent Date: Sat, 14 Mar 2026 00:50:39 +0000 Subject: Implement barometric pressure trend monitoring and visualization --- .git_old/logs/refs/remotes/github/master | 9 + .git_old/logs/refs/remotes/local/master | 1 + .../01/3ea45488da6e8e2cfe1ba5904ba58a26ee0105 | Bin 0 -> 18 bytes .../01/bdaa1da7d937c7e7d98e54ba912f88ab95c7f2 | Bin 0 -> 17 bytes .../02/61ffe786d577cbf825858c1d809303565756c1 | Bin 0 -> 64 bytes .../02/6c1986ae55df8b23409188c917e698a796509f | Bin 0 -> 62 bytes .../02/a94cc8cc0aad6b74d6cfd899b7527b2bbbc38b | Bin 0 -> 2646 bytes .../02/b0f4216535b51d446045a3bc72f7890da2f6c1 | Bin 0 -> 4584 bytes .../03/c03e788a2b407323d4d8bcd4f4ca970f16a66d | Bin 0 -> 2610 bytes .../03/c80a94002463dd718e576725ab0cfcf0a74cb1 | Bin 0 -> 69484 bytes .../03/e6a2f8d7b57bdce34b294d5ad7c4cb0687db17 | Bin 0 -> 386 bytes .../04/0614ef804ebb8e4d34fbb9dccb0ea1f5efb7ab | Bin 0 -> 1853 bytes .../04/a3387aff7c97953a54229ed29590966175647e | Bin 0 -> 199370 bytes .../05/4025ae7b22f170572ac4c8a7671bd8e8478be6 | Bin 0 -> 65 bytes .../05/f0832b5d5b550725c7e882ab5797a01511ce4b | Bin 0 -> 40281 bytes .../06/37a088a01e8ddab3bf3fa98dbe804cbde1a0dc | Bin 0 -> 17 bytes .../06/959a3c39dee18b5274eff81d0cb5c513d17bb5 | Bin 0 -> 885 bytes .../06/cbab6375d69ac688183e1ab2103da48a4be8ec | 2 + .../06/dbb3c2d9c1fddf8f47a662638f84f41f8ec0c8 | Bin 0 -> 239 bytes .../07/b7738146fd3dd51a5fc95caf2dabbc486e307b | Bin 0 -> 16302 bytes .../07/fc139079ec660e911f55c1e2a5f15b16b9bd2f | Bin 0 -> 102 bytes .../08/650b15f563ebd50a4c0b8c4a6ad55ebb6b8d30 | Bin 0 -> 5060 bytes .../08/684c396d8367f96af62281f55f406756aad7e2 | Bin 0 -> 1621 bytes .../08/98853965b558f9ee91862d9d1912173c23c246 | Bin 0 -> 5244 bytes .../08/aa4d727361add1abea262a55505ceb78c95e99 | 2 + .../08/cdadab57dc28fab5ff838eae234484af0b7cfd | Bin 0 -> 77 bytes .../08/f4ebeab550e5b7670413a1d354bc2bba12a1d1 | Bin 0 -> 31 bytes .../09/16bd8a9765c2a0ad651da6e44038179ac89a56 | Bin 0 -> 2454 bytes .../09/b6aa5d5af66190c76441f1a702f557bfa3ddd8 | 2 + .../0a/4e17383b5f644b604fb9e43be29b781d64ca26 | Bin 0 -> 4620 bytes .../0a/d0df20c52a0c45d312768650810e100391588a | Bin 0 -> 165 bytes .../0c/ad87911c38df8fd057443c199c2e8688372e34 | 1 + .../0d/76ca1a76e1cc3a4a1312a7ebdd4038de4d1f0e | Bin 0 -> 112878 bytes .../0d/878ae5a356eca475078b4b15a37305d25996f1 | Bin 0 -> 2819 bytes .../0d/9a6ce42faa94eb2f36c956e90810b899cd0cb1 | Bin 0 -> 137 bytes .../0d/a156cc93b83232d88f5baa7e112bf79e9626ff | Bin 0 -> 243 bytes .../0d/e88076bc38804012ad32577592bbf5f88b3fc9 | Bin 0 -> 33 bytes .../0e/6c8bab1e097e09f5c695b14c706d67fcd9b209 | Bin 0 -> 48 bytes .../0e/98a3506df9da2ca9e934d0895c3e59d310db23 | Bin 0 -> 250 bytes .../0e/ba3a124eaf889ba6f9687d6981ddaabaa1e78d | Bin 0 -> 246 bytes .../0f/025c5eef5a69cf614237f39d512a1c32a5b491 | Bin 0 -> 2556 bytes .../0f/34d26d08f2cb31928928f331488d6609719981 | Bin 0 -> 4046 bytes .../0f/d650751fd8e3e4cf72233de771915f94c0f796 | 1 + .../10/036193fa4b85dc058d9dcefb5e0de6eaf7e3b5 | Bin 0 -> 311 bytes .../10/55d77d328b7c099f59fccb99b91469df89bf3c | Bin 0 -> 47 bytes .../10/7a9e478c05661bb77f1d600aa9199f473641e1 | Bin 0 -> 2599 bytes .../10/7c64fce47d8f1f923a7a20b0a6799e387e6da4 | Bin 0 -> 124 bytes .../10/807e6a2fe5386940ed65bcd3a23a7a40d07c4f | Bin 0 -> 4887 bytes .../10/d5a3fe2c99fb121523e751a8c77406318e5e60 | 4 + .../11/87cb75aff9caccd6929476c04ff30afca59db2 | Bin 0 -> 231 bytes .../14/10b5fc469f580416feaa0740977851a465e271 | Bin 0 -> 2801 bytes .../14/a06c0c724eeb212e2bb205be9ed6c9a6562569 | Bin 0 -> 45 bytes .../14/e195bc2bbe25a5d674937c540c02eaf529f2ff | Bin 0 -> 5013 bytes .../14/f8d29674d71dd115da3e3d07d808ef6995574f | 4 + .../18/630b243b5156de2d9910e92dece1a272847bdc | Bin 0 -> 125 bytes .../18/b8820074fda8fab0985073c03e74b88210449d | Bin 0 -> 3839 bytes .../18/c133201a226d29c5ecd92cba8180db5c635a20 | Bin 0 -> 145 bytes .../18/e819c1f24d598a5a4ef23997b2ed7a57ca9b57 | Bin 0 -> 4880 bytes .../19/54aa0089eeb2f14afc10b69d8cfda1d386a758 | Bin 0 -> 2965 bytes .../19/65b6a927faa139adcdcb5b54b52e5ab5187599 | Bin 0 -> 5246 bytes .../19/df7d6693875c91c44305ba910f696dc8aab1ab | Bin 0 -> 89716 bytes .../19/ee4d5fdda38313840e84e2a335c44590fc980e | Bin 0 -> 125 bytes .../1c/472d04a6d1e79d17e0fa4cbef4f1bc747e08eb | Bin 0 -> 61903 bytes .../1c/56c8fbc1d4ea8d37679e2196d9dd06e8896708 | 2 + .../1c/8b3faf250ec9e7823432494450d8f3f9d572f8 | Bin 0 -> 4929 bytes .../1c/91b474990f6126b8bf66e3f245c215ab02bf75 | 1 + .../1c/e84db3a2a297e2dd6bd5d4b6a211bc037cb98e | Bin 0 -> 51 bytes .../1e/8c38e31de21bba4ce64175027ce97f4e243b0c | Bin 0 -> 1867 bytes .../1e/f28296bce6f33bb163ed8c08e019c911ca2c20 | Bin 0 -> 62 bytes .../1f/b004429a404059cfde34fd15673274ac3b0db1 | Bin 0 -> 439228 bytes .../1f/e02cbe76eeeac32f488ae970b1a018cb4c0235 | Bin 0 -> 2799 bytes .../1f/f599e759c3a56ebf0a7c19847f737a76a15d47 | Bin 0 -> 56026 bytes .../1f/fce7770822cb9f0e8cefba1dafb9a1c97e875d | Bin 0 -> 31480 bytes .../20/445618aba29dfdc8553d4613fff41c4ad7c2f5 | Bin 0 -> 64317 bytes .../20/bb6569b628c33327e8a53466496920c734aca8 | Bin 0 -> 47 bytes .../20/e1ce9bdf1153d8f7f0c3500984799343368aba | Bin 0 -> 4653 bytes .../23/1d2ee68e82a818c776f2996a38a5df9c5ff499 | Bin 0 -> 4589 bytes .../23/35e689f1486a86baa282d2200dae5ba51ddc67 | Bin 0 -> 2752 bytes .../23/89c93e45fc43d34a229519f4031aaf4d50494e | 2 + .../23/95a15f990d6a64668d4de36312cef305cd6ec3 | Bin 0 -> 336 bytes .../23/a581be2bfd6232a1de2246f1512f11d856f601 | Bin 0 -> 113 bytes .../24/78c0e600dfd02698f5ff36ec8bba98317b0c9a | Bin 0 -> 300 bytes .../24/baed86102cae14cf54493c64a8570791eb811b | Bin 0 -> 2592 bytes .../26/7d9f52ceedbd420d060090d3bbafce4423d1f8 | Bin 0 -> 1103 bytes .../26/b1691b3981ab2731f798d7fdd3cf554172a2b6 | Bin 0 -> 2551 bytes .../26/be0403019c3cb31fe6a93a1113a1badcf67d3d | Bin 0 -> 3926 bytes .../27/25b968ef4a15dee09f51ce676b5481fba35705 | Bin 0 -> 114 bytes .../27/5d852f3cc7cefc2ae9053caf9a07167af1dcc6 | Bin 0 -> 129 bytes .../27/d1f5bff76c8c2821de6d900d881123fb6a81b7 | Bin 0 -> 111 bytes .../29/0be1f2cd98cdcbae2ea5f8e08d13a6bd7282c0 | Bin 0 -> 260 bytes .../29/58ef32684e4fed3ff316877693cc687d77f583 | Bin 0 -> 7226 bytes .../29/9eedbe23b2a95aaae714f8728ff8f6f192fbf6 | Bin 0 -> 67 bytes .../2a/418e3b39b926719c85c60f8da227e5c567617e | Bin 0 -> 57 bytes .../2a/6441a73f043180f92cb72ca042e06dda7cd945 | Bin 0 -> 34866 bytes .../2a/f6c39a22803efc8330fda85a210b2cb996d78e | Bin 0 -> 1201 bytes .../2d/053afd279a1c787a96ea7ffa046566d7163799 | Bin 0 -> 23 bytes .../2d/0adaeb856985817dcf81833ebdcd98390e4ca5 | Bin 0 -> 360 bytes .../2d/20c165d514f028bd2d578040982e3db5eeef77 | Bin 0 -> 45 bytes .../2d/25e443b29f42fd199a4adabe61175a4e3c82a5 | Bin 0 -> 214177 bytes .../2d/262588143b919231cbe2fa9f1eb35219fa668c | 3 + .../2d/34068aab328b7449983d3e299eb5b2594f0c06 | Bin 0 -> 125 bytes .../2d/4e27644bade87e0732cbb7633073007d5c7b6a | Bin 0 -> 375 bytes .../2d/6a8b7a2c854db504af93186e24faece3527d70 | Bin 0 -> 5216 bytes .../2d/ea15f0ae9c2d7fe6a47e7ef700c1f04c279cb7 | Bin 0 -> 62 bytes .../30/4fa24f090304c45139ce7d97a27cbd5f063f09 | Bin 0 -> 113 bytes .../32/806a8d1ed1c374f30585f7b7ed25cde678e257 | Bin 0 -> 142 bytes .../32/954a0865a90fab633fffbfc2dc068b47c3d4c4 | Bin 0 -> 2580 bytes .../33/0d41558af0a6abb6662cd29d36c27c5f7f1b19 | Bin 0 -> 53 bytes .../33/140ac7015f853a103da02560f38e3138eee519 | Bin 0 -> 62 bytes .../33/37b4a569c3dd2966cf0f66f5fe44b64247ecc9 | Bin 0 -> 47 bytes .../33/beb455612568ad671b60dd2cd4261a0984a8a7 | Bin 0 -> 72 bytes .../35/d8468081e635a14db5f96f8c4194ce106c7c9e | Bin 0 -> 2763 bytes .../37/7b8e4a43d9ff130eb5c69ad5713ae127c66a92 | Bin 0 -> 30 bytes .../37/87e5b31f16a6e73f0d432f61b6fe6bc0e8cead | Bin 0 -> 4050 bytes .../37/b76aa9769e0a30b3b75121abb5376b20d71ce3 | Bin 0 -> 311826 bytes .../38/02b676fdca19867b4735da4644a56c44c4c33d | Bin 0 -> 3428 bytes .../38/4893bc4bcc8adf16d09a8d52e3e96d33bcd82f | Bin 0 -> 156 bytes .../38/9bbce0699828e85c6ceb0ca64dc5d5e00d8c45 | Bin 0 -> 50 bytes .../38/9dc0bc367ed98105a961a5be97220d3bf6c2bf | Bin 0 -> 3440 bytes .../3a/530d1d35bcbaae52ead7fcf7ef190449de644f | Bin 0 -> 4346 bytes .../3a/cd13dd22eb2d78ef29e314ce6e5df810b79d5c | Bin 0 -> 4747 bytes .../3a/db1a5b6b81d0865e0e3e92ab4518bd65debbb5 | Bin 0 -> 58 bytes .../3b/54559b684f1b22c6b69177096225c3ec69230a | Bin 0 -> 4529 bytes .../3b/628a8a3201a1cb1ad2efad2cda2ee8e6065d81 | Bin 0 -> 145 bytes .../3b/cc94af78ca69df01a10b2ab9e7e470e6593ad4 | Bin 0 -> 1249 bytes .../3b/cfe893ea8f88be8fa1bc2680034c2d6ba69a67 | Bin 0 -> 2596 bytes .../3e/3495b8932c17c13dda8c7a27f56aee6ddf209c | Bin 0 -> 2613 bytes .../3e/40fdfcead6ac0356c9dcec50e9dcdb92d5676c | Bin 0 -> 2807 bytes .../3f/5118ee6ec11c3f3fbc939aaa2e66468f9cf9e2 | Bin 0 -> 228 bytes .../3f/777eb3d2c418fc9456d7cc6ad14b7c6c1e6e86 | 3 + .../3f/f98a9f792668cdac3a6a5347671cc51b2d08d3 | Bin 0 -> 116 bytes .../40/1e2b192d8c13a5a4bd75832051c8316c318927 | Bin 0 -> 47 bytes .../40/f8fd76162fe5473a8f47af3bce29cb1caf107e | Bin 0 -> 82 bytes .../42/80446fa9b38fa34775f1efe239f8a871678f4d | 1 + .../43/91e1ea300932d2edadfc2ddeb85720cbadf25d | Bin 0 -> 4485 bytes .../43/ceff7eb219367d571b08b5ee05757f28d19f69 | Bin 0 -> 2792 bytes .../43/e728c028b09d47a708434df9a4624a546c1757 | Bin 0 -> 47 bytes .../46/12c7512924b002596d5e400c8f7013429445b0 | Bin 0 -> 61 bytes .../46/70c29bd0bbe739af135861423cc9b6aa4213c6 | Bin 0 -> 4415 bytes .../47/cb55fab93aaf0e35b7c0f5ed6feb7980e378c9 | Bin 0 -> 70 bytes .../47/ec2c9a6513accb718f9f2762a22cb60bdb9893 | Bin 0 -> 47 bytes .../48/2bc14821c49fcbe38a9c409a73d0f403ff88e6 | Bin 0 -> 18 bytes .../48/512afb673b4d6c58d7b2e65ae033c5b92c4472 | Bin 0 -> 49 bytes .../48/f3efa1f1db1b04e9d2f2a966051f9d7736f244 | 2 + .../49/319a4ec2ab95c130ebec1a8e075b33cac9acc1 | Bin 0 -> 984 bytes .../49/fb3891ee38dc3a246c2e27480f1293c6c7c13e | Bin 0 -> 1580673 bytes .../4a/3713f2756f369a8034a8f646311d5471741629 | Bin 0 -> 342302 bytes .../4a/678cc620a110cc0220eefd42763adb519523a8 | Bin 0 -> 3048 bytes .../4a/fe783b2111e86ad3a2155b991b2c2135fa20a5 | 2 + .../4c/9f52f7e79f1f149e8f229859c9229889543867 | Bin 0 -> 19718 bytes .../4c/a28686c44976d6b6bbe31d454f1de552e8726c | Bin 0 -> 2544 bytes .../4d/32e2862a4c2be59e0edcf369469d7ddca03178 | Bin 0 -> 1649 bytes .../4d/4ea324ac90ce425a3256811f66cf2ab2f910d1 | Bin 0 -> 4505 bytes .../51/19f5e782d0adb4e4227ac2cf8714163b0625b6 | Bin 0 -> 20665 bytes .../51/79d3df0dc4ce6d36eace443551a40dab35ff41 | Bin 0 -> 48 bytes .../51/f6368b202486fe1d116ca74dfb8afbb17ea3e7 | Bin 0 -> 59 bytes .../51/fe95eb5dc6bf72330c36968512f718841715a4 | Bin 0 -> 3602 bytes .../52/028de0930de9c3aa47939474f27f89d5e81c84 | Bin 0 -> 727 bytes .../52/73d6c6d94c63141d4f9963a630878716c3f05a | Bin 0 -> 12987 bytes .../52/7fe272d7047409f033b11cdba2aa3385515977 | Bin 0 -> 219 bytes .../52/d541707af6e906743733579bbd05a2ac02f2b2 | 3 + .../54/3ddb1834ccb820f0cb3ca7f65e86954ad275a9 | Bin 0 -> 45 bytes .../55/f915374e4b42a5a9edb65631fe177453f5d25a | Bin 0 -> 124 bytes .../56/30afa8dfe40b445f1a2c0e938c030000a50ec0 | Bin 0 -> 1658 bytes .../56/4aa81238eb37eba7d319f31ad9c0e6504da33b | Bin 0 -> 782 bytes .../56/53fd74a48a9db3dd65d6b6f7ed39d2a6dc3888 | Bin 0 -> 45 bytes .../56/7d90cc85a313b1125333af3b34d12ef4f1d28e | 1 + .../56/a6051ca2b02b04ef92d5150c9ef600403cb1de | Bin 0 -> 16 bytes .../58/01ce82e80501087cfe2b724bb3866c0321aac1 | Bin 0 -> 179 bytes .../58/933eb406a099d615e390069aabef79c9cffdaa | Bin 0 -> 4121238 bytes .../58/e47f69d8286ca0e899424d075d11ec82682af6 | Bin 0 -> 2791 bytes .../58/fe02d3dfef09366e54ae53c956dc98e2db1ea8 | Bin 0 -> 2603 bytes .../5b/f5d80f562cfb5b407c298d416d247d9ee88236 | Bin 0 -> 60 bytes .../5c/87136e19a0d6fd468c4b045d79aae2a2e1ef50 | Bin 0 -> 822 bytes .../5c/88b2b7c00aab316739fce59ac8044459165750 | Bin 0 -> 39204 bytes .../5c/8ca6b875398cb04d0293ad9d21433a06f32ab9 | Bin 0 -> 114 bytes .../5c/a8621afdaee76cae8fc805c04dcafa91fb792d | Bin 0 -> 313 bytes .../5c/ba644a7cea3589a35725a08ea548da2390bcac | Bin 0 -> 47 bytes .../5f/6c87b4ec18b5fc57bafdc8a799803bfd84ff19 | Bin 0 -> 147 bytes .../5f/8640bca290e7708d80fb5fa8b52c2e69cc3d7b | 3 + .../5f/870cac1e2a9a47f42f5b2d8323f65ca1d69bd8 | Bin 0 -> 47 bytes .../5f/a5de460698f1bb961a3d16e15b6cbc381d4dac | Bin 0 -> 3363 bytes .../5f/a6ce90c91d3d8210ddf61127a724422e39bf7f | Bin 0 -> 611 bytes .../60/1f245f575611e9ee7dd20b1adfb34054ece53a | Bin 0 -> 214 bytes .../60/20b54fa3de86638f3177e9bad11df5d0232ff4 | Bin 0 -> 449070 bytes .../60/5659c461090611fc6f3a7c828210b023010b7a | Bin 0 -> 2636 bytes .../60/e01288e117fe780c526287ad0703b525479e16 | Bin 0 -> 66 bytes .../61/200d4b60c0dd15e6df7aed6d4bdf9d2626cdda | Bin 0 -> 62 bytes .../61/2bba15aa8b80e76101d0c031c93c737a88d786 | Bin 0 -> 724 bytes .../61/411b8cb37b99272f13aa8079ec46e13c421c67 | Bin 0 -> 367 bytes .../61/9a8cce87975cd599188c443e9f5add3a3490be | Bin 0 -> 4186 bytes .../61/b4ace8a9797ca63350d67dbb6dc81230080727 | Bin 0 -> 2555 bytes .../61/b6c81b2f2b29eea03f9516089eb864df189546 | Bin 0 -> 771 bytes .../61/bfedba98ba079a49741cb5ab50e6712207272b | Bin 0 -> 47 bytes .../61/c5ef1f397d45822972d6c88290c7bff49e3bb3 | Bin 0 -> 305712 bytes .../62/2c257cfcb1539ce183dd5205e2578ac1ab45d3 | Bin 0 -> 128 bytes .../65/60cfd1a71cd88f2874ce4637320d31d70c7265 | Bin 0 -> 3286443 bytes .../65/7329c10b527d3142fc1e922c23e5ec4c98d219 | Bin 0 -> 4067 bytes .../65/b0c4c87a55be4def76c7f08fddf1afa71bfb14 | Bin 0 -> 8195 bytes .../66/0fc01c83dffd65cc411e0469aa774f0f71b743 | Bin 0 -> 57 bytes .../66/be14e957ae4ede1e48267d9761436364a1bc7b | Bin 0 -> 148 bytes .../66/c145675ce0fd65e968e7656bf7f182fb5f6ee3 | Bin 0 -> 48 bytes .../66/e46e475ee71acdd01bc03fa54f9947dce76e92 | Bin 0 -> 114 bytes .../6a/294aa5b14ac464848e0bfb5de63659bfa3bedc | Bin 0 -> 18 bytes .../6b/356e80bc5f998979c357a42d0247138f9e033c | Bin 0 -> 2539 bytes .../6c/06015c5e937a3be4aeb03557ea1aa51c355d3c | Bin 0 -> 436 bytes .../6c/27a278414b92d504acd67400841ff279964633 | Bin 0 -> 3278 bytes .../6c/c922fad4c2f466c09574cfc699f9d2b425c52d | Bin 0 -> 1102 bytes .../6c/cda32b27a329d4e9295d60a03f179b6272fb68 | Bin 0 -> 51409 bytes .../6c/d89abcf7133c3ceea2dc72d3aa46660d94e475 | Bin 0 -> 55 bytes .../6e/044869b795fd67b1f534170ab253b0d1949483 | Bin 0 -> 214 bytes .../70/73ca2fad3a7b904cd164d01632d0f3cb370998 | Bin 0 -> 45 bytes .../71/57cf88240c726efea7b2be3245a96e4b763b86 | Bin 0 -> 2543 bytes .../71/5dc99cbe145ccc7a11dadcd6dd67796ad73863 | Bin 0 -> 365 bytes .../73/12d422d9041df3022dfc9a8828de730e5dba16 | Bin 0 -> 2002 bytes .../73/25a93c61c6844228d6f800e7d061b0d8f8acfb | 1 + .../73/444bacdc7aa2cf1c4d4a1c2a89aa65b6d07711 | Bin 0 -> 43340 bytes .../73/b1f96adf2f1145995093a0ebb925b6bd71edcb | Bin 0 -> 74 bytes .../73/e663cd2f206640e05c225ebcceea0b03d416d5 | Bin 0 -> 2854 bytes .../74/6fe32f5f63386aa5800c1135ea50b2400713fa | Bin 0 -> 2722 bytes .../75/1de6970611dd71c1c28a0daf1cd7c6a08c2599 | Bin 0 -> 5091 bytes .../76/1fe3bf2e32e0ebebf6124af005dfeadd19d974 | Bin 0 -> 41039 bytes .../76/e2362709f5a9491378627014fed63642b394aa | Bin 0 -> 763 bytes .../77/f73335ef694719019ecb3f58b8400dea8cb2de | Bin 0 -> 3249 bytes .../78/05f93896bf5d6a147c409cfa1d4360d2fc8abf | Bin 0 -> 5070 bytes .../78/0703e21d892cb53dbbc72ff4a662f776ca550e | 3 + .../78/584dc0b516ac50008089969cec0763b162deac | Bin 0 -> 556 bytes .../79/8082ed849bf17f8d2fd4a7ac6119364113356b | Bin 0 -> 17 bytes .../7a/047ac53d280cdc1a864831c689dc93b13a6619 | Bin 0 -> 61 bytes .../7a/07a6cdda5ad1f19f48982d6cab8f31a0f2c578 | Bin 0 -> 4506 bytes .../7a/297b8c6781f7ddcf936c5ec360b4ed7c611fb2 | Bin 0 -> 2615 bytes .../7a/3b405335aee913885f4ebab4677add598bcd57 | Bin 0 -> 2819 bytes .../7a/a3d6ee1a054c74b2edad32a13007cacfcb2c3f | Bin 0 -> 56 bytes .../7e/6734eaa7292439f01a4e751437f9c01b4f0eb0 | Bin 0 -> 912 bytes .../7e/7bcdd1e44510e3fa2a9a54c71c341cac95112b | Bin 0 -> 2612 bytes .../7e/98a11fa5ce9ede7efedf43602c9fd6762d3463 | Bin 0 -> 47 bytes .../7e/eb78dcd4183fea19c8640344644e594ada6802 | Bin 0 -> 1312 bytes .../7f/4948e94fe3204c58017edd0eaf02b0ddb03e09 | Bin 0 -> 2783 bytes .../7f/8e91139cc59c1e37b1fc4a7ef39c620e9370f7 | Bin 0 -> 47 bytes .../7f/9ba6e71bed9c4e4f125b397f09442aac11f17b | Bin 0 -> 57 bytes .../7f/c0b18d3f69a328cc44f6254ecf41674da624a1 | Bin 0 -> 48 bytes .../7f/d46b98a0ae2f82cbeb4163e20b6c0c32674c31 | Bin 0 -> 1820 bytes .../80/01553a495cb860f9f55064d13973d58af8ca5f | Bin 0 -> 2157 bytes .../80/1e2f3aa7dee907dc64c5b7e92113d878ad021f | 1 + .../80/4a41ea8ddb8377af675ab1aa534abaa808003a | Bin 0 -> 126421 bytes .../80/6ddd77f31a3076590a91ea180ad655f8041c09 | Bin 0 -> 111 bytes .../80/813e4dc9628def746a65400ea9fa390501dcf1 | Bin 0 -> 47 bytes .../81/2d25b93306ed73a2f809585631f30afc348194 | Bin 0 -> 17 bytes .../81/f1e7a74931b01356d0216fbec8da9bb506c83d | Bin 0 -> 5916 bytes .../82/76662669048d980280f2de19d4d1395c670622 | Bin 0 -> 2743 bytes .../82/8d6187bbba3ed4d015bd4cbfa2da9d9351456a | Bin 0 -> 60 bytes .../83/3b095873b42062c5ebbbc376dc392f88185b91 | Bin 0 -> 22745 bytes .../83/53e96910ef6a58c61ad65c4e742c583a1241b9 | Bin 0 -> 1688753 bytes .../83/f5c4f5e51cbb37cb4cbb7817d3df8709315348 | Bin 0 -> 61 bytes .../84/3746fc17bcae9beb08c677a875197f3f3b77f7 | Bin 0 -> 56 bytes .../84/6dea11a1c02484e7be49b5e91cc4a02a0fb02a | Bin 0 -> 14406 bytes .../84/c676c4f58bfef955925bd38d80b8aa5c6141f6 | Bin 0 -> 369996 bytes .../84/e291c63f61ba660b0a8d6e79b7362255dc990c | Bin 0 -> 2567 bytes .../84/f4c4c9f0914b99566491af90bd62d61a707445 | Bin 0 -> 87 bytes .../85/308156712a0d05911b90082ad23bf4e2e29dc2 | Bin 0 -> 45 bytes .../85/68b5b7d116bc70fc271e6d36378a6d7e90b62b | Bin 0 -> 9822 bytes .../85/bd075d4153d68a70aa6433fcd3e2f5f038d32b | Bin 0 -> 179 bytes .../86/5b95bd47a31436a8b94c40173d04c42b01c097 | Bin 0 -> 108 bytes .../86/caae8b9d2c816ab70032bd7972655fb0c80803 | Bin 0 -> 2572 bytes .../86/d631036ce6961b74ea43fc606f56dce1cfdf7f | Bin 0 -> 14813 bytes .../87/3bef4d622b29dd4122eadd4c7a7953f13f842a | Bin 0 -> 4953 bytes .../87/73f86035940e9386ebce62a62b0b642e9faadc | Bin 0 -> 3778 bytes .../87/c4282cf3f6e1c735773c97cc673d7d096b1ec7 | Bin 0 -> 81 bytes .../88/8a92ddbb58e04a13720c042ea87d1804778766 | Bin 0 -> 18 bytes .../88/944b823eb2e9cfb3fc29797a84758aab5c3a88 | Bin 0 -> 2652 bytes .../88/a8d0d87ae1bf7adf5e7c0f0ffc9dd23964b5e5 | Bin 0 -> 1678 bytes .../88/f5191e8a7c9d92da35c7d485e5c284c7a89763 | Bin 0 -> 30549 bytes .../89/25332df570873ad6524faa081e5d59368fbbf5 | Bin 0 -> 91 bytes .../89/c87369bf48fc835534e6626440ba546e435f51 | Bin 0 -> 58 bytes .../8c/415c6b2083c87e67469ca0e4a2b695b6e6d000 | Bin 0 -> 4313 bytes .../8c/41c6a4938358b68c7f2c515a375bc84f556b6b | Bin 0 -> 5258 bytes .../8c/87cfeae03ec9806e329c01d98eaa686c6217e1 | Bin 0 -> 62 bytes .../8c/da98e7a0cc30fb75437a3fca6b564e58c27f83 | Bin 0 -> 2597 bytes .../8c/dc1d2c8407858a60196fac9b60beb8b7cb71c3 | Bin 0 -> 2801 bytes .../8d/e469d4d0a0ac5b85d2a197d276555ba15b8a13 | Bin 0 -> 2562 bytes .../8f/7d508fcc94364df57c4c480dff2d136f276bcd | 1 + .../8f/93989ec9abf51473b89f3763c82ed1b1584d17 | Bin 0 -> 2534 bytes .../8f/d6cd4caa5ef36321fbc22679166562f0aa2f06 | Bin 0 -> 31372 bytes .../8f/f77a80d7a312ee5ff84107113a4b4423c8a71f | Bin 0 -> 2499828 bytes .../90/55cb633d0f80c767f5d47f8d89dff33f1917b4 | Bin 0 -> 3783495 bytes .../90/83bdb0f155e4b37cf4a88c01fa480ebb26ca23 | Bin 0 -> 4904 bytes .../90/b017854de7416072125048c01e8d51a63a1aa8 | 1 + .../90/d5279ec5de6a10c0ef1efc6ca36cf08fb46f7a | Bin 0 -> 6298 bytes .../93/63a17137f14df19034ee830428468cad5bf168 | Bin 0 -> 49 bytes .../93/abc5940e864d4944d2aa62e03c7cf7aab06ba6 | 4 + .../93/b47ae2ccd38d0111f52ee11a4f50add0fe8e2e | Bin 0 -> 51 bytes .../93/bc1bd866c339494ed9aa255131039ee15422ce | 4 + .../93/fc646ebb367e97a58597c988d4e56b7c5546d0 | Bin 0 -> 822 bytes .../98/0a48345abc47c1b8aef497ee31679020c7633c | Bin 0 -> 47 bytes .../9a/0150a9fe4a800ecf299ed095864dad15ad29e4 | Bin 0 -> 1619 bytes .../9a/72c7c3824c4530c9896679965cc311a9fe7746 | Bin 0 -> 1759 bytes .../9a/80df955dbfb1d7071359a00107f35e5d41a864 | Bin 0 -> 140 bytes .../9a/9865dbed9c638ae6af1d5627f8a51bf0579204 | Bin 0 -> 588 bytes .../9b/046f731af9fe06ca4645d53a2653e782b66fae | Bin 0 -> 601 bytes .../9b/56dc751c1cc7dff75ed80ccbb45f027058e8ce | Bin 0 -> 2862 bytes .../9b/846e6856ed38ea505d843aea06ed7dbf93fb71 | 3 + .../9b/91330a37258f62a8288ee71bf3307f008f2a10 | Bin 0 -> 2797 bytes .../9b/9caad1f8eb43385f1d74622051fe8f38d39f27 | Bin 0 -> 2568 bytes .../a1/16228e869ea572040366531b8935ebc32e85d7 | Bin 0 -> 48 bytes .../a1/b96d397019d2bc3e6174aabade83744389f63b | Bin 0 -> 4023 bytes .../a1/f401dc616f323b17b6a60f4d2b7a134028f72b | Bin 0 -> 321 bytes .../a4/0885917e911e1baa1edded6bfb56eea006dbb2 | Bin 0 -> 245 bytes .../a4/29c7219d30e797d4a6b3cfb579266f323dd030 | Bin 0 -> 6223 bytes .../a4/d300d48636e732a2a708b26381c5f55b30bb18 | Bin 0 -> 4569 bytes .../a4/ec2c5c2247a7a3995064cf0fb1e7a74004c225 | Bin 0 -> 4956 bytes .../a5/211140afa41f0e712f185e050d5a5decd32079 | Bin 0 -> 48 bytes .../a5/49ded3961f3e74f007f8b8cc4139662e4c7399 | Bin 0 -> 1723 bytes .../a5/ef711d28fbd8cded7b78aad33d85826c3e19e9 | Bin 0 -> 470 bytes .../a7/2f6a64c6d1763ec553f453e09e3b7bd47ff19d | Bin 0 -> 359 bytes .../a7/5a2e16a06c840cb13f802dd24927d35eff2bdc | Bin 0 -> 20494 bytes .../a7/5a3dad73783002a63dfa9e516c7c5131ea7fab | 4 + .../a7/5c1fac47277b4711f5b0036204c07b09e5b50c | Bin 0 -> 67 bytes .../a7/7e48f9609b912d3e488ef5f6bc6dd8f4a278b4 | Bin 0 -> 47 bytes .../a7/94ed5630fc48fd799d9cd64d1802441998053b | Bin 0 -> 3605 bytes .../a7/e91f7d4ba81835bce5614163a8721e809c92b4 | Bin 0 -> 79 bytes .../a8/8c5bd9b5f17af70ab9601a781388418e0b772f | Bin 0 -> 253968 bytes .../a8/e7ed70102ee5b766456fb055b833fe47f9f26f | Bin 0 -> 18 bytes .../a9/47b6c304bdd5181562035a99a7bb4e74637bfa | Bin 0 -> 29 bytes .../a9/f80ae0249093f1db8b14f71053acce35747e3d | Bin 0 -> 17 bytes .../ad/3f9c9d47daa186c59e667a30320a50f1265615 | Bin 0 -> 3230 bytes .../ad/85c61265b840464e838f869a7f7f30b3bf0e0f | Bin 0 -> 41005 bytes .../ad/a3868496584cc48e25802c1196ee1bfc2600ef | Bin 0 -> 2046 bytes .../ad/a765109b6a21da055084d4e48a4dfcd480697e | Bin 0 -> 4636 bytes .../ad/c2db0fb080d089a7580676e2d1e64b91cf0250 | Bin 0 -> 797 bytes .../ad/fa4d90cd3b208fd65ddacdc7bc813475b10b83 | Bin 0 -> 247 bytes .../af/452f874398472e73d659f8971598fce28a551e | Bin 0 -> 111 bytes .../af/a2d2b97bdd9cc04d1523429f3d14171c0ac186 | Bin 0 -> 2587 bytes .../af/f1e35fa1ded8433960e247027a65de0c8ecfc9 | Bin 0 -> 62 bytes .../b0/41f792deb034128baae6bf0953dabf51c51ab6 | Bin 0 -> 62 bytes .../b0/c43444921f40feed4c4506447874fa61c9d5b7 | Bin 0 -> 11189 bytes .../b2/a9d0bf7bd463a6361898b36f010edd05c0cf6e | Bin 0 -> 1844 bytes .../b2/c5446f61370a193ae2147475cfe0d28bda8806 | Bin 0 -> 128 bytes .../b2/d5b7aba351db62a182c55763343dab54e25042 | Bin 0 -> 1064 bytes .../b2/ef39b7b99f7197666750f517124fcf49ae5faa | Bin 0 -> 368 bytes .../b2/efafcbc7252ea6915631ae98a5b4ed53ca04fa | Bin 0 -> 9894 bytes .../b2/fec41466c83cdfceefef491283b36c7f2c6c70 | Bin 0 -> 55 bytes .../b5/0f86caf963bf483b6ea707cc9d6b389d8ac70c | Bin 0 -> 3974 bytes .../b5/64dd22e31f8c5915494ce25867dc92c5c71ae3 | Bin 0 -> 45 bytes .../b6/0db521984b45977c8d21219eb9a145cdf3c0b2 | Bin 0 -> 2590 bytes .../b6/4f35e0817be741b9ad9014dea60c9d7a43c9fb | Bin 0 -> 3950 bytes .../b6/d36014cf3b98cbb4831a5c8dd5628570a35852 | Bin 0 -> 672 bytes .../b7/3106511e2add44d5611191274d4586e0446c70 | Bin 0 -> 1047 bytes .../b7/3828b5c5f95918c7abd1123fcc9f5b0c4becb9 | Bin 0 -> 17321 bytes .../b7/dc91120ef99841038923626b75352022625c6e | Bin 0 -> 216 bytes .../b7/e4fd67eb36b628a8bf03a2e747b09ff67017b9 | Bin 0 -> 2597 bytes .../bf/d9b3abe648f71482cf7143c949d7b4bdadcae6 | Bin 0 -> 47 bytes .../bf/f7b3b7d18ad2fd923d2cbfd4f2fb601abc73c7 | Bin 0 -> 18609 bytes .../c1/09d41e374e7fd73d8d29a1d420e258e7433690 | Bin 0 -> 57 bytes .../c1/212b745a1a958b34d6dca9baac3dc579ba69ae | Bin 0 -> 1475 bytes .../c1/29a362ae0768284161653966fb7d99b0a2853a | Bin 0 -> 62864 bytes .../c1/41aa72e589db90292ea092c242027e04a098d4 | Bin 0 -> 40231 bytes .../c1/f28126a76ee9c02e0cedbca27c5baa6fef37da | Bin 0 -> 45 bytes .../c3/13eeb1404ea6e7d459140b6bf81f8288eac397 | 5 + .../c3/93062c3eca2a1f8282ea821de1d7c8803b3dd3 | Bin 0 -> 361 bytes .../c3/eef538cf2b8ea8f8a3b1d5fb5271452ad8a10a | Bin 0 -> 1896 bytes .../c4/46bb37547947b574c756efccb122a67ae30888 | Bin 0 -> 1782 bytes .../c4/8c1a839f22d46a67f9296524ce467000cac804 | Bin 0 -> 3756 bytes .../c4/f29c94a63c23f6444c5b46f039ed6bd727a908 | Bin 0 -> 242 bytes .../c5/0748de7d8d5339a157655736a680c811ad8f67 | Bin 0 -> 9313 bytes .../c5/1e0e531b586d71bb698a090ba3feb37f6f421f | Bin 0 -> 131 bytes .../c6/49f0ace2bfb58c9a36143453aa7cdb72e963c3 | Bin 0 -> 60 bytes .../c6/8ea7abbf5810c6581de09e331d158e9ce26912 | Bin 0 -> 29300 bytes .../c9/1879875d6c766425371c9179bcec2dda997141 | Bin 0 -> 4588 bytes .../c9/98a4c1db97edbad6d7592a01ece2ba48ee3cc5 | Bin 0 -> 33 bytes .../c9/d69f1e4f8dc452d11b4c0da2a32ce52724a689 | Bin 0 -> 4663 bytes .../cb/027fc4550beab95edb12a4c4c3cf5e2615e713 | Bin 0 -> 417107 bytes .../cb/49add39e8550778fb4b135f34712d0c8081ada | Bin 0 -> 768 bytes .../cb/fc7487e3165883e0b005311c0efc1155cd0a58 | Bin 0 -> 4385 bytes .../cd/2a899d3c6c34d0049b92c6d81c7f19bab4186c | Bin 0 -> 696296 bytes .../cd/76a247a5d7f5a55a0d14bb8935daf2f8f78df8 | Bin 0 -> 69 bytes .../cd/7bd37018220cd089db3dcbc923742e4588dfdf | Bin 0 -> 47 bytes .../cd/f707356ccbd28d1c27db3b575c33f4f9df204a | Bin 0 -> 4653 bytes .../ce/0f3596ee8dae8546fb12ca50d7a1fceaea609d | Bin 0 -> 577 bytes .../ce/3dfcb94e28c90e99b1cde73236eeb6ddef8f01 | Bin 0 -> 226 bytes .../ce/805ca96242916773494c35868ea830daea5e74 | Bin 0 -> 3916 bytes .../ce/9594062bcc2bc603c6caba46a60a2e1d3d1435 | 1 + .../ce/c4691bd77129fa53940300e690237320d28655 | Bin 0 -> 2567 bytes .../ce/d6b41a25fd8eed3d76fc7f49820887a2366ea1 | Bin 0 -> 3930086 bytes .../ce/e90743a3282961a6909d201d14117181875d50 | Bin 0 -> 15576 bytes .../d0/c7a2114e7a20a6b048fbecf180e8975d28c6ad | Bin 0 -> 46076 bytes .../d0/f3fd9a7f1b30879ffaf3abc23d8ac0bf0970d6 | Bin 0 -> 2573 bytes .../d2/0cc62fa2decdcf6273020653a007502c5582c4 | Bin 0 -> 241 bytes .../d2/2d2becdabb718538bf01fd37026bb3dbbba44e | Bin 0 -> 4153 bytes .../d2/deb82521f8094dfe65c79298453a7f67788f6e | Bin 0 -> 50 bytes .../d3/71423f5f2c572789da7a118e5aef799f58d8f4 | Bin 0 -> 70 bytes .../d3/c76016f2c463d87a4972ce937d02fff6901f71 | Bin 0 -> 156 bytes .../d8/13efb8bcb4357bc8506574b2c49346b239683c | Bin 0 -> 1268 bytes .../d8/1a8e22eae44ad1084ec867bace3185c6dbf250 | Bin 0 -> 47 bytes .../db/cb3be78d0b30fd6494e2c3a79247615c04dc8e | Bin 0 -> 2565 bytes .../df/687f2eb87052e9fe4d2dcbfc169d9495bfff74 | Bin 0 -> 5102 bytes .../df/6cd7f439db8cf3cb8f56981b9d0a7ae294273b | Bin 0 -> 4634 bytes .../df/7b8f5a55abcb9b2b253c6fda98ace1898881b1 | Bin 0 -> 122 bytes .../df/c1ea41554e16354672e7512a15bdcdbd4c8386 | Bin 0 -> 55 bytes .../df/d4e7d744e8ce6bb2d659a89668241ad98dcd8e | Bin 0 -> 77 bytes .../df/ed011abd3ec6df00beea7615cff44a1fdf9af2 | Bin 0 -> 48 bytes .../e1/18db677944d8c23af685dfd5295a797590c5e1 | Bin 0 -> 56 bytes .../e1/7dfd4a0004da22960c92deb1647099cb45702f | 2 + .../e2/9ca2a61524a204219a142d527b4833cea5047f | Bin 0 -> 46 bytes .../e3/08b606d4e63455057c08a43e74c5631e17eb15 | Bin 0 -> 4808 bytes .../e3/bbf225aa3310cdfeec2fe5513cae6de42f7d43 | Bin 0 -> 18 bytes .../e3/d61961db69772dab111401f27b911b8a74ef5e | Bin 0 -> 4565 bytes .../e3/ed27d64e17905f2ea4e370622d916446eba9f6 | Bin 0 -> 139 bytes .../e7/110ec12c5d2f8269805fd67ead52c8d0e4bf5e | Bin 0 -> 68 bytes .../e7/75ac150786e280de9c82067a0623920c20ca8b | Bin 0 -> 295 bytes .../e7/e626574780637abd55ae3f2790352e14ce09c3 | Bin 0 -> 424 bytes .../e9/0d35d04becf67f5c02e5b2af5eddc71cabede0 | Bin 0 -> 3405 bytes .../e9/76589d8a6ad227acfbfabf16c01b6f7878bd5d | Bin 0 -> 70 bytes .../e9/eed802e7df5d6989158c3bcfc58cd30dea7d81 | Bin 0 -> 141577 bytes .../ea/0cd6fbb8719ccb107dc5f4dadf33a55e521b5d | Bin 0 -> 46 bytes .../ea/53e153faa830df95cdadafef5929e15b62b02c | Bin 0 -> 28598 bytes .../eb/31c9e51493408788b2b315dd3884c0d61de43c | Bin 0 -> 46 bytes .../eb/4a58c0855a598147a76b0e6f013637114951c9 | Bin 0 -> 2566 bytes .../eb/6b865feba6c1b2dc07bfdb842016832cef1016 | Bin 0 -> 58 bytes .../eb/ded20acfd7137ff458c81c66914332f66e0d5d | Bin 0 -> 108 bytes .../ec/0fb6914d980e6632862e47a5e62a76b4052db4 | Bin 0 -> 2596 bytes .../ec/29cec978359d9c1494f9d95d490a3c67638eaa | Bin 0 -> 45 bytes .../ec/72700df2d4cce63f0018044d53a0ea3da5548b | Bin 0 -> 109840 bytes .../ec/8ad90f2b25d014115edba4935bf6feb9fe78e4 | Bin 0 -> 350262 bytes .../ec/c213ea7e44f0b519db95d91a089ff35043998e | Bin 0 -> 2740 bytes .../ec/dd4fb5aa85228b167d95327dd69274dc0efda4 | 1 + .../ec/e2739145b3de04f61e5649cd8de77827e5f8e7 | Bin 0 -> 3266 bytes .../ec/e82d4c61d6e6880e3f68f16f3071ca758a37cf | Bin 0 -> 48 bytes .../ed/45ee1e0c4fe5e8e1393101cc3f92e2fc4d1845 | Bin 0 -> 18 bytes .../ed/f5541ff0f904daea392da7e829faa8b78e6d01 | Bin 0 -> 6320 bytes .../ee/738fa9f4b5854b16a483800c2fc1c72733d59d | Bin 0 -> 347 bytes .../ee/7736abe15ca2b9e0da3f36ae994b13a0dfd7d6 | Bin 0 -> 345 bytes .../ee/7bb7d8fa485db20d433c32fee61aac8f916ab4 | Bin 0 -> 523 bytes .../ee/8588127461d8cbf66f763fae6cfa40431404d5 | Bin 0 -> 555 bytes .../ef/0a9a7ae755497cdb90dedb21a8ffdbc82966ae | 2 + .../ef/466401365f4b7a28f709f16a1707115799f3dc | Bin 0 -> 3818 bytes .../ef/945c56aee06e5becbe7e54df3582999b16ad26 | Bin 0 -> 2570 bytes .../ef/9b01a66abea25eda3aa7c53b6499bb20a461ba | Bin 0 -> 248 bytes .../ef/beac6f7efad8eaa5ea44c59d1eccaf7ffe1626 | Bin 0 -> 1143 bytes .../f2/7142bab679c45b6f768b2452eae133b69a5eda | Bin 0 -> 74 bytes .../f2/722d0b67c0ee0d6064307ae9a15f354401e2eb | Bin 0 -> 14919 bytes .../f3/31e04209fa4fd05e428b8dc418fb840af3a177 | Bin 0 -> 2555 bytes .../f3/8b16b011b322c80d4ef4e47071292f4e48ce0d | Bin 0 -> 1142235 bytes .../f3/ce2910b218507d348bcd3c33b25578ca13c2bc | Bin 0 -> 234 bytes .../f4/e021e59dbe8465ecf4406d75491069665f6d40 | Bin 0 -> 2581 bytes .../f6/1e07eccb68da58d5c52079b1f5577a753a50cd | 2 + .../f6/20c4078293812e22ddf3275f49688a2aacc105 | Bin 0 -> 81173 bytes .../f6/4a8c905646bb3632482d7654623f5df9c2fd31 | Bin 0 -> 3961 bytes .../f6/8cf44af94ff576253ddef50bf5cd5fd601b35a | Bin 0 -> 47 bytes .../f6/a2246c29022e40a77ccdad5a1f45dd6d0c5f8b | Bin 0 -> 4533 bytes .../f7/6dd238ade08917e6712764a16a22005a50573d | Bin 0 -> 16 bytes .../f8/8aec1ab2b5f690f03a157f3bbeb41871cebc54 | Bin 0 -> 1401 bytes .../f9/0af36980c40ad1db629290a75b8ab4129dbde4 | Bin 0 -> 92646 bytes .../f9/22af3427acb58974c3d1007ed8cf67842e3750 | Bin 0 -> 93 bytes .../f9/4ba4e7c176037d781fa462a5cc388f1d85de12 | Bin 0 -> 918 bytes .../f9/98af32077eb6c1ca42d245aa8fd091561bd5f4 | Bin 0 -> 4010 bytes .../fa/0c0b7ffc10f9ccce7682b6506eb2965a06ad04 | Bin 0 -> 4755 bytes .../fa/17a0a845921a7aa7e6622e3ee78f2ffbd31ff7 | Bin 0 -> 2775 bytes .../fa/22a1ea430a015a69cb9aa1acd8111cb446e24f | Bin 0 -> 1517 bytes .../fa/5c971cf492cc6b1330fc24a4a796201520280a | Bin 0 -> 48 bytes .../fa/5faf7e98b2b94117ad8098f2c98aa98fe65023 | Bin 0 -> 46752 bytes .../fa/902fa8b4ec3b0b75d9e4917b34547e68e2913d | Bin 0 -> 17 bytes .../fa/f3fa860c76a47caf3feb6eaa1eb0438b854c9a | Bin 0 -> 755184 bytes .../fa/fdd7f99a06a6607e659b77cde6ec7be9caecca | Bin 0 -> 4899 bytes .../fb/68f0ae06adec33f31cd56c3a89fe14f73f1efb | Bin 0 -> 321 bytes .../fb/6af826ac23fa50d7bcfdabe66b1bf2fc22c623 | Bin 0 -> 54 bytes .../fb/70b39ac2121710d6b1524cfcd132dd2611e97b | Bin 0 -> 133 bytes .../fb/917286390153ec7ee16ad1843a743663e7e523 | Bin 0 -> 532 bytes .../fb/e805bfa690a1a8fdd8f39ae21d63deb2401583 | Bin 0 -> 2584 bytes .../fc/c69b1d93a9a120652ca291c3992c1c749c0cef | Bin 0 -> 558 bytes .../fc/c89967e1bdca9ecd2bcec0eaded60a6bb383e8 | 2 + .../fc/e65edcc9e8225fb850b7c7cc145de43fea3e0b | Bin 0 -> 54 bytes .../fd/442b7b748f5dd75edbf6d63799efc73fb800d1 | Bin 0 -> 64 bytes .../fd/5e6f29dd615e94dd084c8058074a0b13d7b185 | Bin 0 -> 5085 bytes .../fd/6a17dcd546ab4bc5921f212815fd5e01dbfac4 | Bin 0 -> 144135 bytes .../fd/6b42cff4dca52f9ee6da1cc7bbb0259cb3d5cc | Bin 0 -> 47738 bytes .../fe/a533ba3c841fe808815a47b539d0da5579e4b0 | Bin 0 -> 4495 bytes .../fe/c0e3208d5675adbdf54e7975b61de582c85c6d | Bin 0 -> 84708 bytes .../ff/0bce599cda81037d54548927f5013f3d00d119 | Bin 0 -> 604 bytes .../ff/13715977c2ed4a368b3df7b87f2493c900e562 | Bin 0 -> 55 bytes .../ff/3b59a03eb4fd09b406e4ad1cb2f7aadf4ba381 | Bin 0 -> 11203 bytes .../ff/916876ec0156e1aad64cb2bbc20f355bdda9a9 | Bin 0 -> 10283 bytes .../ff/930a2d64c0c9e8feb152600e74cadc7f467681 | Bin 0 -> 2628 bytes .../ff/bd130a1356fe570edcf6e1f34ef77ba0a56a22 | Bin 0 -> 4079 bytes .git_old/refs/remotes/github/master | 1 + .git_old/refs/remotes/local/master | 1 + .../.gradle_old/8.7/checksums/checksums.lock | Bin 0 -> 17 bytes .../.gradle_old/8.7/checksums/md5-checksums.bin | Bin 0 -> 69165 bytes .../.gradle_old/8.7/checksums/sha1-checksums.bin | Bin 0 -> 128429 bytes .../8.7/dependencies-accessors/gc.properties | 0 .../8.7/executionHistory/executionHistory.bin | Bin 0 -> 3307642 bytes .../8.7/executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .../.gradle_old/8.7/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle_old/8.7/fileHashes/fileHashes.bin | Bin 0 -> 76965 bytes .../.gradle_old/8.7/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../8.7/fileHashes/resourceHashesCache.bin | Bin 0 -> 19211 bytes android-app/.gradle_old/8.7/gc.properties | 0 .../buildOutputCleanup/buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../.gradle_old/buildOutputCleanup/outputFiles.bin | Bin 0 -> 21935 bytes android-app/.gradle_old/file-system.probe | Bin 0 -> 8 bytes android-app/.gradle_old/vcs-1/gc.properties | 0 .../src/main/kotlin/org/terst/nav/BarometerData.kt | 42 ++ .../kotlin/org/terst/nav/BarometerSensorManager.kt | 99 +++ .../kotlin/org/terst/nav/BarometerTrendView.kt | 72 +++ .../main/kotlin/org/terst/nav/LocationService.kt | 15 + .../src/main/kotlin/org/terst/nav/MainActivity.kt | 30 +- .../kotlin_old/org/terst/nav/AnchorAlarmManager.kt | 108 ++++ .../kotlin_old/org/terst/nav/AnchorWatchData.kt | 22 + .../kotlin_old/org/terst/nav/LocationService.kt | 254 ++++++++ .../main/kotlin_old/org/terst/nav/MainActivity.kt | 670 +++++++++++++++++++++ .../src/main/kotlin_old/org/terst/nav/PolarData.kt | 168 ++++++ .../kotlin_old/org/terst/nav/PolarDiagramView.kt | 270 +++++++++ .../app/src/main/res/layout/activity_main.xml | 47 +- android-app/app/src/main/res/values/colors.xml | 1 + android-app/app/src/main/res/values/dimens.xml | 0 android-app/app/src/main/res/values/strings.xml | 3 + android-app/app/src/main/res/values/themes.xml | 0 .../app/src/main/res_old/drawable/ic_anchor.xml | 9 + .../main/res_old/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + android-app/app/src/main/res_old/raw/mob_alarm.mp3 | 1 + android-app/app/src/main/temp/CompassRoseView.kt | 217 +++++++ .../app/src/main/temp/HeadingDataProcessor.kt | 108 ++++ android-app/app/src/test/kotlin/org/test.txt | 0 android-app/gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 android-app/gradlew.bat | 0 android-app/local.properties | 0 android-app/settings.gradle | 0 docs/RAW_NARRATIVE.md | 6 + 530 files changed, 2238 insertions(+), 4 deletions(-) create mode 100644 .git_old/logs/refs/remotes/github/master create mode 100644 .git_old/logs/refs/remotes/local/master create mode 100644 .git_old/objects/01/3ea45488da6e8e2cfe1ba5904ba58a26ee0105 create mode 100644 .git_old/objects/01/bdaa1da7d937c7e7d98e54ba912f88ab95c7f2 create mode 100644 .git_old/objects/02/61ffe786d577cbf825858c1d809303565756c1 create mode 100644 .git_old/objects/02/6c1986ae55df8b23409188c917e698a796509f create mode 100644 .git_old/objects/02/a94cc8cc0aad6b74d6cfd899b7527b2bbbc38b create mode 100644 .git_old/objects/02/b0f4216535b51d446045a3bc72f7890da2f6c1 create mode 100644 .git_old/objects/03/c03e788a2b407323d4d8bcd4f4ca970f16a66d create mode 100644 .git_old/objects/03/c80a94002463dd718e576725ab0cfcf0a74cb1 create mode 100644 .git_old/objects/03/e6a2f8d7b57bdce34b294d5ad7c4cb0687db17 create mode 100644 .git_old/objects/04/0614ef804ebb8e4d34fbb9dccb0ea1f5efb7ab create mode 100644 .git_old/objects/04/a3387aff7c97953a54229ed29590966175647e create mode 100644 .git_old/objects/05/4025ae7b22f170572ac4c8a7671bd8e8478be6 create mode 100644 .git_old/objects/05/f0832b5d5b550725c7e882ab5797a01511ce4b create mode 100644 .git_old/objects/06/37a088a01e8ddab3bf3fa98dbe804cbde1a0dc create mode 100644 .git_old/objects/06/959a3c39dee18b5274eff81d0cb5c513d17bb5 create mode 100644 .git_old/objects/06/cbab6375d69ac688183e1ab2103da48a4be8ec create mode 100644 .git_old/objects/06/dbb3c2d9c1fddf8f47a662638f84f41f8ec0c8 create mode 100644 .git_old/objects/07/b7738146fd3dd51a5fc95caf2dabbc486e307b create mode 100644 .git_old/objects/07/fc139079ec660e911f55c1e2a5f15b16b9bd2f create mode 100644 .git_old/objects/08/650b15f563ebd50a4c0b8c4a6ad55ebb6b8d30 create mode 100644 .git_old/objects/08/684c396d8367f96af62281f55f406756aad7e2 create mode 100644 .git_old/objects/08/98853965b558f9ee91862d9d1912173c23c246 create mode 100644 .git_old/objects/08/aa4d727361add1abea262a55505ceb78c95e99 create mode 100644 .git_old/objects/08/cdadab57dc28fab5ff838eae234484af0b7cfd create mode 100644 .git_old/objects/08/f4ebeab550e5b7670413a1d354bc2bba12a1d1 create mode 100644 .git_old/objects/09/16bd8a9765c2a0ad651da6e44038179ac89a56 create mode 100644 .git_old/objects/09/b6aa5d5af66190c76441f1a702f557bfa3ddd8 create mode 100644 .git_old/objects/0a/4e17383b5f644b604fb9e43be29b781d64ca26 create mode 100644 .git_old/objects/0a/d0df20c52a0c45d312768650810e100391588a create mode 100644 .git_old/objects/0c/ad87911c38df8fd057443c199c2e8688372e34 create mode 100644 .git_old/objects/0d/76ca1a76e1cc3a4a1312a7ebdd4038de4d1f0e create mode 100644 .git_old/objects/0d/878ae5a356eca475078b4b15a37305d25996f1 create mode 100644 .git_old/objects/0d/9a6ce42faa94eb2f36c956e90810b899cd0cb1 create mode 100644 .git_old/objects/0d/a156cc93b83232d88f5baa7e112bf79e9626ff create mode 100644 .git_old/objects/0d/e88076bc38804012ad32577592bbf5f88b3fc9 create mode 100644 .git_old/objects/0e/6c8bab1e097e09f5c695b14c706d67fcd9b209 create mode 100644 .git_old/objects/0e/98a3506df9da2ca9e934d0895c3e59d310db23 create mode 100644 .git_old/objects/0e/ba3a124eaf889ba6f9687d6981ddaabaa1e78d create mode 100644 .git_old/objects/0f/025c5eef5a69cf614237f39d512a1c32a5b491 create mode 100644 .git_old/objects/0f/34d26d08f2cb31928928f331488d6609719981 create mode 100644 .git_old/objects/0f/d650751fd8e3e4cf72233de771915f94c0f796 create mode 100644 .git_old/objects/10/036193fa4b85dc058d9dcefb5e0de6eaf7e3b5 create mode 100644 .git_old/objects/10/55d77d328b7c099f59fccb99b91469df89bf3c create mode 100644 .git_old/objects/10/7a9e478c05661bb77f1d600aa9199f473641e1 create mode 100644 .git_old/objects/10/7c64fce47d8f1f923a7a20b0a6799e387e6da4 create mode 100644 .git_old/objects/10/807e6a2fe5386940ed65bcd3a23a7a40d07c4f create mode 100644 .git_old/objects/10/d5a3fe2c99fb121523e751a8c77406318e5e60 create mode 100644 .git_old/objects/11/87cb75aff9caccd6929476c04ff30afca59db2 create mode 100644 .git_old/objects/14/10b5fc469f580416feaa0740977851a465e271 create mode 100644 .git_old/objects/14/a06c0c724eeb212e2bb205be9ed6c9a6562569 create mode 100644 .git_old/objects/14/e195bc2bbe25a5d674937c540c02eaf529f2ff create mode 100644 .git_old/objects/14/f8d29674d71dd115da3e3d07d808ef6995574f create mode 100644 .git_old/objects/18/630b243b5156de2d9910e92dece1a272847bdc create mode 100644 .git_old/objects/18/b8820074fda8fab0985073c03e74b88210449d create mode 100644 .git_old/objects/18/c133201a226d29c5ecd92cba8180db5c635a20 create mode 100644 .git_old/objects/18/e819c1f24d598a5a4ef23997b2ed7a57ca9b57 create mode 100644 .git_old/objects/19/54aa0089eeb2f14afc10b69d8cfda1d386a758 create mode 100644 .git_old/objects/19/65b6a927faa139adcdcb5b54b52e5ab5187599 create mode 100644 .git_old/objects/19/df7d6693875c91c44305ba910f696dc8aab1ab create mode 100644 .git_old/objects/19/ee4d5fdda38313840e84e2a335c44590fc980e create mode 100644 .git_old/objects/1c/472d04a6d1e79d17e0fa4cbef4f1bc747e08eb create mode 100644 .git_old/objects/1c/56c8fbc1d4ea8d37679e2196d9dd06e8896708 create mode 100644 .git_old/objects/1c/8b3faf250ec9e7823432494450d8f3f9d572f8 create mode 100644 .git_old/objects/1c/91b474990f6126b8bf66e3f245c215ab02bf75 create mode 100644 .git_old/objects/1c/e84db3a2a297e2dd6bd5d4b6a211bc037cb98e create mode 100644 .git_old/objects/1e/8c38e31de21bba4ce64175027ce97f4e243b0c create mode 100644 .git_old/objects/1e/f28296bce6f33bb163ed8c08e019c911ca2c20 create mode 100644 .git_old/objects/1f/b004429a404059cfde34fd15673274ac3b0db1 create mode 100644 .git_old/objects/1f/e02cbe76eeeac32f488ae970b1a018cb4c0235 create mode 100644 .git_old/objects/1f/f599e759c3a56ebf0a7c19847f737a76a15d47 create mode 100644 .git_old/objects/1f/fce7770822cb9f0e8cefba1dafb9a1c97e875d create mode 100644 .git_old/objects/20/445618aba29dfdc8553d4613fff41c4ad7c2f5 create mode 100644 .git_old/objects/20/bb6569b628c33327e8a53466496920c734aca8 create mode 100644 .git_old/objects/20/e1ce9bdf1153d8f7f0c3500984799343368aba create mode 100644 .git_old/objects/23/1d2ee68e82a818c776f2996a38a5df9c5ff499 create mode 100644 .git_old/objects/23/35e689f1486a86baa282d2200dae5ba51ddc67 create mode 100644 .git_old/objects/23/89c93e45fc43d34a229519f4031aaf4d50494e create mode 100644 .git_old/objects/23/95a15f990d6a64668d4de36312cef305cd6ec3 create mode 100644 .git_old/objects/23/a581be2bfd6232a1de2246f1512f11d856f601 create mode 100644 .git_old/objects/24/78c0e600dfd02698f5ff36ec8bba98317b0c9a create mode 100644 .git_old/objects/24/baed86102cae14cf54493c64a8570791eb811b create mode 100644 .git_old/objects/26/7d9f52ceedbd420d060090d3bbafce4423d1f8 create mode 100644 .git_old/objects/26/b1691b3981ab2731f798d7fdd3cf554172a2b6 create mode 100644 .git_old/objects/26/be0403019c3cb31fe6a93a1113a1badcf67d3d create mode 100644 .git_old/objects/27/25b968ef4a15dee09f51ce676b5481fba35705 create mode 100644 .git_old/objects/27/5d852f3cc7cefc2ae9053caf9a07167af1dcc6 create mode 100644 .git_old/objects/27/d1f5bff76c8c2821de6d900d881123fb6a81b7 create mode 100644 .git_old/objects/29/0be1f2cd98cdcbae2ea5f8e08d13a6bd7282c0 create mode 100644 .git_old/objects/29/58ef32684e4fed3ff316877693cc687d77f583 create mode 100644 .git_old/objects/29/9eedbe23b2a95aaae714f8728ff8f6f192fbf6 create mode 100644 .git_old/objects/2a/418e3b39b926719c85c60f8da227e5c567617e create mode 100644 .git_old/objects/2a/6441a73f043180f92cb72ca042e06dda7cd945 create mode 100644 .git_old/objects/2a/f6c39a22803efc8330fda85a210b2cb996d78e create mode 100644 .git_old/objects/2d/053afd279a1c787a96ea7ffa046566d7163799 create mode 100644 .git_old/objects/2d/0adaeb856985817dcf81833ebdcd98390e4ca5 create mode 100644 .git_old/objects/2d/20c165d514f028bd2d578040982e3db5eeef77 create mode 100644 .git_old/objects/2d/25e443b29f42fd199a4adabe61175a4e3c82a5 create mode 100644 .git_old/objects/2d/262588143b919231cbe2fa9f1eb35219fa668c create mode 100644 .git_old/objects/2d/34068aab328b7449983d3e299eb5b2594f0c06 create mode 100644 .git_old/objects/2d/4e27644bade87e0732cbb7633073007d5c7b6a create mode 100644 .git_old/objects/2d/6a8b7a2c854db504af93186e24faece3527d70 create mode 100644 .git_old/objects/2d/ea15f0ae9c2d7fe6a47e7ef700c1f04c279cb7 create mode 100644 .git_old/objects/30/4fa24f090304c45139ce7d97a27cbd5f063f09 create mode 100644 .git_old/objects/32/806a8d1ed1c374f30585f7b7ed25cde678e257 create mode 100644 .git_old/objects/32/954a0865a90fab633fffbfc2dc068b47c3d4c4 create mode 100644 .git_old/objects/33/0d41558af0a6abb6662cd29d36c27c5f7f1b19 create mode 100644 .git_old/objects/33/140ac7015f853a103da02560f38e3138eee519 create mode 100644 .git_old/objects/33/37b4a569c3dd2966cf0f66f5fe44b64247ecc9 create mode 100644 .git_old/objects/33/beb455612568ad671b60dd2cd4261a0984a8a7 create mode 100644 .git_old/objects/35/d8468081e635a14db5f96f8c4194ce106c7c9e create mode 100644 .git_old/objects/37/7b8e4a43d9ff130eb5c69ad5713ae127c66a92 create mode 100644 .git_old/objects/37/87e5b31f16a6e73f0d432f61b6fe6bc0e8cead create mode 100644 .git_old/objects/37/b76aa9769e0a30b3b75121abb5376b20d71ce3 create mode 100644 .git_old/objects/38/02b676fdca19867b4735da4644a56c44c4c33d create mode 100644 .git_old/objects/38/4893bc4bcc8adf16d09a8d52e3e96d33bcd82f create mode 100644 .git_old/objects/38/9bbce0699828e85c6ceb0ca64dc5d5e00d8c45 create mode 100644 .git_old/objects/38/9dc0bc367ed98105a961a5be97220d3bf6c2bf create mode 100644 .git_old/objects/3a/530d1d35bcbaae52ead7fcf7ef190449de644f create mode 100644 .git_old/objects/3a/cd13dd22eb2d78ef29e314ce6e5df810b79d5c create mode 100644 .git_old/objects/3a/db1a5b6b81d0865e0e3e92ab4518bd65debbb5 create mode 100644 .git_old/objects/3b/54559b684f1b22c6b69177096225c3ec69230a create mode 100644 .git_old/objects/3b/628a8a3201a1cb1ad2efad2cda2ee8e6065d81 create mode 100644 .git_old/objects/3b/cc94af78ca69df01a10b2ab9e7e470e6593ad4 create mode 100644 .git_old/objects/3b/cfe893ea8f88be8fa1bc2680034c2d6ba69a67 create mode 100644 .git_old/objects/3e/3495b8932c17c13dda8c7a27f56aee6ddf209c create mode 100644 .git_old/objects/3e/40fdfcead6ac0356c9dcec50e9dcdb92d5676c create mode 100644 .git_old/objects/3f/5118ee6ec11c3f3fbc939aaa2e66468f9cf9e2 create mode 100644 .git_old/objects/3f/777eb3d2c418fc9456d7cc6ad14b7c6c1e6e86 create mode 100644 .git_old/objects/3f/f98a9f792668cdac3a6a5347671cc51b2d08d3 create mode 100644 .git_old/objects/40/1e2b192d8c13a5a4bd75832051c8316c318927 create mode 100644 .git_old/objects/40/f8fd76162fe5473a8f47af3bce29cb1caf107e create mode 100644 .git_old/objects/42/80446fa9b38fa34775f1efe239f8a871678f4d create mode 100644 .git_old/objects/43/91e1ea300932d2edadfc2ddeb85720cbadf25d create mode 100644 .git_old/objects/43/ceff7eb219367d571b08b5ee05757f28d19f69 create mode 100644 .git_old/objects/43/e728c028b09d47a708434df9a4624a546c1757 create mode 100644 .git_old/objects/46/12c7512924b002596d5e400c8f7013429445b0 create mode 100644 .git_old/objects/46/70c29bd0bbe739af135861423cc9b6aa4213c6 create mode 100644 .git_old/objects/47/cb55fab93aaf0e35b7c0f5ed6feb7980e378c9 create mode 100644 .git_old/objects/47/ec2c9a6513accb718f9f2762a22cb60bdb9893 create mode 100644 .git_old/objects/48/2bc14821c49fcbe38a9c409a73d0f403ff88e6 create mode 100644 .git_old/objects/48/512afb673b4d6c58d7b2e65ae033c5b92c4472 create mode 100644 .git_old/objects/48/f3efa1f1db1b04e9d2f2a966051f9d7736f244 create mode 100644 .git_old/objects/49/319a4ec2ab95c130ebec1a8e075b33cac9acc1 create mode 100644 .git_old/objects/49/fb3891ee38dc3a246c2e27480f1293c6c7c13e create mode 100644 .git_old/objects/4a/3713f2756f369a8034a8f646311d5471741629 create mode 100644 .git_old/objects/4a/678cc620a110cc0220eefd42763adb519523a8 create mode 100644 .git_old/objects/4a/fe783b2111e86ad3a2155b991b2c2135fa20a5 create mode 100644 .git_old/objects/4c/9f52f7e79f1f149e8f229859c9229889543867 create mode 100644 .git_old/objects/4c/a28686c44976d6b6bbe31d454f1de552e8726c create mode 100644 .git_old/objects/4d/32e2862a4c2be59e0edcf369469d7ddca03178 create mode 100644 .git_old/objects/4d/4ea324ac90ce425a3256811f66cf2ab2f910d1 create mode 100644 .git_old/objects/51/19f5e782d0adb4e4227ac2cf8714163b0625b6 create mode 100644 .git_old/objects/51/79d3df0dc4ce6d36eace443551a40dab35ff41 create mode 100644 .git_old/objects/51/f6368b202486fe1d116ca74dfb8afbb17ea3e7 create mode 100644 .git_old/objects/51/fe95eb5dc6bf72330c36968512f718841715a4 create mode 100644 .git_old/objects/52/028de0930de9c3aa47939474f27f89d5e81c84 create mode 100644 .git_old/objects/52/73d6c6d94c63141d4f9963a630878716c3f05a create mode 100644 .git_old/objects/52/7fe272d7047409f033b11cdba2aa3385515977 create mode 100644 .git_old/objects/52/d541707af6e906743733579bbd05a2ac02f2b2 create mode 100644 .git_old/objects/54/3ddb1834ccb820f0cb3ca7f65e86954ad275a9 create mode 100644 .git_old/objects/55/f915374e4b42a5a9edb65631fe177453f5d25a create mode 100644 .git_old/objects/56/30afa8dfe40b445f1a2c0e938c030000a50ec0 create mode 100644 .git_old/objects/56/4aa81238eb37eba7d319f31ad9c0e6504da33b create mode 100644 .git_old/objects/56/53fd74a48a9db3dd65d6b6f7ed39d2a6dc3888 create mode 100644 .git_old/objects/56/7d90cc85a313b1125333af3b34d12ef4f1d28e create mode 100644 .git_old/objects/56/a6051ca2b02b04ef92d5150c9ef600403cb1de create mode 100644 .git_old/objects/58/01ce82e80501087cfe2b724bb3866c0321aac1 create mode 100644 .git_old/objects/58/933eb406a099d615e390069aabef79c9cffdaa create mode 100644 .git_old/objects/58/e47f69d8286ca0e899424d075d11ec82682af6 create mode 100644 .git_old/objects/58/fe02d3dfef09366e54ae53c956dc98e2db1ea8 create mode 100644 .git_old/objects/5b/f5d80f562cfb5b407c298d416d247d9ee88236 create mode 100644 .git_old/objects/5c/87136e19a0d6fd468c4b045d79aae2a2e1ef50 create mode 100644 .git_old/objects/5c/88b2b7c00aab316739fce59ac8044459165750 create mode 100644 .git_old/objects/5c/8ca6b875398cb04d0293ad9d21433a06f32ab9 create mode 100644 .git_old/objects/5c/a8621afdaee76cae8fc805c04dcafa91fb792d create mode 100644 .git_old/objects/5c/ba644a7cea3589a35725a08ea548da2390bcac create mode 100644 .git_old/objects/5f/6c87b4ec18b5fc57bafdc8a799803bfd84ff19 create mode 100644 .git_old/objects/5f/8640bca290e7708d80fb5fa8b52c2e69cc3d7b create mode 100644 .git_old/objects/5f/870cac1e2a9a47f42f5b2d8323f65ca1d69bd8 create mode 100644 .git_old/objects/5f/a5de460698f1bb961a3d16e15b6cbc381d4dac create mode 100644 .git_old/objects/5f/a6ce90c91d3d8210ddf61127a724422e39bf7f create mode 100644 .git_old/objects/60/1f245f575611e9ee7dd20b1adfb34054ece53a create mode 100644 .git_old/objects/60/20b54fa3de86638f3177e9bad11df5d0232ff4 create mode 100644 .git_old/objects/60/5659c461090611fc6f3a7c828210b023010b7a create mode 100644 .git_old/objects/60/e01288e117fe780c526287ad0703b525479e16 create mode 100644 .git_old/objects/61/200d4b60c0dd15e6df7aed6d4bdf9d2626cdda create mode 100644 .git_old/objects/61/2bba15aa8b80e76101d0c031c93c737a88d786 create mode 100644 .git_old/objects/61/411b8cb37b99272f13aa8079ec46e13c421c67 create mode 100644 .git_old/objects/61/9a8cce87975cd599188c443e9f5add3a3490be create mode 100644 .git_old/objects/61/b4ace8a9797ca63350d67dbb6dc81230080727 create mode 100644 .git_old/objects/61/b6c81b2f2b29eea03f9516089eb864df189546 create mode 100644 .git_old/objects/61/bfedba98ba079a49741cb5ab50e6712207272b create mode 100644 .git_old/objects/61/c5ef1f397d45822972d6c88290c7bff49e3bb3 create mode 100644 .git_old/objects/62/2c257cfcb1539ce183dd5205e2578ac1ab45d3 create mode 100644 .git_old/objects/65/60cfd1a71cd88f2874ce4637320d31d70c7265 create mode 100644 .git_old/objects/65/7329c10b527d3142fc1e922c23e5ec4c98d219 create mode 100644 .git_old/objects/65/b0c4c87a55be4def76c7f08fddf1afa71bfb14 create mode 100644 .git_old/objects/66/0fc01c83dffd65cc411e0469aa774f0f71b743 create mode 100644 .git_old/objects/66/be14e957ae4ede1e48267d9761436364a1bc7b create mode 100644 .git_old/objects/66/c145675ce0fd65e968e7656bf7f182fb5f6ee3 create mode 100644 .git_old/objects/66/e46e475ee71acdd01bc03fa54f9947dce76e92 create mode 100644 .git_old/objects/6a/294aa5b14ac464848e0bfb5de63659bfa3bedc create mode 100644 .git_old/objects/6b/356e80bc5f998979c357a42d0247138f9e033c create mode 100644 .git_old/objects/6c/06015c5e937a3be4aeb03557ea1aa51c355d3c create mode 100644 .git_old/objects/6c/27a278414b92d504acd67400841ff279964633 create mode 100644 .git_old/objects/6c/c922fad4c2f466c09574cfc699f9d2b425c52d create mode 100644 .git_old/objects/6c/cda32b27a329d4e9295d60a03f179b6272fb68 create mode 100644 .git_old/objects/6c/d89abcf7133c3ceea2dc72d3aa46660d94e475 create mode 100644 .git_old/objects/6e/044869b795fd67b1f534170ab253b0d1949483 create mode 100644 .git_old/objects/70/73ca2fad3a7b904cd164d01632d0f3cb370998 create mode 100644 .git_old/objects/71/57cf88240c726efea7b2be3245a96e4b763b86 create mode 100644 .git_old/objects/71/5dc99cbe145ccc7a11dadcd6dd67796ad73863 create mode 100644 .git_old/objects/73/12d422d9041df3022dfc9a8828de730e5dba16 create mode 100644 .git_old/objects/73/25a93c61c6844228d6f800e7d061b0d8f8acfb create mode 100644 .git_old/objects/73/444bacdc7aa2cf1c4d4a1c2a89aa65b6d07711 create mode 100644 .git_old/objects/73/b1f96adf2f1145995093a0ebb925b6bd71edcb create mode 100644 .git_old/objects/73/e663cd2f206640e05c225ebcceea0b03d416d5 create mode 100644 .git_old/objects/74/6fe32f5f63386aa5800c1135ea50b2400713fa create mode 100644 .git_old/objects/75/1de6970611dd71c1c28a0daf1cd7c6a08c2599 create mode 100644 .git_old/objects/76/1fe3bf2e32e0ebebf6124af005dfeadd19d974 create mode 100644 .git_old/objects/76/e2362709f5a9491378627014fed63642b394aa create mode 100644 .git_old/objects/77/f73335ef694719019ecb3f58b8400dea8cb2de create mode 100644 .git_old/objects/78/05f93896bf5d6a147c409cfa1d4360d2fc8abf create mode 100644 .git_old/objects/78/0703e21d892cb53dbbc72ff4a662f776ca550e create mode 100644 .git_old/objects/78/584dc0b516ac50008089969cec0763b162deac create mode 100644 .git_old/objects/79/8082ed849bf17f8d2fd4a7ac6119364113356b create mode 100644 .git_old/objects/7a/047ac53d280cdc1a864831c689dc93b13a6619 create mode 100644 .git_old/objects/7a/07a6cdda5ad1f19f48982d6cab8f31a0f2c578 create mode 100644 .git_old/objects/7a/297b8c6781f7ddcf936c5ec360b4ed7c611fb2 create mode 100644 .git_old/objects/7a/3b405335aee913885f4ebab4677add598bcd57 create mode 100644 .git_old/objects/7a/a3d6ee1a054c74b2edad32a13007cacfcb2c3f create mode 100644 .git_old/objects/7e/6734eaa7292439f01a4e751437f9c01b4f0eb0 create mode 100644 .git_old/objects/7e/7bcdd1e44510e3fa2a9a54c71c341cac95112b create mode 100644 .git_old/objects/7e/98a11fa5ce9ede7efedf43602c9fd6762d3463 create mode 100644 .git_old/objects/7e/eb78dcd4183fea19c8640344644e594ada6802 create mode 100644 .git_old/objects/7f/4948e94fe3204c58017edd0eaf02b0ddb03e09 create mode 100644 .git_old/objects/7f/8e91139cc59c1e37b1fc4a7ef39c620e9370f7 create mode 100644 .git_old/objects/7f/9ba6e71bed9c4e4f125b397f09442aac11f17b create mode 100644 .git_old/objects/7f/c0b18d3f69a328cc44f6254ecf41674da624a1 create mode 100644 .git_old/objects/7f/d46b98a0ae2f82cbeb4163e20b6c0c32674c31 create mode 100644 .git_old/objects/80/01553a495cb860f9f55064d13973d58af8ca5f create mode 100644 .git_old/objects/80/1e2f3aa7dee907dc64c5b7e92113d878ad021f create mode 100644 .git_old/objects/80/4a41ea8ddb8377af675ab1aa534abaa808003a create mode 100644 .git_old/objects/80/6ddd77f31a3076590a91ea180ad655f8041c09 create mode 100644 .git_old/objects/80/813e4dc9628def746a65400ea9fa390501dcf1 create mode 100644 .git_old/objects/81/2d25b93306ed73a2f809585631f30afc348194 create mode 100644 .git_old/objects/81/f1e7a74931b01356d0216fbec8da9bb506c83d create mode 100644 .git_old/objects/82/76662669048d980280f2de19d4d1395c670622 create mode 100644 .git_old/objects/82/8d6187bbba3ed4d015bd4cbfa2da9d9351456a create mode 100644 .git_old/objects/83/3b095873b42062c5ebbbc376dc392f88185b91 create mode 100644 .git_old/objects/83/53e96910ef6a58c61ad65c4e742c583a1241b9 create mode 100644 .git_old/objects/83/f5c4f5e51cbb37cb4cbb7817d3df8709315348 create mode 100644 .git_old/objects/84/3746fc17bcae9beb08c677a875197f3f3b77f7 create mode 100644 .git_old/objects/84/6dea11a1c02484e7be49b5e91cc4a02a0fb02a create mode 100644 .git_old/objects/84/c676c4f58bfef955925bd38d80b8aa5c6141f6 create mode 100644 .git_old/objects/84/e291c63f61ba660b0a8d6e79b7362255dc990c create mode 100644 .git_old/objects/84/f4c4c9f0914b99566491af90bd62d61a707445 create mode 100644 .git_old/objects/85/308156712a0d05911b90082ad23bf4e2e29dc2 create mode 100644 .git_old/objects/85/68b5b7d116bc70fc271e6d36378a6d7e90b62b create mode 100644 .git_old/objects/85/bd075d4153d68a70aa6433fcd3e2f5f038d32b create mode 100644 .git_old/objects/86/5b95bd47a31436a8b94c40173d04c42b01c097 create mode 100644 .git_old/objects/86/caae8b9d2c816ab70032bd7972655fb0c80803 create mode 100644 .git_old/objects/86/d631036ce6961b74ea43fc606f56dce1cfdf7f create mode 100644 .git_old/objects/87/3bef4d622b29dd4122eadd4c7a7953f13f842a create mode 100644 .git_old/objects/87/73f86035940e9386ebce62a62b0b642e9faadc create mode 100644 .git_old/objects/87/c4282cf3f6e1c735773c97cc673d7d096b1ec7 create mode 100644 .git_old/objects/88/8a92ddbb58e04a13720c042ea87d1804778766 create mode 100644 .git_old/objects/88/944b823eb2e9cfb3fc29797a84758aab5c3a88 create mode 100644 .git_old/objects/88/a8d0d87ae1bf7adf5e7c0f0ffc9dd23964b5e5 create mode 100644 .git_old/objects/88/f5191e8a7c9d92da35c7d485e5c284c7a89763 create mode 100644 .git_old/objects/89/25332df570873ad6524faa081e5d59368fbbf5 create mode 100644 .git_old/objects/89/c87369bf48fc835534e6626440ba546e435f51 create mode 100644 .git_old/objects/8c/415c6b2083c87e67469ca0e4a2b695b6e6d000 create mode 100644 .git_old/objects/8c/41c6a4938358b68c7f2c515a375bc84f556b6b create mode 100644 .git_old/objects/8c/87cfeae03ec9806e329c01d98eaa686c6217e1 create mode 100644 .git_old/objects/8c/da98e7a0cc30fb75437a3fca6b564e58c27f83 create mode 100644 .git_old/objects/8c/dc1d2c8407858a60196fac9b60beb8b7cb71c3 create mode 100644 .git_old/objects/8d/e469d4d0a0ac5b85d2a197d276555ba15b8a13 create mode 100644 .git_old/objects/8f/7d508fcc94364df57c4c480dff2d136f276bcd create mode 100644 .git_old/objects/8f/93989ec9abf51473b89f3763c82ed1b1584d17 create mode 100644 .git_old/objects/8f/d6cd4caa5ef36321fbc22679166562f0aa2f06 create mode 100644 .git_old/objects/8f/f77a80d7a312ee5ff84107113a4b4423c8a71f create mode 100644 .git_old/objects/90/55cb633d0f80c767f5d47f8d89dff33f1917b4 create mode 100644 .git_old/objects/90/83bdb0f155e4b37cf4a88c01fa480ebb26ca23 create mode 100644 .git_old/objects/90/b017854de7416072125048c01e8d51a63a1aa8 create mode 100644 .git_old/objects/90/d5279ec5de6a10c0ef1efc6ca36cf08fb46f7a create mode 100644 .git_old/objects/93/63a17137f14df19034ee830428468cad5bf168 create mode 100644 .git_old/objects/93/abc5940e864d4944d2aa62e03c7cf7aab06ba6 create mode 100644 .git_old/objects/93/b47ae2ccd38d0111f52ee11a4f50add0fe8e2e create mode 100644 .git_old/objects/93/bc1bd866c339494ed9aa255131039ee15422ce create mode 100644 .git_old/objects/93/fc646ebb367e97a58597c988d4e56b7c5546d0 create mode 100644 .git_old/objects/98/0a48345abc47c1b8aef497ee31679020c7633c create mode 100644 .git_old/objects/9a/0150a9fe4a800ecf299ed095864dad15ad29e4 create mode 100644 .git_old/objects/9a/72c7c3824c4530c9896679965cc311a9fe7746 create mode 100644 .git_old/objects/9a/80df955dbfb1d7071359a00107f35e5d41a864 create mode 100644 .git_old/objects/9a/9865dbed9c638ae6af1d5627f8a51bf0579204 create mode 100644 .git_old/objects/9b/046f731af9fe06ca4645d53a2653e782b66fae create mode 100644 .git_old/objects/9b/56dc751c1cc7dff75ed80ccbb45f027058e8ce create mode 100644 .git_old/objects/9b/846e6856ed38ea505d843aea06ed7dbf93fb71 create mode 100644 .git_old/objects/9b/91330a37258f62a8288ee71bf3307f008f2a10 create mode 100644 .git_old/objects/9b/9caad1f8eb43385f1d74622051fe8f38d39f27 create mode 100644 .git_old/objects/a1/16228e869ea572040366531b8935ebc32e85d7 create mode 100644 .git_old/objects/a1/b96d397019d2bc3e6174aabade83744389f63b create mode 100644 .git_old/objects/a1/f401dc616f323b17b6a60f4d2b7a134028f72b create mode 100644 .git_old/objects/a4/0885917e911e1baa1edded6bfb56eea006dbb2 create mode 100644 .git_old/objects/a4/29c7219d30e797d4a6b3cfb579266f323dd030 create mode 100644 .git_old/objects/a4/d300d48636e732a2a708b26381c5f55b30bb18 create mode 100644 .git_old/objects/a4/ec2c5c2247a7a3995064cf0fb1e7a74004c225 create mode 100644 .git_old/objects/a5/211140afa41f0e712f185e050d5a5decd32079 create mode 100644 .git_old/objects/a5/49ded3961f3e74f007f8b8cc4139662e4c7399 create mode 100644 .git_old/objects/a5/ef711d28fbd8cded7b78aad33d85826c3e19e9 create mode 100644 .git_old/objects/a7/2f6a64c6d1763ec553f453e09e3b7bd47ff19d create mode 100644 .git_old/objects/a7/5a2e16a06c840cb13f802dd24927d35eff2bdc create mode 100644 .git_old/objects/a7/5a3dad73783002a63dfa9e516c7c5131ea7fab create mode 100644 .git_old/objects/a7/5c1fac47277b4711f5b0036204c07b09e5b50c create mode 100644 .git_old/objects/a7/7e48f9609b912d3e488ef5f6bc6dd8f4a278b4 create mode 100644 .git_old/objects/a7/94ed5630fc48fd799d9cd64d1802441998053b create mode 100644 .git_old/objects/a7/e91f7d4ba81835bce5614163a8721e809c92b4 create mode 100644 .git_old/objects/a8/8c5bd9b5f17af70ab9601a781388418e0b772f create mode 100644 .git_old/objects/a8/e7ed70102ee5b766456fb055b833fe47f9f26f create mode 100644 .git_old/objects/a9/47b6c304bdd5181562035a99a7bb4e74637bfa create mode 100644 .git_old/objects/a9/f80ae0249093f1db8b14f71053acce35747e3d create mode 100644 .git_old/objects/ad/3f9c9d47daa186c59e667a30320a50f1265615 create mode 100644 .git_old/objects/ad/85c61265b840464e838f869a7f7f30b3bf0e0f create mode 100644 .git_old/objects/ad/a3868496584cc48e25802c1196ee1bfc2600ef create mode 100644 .git_old/objects/ad/a765109b6a21da055084d4e48a4dfcd480697e create mode 100644 .git_old/objects/ad/c2db0fb080d089a7580676e2d1e64b91cf0250 create mode 100644 .git_old/objects/ad/fa4d90cd3b208fd65ddacdc7bc813475b10b83 create mode 100644 .git_old/objects/af/452f874398472e73d659f8971598fce28a551e create mode 100644 .git_old/objects/af/a2d2b97bdd9cc04d1523429f3d14171c0ac186 create mode 100644 .git_old/objects/af/f1e35fa1ded8433960e247027a65de0c8ecfc9 create mode 100644 .git_old/objects/b0/41f792deb034128baae6bf0953dabf51c51ab6 create mode 100644 .git_old/objects/b0/c43444921f40feed4c4506447874fa61c9d5b7 create mode 100644 .git_old/objects/b2/a9d0bf7bd463a6361898b36f010edd05c0cf6e create mode 100644 .git_old/objects/b2/c5446f61370a193ae2147475cfe0d28bda8806 create mode 100644 .git_old/objects/b2/d5b7aba351db62a182c55763343dab54e25042 create mode 100644 .git_old/objects/b2/ef39b7b99f7197666750f517124fcf49ae5faa create mode 100644 .git_old/objects/b2/efafcbc7252ea6915631ae98a5b4ed53ca04fa create mode 100644 .git_old/objects/b2/fec41466c83cdfceefef491283b36c7f2c6c70 create mode 100644 .git_old/objects/b5/0f86caf963bf483b6ea707cc9d6b389d8ac70c create mode 100644 .git_old/objects/b5/64dd22e31f8c5915494ce25867dc92c5c71ae3 create mode 100644 .git_old/objects/b6/0db521984b45977c8d21219eb9a145cdf3c0b2 create mode 100644 .git_old/objects/b6/4f35e0817be741b9ad9014dea60c9d7a43c9fb create mode 100644 .git_old/objects/b6/d36014cf3b98cbb4831a5c8dd5628570a35852 create mode 100644 .git_old/objects/b7/3106511e2add44d5611191274d4586e0446c70 create mode 100644 .git_old/objects/b7/3828b5c5f95918c7abd1123fcc9f5b0c4becb9 create mode 100644 .git_old/objects/b7/dc91120ef99841038923626b75352022625c6e create mode 100644 .git_old/objects/b7/e4fd67eb36b628a8bf03a2e747b09ff67017b9 create mode 100644 .git_old/objects/bf/d9b3abe648f71482cf7143c949d7b4bdadcae6 create mode 100644 .git_old/objects/bf/f7b3b7d18ad2fd923d2cbfd4f2fb601abc73c7 create mode 100644 .git_old/objects/c1/09d41e374e7fd73d8d29a1d420e258e7433690 create mode 100644 .git_old/objects/c1/212b745a1a958b34d6dca9baac3dc579ba69ae create mode 100644 .git_old/objects/c1/29a362ae0768284161653966fb7d99b0a2853a create mode 100644 .git_old/objects/c1/41aa72e589db90292ea092c242027e04a098d4 create mode 100644 .git_old/objects/c1/f28126a76ee9c02e0cedbca27c5baa6fef37da create mode 100644 .git_old/objects/c3/13eeb1404ea6e7d459140b6bf81f8288eac397 create mode 100644 .git_old/objects/c3/93062c3eca2a1f8282ea821de1d7c8803b3dd3 create mode 100644 .git_old/objects/c3/eef538cf2b8ea8f8a3b1d5fb5271452ad8a10a create mode 100644 .git_old/objects/c4/46bb37547947b574c756efccb122a67ae30888 create mode 100644 .git_old/objects/c4/8c1a839f22d46a67f9296524ce467000cac804 create mode 100644 .git_old/objects/c4/f29c94a63c23f6444c5b46f039ed6bd727a908 create mode 100644 .git_old/objects/c5/0748de7d8d5339a157655736a680c811ad8f67 create mode 100644 .git_old/objects/c5/1e0e531b586d71bb698a090ba3feb37f6f421f create mode 100644 .git_old/objects/c6/49f0ace2bfb58c9a36143453aa7cdb72e963c3 create mode 100644 .git_old/objects/c6/8ea7abbf5810c6581de09e331d158e9ce26912 create mode 100644 .git_old/objects/c9/1879875d6c766425371c9179bcec2dda997141 create mode 100644 .git_old/objects/c9/98a4c1db97edbad6d7592a01ece2ba48ee3cc5 create mode 100644 .git_old/objects/c9/d69f1e4f8dc452d11b4c0da2a32ce52724a689 create mode 100644 .git_old/objects/cb/027fc4550beab95edb12a4c4c3cf5e2615e713 create mode 100644 .git_old/objects/cb/49add39e8550778fb4b135f34712d0c8081ada create mode 100644 .git_old/objects/cb/fc7487e3165883e0b005311c0efc1155cd0a58 create mode 100644 .git_old/objects/cd/2a899d3c6c34d0049b92c6d81c7f19bab4186c create mode 100644 .git_old/objects/cd/76a247a5d7f5a55a0d14bb8935daf2f8f78df8 create mode 100644 .git_old/objects/cd/7bd37018220cd089db3dcbc923742e4588dfdf create mode 100644 .git_old/objects/cd/f707356ccbd28d1c27db3b575c33f4f9df204a create mode 100644 .git_old/objects/ce/0f3596ee8dae8546fb12ca50d7a1fceaea609d create mode 100644 .git_old/objects/ce/3dfcb94e28c90e99b1cde73236eeb6ddef8f01 create mode 100644 .git_old/objects/ce/805ca96242916773494c35868ea830daea5e74 create mode 100644 .git_old/objects/ce/9594062bcc2bc603c6caba46a60a2e1d3d1435 create mode 100644 .git_old/objects/ce/c4691bd77129fa53940300e690237320d28655 create mode 100644 .git_old/objects/ce/d6b41a25fd8eed3d76fc7f49820887a2366ea1 create mode 100644 .git_old/objects/ce/e90743a3282961a6909d201d14117181875d50 create mode 100644 .git_old/objects/d0/c7a2114e7a20a6b048fbecf180e8975d28c6ad create mode 100644 .git_old/objects/d0/f3fd9a7f1b30879ffaf3abc23d8ac0bf0970d6 create mode 100644 .git_old/objects/d2/0cc62fa2decdcf6273020653a007502c5582c4 create mode 100644 .git_old/objects/d2/2d2becdabb718538bf01fd37026bb3dbbba44e create mode 100644 .git_old/objects/d2/deb82521f8094dfe65c79298453a7f67788f6e create mode 100644 .git_old/objects/d3/71423f5f2c572789da7a118e5aef799f58d8f4 create mode 100644 .git_old/objects/d3/c76016f2c463d87a4972ce937d02fff6901f71 create mode 100644 .git_old/objects/d8/13efb8bcb4357bc8506574b2c49346b239683c create mode 100644 .git_old/objects/d8/1a8e22eae44ad1084ec867bace3185c6dbf250 create mode 100644 .git_old/objects/db/cb3be78d0b30fd6494e2c3a79247615c04dc8e create mode 100644 .git_old/objects/df/687f2eb87052e9fe4d2dcbfc169d9495bfff74 create mode 100644 .git_old/objects/df/6cd7f439db8cf3cb8f56981b9d0a7ae294273b create mode 100644 .git_old/objects/df/7b8f5a55abcb9b2b253c6fda98ace1898881b1 create mode 100644 .git_old/objects/df/c1ea41554e16354672e7512a15bdcdbd4c8386 create mode 100644 .git_old/objects/df/d4e7d744e8ce6bb2d659a89668241ad98dcd8e create mode 100644 .git_old/objects/df/ed011abd3ec6df00beea7615cff44a1fdf9af2 create mode 100644 .git_old/objects/e1/18db677944d8c23af685dfd5295a797590c5e1 create mode 100644 .git_old/objects/e1/7dfd4a0004da22960c92deb1647099cb45702f create mode 100644 .git_old/objects/e2/9ca2a61524a204219a142d527b4833cea5047f create mode 100644 .git_old/objects/e3/08b606d4e63455057c08a43e74c5631e17eb15 create mode 100644 .git_old/objects/e3/bbf225aa3310cdfeec2fe5513cae6de42f7d43 create mode 100644 .git_old/objects/e3/d61961db69772dab111401f27b911b8a74ef5e create mode 100644 .git_old/objects/e3/ed27d64e17905f2ea4e370622d916446eba9f6 create mode 100644 .git_old/objects/e7/110ec12c5d2f8269805fd67ead52c8d0e4bf5e create mode 100644 .git_old/objects/e7/75ac150786e280de9c82067a0623920c20ca8b create mode 100644 .git_old/objects/e7/e626574780637abd55ae3f2790352e14ce09c3 create mode 100644 .git_old/objects/e9/0d35d04becf67f5c02e5b2af5eddc71cabede0 create mode 100644 .git_old/objects/e9/76589d8a6ad227acfbfabf16c01b6f7878bd5d create mode 100644 .git_old/objects/e9/eed802e7df5d6989158c3bcfc58cd30dea7d81 create mode 100644 .git_old/objects/ea/0cd6fbb8719ccb107dc5f4dadf33a55e521b5d create mode 100644 .git_old/objects/ea/53e153faa830df95cdadafef5929e15b62b02c create mode 100644 .git_old/objects/eb/31c9e51493408788b2b315dd3884c0d61de43c create mode 100644 .git_old/objects/eb/4a58c0855a598147a76b0e6f013637114951c9 create mode 100644 .git_old/objects/eb/6b865feba6c1b2dc07bfdb842016832cef1016 create mode 100644 .git_old/objects/eb/ded20acfd7137ff458c81c66914332f66e0d5d create mode 100644 .git_old/objects/ec/0fb6914d980e6632862e47a5e62a76b4052db4 create mode 100644 .git_old/objects/ec/29cec978359d9c1494f9d95d490a3c67638eaa create mode 100644 .git_old/objects/ec/72700df2d4cce63f0018044d53a0ea3da5548b create mode 100644 .git_old/objects/ec/8ad90f2b25d014115edba4935bf6feb9fe78e4 create mode 100644 .git_old/objects/ec/c213ea7e44f0b519db95d91a089ff35043998e create mode 100644 .git_old/objects/ec/dd4fb5aa85228b167d95327dd69274dc0efda4 create mode 100644 .git_old/objects/ec/e2739145b3de04f61e5649cd8de77827e5f8e7 create mode 100644 .git_old/objects/ec/e82d4c61d6e6880e3f68f16f3071ca758a37cf create mode 100644 .git_old/objects/ed/45ee1e0c4fe5e8e1393101cc3f92e2fc4d1845 create mode 100644 .git_old/objects/ed/f5541ff0f904daea392da7e829faa8b78e6d01 create mode 100644 .git_old/objects/ee/738fa9f4b5854b16a483800c2fc1c72733d59d create mode 100644 .git_old/objects/ee/7736abe15ca2b9e0da3f36ae994b13a0dfd7d6 create mode 100644 .git_old/objects/ee/7bb7d8fa485db20d433c32fee61aac8f916ab4 create mode 100644 .git_old/objects/ee/8588127461d8cbf66f763fae6cfa40431404d5 create mode 100644 .git_old/objects/ef/0a9a7ae755497cdb90dedb21a8ffdbc82966ae create mode 100644 .git_old/objects/ef/466401365f4b7a28f709f16a1707115799f3dc create mode 100644 .git_old/objects/ef/945c56aee06e5becbe7e54df3582999b16ad26 create mode 100644 .git_old/objects/ef/9b01a66abea25eda3aa7c53b6499bb20a461ba create mode 100644 .git_old/objects/ef/beac6f7efad8eaa5ea44c59d1eccaf7ffe1626 create mode 100644 .git_old/objects/f2/7142bab679c45b6f768b2452eae133b69a5eda create mode 100644 .git_old/objects/f2/722d0b67c0ee0d6064307ae9a15f354401e2eb create mode 100644 .git_old/objects/f3/31e04209fa4fd05e428b8dc418fb840af3a177 create mode 100644 .git_old/objects/f3/8b16b011b322c80d4ef4e47071292f4e48ce0d create mode 100644 .git_old/objects/f3/ce2910b218507d348bcd3c33b25578ca13c2bc create mode 100644 .git_old/objects/f4/e021e59dbe8465ecf4406d75491069665f6d40 create mode 100644 .git_old/objects/f6/1e07eccb68da58d5c52079b1f5577a753a50cd create mode 100644 .git_old/objects/f6/20c4078293812e22ddf3275f49688a2aacc105 create mode 100644 .git_old/objects/f6/4a8c905646bb3632482d7654623f5df9c2fd31 create mode 100644 .git_old/objects/f6/8cf44af94ff576253ddef50bf5cd5fd601b35a create mode 100644 .git_old/objects/f6/a2246c29022e40a77ccdad5a1f45dd6d0c5f8b create mode 100644 .git_old/objects/f7/6dd238ade08917e6712764a16a22005a50573d create mode 100644 .git_old/objects/f8/8aec1ab2b5f690f03a157f3bbeb41871cebc54 create mode 100644 .git_old/objects/f9/0af36980c40ad1db629290a75b8ab4129dbde4 create mode 100644 .git_old/objects/f9/22af3427acb58974c3d1007ed8cf67842e3750 create mode 100644 .git_old/objects/f9/4ba4e7c176037d781fa462a5cc388f1d85de12 create mode 100644 .git_old/objects/f9/98af32077eb6c1ca42d245aa8fd091561bd5f4 create mode 100644 .git_old/objects/fa/0c0b7ffc10f9ccce7682b6506eb2965a06ad04 create mode 100644 .git_old/objects/fa/17a0a845921a7aa7e6622e3ee78f2ffbd31ff7 create mode 100644 .git_old/objects/fa/22a1ea430a015a69cb9aa1acd8111cb446e24f create mode 100644 .git_old/objects/fa/5c971cf492cc6b1330fc24a4a796201520280a create mode 100644 .git_old/objects/fa/5faf7e98b2b94117ad8098f2c98aa98fe65023 create mode 100644 .git_old/objects/fa/902fa8b4ec3b0b75d9e4917b34547e68e2913d create mode 100644 .git_old/objects/fa/f3fa860c76a47caf3feb6eaa1eb0438b854c9a create mode 100644 .git_old/objects/fa/fdd7f99a06a6607e659b77cde6ec7be9caecca create mode 100644 .git_old/objects/fb/68f0ae06adec33f31cd56c3a89fe14f73f1efb create mode 100644 .git_old/objects/fb/6af826ac23fa50d7bcfdabe66b1bf2fc22c623 create mode 100644 .git_old/objects/fb/70b39ac2121710d6b1524cfcd132dd2611e97b create mode 100644 .git_old/objects/fb/917286390153ec7ee16ad1843a743663e7e523 create mode 100644 .git_old/objects/fb/e805bfa690a1a8fdd8f39ae21d63deb2401583 create mode 100644 .git_old/objects/fc/c69b1d93a9a120652ca291c3992c1c749c0cef create mode 100644 .git_old/objects/fc/c89967e1bdca9ecd2bcec0eaded60a6bb383e8 create mode 100644 .git_old/objects/fc/e65edcc9e8225fb850b7c7cc145de43fea3e0b create mode 100644 .git_old/objects/fd/442b7b748f5dd75edbf6d63799efc73fb800d1 create mode 100644 .git_old/objects/fd/5e6f29dd615e94dd084c8058074a0b13d7b185 create mode 100644 .git_old/objects/fd/6a17dcd546ab4bc5921f212815fd5e01dbfac4 create mode 100644 .git_old/objects/fd/6b42cff4dca52f9ee6da1cc7bbb0259cb3d5cc create mode 100644 .git_old/objects/fe/a533ba3c841fe808815a47b539d0da5579e4b0 create mode 100644 .git_old/objects/fe/c0e3208d5675adbdf54e7975b61de582c85c6d create mode 100644 .git_old/objects/ff/0bce599cda81037d54548927f5013f3d00d119 create mode 100644 .git_old/objects/ff/13715977c2ed4a368b3df7b87f2493c900e562 create mode 100644 .git_old/objects/ff/3b59a03eb4fd09b406e4ad1cb2f7aadf4ba381 create mode 100644 .git_old/objects/ff/916876ec0156e1aad64cb2bbc20f355bdda9a9 create mode 100644 .git_old/objects/ff/930a2d64c0c9e8feb152600e74cadc7f467681 create mode 100644 .git_old/objects/ff/bd130a1356fe570edcf6e1f34ef77ba0a56a22 create mode 100644 .git_old/refs/remotes/github/master create mode 100644 .git_old/refs/remotes/local/master create mode 100644 android-app/.gradle_old/8.7/checksums/checksums.lock create mode 100644 android-app/.gradle_old/8.7/checksums/md5-checksums.bin create mode 100644 android-app/.gradle_old/8.7/checksums/sha1-checksums.bin create mode 100644 android-app/.gradle_old/8.7/dependencies-accessors/gc.properties create mode 100644 android-app/.gradle_old/8.7/executionHistory/executionHistory.bin create mode 100644 android-app/.gradle_old/8.7/executionHistory/executionHistory.lock create mode 100644 android-app/.gradle_old/8.7/fileChanges/last-build.bin create mode 100644 android-app/.gradle_old/8.7/fileHashes/fileHashes.bin create mode 100644 android-app/.gradle_old/8.7/fileHashes/fileHashes.lock create mode 100644 android-app/.gradle_old/8.7/fileHashes/resourceHashesCache.bin create mode 100644 android-app/.gradle_old/8.7/gc.properties create mode 100644 android-app/.gradle_old/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 android-app/.gradle_old/buildOutputCleanup/cache.properties create mode 100644 android-app/.gradle_old/buildOutputCleanup/outputFiles.bin create mode 100644 android-app/.gradle_old/file-system.probe create mode 100644 android-app/.gradle_old/vcs-1/gc.properties create mode 100644 android-app/app/src/main/kotlin/org/terst/nav/BarometerData.kt create mode 100644 android-app/app/src/main/kotlin/org/terst/nav/BarometerSensorManager.kt create mode 100644 android-app/app/src/main/kotlin/org/terst/nav/BarometerTrendView.kt create mode 100644 android-app/app/src/main/kotlin_old/org/terst/nav/AnchorAlarmManager.kt create mode 100644 android-app/app/src/main/kotlin_old/org/terst/nav/AnchorWatchData.kt create mode 100644 android-app/app/src/main/kotlin_old/org/terst/nav/LocationService.kt create mode 100644 android-app/app/src/main/kotlin_old/org/terst/nav/MainActivity.kt create mode 100644 android-app/app/src/main/kotlin_old/org/terst/nav/PolarData.kt create mode 100644 android-app/app/src/main/kotlin_old/org/terst/nav/PolarDiagramView.kt mode change 100644 => 100755 android-app/app/src/main/res/values/colors.xml mode change 100644 => 100755 android-app/app/src/main/res/values/dimens.xml mode change 100644 => 100755 android-app/app/src/main/res/values/strings.xml mode change 100644 => 100755 android-app/app/src/main/res/values/themes.xml create mode 100644 android-app/app/src/main/res_old/drawable/ic_anchor.xml create mode 100644 android-app/app/src/main/res_old/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 android-app/app/src/main/res_old/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 android-app/app/src/main/res_old/raw/mob_alarm.mp3 create mode 100755 android-app/app/src/main/temp/CompassRoseView.kt create mode 100755 android-app/app/src/main/temp/HeadingDataProcessor.kt create mode 100755 android-app/app/src/test/kotlin/org/test.txt mode change 100644 => 100755 android-app/gradle/wrapper/gradle-wrapper.jar mode change 100644 => 100755 android-app/gradle/wrapper/gradle-wrapper.properties mode change 100644 => 100755 android-app/gradlew.bat mode change 100644 => 100755 android-app/local.properties mode change 100644 => 100755 android-app/settings.gradle diff --git a/.git_old/logs/refs/remotes/github/master b/.git_old/logs/refs/remotes/github/master new file mode 100644 index 0000000..55f52dc --- /dev/null +++ b/.git_old/logs/refs/remotes/github/master @@ -0,0 +1,9 @@ +0000000000000000000000000000000000000000 cc8e0c0221e2730b05b85f7577e0f7ebe93c43e2 Peter Stone 1773434689 +0000 update by push +cc8e0c0221e2730b05b85f7577e0f7ebe93c43e2 de76ff1737469545a5391db38ef3b0af6db14b2d Peter Stone 1773443052 +0000 pull --rebase github master: fast-forward +de76ff1737469545a5391db38ef3b0af6db14b2d 93abc5940e864d4944d2aa62e03c7cf7aab06ba6 Peter Stone 1773443056 +0000 update by push +93abc5940e864d4944d2aa62e03c7cf7aab06ba6 15c6c9be5934878c52760c12d29c8ac47a1fa8b1 Peter Stone 1773443144 +0000 update by push +15c6c9be5934878c52760c12d29c8ac47a1fa8b1 801e2f3aa7dee907dc64c5b7e92113d878ad021f Peter Stone 1773443209 +0000 update by push +801e2f3aa7dee907dc64c5b7e92113d878ad021f 4e9bb7d776298144bb40b2bb11be6b37877ed851 Peter Stone 1773443353 +0000 update by push +4e9bb7d776298144bb40b2bb11be6b37877ed851 3f777eb3d2c418fc9456d7cc6ad14b7c6c1e6e86 Peter Stone 1773443506 +0000 update by push +3f777eb3d2c418fc9456d7cc6ad14b7c6c1e6e86 48f3efa1f1db1b04e9d2f2a966051f9d7736f244 Peter Stone 1773445655 +0000 update by push +48f3efa1f1db1b04e9d2f2a966051f9d7736f244 2f4283b85337d018fe0ee5d88a132f6476f3d6b0 Peter Stone 1773446274 +0000 update by push diff --git a/.git_old/logs/refs/remotes/local/master b/.git_old/logs/refs/remotes/local/master new file mode 100644 index 0000000..f9aa2e9 --- /dev/null +++ b/.git_old/logs/refs/remotes/local/master @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 0b3fc43df0f522a9d2b308c79b35870e3afb08db Peter Stone 1773396666 +0000 update by push diff --git a/.git_old/objects/01/3ea45488da6e8e2cfe1ba5904ba58a26ee0105 b/.git_old/objects/01/3ea45488da6e8e2cfe1ba5904ba58a26ee0105 new file mode 100644 index 0000000..144fa8e Binary files /dev/null and b/.git_old/objects/01/3ea45488da6e8e2cfe1ba5904ba58a26ee0105 differ diff --git a/.git_old/objects/01/bdaa1da7d937c7e7d98e54ba912f88ab95c7f2 b/.git_old/objects/01/bdaa1da7d937c7e7d98e54ba912f88ab95c7f2 new file mode 100644 index 0000000..4a39d31 Binary files /dev/null and b/.git_old/objects/01/bdaa1da7d937c7e7d98e54ba912f88ab95c7f2 differ diff --git a/.git_old/objects/02/61ffe786d577cbf825858c1d809303565756c1 b/.git_old/objects/02/61ffe786d577cbf825858c1d809303565756c1 new file mode 100644 index 0000000..f29dbd1 Binary files /dev/null and b/.git_old/objects/02/61ffe786d577cbf825858c1d809303565756c1 differ diff --git a/.git_old/objects/02/6c1986ae55df8b23409188c917e698a796509f b/.git_old/objects/02/6c1986ae55df8b23409188c917e698a796509f new file mode 100644 index 0000000..0d58579 Binary files /dev/null and b/.git_old/objects/02/6c1986ae55df8b23409188c917e698a796509f differ diff --git a/.git_old/objects/02/a94cc8cc0aad6b74d6cfd899b7527b2bbbc38b b/.git_old/objects/02/a94cc8cc0aad6b74d6cfd899b7527b2bbbc38b new file mode 100644 index 0000000..d978716 Binary files /dev/null and b/.git_old/objects/02/a94cc8cc0aad6b74d6cfd899b7527b2bbbc38b differ diff --git a/.git_old/objects/02/b0f4216535b51d446045a3bc72f7890da2f6c1 b/.git_old/objects/02/b0f4216535b51d446045a3bc72f7890da2f6c1 new file mode 100644 index 0000000..0ec2bc7 Binary files /dev/null and b/.git_old/objects/02/b0f4216535b51d446045a3bc72f7890da2f6c1 differ diff --git a/.git_old/objects/03/c03e788a2b407323d4d8bcd4f4ca970f16a66d b/.git_old/objects/03/c03e788a2b407323d4d8bcd4f4ca970f16a66d new file mode 100644 index 0000000..ce52d97 Binary files /dev/null and b/.git_old/objects/03/c03e788a2b407323d4d8bcd4f4ca970f16a66d differ diff --git a/.git_old/objects/03/c80a94002463dd718e576725ab0cfcf0a74cb1 b/.git_old/objects/03/c80a94002463dd718e576725ab0cfcf0a74cb1 new file mode 100644 index 0000000..15f697d Binary files /dev/null and b/.git_old/objects/03/c80a94002463dd718e576725ab0cfcf0a74cb1 differ diff --git a/.git_old/objects/03/e6a2f8d7b57bdce34b294d5ad7c4cb0687db17 b/.git_old/objects/03/e6a2f8d7b57bdce34b294d5ad7c4cb0687db17 new file mode 100644 index 0000000..a4ae117 Binary files /dev/null and b/.git_old/objects/03/e6a2f8d7b57bdce34b294d5ad7c4cb0687db17 differ diff --git a/.git_old/objects/04/0614ef804ebb8e4d34fbb9dccb0ea1f5efb7ab b/.git_old/objects/04/0614ef804ebb8e4d34fbb9dccb0ea1f5efb7ab new file mode 100644 index 0000000..bde4db2 Binary files /dev/null and b/.git_old/objects/04/0614ef804ebb8e4d34fbb9dccb0ea1f5efb7ab differ diff --git a/.git_old/objects/04/a3387aff7c97953a54229ed29590966175647e b/.git_old/objects/04/a3387aff7c97953a54229ed29590966175647e new file mode 100644 index 0000000..65a107b Binary files /dev/null and b/.git_old/objects/04/a3387aff7c97953a54229ed29590966175647e differ diff --git a/.git_old/objects/05/4025ae7b22f170572ac4c8a7671bd8e8478be6 b/.git_old/objects/05/4025ae7b22f170572ac4c8a7671bd8e8478be6 new file mode 100644 index 0000000..a941ca1 Binary files /dev/null and b/.git_old/objects/05/4025ae7b22f170572ac4c8a7671bd8e8478be6 differ diff --git a/.git_old/objects/05/f0832b5d5b550725c7e882ab5797a01511ce4b b/.git_old/objects/05/f0832b5d5b550725c7e882ab5797a01511ce4b new file mode 100644 index 0000000..9ffdf4e Binary files /dev/null and b/.git_old/objects/05/f0832b5d5b550725c7e882ab5797a01511ce4b differ diff --git a/.git_old/objects/06/37a088a01e8ddab3bf3fa98dbe804cbde1a0dc b/.git_old/objects/06/37a088a01e8ddab3bf3fa98dbe804cbde1a0dc new file mode 100644 index 0000000..b897c0a Binary files /dev/null and b/.git_old/objects/06/37a088a01e8ddab3bf3fa98dbe804cbde1a0dc differ diff --git a/.git_old/objects/06/959a3c39dee18b5274eff81d0cb5c513d17bb5 b/.git_old/objects/06/959a3c39dee18b5274eff81d0cb5c513d17bb5 new file mode 100644 index 0000000..b831090 Binary files /dev/null and b/.git_old/objects/06/959a3c39dee18b5274eff81d0cb5c513d17bb5 differ diff --git a/.git_old/objects/06/cbab6375d69ac688183e1ab2103da48a4be8ec b/.git_old/objects/06/cbab6375d69ac688183e1ab2103da48a4be8ec new file mode 100644 index 0000000..9a95d02 --- /dev/null +++ b/.git_old/objects/06/cbab6375d69ac688183e1ab2103da48a4be8ec @@ -0,0 +1,2 @@ +x +@ϣZ`EˠeAZEL2 ޾oEiw=^g~N(/fb͕“A%LQ:S~^uPWjʮ\7UP:Hs$ft&pt!TYk*s R>Y(syfo)NoJ%eKlݿ>܈=T7Ж0F#`0F/ x/ \ No newline at end of file diff --git a/.git_old/objects/06/dbb3c2d9c1fddf8f47a662638f84f41f8ec0c8 b/.git_old/objects/06/dbb3c2d9c1fddf8f47a662638f84f41f8ec0c8 new file mode 100644 index 0000000..e4923a4 Binary files /dev/null and b/.git_old/objects/06/dbb3c2d9c1fddf8f47a662638f84f41f8ec0c8 differ diff --git a/.git_old/objects/07/b7738146fd3dd51a5fc95caf2dabbc486e307b b/.git_old/objects/07/b7738146fd3dd51a5fc95caf2dabbc486e307b new file mode 100644 index 0000000..e2ae033 Binary files /dev/null and b/.git_old/objects/07/b7738146fd3dd51a5fc95caf2dabbc486e307b differ diff --git a/.git_old/objects/07/fc139079ec660e911f55c1e2a5f15b16b9bd2f b/.git_old/objects/07/fc139079ec660e911f55c1e2a5f15b16b9bd2f new file mode 100644 index 0000000..4a54bca Binary files /dev/null and b/.git_old/objects/07/fc139079ec660e911f55c1e2a5f15b16b9bd2f differ diff --git a/.git_old/objects/08/650b15f563ebd50a4c0b8c4a6ad55ebb6b8d30 b/.git_old/objects/08/650b15f563ebd50a4c0b8c4a6ad55ebb6b8d30 new file mode 100644 index 0000000..e39812f Binary files /dev/null and b/.git_old/objects/08/650b15f563ebd50a4c0b8c4a6ad55ebb6b8d30 differ diff --git a/.git_old/objects/08/684c396d8367f96af62281f55f406756aad7e2 b/.git_old/objects/08/684c396d8367f96af62281f55f406756aad7e2 new file mode 100644 index 0000000..a1f7bf6 Binary files /dev/null and b/.git_old/objects/08/684c396d8367f96af62281f55f406756aad7e2 differ diff --git a/.git_old/objects/08/98853965b558f9ee91862d9d1912173c23c246 b/.git_old/objects/08/98853965b558f9ee91862d9d1912173c23c246 new file mode 100644 index 0000000..134432d Binary files /dev/null and b/.git_old/objects/08/98853965b558f9ee91862d9d1912173c23c246 differ diff --git a/.git_old/objects/08/aa4d727361add1abea262a55505ceb78c95e99 b/.git_old/objects/08/aa4d727361add1abea262a55505ceb78c95e99 new file mode 100644 index 0000000..7e7e7f8 --- /dev/null +++ b/.git_old/objects/08/aa4d727361add1abea262a55505ceb78c95e99 @@ -0,0 +1,2 @@ +x͑N0y +E$$[H֑ T<;>@ivv֎ɲۻEFLr+X@<`Rr x#֛b0=@ baM)!H.iEeR@5o$9er!CArZ&K[gpz^;)-VOP)l\PhVe~cYSg&[  7zI` \ No newline at end of file diff --git a/.git_old/objects/08/cdadab57dc28fab5ff838eae234484af0b7cfd b/.git_old/objects/08/cdadab57dc28fab5ff838eae234484af0b7cfd new file mode 100644 index 0000000..6e68cb9 Binary files /dev/null and b/.git_old/objects/08/cdadab57dc28fab5ff838eae234484af0b7cfd differ diff --git a/.git_old/objects/08/f4ebeab550e5b7670413a1d354bc2bba12a1d1 b/.git_old/objects/08/f4ebeab550e5b7670413a1d354bc2bba12a1d1 new file mode 100644 index 0000000..5c015fa Binary files /dev/null and b/.git_old/objects/08/f4ebeab550e5b7670413a1d354bc2bba12a1d1 differ diff --git a/.git_old/objects/09/16bd8a9765c2a0ad651da6e44038179ac89a56 b/.git_old/objects/09/16bd8a9765c2a0ad651da6e44038179ac89a56 new file mode 100644 index 0000000..7df7e22 Binary files /dev/null and b/.git_old/objects/09/16bd8a9765c2a0ad651da6e44038179ac89a56 differ diff --git a/.git_old/objects/09/b6aa5d5af66190c76441f1a702f557bfa3ddd8 b/.git_old/objects/09/b6aa5d5af66190c76441f1a702f557bfa3ddd8 new file mode 100644 index 0000000..1aa7704 --- /dev/null +++ b/.git_old/objects/09/b6aa5d5af66190c76441f1a702f557bfa3ddd8 @@ -0,0 +1,2 @@ +x0~ +_`x%1$D\=:]3Jz{DekI[n>,ȮifXEBӲ"+Ӣؔ]Ky:Ɍ,[kuE8= xczzE ȸKhߤ@[ᅠJ-zJQ t,GL"f` u!VXQA=+G?I'tq0hݟ?! \ No newline at end of file diff --git a/.git_old/objects/10/036193fa4b85dc058d9dcefb5e0de6eaf7e3b5 b/.git_old/objects/10/036193fa4b85dc058d9dcefb5e0de6eaf7e3b5 new file mode 100644 index 0000000..f7c77e0 Binary files /dev/null and b/.git_old/objects/10/036193fa4b85dc058d9dcefb5e0de6eaf7e3b5 differ diff --git a/.git_old/objects/10/55d77d328b7c099f59fccb99b91469df89bf3c b/.git_old/objects/10/55d77d328b7c099f59fccb99b91469df89bf3c new file mode 100644 index 0000000..5ad6ad9 Binary files /dev/null and b/.git_old/objects/10/55d77d328b7c099f59fccb99b91469df89bf3c differ diff --git a/.git_old/objects/10/7a9e478c05661bb77f1d600aa9199f473641e1 b/.git_old/objects/10/7a9e478c05661bb77f1d600aa9199f473641e1 new file mode 100644 index 0000000..037b984 Binary files /dev/null and b/.git_old/objects/10/7a9e478c05661bb77f1d600aa9199f473641e1 differ diff --git a/.git_old/objects/10/7c64fce47d8f1f923a7a20b0a6799e387e6da4 b/.git_old/objects/10/7c64fce47d8f1f923a7a20b0a6799e387e6da4 new file mode 100644 index 0000000..2456ec7 Binary files /dev/null and b/.git_old/objects/10/7c64fce47d8f1f923a7a20b0a6799e387e6da4 differ diff --git a/.git_old/objects/10/807e6a2fe5386940ed65bcd3a23a7a40d07c4f b/.git_old/objects/10/807e6a2fe5386940ed65bcd3a23a7a40d07c4f new file mode 100644 index 0000000..ff0875c Binary files /dev/null and b/.git_old/objects/10/807e6a2fe5386940ed65bcd3a23a7a40d07c4f differ diff --git a/.git_old/objects/10/d5a3fe2c99fb121523e751a8c77406318e5e60 b/.git_old/objects/10/d5a3fe2c99fb121523e751a8c77406318e5e60 new file mode 100644 index 0000000..4b44e80 --- /dev/null +++ b/.git_old/objects/10/d5a3fe2c99fb121523e751a8c77406318e5e60 @@ -0,0 +1,4 @@ +xбJAE">@ AD,+Tr@@*! +7Xk4,f!Uj`NԨl"bGo9%25#[?Ö'c|=ߟ'h1؏xE.bo0-~O2k))^}}L9#=7+u=E;3e +M2?UРu)F$@-L.u9%/gĢ3fy* GR ߡѮsx )VRrHfǣш%/Ư@cJ)T2=ใX=]sa&<ѕhv=U*,''skd>G1e1`!"N%,beo7JLZwD{t/(gtPH9;ʚW;ʟoT2xEK \ No newline at end of file diff --git a/.git_old/objects/1c/8b3faf250ec9e7823432494450d8f3f9d572f8 b/.git_old/objects/1c/8b3faf250ec9e7823432494450d8f3f9d572f8 new file mode 100644 index 0000000..054cd9b Binary files /dev/null and b/.git_old/objects/1c/8b3faf250ec9e7823432494450d8f3f9d572f8 differ diff --git a/.git_old/objects/1c/91b474990f6126b8bf66e3f245c215ab02bf75 b/.git_old/objects/1c/91b474990f6126b8bf66e3f245c215ab02bf75 new file mode 100644 index 0000000..10e8ca7 --- /dev/null +++ b/.git_old/objects/1c/91b474990f6126b8bf66e3f245c215ab02bf75 @@ -0,0 +1 @@ +xMO =p`؏ƓWZ tcb mmո;2JҶe'̌I7p5$ɉ.F[?~jַP,ñt2h'K 5?oY넶%eʴ*ErVly.x9eB'aZ+|bSbCǘ UpH!/Qcc e.¯B8=\Yn@ G_R9L~X \ No newline at end of file diff --git a/.git_old/objects/1c/e84db3a2a297e2dd6bd5d4b6a211bc037cb98e b/.git_old/objects/1c/e84db3a2a297e2dd6bd5d4b6a211bc037cb98e new file mode 100644 index 0000000..b26126f Binary files /dev/null and b/.git_old/objects/1c/e84db3a2a297e2dd6bd5d4b6a211bc037cb98e differ diff --git a/.git_old/objects/1e/8c38e31de21bba4ce64175027ce97f4e243b0c b/.git_old/objects/1e/8c38e31de21bba4ce64175027ce97f4e243b0c new file mode 100644 index 0000000..6a08c2f Binary files /dev/null and b/.git_old/objects/1e/8c38e31de21bba4ce64175027ce97f4e243b0c differ diff --git a/.git_old/objects/1e/f28296bce6f33bb163ed8c08e019c911ca2c20 b/.git_old/objects/1e/f28296bce6f33bb163ed8c08e019c911ca2c20 new file mode 100644 index 0000000..86b7a1c Binary files /dev/null and b/.git_old/objects/1e/f28296bce6f33bb163ed8c08e019c911ca2c20 differ diff --git a/.git_old/objects/1f/b004429a404059cfde34fd15673274ac3b0db1 b/.git_old/objects/1f/b004429a404059cfde34fd15673274ac3b0db1 new file mode 100644 index 0000000..fe5b038 Binary files /dev/null and b/.git_old/objects/1f/b004429a404059cfde34fd15673274ac3b0db1 differ diff --git a/.git_old/objects/1f/e02cbe76eeeac32f488ae970b1a018cb4c0235 b/.git_old/objects/1f/e02cbe76eeeac32f488ae970b1a018cb4c0235 new file mode 100644 index 0000000..afd091b Binary files /dev/null and b/.git_old/objects/1f/e02cbe76eeeac32f488ae970b1a018cb4c0235 differ diff --git a/.git_old/objects/1f/f599e759c3a56ebf0a7c19847f737a76a15d47 b/.git_old/objects/1f/f599e759c3a56ebf0a7c19847f737a76a15d47 new file mode 100644 index 0000000..c15edcd Binary files /dev/null and b/.git_old/objects/1f/f599e759c3a56ebf0a7c19847f737a76a15d47 differ diff --git a/.git_old/objects/1f/fce7770822cb9f0e8cefba1dafb9a1c97e875d b/.git_old/objects/1f/fce7770822cb9f0e8cefba1dafb9a1c97e875d new file mode 100644 index 0000000..cc836e8 Binary files /dev/null and b/.git_old/objects/1f/fce7770822cb9f0e8cefba1dafb9a1c97e875d differ diff --git a/.git_old/objects/20/445618aba29dfdc8553d4613fff41c4ad7c2f5 b/.git_old/objects/20/445618aba29dfdc8553d4613fff41c4ad7c2f5 new file mode 100644 index 0000000..a163c4e Binary files /dev/null and b/.git_old/objects/20/445618aba29dfdc8553d4613fff41c4ad7c2f5 differ diff --git a/.git_old/objects/20/bb6569b628c33327e8a53466496920c734aca8 b/.git_old/objects/20/bb6569b628c33327e8a53466496920c734aca8 new file mode 100644 index 0000000..477f6cd Binary files /dev/null and b/.git_old/objects/20/bb6569b628c33327e8a53466496920c734aca8 differ diff --git a/.git_old/objects/20/e1ce9bdf1153d8f7f0c3500984799343368aba b/.git_old/objects/20/e1ce9bdf1153d8f7f0c3500984799343368aba new file mode 100644 index 0000000..0f69f54 Binary files /dev/null and b/.git_old/objects/20/e1ce9bdf1153d8f7f0c3500984799343368aba differ diff --git a/.git_old/objects/23/1d2ee68e82a818c776f2996a38a5df9c5ff499 b/.git_old/objects/23/1d2ee68e82a818c776f2996a38a5df9c5ff499 new file mode 100644 index 0000000..1d7b4d6 Binary files /dev/null and b/.git_old/objects/23/1d2ee68e82a818c776f2996a38a5df9c5ff499 differ diff --git a/.git_old/objects/23/35e689f1486a86baa282d2200dae5ba51ddc67 b/.git_old/objects/23/35e689f1486a86baa282d2200dae5ba51ddc67 new file mode 100644 index 0000000..df181fa Binary files /dev/null and b/.git_old/objects/23/35e689f1486a86baa282d2200dae5ba51ddc67 differ diff --git a/.git_old/objects/23/89c93e45fc43d34a229519f4031aaf4d50494e b/.git_old/objects/23/89c93e45fc43d34a229519f4031aaf4d50494e new file mode 100644 index 0000000..0d39e20 --- /dev/null +++ b/.git_old/objects/23/89c93e45fc43d34a229519f4031aaf4d50494e @@ -0,0 +1,2 @@ +xmn ;)]Bo%UԥSvU,@I/8NHe8u;:mtvJК~ԁ-:k}4q袩Tt;0e'/?WVf9Xvo6b>g뭌k#SD"IrȠX"Jn)-<L" +2gREhvCUZqP'xSTM 'q \ No newline at end of file diff --git a/.git_old/objects/23/95a15f990d6a64668d4de36312cef305cd6ec3 b/.git_old/objects/23/95a15f990d6a64668d4de36312cef305cd6ec3 new file mode 100644 index 0000000..7e29465 Binary files /dev/null and b/.git_old/objects/23/95a15f990d6a64668d4de36312cef305cd6ec3 differ diff --git a/.git_old/objects/23/a581be2bfd6232a1de2246f1512f11d856f601 b/.git_old/objects/23/a581be2bfd6232a1de2246f1512f11d856f601 new file mode 100644 index 0000000..05d32e8 Binary files /dev/null and b/.git_old/objects/23/a581be2bfd6232a1de2246f1512f11d856f601 differ diff --git a/.git_old/objects/24/78c0e600dfd02698f5ff36ec8bba98317b0c9a b/.git_old/objects/24/78c0e600dfd02698f5ff36ec8bba98317b0c9a new file mode 100644 index 0000000..e38c58f Binary files /dev/null and b/.git_old/objects/24/78c0e600dfd02698f5ff36ec8bba98317b0c9a differ diff --git a/.git_old/objects/24/baed86102cae14cf54493c64a8570791eb811b b/.git_old/objects/24/baed86102cae14cf54493c64a8570791eb811b new file mode 100644 index 0000000..e4066df Binary files /dev/null and b/.git_old/objects/24/baed86102cae14cf54493c64a8570791eb811b differ diff --git a/.git_old/objects/26/7d9f52ceedbd420d060090d3bbafce4423d1f8 b/.git_old/objects/26/7d9f52ceedbd420d060090d3bbafce4423d1f8 new file mode 100644 index 0000000..7e7cd31 Binary files /dev/null and b/.git_old/objects/26/7d9f52ceedbd420d060090d3bbafce4423d1f8 differ diff --git a/.git_old/objects/26/b1691b3981ab2731f798d7fdd3cf554172a2b6 b/.git_old/objects/26/b1691b3981ab2731f798d7fdd3cf554172a2b6 new file mode 100644 index 0000000..5136239 Binary files /dev/null and b/.git_old/objects/26/b1691b3981ab2731f798d7fdd3cf554172a2b6 differ diff --git a/.git_old/objects/26/be0403019c3cb31fe6a93a1113a1badcf67d3d b/.git_old/objects/26/be0403019c3cb31fe6a93a1113a1badcf67d3d new file mode 100644 index 0000000..386da10 Binary files /dev/null and b/.git_old/objects/26/be0403019c3cb31fe6a93a1113a1badcf67d3d differ diff --git a/.git_old/objects/27/25b968ef4a15dee09f51ce676b5481fba35705 b/.git_old/objects/27/25b968ef4a15dee09f51ce676b5481fba35705 new file mode 100644 index 0000000..258b097 Binary files /dev/null and b/.git_old/objects/27/25b968ef4a15dee09f51ce676b5481fba35705 differ diff --git a/.git_old/objects/27/5d852f3cc7cefc2ae9053caf9a07167af1dcc6 b/.git_old/objects/27/5d852f3cc7cefc2ae9053caf9a07167af1dcc6 new file mode 100644 index 0000000..616efdf Binary files /dev/null and b/.git_old/objects/27/5d852f3cc7cefc2ae9053caf9a07167af1dcc6 differ diff --git a/.git_old/objects/27/d1f5bff76c8c2821de6d900d881123fb6a81b7 b/.git_old/objects/27/d1f5bff76c8c2821de6d900d881123fb6a81b7 new file mode 100644 index 0000000..e7fa4ac Binary files /dev/null and b/.git_old/objects/27/d1f5bff76c8c2821de6d900d881123fb6a81b7 differ diff --git a/.git_old/objects/29/0be1f2cd98cdcbae2ea5f8e08d13a6bd7282c0 b/.git_old/objects/29/0be1f2cd98cdcbae2ea5f8e08d13a6bd7282c0 new file mode 100644 index 0000000..6f38776 Binary files /dev/null and b/.git_old/objects/29/0be1f2cd98cdcbae2ea5f8e08d13a6bd7282c0 differ diff --git a/.git_old/objects/29/58ef32684e4fed3ff316877693cc687d77f583 b/.git_old/objects/29/58ef32684e4fed3ff316877693cc687d77f583 new file mode 100644 index 0000000..ef10888 Binary files /dev/null and b/.git_old/objects/29/58ef32684e4fed3ff316877693cc687d77f583 differ diff --git a/.git_old/objects/29/9eedbe23b2a95aaae714f8728ff8f6f192fbf6 b/.git_old/objects/29/9eedbe23b2a95aaae714f8728ff8f6f192fbf6 new file mode 100644 index 0000000..57f931a Binary files /dev/null and b/.git_old/objects/29/9eedbe23b2a95aaae714f8728ff8f6f192fbf6 differ diff --git a/.git_old/objects/2a/418e3b39b926719c85c60f8da227e5c567617e b/.git_old/objects/2a/418e3b39b926719c85c60f8da227e5c567617e new file mode 100644 index 0000000..c9d3c9d Binary files /dev/null and b/.git_old/objects/2a/418e3b39b926719c85c60f8da227e5c567617e differ diff --git a/.git_old/objects/2a/6441a73f043180f92cb72ca042e06dda7cd945 b/.git_old/objects/2a/6441a73f043180f92cb72ca042e06dda7cd945 new file mode 100644 index 0000000..ef9d17b Binary files /dev/null and b/.git_old/objects/2a/6441a73f043180f92cb72ca042e06dda7cd945 differ diff --git a/.git_old/objects/2a/f6c39a22803efc8330fda85a210b2cb996d78e b/.git_old/objects/2a/f6c39a22803efc8330fda85a210b2cb996d78e new file mode 100644 index 0000000..37c8a60 Binary files /dev/null and b/.git_old/objects/2a/f6c39a22803efc8330fda85a210b2cb996d78e differ diff --git a/.git_old/objects/2d/053afd279a1c787a96ea7ffa046566d7163799 b/.git_old/objects/2d/053afd279a1c787a96ea7ffa046566d7163799 new file mode 100644 index 0000000..0b4019e Binary files /dev/null and b/.git_old/objects/2d/053afd279a1c787a96ea7ffa046566d7163799 differ diff --git a/.git_old/objects/2d/0adaeb856985817dcf81833ebdcd98390e4ca5 b/.git_old/objects/2d/0adaeb856985817dcf81833ebdcd98390e4ca5 new file mode 100644 index 0000000..a43a79e Binary files /dev/null and b/.git_old/objects/2d/0adaeb856985817dcf81833ebdcd98390e4ca5 differ diff --git a/.git_old/objects/2d/20c165d514f028bd2d578040982e3db5eeef77 b/.git_old/objects/2d/20c165d514f028bd2d578040982e3db5eeef77 new file mode 100644 index 0000000..2db79cb Binary files /dev/null and b/.git_old/objects/2d/20c165d514f028bd2d578040982e3db5eeef77 differ diff --git a/.git_old/objects/2d/25e443b29f42fd199a4adabe61175a4e3c82a5 b/.git_old/objects/2d/25e443b29f42fd199a4adabe61175a4e3c82a5 new file mode 100644 index 0000000..8ca349b Binary files /dev/null and b/.git_old/objects/2d/25e443b29f42fd199a4adabe61175a4e3c82a5 differ diff --git a/.git_old/objects/2d/262588143b919231cbe2fa9f1eb35219fa668c b/.git_old/objects/2d/262588143b919231cbe2fa9f1eb35219fa668c new file mode 100644 index 0000000..d3eb037 --- /dev/null +++ b/.git_old/objects/2d/262588143b919231cbe2fa9f1eb35219fa668c @@ -0,0 +1,3 @@ +x_o Oh٫v?ᗪ&X[4榳g|9doR'}:~ x \ No newline at end of file diff --git a/.git_old/objects/2d/34068aab328b7449983d3e299eb5b2594f0c06 b/.git_old/objects/2d/34068aab328b7449983d3e299eb5b2594f0c06 new file mode 100644 index 0000000..7d09a28 Binary files /dev/null and b/.git_old/objects/2d/34068aab328b7449983d3e299eb5b2594f0c06 differ diff --git a/.git_old/objects/2d/4e27644bade87e0732cbb7633073007d5c7b6a b/.git_old/objects/2d/4e27644bade87e0732cbb7633073007d5c7b6a new file mode 100644 index 0000000..de285fa Binary files /dev/null and b/.git_old/objects/2d/4e27644bade87e0732cbb7633073007d5c7b6a differ diff --git a/.git_old/objects/2d/6a8b7a2c854db504af93186e24faece3527d70 b/.git_old/objects/2d/6a8b7a2c854db504af93186e24faece3527d70 new file mode 100644 index 0000000..af5d6ad Binary files /dev/null and b/.git_old/objects/2d/6a8b7a2c854db504af93186e24faece3527d70 differ diff --git a/.git_old/objects/2d/ea15f0ae9c2d7fe6a47e7ef700c1f04c279cb7 b/.git_old/objects/2d/ea15f0ae9c2d7fe6a47e7ef700c1f04c279cb7 new file mode 100644 index 0000000..369513a Binary files /dev/null and b/.git_old/objects/2d/ea15f0ae9c2d7fe6a47e7ef700c1f04c279cb7 differ diff --git a/.git_old/objects/30/4fa24f090304c45139ce7d97a27cbd5f063f09 b/.git_old/objects/30/4fa24f090304c45139ce7d97a27cbd5f063f09 new file mode 100644 index 0000000..2a4d35c Binary files /dev/null and b/.git_old/objects/30/4fa24f090304c45139ce7d97a27cbd5f063f09 differ diff --git a/.git_old/objects/32/806a8d1ed1c374f30585f7b7ed25cde678e257 b/.git_old/objects/32/806a8d1ed1c374f30585f7b7ed25cde678e257 new file mode 100644 index 0000000..eb01555 Binary files /dev/null and b/.git_old/objects/32/806a8d1ed1c374f30585f7b7ed25cde678e257 differ diff --git a/.git_old/objects/32/954a0865a90fab633fffbfc2dc068b47c3d4c4 b/.git_old/objects/32/954a0865a90fab633fffbfc2dc068b47c3d4c4 new file mode 100644 index 0000000..a97382e Binary files /dev/null and b/.git_old/objects/32/954a0865a90fab633fffbfc2dc068b47c3d4c4 differ diff --git a/.git_old/objects/33/0d41558af0a6abb6662cd29d36c27c5f7f1b19 b/.git_old/objects/33/0d41558af0a6abb6662cd29d36c27c5f7f1b19 new file mode 100644 index 0000000..47790e4 Binary files /dev/null and b/.git_old/objects/33/0d41558af0a6abb6662cd29d36c27c5f7f1b19 differ diff --git a/.git_old/objects/33/140ac7015f853a103da02560f38e3138eee519 b/.git_old/objects/33/140ac7015f853a103da02560f38e3138eee519 new file mode 100644 index 0000000..0c8d696 Binary files /dev/null and b/.git_old/objects/33/140ac7015f853a103da02560f38e3138eee519 differ diff --git a/.git_old/objects/33/37b4a569c3dd2966cf0f66f5fe44b64247ecc9 b/.git_old/objects/33/37b4a569c3dd2966cf0f66f5fe44b64247ecc9 new file mode 100644 index 0000000..eb62557 Binary files /dev/null and b/.git_old/objects/33/37b4a569c3dd2966cf0f66f5fe44b64247ecc9 differ diff --git a/.git_old/objects/33/beb455612568ad671b60dd2cd4261a0984a8a7 b/.git_old/objects/33/beb455612568ad671b60dd2cd4261a0984a8a7 new file mode 100644 index 0000000..42f5966 Binary files /dev/null and b/.git_old/objects/33/beb455612568ad671b60dd2cd4261a0984a8a7 differ diff --git a/.git_old/objects/35/d8468081e635a14db5f96f8c4194ce106c7c9e b/.git_old/objects/35/d8468081e635a14db5f96f8c4194ce106c7c9e new file mode 100644 index 0000000..d28a45e Binary files /dev/null and b/.git_old/objects/35/d8468081e635a14db5f96f8c4194ce106c7c9e differ diff --git a/.git_old/objects/37/7b8e4a43d9ff130eb5c69ad5713ae127c66a92 b/.git_old/objects/37/7b8e4a43d9ff130eb5c69ad5713ae127c66a92 new file mode 100644 index 0000000..eda2d9a Binary files /dev/null and b/.git_old/objects/37/7b8e4a43d9ff130eb5c69ad5713ae127c66a92 differ diff --git a/.git_old/objects/37/87e5b31f16a6e73f0d432f61b6fe6bc0e8cead b/.git_old/objects/37/87e5b31f16a6e73f0d432f61b6fe6bc0e8cead new file mode 100644 index 0000000..ed97b26 Binary files /dev/null and b/.git_old/objects/37/87e5b31f16a6e73f0d432f61b6fe6bc0e8cead differ diff --git a/.git_old/objects/37/b76aa9769e0a30b3b75121abb5376b20d71ce3 b/.git_old/objects/37/b76aa9769e0a30b3b75121abb5376b20d71ce3 new file mode 100644 index 0000000..41f6365 Binary files /dev/null and b/.git_old/objects/37/b76aa9769e0a30b3b75121abb5376b20d71ce3 differ diff --git a/.git_old/objects/38/02b676fdca19867b4735da4644a56c44c4c33d b/.git_old/objects/38/02b676fdca19867b4735da4644a56c44c4c33d new file mode 100644 index 0000000..a408dc3 Binary files /dev/null and b/.git_old/objects/38/02b676fdca19867b4735da4644a56c44c4c33d differ diff --git a/.git_old/objects/38/4893bc4bcc8adf16d09a8d52e3e96d33bcd82f b/.git_old/objects/38/4893bc4bcc8adf16d09a8d52e3e96d33bcd82f new file mode 100644 index 0000000..200762f Binary files /dev/null and b/.git_old/objects/38/4893bc4bcc8adf16d09a8d52e3e96d33bcd82f differ diff --git a/.git_old/objects/38/9bbce0699828e85c6ceb0ca64dc5d5e00d8c45 b/.git_old/objects/38/9bbce0699828e85c6ceb0ca64dc5d5e00d8c45 new file mode 100644 index 0000000..c146d4e Binary files /dev/null and b/.git_old/objects/38/9bbce0699828e85c6ceb0ca64dc5d5e00d8c45 differ diff --git a/.git_old/objects/38/9dc0bc367ed98105a961a5be97220d3bf6c2bf b/.git_old/objects/38/9dc0bc367ed98105a961a5be97220d3bf6c2bf new file mode 100644 index 0000000..4063d1e Binary files /dev/null and b/.git_old/objects/38/9dc0bc367ed98105a961a5be97220d3bf6c2bf differ diff --git a/.git_old/objects/3a/530d1d35bcbaae52ead7fcf7ef190449de644f b/.git_old/objects/3a/530d1d35bcbaae52ead7fcf7ef190449de644f new file mode 100644 index 0000000..af97af9 Binary files /dev/null and b/.git_old/objects/3a/530d1d35bcbaae52ead7fcf7ef190449de644f differ diff --git a/.git_old/objects/3a/cd13dd22eb2d78ef29e314ce6e5df810b79d5c b/.git_old/objects/3a/cd13dd22eb2d78ef29e314ce6e5df810b79d5c new file mode 100644 index 0000000..90e8e70 Binary files /dev/null and b/.git_old/objects/3a/cd13dd22eb2d78ef29e314ce6e5df810b79d5c differ diff --git a/.git_old/objects/3a/db1a5b6b81d0865e0e3e92ab4518bd65debbb5 b/.git_old/objects/3a/db1a5b6b81d0865e0e3e92ab4518bd65debbb5 new file mode 100644 index 0000000..77b9b73 Binary files /dev/null and b/.git_old/objects/3a/db1a5b6b81d0865e0e3e92ab4518bd65debbb5 differ diff --git a/.git_old/objects/3b/54559b684f1b22c6b69177096225c3ec69230a b/.git_old/objects/3b/54559b684f1b22c6b69177096225c3ec69230a new file mode 100644 index 0000000..66c7287 Binary files /dev/null and b/.git_old/objects/3b/54559b684f1b22c6b69177096225c3ec69230a differ diff --git a/.git_old/objects/3b/628a8a3201a1cb1ad2efad2cda2ee8e6065d81 b/.git_old/objects/3b/628a8a3201a1cb1ad2efad2cda2ee8e6065d81 new file mode 100644 index 0000000..761b983 Binary files /dev/null and b/.git_old/objects/3b/628a8a3201a1cb1ad2efad2cda2ee8e6065d81 differ diff --git a/.git_old/objects/3b/cc94af78ca69df01a10b2ab9e7e470e6593ad4 b/.git_old/objects/3b/cc94af78ca69df01a10b2ab9e7e470e6593ad4 new file mode 100644 index 0000000..e0ba528 Binary files /dev/null and b/.git_old/objects/3b/cc94af78ca69df01a10b2ab9e7e470e6593ad4 differ diff --git a/.git_old/objects/3b/cfe893ea8f88be8fa1bc2680034c2d6ba69a67 b/.git_old/objects/3b/cfe893ea8f88be8fa1bc2680034c2d6ba69a67 new file mode 100644 index 0000000..6804561 Binary files /dev/null and b/.git_old/objects/3b/cfe893ea8f88be8fa1bc2680034c2d6ba69a67 differ diff --git a/.git_old/objects/3e/3495b8932c17c13dda8c7a27f56aee6ddf209c b/.git_old/objects/3e/3495b8932c17c13dda8c7a27f56aee6ddf209c new file mode 100644 index 0000000..0df7c78 Binary files /dev/null and b/.git_old/objects/3e/3495b8932c17c13dda8c7a27f56aee6ddf209c differ diff --git a/.git_old/objects/3e/40fdfcead6ac0356c9dcec50e9dcdb92d5676c b/.git_old/objects/3e/40fdfcead6ac0356c9dcec50e9dcdb92d5676c new file mode 100644 index 0000000..cf948f5 Binary files /dev/null and b/.git_old/objects/3e/40fdfcead6ac0356c9dcec50e9dcdb92d5676c differ diff --git a/.git_old/objects/3f/5118ee6ec11c3f3fbc939aaa2e66468f9cf9e2 b/.git_old/objects/3f/5118ee6ec11c3f3fbc939aaa2e66468f9cf9e2 new file mode 100644 index 0000000..9f3a1a8 Binary files /dev/null and b/.git_old/objects/3f/5118ee6ec11c3f3fbc939aaa2e66468f9cf9e2 differ diff --git a/.git_old/objects/3f/777eb3d2c418fc9456d7cc6ad14b7c6c1e6e86 b/.git_old/objects/3f/777eb3d2c418fc9456d7cc6ad14b7c6c1e6e86 new file mode 100644 index 0000000..13db299 --- /dev/null +++ b/.git_old/objects/3f/777eb3d2c418fc9456d7cc6ad14b7c6c1e6e86 @@ -0,0 +1,3 @@ +xNIj1Y!H#izdB䒫=`IFRZb+ee&dX]$L1$G*nSe0B8OnQƄ`dBP*4.u * _ms9 + +Qpb^v&zϾH[/yg[/4Z \ No newline at end of file diff --git a/.git_old/objects/3f/f98a9f792668cdac3a6a5347671cc51b2d08d3 b/.git_old/objects/3f/f98a9f792668cdac3a6a5347671cc51b2d08d3 new file mode 100644 index 0000000..f423292 Binary files /dev/null and b/.git_old/objects/3f/f98a9f792668cdac3a6a5347671cc51b2d08d3 differ diff --git a/.git_old/objects/40/1e2b192d8c13a5a4bd75832051c8316c318927 b/.git_old/objects/40/1e2b192d8c13a5a4bd75832051c8316c318927 new file mode 100644 index 0000000..ddf2be0 Binary files /dev/null and b/.git_old/objects/40/1e2b192d8c13a5a4bd75832051c8316c318927 differ diff --git a/.git_old/objects/40/f8fd76162fe5473a8f47af3bce29cb1caf107e b/.git_old/objects/40/f8fd76162fe5473a8f47af3bce29cb1caf107e new file mode 100644 index 0000000..e7dac71 Binary files /dev/null and b/.git_old/objects/40/f8fd76162fe5473a8f47af3bce29cb1caf107e differ diff --git a/.git_old/objects/42/80446fa9b38fa34775f1efe239f8a871678f4d b/.git_old/objects/42/80446fa9b38fa34775f1efe239f8a871678f4d new file mode 100644 index 0000000..a4be3da --- /dev/null +++ b/.git_old/objects/42/80446fa9b38fa34775f1efe239f8a871678f4d @@ -0,0 +1 @@ +xRKO0b(m)UīP`ʢ@7m٘jԒ|PZK.VpHoZG66#|Cwz ]6hGn h[jjЙ"VlPn\ůCOdjwᾘe#Js㓸1UExF\5u*9Tr~&yFH5]%41MlP8ښ!y8FO2`A@/;:iצq!@;=v@e LA%Ȝcɜf (@STP]AS*9d!Bg EE)ůr\7y:}?O \ No newline at end of file diff --git a/.git_old/objects/43/91e1ea300932d2edadfc2ddeb85720cbadf25d b/.git_old/objects/43/91e1ea300932d2edadfc2ddeb85720cbadf25d new file mode 100644 index 0000000..1f66872 Binary files /dev/null and b/.git_old/objects/43/91e1ea300932d2edadfc2ddeb85720cbadf25d differ diff --git a/.git_old/objects/43/ceff7eb219367d571b08b5ee05757f28d19f69 b/.git_old/objects/43/ceff7eb219367d571b08b5ee05757f28d19f69 new file mode 100644 index 0000000..a357cc0 Binary files /dev/null and b/.git_old/objects/43/ceff7eb219367d571b08b5ee05757f28d19f69 differ diff --git a/.git_old/objects/43/e728c028b09d47a708434df9a4624a546c1757 b/.git_old/objects/43/e728c028b09d47a708434df9a4624a546c1757 new file mode 100644 index 0000000..f935d2b Binary files /dev/null and b/.git_old/objects/43/e728c028b09d47a708434df9a4624a546c1757 differ diff --git a/.git_old/objects/46/12c7512924b002596d5e400c8f7013429445b0 b/.git_old/objects/46/12c7512924b002596d5e400c8f7013429445b0 new file mode 100644 index 0000000..9a9877f Binary files /dev/null and b/.git_old/objects/46/12c7512924b002596d5e400c8f7013429445b0 differ diff --git a/.git_old/objects/46/70c29bd0bbe739af135861423cc9b6aa4213c6 b/.git_old/objects/46/70c29bd0bbe739af135861423cc9b6aa4213c6 new file mode 100644 index 0000000..d64af8f Binary files /dev/null and b/.git_old/objects/46/70c29bd0bbe739af135861423cc9b6aa4213c6 differ diff --git a/.git_old/objects/47/cb55fab93aaf0e35b7c0f5ed6feb7980e378c9 b/.git_old/objects/47/cb55fab93aaf0e35b7c0f5ed6feb7980e378c9 new file mode 100644 index 0000000..d1726b2 Binary files /dev/null and b/.git_old/objects/47/cb55fab93aaf0e35b7c0f5ed6feb7980e378c9 differ diff --git a/.git_old/objects/47/ec2c9a6513accb718f9f2762a22cb60bdb9893 b/.git_old/objects/47/ec2c9a6513accb718f9f2762a22cb60bdb9893 new file mode 100644 index 0000000..bc89bff Binary files /dev/null and b/.git_old/objects/47/ec2c9a6513accb718f9f2762a22cb60bdb9893 differ diff --git a/.git_old/objects/48/2bc14821c49fcbe38a9c409a73d0f403ff88e6 b/.git_old/objects/48/2bc14821c49fcbe38a9c409a73d0f403ff88e6 new file mode 100644 index 0000000..70de33a Binary files /dev/null and b/.git_old/objects/48/2bc14821c49fcbe38a9c409a73d0f403ff88e6 differ diff --git a/.git_old/objects/48/512afb673b4d6c58d7b2e65ae033c5b92c4472 b/.git_old/objects/48/512afb673b4d6c58d7b2e65ae033c5b92c4472 new file mode 100644 index 0000000..f953391 Binary files /dev/null and b/.git_old/objects/48/512afb673b4d6c58d7b2e65ae033c5b92c4472 differ diff --git a/.git_old/objects/48/f3efa1f1db1b04e9d2f2a966051f9d7736f244 b/.git_old/objects/48/f3efa1f1db1b04e9d2f2a966051f9d7736f244 new file mode 100644 index 0000000..f6c4def --- /dev/null +++ b/.git_old/objects/48/f3efa1f1db1b04e9d2f2a966051f9d7736f244 @@ -0,0 +1,2 @@ +x]j0S{ JRr +=~VJ.k_ |ÄZJ /3H =IJ:$6 G 1NIf@:JZ*ʠqJGmE MF?*ubu!xZnjyV}Ipo?D+0:|#{&@W \ No newline at end of file diff --git a/.git_old/objects/54/3ddb1834ccb820f0cb3ca7f65e86954ad275a9 b/.git_old/objects/54/3ddb1834ccb820f0cb3ca7f65e86954ad275a9 new file mode 100644 index 0000000..fe8604e Binary files /dev/null and b/.git_old/objects/54/3ddb1834ccb820f0cb3ca7f65e86954ad275a9 differ diff --git a/.git_old/objects/55/f915374e4b42a5a9edb65631fe177453f5d25a b/.git_old/objects/55/f915374e4b42a5a9edb65631fe177453f5d25a new file mode 100644 index 0000000..d158bd6 Binary files /dev/null and b/.git_old/objects/55/f915374e4b42a5a9edb65631fe177453f5d25a differ diff --git a/.git_old/objects/56/30afa8dfe40b445f1a2c0e938c030000a50ec0 b/.git_old/objects/56/30afa8dfe40b445f1a2c0e938c030000a50ec0 new file mode 100644 index 0000000..e2bfabb Binary files /dev/null and b/.git_old/objects/56/30afa8dfe40b445f1a2c0e938c030000a50ec0 differ diff --git a/.git_old/objects/56/4aa81238eb37eba7d319f31ad9c0e6504da33b b/.git_old/objects/56/4aa81238eb37eba7d319f31ad9c0e6504da33b new file mode 100644 index 0000000..3427a40 Binary files /dev/null and b/.git_old/objects/56/4aa81238eb37eba7d319f31ad9c0e6504da33b differ diff --git a/.git_old/objects/56/53fd74a48a9db3dd65d6b6f7ed39d2a6dc3888 b/.git_old/objects/56/53fd74a48a9db3dd65d6b6f7ed39d2a6dc3888 new file mode 100644 index 0000000..3ab7df8 Binary files /dev/null and b/.git_old/objects/56/53fd74a48a9db3dd65d6b6f7ed39d2a6dc3888 differ diff --git a/.git_old/objects/56/7d90cc85a313b1125333af3b34d12ef4f1d28e b/.git_old/objects/56/7d90cc85a313b1125333af3b34d12ef4f1d28e new file mode 100644 index 0000000..bd27124 --- /dev/null +++ b/.git_old/objects/56/7d90cc85a313b1125333af3b34d12ef4f1d28e @@ -0,0 +1 @@ +x+)JMU01b040031QI,.M*IKc{bNg) m \ No newline at end of file diff --git a/.git_old/objects/56/a6051ca2b02b04ef92d5150c9ef600403cb1de b/.git_old/objects/56/a6051ca2b02b04ef92d5150c9ef600403cb1de new file mode 100644 index 0000000..b17dfe3 Binary files /dev/null and b/.git_old/objects/56/a6051ca2b02b04ef92d5150c9ef600403cb1de differ diff --git a/.git_old/objects/58/01ce82e80501087cfe2b724bb3866c0321aac1 b/.git_old/objects/58/01ce82e80501087cfe2b724bb3866c0321aac1 new file mode 100644 index 0000000..8c7c431 Binary files /dev/null and b/.git_old/objects/58/01ce82e80501087cfe2b724bb3866c0321aac1 differ diff --git a/.git_old/objects/58/933eb406a099d615e390069aabef79c9cffdaa b/.git_old/objects/58/933eb406a099d615e390069aabef79c9cffdaa new file mode 100644 index 0000000..aaf6ca6 Binary files /dev/null and b/.git_old/objects/58/933eb406a099d615e390069aabef79c9cffdaa differ diff --git a/.git_old/objects/58/e47f69d8286ca0e899424d075d11ec82682af6 b/.git_old/objects/58/e47f69d8286ca0e899424d075d11ec82682af6 new file mode 100644 index 0000000..1bb165b Binary files /dev/null and b/.git_old/objects/58/e47f69d8286ca0e899424d075d11ec82682af6 differ diff --git a/.git_old/objects/58/fe02d3dfef09366e54ae53c956dc98e2db1ea8 b/.git_old/objects/58/fe02d3dfef09366e54ae53c956dc98e2db1ea8 new file mode 100644 index 0000000..21b07eb Binary files /dev/null and b/.git_old/objects/58/fe02d3dfef09366e54ae53c956dc98e2db1ea8 differ diff --git a/.git_old/objects/5b/f5d80f562cfb5b407c298d416d247d9ee88236 b/.git_old/objects/5b/f5d80f562cfb5b407c298d416d247d9ee88236 new file mode 100644 index 0000000..e3f83c7 Binary files /dev/null and b/.git_old/objects/5b/f5d80f562cfb5b407c298d416d247d9ee88236 differ diff --git a/.git_old/objects/5c/87136e19a0d6fd468c4b045d79aae2a2e1ef50 b/.git_old/objects/5c/87136e19a0d6fd468c4b045d79aae2a2e1ef50 new file mode 100644 index 0000000..e1f65c8 Binary files /dev/null and b/.git_old/objects/5c/87136e19a0d6fd468c4b045d79aae2a2e1ef50 differ diff --git a/.git_old/objects/5c/88b2b7c00aab316739fce59ac8044459165750 b/.git_old/objects/5c/88b2b7c00aab316739fce59ac8044459165750 new file mode 100644 index 0000000..cbcaea0 Binary files /dev/null and b/.git_old/objects/5c/88b2b7c00aab316739fce59ac8044459165750 differ diff --git a/.git_old/objects/5c/8ca6b875398cb04d0293ad9d21433a06f32ab9 b/.git_old/objects/5c/8ca6b875398cb04d0293ad9d21433a06f32ab9 new file mode 100644 index 0000000..49a07ed Binary files /dev/null and b/.git_old/objects/5c/8ca6b875398cb04d0293ad9d21433a06f32ab9 differ diff --git a/.git_old/objects/5c/a8621afdaee76cae8fc805c04dcafa91fb792d b/.git_old/objects/5c/a8621afdaee76cae8fc805c04dcafa91fb792d new file mode 100644 index 0000000..0be1e90 Binary files /dev/null and b/.git_old/objects/5c/a8621afdaee76cae8fc805c04dcafa91fb792d differ diff --git a/.git_old/objects/5c/ba644a7cea3589a35725a08ea548da2390bcac b/.git_old/objects/5c/ba644a7cea3589a35725a08ea548da2390bcac new file mode 100644 index 0000000..13825f5 Binary files /dev/null and b/.git_old/objects/5c/ba644a7cea3589a35725a08ea548da2390bcac differ diff --git a/.git_old/objects/5f/6c87b4ec18b5fc57bafdc8a799803bfd84ff19 b/.git_old/objects/5f/6c87b4ec18b5fc57bafdc8a799803bfd84ff19 new file mode 100644 index 0000000..537fad7 Binary files /dev/null and b/.git_old/objects/5f/6c87b4ec18b5fc57bafdc8a799803bfd84ff19 differ diff --git a/.git_old/objects/5f/8640bca290e7708d80fb5fa8b52c2e69cc3d7b b/.git_old/objects/5f/8640bca290e7708d80fb5fa8b52c2e69cc3d7b new file mode 100644 index 0000000..00c29a0 --- /dev/null +++ b/.git_old/objects/5f/8640bca290e7708d80fb5fa8b52c2e69cc3d7b @@ -0,0 +1,3 @@ +xMk0 w(>/uc`уiY +ȯWVLf9}^C e*v+g} GBV؃u׼üi" (im .J6;qՆO:\+K+87i, &±t5h;#OpeP@J^oyE) 2Zd2 O7"ł +i$VpQ0%6To٫FOSyn۱~#(7S3lTNoR:ePŒ`/R:'˧+uQ߯N?T/ \ No newline at end of file diff --git a/.git_old/objects/5f/870cac1e2a9a47f42f5b2d8323f65ca1d69bd8 b/.git_old/objects/5f/870cac1e2a9a47f42f5b2d8323f65ca1d69bd8 new file mode 100644 index 0000000..41838ac Binary files /dev/null and b/.git_old/objects/5f/870cac1e2a9a47f42f5b2d8323f65ca1d69bd8 differ diff --git a/.git_old/objects/5f/a5de460698f1bb961a3d16e15b6cbc381d4dac b/.git_old/objects/5f/a5de460698f1bb961a3d16e15b6cbc381d4dac new file mode 100644 index 0000000..13ebe9e Binary files /dev/null and b/.git_old/objects/5f/a5de460698f1bb961a3d16e15b6cbc381d4dac differ diff --git a/.git_old/objects/5f/a6ce90c91d3d8210ddf61127a724422e39bf7f b/.git_old/objects/5f/a6ce90c91d3d8210ddf61127a724422e39bf7f new file mode 100644 index 0000000..8d10e72 Binary files /dev/null and b/.git_old/objects/5f/a6ce90c91d3d8210ddf61127a724422e39bf7f differ diff --git a/.git_old/objects/60/1f245f575611e9ee7dd20b1adfb34054ece53a b/.git_old/objects/60/1f245f575611e9ee7dd20b1adfb34054ece53a new file mode 100644 index 0000000..ae2da92 Binary files /dev/null and b/.git_old/objects/60/1f245f575611e9ee7dd20b1adfb34054ece53a differ diff --git a/.git_old/objects/60/20b54fa3de86638f3177e9bad11df5d0232ff4 b/.git_old/objects/60/20b54fa3de86638f3177e9bad11df5d0232ff4 new file mode 100644 index 0000000..e1abaff Binary files /dev/null and b/.git_old/objects/60/20b54fa3de86638f3177e9bad11df5d0232ff4 differ diff --git a/.git_old/objects/60/5659c461090611fc6f3a7c828210b023010b7a b/.git_old/objects/60/5659c461090611fc6f3a7c828210b023010b7a new file mode 100644 index 0000000..9db9958 Binary files /dev/null and b/.git_old/objects/60/5659c461090611fc6f3a7c828210b023010b7a differ diff --git a/.git_old/objects/60/e01288e117fe780c526287ad0703b525479e16 b/.git_old/objects/60/e01288e117fe780c526287ad0703b525479e16 new file mode 100644 index 0000000..513214b Binary files /dev/null and b/.git_old/objects/60/e01288e117fe780c526287ad0703b525479e16 differ diff --git a/.git_old/objects/61/200d4b60c0dd15e6df7aed6d4bdf9d2626cdda b/.git_old/objects/61/200d4b60c0dd15e6df7aed6d4bdf9d2626cdda new file mode 100644 index 0000000..5434ee5 Binary files /dev/null and b/.git_old/objects/61/200d4b60c0dd15e6df7aed6d4bdf9d2626cdda differ diff --git a/.git_old/objects/61/2bba15aa8b80e76101d0c031c93c737a88d786 b/.git_old/objects/61/2bba15aa8b80e76101d0c031c93c737a88d786 new file mode 100644 index 0000000..f96b859 Binary files /dev/null and b/.git_old/objects/61/2bba15aa8b80e76101d0c031c93c737a88d786 differ diff --git a/.git_old/objects/61/411b8cb37b99272f13aa8079ec46e13c421c67 b/.git_old/objects/61/411b8cb37b99272f13aa8079ec46e13c421c67 new file mode 100644 index 0000000..e2842b3 Binary files /dev/null and b/.git_old/objects/61/411b8cb37b99272f13aa8079ec46e13c421c67 differ diff --git a/.git_old/objects/61/9a8cce87975cd599188c443e9f5add3a3490be b/.git_old/objects/61/9a8cce87975cd599188c443e9f5add3a3490be new file mode 100644 index 0000000..c078de8 Binary files /dev/null and b/.git_old/objects/61/9a8cce87975cd599188c443e9f5add3a3490be differ diff --git a/.git_old/objects/61/b4ace8a9797ca63350d67dbb6dc81230080727 b/.git_old/objects/61/b4ace8a9797ca63350d67dbb6dc81230080727 new file mode 100644 index 0000000..2f55433 Binary files /dev/null and b/.git_old/objects/61/b4ace8a9797ca63350d67dbb6dc81230080727 differ diff --git a/.git_old/objects/61/b6c81b2f2b29eea03f9516089eb864df189546 b/.git_old/objects/61/b6c81b2f2b29eea03f9516089eb864df189546 new file mode 100644 index 0000000..34b53c5 Binary files /dev/null and b/.git_old/objects/61/b6c81b2f2b29eea03f9516089eb864df189546 differ diff --git a/.git_old/objects/61/bfedba98ba079a49741cb5ab50e6712207272b b/.git_old/objects/61/bfedba98ba079a49741cb5ab50e6712207272b new file mode 100644 index 0000000..7510a95 Binary files /dev/null and b/.git_old/objects/61/bfedba98ba079a49741cb5ab50e6712207272b differ diff --git a/.git_old/objects/61/c5ef1f397d45822972d6c88290c7bff49e3bb3 b/.git_old/objects/61/c5ef1f397d45822972d6c88290c7bff49e3bb3 new file mode 100644 index 0000000..b25cb89 Binary files /dev/null and b/.git_old/objects/61/c5ef1f397d45822972d6c88290c7bff49e3bb3 differ diff --git a/.git_old/objects/62/2c257cfcb1539ce183dd5205e2578ac1ab45d3 b/.git_old/objects/62/2c257cfcb1539ce183dd5205e2578ac1ab45d3 new file mode 100644 index 0000000..bf90d30 Binary files /dev/null and b/.git_old/objects/62/2c257cfcb1539ce183dd5205e2578ac1ab45d3 differ diff --git a/.git_old/objects/65/60cfd1a71cd88f2874ce4637320d31d70c7265 b/.git_old/objects/65/60cfd1a71cd88f2874ce4637320d31d70c7265 new file mode 100644 index 0000000..4d62eb3 Binary files /dev/null and b/.git_old/objects/65/60cfd1a71cd88f2874ce4637320d31d70c7265 differ diff --git a/.git_old/objects/65/7329c10b527d3142fc1e922c23e5ec4c98d219 b/.git_old/objects/65/7329c10b527d3142fc1e922c23e5ec4c98d219 new file mode 100644 index 0000000..f37650c Binary files /dev/null and b/.git_old/objects/65/7329c10b527d3142fc1e922c23e5ec4c98d219 differ diff --git a/.git_old/objects/65/b0c4c87a55be4def76c7f08fddf1afa71bfb14 b/.git_old/objects/65/b0c4c87a55be4def76c7f08fddf1afa71bfb14 new file mode 100644 index 0000000..3bea620 Binary files /dev/null and b/.git_old/objects/65/b0c4c87a55be4def76c7f08fddf1afa71bfb14 differ diff --git a/.git_old/objects/66/0fc01c83dffd65cc411e0469aa774f0f71b743 b/.git_old/objects/66/0fc01c83dffd65cc411e0469aa774f0f71b743 new file mode 100644 index 0000000..0d01f5d Binary files /dev/null and b/.git_old/objects/66/0fc01c83dffd65cc411e0469aa774f0f71b743 differ diff --git a/.git_old/objects/66/be14e957ae4ede1e48267d9761436364a1bc7b b/.git_old/objects/66/be14e957ae4ede1e48267d9761436364a1bc7b new file mode 100644 index 0000000..4731fbc Binary files /dev/null and b/.git_old/objects/66/be14e957ae4ede1e48267d9761436364a1bc7b differ diff --git a/.git_old/objects/66/c145675ce0fd65e968e7656bf7f182fb5f6ee3 b/.git_old/objects/66/c145675ce0fd65e968e7656bf7f182fb5f6ee3 new file mode 100644 index 0000000..e116445 Binary files /dev/null and b/.git_old/objects/66/c145675ce0fd65e968e7656bf7f182fb5f6ee3 differ diff --git a/.git_old/objects/66/e46e475ee71acdd01bc03fa54f9947dce76e92 b/.git_old/objects/66/e46e475ee71acdd01bc03fa54f9947dce76e92 new file mode 100644 index 0000000..86d9f46 Binary files /dev/null and b/.git_old/objects/66/e46e475ee71acdd01bc03fa54f9947dce76e92 differ diff --git a/.git_old/objects/6a/294aa5b14ac464848e0bfb5de63659bfa3bedc b/.git_old/objects/6a/294aa5b14ac464848e0bfb5de63659bfa3bedc new file mode 100644 index 0000000..b85ed18 Binary files /dev/null and b/.git_old/objects/6a/294aa5b14ac464848e0bfb5de63659bfa3bedc differ diff --git a/.git_old/objects/6b/356e80bc5f998979c357a42d0247138f9e033c b/.git_old/objects/6b/356e80bc5f998979c357a42d0247138f9e033c new file mode 100644 index 0000000..cf745f4 Binary files /dev/null and b/.git_old/objects/6b/356e80bc5f998979c357a42d0247138f9e033c differ diff --git a/.git_old/objects/6c/06015c5e937a3be4aeb03557ea1aa51c355d3c b/.git_old/objects/6c/06015c5e937a3be4aeb03557ea1aa51c355d3c new file mode 100644 index 0000000..be95b51 Binary files /dev/null and b/.git_old/objects/6c/06015c5e937a3be4aeb03557ea1aa51c355d3c differ diff --git a/.git_old/objects/6c/27a278414b92d504acd67400841ff279964633 b/.git_old/objects/6c/27a278414b92d504acd67400841ff279964633 new file mode 100644 index 0000000..f136ea5 Binary files /dev/null and b/.git_old/objects/6c/27a278414b92d504acd67400841ff279964633 differ diff --git a/.git_old/objects/6c/c922fad4c2f466c09574cfc699f9d2b425c52d b/.git_old/objects/6c/c922fad4c2f466c09574cfc699f9d2b425c52d new file mode 100644 index 0000000..5882da2 Binary files /dev/null and b/.git_old/objects/6c/c922fad4c2f466c09574cfc699f9d2b425c52d differ diff --git a/.git_old/objects/6c/cda32b27a329d4e9295d60a03f179b6272fb68 b/.git_old/objects/6c/cda32b27a329d4e9295d60a03f179b6272fb68 new file mode 100644 index 0000000..2a667d1 Binary files /dev/null and b/.git_old/objects/6c/cda32b27a329d4e9295d60a03f179b6272fb68 differ diff --git a/.git_old/objects/6c/d89abcf7133c3ceea2dc72d3aa46660d94e475 b/.git_old/objects/6c/d89abcf7133c3ceea2dc72d3aa46660d94e475 new file mode 100644 index 0000000..b408dbc Binary files /dev/null and b/.git_old/objects/6c/d89abcf7133c3ceea2dc72d3aa46660d94e475 differ diff --git a/.git_old/objects/6e/044869b795fd67b1f534170ab253b0d1949483 b/.git_old/objects/6e/044869b795fd67b1f534170ab253b0d1949483 new file mode 100644 index 0000000..8e2cdcb Binary files /dev/null and b/.git_old/objects/6e/044869b795fd67b1f534170ab253b0d1949483 differ diff --git a/.git_old/objects/70/73ca2fad3a7b904cd164d01632d0f3cb370998 b/.git_old/objects/70/73ca2fad3a7b904cd164d01632d0f3cb370998 new file mode 100644 index 0000000..84a9ed8 Binary files /dev/null and b/.git_old/objects/70/73ca2fad3a7b904cd164d01632d0f3cb370998 differ diff --git a/.git_old/objects/71/57cf88240c726efea7b2be3245a96e4b763b86 b/.git_old/objects/71/57cf88240c726efea7b2be3245a96e4b763b86 new file mode 100644 index 0000000..17f2768 Binary files /dev/null and b/.git_old/objects/71/57cf88240c726efea7b2be3245a96e4b763b86 differ diff --git a/.git_old/objects/71/5dc99cbe145ccc7a11dadcd6dd67796ad73863 b/.git_old/objects/71/5dc99cbe145ccc7a11dadcd6dd67796ad73863 new file mode 100644 index 0000000..f5af1fb Binary files /dev/null and b/.git_old/objects/71/5dc99cbe145ccc7a11dadcd6dd67796ad73863 differ diff --git a/.git_old/objects/73/12d422d9041df3022dfc9a8828de730e5dba16 b/.git_old/objects/73/12d422d9041df3022dfc9a8828de730e5dba16 new file mode 100644 index 0000000..dd40976 Binary files /dev/null and b/.git_old/objects/73/12d422d9041df3022dfc9a8828de730e5dba16 differ diff --git a/.git_old/objects/73/25a93c61c6844228d6f800e7d061b0d8f8acfb b/.git_old/objects/73/25a93c61c6844228d6f800e7d061b0d8f8acfb new file mode 100644 index 0000000..06da8cb --- /dev/null +++ b/.git_old/objects/73/25a93c61c6844228d6f800e7d061b0d8f8acfb @@ -0,0 +1 @@ +xu1k0%)A(j:rC).K(2gYuL$Ȳɘ?Vwq29/(M7[nP{I`h3j#h-̻SBޢ21L? +`yK47p5$+ddH镀?BK۱h!kO~x˅RN]]ʠU!S,TK%3 j;Ćjhq*sD +9ϭ9?3:FOUJ~ (LM(LYVۜ=ԵrX'9} \ No newline at end of file diff --git a/.git_old/objects/78/584dc0b516ac50008089969cec0763b162deac b/.git_old/objects/78/584dc0b516ac50008089969cec0763b162deac new file mode 100644 index 0000000..013bce0 Binary files /dev/null and b/.git_old/objects/78/584dc0b516ac50008089969cec0763b162deac differ diff --git a/.git_old/objects/79/8082ed849bf17f8d2fd4a7ac6119364113356b b/.git_old/objects/79/8082ed849bf17f8d2fd4a7ac6119364113356b new file mode 100644 index 0000000..585ec17 Binary files /dev/null and b/.git_old/objects/79/8082ed849bf17f8d2fd4a7ac6119364113356b differ diff --git a/.git_old/objects/7a/047ac53d280cdc1a864831c689dc93b13a6619 b/.git_old/objects/7a/047ac53d280cdc1a864831c689dc93b13a6619 new file mode 100644 index 0000000..722340a Binary files /dev/null and b/.git_old/objects/7a/047ac53d280cdc1a864831c689dc93b13a6619 differ diff --git a/.git_old/objects/7a/07a6cdda5ad1f19f48982d6cab8f31a0f2c578 b/.git_old/objects/7a/07a6cdda5ad1f19f48982d6cab8f31a0f2c578 new file mode 100644 index 0000000..e3d226e Binary files /dev/null and b/.git_old/objects/7a/07a6cdda5ad1f19f48982d6cab8f31a0f2c578 differ diff --git a/.git_old/objects/7a/297b8c6781f7ddcf936c5ec360b4ed7c611fb2 b/.git_old/objects/7a/297b8c6781f7ddcf936c5ec360b4ed7c611fb2 new file mode 100644 index 0000000..37486f1 Binary files /dev/null and b/.git_old/objects/7a/297b8c6781f7ddcf936c5ec360b4ed7c611fb2 differ diff --git a/.git_old/objects/7a/3b405335aee913885f4ebab4677add598bcd57 b/.git_old/objects/7a/3b405335aee913885f4ebab4677add598bcd57 new file mode 100644 index 0000000..3168338 Binary files /dev/null and b/.git_old/objects/7a/3b405335aee913885f4ebab4677add598bcd57 differ diff --git a/.git_old/objects/7a/a3d6ee1a054c74b2edad32a13007cacfcb2c3f b/.git_old/objects/7a/a3d6ee1a054c74b2edad32a13007cacfcb2c3f new file mode 100644 index 0000000..12580f2 Binary files /dev/null and b/.git_old/objects/7a/a3d6ee1a054c74b2edad32a13007cacfcb2c3f differ diff --git a/.git_old/objects/7e/6734eaa7292439f01a4e751437f9c01b4f0eb0 b/.git_old/objects/7e/6734eaa7292439f01a4e751437f9c01b4f0eb0 new file mode 100644 index 0000000..314a476 Binary files /dev/null and b/.git_old/objects/7e/6734eaa7292439f01a4e751437f9c01b4f0eb0 differ diff --git a/.git_old/objects/7e/7bcdd1e44510e3fa2a9a54c71c341cac95112b b/.git_old/objects/7e/7bcdd1e44510e3fa2a9a54c71c341cac95112b new file mode 100644 index 0000000..d6a1b96 Binary files /dev/null and b/.git_old/objects/7e/7bcdd1e44510e3fa2a9a54c71c341cac95112b differ diff --git a/.git_old/objects/7e/98a11fa5ce9ede7efedf43602c9fd6762d3463 b/.git_old/objects/7e/98a11fa5ce9ede7efedf43602c9fd6762d3463 new file mode 100644 index 0000000..c920fde Binary files /dev/null and b/.git_old/objects/7e/98a11fa5ce9ede7efedf43602c9fd6762d3463 differ diff --git a/.git_old/objects/7e/eb78dcd4183fea19c8640344644e594ada6802 b/.git_old/objects/7e/eb78dcd4183fea19c8640344644e594ada6802 new file mode 100644 index 0000000..7bac971 Binary files /dev/null and b/.git_old/objects/7e/eb78dcd4183fea19c8640344644e594ada6802 differ diff --git a/.git_old/objects/7f/4948e94fe3204c58017edd0eaf02b0ddb03e09 b/.git_old/objects/7f/4948e94fe3204c58017edd0eaf02b0ddb03e09 new file mode 100644 index 0000000..f71379a Binary files /dev/null and b/.git_old/objects/7f/4948e94fe3204c58017edd0eaf02b0ddb03e09 differ diff --git a/.git_old/objects/7f/8e91139cc59c1e37b1fc4a7ef39c620e9370f7 b/.git_old/objects/7f/8e91139cc59c1e37b1fc4a7ef39c620e9370f7 new file mode 100644 index 0000000..7f25567 Binary files /dev/null and b/.git_old/objects/7f/8e91139cc59c1e37b1fc4a7ef39c620e9370f7 differ diff --git a/.git_old/objects/7f/9ba6e71bed9c4e4f125b397f09442aac11f17b b/.git_old/objects/7f/9ba6e71bed9c4e4f125b397f09442aac11f17b new file mode 100644 index 0000000..e73a38a Binary files /dev/null and b/.git_old/objects/7f/9ba6e71bed9c4e4f125b397f09442aac11f17b differ diff --git a/.git_old/objects/7f/c0b18d3f69a328cc44f6254ecf41674da624a1 b/.git_old/objects/7f/c0b18d3f69a328cc44f6254ecf41674da624a1 new file mode 100644 index 0000000..4017330 Binary files /dev/null and b/.git_old/objects/7f/c0b18d3f69a328cc44f6254ecf41674da624a1 differ diff --git a/.git_old/objects/7f/d46b98a0ae2f82cbeb4163e20b6c0c32674c31 b/.git_old/objects/7f/d46b98a0ae2f82cbeb4163e20b6c0c32674c31 new file mode 100644 index 0000000..76df068 Binary files /dev/null and b/.git_old/objects/7f/d46b98a0ae2f82cbeb4163e20b6c0c32674c31 differ diff --git a/.git_old/objects/80/01553a495cb860f9f55064d13973d58af8ca5f b/.git_old/objects/80/01553a495cb860f9f55064d13973d58af8ca5f new file mode 100644 index 0000000..7ae3137 Binary files /dev/null and b/.git_old/objects/80/01553a495cb860f9f55064d13973d58af8ca5f differ diff --git a/.git_old/objects/80/1e2f3aa7dee907dc64c5b7e92113d878ad021f b/.git_old/objects/80/1e2f3aa7dee907dc64c5b7e92113d878ad021f new file mode 100644 index 0000000..9319846 --- /dev/null +++ b/.git_old/objects/80/1e2f3aa7dee907dc64c5b7e92113d878ad021f @@ -0,0 +1 @@ +xJ0ST4" z+vk9[00| u- :nDnoJ8MRe㜬c4~BhcPL6&V{'QIG OjN!+^jbju#x.''>|a]@y?3jVv?<~- poJZvn%\6^Uמ{@Tl~lWVo"a+xx}8iғ27L0,e>?c]sk'3߾c3x- h{xj) ~׽>G;fNfJ/~=lh2@f!.WfqܹwbmMpX0x+А91d*MB~Ť0r]~KٳoMT+.?:By^WB8oqb1.©,dz%MTDJ#EO&TM9"ɛ)˴kg \ No newline at end of file diff --git a/.git_old/objects/8f/93989ec9abf51473b89f3763c82ed1b1584d17 b/.git_old/objects/8f/93989ec9abf51473b89f3763c82ed1b1584d17 new file mode 100644 index 0000000..7cfa4e1 Binary files /dev/null and b/.git_old/objects/8f/93989ec9abf51473b89f3763c82ed1b1584d17 differ diff --git a/.git_old/objects/8f/d6cd4caa5ef36321fbc22679166562f0aa2f06 b/.git_old/objects/8f/d6cd4caa5ef36321fbc22679166562f0aa2f06 new file mode 100644 index 0000000..820da5e Binary files /dev/null and b/.git_old/objects/8f/d6cd4caa5ef36321fbc22679166562f0aa2f06 differ diff --git a/.git_old/objects/8f/f77a80d7a312ee5ff84107113a4b4423c8a71f b/.git_old/objects/8f/f77a80d7a312ee5ff84107113a4b4423c8a71f new file mode 100644 index 0000000..5c89a3a Binary files /dev/null and b/.git_old/objects/8f/f77a80d7a312ee5ff84107113a4b4423c8a71f differ diff --git a/.git_old/objects/90/55cb633d0f80c767f5d47f8d89dff33f1917b4 b/.git_old/objects/90/55cb633d0f80c767f5d47f8d89dff33f1917b4 new file mode 100644 index 0000000..0f99760 Binary files /dev/null and b/.git_old/objects/90/55cb633d0f80c767f5d47f8d89dff33f1917b4 differ diff --git a/.git_old/objects/90/83bdb0f155e4b37cf4a88c01fa480ebb26ca23 b/.git_old/objects/90/83bdb0f155e4b37cf4a88c01fa480ebb26ca23 new file mode 100644 index 0000000..687b1d4 Binary files /dev/null and b/.git_old/objects/90/83bdb0f155e4b37cf4a88c01fa480ebb26ca23 differ diff --git a/.git_old/objects/90/b017854de7416072125048c01e8d51a63a1aa8 b/.git_old/objects/90/b017854de7416072125048c01e8d51a63a1aa8 new file mode 100644 index 0000000..e9b6b45 --- /dev/null +++ b/.git_old/objects/90/b017854de7416072125048c01e8d51a63a1aa8 @@ -0,0 +1 @@ +xAK@xTPzd=1łPѣ$5bHF~x5[y9웙ln͵xFjjJ uZ:jFЫa2YmUiF1O)Ω/pTՊFs?y z9A'wLvN+V-?L*ΘY~q5IJGrCft@A:H>v?{ L,NVg6}~Mqod˻#_>BoEL' x' x' x7}. \ No newline at end of file diff --git a/.git_old/objects/90/d5279ec5de6a10c0ef1efc6ca36cf08fb46f7a b/.git_old/objects/90/d5279ec5de6a10c0ef1efc6ca36cf08fb46f7a new file mode 100644 index 0000000..0b07617 Binary files /dev/null and b/.git_old/objects/90/d5279ec5de6a10c0ef1efc6ca36cf08fb46f7a differ diff --git a/.git_old/objects/93/63a17137f14df19034ee830428468cad5bf168 b/.git_old/objects/93/63a17137f14df19034ee830428468cad5bf168 new file mode 100644 index 0000000..41c63e8 Binary files /dev/null and b/.git_old/objects/93/63a17137f14df19034ee830428468cad5bf168 differ diff --git a/.git_old/objects/93/abc5940e864d4944d2aa62e03c7cf7aab06ba6 b/.git_old/objects/93/abc5940e864d4944d2aa62e03c7cf7aab06ba6 new file mode 100644 index 0000000..551d7d8 --- /dev/null +++ b/.git_old/objects/93/abc5940e864d4944d2aa62e03c7cf7aab06ba6 @@ -0,0 +1,4 @@ +xJ0S̽Po+""x'fmҩxyY"+n0' + +DX:Pj`ɚVA+Z; 0rop9Wx# +T^\oyXJp)nq1h \ No newline at end of file diff --git a/.git_old/objects/93/b47ae2ccd38d0111f52ee11a4f50add0fe8e2e b/.git_old/objects/93/b47ae2ccd38d0111f52ee11a4f50add0fe8e2e new file mode 100644 index 0000000..f15fd6f Binary files /dev/null and b/.git_old/objects/93/b47ae2ccd38d0111f52ee11a4f50add0fe8e2e differ diff --git a/.git_old/objects/93/bc1bd866c339494ed9aa255131039ee15422ce b/.git_old/objects/93/bc1bd866c339494ed9aa255131039ee15422ce new file mode 100644 index 0000000..e2bb4d6 --- /dev/null +++ b/.git_old/objects/93/bc1bd866c339494ed9aa255131039ee15422ce @@ -0,0 +1,4 @@ +xMO078gЋpH 6yI@"މơ)kuʋ ~1/&~?#&}I'Ͽ#V.YV K쫖M'U,y},jwLAy,OLEF@C{t4vhܦѸ\O?NnY%Zms C +/!@pا!,@& (4e(h +ȨRu*lMgd3RTRtb'K>]ƽ +ﵝOEhҶȄr%)8XK4ɶ#_]-.FM)}B{8L*;ecG41m;^N+;g=$IfԒ]X!#T}l?a'81_`+Q@ \ No newline at end of file diff --git a/.git_old/objects/93/fc646ebb367e97a58597c988d4e56b7c5546d0 b/.git_old/objects/93/fc646ebb367e97a58597c988d4e56b7c5546d0 new file mode 100644 index 0000000..986f8b4 Binary files /dev/null and b/.git_old/objects/93/fc646ebb367e97a58597c988d4e56b7c5546d0 differ diff --git a/.git_old/objects/98/0a48345abc47c1b8aef497ee31679020c7633c b/.git_old/objects/98/0a48345abc47c1b8aef497ee31679020c7633c new file mode 100644 index 0000000..b486900 Binary files /dev/null and b/.git_old/objects/98/0a48345abc47c1b8aef497ee31679020c7633c differ diff --git a/.git_old/objects/9a/0150a9fe4a800ecf299ed095864dad15ad29e4 b/.git_old/objects/9a/0150a9fe4a800ecf299ed095864dad15ad29e4 new file mode 100644 index 0000000..f138d1f Binary files /dev/null and b/.git_old/objects/9a/0150a9fe4a800ecf299ed095864dad15ad29e4 differ diff --git a/.git_old/objects/9a/72c7c3824c4530c9896679965cc311a9fe7746 b/.git_old/objects/9a/72c7c3824c4530c9896679965cc311a9fe7746 new file mode 100644 index 0000000..7d66907 Binary files /dev/null and b/.git_old/objects/9a/72c7c3824c4530c9896679965cc311a9fe7746 differ diff --git a/.git_old/objects/9a/80df955dbfb1d7071359a00107f35e5d41a864 b/.git_old/objects/9a/80df955dbfb1d7071359a00107f35e5d41a864 new file mode 100644 index 0000000..096e817 Binary files /dev/null and b/.git_old/objects/9a/80df955dbfb1d7071359a00107f35e5d41a864 differ diff --git a/.git_old/objects/9a/9865dbed9c638ae6af1d5627f8a51bf0579204 b/.git_old/objects/9a/9865dbed9c638ae6af1d5627f8a51bf0579204 new file mode 100644 index 0000000..863a654 Binary files /dev/null and b/.git_old/objects/9a/9865dbed9c638ae6af1d5627f8a51bf0579204 differ diff --git a/.git_old/objects/9b/046f731af9fe06ca4645d53a2653e782b66fae b/.git_old/objects/9b/046f731af9fe06ca4645d53a2653e782b66fae new file mode 100644 index 0000000..63b8098 Binary files /dev/null and b/.git_old/objects/9b/046f731af9fe06ca4645d53a2653e782b66fae differ diff --git a/.git_old/objects/9b/56dc751c1cc7dff75ed80ccbb45f027058e8ce b/.git_old/objects/9b/56dc751c1cc7dff75ed80ccbb45f027058e8ce new file mode 100644 index 0000000..6435654 Binary files /dev/null and b/.git_old/objects/9b/56dc751c1cc7dff75ed80ccbb45f027058e8ce differ diff --git a/.git_old/objects/9b/846e6856ed38ea505d843aea06ed7dbf93fb71 b/.git_old/objects/9b/846e6856ed38ea505d843aea06ed7dbf93fb71 new file mode 100644 index 0000000..3fe7bd5 --- /dev/null +++ b/.git_old/objects/9b/846e6856ed38ea505d843aea06ed7dbf93fb71 @@ -0,0 +1,3 @@ +xMk0{_\ǮBײQGWH$Q +e{k !L<̼Ʉʶ}ln*C۷6(>D"mgj"JWԢ66Sh[OzE:z Oa*m] +rX KhWF;XU2<2ePd9'4jhL4^Rq'iv@#칿O] &5\8Llmnq]j%{(b,h\78L_~iNtAd3M, hlĻ{;[>Sqy Vb \ No newline at end of file diff --git a/.git_old/objects/9b/91330a37258f62a8288ee71bf3307f008f2a10 b/.git_old/objects/9b/91330a37258f62a8288ee71bf3307f008f2a10 new file mode 100644 index 0000000..c89c92e Binary files /dev/null and b/.git_old/objects/9b/91330a37258f62a8288ee71bf3307f008f2a10 differ diff --git a/.git_old/objects/9b/9caad1f8eb43385f1d74622051fe8f38d39f27 b/.git_old/objects/9b/9caad1f8eb43385f1d74622051fe8f38d39f27 new file mode 100644 index 0000000..1e2bdc6 Binary files /dev/null and b/.git_old/objects/9b/9caad1f8eb43385f1d74622051fe8f38d39f27 differ diff --git a/.git_old/objects/a1/16228e869ea572040366531b8935ebc32e85d7 b/.git_old/objects/a1/16228e869ea572040366531b8935ebc32e85d7 new file mode 100644 index 0000000..5118237 Binary files /dev/null and b/.git_old/objects/a1/16228e869ea572040366531b8935ebc32e85d7 differ diff --git a/.git_old/objects/a1/b96d397019d2bc3e6174aabade83744389f63b b/.git_old/objects/a1/b96d397019d2bc3e6174aabade83744389f63b new file mode 100644 index 0000000..9d20237 Binary files /dev/null and b/.git_old/objects/a1/b96d397019d2bc3e6174aabade83744389f63b differ diff --git a/.git_old/objects/a1/f401dc616f323b17b6a60f4d2b7a134028f72b b/.git_old/objects/a1/f401dc616f323b17b6a60f4d2b7a134028f72b new file mode 100644 index 0000000..90a1b0e Binary files /dev/null and b/.git_old/objects/a1/f401dc616f323b17b6a60f4d2b7a134028f72b differ diff --git a/.git_old/objects/a4/0885917e911e1baa1edded6bfb56eea006dbb2 b/.git_old/objects/a4/0885917e911e1baa1edded6bfb56eea006dbb2 new file mode 100644 index 0000000..ed25b3b Binary files /dev/null and b/.git_old/objects/a4/0885917e911e1baa1edded6bfb56eea006dbb2 differ diff --git a/.git_old/objects/a4/29c7219d30e797d4a6b3cfb579266f323dd030 b/.git_old/objects/a4/29c7219d30e797d4a6b3cfb579266f323dd030 new file mode 100644 index 0000000..930aa1c Binary files /dev/null and b/.git_old/objects/a4/29c7219d30e797d4a6b3cfb579266f323dd030 differ diff --git a/.git_old/objects/a4/d300d48636e732a2a708b26381c5f55b30bb18 b/.git_old/objects/a4/d300d48636e732a2a708b26381c5f55b30bb18 new file mode 100644 index 0000000..2e10f9a Binary files /dev/null and b/.git_old/objects/a4/d300d48636e732a2a708b26381c5f55b30bb18 differ diff --git a/.git_old/objects/a4/ec2c5c2247a7a3995064cf0fb1e7a74004c225 b/.git_old/objects/a4/ec2c5c2247a7a3995064cf0fb1e7a74004c225 new file mode 100644 index 0000000..938ab19 Binary files /dev/null and b/.git_old/objects/a4/ec2c5c2247a7a3995064cf0fb1e7a74004c225 differ diff --git a/.git_old/objects/a5/211140afa41f0e712f185e050d5a5decd32079 b/.git_old/objects/a5/211140afa41f0e712f185e050d5a5decd32079 new file mode 100644 index 0000000..b6ccc4c Binary files /dev/null and b/.git_old/objects/a5/211140afa41f0e712f185e050d5a5decd32079 differ diff --git a/.git_old/objects/a5/49ded3961f3e74f007f8b8cc4139662e4c7399 b/.git_old/objects/a5/49ded3961f3e74f007f8b8cc4139662e4c7399 new file mode 100644 index 0000000..763a7cf Binary files /dev/null and b/.git_old/objects/a5/49ded3961f3e74f007f8b8cc4139662e4c7399 differ diff --git a/.git_old/objects/a5/ef711d28fbd8cded7b78aad33d85826c3e19e9 b/.git_old/objects/a5/ef711d28fbd8cded7b78aad33d85826c3e19e9 new file mode 100644 index 0000000..27b144b Binary files /dev/null and b/.git_old/objects/a5/ef711d28fbd8cded7b78aad33d85826c3e19e9 differ diff --git a/.git_old/objects/a7/2f6a64c6d1763ec553f453e09e3b7bd47ff19d b/.git_old/objects/a7/2f6a64c6d1763ec553f453e09e3b7bd47ff19d new file mode 100644 index 0000000..2d954c9 Binary files /dev/null and b/.git_old/objects/a7/2f6a64c6d1763ec553f453e09e3b7bd47ff19d differ diff --git a/.git_old/objects/a7/5a2e16a06c840cb13f802dd24927d35eff2bdc b/.git_old/objects/a7/5a2e16a06c840cb13f802dd24927d35eff2bdc new file mode 100644 index 0000000..c7b45ef Binary files /dev/null and b/.git_old/objects/a7/5a2e16a06c840cb13f802dd24927d35eff2bdc differ diff --git a/.git_old/objects/a7/5a3dad73783002a63dfa9e516c7c5131ea7fab b/.git_old/objects/a7/5a3dad73783002a63dfa9e516c7c5131ea7fab new file mode 100644 index 0000000..f913302 --- /dev/null +++ b/.git_old/objects/a7/5a3dad73783002a63dfa9e516c7c5131ea7fab @@ -0,0 +1,4 @@ +x_o O:bt.f+ik`)VE +j;Q2[!(MlYԳHe#R9(] ʊ 40֩kRRfpT|IULA: e*\c[Br`<Do5XE|j{A#C4p 0IFc{|xk7 d24d1]qV 9kɆ{#-h`#LN@#nx5sE.1zCE+bm565վۡ7e‰/ 返>79s]lܛQ#p ,4w` G.M%Y55 `e+ne8AAzō6MW7d|qUy96Z-v,_}w +!@yD_^J3X^b?riPTḚ5>E8'{/E98fCbI_,ΨUr`[p,EaxnI 7 \ No newline at end of file diff --git a/.git_old/objects/c3/93062c3eca2a1f8282ea821de1d7c8803b3dd3 b/.git_old/objects/c3/93062c3eca2a1f8282ea821de1d7c8803b3dd3 new file mode 100644 index 0000000..4ea5e5a Binary files /dev/null and b/.git_old/objects/c3/93062c3eca2a1f8282ea821de1d7c8803b3dd3 differ diff --git a/.git_old/objects/c3/eef538cf2b8ea8f8a3b1d5fb5271452ad8a10a b/.git_old/objects/c3/eef538cf2b8ea8f8a3b1d5fb5271452ad8a10a new file mode 100644 index 0000000..4d78dfb Binary files /dev/null and b/.git_old/objects/c3/eef538cf2b8ea8f8a3b1d5fb5271452ad8a10a differ diff --git a/.git_old/objects/c4/46bb37547947b574c756efccb122a67ae30888 b/.git_old/objects/c4/46bb37547947b574c756efccb122a67ae30888 new file mode 100644 index 0000000..ed65876 Binary files /dev/null and b/.git_old/objects/c4/46bb37547947b574c756efccb122a67ae30888 differ diff --git a/.git_old/objects/c4/8c1a839f22d46a67f9296524ce467000cac804 b/.git_old/objects/c4/8c1a839f22d46a67f9296524ce467000cac804 new file mode 100644 index 0000000..dad1523 Binary files /dev/null and b/.git_old/objects/c4/8c1a839f22d46a67f9296524ce467000cac804 differ diff --git a/.git_old/objects/c4/f29c94a63c23f6444c5b46f039ed6bd727a908 b/.git_old/objects/c4/f29c94a63c23f6444c5b46f039ed6bd727a908 new file mode 100644 index 0000000..af7d6c2 Binary files /dev/null and b/.git_old/objects/c4/f29c94a63c23f6444c5b46f039ed6bd727a908 differ diff --git a/.git_old/objects/c5/0748de7d8d5339a157655736a680c811ad8f67 b/.git_old/objects/c5/0748de7d8d5339a157655736a680c811ad8f67 new file mode 100644 index 0000000..acc67f2 Binary files /dev/null and b/.git_old/objects/c5/0748de7d8d5339a157655736a680c811ad8f67 differ diff --git a/.git_old/objects/c5/1e0e531b586d71bb698a090ba3feb37f6f421f b/.git_old/objects/c5/1e0e531b586d71bb698a090ba3feb37f6f421f new file mode 100644 index 0000000..198534a Binary files /dev/null and b/.git_old/objects/c5/1e0e531b586d71bb698a090ba3feb37f6f421f differ diff --git a/.git_old/objects/c6/49f0ace2bfb58c9a36143453aa7cdb72e963c3 b/.git_old/objects/c6/49f0ace2bfb58c9a36143453aa7cdb72e963c3 new file mode 100644 index 0000000..997dd2c Binary files /dev/null and b/.git_old/objects/c6/49f0ace2bfb58c9a36143453aa7cdb72e963c3 differ diff --git a/.git_old/objects/c6/8ea7abbf5810c6581de09e331d158e9ce26912 b/.git_old/objects/c6/8ea7abbf5810c6581de09e331d158e9ce26912 new file mode 100644 index 0000000..aebc5fc Binary files /dev/null and b/.git_old/objects/c6/8ea7abbf5810c6581de09e331d158e9ce26912 differ diff --git a/.git_old/objects/c9/1879875d6c766425371c9179bcec2dda997141 b/.git_old/objects/c9/1879875d6c766425371c9179bcec2dda997141 new file mode 100644 index 0000000..4c861b1 Binary files /dev/null and b/.git_old/objects/c9/1879875d6c766425371c9179bcec2dda997141 differ diff --git a/.git_old/objects/c9/98a4c1db97edbad6d7592a01ece2ba48ee3cc5 b/.git_old/objects/c9/98a4c1db97edbad6d7592a01ece2ba48ee3cc5 new file mode 100644 index 0000000..b30d9f7 Binary files /dev/null and b/.git_old/objects/c9/98a4c1db97edbad6d7592a01ece2ba48ee3cc5 differ diff --git a/.git_old/objects/c9/d69f1e4f8dc452d11b4c0da2a32ce52724a689 b/.git_old/objects/c9/d69f1e4f8dc452d11b4c0da2a32ce52724a689 new file mode 100644 index 0000000..0c4c53a Binary files /dev/null and b/.git_old/objects/c9/d69f1e4f8dc452d11b4c0da2a32ce52724a689 differ diff --git a/.git_old/objects/cb/027fc4550beab95edb12a4c4c3cf5e2615e713 b/.git_old/objects/cb/027fc4550beab95edb12a4c4c3cf5e2615e713 new file mode 100644 index 0000000..35e191a Binary files /dev/null and b/.git_old/objects/cb/027fc4550beab95edb12a4c4c3cf5e2615e713 differ diff --git a/.git_old/objects/cb/49add39e8550778fb4b135f34712d0c8081ada b/.git_old/objects/cb/49add39e8550778fb4b135f34712d0c8081ada new file mode 100644 index 0000000..ab25ebb Binary files /dev/null and b/.git_old/objects/cb/49add39e8550778fb4b135f34712d0c8081ada differ diff --git a/.git_old/objects/cb/fc7487e3165883e0b005311c0efc1155cd0a58 b/.git_old/objects/cb/fc7487e3165883e0b005311c0efc1155cd0a58 new file mode 100644 index 0000000..415adf8 Binary files /dev/null and b/.git_old/objects/cb/fc7487e3165883e0b005311c0efc1155cd0a58 differ diff --git a/.git_old/objects/cd/2a899d3c6c34d0049b92c6d81c7f19bab4186c b/.git_old/objects/cd/2a899d3c6c34d0049b92c6d81c7f19bab4186c new file mode 100644 index 0000000..8a37d9c Binary files /dev/null and b/.git_old/objects/cd/2a899d3c6c34d0049b92c6d81c7f19bab4186c differ diff --git a/.git_old/objects/cd/76a247a5d7f5a55a0d14bb8935daf2f8f78df8 b/.git_old/objects/cd/76a247a5d7f5a55a0d14bb8935daf2f8f78df8 new file mode 100644 index 0000000..d171688 Binary files /dev/null and b/.git_old/objects/cd/76a247a5d7f5a55a0d14bb8935daf2f8f78df8 differ diff --git a/.git_old/objects/cd/7bd37018220cd089db3dcbc923742e4588dfdf b/.git_old/objects/cd/7bd37018220cd089db3dcbc923742e4588dfdf new file mode 100644 index 0000000..b67e7a9 Binary files /dev/null and b/.git_old/objects/cd/7bd37018220cd089db3dcbc923742e4588dfdf differ diff --git a/.git_old/objects/cd/f707356ccbd28d1c27db3b575c33f4f9df204a b/.git_old/objects/cd/f707356ccbd28d1c27db3b575c33f4f9df204a new file mode 100644 index 0000000..9408b15 Binary files /dev/null and b/.git_old/objects/cd/f707356ccbd28d1c27db3b575c33f4f9df204a differ diff --git a/.git_old/objects/ce/0f3596ee8dae8546fb12ca50d7a1fceaea609d b/.git_old/objects/ce/0f3596ee8dae8546fb12ca50d7a1fceaea609d new file mode 100644 index 0000000..1dfcbc1 Binary files /dev/null and b/.git_old/objects/ce/0f3596ee8dae8546fb12ca50d7a1fceaea609d differ diff --git a/.git_old/objects/ce/3dfcb94e28c90e99b1cde73236eeb6ddef8f01 b/.git_old/objects/ce/3dfcb94e28c90e99b1cde73236eeb6ddef8f01 new file mode 100644 index 0000000..be23a92 Binary files /dev/null and b/.git_old/objects/ce/3dfcb94e28c90e99b1cde73236eeb6ddef8f01 differ diff --git a/.git_old/objects/ce/805ca96242916773494c35868ea830daea5e74 b/.git_old/objects/ce/805ca96242916773494c35868ea830daea5e74 new file mode 100644 index 0000000..e72d968 Binary files /dev/null and b/.git_old/objects/ce/805ca96242916773494c35868ea830daea5e74 differ diff --git a/.git_old/objects/ce/9594062bcc2bc603c6caba46a60a2e1d3d1435 b/.git_old/objects/ce/9594062bcc2bc603c6caba46a60a2e1d3d1435 new file mode 100644 index 0000000..45e3952 --- /dev/null +++ b/.git_old/objects/ce/9594062bcc2bc603c6caba46a60a2e1d3d1435 @@ -0,0 +1 @@ +x]Kk0{ί0{.!=L[)ED6 %G"Чٝڶse0+wFk1[ppCaJ/ؕ}QW۲94XqB#Yt#.WNTAc1'܈9,Y8j1xWEi5(CgƯ*Fs0Q~-c(<_[鍗?Ŀ-_;8uZ,ʽ0+1hߝ@nlJ \ No newline at end of file diff --git a/.git_old/objects/ce/c4691bd77129fa53940300e690237320d28655 b/.git_old/objects/ce/c4691bd77129fa53940300e690237320d28655 new file mode 100644 index 0000000..0474f93 Binary files /dev/null and b/.git_old/objects/ce/c4691bd77129fa53940300e690237320d28655 differ diff --git a/.git_old/objects/ce/d6b41a25fd8eed3d76fc7f49820887a2366ea1 b/.git_old/objects/ce/d6b41a25fd8eed3d76fc7f49820887a2366ea1 new file mode 100644 index 0000000..163dc57 Binary files /dev/null and b/.git_old/objects/ce/d6b41a25fd8eed3d76fc7f49820887a2366ea1 differ diff --git a/.git_old/objects/ce/e90743a3282961a6909d201d14117181875d50 b/.git_old/objects/ce/e90743a3282961a6909d201d14117181875d50 new file mode 100644 index 0000000..74fd7f0 Binary files /dev/null and b/.git_old/objects/ce/e90743a3282961a6909d201d14117181875d50 differ diff --git a/.git_old/objects/d0/c7a2114e7a20a6b048fbecf180e8975d28c6ad b/.git_old/objects/d0/c7a2114e7a20a6b048fbecf180e8975d28c6ad new file mode 100644 index 0000000..3612b14 Binary files /dev/null and b/.git_old/objects/d0/c7a2114e7a20a6b048fbecf180e8975d28c6ad differ diff --git a/.git_old/objects/d0/f3fd9a7f1b30879ffaf3abc23d8ac0bf0970d6 b/.git_old/objects/d0/f3fd9a7f1b30879ffaf3abc23d8ac0bf0970d6 new file mode 100644 index 0000000..7e70e90 Binary files /dev/null and b/.git_old/objects/d0/f3fd9a7f1b30879ffaf3abc23d8ac0bf0970d6 differ diff --git a/.git_old/objects/d2/0cc62fa2decdcf6273020653a007502c5582c4 b/.git_old/objects/d2/0cc62fa2decdcf6273020653a007502c5582c4 new file mode 100644 index 0000000..b3560b6 Binary files /dev/null and b/.git_old/objects/d2/0cc62fa2decdcf6273020653a007502c5582c4 differ diff --git a/.git_old/objects/d2/2d2becdabb718538bf01fd37026bb3dbbba44e b/.git_old/objects/d2/2d2becdabb718538bf01fd37026bb3dbbba44e new file mode 100644 index 0000000..a6864da Binary files /dev/null and b/.git_old/objects/d2/2d2becdabb718538bf01fd37026bb3dbbba44e differ diff --git a/.git_old/objects/d2/deb82521f8094dfe65c79298453a7f67788f6e b/.git_old/objects/d2/deb82521f8094dfe65c79298453a7f67788f6e new file mode 100644 index 0000000..151eff0 Binary files /dev/null and b/.git_old/objects/d2/deb82521f8094dfe65c79298453a7f67788f6e differ diff --git a/.git_old/objects/d3/71423f5f2c572789da7a118e5aef799f58d8f4 b/.git_old/objects/d3/71423f5f2c572789da7a118e5aef799f58d8f4 new file mode 100644 index 0000000..a8a4198 Binary files /dev/null and b/.git_old/objects/d3/71423f5f2c572789da7a118e5aef799f58d8f4 differ diff --git a/.git_old/objects/d3/c76016f2c463d87a4972ce937d02fff6901f71 b/.git_old/objects/d3/c76016f2c463d87a4972ce937d02fff6901f71 new file mode 100644 index 0000000..360184a Binary files /dev/null and b/.git_old/objects/d3/c76016f2c463d87a4972ce937d02fff6901f71 differ diff --git a/.git_old/objects/d8/13efb8bcb4357bc8506574b2c49346b239683c b/.git_old/objects/d8/13efb8bcb4357bc8506574b2c49346b239683c new file mode 100644 index 0000000..0da1093 Binary files /dev/null and b/.git_old/objects/d8/13efb8bcb4357bc8506574b2c49346b239683c differ diff --git a/.git_old/objects/d8/1a8e22eae44ad1084ec867bace3185c6dbf250 b/.git_old/objects/d8/1a8e22eae44ad1084ec867bace3185c6dbf250 new file mode 100644 index 0000000..ac8fe81 Binary files /dev/null and b/.git_old/objects/d8/1a8e22eae44ad1084ec867bace3185c6dbf250 differ diff --git a/.git_old/objects/db/cb3be78d0b30fd6494e2c3a79247615c04dc8e b/.git_old/objects/db/cb3be78d0b30fd6494e2c3a79247615c04dc8e new file mode 100644 index 0000000..630626f Binary files /dev/null and b/.git_old/objects/db/cb3be78d0b30fd6494e2c3a79247615c04dc8e differ diff --git a/.git_old/objects/df/687f2eb87052e9fe4d2dcbfc169d9495bfff74 b/.git_old/objects/df/687f2eb87052e9fe4d2dcbfc169d9495bfff74 new file mode 100644 index 0000000..e8d4a2e Binary files /dev/null and b/.git_old/objects/df/687f2eb87052e9fe4d2dcbfc169d9495bfff74 differ diff --git a/.git_old/objects/df/6cd7f439db8cf3cb8f56981b9d0a7ae294273b b/.git_old/objects/df/6cd7f439db8cf3cb8f56981b9d0a7ae294273b new file mode 100644 index 0000000..01a8e9e Binary files /dev/null and b/.git_old/objects/df/6cd7f439db8cf3cb8f56981b9d0a7ae294273b differ diff --git a/.git_old/objects/df/7b8f5a55abcb9b2b253c6fda98ace1898881b1 b/.git_old/objects/df/7b8f5a55abcb9b2b253c6fda98ace1898881b1 new file mode 100644 index 0000000..daac9ab Binary files /dev/null and b/.git_old/objects/df/7b8f5a55abcb9b2b253c6fda98ace1898881b1 differ diff --git a/.git_old/objects/df/c1ea41554e16354672e7512a15bdcdbd4c8386 b/.git_old/objects/df/c1ea41554e16354672e7512a15bdcdbd4c8386 new file mode 100644 index 0000000..8c4d749 Binary files /dev/null and b/.git_old/objects/df/c1ea41554e16354672e7512a15bdcdbd4c8386 differ diff --git a/.git_old/objects/df/d4e7d744e8ce6bb2d659a89668241ad98dcd8e b/.git_old/objects/df/d4e7d744e8ce6bb2d659a89668241ad98dcd8e new file mode 100644 index 0000000..503a987 Binary files /dev/null and b/.git_old/objects/df/d4e7d744e8ce6bb2d659a89668241ad98dcd8e differ diff --git a/.git_old/objects/df/ed011abd3ec6df00beea7615cff44a1fdf9af2 b/.git_old/objects/df/ed011abd3ec6df00beea7615cff44a1fdf9af2 new file mode 100644 index 0000000..db77de3 Binary files /dev/null and b/.git_old/objects/df/ed011abd3ec6df00beea7615cff44a1fdf9af2 differ diff --git a/.git_old/objects/e1/18db677944d8c23af685dfd5295a797590c5e1 b/.git_old/objects/e1/18db677944d8c23af685dfd5295a797590c5e1 new file mode 100644 index 0000000..c99e6a9 Binary files /dev/null and b/.git_old/objects/e1/18db677944d8c23af685dfd5295a797590c5e1 differ diff --git a/.git_old/objects/e1/7dfd4a0004da22960c92deb1647099cb45702f b/.git_old/objects/e1/7dfd4a0004da22960c92deb1647099cb45702f new file mode 100644 index 0000000..9843f39 --- /dev/null +++ b/.git_old/objects/e1/7dfd4a0004da22960c92deb1647099cb45702f @@ -0,0 +1,2 @@ +xAo {_a8Wk4`71Iն-2<{2eĊk:DiP&}L? +[cy57p8- eU?Bhymö1hk'\( >oy㤱SyRgH%gT$B=.4npBl!t}Së#5FѨN7#݄_tG8ϯЈ%-p 74]4Eg;Rq  \ No newline at end of file diff --git a/.git_old/objects/e2/9ca2a61524a204219a142d527b4833cea5047f b/.git_old/objects/e2/9ca2a61524a204219a142d527b4833cea5047f new file mode 100644 index 0000000..b68b939 Binary files /dev/null and b/.git_old/objects/e2/9ca2a61524a204219a142d527b4833cea5047f differ diff --git a/.git_old/objects/e3/08b606d4e63455057c08a43e74c5631e17eb15 b/.git_old/objects/e3/08b606d4e63455057c08a43e74c5631e17eb15 new file mode 100644 index 0000000..5b9d403 Binary files /dev/null and b/.git_old/objects/e3/08b606d4e63455057c08a43e74c5631e17eb15 differ diff --git a/.git_old/objects/e3/bbf225aa3310cdfeec2fe5513cae6de42f7d43 b/.git_old/objects/e3/bbf225aa3310cdfeec2fe5513cae6de42f7d43 new file mode 100644 index 0000000..b0fd71f Binary files /dev/null and b/.git_old/objects/e3/bbf225aa3310cdfeec2fe5513cae6de42f7d43 differ diff --git a/.git_old/objects/e3/d61961db69772dab111401f27b911b8a74ef5e b/.git_old/objects/e3/d61961db69772dab111401f27b911b8a74ef5e new file mode 100644 index 0000000..e628c65 Binary files /dev/null and b/.git_old/objects/e3/d61961db69772dab111401f27b911b8a74ef5e differ diff --git a/.git_old/objects/e3/ed27d64e17905f2ea4e370622d916446eba9f6 b/.git_old/objects/e3/ed27d64e17905f2ea4e370622d916446eba9f6 new file mode 100644 index 0000000..6b3a626 Binary files /dev/null and b/.git_old/objects/e3/ed27d64e17905f2ea4e370622d916446eba9f6 differ diff --git a/.git_old/objects/e7/110ec12c5d2f8269805fd67ead52c8d0e4bf5e b/.git_old/objects/e7/110ec12c5d2f8269805fd67ead52c8d0e4bf5e new file mode 100644 index 0000000..ce1cf1e Binary files /dev/null and b/.git_old/objects/e7/110ec12c5d2f8269805fd67ead52c8d0e4bf5e differ diff --git a/.git_old/objects/e7/75ac150786e280de9c82067a0623920c20ca8b b/.git_old/objects/e7/75ac150786e280de9c82067a0623920c20ca8b new file mode 100644 index 0000000..6138759 Binary files /dev/null and b/.git_old/objects/e7/75ac150786e280de9c82067a0623920c20ca8b differ diff --git a/.git_old/objects/e7/e626574780637abd55ae3f2790352e14ce09c3 b/.git_old/objects/e7/e626574780637abd55ae3f2790352e14ce09c3 new file mode 100644 index 0000000..1a0212c Binary files /dev/null and b/.git_old/objects/e7/e626574780637abd55ae3f2790352e14ce09c3 differ diff --git a/.git_old/objects/e9/0d35d04becf67f5c02e5b2af5eddc71cabede0 b/.git_old/objects/e9/0d35d04becf67f5c02e5b2af5eddc71cabede0 new file mode 100644 index 0000000..92d51a7 Binary files /dev/null and b/.git_old/objects/e9/0d35d04becf67f5c02e5b2af5eddc71cabede0 differ diff --git a/.git_old/objects/e9/76589d8a6ad227acfbfabf16c01b6f7878bd5d b/.git_old/objects/e9/76589d8a6ad227acfbfabf16c01b6f7878bd5d new file mode 100644 index 0000000..8f89f80 Binary files /dev/null and b/.git_old/objects/e9/76589d8a6ad227acfbfabf16c01b6f7878bd5d differ diff --git a/.git_old/objects/e9/eed802e7df5d6989158c3bcfc58cd30dea7d81 b/.git_old/objects/e9/eed802e7df5d6989158c3bcfc58cd30dea7d81 new file mode 100644 index 0000000..7f6d87a Binary files /dev/null and b/.git_old/objects/e9/eed802e7df5d6989158c3bcfc58cd30dea7d81 differ diff --git a/.git_old/objects/ea/0cd6fbb8719ccb107dc5f4dadf33a55e521b5d b/.git_old/objects/ea/0cd6fbb8719ccb107dc5f4dadf33a55e521b5d new file mode 100644 index 0000000..22c6fd4 Binary files /dev/null and b/.git_old/objects/ea/0cd6fbb8719ccb107dc5f4dadf33a55e521b5d differ diff --git a/.git_old/objects/ea/53e153faa830df95cdadafef5929e15b62b02c b/.git_old/objects/ea/53e153faa830df95cdadafef5929e15b62b02c new file mode 100644 index 0000000..9bb8914 Binary files /dev/null and b/.git_old/objects/ea/53e153faa830df95cdadafef5929e15b62b02c differ diff --git a/.git_old/objects/eb/31c9e51493408788b2b315dd3884c0d61de43c b/.git_old/objects/eb/31c9e51493408788b2b315dd3884c0d61de43c new file mode 100644 index 0000000..4f4583f Binary files /dev/null and b/.git_old/objects/eb/31c9e51493408788b2b315dd3884c0d61de43c differ diff --git a/.git_old/objects/eb/4a58c0855a598147a76b0e6f013637114951c9 b/.git_old/objects/eb/4a58c0855a598147a76b0e6f013637114951c9 new file mode 100644 index 0000000..2a653e1 Binary files /dev/null and b/.git_old/objects/eb/4a58c0855a598147a76b0e6f013637114951c9 differ diff --git a/.git_old/objects/eb/6b865feba6c1b2dc07bfdb842016832cef1016 b/.git_old/objects/eb/6b865feba6c1b2dc07bfdb842016832cef1016 new file mode 100644 index 0000000..a3e674d Binary files /dev/null and b/.git_old/objects/eb/6b865feba6c1b2dc07bfdb842016832cef1016 differ diff --git a/.git_old/objects/eb/ded20acfd7137ff458c81c66914332f66e0d5d b/.git_old/objects/eb/ded20acfd7137ff458c81c66914332f66e0d5d new file mode 100644 index 0000000..0122b40 Binary files /dev/null and b/.git_old/objects/eb/ded20acfd7137ff458c81c66914332f66e0d5d differ diff --git a/.git_old/objects/ec/0fb6914d980e6632862e47a5e62a76b4052db4 b/.git_old/objects/ec/0fb6914d980e6632862e47a5e62a76b4052db4 new file mode 100644 index 0000000..441b4b3 Binary files /dev/null and b/.git_old/objects/ec/0fb6914d980e6632862e47a5e62a76b4052db4 differ diff --git a/.git_old/objects/ec/29cec978359d9c1494f9d95d490a3c67638eaa b/.git_old/objects/ec/29cec978359d9c1494f9d95d490a3c67638eaa new file mode 100644 index 0000000..fbb1607 Binary files /dev/null and b/.git_old/objects/ec/29cec978359d9c1494f9d95d490a3c67638eaa differ diff --git a/.git_old/objects/ec/72700df2d4cce63f0018044d53a0ea3da5548b b/.git_old/objects/ec/72700df2d4cce63f0018044d53a0ea3da5548b new file mode 100644 index 0000000..6f8958c Binary files /dev/null and b/.git_old/objects/ec/72700df2d4cce63f0018044d53a0ea3da5548b differ diff --git a/.git_old/objects/ec/8ad90f2b25d014115edba4935bf6feb9fe78e4 b/.git_old/objects/ec/8ad90f2b25d014115edba4935bf6feb9fe78e4 new file mode 100644 index 0000000..64e355c Binary files /dev/null and b/.git_old/objects/ec/8ad90f2b25d014115edba4935bf6feb9fe78e4 differ diff --git a/.git_old/objects/ec/c213ea7e44f0b519db95d91a089ff35043998e b/.git_old/objects/ec/c213ea7e44f0b519db95d91a089ff35043998e new file mode 100644 index 0000000..1d21b72 Binary files /dev/null and b/.git_old/objects/ec/c213ea7e44f0b519db95d91a089ff35043998e differ diff --git a/.git_old/objects/ec/dd4fb5aa85228b167d95327dd69274dc0efda4 b/.git_old/objects/ec/dd4fb5aa85228b167d95327dd69274dc0efda4 new file mode 100644 index 0000000..7d75ad1 --- /dev/null +++ b/.git_old/objects/ec/dd4fb5aa85228b167d95327dd69274dc0efda4 @@ -0,0 +1 @@ +xQ]k sEĨ1}`dAM~+S{xխeɇ2mz>e#rhs!V!4!>U}p O>NRF3'PtT]gm iNT:_[g|*,J*,hVJ0~1**Д4#.v>kgMt{cAv0b9]w!Zehs8\&'Fkt%^2r6.-ŋ]4\4lZ?v [2. 3:II?BW2.*%pCn +dƥز\;U`i0"p6^wi]X]4m|;%0\%I \ No newline at end of file diff --git a/.git_old/objects/ef/466401365f4b7a28f709f16a1707115799f3dc b/.git_old/objects/ef/466401365f4b7a28f709f16a1707115799f3dc new file mode 100644 index 0000000..0e70fe7 Binary files /dev/null and b/.git_old/objects/ef/466401365f4b7a28f709f16a1707115799f3dc differ diff --git a/.git_old/objects/ef/945c56aee06e5becbe7e54df3582999b16ad26 b/.git_old/objects/ef/945c56aee06e5becbe7e54df3582999b16ad26 new file mode 100644 index 0000000..5686663 Binary files /dev/null and b/.git_old/objects/ef/945c56aee06e5becbe7e54df3582999b16ad26 differ diff --git a/.git_old/objects/ef/9b01a66abea25eda3aa7c53b6499bb20a461ba b/.git_old/objects/ef/9b01a66abea25eda3aa7c53b6499bb20a461ba new file mode 100644 index 0000000..818546c Binary files /dev/null and b/.git_old/objects/ef/9b01a66abea25eda3aa7c53b6499bb20a461ba differ diff --git a/.git_old/objects/ef/beac6f7efad8eaa5ea44c59d1eccaf7ffe1626 b/.git_old/objects/ef/beac6f7efad8eaa5ea44c59d1eccaf7ffe1626 new file mode 100644 index 0000000..7468961 Binary files /dev/null and b/.git_old/objects/ef/beac6f7efad8eaa5ea44c59d1eccaf7ffe1626 differ diff --git a/.git_old/objects/f2/7142bab679c45b6f768b2452eae133b69a5eda b/.git_old/objects/f2/7142bab679c45b6f768b2452eae133b69a5eda new file mode 100644 index 0000000..be033db Binary files /dev/null and b/.git_old/objects/f2/7142bab679c45b6f768b2452eae133b69a5eda differ diff --git a/.git_old/objects/f2/722d0b67c0ee0d6064307ae9a15f354401e2eb b/.git_old/objects/f2/722d0b67c0ee0d6064307ae9a15f354401e2eb new file mode 100644 index 0000000..f76a7e2 Binary files /dev/null and b/.git_old/objects/f2/722d0b67c0ee0d6064307ae9a15f354401e2eb differ diff --git a/.git_old/objects/f3/31e04209fa4fd05e428b8dc418fb840af3a177 b/.git_old/objects/f3/31e04209fa4fd05e428b8dc418fb840af3a177 new file mode 100644 index 0000000..313cf28 Binary files /dev/null and b/.git_old/objects/f3/31e04209fa4fd05e428b8dc418fb840af3a177 differ diff --git a/.git_old/objects/f3/8b16b011b322c80d4ef4e47071292f4e48ce0d b/.git_old/objects/f3/8b16b011b322c80d4ef4e47071292f4e48ce0d new file mode 100644 index 0000000..a7a084a Binary files /dev/null and b/.git_old/objects/f3/8b16b011b322c80d4ef4e47071292f4e48ce0d differ diff --git a/.git_old/objects/f3/ce2910b218507d348bcd3c33b25578ca13c2bc b/.git_old/objects/f3/ce2910b218507d348bcd3c33b25578ca13c2bc new file mode 100644 index 0000000..c7ebd2d Binary files /dev/null and b/.git_old/objects/f3/ce2910b218507d348bcd3c33b25578ca13c2bc differ diff --git a/.git_old/objects/f4/e021e59dbe8465ecf4406d75491069665f6d40 b/.git_old/objects/f4/e021e59dbe8465ecf4406d75491069665f6d40 new file mode 100644 index 0000000..edf14aa Binary files /dev/null and b/.git_old/objects/f4/e021e59dbe8465ecf4406d75491069665f6d40 differ diff --git a/.git_old/objects/f6/1e07eccb68da58d5c52079b1f5577a753a50cd b/.git_old/objects/f6/1e07eccb68da58d5c52079b1f5577a753a50cd new file mode 100644 index 0000000..8af9da1 --- /dev/null +++ b/.git_old/objects/f6/1e07eccb68da58d5c52079b1f5577a753a50cd @@ -0,0 +1,2 @@ +x% +@[]mBZu!&H_њc Fie4~봰jQb6UAxAo#?dZۆy3{ƍZ ,{p;pQnF} K+.;&S_%odؓ4N{`R`٣JQ +3 A\Vf .A$QpY|9twϼ[%qn9IYrC/\ \ No newline at end of file diff --git a/.git_old/objects/fc/e65edcc9e8225fb850b7c7cc145de43fea3e0b b/.git_old/objects/fc/e65edcc9e8225fb850b7c7cc145de43fea3e0b new file mode 100644 index 0000000..cc99820 Binary files /dev/null and b/.git_old/objects/fc/e65edcc9e8225fb850b7c7cc145de43fea3e0b differ diff --git a/.git_old/objects/fd/442b7b748f5dd75edbf6d63799efc73fb800d1 b/.git_old/objects/fd/442b7b748f5dd75edbf6d63799efc73fb800d1 new file mode 100644 index 0000000..c195283 Binary files /dev/null and b/.git_old/objects/fd/442b7b748f5dd75edbf6d63799efc73fb800d1 differ diff --git a/.git_old/objects/fd/5e6f29dd615e94dd084c8058074a0b13d7b185 b/.git_old/objects/fd/5e6f29dd615e94dd084c8058074a0b13d7b185 new file mode 100644 index 0000000..4e2f0f1 Binary files /dev/null and b/.git_old/objects/fd/5e6f29dd615e94dd084c8058074a0b13d7b185 differ diff --git a/.git_old/objects/fd/6a17dcd546ab4bc5921f212815fd5e01dbfac4 b/.git_old/objects/fd/6a17dcd546ab4bc5921f212815fd5e01dbfac4 new file mode 100644 index 0000000..b3b8f56 Binary files /dev/null and b/.git_old/objects/fd/6a17dcd546ab4bc5921f212815fd5e01dbfac4 differ diff --git a/.git_old/objects/fd/6b42cff4dca52f9ee6da1cc7bbb0259cb3d5cc b/.git_old/objects/fd/6b42cff4dca52f9ee6da1cc7bbb0259cb3d5cc new file mode 100644 index 0000000..76b3b70 Binary files /dev/null and b/.git_old/objects/fd/6b42cff4dca52f9ee6da1cc7bbb0259cb3d5cc differ diff --git a/.git_old/objects/fe/a533ba3c841fe808815a47b539d0da5579e4b0 b/.git_old/objects/fe/a533ba3c841fe808815a47b539d0da5579e4b0 new file mode 100644 index 0000000..ed1985c Binary files /dev/null and b/.git_old/objects/fe/a533ba3c841fe808815a47b539d0da5579e4b0 differ diff --git a/.git_old/objects/fe/c0e3208d5675adbdf54e7975b61de582c85c6d b/.git_old/objects/fe/c0e3208d5675adbdf54e7975b61de582c85c6d new file mode 100644 index 0000000..818d6a2 Binary files /dev/null and b/.git_old/objects/fe/c0e3208d5675adbdf54e7975b61de582c85c6d differ diff --git a/.git_old/objects/ff/0bce599cda81037d54548927f5013f3d00d119 b/.git_old/objects/ff/0bce599cda81037d54548927f5013f3d00d119 new file mode 100644 index 0000000..c09caad Binary files /dev/null and b/.git_old/objects/ff/0bce599cda81037d54548927f5013f3d00d119 differ diff --git a/.git_old/objects/ff/13715977c2ed4a368b3df7b87f2493c900e562 b/.git_old/objects/ff/13715977c2ed4a368b3df7b87f2493c900e562 new file mode 100644 index 0000000..a7977b1 Binary files /dev/null and b/.git_old/objects/ff/13715977c2ed4a368b3df7b87f2493c900e562 differ diff --git a/.git_old/objects/ff/3b59a03eb4fd09b406e4ad1cb2f7aadf4ba381 b/.git_old/objects/ff/3b59a03eb4fd09b406e4ad1cb2f7aadf4ba381 new file mode 100644 index 0000000..757800d Binary files /dev/null and b/.git_old/objects/ff/3b59a03eb4fd09b406e4ad1cb2f7aadf4ba381 differ diff --git a/.git_old/objects/ff/916876ec0156e1aad64cb2bbc20f355bdda9a9 b/.git_old/objects/ff/916876ec0156e1aad64cb2bbc20f355bdda9a9 new file mode 100644 index 0000000..b05ad63 Binary files /dev/null and b/.git_old/objects/ff/916876ec0156e1aad64cb2bbc20f355bdda9a9 differ diff --git a/.git_old/objects/ff/930a2d64c0c9e8feb152600e74cadc7f467681 b/.git_old/objects/ff/930a2d64c0c9e8feb152600e74cadc7f467681 new file mode 100644 index 0000000..1109b95 Binary files /dev/null and b/.git_old/objects/ff/930a2d64c0c9e8feb152600e74cadc7f467681 differ diff --git a/.git_old/objects/ff/bd130a1356fe570edcf6e1f34ef77ba0a56a22 b/.git_old/objects/ff/bd130a1356fe570edcf6e1f34ef77ba0a56a22 new file mode 100644 index 0000000..9ae752c Binary files /dev/null and b/.git_old/objects/ff/bd130a1356fe570edcf6e1f34ef77ba0a56a22 differ diff --git a/.git_old/refs/remotes/github/master b/.git_old/refs/remotes/github/master new file mode 100644 index 0000000..6137a2a --- /dev/null +++ b/.git_old/refs/remotes/github/master @@ -0,0 +1 @@ +2f4283b85337d018fe0ee5d88a132f6476f3d6b0 diff --git a/.git_old/refs/remotes/local/master b/.git_old/refs/remotes/local/master new file mode 100644 index 0000000..b7f0e71 --- /dev/null +++ b/.git_old/refs/remotes/local/master @@ -0,0 +1 @@ +0b3fc43df0f522a9d2b308c79b35870e3afb08db diff --git a/android-app/.gradle_old/8.7/checksums/checksums.lock b/android-app/.gradle_old/8.7/checksums/checksums.lock new file mode 100644 index 0000000..e40cb9a Binary files /dev/null and b/android-app/.gradle_old/8.7/checksums/checksums.lock differ diff --git a/android-app/.gradle_old/8.7/checksums/md5-checksums.bin b/android-app/.gradle_old/8.7/checksums/md5-checksums.bin new file mode 100644 index 0000000..3695fd6 Binary files /dev/null and b/android-app/.gradle_old/8.7/checksums/md5-checksums.bin differ diff --git a/android-app/.gradle_old/8.7/checksums/sha1-checksums.bin b/android-app/.gradle_old/8.7/checksums/sha1-checksums.bin new file mode 100644 index 0000000..8a61fc6 Binary files /dev/null and b/android-app/.gradle_old/8.7/checksums/sha1-checksums.bin differ diff --git a/android-app/.gradle_old/8.7/dependencies-accessors/gc.properties b/android-app/.gradle_old/8.7/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/android-app/.gradle_old/8.7/executionHistory/executionHistory.bin b/android-app/.gradle_old/8.7/executionHistory/executionHistory.bin new file mode 100644 index 0000000..b4b4b5d Binary files /dev/null and b/android-app/.gradle_old/8.7/executionHistory/executionHistory.bin differ diff --git a/android-app/.gradle_old/8.7/executionHistory/executionHistory.lock b/android-app/.gradle_old/8.7/executionHistory/executionHistory.lock new file mode 100644 index 0000000..a947b6c Binary files /dev/null and b/android-app/.gradle_old/8.7/executionHistory/executionHistory.lock differ diff --git a/android-app/.gradle_old/8.7/fileChanges/last-build.bin b/android-app/.gradle_old/8.7/fileChanges/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/android-app/.gradle_old/8.7/fileChanges/last-build.bin differ diff --git a/android-app/.gradle_old/8.7/fileHashes/fileHashes.bin b/android-app/.gradle_old/8.7/fileHashes/fileHashes.bin new file mode 100644 index 0000000..ea53e15 Binary files /dev/null and b/android-app/.gradle_old/8.7/fileHashes/fileHashes.bin differ diff --git a/android-app/.gradle_old/8.7/fileHashes/fileHashes.lock b/android-app/.gradle_old/8.7/fileHashes/fileHashes.lock new file mode 100644 index 0000000..aec713a Binary files /dev/null and b/android-app/.gradle_old/8.7/fileHashes/fileHashes.lock differ diff --git a/android-app/.gradle_old/8.7/fileHashes/resourceHashesCache.bin b/android-app/.gradle_old/8.7/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000..06959a3 Binary files /dev/null and b/android-app/.gradle_old/8.7/fileHashes/resourceHashesCache.bin differ diff --git a/android-app/.gradle_old/8.7/gc.properties b/android-app/.gradle_old/8.7/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/android-app/.gradle_old/buildOutputCleanup/buildOutputCleanup.lock b/android-app/.gradle_old/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000..377b8e4 Binary files /dev/null and b/android-app/.gradle_old/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/android-app/.gradle_old/buildOutputCleanup/cache.properties b/android-app/.gradle_old/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..36b13e2 --- /dev/null +++ b/android-app/.gradle_old/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Fri Mar 13 23:14:04 UTC 2026 +gradle.version=8.7 diff --git a/android-app/.gradle_old/buildOutputCleanup/outputFiles.bin b/android-app/.gradle_old/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000..1410b5f Binary files /dev/null and b/android-app/.gradle_old/buildOutputCleanup/outputFiles.bin differ diff --git a/android-app/.gradle_old/file-system.probe b/android-app/.gradle_old/file-system.probe new file mode 100644 index 0000000..2d053af Binary files /dev/null and b/android-app/.gradle_old/file-system.probe differ diff --git a/android-app/.gradle_old/vcs-1/gc.properties b/android-app/.gradle_old/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/android-app/app/src/main/kotlin/org/terst/nav/BarometerData.kt b/android-app/app/src/main/kotlin/org/terst/nav/BarometerData.kt new file mode 100644 index 0000000..5a8ccce --- /dev/null +++ b/android-app/app/src/main/kotlin/org/terst/nav/BarometerData.kt @@ -0,0 +1,42 @@ +package org.terst.nav + +import java.util.Locale + +data class BarometerReading( + val pressureHpa: Float, + val timestamp: Long = System.currentTimeMillis() +) + +enum class PressureTrend { + RISING_FAST, + RISING, + STEADY, + FALLING, + FALLING_FAST; + + override fun toString(): String { + return when (this) { + RISING_FAST -> "Rising Fast" + RISING -> "Rising" + STEADY -> "Steady" + FALLING -> "Falling" + FALLING_FAST -> "Falling Fast" + } + } +} + +data class BarometerStatus( + val currentPressureHpa: Float = 1013.25f, + val trend: PressureTrend = PressureTrend.STEADY, + val pressureChange3h: Float = 0f, + val history: List = emptyList() +) { + fun formatPressure(): String { + return String.format(Locale.getDefault(), "%.1f hPa", currentPressureHpa) + } + + fun formatTrend(): String { + val sign = if (pressureChange3h >= 0) "+" else "" + return String.format(Locale.getDefault(), "%s (%s%.1f hPa/3h)", trend.toString(), sign, pressureChange3h) + } +} diff --git a/android-app/app/src/main/kotlin/org/terst/nav/BarometerSensorManager.kt b/android-app/app/src/main/kotlin/org/terst/nav/BarometerSensorManager.kt new file mode 100644 index 0000000..cdd7f76 --- /dev/null +++ b/android-app/app/src/main/kotlin/org/terst/nav/BarometerSensorManager.kt @@ -0,0 +1,99 @@ +package org.terst.nav + +import android.content.Context +import android.hardware.Sensor +import android.hardware.SensorEvent +import android.hardware.SensorEventListener +import android.hardware.SensorManager +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update +import java.util.concurrent.TimeUnit +import android.util.Log + +class BarometerSensorManager(context: Context) : SensorEventListener { + + private val sensorManager = context.getSystemService(Context.SENSOR_SERVICE) as SensorManager + private val pressureSensor: Sensor? = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE) + + private val _barometerStatus = MutableStateFlow(BarometerStatus()) + val barometerStatus: StateFlow = _barometerStatus.asStateFlow() + + private val historyMaxDurationMs = TimeUnit.HOURS.toMillis(24) // Keep 24h history + private val historySampleIntervalMs = TimeUnit.MINUTES.toMillis(15) // Sample every 15 min for history + private var lastHistorySampleTime = 0L + + fun start() { + if (pressureSensor != null) { + sensorManager.registerListener(this, pressureSensor, SensorManager.SENSOR_DELAY_NORMAL) + Log.d("BarometerManager", "Pressure sensor registered") + } else { + Log.w("BarometerManager", "No pressure sensor found on this device") + } + } + + fun stop() { + sensorManager.unregisterListener(this) + Log.d("BarometerManager", "Pressure sensor unregistered") + } + + override fun onSensorChanged(event: SensorEvent) { + if (event.sensor.type == Sensor.TYPE_PRESSURE) { + val pressure = event.values[0] + updateCurrentPressure(pressure) + } + } + + override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) { + // Not used + } + + private fun updateCurrentPressure(pressure: Float) { + val now = System.currentTimeMillis() + + _barometerStatus.update { currentStatus -> + val isFirstSample = currentStatus.history.isEmpty() + val newHistory = if (isFirstSample || now - lastHistorySampleTime >= historySampleIntervalMs) { + lastHistorySampleTime = now + val updatedHistory = currentStatus.history + BarometerReading(pressure, now) + // Trim history to 24h + updatedHistory.filter { now - it.timestamp <= historyMaxDurationMs } + } else { + currentStatus.history + } + + val change3h = calculatePressureChange(newHistory, now, TimeUnit.HOURS.toMillis(3)) + val trend = determineTrend(change3h) + + currentStatus.copy( + currentPressureHpa = pressure, + trend = trend, + pressureChange3h = change3h, + history = newHistory + ) + } + } + + private fun calculatePressureChange(history: List, now: Long, durationMs: Long): Float { + if (history.isEmpty()) return 0f + + val targetTime = now - durationMs + val oldReading = history.find { it.timestamp >= targetTime } ?: history.first() + val currentReading = history.last() + + // If we don't have enough history, we might not be able to calculate a meaningful 3h change + // but we'll return the difference between the oldest available and current. + return currentReading.pressureHpa - oldReading.pressureHpa + } + + private fun determineTrend(change3h: Float): PressureTrend { + return when { + change3h >= 2.0f -> PressureTrend.RISING_FAST + change3h >= 0.5f -> PressureTrend.RISING + change3h <= -2.0f -> PressureTrend.FALLING_FAST + change3h <= -0.5f -> PressureTrend.FALLING + else -> PressureTrend.STEADY + } + } +} diff --git a/android-app/app/src/main/kotlin/org/terst/nav/BarometerTrendView.kt b/android-app/app/src/main/kotlin/org/terst/nav/BarometerTrendView.kt new file mode 100644 index 0000000..944d198 --- /dev/null +++ b/android-app/app/src/main/kotlin/org/terst/nav/BarometerTrendView.kt @@ -0,0 +1,72 @@ +package org.terst.nav + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Paint +import android.graphics.Path +import android.util.AttributeSet +import android.view.View +import androidx.core.content.ContextCompat + +class BarometerTrendView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : View(context, attrs, defStyleAttr) { + + private var history: List = emptyList() + + private val linePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = ContextCompat.getColor(context, R.color.instrument_text_normal) + strokeWidth = 4f + style = Paint.Style.STROKE + strokeCap = Paint.Cap.ROUND + strokeJoin = Paint.Join.ROUND + } + + private val gridPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = ContextCompat.getColor(context, R.color.instrument_text_secondary) + strokeWidth = 1f + style = Paint.Style.STROKE + } + + fun setHistory(newHistory: List) { + history = newHistory + invalidate() + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + if (history.size < 2) return + + val padding = 20f + val w = width.toFloat() - 2 * padding + val h = height.toFloat() - 2 * padding + + val minP = history.minOf { it.pressureHpa } + val maxP = history.maxOf { it.pressureHpa } + val rangeP = (maxP - minP).coerceAtLeast(1.0f) // Show at least 1 hPa range + + val minT = history.first().timestamp + val maxT = history.last().timestamp + val rangeT = (maxT - minT).coerceAtLeast(1L) + + // Draw simple grid + canvas.drawLine(padding, padding, padding, h + padding, gridPaint) + canvas.drawLine(padding, h + padding, w + padding, h + padding, gridPaint) + + val path = Path() + history.forEachIndexed { index, reading -> + val x = padding + (reading.timestamp - minT).toFloat() / rangeT * w + val y = padding + h - (reading.pressureHpa - minP) / rangeP * h + + if (index == 0) { + path.moveTo(x, y) + } else { + path.lineTo(x, y) + } + } + + canvas.drawPath(path, linePaint) + } +} diff --git a/android-app/app/src/main/kotlin/org/terst/nav/LocationService.kt b/android-app/app/src/main/kotlin/org/terst/nav/LocationService.kt index 22290a5..24eb498 100644 --- a/android-app/app/src/main/kotlin/org/terst/nav/LocationService.kt +++ b/android-app/app/src/main/kotlin/org/terst/nav/LocationService.kt @@ -47,6 +47,7 @@ class LocationService : Service() { private lateinit var fusedLocationClient: FusedLocationProviderClient private lateinit var locationCallback: LocationCallback private lateinit var anchorAlarmManager: AnchorAlarmManager + private lateinit var barometerSensorManager: BarometerSensorManager private val serviceScope = CoroutineScope(Dispatchers.IO + SupervisorJob()) private val NOTIFICATION_CHANNEL_ID = "location_service_channel" @@ -59,8 +60,16 @@ class LocationService : Service() { Log.d("LocationService", "Service created") fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) anchorAlarmManager = AnchorAlarmManager(this) // Initialize with service context + barometerSensorManager = BarometerSensorManager(this) createNotificationChannel() + // Observe barometer status and update our public state + serviceScope.launch { + barometerSensorManager.barometerStatus.collect { status -> + _barometerStatus.value = status + } + } + // Mock tidal current data generator serviceScope.launch { while (true) { @@ -121,10 +130,12 @@ class LocationService : Service() { Log.d("LocationService", "Starting foreground service") startForeground(NOTIFICATION_ID, createNotification()) startLocationUpdatesInternal() + barometerSensorManager.start() } ACTION_STOP_FOREGROUND_SERVICE -> { Log.d("LocationService", "Stopping foreground service") stopLocationUpdatesInternal() + barometerSensorManager.stop() stopSelf() } ACTION_START_ANCHOR_WATCH -> { @@ -158,6 +169,7 @@ class LocationService : Service() { Log.d("LocationService", "Service destroyed") stopLocationUpdatesInternal() anchorAlarmManager.stopAlarm() + barometerSensorManager.stop() _anchorWatchState.value = AnchorWatchState(isActive = false) isAlarmTriggered = false // Reset alarm trigger state serviceScope.cancel() // Cancel the coroutine scope @@ -284,9 +296,12 @@ class LocationService : Service() { get() = _anchorWatchState val tidalCurrentState: StateFlow get() = _tidalCurrentState + val barometerStatus: StateFlow + get() = _barometerStatus private val _locationFlow = MutableSharedFlow(replay = 1) private val _anchorWatchState = MutableStateFlow(AnchorWatchState()) private val _tidalCurrentState = MutableStateFlow(TidalCurrentState()) + private val _barometerStatus = MutableStateFlow(BarometerStatus()) } } diff --git a/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt b/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt index b638136..e208892 100644 --- a/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt +++ b/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt @@ -104,6 +104,9 @@ class MainActivity : AppCompatActivity() { private lateinit var valueVmg: TextView private lateinit var valueDepth: TextView private lateinit var valuePolarPct: TextView + private lateinit var valueBaro: TextView + private lateinit var labelTrend: TextView + private lateinit var barometerTrendView: BarometerTrendView private lateinit var polarDiagramView: PolarDiagramView // Reference to the custom view // Anchor Watch UI elements @@ -134,6 +137,7 @@ class MainActivity : AppCompatActivity() { startLocationService() observeLocationUpdates() // Start observing location updates observeAnchorWatchState() // Start observing anchor watch state + observeBarometerStatus() // Start observing barometer status } else { // Permissions denied, handle the case (e.g., show a message to the user) Toast.makeText(this, "Location permissions denied", Toast.LENGTH_LONG).show() @@ -167,6 +171,7 @@ class MainActivity : AppCompatActivity() { startLocationService() observeLocationUpdates() // Start observing location updates observeAnchorWatchState() // Start observing anchor watch state + observeBarometerStatus() // Start observing barometer status } mapView = findViewById(R.id.mapView) @@ -201,6 +206,9 @@ class MainActivity : AppCompatActivity() { valueVmg = findViewById(R.id.value_vmg) valueDepth = findViewById(R.id.value_depth) valuePolarPct = findViewById(R.id.value_polar_pct) + valueBaro = findViewById(R.id.value_baro) + labelTrend = findViewById(R.id.label_trend) + barometerTrendView = findViewById(R.id.barometer_trend_view) // Initialize PolarDiagramView polarDiagramView = findViewById(R.id.polar_diagram_view) @@ -226,7 +234,8 @@ class MainActivity : AppCompatActivity() { sog = "%.1f".format(Locale.getDefault(), simulatedBsp * 0.95), // SOG usually slightly less than BSP vmg = "%.1f".format(Locale.getDefault(), mockPolarTable.curves.firstOrNull { it.twS == simulatedTws }?.calculateVmg(simulatedTwa, simulatedBsp) ?: 0.0), depth = getString(R.string.placeholder_depth_value), - polarPct = "%.0f%%".format(Locale.getDefault(), mockPolarTable.calculatePolarPercentage(simulatedTws, simulatedTwa, simulatedBsp)) + polarPct = "%.0f%%".format(Locale.getDefault(), mockPolarTable.calculatePolarPercentage(simulatedTws, simulatedTwa, simulatedBsp)), + baro = getString(R.string.placeholder_baro_value) ) polarDiagramView.setCurrentPerformance(simulatedTws, simulatedTwa, simulatedBsp) @@ -259,7 +268,8 @@ class MainActivity : AppCompatActivity() { sog = getString(R.string.placeholder_sog_value), vmg = getString(R.string.placeholder_vmg_value), depth = getString(R.string.placeholder_depth_value), - polarPct = getString(R.string.placeholder_polar_value) + polarPct = getString(R.string.placeholder_polar_value), + baro = getString(R.string.placeholder_baro_value) ) fabToggleInstruments.setOnClickListener { @@ -535,6 +545,18 @@ class MainActivity : AppCompatActivity() { } } + private fun observeBarometerStatus() { + lifecycleScope.launch { + LocationService.barometerStatus.collect { status -> + withContext(Dispatchers.Main) { + valueBaro.text = String.format(Locale.getDefault(), "%.1f", status.currentPressureHpa) + labelTrend.text = String.format(Locale.getDefault(), "TREND: %s", status.formatTrend()) + barometerTrendView.setHistory(status.history) + } + } + } + } + private fun observeTidalCurrentState() { lifecycleScope.launch { LocationService.tidalCurrentState.collect { state -> @@ -708,7 +730,8 @@ class MainActivity : AppCompatActivity() { sog: String, vmg: String, depth: String, - polarPct: String + polarPct: String, + baro: String ) { valueAws.text = aws valueTws.text = tws @@ -719,6 +742,7 @@ class MainActivity : AppCompatActivity() { valueVmg.text = vmg valueDepth.text = depth valuePolarPct.text = polarPct + valueBaro.text = baro } override fun onStart() { diff --git a/android-app/app/src/main/kotlin_old/org/terst/nav/AnchorAlarmManager.kt b/android-app/app/src/main/kotlin_old/org/terst/nav/AnchorAlarmManager.kt new file mode 100644 index 0000000..d4423db --- /dev/null +++ b/android-app/app/src/main/kotlin_old/org/terst/nav/AnchorAlarmManager.kt @@ -0,0 +1,108 @@ +package org.terst.nav + +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import android.media.AudioAttributes +import android.media.RingtoneManager +import android.net.Uri +import android.os.Build +import android.os.VibrationEffect +import android.os.Vibrator +import android.os.VibratorManager // For API 31+ +import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationManagerCompat + +class AnchorAlarmManager(private val context: Context) { + + private val CHANNEL_ID = "anchor_alarm_channel" + private val NOTIFICATION_ID = 1001 + + private var isAlarming: Boolean = false + private var ringtone: android.media.Ringtone? = null + + init { + createNotificationChannel() + } + + private fun createNotificationChannel() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val name = "Anchor Alarm" + val descriptionText = "Notifications for anchor drag events" + val importance = NotificationManager.IMPORTANCE_HIGH + val channel = NotificationChannel(CHANNEL_ID, name, importance).apply { + description = descriptionText + } + val notificationManager: NotificationManager = + context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + notificationManager.createNotificationChannel(channel) + } + } + + @Suppress("DEPRECATION") + private fun getVibrator(): Vibrator? { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + val vibratorManager = context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager + vibratorManager.defaultVibrator + } else { + context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + } + + fun startAlarm() { + if (isAlarming) return + + isAlarming = true + // Play sound + try { + val alarmUri: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM) + ringtone = RingtoneManager.getRingtone(context, alarmUri) + ringtone?.audioAttributes = AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_ALARM) + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .build() + ringtone?.play() + } catch (e: Exception) { + e.printStackTrace() + } + + // Vibrate + val vibrator = getVibrator() + if (vibrator?.hasVibrator() == true) { + val pattern = longArrayOf(0, 1000, 1000) // Start immediately, vibrate for 1s, pause for 1s + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + vibrator.vibrate(VibrationEffect.createWaveform(pattern, 0)) // Repeat indefinitely + } else { + vibrator.vibrate(pattern, 0) // Repeat indefinitely + } + } + + // Show persistent notification + showNotification("Anchor Drag Detected!", "Your boat is outside the watch circle.") + } + + fun stopAlarm() { + if (!isAlarming) return + + isAlarming = false + ringtone?.stop() + getVibrator()?.cancel() + NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID) + } + + private fun showNotification(title: String, message: String) { + val builder = NotificationCompat.Builder(context, CHANNEL_ID) + .setSmallIcon(android.R.drawable.ic_dialog_alert) // Replace with a proper icon + .setContentTitle(title) + .setContentText(message) + .setPriority(NotificationCompat.PRIORITY_HIGH) + .setCategory(NotificationCompat.CATEGORY_ALARM) + .setOngoing(true) // Makes the notification persistent + .setAutoCancel(false) // Does not disappear when tapped + .setDefaults(NotificationCompat.DEFAULT_ALL) // Use default sound, vibrate, light (though we manually control sound/vibration) + + with(NotificationManagerCompat.from(context)) { + notify(NOTIFICATION_ID, builder.build()) + } + } +} diff --git a/android-app/app/src/main/kotlin_old/org/terst/nav/AnchorWatchData.kt b/android-app/app/src/main/kotlin_old/org/terst/nav/AnchorWatchData.kt new file mode 100644 index 0000000..03e6a2f --- /dev/null +++ b/android-app/app/src/main/kotlin_old/org/terst/nav/AnchorWatchData.kt @@ -0,0 +1,22 @@ +package org.terst.nav + +import android.location.Location + +data class AnchorWatchState( + val anchorLocation: Location? = null, + val watchCircleRadiusMeters: Double = DEFAULT_WATCH_CIRCLE_RADIUS_METERS, + val setTimeMillis: Long = 0L, + val isActive: Boolean = false +) { + companion object { + const val DEFAULT_WATCH_CIRCLE_RADIUS_METERS = 50.0 // Default 50 meters + } + + fun isDragging(currentLocation: Location): Boolean { + anchorLocation ?: return false // Cannot drag if anchor not set + if (!isActive) return false // Not active, so not dragging + + val distance = anchorLocation.distanceTo(currentLocation) + return distance > watchCircleRadiusMeters + } +} diff --git a/android-app/app/src/main/kotlin_old/org/terst/nav/LocationService.kt b/android-app/app/src/main/kotlin_old/org/terst/nav/LocationService.kt new file mode 100644 index 0000000..4b59139 --- /dev/null +++ b/android-app/app/src/main/kotlin_old/org/terst/nav/LocationService.kt @@ -0,0 +1,254 @@ +package org.terst.nav + +import android.annotation.SuppressLint +import android.app.Notification +import android.app.NotificationChannel +import android.app.NotificationManager +import android.app.PendingIntent +import android.app.Service +import android.content.Context +import android.content.Intent +import android.location.Location +import android.os.IBinder +import android.os.Looper +import androidx.core.app.NotificationCompat +import com.google.android.gms.location.* +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharedFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.update +import android.util.Log +import kotlinx.coroutines.tasks.await +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancel +import kotlinx.coroutines.launch + +data class GpsData( + val latitude: Double, + val longitude: Double, + val speedOverGround: Float, // m/s + val courseOverGround: Float // degrees +) { + fun toLocation(): Location { + val location = Location("GpsData") + location.latitude = latitude + location.longitude = longitude + location.speed = speedOverGround + location.bearing = courseOverGround + return location + } +} + +class LocationService : Service() { + + private lateinit var fusedLocationClient: FusedLocationProviderClient + private lateinit var locationCallback: LocationCallback + private lateinit var anchorAlarmManager: AnchorAlarmManager + private val serviceScope = CoroutineScope(Dispatchers.IO + SupervisorJob()) + + private val NOTIFICATION_CHANNEL_ID = "location_service_channel" + private val NOTIFICATION_ID = 123 + + private var isAlarmTriggered = false // To prevent repeated alarm triggering + + override fun onCreate() { + super.onCreate() + Log.d("LocationService", "Service created") + fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) + anchorAlarmManager = AnchorAlarmManager(this) // Initialize with service context + createNotificationChannel() + + locationCallback = object : LocationCallback() { + override fun onLocationResult(locationResult: LocationResult) { + locationResult.lastLocation?.let { location -> + val gpsData = GpsData( + latitude = location.latitude, + longitude = location.longitude, + speedOverGround = location.speed, + courseOverGround = location.bearing + ) + serviceScope.launch { + _locationFlow.emit(gpsData) // Emit to shared flow + } + + + // Check for anchor drag if anchor watch is active + _anchorWatchState.update { currentState -> + if (currentState.isActive && currentState.anchorLocation != null) { + val isDragging = currentState.isDragging(location) + if (isDragging) { + Log.w("AnchorWatch", "!!! ANCHOR DRAG DETECTED !!! Distance: ${currentState.anchorLocation.distanceTo(location)}m, Radius: ${currentState.watchCircleRadiusMeters}m") + if (!isAlarmTriggered) { + anchorAlarmManager.startAlarm() + isAlarmTriggered = true + } + } else { + Log.d("AnchorWatch", "Anchor holding. Distance: ${currentState.anchorLocation.distanceTo(location)}m, Radius: ${currentState.watchCircleRadiusMeters}m") + if (isAlarmTriggered) { + anchorAlarmManager.stopAlarm() + isAlarmTriggered = false + } + } + } else { + // If anchor watch is not active, ensure alarm is stopped + if (isAlarmTriggered) { + anchorAlarmManager.stopAlarm() + isAlarmTriggered = false + } + } + currentState + } + } + } + } + } + + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + when (intent?.action) { + ACTION_START_FOREGROUND_SERVICE -> { + Log.d("LocationService", "Starting foreground service") + startForeground(NOTIFICATION_ID, createNotification()) + startLocationUpdatesInternal() + } + ACTION_STOP_FOREGROUND_SERVICE -> { + Log.d("LocationService", "Stopping foreground service") + stopLocationUpdatesInternal() + stopSelf() + } + ACTION_START_ANCHOR_WATCH -> { + Log.d("LocationService", "Received ACTION_START_ANCHOR_WATCH") + val radius = intent.getDoubleExtra(EXTRA_WATCH_RADIUS, AnchorWatchState.DEFAULT_WATCH_CIRCLE_RADIUS_METERS) + serviceScope.launch { startAnchorWatch(radius) } + } + ACTION_STOP_ANCHOR_WATCH -> { + Log.d("LocationService", "Received ACTION_STOP_ANCHOR_WATCH") + stopAnchorWatch() + } + ACTION_UPDATE_WATCH_RADIUS -> { + Log.d("LocationService", "Received ACTION_UPDATE_WATCH_RADIUS") + val radius = intent.getDoubleExtra(EXTRA_WATCH_RADIUS, AnchorWatchState.DEFAULT_WATCH_CIRCLE_RADIUS_METERS) + updateWatchCircleRadius(radius) + } + } + return START_NOT_STICKY + } + + override fun onBind(intent: Intent?): IBinder? { + return null // Not a bound service + } + + override fun onDestroy() { + super.onDestroy() + Log.d("LocationService", "Service destroyed") + stopLocationUpdatesInternal() + anchorAlarmManager.stopAlarm() + _anchorWatchState.value = AnchorWatchState(isActive = false) + isAlarmTriggered = false // Reset alarm trigger state + serviceScope.cancel() // Cancel the coroutine scope + } + + @SuppressLint("MissingPermission") + private fun startLocationUpdatesInternal() { + Log.d("LocationService", "Requesting location updates") + val locationRequest = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 1000) + .setMinUpdateIntervalMillis(500) + .build() + fusedLocationClient.requestLocationUpdates( + locationRequest, + locationCallback, + Looper.getMainLooper() + ) + } + + private fun stopLocationUpdatesInternal() { + Log.d("LocationService", "Removing location updates") + fusedLocationClient.removeLocationUpdates(locationCallback) + } + + private fun createNotificationChannel() { + val serviceChannel = NotificationChannel( + NOTIFICATION_CHANNEL_ID, + "Location Service Channel", + NotificationManager.IMPORTANCE_LOW + ) + val manager = getSystemService(NotificationManager::class.java) as NotificationManager + manager.createNotificationChannel(serviceChannel) + } + + private fun createNotification(): Notification { + val notificationIntent = Intent(this, MainActivity::class.java) + val pendingIntent = PendingIntent.getActivity( + this, + 0, + notificationIntent, + PendingIntent.FLAG_IMMUTABLE + ) + + return NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) + .setContentTitle("Sailing Companion") + .setContentText("Tracking your location in the background...") + .setSmallIcon(R.drawable.ic_anchor) + .setContentIntent(pendingIntent) + .build() + } + + /** + * Starts the anchor watch with the current location as the anchor point. + * @param radiusMeters The watch circle radius in meters. + */ + @SuppressLint("MissingPermission") + suspend fun startAnchorWatch(radiusMeters: Double = AnchorWatchState.DEFAULT_WATCH_CIRCLE_RADIUS_METERS) { + val lastLocation = fusedLocationClient.lastLocation.await() + lastLocation?.let { location -> + _anchorWatchState.update { AnchorWatchState( + anchorLocation = location, + watchCircleRadiusMeters = radiusMeters, + setTimeMillis = System.currentTimeMillis(), + isActive = true + ) } + Log.i("AnchorWatch", "Anchor watch started at lat: ${location.latitude}, lon: ${location.longitude} with radius: ${radiusMeters}m") + } ?: run { + Log.e("AnchorWatch", "Could not start anchor watch: Last known location is null.") + // Handle error, e.g., show a toast to the user + } + } + + /** + * Stops the anchor watch. + */ + fun stopAnchorWatch() { + _anchorWatchState.update { AnchorWatchState(isActive = false) } + Log.i("AnchorWatch", "Anchor watch stopped.") + anchorAlarmManager.stopAlarm() + isAlarmTriggered = false + } + + /** + * Updates the watch circle radius. + */ + fun updateWatchCircleRadius(radiusMeters: Double) { + _anchorWatchState.update { it.copy(watchCircleRadiusMeters = radiusMeters) } + Log.d("AnchorWatch", "Watch circle radius updated to ${radiusMeters}m.") + } + + companion object { + const val ACTION_START_FOREGROUND_SERVICE = "ACTION_START_FOREGROUND_SERVICE" + const val ACTION_STOP_FOREGROUND_SERVICE = "ACTION_STOP_FOREGROUND_SERVICE" + const val ACTION_START_ANCHOR_WATCH = "ACTION_START_ANCHOR_WATCH" + const val ACTION_STOP_ANCHOR_WATCH = "ACTION_STOP_ANCHOR_WATCH" + const val ACTION_UPDATE_WATCH_RADIUS = "ACTION_UPDATE_WATCH_RADIUS" + const val EXTRA_WATCH_RADIUS = "extra_watch_radius" + + // Publicly accessible flows + val locationFlow: SharedFlow + get() = _locationFlow + val anchorWatchState: StateFlow + get() = _anchorWatchState + + private val _locationFlow = MutableSharedFlow(replay = 1) + private val _anchorWatchState = MutableStateFlow(AnchorWatchState()) + } +} diff --git a/android-app/app/src/main/kotlin_old/org/terst/nav/MainActivity.kt b/android-app/app/src/main/kotlin_old/org/terst/nav/MainActivity.kt new file mode 100644 index 0000000..a32fb18 --- /dev/null +++ b/android-app/app/src/main/kotlin_old/org/terst/nav/MainActivity.kt @@ -0,0 +1,670 @@ +package org.terst.nav + +import android.Manifest +import android.content.pm.PackageManager +import android.graphics.BitmapFactory +import android.location.Location +import android.media.MediaPlayer +import android.os.Build +import android.os.Bundle +import android.content.Intent +import android.util.Log +import android.view.View +import android.widget.Button +import android.widget.LinearLayout +import android.widget.TextView +import android.widget.Toast +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import androidx.lifecycle.lifecycleScope +import com.google.android.material.floatingactionbutton.FloatingActionButton +import org.maplibre.android.MapLibre +import org.maplibre.android.maps.MapView +import org.maplibre.android.maps.MapLibreMap +import org.maplibre.android.maps.Style +import org.maplibre.android.style.layers.CircleLayer +import org.maplibre.android.style.layers.PropertyFactory +import org.maplibre.android.style.layers.SymbolLayer +import org.maplibre.android.style.sources.GeoJsonSource +import org.maplibre.geojson.Feature +import org.maplibre.geojson.FeatureCollection +import org.maplibre.geojson.Point +import org.maplibre.geojson.Polygon +import org.maplibre.geojson.LineString +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.firstOrNull +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.util.Locale +import java.util.concurrent.TimeUnit +import kotlin.math.cos +import kotlin.math.sin +import kotlin.math.sqrt +import kotlin.math.atan2 + +data class MobWaypoint( + val latitude: Double, + val longitude: Double, + val timestamp: Long // System.currentTimeMillis() +) + +class MainActivity : AppCompatActivity() { + + private var mapView: MapView? = null + private lateinit var instrumentDisplayContainer: ConstraintLayout + private lateinit var fabToggleInstruments: FloatingActionButton + private lateinit var fabMob: FloatingActionButton + + // MapLibreMap instance + private var maplibreMap: MapLibreMap? = null + + // MapLibre Layers and Sources for Anchor Watch + private val ANCHOR_POINT_SOURCE_ID = "anchor-point-source" + private val ANCHOR_CIRCLE_SOURCE_ID = "anchor-circle-source" + private val ANCHOR_POINT_LAYER_ID = "anchor-point-layer" + private val ANCHOR_CIRCLE_LAYER_ID = "anchor-circle-layer" + private val ANCHOR_ICON_ID = "anchor-icon" + + private var anchorPointSource: GeoJsonSource? = null + private var anchorCircleSource: GeoJsonSource? = null + + // MOB UI elements + private lateinit var mobNavigationContainer: ConstraintLayout + private lateinit var mobValueDistance: TextView + private lateinit var mobValueElapsedTime: TextView + private lateinit var mobRecoveredButton: Button + + // MOB State + private var mobActivated: Boolean = false + private var activeMobWaypoint: MobWaypoint? = null + + // Media player for MOB alarm + private var mobMediaPlayer: MediaPlayer? = null + + // Instrument TextViews + private lateinit var valueAws: TextView + private lateinit var valueTws: TextView + private lateinit var valueHdg: TextView + private lateinit var valueCog: TextView + private lateinit var valueBsp: TextView + private lateinit var valueSog: TextView + private lateinit var valueVmg: TextView + private lateinit var valueDepth: TextView + private lateinit var valuePolarPct: TextView + private lateinit var polarDiagramView: PolarDiagramView // Reference to the custom view + + // Anchor Watch UI elements + private lateinit var fabAnchor: FloatingActionButton + private lateinit var anchorConfigContainer: ConstraintLayout + private lateinit var anchorStatusText: TextView + private lateinit var anchorRadiusText: TextView + private lateinit var buttonDecreaseRadius: Button + private lateinit var buttonIncreaseRadius: Button + private lateinit var buttonSetAnchor: Button + private lateinit var buttonStopAnchor: Button + + private var currentWatchCircleRadius = AnchorWatchState.DEFAULT_WATCH_CIRCLE_RADIUS_METERS + + // Register the permissions callback, which handles the user's response to the + // system permissions dialog. + private val requestPermissionLauncher = + registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions -> + val fineLocationGranted = permissions[Manifest.permission.ACCESS_FINE_LOCATION] == true + val coarseLocationGranted = permissions[Manifest.permission.ACCESS_COARSE_LOCATION] == true + val backgroundLocationGranted = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + permissions[Manifest.permission.ACCESS_BACKGROUND_LOCATION] == true + } else true // Not needed below Android 10 + + if (fineLocationGranted && coarseLocationGranted && backgroundLocationGranted) { + // Permissions granted, start location service and observe updates + Toast.makeText(this, "Location permissions granted", Toast.LENGTH_SHORT).show() + startLocationService() + observeLocationUpdates() // Start observing location updates + observeAnchorWatchState() // Start observing anchor watch state + } else { + // Permissions denied, handle the case (e.g., show a message to the user) + Toast.makeText(this, "Location permissions denied", Toast.LENGTH_LONG).show() + Log.e("MainActivity", "Location permissions denied by user.") + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + // MapLibre access token only needed for Mapbox styles, but good practice to initialize + MapLibre.getInstance(this) + setContentView(R.layout.activity_main) + + val permissionsToRequest = mutableListOf( + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION + ) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + permissionsToRequest.add(Manifest.permission.ACCESS_BACKGROUND_LOCATION) + } + + // Check and request location permissions + val allPermissionsGranted = permissionsToRequest.all { + ContextCompat.checkSelfPermission(this, it) == PackageManager.PERMISSION_GRANTED + } + + if (!allPermissionsGranted) { + requestPermissionLauncher.launch(permissionsToRequest.toTypedArray()) + } else { + // Permissions already granted, start location service + startLocationService() + observeLocationUpdates() // Start observing location updates + observeAnchorWatchState() // Start observing anchor watch state + } + + mapView = findViewById(R.id.mapView) + mapView?.onCreate(savedInstanceState) + mapView?.getMapAsync { maplibreMap -> + this.maplibreMap = maplibreMap // Assign to class member + maplibreMap.setStyle(Style.Builder().fromUri("https://tiles.openseamap.org/seamark/osm-bright/style.json")) { style -> + setupAnchorMapLayers(style) + } + } + + instrumentDisplayContainer = findViewById(R.id.instrument_display_container) + fabToggleInstruments = findViewById(R.id.fab_toggle_instruments) + fabMob = findViewById(R.id.fab_mob) + + // Initialize MOB UI elements + mobNavigationContainer = findViewById(R.id.mob_navigation_container) + mobValueDistance = findViewById(R.id.mob_value_distance) + mobValueElapsedTime = findViewById(R.id.mob_value_elapsed_time) + mobRecoveredButton = findViewById(R.id.mob_recovered_button) + + // Initialize instrument TextViews + valueAws = findViewById(R.id.value_aws) + valueTws = findViewById(R.id.value_tws) + valueHdg = findViewById(R.id.value_hdg) + valueCog = findViewById(R.id.value_cog) + valueBsp = findViewById(R.id.value_bsp) + valueSog = findViewById(R.id.value_sog) + valueVmg = findViewById(R.id.value_vmg) + valueDepth = findViewById(R.id.value_depth) + valuePolarPct = findViewById(R.id.value_polar_pct) + + // Initialize PolarDiagramView + polarDiagramView = findViewById(R.id.polar_diagram_view) + + // Set up mock polar data + val mockPolarTable = createMockPolarTable() + polarDiagramView.setPolarTable(mockPolarTable) + + // Simulate real-time updates for the polar diagram + lifecycleScope.launch { + var simulatedTws = 8.0 + var simulatedTwa = 40.0 + var simulatedBsp = mockPolarTable.interpolateBsp(simulatedTws, simulatedTwa) + + while (true) { + // Update instrument display with current simulated values + updateInstrumentDisplay( + aws = "%.1f".format(Locale.getDefault(), simulatedTws * 1.1), // AWS usually higher than TWS + tws = "%.1f".format(Locale.getDefault(), simulatedTws), + hdg = "---", // No mock for HDG + cog = "---", // No mock for COG + bsp = "%.1f".format(Locale.getDefault(), simulatedBsp), + sog = "%.1f".format(Locale.getDefault(), simulatedBsp * 0.95), // SOG usually slightly less than BSP + vmg = "%.1f".format(Locale.getDefault(), mockPolarTable.curves.firstOrNull { it.twS == simulatedTws }?.calculateVmg(simulatedTwa, simulatedBsp) ?: 0.0), + depth = getString(R.string.placeholder_depth_value), + polarPct = "%.0f%%".format(Locale.getDefault(), mockPolarTable.calculatePolarPercentage(simulatedTws, simulatedTwa, simulatedBsp)) + ) + polarDiagramView.setCurrentPerformance(simulatedTws, simulatedTwa, simulatedBsp) + + // Slowly change TWA to simulate sailing + simulatedTwa += 0.5 // Change by 0.5 degrees + if (simulatedTwa > 170) simulatedTwa = 40.0 // Reset or change direction + simulatedBsp = mockPolarTable.interpolateBsp(simulatedTws, simulatedTwa) + + kotlinx.coroutines.delay(1000) // Update every second + } + } + + // Initialize Anchor Watch UI elements + fabAnchor = findViewById(R.id.fab_anchor) + anchorConfigContainer = findViewById(R.id.anchor_config_container) + anchorStatusText = findViewById(R.id.anchor_status_text) + anchorRadiusText = findViewById(R.id.anchor_radius_text) + buttonDecreaseRadius = findViewById(R.id.button_decrease_radius) + buttonIncreaseRadius = findViewById(R.id.button_increase_radius) + buttonSetAnchor = findViewById(R.id.button_set_anchor) + buttonStopAnchor = findViewById(R.id.button_stop_anchor) + + // Set initial placeholder values + updateInstrumentDisplay( + aws = getString(R.string.placeholder_aws_value), + tws = getString(R.string.placeholder_tws_value), + hdg = getString(R.string.placeholder_hdg_value), + cog = getString(R.string.placeholder_cog_value), + bsp = getString(R.string.placeholder_bsp_value), + sog = getString(R.string.placeholder_sog_value), + vmg = getString(R.string.placeholder_vmg_value), + depth = getString(R.string.placeholder_depth_value), + polarPct = getString(R.string.placeholder_polar_value) + ) + + fabToggleInstruments.setOnClickListener { + if (instrumentDisplayContainer.visibility == View.VISIBLE) { + instrumentDisplayContainer.visibility = View.GONE + mapView?.visibility = View.VISIBLE + } else { + instrumentDisplayContainer.visibility = View.VISIBLE + mapView?.visibility = View.GONE + } + } + + fabMob.setOnClickListener { + activateMob() + } + + fabAnchor.setOnClickListener { + if (anchorConfigContainer.visibility == View.VISIBLE) { + anchorConfigContainer.visibility = View.GONE + } else { + anchorConfigContainer.visibility = View.VISIBLE + // Ensure anchor radius display is updated when shown + anchorRadiusText.text = String.format(Locale.getDefault(), "Radius: %.1fm", currentWatchCircleRadius) + } + } + + buttonDecreaseRadius.setOnClickListener { + currentWatchCircleRadius = (currentWatchCircleRadius - 5).coerceAtLeast(10.0) // Minimum 10m + anchorRadiusText.text = String.format(Locale.getDefault(), "Radius: %.1fm", currentWatchCircleRadius) + val intent = Intent(this, LocationService::class.java).apply { + action = LocationService.ACTION_UPDATE_WATCH_RADIUS + putExtra(LocationService.EXTRA_WATCH_RADIUS, currentWatchCircleRadius) + } + startService(intent) + } + + buttonIncreaseRadius.setOnClickListener { + currentWatchCircleRadius = (currentWatchCircleRadius + 5).coerceAtMost(200.0) // Maximum 200m + anchorRadiusText.text = String.format(Locale.getDefault(), "Radius: %.1fm", currentWatchCircleRadius) + val intent = Intent(this, LocationService::class.java).apply { + action = LocationService.ACTION_UPDATE_WATCH_RADIUS + putExtra(LocationService.EXTRA_WATCH_RADIUS, currentWatchCircleRadius) + } + startService(intent) + } + + buttonSetAnchor.setOnClickListener { + val intent = Intent(this, LocationService::class.java).apply { + action = LocationService.ACTION_START_ANCHOR_WATCH + putExtra(LocationService.EXTRA_WATCH_RADIUS, currentWatchCircleRadius) + } + startService(intent) + Toast.makeText(this@MainActivity, "Anchor watch set!", Toast.LENGTH_SHORT).show() + } + + buttonStopAnchor.setOnClickListener { + val intent = Intent(this, LocationService::class.java).apply { + action = LocationService.ACTION_STOP_ANCHOR_WATCH + } + startService(intent) + Toast.makeText(this@MainActivity, "Anchor watch stopped.", Toast.LENGTH_SHORT).show() + } + + mobRecoveredButton.setOnClickListener { + recoverMob() + } + } + + private fun startLocationService() { + val intent = Intent(this, LocationService::class.java).apply { + action = LocationService.ACTION_START_FOREGROUND_SERVICE + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(intent) + } else { + startService(intent) + } + } + + private fun stopLocationService() { + val intent = Intent(this, LocationService::class.java).apply { + action = LocationService.ACTION_STOP_FOREGROUND_SERVICE + } + stopService(intent) + } + + private fun createMockPolarTable(): PolarTable { + // Example polar data for a hypothetical boat + // TWS 6 knots + val polar6k = PolarCurve( + twS = 6.0, + points = listOf( + PolarPoint(tWa = 30.0, bSp = 3.0), + PolarPoint(tWa = 45.0, bSp = 4.0), + PolarPoint(tWa = 60.0, bSp = 4.5), + PolarPoint(tWa = 90.0, bSp = 4.8), + PolarPoint(tWa = 120.0, bSp = 4.0), + PolarPoint(tWa = 150.0, bSp = 3.0), + PolarPoint(tWa = 180.0, bSp = 2.0) + ) + ) + + // TWS 8 knots + val polar8k = PolarCurve( + twS = 8.0, + points = listOf( + PolarPoint(tWa = 30.0, bSp = 4.0), + PolarPoint(tWa = 45.0, bSp = 5.0), + PolarPoint(tWa = 60.0, bSp = 5.5), + PolarPoint(tWa = 90.0, bSp = 5.8), + PolarPoint(tWa = 120.0, bSp = 5.0), + PolarPoint(tWa = 150.0, bSp = 4.0), + PolarPoint(tWa = 180.0, bSp = 2.5) + ) + ) + + // TWS 10 knots + val polar10k = PolarCurve( + twS = 10.0, + points = listOf( + PolarPoint(tWa = 30.0, bSp = 5.0), + PolarPoint(tWa = 45.0, bSp = 6.0), + PolarPoint(tWa = 60.0, bSp = 6.5), + PolarPoint(tWa = 90.0, bSp = 6.8), + PolarPoint(tWa = 120.0, bSp = 6.0), + PolarPoint(tWa = 150.0, bSp = 4.5), + PolarPoint(tWa = 180.0, bSp = 3.0) + ) + ) + + return PolarTable(curves = listOf(polar6k, polar8k, polar10k)) + } + + + private fun setupAnchorMapLayers(style: Style) { + // Add anchor icon + style.addImage(ANCHOR_ICON_ID, BitmapFactory.decodeResource(resources, R.drawable.ic_anchor)) + + // Create sources + anchorPointSource = GeoJsonSource(ANCHOR_POINT_SOURCE_ID) + anchorPointSource?.setGeoJson(FeatureCollection.fromFeatures(emptyList())) + + anchorCircleSource = GeoJsonSource(ANCHOR_CIRCLE_SOURCE_ID) + anchorCircleSource?.setGeoJson(FeatureCollection.fromFeatures(emptyList())) + + style.addSource(anchorPointSource!!) + style.addSource(anchorCircleSource!!) + + // Create layers + val anchorPointLayer = SymbolLayer(ANCHOR_POINT_LAYER_ID, ANCHOR_POINT_SOURCE_ID).apply { + setProperties( + PropertyFactory.iconImage(ANCHOR_ICON_ID), + PropertyFactory.iconAllowOverlap(true), + PropertyFactory.iconIgnorePlacement(true) + ) + } + val anchorCircleLayer = CircleLayer(ANCHOR_CIRCLE_LAYER_ID, ANCHOR_CIRCLE_SOURCE_ID).apply { + setProperties( + PropertyFactory.circleColor(ContextCompat.getColor(this@MainActivity, R.color.anchor_button_background)), + PropertyFactory.circleOpacity(0.3f), + PropertyFactory.circleStrokeWidth(2.0f), + PropertyFactory.circleStrokeColor(ContextCompat.getColor(this@MainActivity, R.color.anchor_button_background)) + ) + } + + style.addLayer(anchorCircleLayer) + style.addLayer(anchorPointLayer) + } + + private fun updateAnchorMapLayers(state: AnchorWatchState) { + maplibreMap?.getStyle { style -> + if (state.isActive && state.anchorLocation != null) { + // Update anchor point + val anchorPoint = Point.fromLngLat(state.anchorLocation.longitude, state.anchorLocation.latitude) + anchorPointSource?.setGeoJson(Feature.fromGeometry(anchorPoint)) + + // Update watch circle + val watchCirclePolygon = createWatchCirclePolygon(anchorPoint, state.watchCircleRadiusMeters) + anchorCircleSource?.setGeoJson(Feature.fromGeometry(watchCirclePolygon)) + + // Set layer visibility to visible + style.getLayer(ANCHOR_POINT_LAYER_ID)?.setProperties(PropertyFactory.visibility(org.maplibre.android.style.layers.Property.VISIBLE)) + style.getLayer(ANCHOR_CIRCLE_LAYER_ID)?.setProperties(PropertyFactory.visibility(org.maplibre.android.style.layers.Property.VISIBLE)) + } else { + // Clear sources and hide layers + anchorPointSource?.setGeoJson(FeatureCollection.fromFeatures(emptyList())) + anchorCircleSource?.setGeoJson(FeatureCollection.fromFeatures(emptyList())) + style.getLayer(ANCHOR_POINT_LAYER_ID)?.setProperties(PropertyFactory.visibility(org.maplibre.android.style.layers.Property.NONE)) + style.getLayer(ANCHOR_CIRCLE_LAYER_ID)?.setProperties(PropertyFactory.visibility(org.maplibre.android.style.layers.Property.NONE)) + } + } + } + + // Helper function to create a GeoJSON Polygon for a circle + private fun createWatchCirclePolygon(center: Point, radiusMeters: Double, steps: Int = 64): Polygon { + val coordinates = mutableListOf() + val earthRadius = 6371000.0 // Earth's radius in meters + + for (i in 0..steps) { + val angle = 2 * Math.PI * i / steps + val lat = center.latitude() + (radiusMeters / earthRadius) * (180 / Math.PI) * Math.cos(angle) + val lon = center.longitude() + (radiusMeters / earthRadius) * (180 / Math.PI) * Math.sin(angle) / Math.cos(Math.toRadians(center.latitude())) + coordinates.add(Point.fromLngLat(lon, lat)) + } + return Polygon.fromLngLats(listOf(coordinates)) + } + + private fun observeLocationUpdates() { + lifecycleScope.launch { + // Observe from the static locationFlow in LocationService + LocationService.locationFlow.distinctUntilChanged().collect { gpsData -> + if (mobActivated && activeMobWaypoint != null) { + val mobLocation = Location("").apply { + latitude = activeMobWaypoint!!.latitude + longitude = activeMobWaypoint!!.longitude + } + val currentPosition = Location("").apply { + latitude = gpsData.latitude + longitude = gpsData.longitude + } + + val distance = currentPosition.distanceTo(mobLocation) // distance in meters + val elapsedTime = System.currentTimeMillis() - activeMobWaypoint!!.timestamp + + withContext(Dispatchers.Main) { + mobValueDistance.text = String.format(Locale.getDefault(), "%.1f m", distance) + mobValueElapsedTime.text = formatElapsedTime(elapsedTime) + // TODO: Update bearing arrow (requires custom view or rotation logic) + } + } + } + } + } + + private fun observeAnchorWatchState() { + lifecycleScope.launch { + // Observe from the static anchorWatchState in LocationService + LocationService.anchorWatchState.collect { state -> + withContext(Dispatchers.Main) { + updateAnchorMapLayers(state) // Update map layers + if (state.isActive && state.anchorLocation != null) { + currentWatchCircleRadius = state.watchCircleRadiusMeters + anchorRadiusText.text = String.format(Locale.getDefault(), "Radius: %.1fm", currentWatchCircleRadius) + + // Get the current location from the static flow + val currentLocation = LocationService.locationFlow.firstOrNull()?.toLocation() + if (currentLocation != null) { + val distance = state.anchorLocation.distanceTo(currentLocation) + val distanceDiff = distance - state.watchCircleRadiusMeters + if (distanceDiff > 0) { + anchorStatusText.text = String.format( + Locale.getDefault(), + getString(R.string.anchor_active_dragging_format), + state.anchorLocation.latitude, + state.anchorLocation.longitude, + state.watchCircleRadiusMeters, + distance, + distanceDiff + ) + anchorStatusText.setTextColor(ContextCompat.getColor(this@MainActivity, R.color.instrument_text_alarm)) + } else { + anchorStatusText.text = String.format( + Locale.getDefault(), + getString(R.string.anchor_active_format), + state.anchorLocation.latitude, + state.anchorLocation.longitude, + state.watchCircleRadiusMeters, + distance, + -distanceDiff // distance FROM limit + ) + anchorStatusText.setTextColor(ContextCompat.getColor(this@MainActivity, R.color.instrument_text_normal)) + } + } else { + anchorStatusText.text = "Anchor watch active (waiting for location...)" + anchorStatusText.setTextColor(ContextCompat.getColor(this@MainActivity, R.color.instrument_text_normal)) + } + } else { + anchorStatusText.text = getString(R.string.anchor_inactive) + anchorStatusText.setTextColor(ContextCompat.getColor(this@MainActivity, R.color.instrument_text_normal)) + } + } + } + } + } + + private fun activateMob() { + // Get last known location from the static flow + lifecycleScope.launch { + val lastGpsData: GpsData? = LocationService.locationFlow.firstOrNull() + if (lastGpsData != null) { + activeMobWaypoint = MobWaypoint( + latitude = lastGpsData.latitude, + longitude = lastGpsData.longitude, + timestamp = System.currentTimeMillis() + ) + mobActivated = true + Log.d("MainActivity", "MOB Activated! Location: ${activeMobWaypoint!!.latitude}, ${activeMobWaypoint!!.longitude} at ${activeMobWaypoint!!.timestamp}") + Toast.makeText(this@MainActivity, "MOB Activated!", Toast.LENGTH_SHORT).show() + + // Switch display to MOB navigation view + mapView?.visibility = View.GONE + instrumentDisplayContainer.visibility = View.GONE + fabToggleInstruments.visibility = View.GONE + fabMob.visibility = View.GONE + anchorConfigContainer.visibility = View.GONE // Hide anchor config + fabAnchor.visibility = View.GONE // Hide anchor FAB + mobNavigationContainer.visibility = View.VISIBLE + + + // Sound continuous alarm + mobMediaPlayer = MediaPlayer.create(this@MainActivity, R.raw.mob_alarm).apply { + isLooping = true + start() + } + + // Log event to logbook + logMobEvent(activeMobWaypoint!!) + } else { + Toast.makeText(this@MainActivity, "Could not get current location for MOB", Toast.LENGTH_SHORT).show() + Log.e("MainActivity", "Last known location is null, cannot activate MOB.") + } + } + } + + private fun recoverMob() { + mobActivated = false + activeMobWaypoint = null + stopMobAlarm() + + mobNavigationContainer.visibility = View.GONE + mapView?.visibility = View.VISIBLE + // instrumentDisplayContainer visibility is controlled by fabToggleInstruments, so leave as is + fabToggleInstruments.visibility = View.VISIBLE + fabMob.visibility = View.VISIBLE + fabAnchor.visibility = View.VISIBLE // Show anchor FAB + anchorConfigContainer.visibility = View.GONE // Hide anchor config + + Toast.makeText(this, "MOB Recovery initiated.", Toast.LENGTH_SHORT).show() + Log.d("MainActivity", "MOB Recovery initiated.") + } + + private fun stopMobAlarm() { + mobMediaPlayer?.stop() + mobMediaPlayer?.release() + mobMediaPlayer = null + Log.d("MainActivity", "MOB Alarm stopped and released.") + } + + private fun logMobEvent(mobWaypoint: MobWaypoint) { + Log.i("Logbook", "MOB Event: Lat ${mobWaypoint.latitude}, Lon ${mobWaypoint.longitude}, Time ${mobWaypoint.timestamp}") + // TODO: Integrate with actual logbook system for persistence + } + + + private fun formatElapsedTime(milliseconds: Long): String { + val hours = TimeUnit.MILLISECONDS.toHours(milliseconds) + val minutes = TimeUnit.MILLISECONDS.toMinutes(milliseconds) % 60 + val seconds = TimeUnit.MILLISECONDS.toSeconds(milliseconds) % 60 + return String.format(Locale.getDefault(), "%02d:%02d:%02d", hours, minutes, seconds) + } + + private fun updateInstrumentDisplay( + aws: String, + tws: String, + hdg: String, + cog: String, + bsp: String, + sog: String, + vmg: String, + depth: String, + polarPct: String + ) { + valueAws.text = aws + valueTws.text = tws + valueHdg.text = hdg + valueCog.text = cog + valueBsp.text = bsp + valueSog.text = sog + valueVmg.text = vmg + valueDepth.text = depth + valuePolarPct.text = polarPct + } + + override fun onStart() { + super.onStart() + mapView?.onStart() + } + + override fun onResume() { + super.onResume() + mapView?.onResume() + } + + override fun onPause() { + super.onPause() + mapView?.onPause() + } + + override fun onStop() { + super.onStop() + mapView?.onStop() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView?.onSaveInstanceState(outState) + } + + override fun onLowMemory() { + super.onLowMemory() + mapView?.onLowMemory() + } + + override fun onDestroy() { + super.onDestroy() + mapView?.onDestroy() + mobMediaPlayer?.release() // Ensure media player is released on destroy + } +} diff --git a/android-app/app/src/main/kotlin_old/org/terst/nav/PolarData.kt b/android-app/app/src/main/kotlin_old/org/terst/nav/PolarData.kt new file mode 100644 index 0000000..88a8d0d --- /dev/null +++ b/android-app/app/src/main/kotlin_old/org/terst/nav/PolarData.kt @@ -0,0 +1,168 @@ +package org.terst.nav + +import kotlin.math.abs +import kotlin.math.cos +import kotlin.math.max +import kotlin.math.min + +// Represents a single point on a polar curve: True Wind Angle and target Boat Speed +data class PolarPoint(val tWa: Double, val bSp: Double) + +// Represents a polar curve for a specific True Wind Speed +data class PolarCurve(val twS: Double, val points: List) { + init { + require(points.isNotEmpty()) { "PolarCurve must have at least one point." } + require(points.all { it.tWa in 0.0..180.0 }) { + "TWA in PolarCurve must be between 0 and 180 degrees." + } + require(points.zipWithNext().all { it.first.tWa < it.second.tWa }) { + "PolarPoints in a PolarCurve must be sorted by TWA." + } + } + + /** + * Interpolates the target boat speed for a given True Wind Angle (TWA) + * within this specific polar curve (constant TWS). + */ + fun interpolateBsp(twa: Double): Double { + val absoluteTwa = abs(twa) + if (absoluteTwa < points.first().tWa) return points.first().bSp + if (absoluteTwa > points.last().tWa) return points.last().bSp + + for (i in 0 until points.size - 1) { + val p1 = points[i] + val p2 = points[i + 1] + if (absoluteTwa >= p1.tWa && absoluteTwa <= p2.tWa) { + val ratio = (absoluteTwa - p1.tWa) / (p2.tWa - p1.tWa) + return p1.bSp + ratio * (p2.bSp - p1.bSp) + } + } + return 0.0 + } + + /** + * Calculates the Velocity Made Good (VMG) for a given TWA and BSP. + * VMG = BSP * cos(TWA) + */ + fun calculateVmg(twa: Double, bsp: Double): Double { + return bsp * cos(Math.toRadians(twa)) + } + + /** + * Finds the TWA that yields the maximum upwind VMG for this polar curve. + */ + fun findOptimalUpwindTwa(): Double { + var maxVmg = -Double.MAX_VALUE + var optimalTwa = 0.0 + // Search through TWA 0 to 90 + for (twa in 0..90) { + val bsp = interpolateBsp(twa.toDouble()) + val vmg = calculateVmg(twa.toDouble(), bsp) + if (vmg > maxVmg) { + maxVmg = vmg + optimalTwa = twa.toDouble() + } + } + return optimalTwa + } + + /** + * Finds the TWA that yields the maximum downwind VMG for this polar curve. + */ + fun findOptimalDownwindTwa(): Double { + var maxVmg = -Double.MAX_VALUE // We want the most negative VMG for downwind + var optimalTwa = 180.0 + // Search through TWA 90 to 180 + // For downwind, VMG is negative (moving away from wind) + // We look for the minimum value (largest absolute negative) + for (twa in 90..180) { + val bsp = interpolateBsp(twa.toDouble()) + val vmg = calculateVmg(twa.toDouble(), bsp) + if (vmg < maxVmg) { + maxVmg = vmg + optimalTwa = twa.toDouble() + } + } + return optimalTwa + } +} + +// Represents the complete polar table for a boat, containing multiple PolarCurves for different TWS +data class PolarTable(val curves: List) { + init { + require(curves.isNotEmpty()) { "PolarTable must have at least one curve." } + require(curves.zipWithNext().all { it.first.twS < it.second.twS }) { + "PolarCurves in a PolarTable must be sorted by TWS." + } + } + + /** + * Interpolates the target boat speed for a given True Wind Speed (TWS) and True Wind Angle (TWA). + */ + fun interpolateBsp(tws: Double, twa: Double): Double { + if (tws <= curves.first().twS) return curves.first().interpolateBsp(twa) + if (tws >= curves.last().twS) return curves.last().interpolateBsp(twa) + + for (i in 0 until curves.size - 1) { + val c1 = curves[i] + val c2 = curves[i + 1] + if (tws >= c1.twS && tws <= c2.twS) { + val ratio = (tws - c1.twS) / (c2.twS - c1.twS) + val bsp1 = c1.interpolateBsp(twa) + val bsp2 = c2.interpolateBsp(twa) + return bsp1 + ratio * (bsp2 - bsp1) + } + } + return 0.0 + } + + /** + * Finds the optimal upwind TWA for a given TWS by interpolating between curves. + */ + fun findOptimalUpwindTwa(tws: Double): Double { + if (tws <= curves.first().twS) return curves.first().findOptimalUpwindTwa() + if (tws >= curves.last().twS) return curves.last().findOptimalUpwindTwa() + + for (i in 0 until curves.size - 1) { + val c1 = curves[i] + val c2 = curves[i + 1] + if (tws >= c1.twS && tws <= c2.twS) { + val ratio = (tws - c1.twS) / (c2.twS - c1.twS) + return c1.findOptimalUpwindTwa() + ratio * (c2.findOptimalUpwindTwa() - c1.findOptimalUpwindTwa()) + } + } + return 0.0 + } + + /** + * Finds the optimal downwind TWA for a given TWS by interpolating between curves. + */ + fun findOptimalDownwindTwa(tws: Double): Double { + if (tws <= curves.first().twS) return curves.first().findOptimalDownwindTwa() + if (tws >= curves.last().twS) return curves.last().findOptimalDownwindTwa() + + for (i in 0 until curves.size - 1) { + val c1 = curves[i] + val c2 = curves[i + 1] + if (tws >= c1.twS && tws <= c2.twS) { + val ratio = (tws - c1.twS) / (c2.twS - c1.twS) + return c1.findOptimalDownwindTwa() + ratio * (c2.findOptimalDownwindTwa() - c1.findOptimalDownwindTwa()) + } + } + return 0.0 + } + + /** + * Calculates the "Polar Percentage" for current boat performance. + * Polar % = (Actual BSP / Target BSP) * 100 + * @return Polar percentage, or 0.0 if target BSP cannot be determined. + */ + fun calculatePolarPercentage(currentTwS: Double, currentTwa: Double, currentBsp: Double): Double { + val targetBsp = interpolateBsp(currentTwS, currentTwa) + return if (targetBsp > 0) { + (currentBsp / targetBsp) * 100.0 + } else { + 0.0 + } + } +} diff --git a/android-app/app/src/main/kotlin_old/org/terst/nav/PolarDiagramView.kt b/android-app/app/src/main/kotlin_old/org/terst/nav/PolarDiagramView.kt new file mode 100644 index 0000000..4a678cc --- /dev/null +++ b/android-app/app/src/main/kotlin_old/org/terst/nav/PolarDiagramView.kt @@ -0,0 +1,270 @@ +package org.terst.nav + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.RectF +import android.util.AttributeSet +import android.view.View +import kotlin.math.cos +import kotlin.math.min +import kotlin.math.sin + +class PolarDiagramView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : View(context, attrs, defStyleAttr) { + + private val gridPaint = Paint().apply { + color = Color.parseColor("#404040") // Dark gray for grid lines + style = Paint.Style.STROKE + strokeWidth = 1f + isAntiAlias = true + } + + private val textPaint = Paint().apply { + color = Color.WHITE + textSize = 24f + isAntiAlias = true + textAlign = Paint.Align.CENTER + } + + private val polarCurvePaint = Paint().apply { + color = Color.CYAN // Bright color for the polar curve + style = Paint.Style.STROKE + strokeWidth = 3f + isAntiAlias = true + } + + private val currentPerformancePaint = Paint().apply { + color = Color.RED // Red dot for current performance + style = Paint.Style.FILL + isAntiAlias = true + } + + private val noSailZonePaint = Paint().apply { + color = Color.parseColor("#80FF0000") // Semi-transparent red for no-sail zone + style = Paint.Style.FILL + isAntiAlias = true + } + + private val optimalVmgPaint = Paint().apply { + color = Color.GREEN // Green for optimal VMG angles + style = Paint.Style.STROKE + strokeWidth = 4f + isAntiAlias = true + } + + private var viewCenterX: Float = 0f + private var viewCenterY: Float = 0f + private var radius: Float = 0f + + // Data for rendering + private var polarTable: PolarTable? = null + private var currentTws: Double = 0.0 + private var currentTwa: Double = 0.0 + private var currentBsp: Double = 0.0 + + // Configuration for the diagram + private val maxSpeedKnots = 10.0 // Max speed for the outermost circle in knots + private val speedCircleInterval = 2.0 // Interval between speed circles in knots + private val twaInterval = 30 // Interval between TWA radial lines in degrees + private val noSailZoneAngle = 20.0 // Angle +/- from 0 degrees for no-sail zone + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + viewCenterX = w / 2f + viewCenterY = h / 2f + radius = min(w, h) / 2f * 0.9f // Use 90% of the minimum dimension for radius + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + + // Draw basic diagram elements + drawGrid(canvas) + drawTwaLabels(canvas) + drawNoSailZone(canvas) + + // Draw polar curve if data is available + polarTable?.let { + drawPolarCurve(canvas, it, currentTws) + drawOptimalVmgAngles(canvas, it, currentTws) // Draw optimal VMG angles + } + + // Draw current performance if data is available and not zero + if (currentTws > 0 && currentTwa > 0 && currentBsp > 0) { + drawCurrentPerformance(canvas, currentTwa, currentBsp) + } + } + + private fun drawGrid(canvas: Canvas) { + // Draw TWA radial lines (0 to 360 degrees) + for (i in 0 until 360 step twaInterval) { + val angleRad = Math.toRadians(i.toDouble()) + val x = viewCenterX + radius * cos(angleRad).toFloat() + val y = viewCenterY + radius * sin(angleRad).toFloat() + canvas.drawLine(viewCenterX, viewCenterY, x, y, gridPaint) + } + + // Draw speed circles + for (i in 0..maxSpeedKnots.toInt() step speedCircleInterval.toInt()) { + val currentRadius = (i / maxSpeedKnots * radius).toFloat() + canvas.drawCircle(viewCenterX, viewCenterY, currentRadius, gridPaint) + } + } + + private fun drawTwaLabels(canvas: Canvas) { + // Draw TWA labels around the perimeter + for (i in 0 until 360 step twaInterval) { + val displayAngleRad = Math.toRadians(i.toDouble()) + // Position the text slightly outside the outermost circle + val textX = viewCenterX + (radius + 40) * cos(displayAngleRad).toFloat() + // Adjust textY to account for text height, so it's centered vertically on the arc + val textY = viewCenterY + (radius + 40) * sin(displayAngleRad).toFloat() + (textPaint.textSize / 3) + + // Map canvas angle (0=right, 90=down) to polar diagram angle (0=up, 90=right) + // Example: canvas 270 is polar 0, canvas 0 is polar 90, canvas 90 is polar 180, canvas 180 is polar 270 + val polarAngle = ( (i + 90) % 360 ) + canvas.drawText(polarAngle.toString(), textX, textY, textPaint) + } + + // Draw speed labels on the horizontal axis + for (i in 0..maxSpeedKnots.toInt() step speedCircleInterval.toInt()) { + if (i > 0) { + val currentRadius = (i / maxSpeedKnots * radius).toFloat() + // Left side + canvas.drawText(i.toString(), viewCenterX - currentRadius - 10, viewCenterY + (textPaint.textSize / 3), textPaint) + // Right side + canvas.drawText(i.toString(), viewCenterX + currentRadius + 10, viewCenterY + (textPaint.textSize / 3), textPaint) + } + } + } + + private fun drawNoSailZone(canvas: Canvas) { + // The no-sail zone is typically symmetric around the wind direction (0 TWA, which is 'up' on our diagram) + // In canvas coordinates, 'up' is -90 degrees or 270 degrees. + // So the arc will be centered around 270 degrees. + val startAngle = (270 - noSailZoneAngle).toFloat() + val sweepAngle = (2 * noSailZoneAngle).toFloat() + + val oval = RectF(viewCenterX - radius, viewCenterY - radius, viewCenterX + radius, viewCenterY + radius) + canvas.drawArc(oval, startAngle, sweepAngle, true, noSailZonePaint) + } + + private fun drawPolarCurve(canvas: Canvas, polarTable: PolarTable, tws: Double) { + val path = android.graphics.Path() + var firstPoint = true + + // Generate points for 0 to 180 TWA (starboard side) + for (twa in 0..180) { + val bsp = polarTable.interpolateBsp(tws, twa.toDouble()) + if (bsp > 0) { + // Map TWA to canvas angle for the starboard side (0 TWA at 270, 90 TWA at 0, 180 TWA at 90) + val canvasAngle = (270 + twa).toDouble() % 360 + val currentRadius = (bsp / maxSpeedKnots * radius).toFloat() + val x = viewCenterX + currentRadius * cos(Math.toRadians(canvasAngle)).toFloat() + val y = viewCenterY + currentRadius * sin(Math.toRadians(canvasAngle)).toFloat() + + if (firstPoint) { + path.moveTo(x, y) + firstPoint = false + } else { + path.lineTo(x, y) + } + } + } + + // Generate points for 0 to -180 TWA (port side) by mirroring + // Start from 180 back to 0 to connect the curve + for (twa in 180 downTo 0) { + val bsp = polarTable.interpolateBsp(tws, twa.toDouble()) + if (bsp > 0) { + // Map negative TWA to canvas angle for the port side (0 TWA at 270, -90 TWA at 180, -180 TWA at 90) + val canvasAngle = (270 - twa).toDouble() // This maps TWA 0 to 270, TWA 90 to 180, TWA 180 to 90 + val currentRadius = (bsp / maxSpeedKnots * radius).toFloat() + val x = viewCenterX + currentRadius * cos(Math.toRadians(canvasAngle)).toFloat() + val y = viewCenterY + currentRadius * sin(Math.toRadians(canvasAngle)).toFloat() + + path.lineTo(x, y) // Continue drawing the path + } + } + canvas.drawPath(path, polarCurvePaint) + } + + private fun drawCurrentPerformance(canvas: Canvas, twa: Double, bsp: Double) { + val canvasAngle = if (twa >= 0) { + (270 + twa).toDouble() % 360 // Starboard side + } else { + (270 + twa).toDouble() // Port side (e.g., -30 TWA is 240 canvas angle) + } + + val currentRadius = (bsp / maxSpeedKnots * radius).toFloat() + val x = viewCenterX + currentRadius * cos(Math.toRadians(canvasAngle)).toFloat() + val y = viewCenterY + currentRadius * sin(Math.toRadians(canvasAngle)).toFloat() + + canvas.drawCircle(x, y, 10f, currentPerformancePaint) // Draw a small circle for current performance + } + + private fun drawOptimalVmgAngles(canvas: Canvas, polarTable: PolarTable, tws: Double) { + // Find optimal upwind TWA + val optimalUpwindTwa = polarTable.findOptimalUpwindTwa(tws) + if (optimalUpwindTwa > 0) { + // Draw a line indicating the optimal upwind TWA (both port and starboard) + val upwindBsp = polarTable.interpolateBsp(tws, optimalUpwindTwa) + val currentRadius = (upwindBsp / maxSpeedKnots * radius).toFloat() * 1.05f // Slightly longer + + // Starboard side + var canvasAngle = (270 + optimalUpwindTwa).toDouble() % 360 + var x = viewCenterX + currentRadius * cos(Math.toRadians(canvasAngle)).toFloat() + var y = viewCenterY + currentRadius * sin(Math.toRadians(canvasAngle)).toFloat() + canvas.drawLine(viewCenterX, viewCenterY, x, y, optimalVmgPaint) + + // Port side + canvasAngle = (270 - optimalUpwindTwa).toDouble() // Use negative TWA for port side + x = viewCenterX + currentRadius * cos(Math.toRadians(canvasAngle)).toFloat() + y = viewCenterY + currentRadius * sin(Math.toRadians(canvasAngle)).toFloat() + canvas.drawLine(viewCenterX, viewCenterY, x, y, optimalVmgPaint) + } + + // Find optimal downwind TWA + val optimalDownwindTwa = polarTable.findOptimalDownwindTwa(tws) + if (optimalDownwindTwa > 0) { + // Draw a line indicating the optimal downwind TWA (both port and starboard) + val downwindBsp = polarTable.interpolateBsp(tws, optimalDownwindTwa) + val currentRadius = (downwindBsp / maxSpeedKnots * radius).toFloat() * 1.05f // Slightly longer + + // Starboard side + var canvasAngle = (270 + optimalDownwindTwa).toDouble() % 360 + var x = viewCenterX + currentRadius * cos(Math.toRadians(canvasAngle)).toFloat() + var y = viewCenterY + currentRadius * sin(Math.toRadians(canvasAngle)).toFloat() + canvas.drawLine(viewCenterX, viewCenterY, x, y, optimalVmgPaint) + + // Port side + canvasAngle = (270 - optimalDownwindTwa).toDouble() // Use negative TWA for port side + x = viewCenterX + currentRadius * cos(Math.toRadians(canvasAngle)).toFloat() + y = viewCenterY + currentRadius * sin(Math.toRadians(canvasAngle)).toFloat() + canvas.drawLine(viewCenterX, viewCenterY, x, y, optimalVmgPaint) + } + } + + /** + * Sets the polar table data for the view. + */ + fun setPolarTable(table: PolarTable) { + this.polarTable = table + invalidate() // Redraw the view + } + + /** + * Sets the current true wind speed, true wind angle, and boat speed. + */ + fun setCurrentPerformance(tws: Double, twa: Double, bsp: Double) { + this.currentTws = tws + this.currentTwa = twa + this.currentBsp = bsp + invalidate() // Redraw the view + } +} diff --git a/android-app/app/src/main/res/layout/activity_main.xml b/android-app/app/src/main/res/layout/activity_main.xml index cfeea6c..8c734d5 100644 --- a/android-app/app/src/main/res/layout/activity_main.xml +++ b/android-app/app/src/main/res/layout/activity_main.xml @@ -227,6 +227,51 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" /> + + + + + + + + + + diff --git a/android-app/app/src/main/res/values/colors.xml b/android-app/app/src/main/res/values/colors.xml old mode 100644 new mode 100755 index 7ccb28f..32f5036 --- a/android-app/app/src/main/res/values/colors.xml +++ b/android-app/app/src/main/res/values/colors.xml @@ -9,6 +9,7 @@ #FFFFFFFF + #B3FFFFFF #FFFF0000 #FFFFFF00 #E61E1E1E diff --git a/android-app/app/src/main/res/values/dimens.xml b/android-app/app/src/main/res/values/dimens.xml old mode 100644 new mode 100755 diff --git a/android-app/app/src/main/res/values/strings.xml b/android-app/app/src/main/res/values/strings.xml old mode 100644 new mode 100755 index b6d3601..cec4850 --- a/android-app/app/src/main/res/values/strings.xml +++ b/android-app/app/src/main/res/values/strings.xml @@ -14,6 +14,8 @@ VMG DEPTH POLAR % + BAROMETER + TREND --.- @@ -25,6 +27,7 @@ --.- --.- --- + ----.- Activate Man Overboard (MOB) alarm Toggle Anchor Watch Configuration diff --git a/android-app/app/src/main/res/values/themes.xml b/android-app/app/src/main/res/values/themes.xml old mode 100644 new mode 100755 diff --git a/android-app/app/src/main/res_old/drawable/ic_anchor.xml b/android-app/app/src/main/res_old/drawable/ic_anchor.xml new file mode 100644 index 0000000..2389c93 --- /dev/null +++ b/android-app/app/src/main/res_old/drawable/ic_anchor.xml @@ -0,0 +1,9 @@ + + + diff --git a/android-app/app/src/main/res_old/mipmap-anydpi-v26/ic_launcher.xml b/android-app/app/src/main/res_old/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..52d5417 --- /dev/null +++ b/android-app/app/src/main/res_old/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/android-app/app/src/main/res_old/mipmap-anydpi-v26/ic_launcher_round.xml b/android-app/app/src/main/res_old/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..52d5417 --- /dev/null +++ b/android-app/app/src/main/res_old/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/android-app/app/src/main/res_old/raw/mob_alarm.mp3 b/android-app/app/src/main/res_old/raw/mob_alarm.mp3 new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/android-app/app/src/main/res_old/raw/mob_alarm.mp3 @@ -0,0 +1 @@ + diff --git a/android-app/app/src/main/temp/CompassRoseView.kt b/android-app/app/src/main/temp/CompassRoseView.kt new file mode 100755 index 0000000..8e755a3 --- /dev/null +++ b/android-app/app/src/main/temp/CompassRoseView.kt @@ -0,0 +1,217 @@ +package org.terst.nav.temp // Temporarily placing in 'temp' due to permissions, actual package should be 'org.terst.nav' + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.Rect +import android.util.AttributeSet +import android.view.View +import kotlin.math.cos +import kotlin.math.min +import kotlin.math.sin + +class CompassRoseView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : View(context, attrs, defStyleAttr) { + + private var heading: Float = 0f // Current heading in degrees + set(value) { + field = value % 360 // Ensure heading is within 0-359 + invalidate() + } + private var cog: Float = 0f // Course Over Ground in degrees + set(value) { + field = value % 360 + invalidate() + } + private var isTrueHeading: Boolean = true // True for True heading, false for Magnetic + + private val rosePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.DKGRAY + style = Paint.Style.STROKE + strokeWidth = 2f + } + + private val textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.WHITE + textSize = 30f + textAlign = Paint.Align.CENTER + } + + private val cardinalTextPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.WHITE + textSize = 40f + textAlign = Paint.Align.CENTER + isFakeBoldText = true + } + + private val majorTickPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.WHITE + strokeWidth = 3f + } + + private val minorTickPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.GRAY + strokeWidth = 1f + } + + private val headingNeedlePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.RED + style = Paint.Style.FILL + } + + private val cogArrowPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.BLUE + style = Paint.Style.FILL + strokeWidth = 5f + } + + private var viewCenterX: Float = 0f + private var viewCenterY: Float = 0f + private var radius: Float = 0f + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + viewCenterX = w / 2f + viewCenterY = h / 2f + radius = min(w, h) / 2f - 40f // Leave some padding + textPaint.textSize = radius / 6f + cardinalTextPaint.textSize = radius / 4.5f + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + + // Draw outer circle + canvas.drawCircle(viewCenterX, viewCenterY, radius, rosePaint) + + // Draw cardinal and intercardinal points + drawCardinalPoints(canvas) + + // Draw tick marks and degree labels + drawDegreeMarks(canvas) + + // Draw heading needle + drawHeadingNeedle(canvas, heading, headingNeedlePaint, radius * 0.8f) + + // Draw COG arrow + drawCogArrow(canvas, cog, cogArrowPaint, radius * 0.6f) + + // Draw current heading text in the center + drawHeadingText(canvas) + } + + private fun drawCardinalPoints(canvas: Canvas) { + val cardinalPoints = listOf("N", "E", "S", "W") + val angles = listOf(0f, 90f, 180f, 270f) + val textBound = Rect() + + for (i in cardinalPoints.indices) { + val angleRad = Math.toRadians((angles[i] - 90).toDouble()).toFloat() // Adjust for canvas 0deg at 3 o'clock + val x = viewCenterX + (radius * 0.9f) * cos(angleRad) + val y = viewCenterY + (radius * 0.9f) * sin(angleRad) + + val text = cardinalPoints[i] + cardinalTextPaint.getTextBounds(text, 0, text.length, textBound) + val textHeight = textBound.height() + + canvas.drawText(text, x, y + textHeight / 2, cardinalTextPaint) + } + } + + private fun drawDegreeMarks(canvas: Canvas) { + for (i in 0 until 360 step 5) { + val isMajor = (i % 30 == 0) // Major ticks every 30 degrees + val tickLength = if (isMajor) 30f else 15f + val currentTickPaint = if (isMajor) majorTickPaint else minorTickPaint + val startRadius = radius - tickLength + + val angleRad = Math.toRadians((i - 90).toDouble()).toFloat() // Adjust for canvas 0deg at 3 o'clock + + val startX = viewCenterX + startRadius * cos(angleRad) + val startY = viewCenterY + startRadius * sin(angleRad) + val endX = viewCenterX + radius * cos(angleRad) + val endY = viewCenterY + radius * sin(angleRad) + + canvas.drawLine(startX, startY, endX, endY, currentTickPaint) + + if (isMajor && i != 0) { // Draw degree labels for major ticks (except North) + val textRadius = radius - tickLength - textPaint.textSize / 2 - 10f + val textX = viewCenterX + textRadius * cos(angleRad) + val textY = viewCenterY + textRadius * sin(angleRad) + textPaint.textSize / 2 + + canvas.drawText(i.toString(), textX, textY, textPaint) + } + } + } + + private fun drawHeadingNeedle(canvas: Canvas, angle: Float, paint: Paint, length: Float) { + val angleRad = Math.toRadians((angle - 90).toDouble()).toFloat() // Adjust for canvas 0deg at 3 o'clock + val endX = viewCenterX + length * cos(angleRad) + val endY = viewCenterY + length * sin(angleRad) + + // Draw a simple triangle for the needle + val needleWidth = 20f + val path = android.graphics.Path() + path.moveTo(endX, endY) + path.lineTo(viewCenterX + needleWidth * cos(angleRad - Math.toRadians(90.0).toFloat()), + viewCenterY + needleWidth * sin(angleRad - Math.toRadians(90.0).toFloat())) + path.lineTo(viewCenterX + needleWidth * cos(angleRad + Math.toRadians(90.0).toFloat()), + viewCenterY + needleWidth * sin(angleRad + Math.toRadians(90.0).toFloat())) + path.close() + canvas.drawPath(path, paint) + } + + private fun drawCogArrow(canvas: Canvas, angle: Float, paint: Paint, length: Float) { + val angleRad = Math.toRadians((angle - 90).toDouble()).toFloat() // Adjust for canvas 0deg at 3 o'clock + val endX = viewCenterX + length * cos(angleRad) + val endY = viewCenterY + length * sin(angleRad) + + val startX = viewCenterX + (length * 0.5f) * cos(angleRad) + val startY = viewCenterY + (length * 0.5f) * sin(angleRad) + + canvas.drawLine(startX, startY, endX, endY, paint) + + // Draw arrow head + val arrowHeadLength = 25f + val arrowHeadWidth = 15f + val arrowPath = android.graphics.Path() + arrowPath.moveTo(endX, endY) + arrowPath.lineTo(endX - arrowHeadLength * cos(angleRad - Math.toRadians(30.0).toFloat()), + endY - arrowHeadLength * sin(angleRad - Math.toRadians(30.0).toFloat())) + arrowPath.moveTo(endX, endY) + arrowPath.lineTo(endX - arrowHeadLength * cos(angleRad + Math.toRadians(30.0).toFloat()), + endY - arrowHeadLength * sin(angleRad + Math.toRadians(30.0).toFloat())) + canvas.drawPath(arrowPath, paint) + } + + private fun drawHeadingText(canvas: Canvas) { + val headingText = "${heading.toInt()}°" + if (isTrueHeading) "T" else "M" + textPaint.color = Color.WHITE + textPaint.textSize = radius / 3.5f // Larger text for main heading + canvas.drawText(headingText, viewCenterX, viewCenterY + textPaint.textSize / 3, textPaint) + } + + /** + * Sets the current heading to display. + * @param newHeading The new heading value in degrees (0-359). + * @param isTrue Whether the heading is True (magnetic variation applied) or Magnetic. + */ + fun setHeading(newHeading: Float, isTrue: Boolean) { + this.heading = newHeading + this.isTrueHeading = isTrue + invalidate() + } + + /** + * Sets the Course Over Ground (COG) to display. + * @param newCog The new COG value in degrees (0-359). + */ + fun setCog(newCog: Float) { + this.cog = newCog + invalidate() + } +} diff --git a/android-app/app/src/main/temp/HeadingDataProcessor.kt b/android-app/app/src/main/temp/HeadingDataProcessor.kt new file mode 100755 index 0000000..7625f90 --- /dev/null +++ b/android-app/app/src/main/temp/HeadingDataProcessor.kt @@ -0,0 +1,108 @@ +package org.terst.nav.temp // Temporarily placing in 'temp' due to permissions + +import android.hardware.GeomagneticField +import android.location.Location +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update +import java.util.Date + +/** + * Data class representing processed heading information. + * @param trueHeading The heading relative to true North (0-359.9 degrees). + * @param magneticHeading The heading relative to magnetic North (0-359.9 degrees). + * @param magneticVariation The difference between true and magnetic North at the current location (+E, -W). + * @param cog Course Over Ground (0-359.9 degrees). + */ +data class HeadingInfo( + val trueHeading: Float, + val magneticHeading: Float, + val magneticVariation: Float, + val cog: Float +) + +/** + * Processor for handling heading data, including magnetic variation calculations + * using the Android GeomagneticField. + */ +class HeadingDataProcessor { + + private val _headingInfoFlow = MutableStateFlow(HeadingInfo(0f, 0f, 0f, 0f)) + val headingInfoFlow: StateFlow = _headingInfoFlow.asStateFlow() + + private var currentLatitude: Double = 0.0 + private var currentLongitude: Double = 0.0 + private var currentAltitude: Double = 0.0 + + /** + * Updates the current geographic location for magnetic variation calculations. + */ + fun updateLocation(latitude: Double, longitude: Double, altitude: Double) { + currentLatitude = latitude + currentLongitude = longitude + currentAltitude = altitude + // Recalculate magnetic variation if location changes + updateHeadingInfo(_headingInfoFlow.value.trueHeading, _headingInfoFlow.value.cog, true) + } + + /** + * Processes a new true heading and Course Over Ground (COG) value. + * @param newTrueHeading The new true heading in degrees. + * @param newCog The new COG in degrees. + */ + fun updateTrueHeadingAndCog(newTrueHeading: Float, newCog: Float) { + updateHeadingInfo(newTrueHeading, newCog, true) + } + + /** + * Processes a new magnetic heading and Course Over Ground (COG) value. + * @param newMagneticHeading The new magnetic heading in degrees. + * @param newCog The new COG in degrees. + */ + fun updateMagneticHeadingAndCog(newMagneticHeading: Float, newCog: Float) { + updateHeadingInfo(newMagneticHeading, newCog, false) + } + + private fun updateHeadingInfo(heading: Float, cog: Float, isTrueHeadingInput: Boolean) { + val magneticVariation = calculateMagneticVariation() + val (finalTrueHeading, finalMagneticHeading) = if (isTrueHeadingInput) { + Pair(heading, (heading - magneticVariation + 360) % 360) + } else { + Pair((heading + magneticVariation + 360) % 360, heading) + } + + _headingInfoFlow.update { + it.copy( + trueHeading = finalTrueHeading, + magneticHeading = finalMagneticHeading, + magneticVariation = magneticVariation, + cog = cog + ) + } + } + + /** + * Calculates the magnetic variation (declination) for the current location. + * @return Magnetic variation in degrees (+E, -W). + */ + private fun calculateMagneticVariation(): Float { + // GeomagneticField requires current time in milliseconds + val currentTimeMillis = System.currentTimeMillis() + + // Create a dummy Location object to get altitude if only lat/lon are updated + // GeomagneticField needs altitude, using 0 if not provided + val geoField = GeomagneticField( + currentLatitude.toFloat(), + currentLongitude.toFloat(), + currentAltitude.toFloat(), // Altitude in meters + currentTimeMillis + ) + return geoField.declination // Declination is the magnetic variation + } + + // Helper function to normalize angles (0-359.9) - though modulo handles this for positive floats + private fun normalizeAngle(angle: Float): Float { + return (angle % 360 + 360) % 360 + } +} diff --git a/android-app/app/src/test/kotlin/org/test.txt b/android-app/app/src/test/kotlin/org/test.txt new file mode 100755 index 0000000..e69de29 diff --git a/android-app/gradle/wrapper/gradle-wrapper.jar b/android-app/gradle/wrapper/gradle-wrapper.jar old mode 100644 new mode 100755 diff --git a/android-app/gradle/wrapper/gradle-wrapper.properties b/android-app/gradle/wrapper/gradle-wrapper.properties old mode 100644 new mode 100755 diff --git a/android-app/gradlew.bat b/android-app/gradlew.bat old mode 100644 new mode 100755 diff --git a/android-app/local.properties b/android-app/local.properties old mode 100644 new mode 100755 diff --git a/android-app/settings.gradle b/android-app/settings.gradle old mode 100644 new mode 100755 diff --git a/docs/RAW_NARRATIVE.md b/docs/RAW_NARRATIVE.md index ab5913f..1d1dfa9 100644 --- a/docs/RAW_NARRATIVE.md +++ b/docs/RAW_NARRATIVE.md @@ -19,3 +19,9 @@ request necessary android permissions --- 2026-03-13T23:56:30Z --- request necessary android permissions + +--- 2026-03-14T00:04:22Z --- +Request necessary android permissions + +--- 2026-03-14T00:06:44Z --- +Request necessary android permissions -- cgit v1.2.3