We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Upload logo is not working
### CKAN Version if known (or site URL)

2.8+ 
### Please describe the expected behaviour
When uploading logo from config page, we should see new logo on the portal

### Please describe the actual behaviour
Logo is not uploaded 

### What steps can be taken to reproduce the issue? 
Go to 
https://beta.ckan.org/ckan-admin/config

Upload an image 
Update config

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `ckan/views/admin.py`
Content:
```
1 # encoding: utf-8
2 
3 import logging
4 
5 from ckan.controllers.home import CACHE_PARAMETERS
6 from flask import Blueprint
7 from flask.views import MethodView
8 
9 import ckan.lib.app_globals as app_globals
10 import ckan.lib.base as base
11 import ckan.lib.helpers as h
12 import ckan.lib.navl.dictization_functions as dict_fns
13 import ckan.logic as logic
14 import ckan.model as model
15 from ckan.common import g, _, config, request
16 
17 log = logging.getLogger(__name__)
18 
19 admin = Blueprint(u'admin', __name__, url_prefix=u'/ckan-admin')
20 
21 
22 def _get_sysadmins():
23     q = model.Session.query(model.User).filter(model.User.sysadmin.is_(True),
24                                                model.User.state == u'active')
25     return q
26 
27 
28 def _get_config_options():
29     styles = [{
30         u'text': u'Default',
31         u'value': u'/base/css/main.css'
32     }, {
33         u'text': u'Red',
34         u'value': u'/base/css/red.css'
35     }, {
36         u'text': u'Green',
37         u'value': u'/base/css/green.css'
38     }, {
39         u'text': u'Maroon',
40         u'value': u'/base/css/maroon.css'
41     }, {
42         u'text': u'Fuchsia',
43         u'value': u'/base/css/fuchsia.css'
44     }]
45 
46     homepages = [{
47         u'value': u'1',
48         u'text': (u'Introductory area, search, featured'
49                   u' group and featured organization')
50     }, {
51         u'value': u'2',
52         u'text': (u'Search, stats, introductory area, '
53                   u'featured organization and featured group')
54     }, {
55         u'value': u'3',
56         u'text': u'Search, introductory area and stats'
57     }]
58 
59     return dict(styles=styles, homepages=homepages)
60 
61 
62 def _get_config_items():
63     return [
64         u'ckan.site_title', u'ckan.main_css', u'ckan.site_description',
65         u'ckan.site_logo', u'ckan.site_about', u'ckan.site_intro_text',
66         u'ckan.site_custom_css', u'ckan.homepage_style'
67     ]
68 
69 
70 @admin.before_request
71 def before_request():
72     try:
73         context = dict(model=model, user=g.user, auth_user_obj=g.userobj)
74         logic.check_access(u'sysadmin', context)
75     except logic.NotAuthorized:
76         base.abort(403, _(u'Need to be system administrator to administer'))
77 
78 
79 def index():
80     data = dict(sysadmins=[a.name for a in _get_sysadmins()])
81     return base.render(u'admin/index.html', extra_vars=data)
82 
83 
84 class ResetConfigView(MethodView):
85     def get(self):
86         if u'cancel' in request.args:
87             return h.redirect_to(u'admin.config')
88         return base.render(u'admin/confirm_reset.html', extra_vars={})
89 
90     def post(self):
91         # remove sys info items
92         for item in _get_config_items():
93             model.delete_system_info(item)
94         # reset to values in config
95         app_globals.reset()
96         return h.redirect_to(u'admin.config')
97 
98 
99 class ConfigView(MethodView):
100     def get(self):
101         items = _get_config_options()
102         schema = logic.schema.update_configuration_schema()
103         data = {}
104         for key in schema:
105             data[key] = config.get(key)
106 
107         vars = dict(data=data, errors={}, **items)
108 
109         return base.render(u'admin/config.html', extra_vars=vars)
110 
111     def post(self):
112         try:
113             data_dict = logic.clean_dict(
114                 dict_fns.unflatten(
115                     logic.tuplize_dict(
116                         logic.parse_params(
117                             request.form, ignore_keys=CACHE_PARAMETERS))))
118             del data_dict['save']
119             data = logic.get_action(u'config_option_update')({
120                 u'user': g.user
121             }, data_dict)
122 
123         except logic.ValidationError as e:
124             items = _get_config_options()
125             data = request.form
126             errors = e.error_dict
127             error_summary = e.error_summary
128             vars = dict(
129                 data=data,
130                 errors=errors,
131                 error_summary=error_summary,
132                 form_items=items,
133                 **items)
134             return base.render(u'admin/config.html', extra_vars=vars)
135 
136         return h.redirect_to(u'admin.config')
137 
138 
139 class TrashView(MethodView):
140     def __init__(self):
141         self.deleted_packages = model.Session.query(
142             model.Package).filter_by(state=model.State.DELETED)
143 
144     def get(self):
145         data = dict(deleted_packages=self.deleted_packages)
146         return base.render(u'admin/trash.html', extra_vars=data)
147 
148     def post(self):
149         deleted_revisions = model.Session.query(
150             model.Revision).filter_by(state=model.State.DELETED)
151         # NB: we repeat retrieval of of revisions
152         # this is obviously inefficient (but probably not *that* bad)
153         # but has to be done to avoid (odd) sqlalchemy errors (when doing
154         # purge packages) of form: "this object already exists in the
155         # session"
156         msgs = []
157         if (u'purge-packages' in request.form) or (
158                 u'purge-revisions' in request.form):
159             if u'purge-packages' in request.form:
160                 revs_to_purge = []
161                 for pkg in self.deleted_packages:
162                     revisions = [x[0] for x in pkg.all_related_revisions]
163                     # ensure no accidental purging of other(non-deleted)
164                     # packages initially just avoided purging revisions
165                     # where non-deleted packages were affected
166                     # however this lead to confusing outcomes e.g.
167                     # we succesfully deleted revision in which package
168                     # was deleted (so package now active again) but no
169                     # other revisions
170                     problem = False
171                     for r in revisions:
172                         affected_pkgs = set(r.packages).\
173                             difference(set(self.deleted_packages))
174                         if affected_pkgs:
175                             msg = _(u'Cannot purge package %s as '
176                                     u'associated revision %s includes '
177                                     u'non-deleted packages %s')
178                             msg = msg % (pkg.id, r.id,
179                                          [pkg.id for r in affected_pkgs])
180                             msgs.append(msg)
181                             problem = True
182                             break
183                     if not problem:
184                         revs_to_purge += [r.id for r in revisions]
185                 model.Session.remove()
186             else:
187                 revs_to_purge = [rev.id for rev in deleted_revisions]
188             revs_to_purge = list(set(revs_to_purge))
189             for id in revs_to_purge:
190                 revision = model.Session.query(model.Revision).get(id)
191                 try:
192                     # TODO deleting the head revision corrupts the edit
193                     # page Ensure that whatever 'head' pointer is used
194                     # gets moved down to the next revision
195                     model.repo.purge_revision(revision, leave_record=False)
196                 except Exception as inst:
197                     msg = _(u'Problem purging revision %s: %s') % (id, inst)
198                     msgs.append(msg)
199             h.flash_success(_(u'Purge complete'))
200         else:
201             msgs.append(_(u'Action not implemented.'))
202 
203         for msg in msgs:
204             h.flash_error(msg)
205         return h.redirect_to(u'admin.trash')
206 
207 
208 admin.add_url_rule(u'/', view_func=index, strict_slashes=False)
209 admin.add_url_rule(
210     u'/reset_config', view_func=ResetConfigView.as_view(str(u'reset_config')))
211 admin.add_url_rule(u'/config', view_func=ConfigView.as_view(str(u'config')))
212 admin.add_url_rule(u'/trash', view_func=TrashView.as_view(str(u'trash')))
213
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/ckan/views/admin.py b/ckan/views/admin.py
--- a/ckan/views/admin.py
+++ b/ckan/views/admin.py
@@ -110,11 +110,14 @@
 
     def post(self):
         try:
+            req = request.form.copy()
+            req.update(request.files.to_dict())
             data_dict = logic.clean_dict(
                 dict_fns.unflatten(
                     logic.tuplize_dict(
                         logic.parse_params(
-                            request.form, ignore_keys=CACHE_PARAMETERS))))
+                            req, ignore_keys=CACHE_PARAMETERS))))
+
             del data_dict['save']
             data = logic.get_action(u'config_option_update')({
                 u'user': g.user

{"golden_diff": "diff --git a/ckan/views/admin.py b/ckan/views/admin.py\n--- a/ckan/views/admin.py\n+++ b/ckan/views/admin.py\n@@ -110,11 +110,14 @@\n \n     def post(self):\n         try:\n+            req = request.form.copy()\n+            req.update(request.files.to_dict())\n             data_dict = logic.clean_dict(\n                 dict_fns.unflatten(\n                     logic.tuplize_dict(\n                         logic.parse_params(\n-                            request.form, ignore_keys=CACHE_PARAMETERS))))\n+                            req, ignore_keys=CACHE_PARAMETERS))))\n+\n             del data_dict['save']\n             data = logic.get_action(u'config_option_update')({\n                 u'user': g.user\n", "issue": "Upload logo is not working\n### CKAN Version if known (or site URL)\r\n\r\n2.8+ \r\n### Please describe the expected behaviour\r\nWhen uploading logo from config page, we should see new logo on the portal\r\n\r\n### Please describe the actual behaviour\r\nLogo is not uploaded \r\n\r\n### What steps can be taken to reproduce the issue? \r\nGo to \r\nhttps://beta.ckan.org/ckan-admin/config\r\n\r\nUpload an image \r\nUpdate config\n", "before_files": [{"content": "# encoding: utf-8\n\nimport logging\n\nfrom ckan.controllers.home import CACHE_PARAMETERS\nfrom flask import Blueprint\nfrom flask.views import MethodView\n\nimport ckan.lib.app_globals as app_globals\nimport ckan.lib.base as base\nimport ckan.lib.helpers as h\nimport ckan.lib.navl.dictization_functions as dict_fns\nimport ckan.logic as logic\nimport ckan.model as model\nfrom ckan.common import g, _, config, request\n\nlog = logging.getLogger(__name__)\n\nadmin = Blueprint(u'admin', __name__, url_prefix=u'/ckan-admin')\n\n\ndef _get_sysadmins():\n    q = model.Session.query(model.User).filter(model.User.sysadmin.is_(True),\n                                               model.User.state == u'active')\n    return q\n\n\ndef _get_config_options():\n    styles = [{\n        u'text': u'Default',\n        u'value': u'/base/css/main.css'\n    }, {\n        u'text': u'Red',\n        u'value': u'/base/css/red.css'\n    }, {\n        u'text': u'Green',\n        u'value': u'/base/css/green.css'\n    }, {\n        u'text': u'Maroon',\n        u'value': u'/base/css/maroon.css'\n    }, {\n        u'text': u'Fuchsia',\n        u'value': u'/base/css/fuchsia.css'\n    }]\n\n    homepages = [{\n        u'value': u'1',\n        u'text': (u'Introductory area, search, featured'\n                  u' group and featured organization')\n    }, {\n        u'value': u'2',\n        u'text': (u'Search, stats, introductory area, '\n                  u'featured organization and featured group')\n    }, {\n        u'value': u'3',\n        u'text': u'Search, introductory area and stats'\n    }]\n\n    return dict(styles=styles, homepages=homepages)\n\n\ndef _get_config_items():\n    return [\n        u'ckan.site_title', u'ckan.main_css', u'ckan.site_description',\n        u'ckan.site_logo', u'ckan.site_about', u'ckan.site_intro_text',\n        u'ckan.site_custom_css', u'ckan.homepage_style'\n    ]\n\n\n@admin.before_request\ndef before_request():\n    try:\n        context = dict(model=model, user=g.user, auth_user_obj=g.userobj)\n        logic.check_access(u'sysadmin', context)\n    except logic.NotAuthorized:\n        base.abort(403, _(u'Need to be system administrator to administer'))\n\n\ndef index():\n    data = dict(sysadmins=[a.name for a in _get_sysadmins()])\n    return base.render(u'admin/index.html', extra_vars=data)\n\n\nclass ResetConfigView(MethodView):\n    def get(self):\n        if u'cancel' in request.args:\n            return h.redirect_to(u'admin.config')\n        return base.render(u'admin/confirm_reset.html', extra_vars={})\n\n    def post(self):\n        # remove sys info items\n        for item in _get_config_items():\n            model.delete_system_info(item)\n        # reset to values in config\n        app_globals.reset()\n        return h.redirect_to(u'admin.config')\n\n\nclass ConfigView(MethodView):\n    def get(self):\n        items = _get_config_options()\n        schema = logic.schema.update_configuration_schema()\n        data = {}\n        for key in schema:\n            data[key] = config.get(key)\n\n        vars = dict(data=data, errors={}, **items)\n\n        return base.render(u'admin/config.html', extra_vars=vars)\n\n    def post(self):\n        try:\n            data_dict = logic.clean_dict(\n                dict_fns.unflatten(\n                    logic.tuplize_dict(\n                        logic.parse_params(\n                            request.form, ignore_keys=CACHE_PARAMETERS))))\n            del data_dict['save']\n            data = logic.get_action(u'config_option_update')({\n                u'user': g.user\n            }, data_dict)\n\n        except logic.ValidationError as e:\n            items = _get_config_options()\n            data = request.form\n            errors = e.error_dict\n            error_summary = e.error_summary\n            vars = dict(\n                data=data,\n                errors=errors,\n                error_summary=error_summary,\n                form_items=items,\n                **items)\n            return base.render(u'admin/config.html', extra_vars=vars)\n\n        return h.redirect_to(u'admin.config')\n\n\nclass TrashView(MethodView):\n    def __init__(self):\n        self.deleted_packages = model.Session.query(\n            model.Package).filter_by(state=model.State.DELETED)\n\n    def get(self):\n        data = dict(deleted_packages=self.deleted_packages)\n        return base.render(u'admin/trash.html', extra_vars=data)\n\n    def post(self):\n        deleted_revisions = model.Session.query(\n            model.Revision).filter_by(state=model.State.DELETED)\n        # NB: we repeat retrieval of of revisions\n        # this is obviously inefficient (but probably not *that* bad)\n        # but has to be done to avoid (odd) sqlalchemy errors (when doing\n        # purge packages) of form: \"this object already exists in the\n        # session\"\n        msgs = []\n        if (u'purge-packages' in request.form) or (\n                u'purge-revisions' in request.form):\n            if u'purge-packages' in request.form:\n                revs_to_purge = []\n                for pkg in self.deleted_packages:\n                    revisions = [x[0] for x in pkg.all_related_revisions]\n                    # ensure no accidental purging of other(non-deleted)\n                    # packages initially just avoided purging revisions\n                    # where non-deleted packages were affected\n                    # however this lead to confusing outcomes e.g.\n                    # we succesfully deleted revision in which package\n                    # was deleted (so package now active again) but no\n                    # other revisions\n                    problem = False\n                    for r in revisions:\n                        affected_pkgs = set(r.packages).\\\n                            difference(set(self.deleted_packages))\n                        if affected_pkgs:\n                            msg = _(u'Cannot purge package %s as '\n                                    u'associated revision %s includes '\n                                    u'non-deleted packages %s')\n                            msg = msg % (pkg.id, r.id,\n                                         [pkg.id for r in affected_pkgs])\n                            msgs.append(msg)\n                            problem = True\n                            break\n                    if not problem:\n                        revs_to_purge += [r.id for r in revisions]\n                model.Session.remove()\n            else:\n                revs_to_purge = [rev.id for rev in deleted_revisions]\n            revs_to_purge = list(set(revs_to_purge))\n            for id in revs_to_purge:\n                revision = model.Session.query(model.Revision).get(id)\n                try:\n                    # TODO deleting the head revision corrupts the edit\n                    # page Ensure that whatever 'head' pointer is used\n                    # gets moved down to the next revision\n                    model.repo.purge_revision(revision, leave_record=False)\n                except Exception as inst:\n                    msg = _(u'Problem purging revision %s: %s') % (id, inst)\n                    msgs.append(msg)\n            h.flash_success(_(u'Purge complete'))\n        else:\n            msgs.append(_(u'Action not implemented.'))\n\n        for msg in msgs:\n            h.flash_error(msg)\n        return h.redirect_to(u'admin.trash')\n\n\nadmin.add_url_rule(u'/', view_func=index, strict_slashes=False)\nadmin.add_url_rule(\n    u'/reset_config', view_func=ResetConfigView.as_view(str(u'reset_config')))\nadmin.add_url_rule(u'/config', view_func=ConfigView.as_view(str(u'config')))\nadmin.add_url_rule(u'/trash', view_func=TrashView.as_view(str(u'trash')))\n", "path": "ckan/views/admin.py"}], "after_files": [{"content": "# encoding: utf-8\n\nimport logging\n\nfrom ckan.controllers.home import CACHE_PARAMETERS\nfrom flask import Blueprint\nfrom flask.views import MethodView\n\nimport ckan.lib.app_globals as app_globals\nimport ckan.lib.base as base\nimport ckan.lib.helpers as h\nimport ckan.lib.navl.dictization_functions as dict_fns\nimport ckan.logic as logic\nimport ckan.model as model\nfrom ckan.common import g, _, config, request\n\nlog = logging.getLogger(__name__)\n\nadmin = Blueprint(u'admin', __name__, url_prefix=u'/ckan-admin')\n\n\ndef _get_sysadmins():\n    q = model.Session.query(model.User).filter(model.User.sysadmin.is_(True),\n                                               model.User.state == u'active')\n    return q\n\n\ndef _get_config_options():\n    styles = [{\n        u'text': u'Default',\n        u'value': u'/base/css/main.css'\n    }, {\n        u'text': u'Red',\n        u'value': u'/base/css/red.css'\n    }, {\n        u'text': u'Green',\n        u'value': u'/base/css/green.css'\n    }, {\n        u'text': u'Maroon',\n        u'value': u'/base/css/maroon.css'\n    }, {\n        u'text': u'Fuchsia',\n        u'value': u'/base/css/fuchsia.css'\n    }]\n\n    homepages = [{\n        u'value': u'1',\n        u'text': (u'Introductory area, search, featured'\n                  u' group and featured organization')\n    }, {\n        u'value': u'2',\n        u'text': (u'Search, stats, introductory area, '\n                  u'featured organization and featured group')\n    }, {\n        u'value': u'3',\n        u'text': u'Search, introductory area and stats'\n    }]\n\n    return dict(styles=styles, homepages=homepages)\n\n\ndef _get_config_items():\n    return [\n        u'ckan.site_title', u'ckan.main_css', u'ckan.site_description',\n        u'ckan.site_logo', u'ckan.site_about', u'ckan.site_intro_text',\n        u'ckan.site_custom_css', u'ckan.homepage_style'\n    ]\n\n\n@admin.before_request\ndef before_request():\n    try:\n        context = dict(model=model, user=g.user, auth_user_obj=g.userobj)\n        logic.check_access(u'sysadmin', context)\n    except logic.NotAuthorized:\n        base.abort(403, _(u'Need to be system administrator to administer'))\n\n\ndef index():\n    data = dict(sysadmins=[a.name for a in _get_sysadmins()])\n    return base.render(u'admin/index.html', extra_vars=data)\n\n\nclass ResetConfigView(MethodView):\n    def get(self):\n        if u'cancel' in request.args:\n            return h.redirect_to(u'admin.config')\n        return base.render(u'admin/confirm_reset.html', extra_vars={})\n\n    def post(self):\n        # remove sys info items\n        for item in _get_config_items():\n            model.delete_system_info(item)\n        # reset to values in config\n        app_globals.reset()\n        return h.redirect_to(u'admin.config')\n\n\nclass ConfigView(MethodView):\n    def get(self):\n        items = _get_config_options()\n        schema = logic.schema.update_configuration_schema()\n        data = {}\n        for key in schema:\n            data[key] = config.get(key)\n\n        vars = dict(data=data, errors={}, **items)\n\n        return base.render(u'admin/config.html', extra_vars=vars)\n\n    def post(self):\n        try:\n            req = request.form.copy()\n            req.update(request.files.to_dict())\n            data_dict = logic.clean_dict(\n                dict_fns.unflatten(\n                    logic.tuplize_dict(\n                        logic.parse_params(\n                            req, ignore_keys=CACHE_PARAMETERS))))\n\n            del data_dict['save']\n            data = logic.get_action(u'config_option_update')({\n                u'user': g.user\n            }, data_dict)\n\n        except logic.ValidationError as e:\n            items = _get_config_options()\n            data = request.form\n            errors = e.error_dict\n            error_summary = e.error_summary\n            vars = dict(\n                data=data,\n                errors=errors,\n                error_summary=error_summary,\n                form_items=items,\n                **items)\n            return base.render(u'admin/config.html', extra_vars=vars)\n\n        return h.redirect_to(u'admin.config')\n\n\nclass TrashView(MethodView):\n    def __init__(self):\n        self.deleted_packages = model.Session.query(\n            model.Package).filter_by(state=model.State.DELETED)\n\n    def get(self):\n        data = dict(deleted_packages=self.deleted_packages)\n        return base.render(u'admin/trash.html', extra_vars=data)\n\n    def post(self):\n        deleted_revisions = model.Session.query(\n            model.Revision).filter_by(state=model.State.DELETED)\n        # NB: we repeat retrieval of of revisions\n        # this is obviously inefficient (but probably not *that* bad)\n        # but has to be done to avoid (odd) sqlalchemy errors (when doing\n        # purge packages) of form: \"this object already exists in the\n        # session\"\n        msgs = []\n        if (u'purge-packages' in request.form) or (\n                u'purge-revisions' in request.form):\n            if u'purge-packages' in request.form:\n                revs_to_purge = []\n                for pkg in self.deleted_packages:\n                    revisions = [x[0] for x in pkg.all_related_revisions]\n                    # ensure no accidental purging of other(non-deleted)\n                    # packages initially just avoided purging revisions\n                    # where non-deleted packages were affected\n                    # however this lead to confusing outcomes e.g.\n                    # we succesfully deleted revision in which package\n                    # was deleted (so package now active again) but no\n                    # other revisions\n                    problem = False\n                    for r in revisions:\n                        affected_pkgs = set(r.packages).\\\n                            difference(set(self.deleted_packages))\n                        if affected_pkgs:\n                            msg = _(u'Cannot purge package %s as '\n                                    u'associated revision %s includes '\n                                    u'non-deleted packages %s')\n                            msg = msg % (pkg.id, r.id,\n                                         [pkg.id for r in affected_pkgs])\n                            msgs.append(msg)\n                            problem = True\n                            break\n                    if not problem:\n                        revs_to_purge += [r.id for r in revisions]\n                model.Session.remove()\n            else:\n                revs_to_purge = [rev.id for rev in deleted_revisions]\n            revs_to_purge = list(set(revs_to_purge))\n            for id in revs_to_purge:\n                revision = model.Session.query(model.Revision).get(id)\n                try:\n                    # TODO deleting the head revision corrupts the edit\n                    # page Ensure that whatever 'head' pointer is used\n                    # gets moved down to the next revision\n                    model.repo.purge_revision(revision, leave_record=False)\n                except Exception as inst:\n                    msg = _(u'Problem purging revision %s: %s') % (id, inst)\n                    msgs.append(msg)\n            h.flash_success(_(u'Purge complete'))\n        else:\n            msgs.append(_(u'Action not implemented.'))\n\n        for msg in msgs:\n            h.flash_error(msg)\n        return h.redirect_to(u'admin.trash')\n\n\nadmin.add_url_rule(u'/', view_func=index, strict_slashes=False)\nadmin.add_url_rule(\n    u'/reset_config', view_func=ResetConfigView.as_view(str(u'reset_config')))\nadmin.add_url_rule(u'/config', view_func=ConfigView.as_view(str(u'config')))\nadmin.add_url_rule(u'/trash', view_func=TrashView.as_view(str(u'trash')))\n", "path": "ckan/views/admin.py"}]}