faster-eth-abi 5.2.8__cp312-cp312-win32.whl → 5.2.9__cp312-cp312-win32.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.

Potentially problematic release.


This version of faster-eth-abi might be problematic. Click here for more details.

Binary file
Binary file
Binary file
@@ -1,10 +1,13 @@
1
1
  from typing import (
2
2
  TYPE_CHECKING,
3
3
  Any,
4
- Optional,
5
4
  Tuple,
6
5
  )
7
6
 
7
+ from faster_eth_utils import (
8
+ big_endian_to_int,
9
+ )
10
+
8
11
  from faster_eth_abi.exceptions import (
9
12
  InsufficientDataBytes,
10
13
  )
@@ -20,31 +23,20 @@ if TYPE_CHECKING:
20
23
  HeadTailDecoder,
21
24
  SizedArrayDecoder,
22
25
  TupleDecoder,
23
- UnsignedIntegerDecoder,
24
26
  )
25
27
 
26
28
 
27
- _UINT256_DECODER: Optional["UnsignedIntegerDecoder"] = None
28
-
29
-
30
- def __set_uint256_decoder() -> "UnsignedIntegerDecoder":
31
- # this helper breaks a circular dependency on the non-compiled decoding module
32
- from . import (
33
- decoding,
34
- )
35
-
36
- global _UINT256_DECODER
37
- _UINT256_DECODER = decoding.decode_uint_256
38
-
39
- return _UINT256_DECODER
40
-
41
-
42
29
  def decode_uint_256(stream: ContextFramesBytesIO) -> int:
43
- decoder = _UINT256_DECODER
44
- if decoder is None:
45
- decoder = __set_uint256_decoder()
46
- decoded: int = decoder(stream)
47
- return decoded
30
+ """
31
+ This function is a faster version of decode_uint_256 in decoding.py.
32
+
33
+ It recreates the logic from the UnsignedIntegerDecoder, but we can
34
+ skip a lot because we know the value of many vars.
35
+ """
36
+ # read data from stream
37
+ if len(data := stream.read(32)) == 32:
38
+ return big_endian_to_int(data) # type: ignore [no-any-return]
39
+ raise InsufficientDataBytes(f"Tried to read 32 bytes, only got {len(data)} bytes.")
48
40
 
49
41
 
50
42
  # HeadTailDecoder
Binary file
Binary file
Binary file
@@ -98,14 +98,14 @@ class TupleDecoder(BaseDecoder):
98
98
  def __init__(self, decoders: Tuple[BaseDecoder, ...], **kwargs: Any) -> None:
99
99
  super().__init__(**kwargs)
100
100
 
101
- self.decoders = tuple(
101
+ self.decoders = decoders = tuple(
102
102
  HeadTailDecoder(tail_decoder=d) if getattr(d, "is_dynamic", False) else d
103
103
  for d in decoders
104
104
  )
105
105
 
106
- self.is_dynamic = any(getattr(d, "is_dynamic", False) for d in self.decoders)
106
+ self.is_dynamic = any(getattr(d, "is_dynamic", False) for d in decoders)
107
107
  self.len_of_head = sum(
108
- getattr(decoder, "array_size", 1) for decoder in self.decoders
108
+ getattr(decoder, "array_size", 1) for decoder in decoders
109
109
  )
110
110
 
111
111
  def validate(self) -> None:
@@ -173,9 +173,10 @@ class SingleDecoder(BaseDecoder):
173
173
  def decode(self, stream):
174
174
  raw_data = self.read_data_from_stream(stream)
175
175
  data, padding_bytes = self.split_data_and_padding(raw_data)
176
- if self.decoder_fn is None:
176
+ decoder_fn = self.decoder_fn
177
+ if decoder_fn is None:
177
178
  raise AssertionError("`decoder_fn` is None")
178
- value = self.decoder_fn(data)
179
+ value = decoder_fn(data)
179
180
  self.validate_padding_bytes(value, padding_bytes)
180
181
 
181
182
  return value
@@ -190,16 +191,15 @@ class SingleDecoder(BaseDecoder):
190
191
 
191
192
 
192
193
  class BaseArrayDecoder(BaseDecoder):
193
- item_decoder = None
194
+ item_decoder: BaseDecoder = None
194
195
 
195
196
  def __init__(self, **kwargs: Any) -> None:
196
197
  super().__init__(**kwargs)
197
198
 
198
199
  # Use a head-tail decoder to decode dynamic elements
199
- if self.item_decoder.is_dynamic:
200
- self.item_decoder = HeadTailDecoder(
201
- tail_decoder=self.item_decoder,
202
- )
200
+ item_decoder = self.item_decoder
201
+ if item_decoder.is_dynamic:
202
+ self.item_decoder = HeadTailDecoder(tail_decoder=item_decoder)
203
203
 
204
204
  def validate(self) -> None:
205
205
  super().validate()
@@ -280,21 +280,23 @@ class FixedByteSizeDecoder(SingleDecoder):
280
280
  def validate(self) -> None:
281
281
  super().validate()
282
282
 
283
- if self.value_bit_size is None:
283
+ value_bit_size = self.value_bit_size
284
+ if value_bit_size is None:
284
285
  raise ValueError("`value_bit_size` may not be None")
285
- if self.data_byte_size is None:
286
+ data_byte_size = self.data_byte_size
287
+ if data_byte_size is None:
286
288
  raise ValueError("`data_byte_size` may not be None")
287
289
  if self.decoder_fn is None:
288
290
  raise ValueError("`decoder_fn` may not be None")
289
291
  if self.is_big_endian is None:
290
292
  raise ValueError("`is_big_endian` may not be None")
291
293
 
292
- if self.value_bit_size % 8 != 0:
294
+ if value_bit_size % 8 != 0:
293
295
  raise ValueError(
294
- "Invalid value bit size: {self.value_bit_size}. Must be a multiple of 8"
296
+ f"Invalid value bit size: {value_bit_size}. Must be a multiple of 8"
295
297
  )
296
298
 
297
- if self.value_bit_size > self.data_byte_size * 8:
299
+ if value_bit_size > data_byte_size * 8:
298
300
  raise ValueError("Value byte size exceeds data size")
299
301
 
300
302
  def read_data_from_stream(self, stream: ContextFramesBytesIO) -> bytes:
@@ -322,9 +324,8 @@ class FixedByteSizeDecoder(SingleDecoder):
322
324
  f"Padding bytes were not empty: {padding_bytes!r}"
323
325
  )
324
326
 
325
- def _get_value_byte_size(self):
326
- value_byte_size = self.value_bit_size // 8
327
- return value_byte_size
327
+ def _get_value_byte_size(self) -> int:
328
+ return self.value_bit_size // 8
328
329
 
329
330
 
330
331
  class Fixed32ByteSizeDecoder(FixedByteSizeDecoder):
@@ -336,7 +337,7 @@ class BooleanDecoder(Fixed32ByteSizeDecoder):
336
337
  is_big_endian = True
337
338
 
338
339
  @staticmethod
339
- def decoder_fn(data):
340
+ def decoder_fn(data: bytes) -> bool:
340
341
  if data == b"\x00":
341
342
  return False
342
343
  elif data == b"\x01":
@@ -384,8 +385,9 @@ class SignedIntegerDecoder(Fixed32ByteSizeDecoder):
384
385
 
385
386
  def decoder_fn(self, data):
386
387
  value = big_endian_to_int(data)
387
- if value >= 2 ** (self.value_bit_size - 1):
388
- return value - 2**self.value_bit_size
388
+ value_bit_size = self.value_bit_size
389
+ if value >= 2 ** (value_bit_size - 1):
390
+ return value - 2**value_bit_size
389
391
  else:
390
392
  return value
391
393
 
@@ -424,16 +426,17 @@ class BytesDecoder(Fixed32ByteSizeDecoder):
424
426
 
425
427
 
426
428
  class BaseFixedDecoder(Fixed32ByteSizeDecoder):
427
- frac_places = None
429
+ frac_places: int = None
428
430
  is_big_endian = True
429
431
 
430
432
  def validate(self) -> None:
431
433
  super().validate()
432
434
 
433
- if self.frac_places is None:
435
+ frac_places = self.frac_places
436
+ if frac_places is None:
434
437
  raise ValueError("must specify `frac_places`")
435
438
 
436
- if self.frac_places <= 0 or self.frac_places > 80:
439
+ if frac_places <= 0 or frac_places > 80:
437
440
  raise ValueError("`frac_places` must be in range (0, 80]")
438
441
 
439
442
 
@@ -456,8 +459,9 @@ class UnsignedFixedDecoder(BaseFixedDecoder):
456
459
  class SignedFixedDecoder(BaseFixedDecoder):
457
460
  def decoder_fn(self, data):
458
461
  value = big_endian_to_int(data)
459
- if value >= 2 ** (self.value_bit_size - 1):
460
- signed_value = value - 2**self.value_bit_size
462
+ value_bit_size = self.value_bit_size
463
+ if value >= 2 ** (value_bit_size - 1):
464
+ signed_value = value - 2**value_bit_size
461
465
  else:
462
466
  signed_value = value
463
467
 
@@ -668,5 +668,3 @@ class DynamicArrayEncoder(BaseArrayEncoder):
668
668
 
669
669
  def encode(self, value: Sequence[Any]) -> bytes:
670
670
  return encode_elements_dynamic(self.item_encoder, value)
671
-
672
- __call__ = encode
Binary file
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: faster_eth_abi
3
- Version: 5.2.8
3
+ Version: 5.2.9
4
4
  Summary: A faster fork of eth_abi: Python utilities for working with Ethereum ABI definitions, especially encoding and decoding. Implemented in C.
5
5
  Home-page: https://github.com/BobTheBuidler/faster-eth-abi
6
6
  Author: The Ethereum Foundation
@@ -0,0 +1,44 @@
1
+ 76f9a3652d4d2667c55c__mypyc.cp312-win32.pyd,sha256=ueVfYNVuVx7SwMOuVuQ7dNhA0D6arBNh4vvK-ntEBWU,141824
2
+ faster_eth_abi/__init__.py,sha256=JpTfPTiusUGMmX8sEsGAxvILxFbvhh3MEyfiKOd5o9g,217
3
+ faster_eth_abi/_codec.cp312-win32.pyd,sha256=vbz9Y7A_em61ZXGl31z-kWorbrZkZQO3M0-LvTyvYis,9216
4
+ faster_eth_abi/_codec.py,sha256=fLRvqvrD8F38U4m1wZztvx-7JJbZaPikwXS5u9BzY14,2509
5
+ faster_eth_abi/_decoding.cp312-win32.pyd,sha256=R7w0qumxw9RunbZ1PqSWl_acq_r-etY3kvSYZTe3a1Y,9216
6
+ faster_eth_abi/_decoding.py,sha256=GeXe2OaAmojlnGbw3CmSzKK9k5g0QLLn_Qesz7y98X0,3208
7
+ faster_eth_abi/_encoding.cp312-win32.pyd,sha256=r8VsX80Efa0JOnMjS0XocUA8GdJgjhjBWzJP_xVtZlg,9216
8
+ faster_eth_abi/_encoding.py,sha256=157A_MltVLCEwBmD7SB8UaKXkAOtIKC5MVupk6dk_yA,3217
9
+ faster_eth_abi/abi.cp312-win32.pyd,sha256=wPD4fytip2j54Ssn_90l-dU3hy6b8iDevqz_y_syxCg,9216
10
+ faster_eth_abi/abi.py,sha256=-t9OVBSCxy6SuWpCu3cxHrCqkx8_svPIRb0MSFXEl5Q,383
11
+ faster_eth_abi/base.py,sha256=y4IXpQJWGfUISl3xjCO420Grxido3tE2ebPV2rK-DvM,1229
12
+ faster_eth_abi/codec.py,sha256=e1uO8BJrXRn0Ih70eUa5qipD2wcg2aZSR4fyVuGpFoY,4580
13
+ faster_eth_abi/constants.cp312-win32.pyd,sha256=9JIPZlhitgJE7hjdWbVnBp2DAw_FyLiBAvoynccZSc8,9216
14
+ faster_eth_abi/constants.py,sha256=q3FGynS-Eb78cnrL6mBoAvTDz16PF3tW2OylTMd6ajs,114
15
+ faster_eth_abi/decoding.py,sha256=LUyG3EO6K4O6u1020FVMNEB80TwW2aHy6gInHoW5qy8,17632
16
+ faster_eth_abi/encoding.py,sha256=P1svhYylcZa55cQ9LPj6jV8iJVLSL_c5SIZT1Umol58,19679
17
+ faster_eth_abi/exceptions.py,sha256=KzNYRc9t0CvlkveozWvLeo1WC_GarcBkwzV67aY_5yI,3067
18
+ faster_eth_abi/from_type_str.cp312-win32.pyd,sha256=SlBiUD7o19yxu8BY4SOkg8p8pt4-nDZMSTSWGkJqkEE,9216
19
+ faster_eth_abi/from_type_str.py,sha256=WLRP3OIyrJORgloX-7V0x2KdrZj0kLay-J9I8f-H36s,4446
20
+ faster_eth_abi/grammar.py,sha256=lhEmp3ZwMTzm1-jJiMUVD4zrBgU4MEZCRiND4WxfOes,13839
21
+ faster_eth_abi/io.py,sha256=E_QX7aYAjGYnkNAZmJMmSmx1lqvl_FDNmMFruTi9UX4,3831
22
+ faster_eth_abi/packed.cp312-win32.pyd,sha256=AJaLBNxl6Q0RVjrGj4bjBlj5sEnDNi429frkc7JkUNw,9216
23
+ faster_eth_abi/packed.py,sha256=RZ2chvsx9_AL9OxY1ixHTsaUJHaR_tmrNdViOIp-xSg,316
24
+ faster_eth_abi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ faster_eth_abi/registry.py,sha256=gU5-k_1eYUjs7-NAKoH9nncCJ36tZZHM5ZXvwmXt0cw,21192
26
+ faster_eth_abi/tools/__init__.cp312-win32.pyd,sha256=WJztfmuPySeDxzKaBXbnReVuu3rKTHvbyAMZJL0MQWo,9216
27
+ faster_eth_abi/tools/__init__.py,sha256=jxyQnb34ldRjCTYi3Ajb5h5QlFQ6ODfKQNhOCVwR7Ao,54
28
+ faster_eth_abi/tools/_strategies.cp312-win32.pyd,sha256=a9i-sNYn0-SIrd0Yfaws0_kSGxHXneGdxm2c8XM_1jc,9216
29
+ faster_eth_abi/tools/_strategies.py,sha256=HCFdQFLa84SMf7Deui2-szTH34hxTfc0Rog_kmpTg_w,6197
30
+ faster_eth_abi/utils/__init__.cp312-win32.pyd,sha256=zQeiMsqdC_Ta14sTnwJhYWY1_78jpmAzu307D_NEJ2c,9216
31
+ faster_eth_abi/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ faster_eth_abi/utils/numeric.cp312-win32.pyd,sha256=Go_fAjaOKxd3Sjzy0wb30HmLHr9bB5fx8C_7o41bXtk,9216
33
+ faster_eth_abi/utils/numeric.py,sha256=hNGble1NA99_5hrAOnH0ZakCuHc6PFMC1p0olmpo_vM,2232
34
+ faster_eth_abi/utils/padding.cp312-win32.pyd,sha256=XADVomvWM8MKFfH30HdkmLx23iiDOeOimnKyy0K6Ees,9216
35
+ faster_eth_abi/utils/padding.py,sha256=k6dkOiQ3k0OhQUZ6blCiL1VOQVYGyynucafbySjcFfY,515
36
+ faster_eth_abi/utils/string.cp312-win32.pyd,sha256=TKuhU_OlwgG1Gbr97wQGNHj9qO1fLtQKTdS6ZbqSOLo,9216
37
+ faster_eth_abi/utils/string.py,sha256=wYcvWof4kuitrGGSe_NOduQaxE4HHYmpraCPXKcZxMs,455
38
+ faster_eth_abi/utils/validation.cp312-win32.pyd,sha256=01vor8ptTweDQkbOiPEY8XrfM08JAYKdYtWDB2V1SC8,9216
39
+ faster_eth_abi/utils/validation.py,sha256=9veO7wyQsmcFgeaGrsKdSifjV1gaXfTDDKAt1EbKHYY,539
40
+ faster_eth_abi-5.2.9.dist-info/licenses/LICENSE,sha256=Q1lDDWXR057JL2Y7HTAwclCF32_LCloN4sGUkXO1YeI,1127
41
+ faster_eth_abi-5.2.9.dist-info/METADATA,sha256=KDOT00QI4vuhhmIEyht-d1iYsmyvKLtq9xwMBQqxhzg,5498
42
+ faster_eth_abi-5.2.9.dist-info/WHEEL,sha256=LwxTQZ0gyDP_uaeNCLm-ZIktY9hv6x0e22Q-hgFd-po,97
43
+ faster_eth_abi-5.2.9.dist-info/top_level.txt,sha256=CO2FQwf61aFzjYze7Wywa5KQdJ6bbLkzDoGEjDF2g9o,43
44
+ faster_eth_abi-5.2.9.dist-info/RECORD,,
@@ -1,44 +0,0 @@
1
- 76f9a3652d4d2667c55c__mypyc.cp312-win32.pyd,sha256=Xxhsx7QljUKyv79QMkvJIKhflyJVooVeLzfGoCNfO-U,141824
2
- faster_eth_abi/__init__.py,sha256=JpTfPTiusUGMmX8sEsGAxvILxFbvhh3MEyfiKOd5o9g,217
3
- faster_eth_abi/_codec.cp312-win32.pyd,sha256=5IRNgZkWdpQ2PbFUSJNSNLqTfLGN-xrnMqwp0pily7k,9216
4
- faster_eth_abi/_codec.py,sha256=fLRvqvrD8F38U4m1wZztvx-7JJbZaPikwXS5u9BzY14,2509
5
- faster_eth_abi/_decoding.cp312-win32.pyd,sha256=7pp8XwwRZJFKcA6rlxT2b4xNxZLf-_4hGce_e0mGxq4,9216
6
- faster_eth_abi/_decoding.py,sha256=uhteNEJzs873MqIOxc68XuFnKOhsUH0CJcQFLbL0Q18,3264
7
- faster_eth_abi/_encoding.cp312-win32.pyd,sha256=Rj4dJGMpiM3J_P3NNhB-ykeL4nvVM8D5UgnC-P2p8u8,9216
8
- faster_eth_abi/_encoding.py,sha256=157A_MltVLCEwBmD7SB8UaKXkAOtIKC5MVupk6dk_yA,3217
9
- faster_eth_abi/abi.cp312-win32.pyd,sha256=n1aGjG91zSXphsWBARZB5bkPAcv6diWaLVVQPc2Xnqw,9216
10
- faster_eth_abi/abi.py,sha256=-t9OVBSCxy6SuWpCu3cxHrCqkx8_svPIRb0MSFXEl5Q,383
11
- faster_eth_abi/base.py,sha256=y4IXpQJWGfUISl3xjCO420Grxido3tE2ebPV2rK-DvM,1229
12
- faster_eth_abi/codec.py,sha256=e1uO8BJrXRn0Ih70eUa5qipD2wcg2aZSR4fyVuGpFoY,4580
13
- faster_eth_abi/constants.cp312-win32.pyd,sha256=koVO-lOFWZRq89SMZnt2NgSkT0r6Xxlbi2LmqasHuQ8,9216
14
- faster_eth_abi/constants.py,sha256=q3FGynS-Eb78cnrL6mBoAvTDz16PF3tW2OylTMd6ajs,114
15
- faster_eth_abi/decoding.py,sha256=-2P8kAaHM1HFYS5b8QKstStO6PkWlugEaDUoujX1Uf0,17447
16
- faster_eth_abi/encoding.py,sha256=bKw8wCqpfv8U83I2xsmiI37wn2lQUIhn4bn1xS_l1Zc,19704
17
- faster_eth_abi/exceptions.py,sha256=KzNYRc9t0CvlkveozWvLeo1WC_GarcBkwzV67aY_5yI,3067
18
- faster_eth_abi/from_type_str.cp312-win32.pyd,sha256=ug3T-S2CEHoxDax-7iABKvKInNQYhAouEVKLTC148Kk,9216
19
- faster_eth_abi/from_type_str.py,sha256=WLRP3OIyrJORgloX-7V0x2KdrZj0kLay-J9I8f-H36s,4446
20
- faster_eth_abi/grammar.py,sha256=lhEmp3ZwMTzm1-jJiMUVD4zrBgU4MEZCRiND4WxfOes,13839
21
- faster_eth_abi/io.py,sha256=E_QX7aYAjGYnkNAZmJMmSmx1lqvl_FDNmMFruTi9UX4,3831
22
- faster_eth_abi/packed.cp312-win32.pyd,sha256=croZnY0etq_cXRcfbFskwxNr8e5iSl2co6adIGC1Ui8,9216
23
- faster_eth_abi/packed.py,sha256=RZ2chvsx9_AL9OxY1ixHTsaUJHaR_tmrNdViOIp-xSg,316
24
- faster_eth_abi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- faster_eth_abi/registry.py,sha256=gU5-k_1eYUjs7-NAKoH9nncCJ36tZZHM5ZXvwmXt0cw,21192
26
- faster_eth_abi/tools/__init__.cp312-win32.pyd,sha256=4q8FQ8ylczBj1D2Noh3CmDp1LlP-7iv-oQR-JHeE3PM,9216
27
- faster_eth_abi/tools/__init__.py,sha256=jxyQnb34ldRjCTYi3Ajb5h5QlFQ6ODfKQNhOCVwR7Ao,54
28
- faster_eth_abi/tools/_strategies.cp312-win32.pyd,sha256=MeOgxGq6qui7FgeV8uZgS2Db_jOt52x1VwSw3Z9Rtpk,9216
29
- faster_eth_abi/tools/_strategies.py,sha256=HCFdQFLa84SMf7Deui2-szTH34hxTfc0Rog_kmpTg_w,6197
30
- faster_eth_abi/utils/__init__.cp312-win32.pyd,sha256=FrbtjgXbUDjki9DVZdJAwfy5fyZa_ivSivHRl3oxAfA,9216
31
- faster_eth_abi/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- faster_eth_abi/utils/numeric.cp312-win32.pyd,sha256=XimFOXaljSTEZvWXY_J2FhVCo5v9olcOHbBQuVXOtjI,9216
33
- faster_eth_abi/utils/numeric.py,sha256=hNGble1NA99_5hrAOnH0ZakCuHc6PFMC1p0olmpo_vM,2232
34
- faster_eth_abi/utils/padding.cp312-win32.pyd,sha256=UUsB3BW2cGDeBmFOX3UKux4w6zuvq2ij-22zb5fdnbw,9216
35
- faster_eth_abi/utils/padding.py,sha256=k6dkOiQ3k0OhQUZ6blCiL1VOQVYGyynucafbySjcFfY,515
36
- faster_eth_abi/utils/string.cp312-win32.pyd,sha256=Lh_K1WDZeooXVis54IoKSo-4f1lMmgkqnVF_abPzJY8,9216
37
- faster_eth_abi/utils/string.py,sha256=wYcvWof4kuitrGGSe_NOduQaxE4HHYmpraCPXKcZxMs,455
38
- faster_eth_abi/utils/validation.cp312-win32.pyd,sha256=4MTQ80A936KFecNsDhqK1-s5HJeiKPP2iAf_G3JrJgM,9216
39
- faster_eth_abi/utils/validation.py,sha256=9veO7wyQsmcFgeaGrsKdSifjV1gaXfTDDKAt1EbKHYY,539
40
- faster_eth_abi-5.2.8.dist-info/licenses/LICENSE,sha256=Q1lDDWXR057JL2Y7HTAwclCF32_LCloN4sGUkXO1YeI,1127
41
- faster_eth_abi-5.2.8.dist-info/METADATA,sha256=agDHiYtBw2nohnY27Giw4FZyWqckmorKNR7uWalGkFg,5498
42
- faster_eth_abi-5.2.8.dist-info/WHEEL,sha256=LwxTQZ0gyDP_uaeNCLm-ZIktY9hv6x0e22Q-hgFd-po,97
43
- faster_eth_abi-5.2.8.dist-info/top_level.txt,sha256=CO2FQwf61aFzjYze7Wywa5KQdJ6bbLkzDoGEjDF2g9o,43
44
- faster_eth_abi-5.2.8.dist-info/RECORD,,