Rocksolid Light

Welcome to novaBBS (click a section below)

mail  files  register  newsreader  groups  login

Message-ID:  

Real Users are afraid they'll break the machine -- but they're never afraid to break your face.


devel / comp.lang.python / Re: Python list insert iterators

SubjectAuthor
o Re: Python list insert iteratorsWeatherby,Gerard

1
Re: Python list insert iterators

<mailman.2155.1677933119.20444.python-list@python.org>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=22182&group=comp.lang.python#22182

  copy link   Newsgroups: comp.lang.python
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: gweathe...@uchc.edu (Weatherby,Gerard)
Newsgroups: comp.lang.python
Subject: Re: Python list insert iterators
Date: Sat, 4 Mar 2023 12:31:45 +0000
Lines: 175
Message-ID: <mailman.2155.1677933119.20444.python-list@python.org>
References: <CAASeUHozWBUYVN7c64nemCbfER6T11-V7h6ZxqKYwiq-h=sOiA@mail.gmail.com>
<SJ0PR14MB5864ADAABA6AA95EC21EBB41B9B09@SJ0PR14MB5864.namprd14.prod.outlook.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
X-Trace: news.uni-berlin.de TFlNyBOh211gqPjpuCi7Hg3aXU+2dlnlgCNYs1G5elDQ==
Return-Path: <prvs=04276d375a=gweatherby@uchc.edu>
X-Original-To: python-list@python.org
Delivered-To: python-list@mail.python.org
Authentication-Results: mail.python.org; dkim=pass
reason="2048-bit key; unprotected key"
header.d=uchc.edu header.i=@uchc.edu header.b=PuIK9x5V;
dkim-adsp=pass; dkim-atps=neutral
X-Spam-Status: OK 0.045
X-Spam-Evidence: '*H*': 0.91; '*S*': 0.00; 'def': 0.04; '2023': 0.07;
'arrays': 0.07; 'matching': 0.07; 'al.': 0.09;
'received:namprd14.prod.outlook.com': 0.09; 'url-
ip:151.101.0.223/32': 0.09; 'url-ip:151.101.128.223/32': 0.09;
'url-ip:151.101.192.223/32': 0.09; 'url-ip:151.101.64.223/32':
0.09; 'subject:list': 0.11; 'subject:Python': 0.12; 'import':
0.15; 'url:mailman': 0.15; '***': 0.16; '-&gt;': 0.16; 'append':
0.16; 'assert': 0.16; 'insertion': 0.16; 'int)': 0.16;
'iteration': 0.16; 'languages.': 0.16; 'node': 0.16; 'none:':
0.16; 'todo:': 0.16; 'typing': 0.16; 'url:pypi': 0.16;
'url:urldefense': 0.16; 'url:v3': 0.16; 'python': 0.16; 'instead':
0.17; 'to:addr:python-list': 0.20; 'option': 0.20; 'skip:_ 10':
0.22; 'skip:p 30': 0.23; 'to:name:python-list@python.org': 0.24;
'url:listinfo': 0.25; 'friday,': 0.26; 'opening': 0.26;
'received:edu': 0.26; 'community,': 0.28; 'email
addr:python.org&gt;': 0.28; 'wrong': 0.28; 'before.': 0.31;
'raise': 0.31; 'think': 0.32; 'attach': 0.32; 'python-list': 0.32;
'but': 0.32; 'mailing': 0.33; 'march': 0.33; 'header:In-Reply-
To:1': 0.34; 'item': 0.35; 'yes,': 0.35; 'header:Received:8':
0.36; 'lists': 0.37; 'received:filterd': 0.37;
'received:pps.filterd': 0.37; "skip:' 10": 0.37; "it's": 0.37;
'class': 0.37; 'url-ip:13.107/16': 0.38; 'could': 0.38; 'single':
0.39; 'date:': 0.39; 'list': 0.39; 'use': 0.39; 'beginning': 0.40;
'define': 0.40; 'something': 0.40; 'want': 0.40;
'charset:windows-1252': 0.60; 'email.': 0.61; 'search': 0.61;
'method': 0.61; 'shall': 0.61; 'from:': 0.62; 'to:': 0.62; 'skip:z
10': 0.62; 'url-ip:151.101.0/24': 0.62; 'url-ip:151.101.128/24':
0.62; 'url-ip:151.101.192/24': 0.62; 'url-ip:151.101.64/24': 0.62;
'skip:b 20': 0.63; 'between': 0.63; 'skip:b 10': 0.63; 'pass':
0.64; 'verify': 0.64; 'your': 0.64; 'skip:t 20': 0.66; 'numbers':
0.67; 'url-ip:104.18/16': 0.67; 'right': 0.68; 'items': 0.68;
'received:nam12-bn8-obe.outbound.protection.outlook.com': 0.69;
'url-ip:52.6/16': 0.69; 'url-ip:lookup error': 0.70; 'clicking':
0.76; 'mit': 0.76; 'successful': 0.78; 'links.': 0.81; 'position':
0.81; 'left': 0.83; 'attention:': 0.84; 'elements,': 0.84; 'email
name:&lt;python-list': 0.84; 'eventually': 0.84; 'indexes': 0.84;
'indexes,': 0.84; 'licensed': 0.84; 'skip:& 50': 0.84
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uchc.edu;
h=from : to : subject :
date : message-id : references : in-reply-to : content-type :
mime-version; s=UCHC03162020;
bh=VUR3otifcNURTub8g4BpraH4LAlKhFa4YOtfYU+6aYQ=;
b=PuIK9x5VgkScX7I/VK7nvnWgQDRv/ud3/3gzGYVhaqV7HLgVToB+E9LVtpqBRjRIRvDz
MvG8mRsr+fp2BF0jzXnWwhV/zx/755jbqG/hblq9WL2plRhfJN45N4FHkI+Tyu3uLFpS
5qBXDum3bFrYlBfH81fgsr3YTVzPfbOQ4g/BsNs48kD9ksUiif9nLli+vPKn+1i15RKw
Odrp8jnu3rqv9DHk0nwKCXOhWCgfMbM1EoaX8gD2Vr4Jz8GsC/A1aTwIU6GnfTg/+XfC
vEIpKo7GXnrIkxzcM+DJvC11Dbz1rkg5ZQ8vtAMDpM5V/UTJfsnY+0gWdSrekHuZ99GA YA==
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
b=iU+gFsDQgoYCDnzA69pt8mWFVuBwgpM0Etoh6y/1R60Sfksmwo5V6TWbT1U98nqIFQlrQ+eFtwZYB3NaUBGVfPg4ruGLvp/gpyg8P9TWyKqeyL1hfMZYqet4Zp72jyTiLOWXN99hbuJs/JXFjszdBJMGzOivEgAy4+z3wV0ElocnIlAs0eEzl8cf/P/P+MH/axPHFnmIQQGYf1kwQKSsId6KpTNtxwVX5gsAISJTrj9vxIDaRYsOr8mXJA6EFgyzpEG7xVAvARdhIECgSQ6JO4hPMMwDWCp37Qhf6VQFcaKzUefiDzmVxn1mq6Gu2lPWm9b76zAmOrvbdgASgpKT5g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector9901;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=VUR3otifcNURTub8g4BpraH4LAlKhFa4YOtfYU+6aYQ=;
b=PeoKhjvGxQskYUOxbt4YoTY1L7zgLoXal3wEECYBbvht6pDGPBuLdAN55A+kBIBZYpb8FbFvtYg2dy0ihvGv3aoNGvQgrfhD0EMXwdzl8LjSag6mFEJV8j0RGP3sNDTQkL6dXUmXXFDzzdBhMp+/081NGxiCcUDR+RJ9QPYmmhya2RywqhuA7y+L27HOsZtwt6DudngfiQXib8qb6hS3jaZKbUeZNbXuBnDzF073Y3L8CiikEZXPNQ1GwM3L7vf8QdsefMgm2cf48ptYGtVrCRzW9RMrcKeumWtzH8SuolJLV0LR3HuGtvI3wOJebc8BWVWSFX0sKk+bItKDOGtsAw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=uchc.edu; dmarc=pass action=none header.from=uchc.edu;
dkim=pass header.d=uchc.edu; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uchc.onmicrosoft.com;
s=selector2-uchc-onmicrosoft-com;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=VUR3otifcNURTub8g4BpraH4LAlKhFa4YOtfYU+6aYQ=;
b=htv+b4BE5ZEQrYCMaq++etyK8KYiJpKIRMWexb1wxBSSCrPx2eEmWlPo0NT+JevX0p4DTwgOm40UahQ9m6M6W1S2/oxYAWN8KV8n9quxN+rS6i3oaDOdZ6QZsJHNBxcPbDH8jttwwMAv4xNrcBOPRQ8zAqSk1csxMieN4aLAaYw=
Thread-Topic: Python list insert iterators
Thread-Index: AQHZTfWg3aXaTPdik0iWqR++04PRV67qjTwm
In-Reply-To: <CAASeUHozWBUYVN7c64nemCbfER6T11-V7h6ZxqKYwiq-h=sOiA@mail.gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SJ0PR14MB5864:EE_|SJ0PR14MB5470:EE_
x-ms-office365-filtering-correlation-id: c1646873-ae4f-4d89-3d75-08db1cac6abd
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: T5yIJZnDkNwuUj5pD9nzd+K/cBjbp5N4ueYPDhQgsp3ssgDXirujg/DLWJBAs5svfwu5jwv32lHs1E2BnJxDOpyYim6bDlXF7Q9fqKGlvhl43e4nuXy+suWa8vmp6uWQZ9PIWSFC1duXIRWA39ItDrCSCPTwv6LQiKkEoc/j7WVA55RByVR4fad/YVD50MCAaiwb4QwFLwkw6ybSH3vHC9eZ83wU0Z9vTzvSKYpjp6Rv+pHpR54QSitUR1Mr3FyHeP/V8a9lLev/+o0siJWDyxGyoz6Zv8z118Tze2ki4SX8amxgH/kG2wJpltUjY4scyMkYJYgqaNbnNsW18XBvoKrs1IdnPEpnWFIpyp4NrqVFyScK9LUnAuNzMQ7L9OeRea8jzhH/tAQ5uK6WLIgjnNV1KpZhfn+FAwGgj+PKzcdlsaVsGZ0bWp6eu4OAbV2Xt+XnL8SBrKldapxkWU6+9I9EA4B+P0Emh03IBboBw2Yw6QmdTPQShpalg8m2ExP/SzuoSczbhkGtWBsBEp2eAp0BnXfbhcQs5qzHskALyonDHfZiREFDhFl9Uo3z7GxjH6oc95k1OI9ssbHCWorXj9B9IqvIhamNs2rjLGw7FJwZNiUMJ/cy/9yHK1dPtAD33weDB3pucR1skvBzXZxdefc/ILOJXWrH48dkaCfl7Lo2ky6hPQ/ES/EjjB72gpoY
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
IPV:NLI; SFV:NSPM; H:SJ0PR14MB5864.namprd14.prod.outlook.com; PTR:; CAT:NONE;
SFS:(13230025)(4636009)(376002)(366004)(39860400002)(396003)(346002)(136003)(451199018)(41320700001)(91956017)(3480700007)(478600001)(7696005)(83380400001)(75432002)(33656002)(786003)(316002)(55016003)(166002)(110136005)(38100700002)(38070700005)(122000001)(53546011)(71200400001)(186003)(6506007)(26005)(9686003)(966005)(5660300002)(86362001)(64756008)(66446008)(66476007)(66556008)(66946007)(76116006)(41300700001)(8676002)(52536014)(8936002)(2906002);
DIR:OUT; SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: NAfhgWR9AdZgme2ZUzpU8oihPABi2gyFBflsIEcZCskUDsRTb75iurT+
6djMO2JcJN74ajdsnXMXxxeaSch+f7qWrmlfxoMcjNPyzRpjamsaPvV9
ZE/rtfBB8PJsKvHzP9t8QCjJxfMjpIEVqcBpouT92zmLIaIlpbDzBhM7
V5i5620d1WmEfgnEpmD3+T4zdDXqTllapMe9gPTuHGDymdFAPz7VPjzN
h5kqIsu0na6DmnLx2DLX8CfjbVN2Wg0s6BGV0Ud4vogEDMvjqLfH5ATM
ksTKyZIr9evjRriRp8yphJ17Q+pg/iCvZ+RnlgvgXViXYqED8rQRUSt1
O8DHyntsnSj3QPvyJ0INyYw0FSFhHyh9PGAsMA4s3NHxAnqwcRJsI/zK
TzZNwSekdfA6pCDUNdKMFf7skHMQheWlk70Y7sdYJDJW0XkYYhWqW83B
Ju/3TMW/dslw1GpNl6jX4kQ1esmRzrGj9rC3W9jDQsvkaEYtxUeoR4Wt
lwUNbiuJ1YBpLng7z/hLWKsCxyEuHj5zm3eYbgQCb19xy6J5QUmhT1Ub
tkdPPFJiNpQcp19N7XAu93JcTJQVmcklkTniIeOykb71Q4ZVUoFi+shg
DxvfcsuqR6qdaNL7BeWguKbroH2eKyTEv7YH84QfiBvo8Qy8AZ8PlbY6
F7WRxEvE6S51SPaSwrVtDkV+NhwTtG/90lf2wulxHPL12M97uI4NJgrN
1dUZaxFAxBt/F1gYVusf2JHE0eDJcZ3UzeT2cuhoE11cwTzlK3kyGTk3
YVCwnCJRMagrx74ErJs6wksr8m21ksko3Tdvwdt7fUmjhT8Ac3QnjHt6
cXXgkUhf1fBmCGf9A6f9m7HSr0FBQTM0SsaL0PhZG/7oG59shrXzBVWW
DjG4khEXI9RZ/8fHr2dTmC1EMGC0RHuSMqvapCRZB7f8xFMGbBDPgSzo
7UGX+XdWcmUn6Uw25pChiRFwDtaLKj3T0X+DANqMzpD0cKL1Y91JSPX5
1Z8NdhyujmH3O60pOjQ7WKtaP9n4Y1SK+luRkjHJPFSHJulBFd08NV0H
RZ8Ss8hGjOnIXSgZWDhNcOwYnXBb0CixVXOBYihumLHUxL6tNPzYPQga
haFsEa8BYNsa2qbyj/I2vV9AhCfSaO7D4BGKlBT8qBKdt02ZWS0yYL3G
Xy+xjz8S2fkI/pQSESL9Q/RwJz2yuNsGfuktzDaobQcVjyIYO8ROimGJ
fc2M9WPdvxCTbprm1fkQkfMPHf9hD9u+XUnQDIvNjdNv1Ux2HRhF+0kk
dshqgh+PjLE1KYHNnm++GBu7Zafe8WW/+ZFn/1rihS4ova4rxYWDawgk
AIiNcCebbuDCJ47+Qk3kmocKOeO2SNDbEGuL9XepYuDTTeP0x9DDTbKg
Ci7Qe/ZNfLNqYSChbGf6lGOOFNeeN2RLwYvRzulljDZj0DX0wL2OagoP
kL9rvXqvlOtFkTR1VjpwXmfC/Q6f9wJn4TDUxvgzi/IScgSawmqqt4C0
LZjJ75Ogf/UWMi5OI9C2ubQzzGMkIyJbTJpYzdWq7hvZWFTyTW9z6dK8
MNjrKUI0UozWiwUgppzBpX5C53ELHQ1RIJZr7/7Cx4YfmGrjYSo4Vg
==
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SJ0PR14MB5864.namprd14.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: c1646873-ae4f-4d89-3d75-08db1cac6abd
X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Mar 2023 12:31:45.3640 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 5c82d83a-818a-4c16-b540-ded2344a7ad3
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: jiKs8Mv6y3GkwuUROeZv8eOKexvRczyw+2/MIKx8I0sz59Lp+pZQ6e06ruHDj76oa8jSek4V4vNA70U4gBrDtg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR14MB5470
X-Proofpoint-GUID: SRunCxV1efSlOXXFyLv-DOpvaZl9JMr8
X-Proofpoint-ORIG-GUID: SRunCxV1efSlOXXFyLv-DOpvaZl9JMr8
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.219,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22
definitions=2023-03-04_05,2023-03-03_01,2023-02-09_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
lowpriorityscore=0
malwarescore=0 spamscore=0 priorityscore=1501 mlxscore=0 suspectscore=0
mlxlogscore=999 clxscore=1011 adultscore=0 phishscore=0 bulkscore=0
impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1
engine=8.12.0-2212070000 definitions=main-2303040105
X-Content-Filtered-By: Mailman/MimeDel 2.1.39
X-BeenThere: python-list@python.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: General discussion list for the Python programming language
<python-list.python.org>
List-Unsubscribe: <https://mail.python.org/mailman/options/python-list>,
<mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive: <https://mail.python.org/pipermail/python-list/>
List-Post: <mailto:python-list@python.org>
List-Help: <mailto:python-list-request@python.org?subject=help>
List-Subscribe: <https://mail.python.org/mailman/listinfo/python-list>,
<mailto:python-list-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID: <SJ0PR14MB5864ADAABA6AA95EC21EBB41B9B09@SJ0PR14MB5864.namprd14.prod.outlook.com>
X-Mailman-Original-References: <CAASeUHozWBUYVN7c64nemCbfER6T11-V7h6ZxqKYwiq-h=sOiA@mail.gmail.com>
 by: Weatherby,Gerard - Sat, 4 Mar 2023 12:31 UTC

Python lists are arrays in other languages. You’ll have to roll your own or find something in https://pypi.org, etc. I think this incomplete implementation does the trick.

#
# MIT licensed
# from dataclasses import dataclass
from typing import TypeVar, Generic

T = TypeVar("T")

@dataclass
class ListNode(Generic[T]):
_value: T
_next: "ListNode" = None

# noinspection PyProtectedMember
class ListIter(Generic[T]):

def __init__(self, list_: 'LinkedList', node: ListNode[T]):
self._list = list_
self._node: ListNode[T] = node

def __next__(self) -> T:
if self._node != None:
v = self._node._value
self._node = self._node._next
return v
raise StopIteration()

@property
def value(self) -> T:
return self._node._value

def insert_after(self, value: T) -> None:
self._list._insert_after(self._node, value)

# noinspection PyProtectedMember
class LinkedList(Generic[T]):
"""Singly linked List"""

# noinspection PyTypeChecker
def __init__(self):
self._head: ListNode[T] = None
self._tail: ListNode[T] = None

def __iter__(self):
return ListIter(self, self._head)

def _insert_after(self, node: ListNode[T], value: T):
if node != self._head:
if node != self._tail:
node._next = ListNode(value, node._next)

def append(self, value: T) -> None:
"""Add to end of list"""
if self._head != None:
self._tail._next = (n := ListNode(value))
self._tail = n
return
self._head = self._tail = ListNode(value)

def appendleft(self, value: T) -> None:
"""Add to beginning of list"""
if self._head != None:
single = self._head == self._tail
self._head = (n := ListNode(value, self._head))
if single:
self._tail = n
return
self._head = self._tail = ListNode(value)

def index(self, nth: int) -> ListIter[T]:
"""Return iterator at nth position"""
n = self._head
for i in range(nth):
n = n._next
if n == None:
raise IndexError('list index out of range')
return ListIter(self, n)

#
# TODO: add search for value, deletion of elements, et. al.
#

def unit_test():
"""Test basics"""
linked_list = LinkedList()
for i in range(1, 11):
linked_list.append(i)

# iteration matching equivalent list
for item in zip(linked_list, [i for i in range(1, 11)]):
assert (item[0] == item[1])

# verify index() method
assert linked_list.index(0).value == 1
assert linked_list.index(1).value == 2
try:
print(linked_list.index(11).value)
assert False
except IndexError:
pass
# test append left
linked_list.appendleft(0)
for item in zip(linked_list, [i for i in range(0, 12)]):
assert (item[0] == item[1])

def python_mailing_list_example():
"""Example from mailing list"""
linked_list = LinkedList()
for i in range(1, 11):
linked_list.append(i)
a = linked_list.index(1)
print(a.value)
b = linked_list.index(5)
print(b.value)
a.insert_after(27)
b.insert_after(45)
print(','.join(str(x) for x in linked_list))

unit_test()
python_mailing_list_example()

From: Python-list <python-list-bounces+gweatherby=uchc.edu@python.org> on behalf of Guenther Sohler <guenther.sohler@gmail.com>
Date: Friday, March 3, 2023 at 12:28 PM
To: python-list@python.org <python-list@python.org>
Subject: Python list insert iterators
*** Attention: This is an external email. Use caution responding, opening attachments or clicking on links. ***

Hi Python community,

I have a got an example list like

1, 2, 3, 4, 5, 6, 7, 8, 9, 10
T T

and i eventually want to insert items in the given locations
(A shall go between 2 and 3, B shall go between 6 and 7)

Right now i just use index numbers to define the place:

A shall insert in position 2
B shall insert in position 6

However when i insert A in position 2, the index for successful insertion
of B gets wrong
(should now be 7 instead of 6)

No, it's not an option to sort the indexes and start inserting from the
back.
The most elegant option is not to store indexes, but list iterators, which
attach to the list element
and would automatically move, especially if an element is inserted before.

I could not find such functionality in python lists of [ 1,2,3 ]

Does python have such functionality ?
if yes, where can i find it ?
--
https://urldefense.com/v3/__https://mail.python.org/mailman/listinfo/python-list__;!!Cn_UX_p3!gMAiBffu8h9N-YxV4nxLjapnR3InnNHeAbrHchQ-QoKfCHpF68yr8MKpEvXNdW1uJI3pFEXPiSvDRy9BpXAPfbP0k-Mn$<https://urldefense.com/v3/__https:/mail.python.org/mailman/listinfo/python-list__;!!Cn_UX_p3!gMAiBffu8h9N-YxV4nxLjapnR3InnNHeAbrHchQ-QoKfCHpF68yr8MKpEvXNdW1uJI3pFEXPiSvDRy9BpXAPfbP0k-Mn$>

1
server_pubkey.txt

rocksolid light 0.9.81
clearnet tor