not1mm 25.2.6__py3-none-any.whl → 25.2.12__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 +0 -6
- not1mm/data/new_contest.ui +5 -0
- not1mm/lib/settings.py +0 -2
- not1mm/lib/version.py +1 -1
- not1mm/plugins/randomgram.py +262 -0
- not1mm/voice_keying.py +1 -1
- {not1mm-25.2.6.dist-info → not1mm-25.2.12.dist-info}/METADATA +5 -3
- {not1mm-25.2.6.dist-info → not1mm-25.2.12.dist-info}/RECORD +12 -11
- {not1mm-25.2.6.dist-info → not1mm-25.2.12.dist-info}/LICENSE +0 -0
- {not1mm-25.2.6.dist-info → not1mm-25.2.12.dist-info}/WHEEL +0 -0
- {not1mm-25.2.6.dist-info → not1mm-25.2.12.dist-info}/entry_points.txt +0 -0
- {not1mm-25.2.6.dist-info → not1mm-25.2.12.dist-info}/top_level.txt +0 -0
not1mm/__main__.py
CHANGED
@@ -27,12 +27,6 @@ from shutil import copyfile
|
|
27
27
|
|
28
28
|
import notctyparser
|
29
29
|
|
30
|
-
try:
|
31
|
-
import sounddevice as sd
|
32
|
-
except OSError as exception:
|
33
|
-
print(exception)
|
34
|
-
print("portaudio is not installed")
|
35
|
-
sd = None
|
36
30
|
from PyQt6 import QtCore, QtGui, QtWidgets, uic, QtNetwork
|
37
31
|
from PyQt6.QtCore import QDir, Qt, QThread, QSettings, QCoreApplication
|
38
32
|
from PyQt6.QtGui import QFontDatabase, QColorConstants, QPalette, QColor, QPixmap
|
not1mm/data/new_contest.ui
CHANGED
not1mm/lib/settings.py
CHANGED
not1mm/lib/version.py
CHANGED
@@ -0,0 +1,262 @@
|
|
1
|
+
"""RandomGram plugin"""
|
2
|
+
|
3
|
+
# pylint: disable=invalid-name, unused-argument, unused-variable, c-extension-no-member, unused-import
|
4
|
+
|
5
|
+
import logging
|
6
|
+
import os
|
7
|
+
|
8
|
+
from PyQt6 import QtWidgets
|
9
|
+
|
10
|
+
from not1mm.lib.plugin_common import gen_adif
|
11
|
+
from not1mm.lib.version import __version__
|
12
|
+
|
13
|
+
logger = logging.getLogger(__name__)
|
14
|
+
EXCHANGE_HINT = ""
|
15
|
+
name = "RandomGram"
|
16
|
+
cabrillo_name = "RANDOMGRAM"
|
17
|
+
mode = "CW" # CW SSB BOTH RTTY
|
18
|
+
columns = [
|
19
|
+
"YYYY-MM-DD HH:MM:SS",
|
20
|
+
"Call",
|
21
|
+
"Freq",
|
22
|
+
"Snt",
|
23
|
+
"Rcv",
|
24
|
+
"SentNr",
|
25
|
+
"RcvNr",
|
26
|
+
]
|
27
|
+
|
28
|
+
# 1 once per contest, 2 work each band, 3 each band/mode, 4 no dupe checking
|
29
|
+
dupe_type = 4
|
30
|
+
|
31
|
+
rgGroupsPath = os.path.join(os.path.expanduser("~"), "rg.txt")
|
32
|
+
try:
|
33
|
+
with open(rgGroupsPath, "r") as f:
|
34
|
+
rgGroups = f.readlines()
|
35
|
+
except:
|
36
|
+
rgGroups = []
|
37
|
+
|
38
|
+
def init_contest(self):
|
39
|
+
"""setup plugin"""
|
40
|
+
set_tab_next(self)
|
41
|
+
set_tab_prev(self)
|
42
|
+
interface(self)
|
43
|
+
self.next_field = self.other_2
|
44
|
+
|
45
|
+
|
46
|
+
def interface(self):
|
47
|
+
"""Setup user interface"""
|
48
|
+
self.field1.show()
|
49
|
+
self.field2.show()
|
50
|
+
self.field3.show()
|
51
|
+
self.field4.show()
|
52
|
+
self.snt_label.setText("SNT")
|
53
|
+
self.field1.setAccessibleName("RST Sent")
|
54
|
+
self.other_label.setText("SentRG")
|
55
|
+
self.field3.setAccessibleName("Sent RandomGram")
|
56
|
+
self.exch_label.setText("RcvRG")
|
57
|
+
self.field4.setAccessibleName("Received RandomGram")
|
58
|
+
|
59
|
+
|
60
|
+
def reset_label(self):
|
61
|
+
"""reset label after field cleared"""
|
62
|
+
|
63
|
+
|
64
|
+
def set_tab_next(self):
|
65
|
+
"""Set TAB Advances"""
|
66
|
+
self.tab_next = {
|
67
|
+
self.callsign: self.sent,
|
68
|
+
self.sent: self.receive,
|
69
|
+
self.receive: self.other_1,
|
70
|
+
self.other_1: self.other_2,
|
71
|
+
self.other_2: self.callsign,
|
72
|
+
}
|
73
|
+
|
74
|
+
|
75
|
+
def set_tab_prev(self):
|
76
|
+
"""Set TAB Advances"""
|
77
|
+
self.tab_prev = {
|
78
|
+
self.callsign: self.other_2,
|
79
|
+
self.sent: self.callsign,
|
80
|
+
self.receive: self.sent,
|
81
|
+
self.other_1: self.receive,
|
82
|
+
self.other_2: self.other_1,
|
83
|
+
}
|
84
|
+
|
85
|
+
|
86
|
+
def set_contact_vars(self):
|
87
|
+
"""Contest Specific"""
|
88
|
+
self.contact["SNT"] = self.sent.text()
|
89
|
+
self.contact["RCV"] = self.receive.text()
|
90
|
+
self.contact["Comment"] = self.other_2.text()
|
91
|
+
self.contact["SentNr"] = self.other_1.text()
|
92
|
+
self.contact["NR"] = self.other_2.text()
|
93
|
+
|
94
|
+
|
95
|
+
def predupe(self):
|
96
|
+
"""called after callsign entered"""
|
97
|
+
|
98
|
+
|
99
|
+
def prefill(self):
|
100
|
+
"""Fill SentNR"""
|
101
|
+
qso_count = show_qso(self)
|
102
|
+
if len(rgGroups) <= qso_count:
|
103
|
+
return
|
104
|
+
|
105
|
+
nextRG = rgGroups[qso_count]
|
106
|
+
if len(nextRG) > 0:
|
107
|
+
self.other_1.setText(nextRG)
|
108
|
+
|
109
|
+
|
110
|
+
def points(self):
|
111
|
+
"""Calc point"""
|
112
|
+
return 2
|
113
|
+
|
114
|
+
|
115
|
+
def show_mults(self):
|
116
|
+
"""Return display string for mults"""
|
117
|
+
|
118
|
+
|
119
|
+
def show_qso(self):
|
120
|
+
"""Return qso count"""
|
121
|
+
result = self.database.fetch_qso_count()
|
122
|
+
if result:
|
123
|
+
return int(result.get("qsos", 0))
|
124
|
+
return 0
|
125
|
+
|
126
|
+
|
127
|
+
def calc_score(self):
|
128
|
+
"""Return calculated score"""
|
129
|
+
result = self.database.fetch_points()
|
130
|
+
|
131
|
+
|
132
|
+
def adif(self):
|
133
|
+
"""Call the generate ADIF function"""
|
134
|
+
gen_adif(self, cabrillo_name)
|
135
|
+
|
136
|
+
|
137
|
+
def cabrillo(self, file_encoding):
|
138
|
+
"""Generates Cabrillo file. Maybe."""
|
139
|
+
|
140
|
+
|
141
|
+
def recalculate_mults(self):
|
142
|
+
"""Recalculates multipliers after change in logged qso."""
|
143
|
+
|
144
|
+
|
145
|
+
def process_esm(self, new_focused_widget=None, with_enter=False):
|
146
|
+
"""ESM State Machine"""
|
147
|
+
|
148
|
+
# self.pref["run_state"]
|
149
|
+
|
150
|
+
# -----===== Assigned F-Keys =====-----
|
151
|
+
# self.esm_dict["CQ"]
|
152
|
+
# self.esm_dict["EXCH"]
|
153
|
+
# self.esm_dict["QRZ"]
|
154
|
+
# self.esm_dict["AGN"]
|
155
|
+
# self.esm_dict["HISCALL"]
|
156
|
+
# self.esm_dict["MYCALL"]
|
157
|
+
# self.esm_dict["QSOB4"]
|
158
|
+
|
159
|
+
# ----==== text fields ====----
|
160
|
+
# self.callsign
|
161
|
+
# self.sent
|
162
|
+
# self.receive
|
163
|
+
# self.other_1
|
164
|
+
# self.other_2
|
165
|
+
|
166
|
+
if new_focused_widget is not None:
|
167
|
+
self.current_widget = self.inputs_dict.get(new_focused_widget)
|
168
|
+
|
169
|
+
# print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
|
170
|
+
|
171
|
+
for a_button in [
|
172
|
+
self.F1,
|
173
|
+
self.F2,
|
174
|
+
self.F3,
|
175
|
+
self.F4,
|
176
|
+
self.F5,
|
177
|
+
self.F6,
|
178
|
+
self.F7,
|
179
|
+
self.F8,
|
180
|
+
self.F9,
|
181
|
+
self.F10,
|
182
|
+
self.F11,
|
183
|
+
self.F12,
|
184
|
+
]:
|
185
|
+
self.restore_button_color(a_button)
|
186
|
+
|
187
|
+
buttons_to_send = []
|
188
|
+
|
189
|
+
if self.pref.get("run_state"):
|
190
|
+
if self.current_widget == "callsign":
|
191
|
+
if len(self.callsign.text()) < 3:
|
192
|
+
self.make_button_green(self.esm_dict["CQ"])
|
193
|
+
buttons_to_send.append(self.esm_dict["CQ"])
|
194
|
+
elif len(self.callsign.text()) > 2:
|
195
|
+
self.make_button_green(self.esm_dict["HISCALL"])
|
196
|
+
self.make_button_green(self.esm_dict["EXCH"])
|
197
|
+
buttons_to_send.append(self.esm_dict["HISCALL"])
|
198
|
+
buttons_to_send.append(self.esm_dict["EXCH"])
|
199
|
+
|
200
|
+
# elif self.current_widget in ["other_1", "other_2"]:
|
201
|
+
# if self.other_2.text() == "" and self.other_1.text() == "":
|
202
|
+
# self.make_button_green(self.esm_dict["AGN"])
|
203
|
+
# buttons_to_send.append(self.esm_dict["AGN"])
|
204
|
+
# else:
|
205
|
+
# self.make_button_green(self.esm_dict["QRZ"])
|
206
|
+
# buttons_to_send.append(self.esm_dict["QRZ"])
|
207
|
+
# buttons_to_send.append("LOGIT")
|
208
|
+
|
209
|
+
elif self.current_widget in ["other_1", "other_2"]:
|
210
|
+
buttons_to_send.append("LOGIT")
|
211
|
+
|
212
|
+
if with_enter is True and bool(len(buttons_to_send)):
|
213
|
+
for button in buttons_to_send:
|
214
|
+
if button:
|
215
|
+
if button == "LOGIT":
|
216
|
+
self.save_contact()
|
217
|
+
continue
|
218
|
+
self.process_function_key(button)
|
219
|
+
else:
|
220
|
+
if self.current_widget == "callsign":
|
221
|
+
if len(self.callsign.text()) > 2:
|
222
|
+
self.make_button_green(self.esm_dict["MYCALL"])
|
223
|
+
buttons_to_send.append(self.esm_dict["MYCALL"])
|
224
|
+
|
225
|
+
# elif self.current_widget in ["other_1", "other_2"]:
|
226
|
+
# if self.other_2.text() == "" and self.other_1.text() == "":
|
227
|
+
# self.make_button_green(self.esm_dict["AGN"])
|
228
|
+
# buttons_to_send.append(self.esm_dict["AGN"])
|
229
|
+
# else:
|
230
|
+
# self.make_button_green(self.esm_dict["EXCH"])
|
231
|
+
# buttons_to_send.append(self.esm_dict["EXCH"])
|
232
|
+
# buttons_to_send.append("LOGIT")
|
233
|
+
|
234
|
+
elif self.current_widget in ["other_1", "other_2"]:
|
235
|
+
buttons_to_send.append("LOGIT")
|
236
|
+
|
237
|
+
if with_enter is True and bool(len(buttons_to_send)):
|
238
|
+
for button in buttons_to_send:
|
239
|
+
if button:
|
240
|
+
if button == "LOGIT":
|
241
|
+
self.save_contact()
|
242
|
+
continue
|
243
|
+
self.process_function_key(button)
|
244
|
+
|
245
|
+
|
246
|
+
def populate_history_info_line(self):
|
247
|
+
result = self.database.fetch_call_history(self.callsign.text())
|
248
|
+
if result:
|
249
|
+
self.history_info.setText(
|
250
|
+
f"{result.get('Call', '')}, {result.get('Name', '')}, {result.get('UserText','...')}"
|
251
|
+
)
|
252
|
+
else:
|
253
|
+
self.history_info.setText("")
|
254
|
+
|
255
|
+
|
256
|
+
def check_call_history(self):
|
257
|
+
""""""
|
258
|
+
result = self.database.fetch_call_history(self.callsign.text())
|
259
|
+
if result:
|
260
|
+
self.history_info.setText(f"{result.get('UserText','')}")
|
261
|
+
if self.other_1.text() == "":
|
262
|
+
self.other_1.setText(f"{result.get('Name', '')}")
|
not1mm/voice_keying.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: not1mm
|
3
|
-
Version: 25.2.
|
3
|
+
Version: 25.2.12
|
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
|
@@ -228,6 +228,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
228
228
|
- NAQP CW, RTTY, SSB
|
229
229
|
- Phone Weekly Test
|
230
230
|
- RAEM
|
231
|
+
- RandomGram
|
231
232
|
- RAC Canada Day
|
232
233
|
- REF CW, SSB
|
233
234
|
- Stew Perry Topband
|
@@ -236,6 +237,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
236
237
|
|
237
238
|
## Recent Changes
|
238
239
|
|
240
|
+
- [25-2-12] Merged PR from @alduhoo Adding RandomGram event.
|
239
241
|
- [25-2-6] Trimmed out newer tags from UI files, 'cause stuff be old sometimes.
|
240
242
|
|
241
243
|
See [CHANGELOG.md](CHANGELOG.md) for prior changes.
|
@@ -686,7 +688,7 @@ files in your own voice.
|
|
686
688
|
Aside from the `[filename]` wav files, there are also NATO phonetic wav files
|
687
689
|
for each letter and number. So if your macro key holds
|
688
690
|
`{HISCALL} {SNT} {SENTNR}` and you have entered K5TUX in callsign field during
|
689
|
-
CQ WW SSB while in CQ Zone 3. You'll here Kilo 5 Tango Uniform X-ray, 5 9
|
691
|
+
CQ WW SSB while in CQ Zone 3. You'll here Kilo 5 Tango Uniform X-ray, 5 9, 3.
|
690
692
|
Hopefully not in an idiots voice.
|
691
693
|
|
692
694
|
## cty.dat and QRZ lookups for distance and bearing
|
@@ -694,7 +696,7 @@ Hopefully not in an idiots voice.
|
|
694
696
|
When a callsign is entered, a look up is first done in a cty.dat file to
|
695
697
|
determin the country of origin, geographic center, cq zone and ITU region.
|
696
698
|
Great circle calculations are done to determin the heading and distance from
|
697
|
-
your gridsquare to the
|
699
|
+
your gridsquare to the geographic center. This information then displayed at the
|
698
700
|
bottom left.
|
699
701
|
|
700
702
|

|
@@ -1,5 +1,5 @@
|
|
1
1
|
not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
not1mm/__main__.py,sha256=
|
2
|
+
not1mm/__main__.py,sha256=fRbyVUHtGYgE9LSIMnJc6e_zQgjnHhzEvu914ZJrp50,147086
|
3
3
|
not1mm/bandmap.py,sha256=vaOeqv_gW0-K0P3xA9JYcuiFILiKw601tjHQCwuoV-s,31260
|
4
4
|
not1mm/checkwindow.py,sha256=VFAcKYTcoWhmIf91chwY6tyao9FQMWPiUkgDDkkWaog,9670
|
5
5
|
not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
|
@@ -10,7 +10,7 @@ not1mm/ratewindow.py,sha256=UVkQt0nSB2COQlJQV6tFtsz4mP7d-Wj9jcjqvZw934Q,9891
|
|
10
10
|
not1mm/rtc_service.py,sha256=axAwnCBuTr-QL0YwXtWvg9tjwhcFsiiEZFgFjOofX6k,2816
|
11
11
|
not1mm/test.py,sha256=RN71m2S9MPIOJMaoCi0wZhwEhpEZunvtosZxaKahRB4,101
|
12
12
|
not1mm/vfo.py,sha256=ggPyWtxMbdSE5RwdK0nDRwDNqOxdpb_pvnzZdbzZVQE,11136
|
13
|
-
not1mm/voice_keying.py,sha256=
|
13
|
+
not1mm/voice_keying.py,sha256=HZImqC5NgnyW2nknNYQ3b7I8-6S_hxpq5G4RcIRXn_k,3005
|
14
14
|
not1mm/data/JetBrainsMono-ExtraLight.ttf,sha256=g5Hn7BPounWMGDj1a8zZcyKMz03HSqW__pUluRR7Evg,274144
|
15
15
|
not1mm/data/MASTER.SCP,sha256=FWKs4Xw3w7FNUt2npA6VzsLME7NAbHRugxaL6TnsvzU,364234
|
16
16
|
not1mm/data/about.ui,sha256=IzbwKQZ_Ea06qGEjJgsa7g8-oYk549f-MEpLtChiLvw,2078
|
@@ -33,7 +33,7 @@ not1mm/data/k6gte.not1mm-64.png,sha256=6ku45Gq1g5ezh04F07osoKRtanb3e4kbx5XdIEh3N
|
|
33
33
|
not1mm/data/logwindow.ui,sha256=f7vULj96tHIQuR1nJMyvPHHcmVgzkhv9D1isyojsnFU,1458
|
34
34
|
not1mm/data/logwindowx.ui,sha256=CwpI-h7cI1yqyldH9quKftsdHL5lTyL9ABOcf80nfqc,1632
|
35
35
|
not1mm/data/main.ui,sha256=CYHxO2GyI9fHvspEW4dZbd4HGnmTnDyWYn9PK8KxU9E,62454
|
36
|
-
not1mm/data/new_contest.ui,sha256=
|
36
|
+
not1mm/data/new_contest.ui,sha256=WVTVQ69vnQNKOIi88KPPLgY5hvW3DdgX-pkQtHdaovY,24170
|
37
37
|
not1mm/data/not1mm.html,sha256=c9-mfjMwDt4f5pySUruz2gREW33CQ2_rCddM2z5CZQo,23273
|
38
38
|
not1mm/data/opon.ui,sha256=QDicqAk2lORG2UWsHa6jHlsGn6uzrrI2R4HSAocpPes,2258
|
39
39
|
not1mm/data/pickcontest.ui,sha256=4hPBszCglObThx_eIWtmK9CEcbr7WBjbB1rKZdI-o3I,1707
|
@@ -114,9 +114,9 @@ not1mm/lib/n1mm.py,sha256=H54mpgJF0GAmKavM-nb5OAq2SJFWYkux4eMWWiSRxJc,6288
|
|
114
114
|
not1mm/lib/new_contest.py,sha256=IznTDMq7yXHB6zBoGUEC_WDYPCPpsSZW4wwMJi16zK0,816
|
115
115
|
not1mm/lib/plugin_common.py,sha256=M5reDYM-v5IjAa2yTROvZTeTDkXYHb3U52W9mc9GxwA,13213
|
116
116
|
not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
|
117
|
-
not1mm/lib/settings.py,sha256=
|
117
|
+
not1mm/lib/settings.py,sha256=PrzLvhKz5_OySdepISdSssJ-yJne2LJODM-wXGc6uHs,14903
|
118
118
|
not1mm/lib/super_check_partial.py,sha256=hwT2NRwobu0PLDyw6ltmbmcAtGBD02CKGFbgGWjXMqA,2334
|
119
|
-
not1mm/lib/version.py,sha256=
|
119
|
+
not1mm/lib/version.py,sha256=jCnz7Kbwsx6niMj5heHVz2mZlvo8M_8r8yCzTmUu-RE,48
|
120
120
|
not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
|
121
121
|
not1mm/plugins/10_10_fall_cw.py,sha256=5QUyGMvGBC-HxcY_z9QbfuxSg3f7p6C9K4qhTxgZE7k,14719
|
122
122
|
not1mm/plugins/10_10_spring_cw.py,sha256=XjYFM263WYyG6nVQzPObW4YC7Z9L93rixSOcVsxPvH4,14722
|
@@ -161,14 +161,15 @@ not1mm/plugins/naqp_rtty.py,sha256=JbjsY9DvVexXdzoPE4k9zSmcYNEMQpB9lrxdRxl_ldc,2
|
|
161
161
|
not1mm/plugins/naqp_ssb.py,sha256=4ZnlvCwvuX53dvqQdsdj6ipE8U7MZBPKPkMgxdDuzF8,17814
|
162
162
|
not1mm/plugins/phone_weekly_test.py,sha256=9Ue-n4VnZoFOc47ubaegT6ky0-38flMnm5VeieAk_UA,16308
|
163
163
|
not1mm/plugins/raem.py,sha256=yF4WK-T8aPDxSI3pxVwYW-Q7eW9n5gvuaslEBoTYcsI,19562
|
164
|
+
not1mm/plugins/randomgram.py,sha256=h68Ul57maCRhZOou7jU4_B1Dfd3d4n5r-Qzex80yJOk,7401
|
164
165
|
not1mm/plugins/ref_cw.py,sha256=R5W2rooxjsKvbLvEm-kr6kFLrzB6T60fVUl2ETei7ws,21319
|
165
166
|
not1mm/plugins/ref_ssb.py,sha256=Z_XmMpYKcI5dZh4TQqvQDcz-cLpMzpDEKBnb5iHeBLQ,21530
|
166
167
|
not1mm/plugins/stew_perry_topband.py,sha256=D1hekmMbx-i4BhaP2uzOK3OzaVVMMdgcN3RmfweNqHo,15341
|
167
168
|
not1mm/plugins/weekly_rtty.py,sha256=rdlIrsxBeuj-RQc5OStVNF7sGCtBK5t6inN5Z7DI4tw,20066
|
168
169
|
not1mm/plugins/winter_field_day.py,sha256=JK4r1vfxs7aADR7ZYbjZniz3f5s3_ipSQDZ0GRNWC7I,15222
|
169
|
-
not1mm-25.2.
|
170
|
-
not1mm-25.2.
|
171
|
-
not1mm-25.2.
|
172
|
-
not1mm-25.2.
|
173
|
-
not1mm-25.2.
|
174
|
-
not1mm-25.2.
|
170
|
+
not1mm-25.2.12.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
171
|
+
not1mm-25.2.12.dist-info/METADATA,sha256=-x_25J1gEO_zw6bSz28iSZl1CcpZ6Z-pZKl1Td4tu6Q,35599
|
172
|
+
not1mm-25.2.12.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
173
|
+
not1mm-25.2.12.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
|
174
|
+
not1mm-25.2.12.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
|
175
|
+
not1mm-25.2.12.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|