prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Theme settings
  There needs to be some way to change settings in themes themselves. People complain about a lot of nonsensical things that they should fix in their forks and not need to be a concern in master. 
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `CTFd/constants/config.py`
  Content:
  ```
  1 from CTFd.utils import get_config
  2 from CTFd.utils.helpers import markup
  3 
  4 
  5 class _ConfigsWrapper:
  6     def __getattr__(self, attr):
  7         return get_config(attr)
  8 
  9     @property
  10     def ctf_name(self):
  11         return get_config("theme_header", default="CTFd")
  12 
  13     @property
  14     def theme_header(self):
  15         return markup(get_config("theme_header", default=""))
  16 
  17     @property
  18     def theme_footer(self):
  19         return markup(get_config("theme_footer", default=""))
  20 
  21 
  22 Configs = _ConfigsWrapper()
  23
  ```
  --- 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()
  
  ```
  
golden_diff: diff --git a/CTFd/constants/config.py b/CTFd/constants/config.py
  --- a/CTFd/constants/config.py
  +++ b/CTFd/constants/config.py
  @@ -1,3 +1,5 @@
  +import json
  +
   from CTFd.utils import get_config
   from CTFd.utils.helpers import markup
   
  @@ -18,5 +20,9 @@
       def theme_footer(self):
           return markup(get_config("theme_footer", default=""))
   
  +    @property
  +    def theme_settings(self):
  +        return json.loads(get_config("theme_settings", default="null"))
  +
   
   Configs = _ConfigsWrapper()
  
verification_info: {"golden_diff": "diff --git a/CTFd/constants/config.py b/CTFd/constants/config.py\n--- a/CTFd/constants/config.py\n+++ b/CTFd/constants/config.py\n@@ -1,3 +1,5 @@\n+import json\n+\n from CTFd.utils import get_config\n from CTFd.utils.helpers import markup\n \n@@ -18,5 +20,9 @@\n     def theme_footer(self):\n         return markup(get_config(\"theme_footer\", default=\"\"))\n \n+    @property\n+    def theme_settings(self):\n+        return json.loads(get_config(\"theme_settings\", default=\"null\"))\n+\n \n Configs = _ConfigsWrapper()\n", "issue": "Theme settings\nThere needs to be some way to change settings in themes themselves. People complain about a lot of nonsensical things that they should fix in their forks and not need to be a concern in master. \n", "before_files": [{"content": "from CTFd.utils import get_config\nfrom CTFd.utils.helpers import markup\n\n\nclass _ConfigsWrapper:\n    def __getattr__(self, attr):\n        return get_config(attr)\n\n    @property\n    def ctf_name(self):\n        return get_config(\"theme_header\", default=\"CTFd\")\n\n    @property\n    def theme_header(self):\n        return markup(get_config(\"theme_header\", default=\"\"))\n\n    @property\n    def theme_footer(self):\n        return markup(get_config(\"theme_footer\", default=\"\"))\n\n\nConfigs = _ConfigsWrapper()\n", "path": "CTFd/constants/config.py"}], "after_files": [{"content": "import json\n\nfrom CTFd.utils import get_config\nfrom CTFd.utils.helpers import markup\n\n\nclass _ConfigsWrapper:\n    def __getattr__(self, attr):\n        return get_config(attr)\n\n    @property\n    def ctf_name(self):\n        return get_config(\"theme_header\", default=\"CTFd\")\n\n    @property\n    def theme_header(self):\n        return markup(get_config(\"theme_header\", default=\"\"))\n\n    @property\n    def theme_footer(self):\n        return markup(get_config(\"theme_footer\", default=\"\"))\n\n    @property\n    def theme_settings(self):\n        return json.loads(get_config(\"theme_settings\", default=\"null\"))\n\n\nConfigs = _ConfigsWrapper()\n", "path": "CTFd/constants/config.py"}]}