not1mm 24.9.22__py3-none-any.whl → 24.9.23__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
not1mm/__main__.py CHANGED
@@ -2342,7 +2342,15 @@ class MainWindow(QtWidgets.QMainWindow):
2342
2342
  self.voice_process.voice_string(self.process_macro(function_key.toolTip()))
2343
2343
  # self.voice_string(self.process_macro(function_key.toolTip()))
2344
2344
  return
2345
- if self.radio_state.get("mode") in ["RTTY"]:
2345
+ if self.radio_state.get("mode") in [
2346
+ "RTTY",
2347
+ "USB-D",
2348
+ "LSB-D",
2349
+ "PKTLSB",
2350
+ "PKTUSB",
2351
+ "DIGI-U",
2352
+ "DIGI-L",
2353
+ ]:
2346
2354
  self.fldigi_util.send_string(self.process_macro(function_key.toolTip()))
2347
2355
  if self.cw:
2348
2356
  if self.pref.get("cwtype") == 3 and self.rig_control is not None:
@@ -3210,6 +3218,10 @@ class MainWindow(QtWidgets.QMainWindow):
3210
3218
  self.contact["Band"] = get_logged_band(str(vfo))
3211
3219
  self.set_band_indicator(band)
3212
3220
 
3221
+ if self.rig_control:
3222
+ if self.rig_control.online:
3223
+ self.rig_control.get_modes()
3224
+
3213
3225
  if self.radio_state.get("mode") != mode:
3214
3226
  info_dirty = True
3215
3227
  self.radio_state["mode"] = mode
@@ -1,5 +1,5 @@
1
1
  S|F1|MyCall|{MYCALL}
2
- S|F2|Exch|{EXCH}
2
+ S|F2|Exch|{SNT} {EXCH}
3
3
  S|F3|My NR|{SENTNR}
4
4
  S|F4|empty|
5
5
  S|F5|AGN|agn
@@ -12,7 +12,7 @@ S|F11|NR??|NR?
12
12
  S|F12|TU|tu
13
13
  R|F1|Run CQ|cq test {MYCALL} {MYCALL} test
14
14
  R|F2|HisCall|{HISCALL}
15
- R|F3|Run Exch|{HISCALL} {SNT} {SENTNR}
15
+ R|F3|Run Exch|{HISCALL} {SNT} {EXCH}
16
16
  R|F4|Run TU|tu {MYCALL} qrz
17
17
  R|F5|MyCall|{MYCALL}
18
18
  R|F6|MyNR|{SENTNR}
@@ -90,7 +90,7 @@ class CAT:
90
90
  def __initialize_rigctrld(self):
91
91
  try:
92
92
  self.rigctrlsocket = socket.socket()
93
- self.rigctrlsocket.settimeout(0.5)
93
+ self.rigctrlsocket.settimeout(0.1)
94
94
  self.rigctrlsocket.connect((self.host, self.port))
95
95
  logger.debug("Connected to rigctrld")
96
96
  self.online = True
@@ -104,6 +104,18 @@ class CAT:
104
104
  if self.interface == "rigctld":
105
105
  self.__initialize_rigctrld()
106
106
 
107
+ def __get_serial_string(self):
108
+ """Gets any serial data waiting"""
109
+ dump = ""
110
+ thegrab = ""
111
+ try:
112
+ while True:
113
+ thegrab += self.rigctrlsocket.recv(1024).decode()
114
+ dump += thegrab
115
+ except socket.error:
116
+ ...
117
+ return dump
118
+
107
119
  def sendcw(self, texttosend):
108
120
  """..."""
109
121
  logger.debug(f"{texttosend=} {self.interface=}")
@@ -119,7 +131,7 @@ class CAT:
119
131
  try:
120
132
  self.online = True
121
133
  self.rigctrlsocket.send(bytes(f"b{texttosend}\n", "utf-8"))
122
- _ = self.rigctrlsocket.recv(1024).decode().strip()
134
+ _ = self.__get_serial_string()
123
135
  return True
124
136
  except socket.error as exception:
125
137
  self.online = False
@@ -216,7 +228,7 @@ class CAT:
216
228
  try:
217
229
  self.online = True
218
230
  self.rigctrlsocket.send(b"f\n")
219
- return self.rigctrlsocket.recv(1024).decode().strip()
231
+ return self.__get_serial_string().strip()
220
232
  except socket.error as exception:
221
233
  self.online = False
222
234
  logger.debug("getvfo_rigctld: %s", f"{exception}")
@@ -237,6 +249,8 @@ class CAT:
237
249
 
238
250
  def __getmode_flrig(self) -> str:
239
251
  """Returns mode via flrig"""
252
+ # QMX ['CW-U', 'CW-L', 'DIGI-U', 'DIGI-L']
253
+ # 7300 ['LSB', 'USB', 'AM', 'FM', 'CW', 'CW-R', 'RTTY', 'RTTY-R', 'LSB-D', 'USB-D', 'AM-D', 'FM-D']
240
254
  try:
241
255
  self.online = True
242
256
  return self.server.rig.get_mode()
@@ -253,11 +267,13 @@ class CAT:
253
267
 
254
268
  def __getmode_rigctld(self) -> str:
255
269
  """Returns mode vai rigctld"""
270
+ # QMX 'AM CW USB LSB RTTY FM CWR RTTYR'
271
+ # 7300 'AM CW USB LSB RTTY FM CWR RTTYR PKTLSB PKTUSB FM-D AM-D'
256
272
  if self.rigctrlsocket:
257
273
  try:
258
274
  self.online = True
259
275
  self.rigctrlsocket.send(b"m\n")
260
- mode = self.rigctrlsocket.recv(1024).decode()
276
+ mode = self.__get_serial_string()
261
277
  mode = mode.strip().split()[0]
262
278
  # logger.debug("%s", mode)
263
279
  return mode
@@ -302,7 +318,7 @@ class CAT:
302
318
  try:
303
319
  self.online = True
304
320
  self.rigctrlsocket.send(b"m\n")
305
- mode = self.rigctrlsocket.recv(1024).decode()
321
+ mode = self.__get_serial_string()
306
322
  mode = mode.strip().split()[1]
307
323
  # logger.debug("%s", mode)
308
324
  return mode
@@ -344,7 +360,7 @@ class CAT:
344
360
  try:
345
361
  self.online = True
346
362
  self.rigctrlsocket.send(b"l RFPOWER\n")
347
- return int(float(self.rigctrlsocket.recv(1024).decode().strip()) * 100)
363
+ return int(float(self.__get_serial_string().strip()) * 100)
348
364
  except socket.error as exception:
349
365
  self.online = False
350
366
  logger.debug("getpower_rigctld: %s", f"{exception}")
@@ -381,7 +397,7 @@ class CAT:
381
397
  try:
382
398
  self.online = True
383
399
  self.rigctrlsocket.send(b"t\n")
384
- ptt = self.rigctrlsocket.recv(1024).decode()
400
+ ptt = self.__get_serial_string()
385
401
  logger.debug("%s", ptt)
386
402
  ptt = ptt.strip()
387
403
  return ptt
@@ -391,6 +407,49 @@ class CAT:
391
407
  self.rigctrlsocket = None
392
408
  return "0"
393
409
 
410
+ def get_mode_list(self):
411
+ "Get a list of modes supported by the radio"
412
+ if self.interface == "flrig":
413
+ return self.__get_mode_list_flrig()
414
+ if self.interface == "rigctld":
415
+ return self.__get_mode_list_rigctld()
416
+ return False
417
+
418
+ def __get_mode_list_flrig(self):
419
+ """Returns list of modes supported by the radio"""
420
+ try:
421
+ self.online = True
422
+ return self.server.rig.get_modes()
423
+ except (
424
+ ConnectionRefusedError,
425
+ xmlrpc.client.Fault,
426
+ http.client.BadStatusLine,
427
+ http.client.CannotSendRequest,
428
+ http.client.ResponseNotReady,
429
+ ) as exception:
430
+ self.online = False
431
+ logger.debug("%s", f"{exception}")
432
+ return ""
433
+
434
+ def __get_mode_list_rigctld(self):
435
+ """Returns list of modes supported by the radio"""
436
+ # Mode list: AM CW USB LSB RTTY FM CWR RTTYR
437
+ if self.rigctrlsocket:
438
+ try:
439
+ self.online = True
440
+ self.rigctrlsocket.send(b"1\n")
441
+ dump = self.__get_serial_string()
442
+ for line in dump.splitlines():
443
+ if "Mode list:" in line:
444
+ modes = line.split(":")[1].strip()
445
+ return modes
446
+ return ""
447
+ except socket.error as exception:
448
+ self.online = False
449
+ logger.debug("%s", f"{exception}")
450
+ self.rigctrlsocket = None
451
+ return ""
452
+
394
453
  def set_vfo(self, freq: str) -> bool:
395
454
  """Sets the radios vfo"""
396
455
  try:
@@ -424,7 +483,7 @@ class CAT:
424
483
  try:
425
484
  self.online = True
426
485
  self.rigctrlsocket.send(bytes(f"F {freq}\n", "utf-8"))
427
- _ = self.rigctrlsocket.recv(1024).decode().strip()
486
+ _ = self.__get_serial_string()
428
487
  return True
429
488
  except socket.error as exception:
430
489
  self.online = False
@@ -464,7 +523,7 @@ class CAT:
464
523
  try:
465
524
  self.online = True
466
525
  self.rigctrlsocket.send(bytes(f"M {mode} 0\n", "utf-8"))
467
- _ = self.rigctrlsocket.recv(1024).decode().strip()
526
+ _ = self.__get_serial_string()
468
527
  return True
469
528
  except socket.error as exception:
470
529
  self.online = False
@@ -503,7 +562,7 @@ class CAT:
503
562
  try:
504
563
  self.online = True
505
564
  self.rigctrlsocket.send(rig_cmd)
506
- _ = self.rigctrlsocket.recv(1024).decode().strip()
565
+ _ = self.__get_serial_string()
507
566
  except socket.error:
508
567
  self.online = False
509
568
  self.rigctrlsocket = None
@@ -532,7 +591,7 @@ class CAT:
532
591
  try:
533
592
  self.online = True
534
593
  self.rigctrlsocket.send(rig_cmd)
535
- _ = self.rigctrlsocket.recv(1024).decode().strip()
594
+ _ = self.__get_serial_string()
536
595
  except socket.error:
537
596
  self.online = False
538
597
  self.rigctrlsocket = None
@@ -568,7 +627,7 @@ class CAT:
568
627
  try:
569
628
  self.online = True
570
629
  self.rigctrlsocket.send(rig_cmd)
571
- _ = self.rigctrlsocket.recv(1024).decode().strip()
630
+ _ = self.__get_serial_string()
572
631
  except socket.error:
573
632
  self.online = False
574
633
  self.rigctrlsocket = None
not1mm/lib/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.9.22"
3
+ __version__ = "24.9.23"
not1mm/radio.py CHANGED
@@ -34,6 +34,7 @@ class Radio(QObject):
34
34
  interface = None
35
35
  host = None
36
36
  port = None
37
+ modes = ""
37
38
 
38
39
  def __init__(self, interface: str, host: str, port: int) -> None:
39
40
  super().__init__()
@@ -45,6 +46,7 @@ class Radio(QObject):
45
46
  def run(self):
46
47
  try:
47
48
  self.cat = CAT(self.interface, self.host, self.port)
49
+ self.modes = self.cat.get_mode_list()
48
50
  except ConnectionResetError:
49
51
  ...
50
52
  while not self.time_to_quit:
@@ -113,6 +115,9 @@ class Radio(QObject):
113
115
  }
114
116
  )
115
117
 
118
+ def get_modes(self):
119
+ return self.modes
120
+
116
121
  def ptt_on(self):
117
122
  if self.cat:
118
123
  self.cat.ptt_on()
not1mm/test.py CHANGED
@@ -11,18 +11,30 @@
11
11
  # xml = '<?xml version="1.0"?>\n<HamQTH version="2.8" xmlns="https://www.hamqth.com">\n <search>\n <callsign>K6GTE</callsign>\n <nick>Mike</nick>\n <qth>Anaheim</qth>\n <country>United States</country>\n <adif>291</adif>\n <itu>6</itu>\n <cq>3</cq>\n <grid>DM13AT</grid>\n <adr_name>Michael C Bridak</adr_name>\n <adr_street1>2854 W Bridgeport Ave</adr_street1>\n <adr_city>Anaheim</adr_city>\n <adr_zip>92804</adr_zip>\n <adr_country>United States</adr_country>\n <adr_adif>291</adr_adif>\n <us_state>CA</us_state>\n <us_county>Orange</us_county>\n <lotw>Y</lotw>\n <qsldirect>Y</qsldirect>\n <qsl>?</qsl>\n <eqsl>N</eqsl>\n <email>michael.bridak@gmail.com</email>\n <birth_year>1967</birth_year>\n <lic_year>2017</lic_year>\n <latitude>33.81</latitude>\n <longitude>-117.97</longitude>\n <continent>NA</continent>\n <utc_offset>-8</utc_offset>\n <picture>https://www.hamqth.com/userfiles/k/k6/k6gte/_header/header.jpg?ver=3</picture>\n </search>\n</HamQTH>'
12
12
  # result = xmltodict.parse(xml)
13
13
 
14
- import xmlrpc.client
14
+ # import xmlrpc.client
15
+
16
+ # target = "http://127.0.0.1:7362"
17
+ # payload = "Hello^r"
18
+ # response = ""
19
+
20
+ # try:
21
+ # server = xmlrpc.client.ServerProxy(target)
22
+ # response = server.logbook.last_record()
23
+ # response = server.main.tx()
24
+ # response = server.text.add_tx(payload)
25
+ # except ConnectionRefusedError:
26
+ # ...
27
+
28
+ # print(f"{response=}")
29
+
30
+
31
+ # from not1mm.radio import Radio
32
+ from not1mm.lib.cat_interface import CAT
15
33
 
16
- target = "http://127.0.0.1:7362"
17
- payload = "Hello^r"
18
- response = ""
34
+ rig_control = CAT("rigctld", "127.0.0.1", 4532)
19
35
 
20
- try:
21
- server = xmlrpc.client.ServerProxy(target)
22
- response = server.logbook.last_record()
23
- response = server.main.tx()
24
- response = server.text.add_tx(payload)
25
- except ConnectionRefusedError:
26
- ...
36
+ modes = rig_control.get_mode_list()
37
+ vfo = rig_control.get_vfo()
27
38
 
28
- print(f"{response=}")
39
+ print(f"{modes=}\n")
40
+ print(f"{vfo=}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.9.22
3
+ Version: 24.9.23
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/mbridak/not1mm
@@ -230,6 +230,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
230
230
 
231
231
  ## Recent Changes
232
232
 
233
+ - [24-9-23] Improved serial interface to rigctld. Send RTTY macros to fldigi when radio modes are RTTY, USB-D, LSB-D, PKTLSB, PKTUSB, DIGI-U, DIGI-L.
233
234
  - [24-9-22] Merged in changes for CQ WW RTTY
234
235
  - [24-9-15] Fixing an ARRL VHF Cabrillo format error.
235
236
  - [24-9-14] BugFix. Starting lookups fail init if no settings.
@@ -1,12 +1,12 @@
1
1
  not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- not1mm/__main__.py,sha256=pL5h_vkYiwspk-dvc5vHQDDQ6WwNICf1Tw0qsHbon6Q,126675
2
+ not1mm/__main__.py,sha256=V43gwbqBhUAPw8HfjTcYbA61nzejpcQJSIYoXk5BKY0,126943
3
3
  not1mm/bandmap.py,sha256=1b5tXCfGTnpqqn6hPNt7zRA8SmuwSXzSwNHZXhCRt70,31434
4
4
  not1mm/checkwindow.py,sha256=aI-nr8OF90IWV7R_XRdmitvBJ9M85evCs72HoU3Jnvc,10374
5
5
  not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
6
6
  not1mm/logwindow.py,sha256=pwhiwolmGnW01LF4sjlu3ywLsgfxL6KuGuKuYKYmgeY,44403
7
7
  not1mm/lookupservice.py,sha256=jsFg5tsB9cVnahLP-hI3CMwbjlEpMx944O8RLWntAy4,3342
8
- not1mm/radio.py,sha256=eiB04LPMPBeMrBRI021Z7VXth66EOYb0Ujh11T9877c,3362
9
- not1mm/test.py,sha256=u9BnCjgG1VYtrVNguazNZlrpzSFzePfpqKWgsGS_OR8,2046
8
+ not1mm/radio.py,sha256=x2Oz1688uTPrq3YOwUiY3eMc4XUkkAZJpEajCKJEbwM,3479
9
+ not1mm/test.py,sha256=b9Ro2bRdf4HOmiKQsLRk_dTm-CQLvpmnEEZq768v-ro,2299
10
10
  not1mm/vfo.py,sha256=IvmUQYMIPzLJw_BHQGis4J_IEW-vlBtdfxZLXPh7OzI,12335
11
11
  not1mm/voice_keying.py,sha256=sA3gw5_k7kShTg2qhG7HkKDM5M6KheJVRkAc_C7mxDk,3006
12
12
  not1mm/data/JetBrainsMono-ExtraLight.ttf,sha256=g5Hn7BPounWMGDj1a8zZcyKMz03HSqW__pUluRR7Evg,274144
@@ -39,7 +39,7 @@ not1mm/data/radio_green.png,sha256=PXlvRI2x0C8yLVkxRwrZe6tex8k9GtM-1Cj2Vy6KP7o,1
39
39
  not1mm/data/radio_grey.png,sha256=9eOtMHDpQvRYY29D7_vPeacWbwotRXZTMm8EiHE9TW0,1258
40
40
  not1mm/data/radio_red.png,sha256=QvkMk7thd_hCEIyK5xGAG4xVVXivl39nwOfD8USDI20,957
41
41
  not1mm/data/reddot.png,sha256=M33jEMoU8W4rQ4_MVyzzKxDPDte1ypKBch5VnUMNLKE,565
42
- not1mm/data/rttymacros.txt,sha256=7_KwLqj_bv-6boD9OD7c8OY3SCc9diqmCTs5zjMf2LM,443
42
+ not1mm/data/rttymacros.txt,sha256=BRf0JJtHZylTAvpmxHS6hlanHgybZoLyDMqdif9rODY,447
43
43
  not1mm/data/settings.ui,sha256=NyHFUb3ZFEgZ4bYB3O7qlO_0TvZwcc9SFPr7z9nF6kk,40123
44
44
  not1mm/data/splash.png,sha256=85_BQotR1q24uCthrKm4SB_6ZOMwRjR-Jdp1XBHSTyg,5368
45
45
  not1mm/data/ssbmacros.txt,sha256=0Qccj4y0nlK-w5da9a9ti-jILkURtwztoDuL_D0pEJM,470
@@ -94,7 +94,7 @@ not1mm/data/phonetics/yourcall.wav,sha256=4kheHJmCiRDL2kjhlgXQ8_u_eEMgKxiNGu5UBk
94
94
  not1mm/data/phonetics/z.wav,sha256=arafCi7fwmBLdVDI-PRyaL4U-03PIQDhffwY5noJ_2c,51768
95
95
  not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
96
  not1mm/lib/about.py,sha256=sWycfGcruN3SaEe4JmaJ61K6D8Itq0WxpUYT-lEcmYM,416
97
- not1mm/lib/cat_interface.py,sha256=aazvNTSeZAROq3KL8gPx-I95iVez2IiIOSk22qeqVCQ,19502
97
+ not1mm/lib/cat_interface.py,sha256=FfLldMH4FayArOcwoZBQT3vTU2RoiG7dmaT922Z8i2Y,21459
98
98
  not1mm/lib/cwinterface.py,sha256=FrVB-MfK7CYU2QNjAK7ERrruKTL_NkHpBPIFNNaTvp4,3645
99
99
  not1mm/lib/database.py,sha256=nUVG5H2Dy98PGp6Qdr3xU7zM8-8-IiyqRkXZWlWzIe8,44446
100
100
  not1mm/lib/edit_contact.py,sha256=Ki9bGPpqyQQBB1cU8VIBDCal3lbXeQ6qxhzklmhE2_w,353
@@ -114,7 +114,7 @@ not1mm/lib/plugin_common.py,sha256=HbphFFzU1XIIHgsCHOb_tCAnQyqT-nYnxoiz1oZ2_cg,9
114
114
  not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
115
115
  not1mm/lib/settings.py,sha256=MWiKXbasaFbzeHTjfzTaTqbCBrIijudP_-0a5jNmUAA,9265
116
116
  not1mm/lib/super_check_partial.py,sha256=p5l3u2ZOCBtlWgbvskC50FpuoaIpR07tfC6zTdRWbh4,2334
117
- not1mm/lib/version.py,sha256=rzvnS32IOLUxVVYT-FaUV8u8GQ0hORXp9lM6MDH2jeA,48
117
+ not1mm/lib/version.py,sha256=KsnGHengWCv9w4hEEpMncmQfrgUm2Ng8DMA65PR0T5o,48
118
118
  not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
119
119
  not1mm/plugins/10_10_fall_cw.py,sha256=IttjX1yy4nDdACGsiYlPteFG8eVseX_WtoFio6bqHE8,10953
120
120
  not1mm/plugins/10_10_spring_cw.py,sha256=ThCptdM3dX4ywhoy2JRcOEyHSqcJolFaT7O_PYzM1Mg,10958
@@ -156,9 +156,9 @@ not1mm/plugins/ref_cw.py,sha256=aWjHHkqIKutjRUtzh09y5haFfnZK9poRQDWRQMDRxxU,1632
156
156
  not1mm/plugins/stew_perry_topband.py,sha256=CKBQbYl4ETxhXJd2dma4fg_C5pag_s7Nf61SCztZtqE,10668
157
157
  not1mm/plugins/weekly_rtty.py,sha256=DQcy3SY0Zn56EdlYGf3NxrRhTnkNa5IqRQPRQdKDSPs,14255
158
158
  not1mm/plugins/winter_field_day.py,sha256=4rcfRtobwjHO6BNL3WOTHzBmyyeuX79BNGBG8PfjrI8,10238
159
- not1mm-24.9.22.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
160
- not1mm-24.9.22.dist-info/METADATA,sha256=qTy5raAHe86J7JznMAMw_XrkjZacL_mw9DkfvyrdLcs,31273
161
- not1mm-24.9.22.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
162
- not1mm-24.9.22.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
163
- not1mm-24.9.22.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
164
- not1mm-24.9.22.dist-info/RECORD,,
159
+ not1mm-24.9.23.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
160
+ not1mm-24.9.23.dist-info/METADATA,sha256=UNYhVlycDl_2wQtVOiFN_f2Rs0rlyOUNY-WvZaqM58Y,31423
161
+ not1mm-24.9.23.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
162
+ not1mm-24.9.23.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
163
+ not1mm-24.9.23.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
164
+ not1mm-24.9.23.dist-info/RECORD,,