diff options
author | Carlo Strub <cs@FreeBSD.org> | 2023-02-25 14:24:18 +0000 |
---|---|---|
committer | Carlo Strub <cs@FreeBSD.org> | 2023-02-25 14:24:18 +0000 |
commit | d4bd29fc009f1b7e72802e183bf8e6208fdd41aa (patch) | |
tree | 95ed2d127e6a2d6721c679b31e50f57689b4d149 | |
parent | 1c44991d018bcb4e24cf664a236bebb7b760ddb3 (diff) | |
download | ports-d4bd29fc009f1b7e72802e183bf8e6208fdd41aa.tar.gz ports-d4bd29fc009f1b7e72802e183bf8e6208fdd41aa.zip |
net-p2p/reticulum: Self-configuring, encrypted and resilient mesh networking stack
-rw-r--r-- | GIDs | 2 | ||||
-rw-r--r-- | UIDs | 2 | ||||
-rw-r--r-- | net-p2p/Makefile | 1 | ||||
-rw-r--r-- | net-p2p/reticulum/Makefile | 31 | ||||
-rw-r--r-- | net-p2p/reticulum/distinfo | 3 | ||||
-rw-r--r-- | net-p2p/reticulum/files/config.sample | 342 | ||||
-rw-r--r-- | net-p2p/reticulum/files/patch-RNS_Reticulum.py | 105 | ||||
-rw-r--r-- | net-p2p/reticulum/files/patch-RNS_Utilities_rnsd.py | 12 | ||||
-rw-r--r-- | net-p2p/reticulum/files/reticulum.in | 39 | ||||
-rw-r--r-- | net-p2p/reticulum/pkg-descr | 4 | ||||
-rw-r--r-- | net-p2p/reticulum/pkg-plist | 239 |
11 files changed, 778 insertions, 2 deletions
@@ -267,7 +267,7 @@ hedgedoc:*:317: # free: 324 dkfilter:*:325: smfs:*:326: -# free: 327 +_reticulum:*:327: # free: 328 # free: 329 orthanc:*:330: @@ -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 |