aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlo Strub <cs@FreeBSD.org>2023-02-25 14:24:18 +0000
committerCarlo Strub <cs@FreeBSD.org>2023-02-25 14:24:18 +0000
commitd4bd29fc009f1b7e72802e183bf8e6208fdd41aa (patch)
tree95ed2d127e6a2d6721c679b31e50f57689b4d149
parent1c44991d018bcb4e24cf664a236bebb7b760ddb3 (diff)
downloadports-d4bd29fc009f1b7e72802e183bf8e6208fdd41aa.tar.gz
ports-d4bd29fc009f1b7e72802e183bf8e6208fdd41aa.zip
net-p2p/reticulum: Self-configuring, encrypted and resilient mesh networking stack
-rw-r--r--GIDs2
-rw-r--r--UIDs2
-rw-r--r--net-p2p/Makefile1
-rw-r--r--net-p2p/reticulum/Makefile31
-rw-r--r--net-p2p/reticulum/distinfo3
-rw-r--r--net-p2p/reticulum/files/config.sample342
-rw-r--r--net-p2p/reticulum/files/patch-RNS_Reticulum.py105
-rw-r--r--net-p2p/reticulum/files/patch-RNS_Utilities_rnsd.py12
-rw-r--r--net-p2p/reticulum/files/reticulum.in39
-rw-r--r--net-p2p/reticulum/pkg-descr4
-rw-r--r--net-p2p/reticulum/pkg-plist239
11 files changed, 778 insertions, 2 deletions
diff --git a/GIDs b/GIDs
index 4b5cb168fbc5..c6882f3386e8 100644
--- a/GIDs
+++ b/GIDs
@@ -267,7 +267,7 @@ hedgedoc:*:317:
# free: 324
dkfilter:*:325:
smfs:*:326:
-# free: 327
+_reticulum:*:327:
# free: 328
# free: 329
orthanc:*:330:
diff --git a/UIDs b/UIDs
index c2ecbb8c766b..7326744a45a4 100644
--- a/UIDs
+++ b/UIDs
@@ -272,7 +272,7 @@ icingadirector:*:318:183::0:0:icingadirector user:/nonexistent:/usr/sbin/nologin
# free: 324
dkfilter:*:325:325::0:0:DK Filter Owner:/nonexistent:/usr/sbin/nologin
smfs:*:326:326::0:0:SMFSAV Owner:/nonexistent:/usr/sbin/nologin
-# free: 327
+_reticulum:*:327:327::0:0:Reticulum Daemon:/nonexistent:/usr/sbin/nologin
# free: 328
# free: 329
orthanc:*:330:330::0:0:Orthanc Daemon:/nonexistent:/usr/sbin/nologin
diff --git a/net-p2p/Makefile b/net-p2p/Makefile
index a41e3fccd086..ae05f1de3307 100644
--- a/net-p2p/Makefile
+++ b/net-p2p/Makefile
@@ -86,6 +86,7 @@
SUBDIR += qtum
SUBDIR += radarr
SUBDIR += readarr
+ SUBDIR += reticulum
SUBDIR += retroshare
SUBDIR += rslsync
SUBDIR += rtorrent
diff --git a/net-p2p/reticulum/Makefile b/net-p2p/reticulum/Makefile
new file mode 100644
index 000000000000..04db957b30f5
--- /dev/null
+++ b/net-p2p/reticulum/Makefile
@@ -0,0 +1,31 @@
+PORTNAME= reticulum
+DISTVERSION= 0.4.9
+CATEGORIES= net-p2p
+MASTER_SITES= PYPI
+DISTNAME= rns-${DISTVERSION}
+
+MAINTAINER= cs@FreeBSD.org
+COMMENT= Self-configuring, encrypted and resilient mesh networking stack
+WWW= https://reticulum.network/
+
+LICENSE= MIT
+
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}netifaces>=0:net/py-netifaces@${PY_FLAVOR}
+
+USES= python:3.4+
+USE_PYTHON= distutils
+USE_RC_SUBR= reticulum
+GROUPS= _reticulum
+USERS= _reticulum
+SUB_LIST= USERS="${USERS}" \
+ GROUPS="${GROUPS}" \
+ PYTHON=${PYTHON_CMD}
+PLIST_SUB= USERS="${USERS}" GROUPS="${GROUPS}"
+
+NO_ARCH= yes
+
+post-install:
+ @${MKDIR} ${STAGEDIR}${ETCDIR} ${STAGEDIR}/var/db/reticulum ${STAGEDIR}/var/run/reticulum ${STAGEDIR}/var/log/reticulum
+ ${INSTALL_DATA} ${PATCHDIR}/config.sample ${STAGEDIR}${ETCDIR}/config.sample
+
+.include <bsd.port.mk>
diff --git a/net-p2p/reticulum/distinfo b/net-p2p/reticulum/distinfo
new file mode 100644
index 000000000000..096cee875af1
--- /dev/null
+++ b/net-p2p/reticulum/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1677070961
+SHA256 (rns-0.4.9.tar.gz) = ba575410360912e1af47e116a2ecc3b928c8bf7882961f4170876389ec849f38
+SIZE (rns-0.4.9.tar.gz) = 276828
diff --git a/net-p2p/reticulum/files/config.sample b/net-p2p/reticulum/files/config.sample
new file mode 100644
index 000000000000..003c06bd5872
--- /dev/null
+++ b/net-p2p/reticulum/files/config.sample
@@ -0,0 +1,342 @@
+# This is an example Reticulum config file.
+# You should probably edit it to include any additional,
+# interfaces and settings you might need.
+
+[reticulum]
+
+# Define the DB directory
+dbdir = "/var/db/reticulum"
+
+# If you enable Transport, your system will route traffic
+# for other peers, pass announces and serve path requests.
+# This should be done for systems that are suited to act
+# as transport nodes, ie. if they are stationary and
+# always-on. This directive is optional and can be removed
+# for brevity.
+
+enable_transport = False
+
+
+# By default, the first program to launch the Reticulum
+# Network Stack will create a shared instance, that other
+# programs can communicate with. Only the shared instance
+# opens all the configured interfaces directly, and other
+# local programs communicate with the shared instance over
+# a local socket. This is completely transparent to the
+# user, and should generally be turned on. This directive
+# is optional and can be removed for brevity.
+
+share_instance = Yes
+
+
+# If you want to run multiple *different* shared instances
+# on the same system, you will need to specify different
+# shared instance ports for each. The defaults are given
+# below, and again, these options can be left out if you
+# don't need them.
+
+shared_instance_port = 37428
+instance_control_port = 37429
+
+# You can configure Reticulum to panic and forcibly close
+# if an unrecoverable interface error occurs, such as the
+# hardware device for an interface disappearing. This is
+# an optional directive, and can be left out for brevity.
+# This behaviour is disabled by default.
+
+panic_on_interface_error = No
+
+
+[logging]
+# Valid log levels are 0 through 7:
+# 0: Log only critical information
+# 1: Log errors and lower log levels
+# 2: Log warnings and lower log levels
+# 3: Log notices and lower log levels
+# 4: Log info and lower (this is the default)
+# 5: Verbose logging
+# 6: Debug logging
+# 7: Extreme logging
+
+loglevel = 4
+
+
+# The interfaces section defines the physical and virtual
+# interfaces Reticulum will use to communicate on. This
+# section will contain examples for a variety of interface
+# types. You can modify these or use them as a basis for
+# your own config, or simply remove the unused ones.
+
+[interfaces]
+
+ # This interface enables communication with other
+ # link-local Reticulum nodes over UDP. It does not
+ # need any functional IP infrastructure like routers
+ # or DHCP servers, but will require that at least link-
+ # local IPv6 is enabled in your operating system, which
+ # should be enabled by default in almost any OS. See
+ # the Reticulum Manual for more configuration options.
+
+ [[Default Interface]]
+ type = AutoInterface
+ enabled = yes
+
+
+ # The following example enables communication with other
+ # local Reticulum peers using UDP broadcasts.
+
+ [[UDP Interface]]
+ type = UDPInterface
+ enabled = no
+ listen_ip = 0.0.0.0
+ listen_port = 4242
+ forward_ip = 255.255.255.255
+ forward_port = 4242
+
+ # The above configuration will allow communication
+ # within the local broadcast domains of all local
+ # IP interfaces.
+
+ # Instead of specifying listen_ip, listen_port,
+ # forward_ip and forward_port, you can also bind
+ # to a specific network device like below.
+
+ # device = eth0
+ # port = 4242
+
+ # Assuming the eth0 device has the address
+ # 10.55.0.72/24, the above configuration would
+ # be equivalent to the following manual setup.
+ # Note that we are both listening and forwarding to
+ # the broadcast address of the network segments.
+
+ # listen_ip = 10.55.0.255
+ # listen_port = 4242
+ # forward_ip = 10.55.0.255
+ # forward_port = 4242
+
+ # You can of course also communicate only with
+ # a single IP address
+
+ # listen_ip = 10.55.0.15
+ # listen_port = 4242
+ # forward_ip = 10.55.0.16
+ # forward_port = 4242
+
+
+ # This example demonstrates a TCP server interface.
+ # It will listen for incoming connections on the
+ # specified IP address and port number.
+
+ [[TCP Server Interface]]
+ type = TCPServerInterface
+ enabled = no
+
+ # This configuration will listen on all IP
+ # interfaces on port 4242
+
+ listen_ip = 0.0.0.0
+ listen_port = 4242
+
+ # Alternatively you can bind to a specific IP
+
+ # listen_ip = 10.0.0.88
+ # listen_port = 4242
+
+ # Or a specific network device
+
+ # device = eth0
+ # port = 4242
+
+
+ # To connect to a TCP server interface, you would
+ # naturally use the TCP client interface. Here's
+ # an example. The target_host can either be an IP
+ # address or a hostname
+
+ [[TCP Client Interface]]
+ type = TCPClientInterface
+ enabled = no
+ target_host = 127.0.0.1
+ target_port = 4242
+
+
+ # This example shows how to make your Reticulum
+ # instance available over I2P, and connect to
+ # another I2P peer. Please be aware that you
+ # must have an I2P router running on your system
+ # with the SAMv3 API enabled for this to work.
+
+ [[I2P]]
+ type = I2PInterface
+ enabled = no
+ connectable = yes
+ peers = ykzlw5ujbaqc2xkec4cpvgyxj257wcrmmgkuxqmqcur7cq3w3lha.b32.i2p
+
+
+ # Here's an example of how to add a LoRa interface
+ # using the RNode LoRa transceiver.
+
+ [[RNode LoRa Interface]]
+ type = RNodeInterface
+
+ # Enable interface if you want use it!
+ enabled = no
+
+ # Serial port for the device
+ port = /dev/ttyUSB0
+
+ # Set frequency to 867.2 MHz
+ frequency = 867200000
+
+ # Set LoRa bandwidth to 125 KHz
+ bandwidth = 125000
+
+ # Set TX power to 7 dBm (5 mW)
+ txpower = 7
+
+ # Select spreading factor 8. Valid
+ # range is 7 through 12, with 7
+ # being the fastest and 12 having
+ # the longest range.
+ spreadingfactor = 8
+
+ # Select coding rate 5. Valid range
+ # is 5 throough 8, with 5 being the
+ # fastest, and 8 the longest range.
+ codingrate = 5
+
+ # You can configure the RNode to send
+ # out identification on the channel with
+ # a set interval by configuring the
+ # following two parameters. The trans-
+ # ceiver will only ID if the set
+ # interval has elapsed since it's last
+ # actual transmission. The interval is
+ # configured in seconds.
+ # This option is commented out and not
+ # used by default.
+ # id_callsign = MYCALL-0
+ # id_interval = 600
+
+ # For certain homebrew RNode interfaces
+ # with low amounts of RAM, using packet
+ # flow control can be useful. By default
+ # it is disabled.
+ flow_control = False
+
+
+ # An example KISS modem interface. Useful for running
+ # Reticulum over packet radio hardware.
+
+ [[Packet Radio KISS Interface]]
+ type = KISSInterface
+
+ # Enable interface if you want use it!
+ enabled = no
+
+ # Serial port for the device
+ port = /dev/ttyUSB1
+
+ # Set the serial baud-rate and other
+ # configuration parameters.
+ speed = 115200
+ databits = 8
+ parity = none
+ stopbits = 1
+
+ # Set the modem preamble. A 150ms
+ # preamble should be a reasonable
+ # default, but may need to be
+ # increased for radios with slow-
+ # opening squelch and long TX/RX
+ # turnaround
+ preamble = 150
+
+ # Set the modem TX tail. In most
+ # cases this should be kept as low
+ # as possible to not waste airtime.
+ txtail = 10
+
+ # Configure CDMA parameters. These
+ # settings are reasonable defaults.
+ persistence = 200
+ slottime = 20
+
+ # You can configure the interface to send
+ # out identification on the channel with
+ # a set interval by configuring the
+ # following two parameters. The KISS
+ # interface will only ID if the set
+ # interval has elapsed since it's last
+ # actual transmission. The interval is
+ # configured in seconds.
+ # This option is commented out and not
+ # used by default.
+ # id_callsign = MYCALL-0
+ # id_interval = 600
+
+ # Whether to use KISS flow-control.
+ # This is useful for modems that have
+ # a small internal packet buffer, but
+ # support packet flow control instead.
+ flow_control = false
+
+
+ # If you're using Reticulum on amateur radio spectrum,
+ # you might want to use the AX.25 KISS interface. This
+ # way, Reticulum will automatically encapsulate it's
+ # traffic in AX.25 and also identify your stations
+ # transmissions with your callsign and SSID.
+ #
+ # Only do this if you really need to! Reticulum doesn't
+ # need the AX.25 layer for anything, and it incurs extra
+ # overhead on every packet to encapsulate in AX.25.
+ #
+ # A more efficient way is to use the plain KISS interface
+ # with the beaconing functionality described above.
+
+ [[Packet Radio AX.25 KISS Interface]]
+ type = AX25KISSInterface
+
+ # Set the station callsign and SSID
+ callsign = NO1CLL
+ ssid = 0
+
+ # Enable interface if you want use it!
+ enabled = no
+
+ # Serial port for the device
+ port = /dev/ttyUSB2
+
+ # Set the serial baud-rate and other
+ # configuration parameters.
+ speed = 115200
+ databits = 8
+ parity = none
+ stopbits = 1
+
+ # Whether to use KISS flow-control.
+ # This is useful for modems with a
+ # small internal packet buffer.
+ flow_control = false
+
+ # Set the modem preamble. A 150ms
+ # preamble should be a reasonable
+ # default, but may need to be
+ # increased for radios with slow-
+ # opening squelch and long TX/RX
+ # turnaround
+ preamble = 150
+
+ # Set the modem TX tail. In most
+ # cases this should be kept as low
+ # as possible to not waste airtime.
+ txtail = 10
+
+ # Configure CDMA parameters. These
+ # settings are reasonable defaults.
+ persistence = 200
+ slottime = 20
+
+
diff --git a/net-p2p/reticulum/files/patch-RNS_Reticulum.py b/net-p2p/reticulum/files/patch-RNS_Reticulum.py
new file mode 100644
index 000000000000..6ddf70beb844
--- /dev/null
+++ b/net-p2p/reticulum/files/patch-RNS_Reticulum.py
@@ -0,0 +1,105 @@
+--- RNS/Reticulum.py.orig 2022-11-03 16:31:20 UTC
++++ RNS/Reticulum.py
+@@ -141,6 +141,7 @@ class Reticulum:
+ # named ".reticulum" inside the current users home directory
+ userdir = os.path.expanduser("~")
+ configdir = None
++ dbdir = ""
+ configpath = ""
+ storagepath = ""
+ cachepath = ""
+@@ -181,7 +182,9 @@ class Reticulum:
+ if configdir != None:
+ Reticulum.configdir = configdir
+ else:
+- if os.path.isdir("/etc/reticulum") and os.path.isfile("/etc/reticulum/config"):
++ if os.path.isdir("/usr/local/etc/reticulum") and os.path.isfile("/usr/local/etc/reticulum/config"):
++ Reticulum.configdir = "/usr/local/etc/reticulum"
++ elif os.path.isdir("/etc/reticulum") and os.path.isfile("/etc/reticulum/config"):
+ Reticulum.configdir = "/etc/reticulum"
+ elif os.path.isdir(Reticulum.userdir+"/.config/reticulum") and os.path.isfile(Reticulum.userdir+"/.config/reticulum/config"):
+ Reticulum.configdir = Reticulum.userdir+"/.config/reticulum"
+@@ -193,10 +196,7 @@ class Reticulum:
+ RNS.logfile = Reticulum.configdir+"/logfile"
+
+ Reticulum.configpath = Reticulum.configdir+"/config"
+- Reticulum.storagepath = Reticulum.configdir+"/storage"
+- Reticulum.cachepath = Reticulum.configdir+"/storage/cache"
+- Reticulum.resourcepath = Reticulum.configdir+"/storage/resources"
+- Reticulum.identitypath = Reticulum.configdir+"/storage/identities"
++ Reticulum.dbdir = Reticulum.configdir
+
+ Reticulum.__transport_enabled = False
+ Reticulum.__use_implicit_proof = True
+@@ -226,18 +226,6 @@ class Reticulum:
+ self.last_data_persist = time.time()
+ self.last_cache_clean = 0
+
+- if not os.path.isdir(Reticulum.storagepath):
+- os.makedirs(Reticulum.storagepath)
+-
+- if not os.path.isdir(Reticulum.cachepath):
+- os.makedirs(Reticulum.cachepath)
+-
+- if not os.path.isdir(Reticulum.resourcepath):
+- os.makedirs(Reticulum.resourcepath)
+-
+- if not os.path.isdir(Reticulum.identitypath):
+- os.makedirs(Reticulum.identitypath)
+-
+ if os.path.isfile(self.configpath):
+ try:
+ self.config = ConfigObj(self.configpath)
+@@ -253,7 +241,7 @@ class Reticulum:
+
+ self.__apply_config()
+ RNS.log("Configuration loaded from "+self.configpath, RNS.LOG_VERBOSE)
+-
++
+ RNS.Identity.load_known_destinations()
+
+ RNS.Transport.start(self)
+@@ -345,6 +333,9 @@ class Reticulum:
+ if "reticulum" in self.config:
+ for option in self.config["reticulum"]:
+ value = self.config["reticulum"][option]
++ if option == "dbdir":
++ value = self.config["reticulum"][option]
++ Reticulum.dbdir = value
+ if option == "share_instance":
+ value = self.config["reticulum"].as_bool(option)
+ self.share_instance = value
+@@ -369,6 +360,23 @@ class Reticulum:
+ if v == False:
+ Reticulum.__use_implicit_proof = False
+
++ Reticulum.storagepath = Reticulum.dbdir+"/storage"
++ Reticulum.cachepath = Reticulum.dbdir+"/storage/cache"
++ Reticulum.resourcepath = Reticulum.dbdir+"/storage/resources"
++ Reticulum.identitypath = Reticulum.dbdir+"/storage/identities"
++
++ if not os.path.isdir(Reticulum.storagepath):
++ os.makedirs(Reticulum.storagepath)
++
++ if not os.path.isdir(Reticulum.cachepath):
++ os.makedirs(Reticulum.cachepath)
++
++ if not os.path.isdir(Reticulum.resourcepath):
++ os.makedirs(Reticulum.resourcepath)
++
++ if not os.path.isdir(Reticulum.identitypath):
++ os.makedirs(Reticulum.identitypath)
++
+ self.__start_local_interface()
+
+ if self.is_shared_instance or self.is_standalone_instance:
+@@ -1275,6 +1283,9 @@ __default_rns_config__ = '''# This is the default Reti
+
+
+ [reticulum]
++
++# Define the DB directory
++dbdir = "/var/db/reticulum"
+
+ # If you enable Transport, your system will route traffic
+ # for other peers, pass announces and serve path requests.
diff --git a/net-p2p/reticulum/files/patch-RNS_Utilities_rnsd.py b/net-p2p/reticulum/files/patch-RNS_Utilities_rnsd.py
new file mode 100644
index 000000000000..33f61985b665
--- /dev/null
+++ b/net-p2p/reticulum/files/patch-RNS_Utilities_rnsd.py
@@ -0,0 +1,12 @@
+--- RNS/Utilities/rnsd.py.orig 2023-02-23 17:25:44 UTC
++++ RNS/Utilities/rnsd.py
+@@ -80,6 +80,9 @@ __example_rns_config__ = '''# This is an example Retic
+
+ [reticulum]
+
++# Define the DB directory
++dbdir = "/var/db/reticulum"
++
+ # If you enable Transport, your system will route traffic
+ # for other peers, pass announces and serve path requests.
+ # This should be done for systems that are suited to act
diff --git a/net-p2p/reticulum/files/reticulum.in b/net-p2p/reticulum/files/reticulum.in
new file mode 100644
index 000000000000..482aa6bd9913
--- /dev/null
+++ b/net-p2p/reticulum/files/reticulum.in
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# PROVIDE: reticulum
+# REQUIRE: DAEMON FILESYSTEMS
+# BEFORE: LOGIN
+#
+# Add these lines to /etc/rc.conf.local or /etc/rc.conf
+# to enable this service:
+#
+# reticulum_enable (bool): Set to NO by default.
+# Set it to YES to enable reticulum.
+# reticulum_config (path): Set to %%PREFIX%%/etc/reticulum/
+# by default.
+# reticulum_user (str): Reticulum daemon user. Default: %%USERS%%
+# reticulum_group (str): Reticulum daemon group. Default: %%GROUPS%%
+
+. /etc/rc.subr
+
+name="reticulum"
+rcvar="reticulum_enable"
+
+load_rc_config $name
+
+: ${reticulum_enable:="NO"}
+: ${reticulum_config="%%PREFIX%%/etc/reticulum/"}
+: ${reticulum_user="%%USERS%%"}
+: ${reticulum_group="%%GROUPS%%"}
+
+pidfiledir="/var/run/${name}"
+pidfile="${pidfiledir}/${name}.pid"
+logfiledir="/var/log/${name}"
+logfile="${logfiledir}/${name}.log"
+command="/usr/sbin/daemon"
+command_interpreter=%%PYTHON%%
+procname="%%PREFIX%%/bin/rnsd"
+
+command_args="-f -o $logfile -p $pidfile $procname --config $reticulum_config"
+
+run_rc_command "$1"
diff --git a/net-p2p/reticulum/pkg-descr b/net-p2p/reticulum/pkg-descr
new file mode 100644
index 000000000000..a7b2456983f3
--- /dev/null
+++ b/net-p2p/reticulum/pkg-descr
@@ -0,0 +1,4 @@
+Reticulum is a cryptography-based networking stack for building local and
+wide-area networks with readily available hardware. Reticulum can continue to
+operate even in adverse conditions with very high latency and extremely low
+bandwidth.
diff --git a/net-p2p/reticulum/pkg-plist b/net-p2p/reticulum/pkg-plist
new file mode 100644
index 000000000000..5909c46c908e
--- /dev/null
+++ b/net-p2p/reticulum/pkg-plist
@@ -0,0 +1,239 @@
+bin/rncp
+bin/rnid
+bin/rnodeconf
+bin/rnpath
+bin/rnprobe
+bin/rnsd
+bin/rnstatus
+bin/rnx
+@sample %%ETCDIR%%/config.sample
+@owner %%USERS%%
+@group %%GROUPS%%
+@dir /var/db/reticulum
+@dir /var/log/reticulum
+@dir /var/run/reticulum
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/AES.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/Ed25519.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/Fernet.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/HKDF.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/HMAC.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/Hashes.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/PKCS7.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/Provider.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/Proxies.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/SHA256.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/SHA512.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/X25519.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/AES%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/AES%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Ed25519%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Ed25519%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Fernet%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Fernet%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/HKDF%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/HKDF%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/HMAC%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/HMAC%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Hashes%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Hashes%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/PKCS7%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/PKCS7%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Provider%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Provider%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Proxies%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Proxies%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/SHA256%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/SHA256%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/SHA512%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/SHA512%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/X25519%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/X25519%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__pycache__/aes%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__pycache__/aes%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__pycache__/utils%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__pycache__/utils%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/aes.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/utils.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/_ed25519%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/_ed25519%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/basic%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/basic%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/ed25519_oop%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/ed25519_oop%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/eddsa%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/eddsa%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/_ed25519.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/basic.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/ed25519_oop.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/eddsa.py
+%%PYTHON_SITELIBDIR%%/RNS/Destination.py
+%%PYTHON_SITELIBDIR%%/RNS/Identity.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/AX25KISSInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/KISSInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/RNodeInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/SerialInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/KISSInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/KISSInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/RNodeInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/RNodeInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/SerialInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/SerialInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/AutoInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/I2PInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Interface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/KISSInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/LocalInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/PipeInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/RNodeInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/SerialInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/TCPInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/UDPInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/AX25KISSInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/AX25KISSInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/AutoInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/AutoInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/I2PInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/I2PInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/Interface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/Interface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/KISSInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/KISSInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/LocalInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/LocalInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/PipeInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/PipeInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/RNodeInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/RNodeInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/SerialInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/SerialInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/TCPInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/TCPInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/UDPInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/UDPInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Link.py
+%%PYTHON_SITELIBDIR%%/RNS/Packet.py
+%%PYTHON_SITELIBDIR%%/RNS/Resource.py
+%%PYTHON_SITELIBDIR%%/RNS/Reticulum.py
+%%PYTHON_SITELIBDIR%%/RNS/Transport.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rncp%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rncp%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnid%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnid%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnodeconf%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnodeconf%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnpath%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnpath%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnprobe%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnprobe%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnsd%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnsd%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnstatus%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnstatus%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnx%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnx%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rncp.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnid.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnodeconf.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnpath.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnprobe.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnsd.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnstatus.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnx.py
+%%PYTHON_SITELIBDIR%%/RNS/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Destination%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Destination%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Identity%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Identity%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Link%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Link%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Packet%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Packet%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Resource%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Resource%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Reticulum%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Reticulum%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Transport%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Transport%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/_version%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/_version%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/_version.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/configobj%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/configobj%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/platformutils%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/platformutils%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/six%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/six%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/umsgpack%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/umsgpack%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/configobj.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/__version__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/__version__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/aiosam%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/aiosam%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/exceptions%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/exceptions%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/log%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/log%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/sam%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/sam%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/tunnel%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/tunnel%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/utils%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/utils%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__version__.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/aiosam.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/exceptions.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/log.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/sam.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/tunnel.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/utils.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/platformutils.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/six.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/umsgpack.py
+%%PYTHON_SITELIBDIR%%/rns-0.4.9-py%%PYTHON_VER%%.egg-info/PKG-INFO
+%%PYTHON_SITELIBDIR%%/rns-0.4.9-py%%PYTHON_VER%%.egg-info/SOURCES.txt
+%%PYTHON_SITELIBDIR%%/rns-0.4.9-py%%PYTHON_VER%%.egg-info/dependency_links.txt
+%%PYTHON_SITELIBDIR%%/rns-0.4.9-py%%PYTHON_VER%%.egg-info/entry_points.txt
+%%PYTHON_SITELIBDIR%%/rns-0.4.9-py%%PYTHON_VER%%.egg-info/requires.txt
+%%PYTHON_SITELIBDIR%%/rns-0.4.9-py%%PYTHON_VER%%.egg-info/top_level.txt
+%%PYTHON_SITELIBDIR%%/tests/__init__.py
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/all%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/all%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/hashes%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/hashes%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/identity%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/identity%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/link%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/link%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/all.py
+%%PYTHON_SITELIBDIR%%/tests/hashes.py
+%%PYTHON_SITELIBDIR%%/tests/identity.py
+%%PYTHON_SITELIBDIR%%/tests/link.py