86>Sep 14 10:16:33 userdel[4023791]: delete user 'rooter'
<86>Sep 14 10:16:33 userdel[4023791]: removed group 'rooter' owned by 'rooter'
<86>Sep 14 10:16:33 userdel[4023791]: removed shadow group 'rooter' owned by 'rooter'
<86>Sep 14 10:16:33 groupadd[4023816]: group added to /etc/group: name=rooter, GID=681
<86>Sep 14 10:16:33 groupadd[4023816]: new group: name=rooter, GID=681
<86>Sep 14 10:16:33 useradd[4023833]: new user: name=rooter, UID=681, GID=681, home=/root, shell=/bin/bash
<86>Sep 14 10:16:33 userdel[4023869]: delete user 'builder'
<86>Sep 14 10:16:33 groupadd[4023904]: group added to /etc/group: name=builder, GID=682
<86>Sep 14 10:16:33 groupadd[4023904]: group added to /etc/gshadow: name=builder
<86>Sep 14 10:16:33 groupadd[4023904]: new group: name=builder, GID=682
<86>Sep 14 10:16:33 useradd[4023911]: new user: name=builder, UID=682, GID=682, home=/usr/src, shell=/bin/bash
<13>Sep 14 10:16:37 rpmi: libgdbm-1.8.3-alt10 sisyphus+278100.1600.1.1 1626059138 installed
<13>Sep 14 10:16:37 rpmi: libexpat-2.2.10-alt1 sisyphus+276608.100.1.2 1625153360 installed
<13>Sep 14 10:16:37 rpmi: libp11-kit-0.23.15-alt2 sisyphus+278382.100.1.2 1626190687 installed
<13>Sep 14 10:16:37 rpmi: libtasn1-4.17.0-alt1 sisyphus+276722.100.1.1 1625211286 installed
<13>Sep 14 10:16:37 rpmi: rpm-macros-alternatives-0.5.1-alt1 sisyphus+278157.100.2.1 1626055790 installed
<13>Sep 14 10:16:37 rpmi: alternatives-0.5.1-alt1 sisyphus+278157.100.2.1 1626055790 installed
<13>Sep 14 10:16:37 rpmi: ca-certificates-2021.06.03-alt1 sisyphus+273509.400.1.1 1622736045 installed
<13>Sep 14 10:16:37 rpmi: ca-trust-0.1.2-alt1 sisyphus+233348.100.1.1 1561653823 installed
<13>Sep 14 10:16:37 rpmi: p11-kit-trust-0.23.15-alt2 sisyphus+278382.100.1.2 1626190687 installed
<13>Sep 14 10:16:37 rpmi: libcrypto1.1-1.1.1l-alt1 sisyphus+283685.100.1.1 1629816097 installed
<13>Sep 14 10:16:37 rpmi: libssl1.1-1.1.1l-alt1 sisyphus+283685.100.1.1 1629816097 installed
<13>Sep 14 10:16:37 rpmi: python3-3.9.6-alt2 sisyphus+283178.100.2.1 1629243244 installed
<13>Sep 14 10:16:39 rpmi: python3-base-3.9.6-alt2 sisyphus+283178.100.2.1 1629243244 installed
<13>Sep 14 10:16:39 rpmi: libpython3-3.9.6-alt2 sisyphus+283178.100.2.1 1629243244 installed
<13>Sep 14 10:16:39 rpmi: tests-for-installed-python3-pkgs-0.1.17-alt1 sisyphus+271082.100.1.1 1619820927 installed
<13>Sep 14 10:16:39 rpmi: rpm-build-python3-0.1.17-alt1 sisyphus+271082.100.1.1 1619820927 installed
<13>Sep 14 10:16:43 rpmi: libpython-2.7.18-alt7 sisyphus+284067.100.1.1 1630124815 installed
<13>Sep 14 10:16:43 rpmi: python2-base-2.7.18-alt7 sisyphus+284067.100.1.1 1630124815 installed
<13>Sep 14 10:16:43 rpmi: python-modules-encodings-2.7.18-alt7 sisyphus+284067.100.1.1 1630124815 installed
<13>Sep 14 10:16:43 rpmi: python-modules-compiler-2.7.18-alt7 sisyphus+284067.100.1.1 1630124815 installed
<13>Sep 14 10:16:43 rpmi: python-modules-email-2.7.18-alt7 sisyphus+284067.100.1.1 1630124815 installed
<13>Sep 14 10:16:43 rpmi: python-modules-unittest-2.7.18-alt7 sisyphus+284067.100.1.1 1630124815 installed
<13>Sep 14 10:16:44 rpmi: python-modules-2.7.18-alt7 sisyphus+284067.100.1.1 1630124815 installed
<13>Sep 14 10:16:44 rpmi: python-modules-ctypes-2.7.18-alt7 sisyphus+284067.100.1.1 1630124815 installed
<13>Sep 14 10:16:44 rpmi: python-modules-multiprocessing-2.7.18-alt7 sisyphus+284067.100.1.1 1630124815 installed
<13>Sep 14 10:16:44 rpmi: python-modules-logging-2.7.18-alt7 sisyphus+284067.100.1.1 1630124815 installed
<13>Sep 14 10:16:44 rpmi: python-tools-2to3-2.7.18-alt7 sisyphus+284067.100.1.1 1630124815 installed
<13>Sep 14 10:16:44 rpmi: python3-module-xmpp-0.5.0-alt4 sisyphus+245271.100.1.1 1580376902 installed
Building target platforms: i586
Building for target i586
Wrote: /usr/src/in/nosrpm/python3-module-jabberbot-0.16-alt2.nosrc.rpm (w1.gzdio)
<13>Sep 14 10:16:48 rpmi: python3-module-pkg_resources-1:57.4.0-alt1 sisyphus+280768.100.2.1 1627367207 installed
<13>Sep 14 10:16:48 rpmi: libncurses-6.2.20210123-alt2 sisyphus+283886.200.2.1 1630022624 installed
<13>Sep 14 10:16:48 rpmi: libtinfo-devel-6.2.20210123-alt2 sisyphus+283886.200.2.1 1630022624 installed
<13>Sep 14 10:16:48 rpmi: libncurses-devel-6.2.20210123-alt2 sisyphus+283886.200.2.1 1630022624 installed
<13>Sep 14 10:16:48 rpmi: python3-dev-3.9.6-alt2 sisyphus+283178.100.2.1 1629243244 installed
<13>Sep 14 10:16:48 rpmi: python3-module-setuptools-1:57.4.0-alt1 sisyphus+280768.100.2.1 1627367207 installed
Installing python3-module-jabberbot-0.16-alt2.src.rpm
Building target platforms: i586
Building for target i586
Executing(%prep): /bin/sh -e /usr/src/tmp/rpm-tmp.13602
+ umask 022
+ /bin/mkdir -p /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ rm -rf jabberbot-0.16
+ echo 'Source #0 (jabberbot-0.16.tar.gz):'
Source #0 (jabberbot-0.16.tar.gz):
+ /bin/tar -xf -
+ /bin/gzip -dc /usr/src/RPM/SOURCES/jabberbot-0.16.tar.gz
+ cd jabberbot-0.16
+ /bin/chmod -c -Rf u+rwX,go-w .
+ find -type f -name '*.py' -exec 2to3 -w -n '{}' +
RefactoringTool: Skipping optional fixer: buffer
RefactoringTool: Skipping optional fixer: idioms
RefactoringTool: Skipping optional fixer: set_literal
RefactoringTool: Skipping optional fixer: ws_comma
RefactoringTool: No changes to ./setup.py
RefactoringTool: Refactored ./jabberbot.py
--- ./jabberbot.py (original)
+++ ./jabberbot.py (refactored)
@@ -31,15 +31,15 @@
import os
import re
import sys
-import thread
+import _thread
try:
import xmpp
except ImportError:
- print >> sys.stderr, """
+ print("""
You need to install xmpppy from http://xmpppy.sf.net/.
On Debian-based systems, install the python-xmpp package.
- """
+ """, file=sys.stderr)
sys.exit(-1)
import time
@@ -462,7 +462,7 @@
"
" + \
text.encode('utf-8') + ""))
message.addChild(node=html)
- except Exception, e:
+ except Exception as e:
# Didn't work, incorrect markup or something.
self.log.debug('An error while building a xhtml message. '\
'Fallback to normal messagebody')
@@ -509,7 +509,7 @@
If the parameter 'only_available' is True, the broadcast
will not go to users whose status is not 'Available'."""
- for jid, (show, status) in self.__seen.items():
+ for jid, (show, status) in list(self.__seen.items()):
if not only_available or show is self.AVAILABLE:
self.send(jid, message)
@@ -546,11 +546,11 @@
self.status_type_changed(jid, self.OFFLINE)
try:
- subscription = self.roster.getSubscription(unicode(jid.__str__()))
- except KeyError, e:
+ subscription = self.roster.getSubscription(str(jid.__str__()))
+ except KeyError as e:
# User not on our roster
subscription = None
- except AttributeError, e:
+ except AttributeError as e:
# Recieved presence update before roster built
return
@@ -635,7 +635,7 @@
if jid not in self.__seen:
self.log.info('Ignoring message from unseen guest: %s' % jid)
self.log.debug("I've seen: %s" %
- ["%s" % x for x in self.__seen.keys()])
+ ["%s" % x for x in list(self.__seen.keys())])
return
# Remember the last-talked-in message thread for replies
@@ -653,7 +653,7 @@
def execute_and_send():
try:
reply = self.commands[cmd](mess, args)
- except Exception, e:
+ except Exception as e:
self.log.exception('An error happened while processing '\
'a message ("%s") from %s: %s"' %
(text, jid, traceback.format_exc(e)))
@@ -663,7 +663,7 @@
# Experimental!
# if command should be executed in a seperate thread do it
if self.commands[cmd]._jabberbot_command_thread:
- thread.start_new_thread(execute_and_send, ())
+ _thread.start_new_thread(execute_and_send, ())
else:
execute_and_send()
else:
@@ -726,13 +726,12 @@
usage = '\n'.join(sorted([
'%s: %s' % (name, (command.__doc__ or \
'(undocumented)').strip().split('\n', 1)[0])
- for (name, command) in self.commands.iteritems() \
+ for (name, command) in self.commands.items() \
if name != (self.__command_prefix + 'help') \
and not command._jabberbot_command_hidden
]))
- usage = '\n\n' + '\n\n'.join(filter(None,
- [usage, self.MSG_HELP_TAIL % {'helpcommand':
- self.__command_prefix + 'help'}]))
+ usage = '\n\n' + '\n\n'.join([_f for _f in [usage, self.MSG_HELP_TAIL % {'helpcommand':
+ self.__command_prefix + 'help'}] if _f])
else:
description = ''
if (args not in self.commands and
@@ -747,7 +746,7 @@
top = self.top_of_help_message()
bottom = self.bottom_of_help_message()
- return ''.join(filter(None, [top, description, usage, bottom]))
+ return ''.join([_f for _f in RefactoringTool: Refactored ./examples/uptime.py
RefactoringTool: No changes to ./examples/twitterbot.py
RefactoringTool: Refactored ./examples/tunes.py
RefactoringTool: No changes to ./examples/muc.py
RefactoringTool: No changes to ./examples/broadcast.py
RefactoringTool: Files that were modified:
RefactoringTool: ./setup.py
RefactoringTool: ./jabberbot.py
RefactoringTool: ./examples/uptime.py
RefactoringTool: ./examples/twitterbot.py
RefactoringTool: ./examples/tunes.py
RefactoringTool: ./examples/muc.py
RefactoringTool: ./examples/broadcast.py
[top, description, usage, bottom] if _f])
def idle_proc(self):
"""This function will be called in the main loop."""
@@ -769,7 +768,7 @@
#logging.debug('Got response: ' + str(res))
if res is None:
self.on_ping_timeout()
- except IOError, e:
+ except IOError as e:
logging.error('Error pinging the server: %s, '\
'treating as ping timeout.' % e)
self.on_ping_timeout()
--- ./examples/uptime.py (original)
+++ ./examples/uptime.py (refactored)
@@ -31,9 +31,9 @@
if __name__ == '__main__':
if len(sys.argv) != 3:
- print >>sys.stderr, """
+ print("""
Usage: %s
- """ % sys.argv[0]
+ """ % sys.argv[0], file=sys.stderr)
username, password = sys.argv[1:]
uptime_bot = UptimeBot(username, password, command_prefix='.')
--- ./examples/tunes.py (original)
+++ ./examples/tunes.py (refactored)
@@ -43,7 +43,7 @@
if __name__ == '__main__':
if len(sys.argv) < 3:
- print 'Usage: %s login@host password' % sys.argv[0]
+ print('Usage: %s login@host password' % sys.argv[0])
sys.exit(1)
bot = Tunes(sys.argv[1], sys.argv[2])
bot.serve_forever()
+ exit 0
Executing(%build): /bin/sh -e /usr/src/tmp/rpm-tmp.3300
+ umask 022
+ /bin/mkdir -p /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ cd jabberbot-0.16
+ CFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic'
+ export CFLAGS
+ CXXFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic'
+ export CXXFLAGS
+ FFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic'
+ export FFLAGS
+ /usr/bin/python3 setup.py build
running build
running build_py
creating build
creating build/lib
copying jabberbot.py -> build/lib
+ exit 0
Executing(%install): /bin/sh -e /usr/src/tmp/rpm-tmp.75840
+ umask 022
+ /bin/mkdir -p /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ /bin/chmod -Rf u+rwX -- /usr/src/tmp/python3-module-jabberbot-buildroot
+ :
+ /bin/rm -rf -- /usr/src/tmp/python3-module-jabberbot-buildroot
+ PATH=/usr/libexec/rpm-build:/usr/src/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/games
+ cd jabberbot-0.16
+ CFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic'
+ export CFLAGS
+ CXXFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic'
+ export CXXFLAGS
+ FFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic'
+ export FFLAGS
+ /usr/bin/python3 setup.py install --skip-build --root=/usr/src/tmp/python3-module-jabberbot-buildroot --force
running install
running install_lib
creating /usr/src/tmp/python3-module-jabberbot-buildroot
creating /usr/src/tmp/python3-module-jabberbot-buildroot/usr
creating /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib
creating /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3
creating /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages
copying build/lib/jabberbot.py -> /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages
byte-compiling /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages/jabberbot.py to jabberbot.cpython-39.pyc
running install_egg_info
Writing /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages/jabberbot-0.16-py3.9.egg-info
+ /usr/lib/rpm/brp-alt
Cleaning files in /usr/src/tmp/python3-module-jabberbot-buildroot (auto)
Verifying and fixing files in /usr/src/tmp/python3-module-jabberbot-buildroot (binconfig,pkgconfig,libtool,desktop,gnuconfig)
Checking contents of files in /usr/src/tmp/python3-module-jabberbot-buildroot/ (default)
Compressing files in /usr/src/tmp/python3-module-jabberbot-buildroot (auto)
Adjusting library links in /usr/src/tmp/python3-module-jabberbot-buildroot
./usr/lib: (from :0)
Verifying ELF objects in /usr/src/tmp/python3-module-jabberbot-buildroot (arch=normal,fhs=normal,lfs=relaxed,lint=relaxed,rpath=normal,stack=normal,textrel=normal,unresolved=normal)
Bytecompiling python3 modules in /usr/src/tmp/python3-module-jabberbot-buildroot using /usr/bin/python3
unlink /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-39.pyc
compile /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages/jabberbot.py
Bytecompiling python3 modules with optimization in /usr/src/tmp/python3-module-jabberbot-buildroot using /usr/bin/python3 -O
compile /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages/jabberbot.py
Bytecompiling python3 modules with optimization-2 in /usr/src/tmp/python3-module-jabberbot-buildroot using /usr/bin/python3 -OO
compile /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages/jabberbot.py
Hardlinking identical .pyc and .opt-?.pyc files
'./usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-39.opt-1.pyc' => './usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-39.pyc'
Processing files: python3-module-jabberbot-0.16-alt2
Executing(%doc): /bin/sh -e /usr/src/tmp/rpm-tmp.11515
+ umask 022
+ /bin/mkdir -p /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ cd jabberbot-0.16
+ DOCDIR=/usr/src/tmp/python3-module-jabberbot-buildroot/usr/share/doc/python3-module-jabberbot-0.16
+ export DOCDIR
+ rm -rf /usr/src/tmp/python3-module-jabberbot-buildroot/usr/share/doc/python3-module-jabberbot-0.16
+ /bin/mkdir -p /usr/src/tmp/python3-module-jabberbot-buildroot/usr/share/doc/python3-module-jabberbot-0.16
+ cp -prL examples README AUTHORS /usr/src/tmp/python3-module-jabberbot-buildroot/usr/share/doc/python3-module-jabberbot-0.16
+ chmod -R go-w /usr/src/tmp/python3-module-jabberbot-buildroot/usr/share/doc/python3-module-jabberbot-0.16
+ chmod -R a+rX /usr/src/tmp/python3-module-jabberbot-buildroot/usr/share/doc/python3-module-jabberbot-0.16
+ exit 0
Finding Provides (using /usr/lib/rpm/find-provides)
Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.kQRRDO
find-provides: running scripts (alternatives,debuginfo,lib,pam,perl,pkgconfig,python,python3,shell)
Finding Requires (using /usr/lib/rpm/find-requires)
Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.bIhEGQ
find-requires: running scripts (cpp,debuginfo,files,lib,pam,perl,pkgconfig,pkgconfiglib,python,python3,rpmlib,shebang,shell,static,symlinks,systemd-services)
/usr/lib/rpm/python3.req.py:6: DeprecationWarning: The parser module is deprecated and will be removed in future versions of Python
import parser, symbol, token, types
/usr/lib/rpm/python3.req.py:6: DeprecationWarning: The symbol module is deprecated and will be removed in future versions of Python
import parser, symbol, token, types
python3.req: /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages/jabberbot.py: skipping sys
python3.req: /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages/jabberbot.py: skipping _thread
/usr/lib/rpm/python3.req.py: /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages/jabberbot.py: line=37 IGNORE (for REQ=slight and deep=8) module=xmpp
python3.req: /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages/jabberbot.py: skipping time
shebang.req.files: executable script /usr/src/tmp/python3-module-jabberbot-buildroot/usr/lib/python3/site-packages/jabberbot.py is not executable
Provides: python3(jabberbot)
Requires: python3-module-xmpp, /usr/lib/python3/site-packages, python3(inspect) < 0, python3(logging) < 0, python3(os) < 0, python3(re) < 0, python3(traceback) < 0
Wrote: /usr/src/RPM/RPMS/noarch/python3-module-jabberbot-0.16-alt2.noarch.rpm (w2.lzdio)
4.91user 0.35system 0:10.35elapsed 50%CPU (0avgtext+0avgdata 18152maxresident)k
0inputs+0outputs (0major+123101minor)pagefaults 0swaps
12.34user 3.27system 0:32.41elapsed 48%CPU (0avgtext+0avgdata 101120maxresident)k
248inputs+0outputs (0major+536118minor)pagefaults 0swaps
--- python3-module-jabberbot-0.16-alt2.noarch.rpm.repo 2020-01-30 13:02:14.347742219 +0000
+++ python3-module-jabberbot-0.16-alt2.noarch.rpm.hasher 2021-09-14 10:17:02.370633266 +0000
@@ -1,5 +1,5 @@
-/usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-37.opt-1.pyc 100644 root:root
-/usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-37.opt-2.pyc 100644 root:root
-/usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-37.pyc 100644 root:root
-/usr/lib/python3/site-packages/jabberbot-0.16-py3.7.egg-info 100644 root:root
+/usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-39.opt-1.pyc 100644 root:root
+/usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-39.opt-2.pyc 100644 root:root
+/usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-39.pyc 100644 root:root
+/usr/lib/python3/site-packages/jabberbot-0.16-py3.9.egg-info 100644 root:root
/usr/lib/python3/site-packages/jabberbot.py 100644 root:root
@@ -24,6 +24,6 @@
Provides: python3-module-jabberbot = 0.16-alt2:sisyphus+245277.100.1.1
-File: /usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-37.opt-1.pyc 100644 root:root 175b9126f7512089d7dcd02cf19c4489
-File: /usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-37.opt-2.pyc 100644 root:root 22cb562b467895e515c7e19338b40c2e
-File: /usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-37.pyc 100644 root:root 175b9126f7512089d7dcd02cf19c4489
-File: /usr/lib/python3/site-packages/jabberbot-0.16-py3.7.egg-info 100644 root:root db1881b5f038399dec7f578c619906f8
+File: /usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-39.opt-1.pyc 100644 root:root 8f3ded987d954bec730639ba47267dae
+File: /usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-39.opt-2.pyc 100644 root:root e6849ae9d2ae90f2b78926dcea8a98be
+File: /usr/lib/python3/site-packages/__pycache__/jabberbot.cpython-39.pyc 100644 root:root 8f3ded987d954bec730639ba47267dae
+File: /usr/lib/python3/site-packages/jabberbot-0.16-py3.9.egg-info 100644 root:root db1881b5f038399dec7f578c619906f8
File: /usr/lib/python3/site-packages/jabberbot.py 100644 root:root ba2a22f36c174cb1e8f542049d973b90
@@ -38,2 +38,2 @@
File: /usr/share/doc/python3-module-jabberbot-0.16/examples/uptime.py 100644 root:root 47807cb015c86d0a89206af0181cdaa0
-RPMIdentity: 5e8c8d72d4b1917ce6b7fd4ad4c05f88c8587a305e7bba8ae147183273cc9694a48c4d728983e28fda907f5be2b6b6170cd7f164e0bb93102542d2d22e7aee31
+RPMIdentity: 2e898a9348fcdcc3be7f70314f9104ea77c0c84fd9398bcde833783b116b8c48ccbb13721befcccc8abc65e67469debc34be03226146ac2bf1b9614a8118814d