We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Feature Request: [UploadedNet] Detect Maintenance Mode
Please update the UploadedNet plugin so it detects uploaded maintenance mode.

Adding a timer to re-check indefinitely every 5 minutes or so might be necessary.

Else all links in the queue are skipped as offline and have to be restarted manually.

Here is the html code if Uploaded is in maintenance

http://paste2.org/OaBy4vZ6

EDiT: A check for the head title "uploaded.net - Maintenance - Wartungsarbeiten" should suffice, I guess..


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `module/plugins/hoster/UploadedTo.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 
3 import re
4 import time
5 
6 from module.network.RequestFactory import getURL
7 from module.plugins.internal.CaptchaService import ReCaptcha
8 from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
9 
10 
11 class UploadedTo(SimpleHoster):
12     __name__    = "UploadedTo"
13     __type__    = "hoster"
14     __version__ = "0.86"
15 
16     __pattern__ = r'https?://(?:www\.)?(uploaded\.(to|net)|ul\.to)(/file/|/?\?id=|.*?&id=|/)(?P<ID>\w+)'
17     __config__  = [("use_premium", "bool", "Use premium account if available", True)]
18 
19     __description__ = """Uploaded.net hoster plugin"""
20     __license__     = "GPLv3"
21     __authors__     = [("Walter Purcaro", "vuolter@gmail.com")]
22 
23 
24     DISPOSITION = False
25 
26     API_KEY = "lhF2IeeprweDfu9ccWlxXVVypA5nA3EL"
27 
28     URL_REPLACEMENTS = [(__pattern__ + ".*", r'http://uploaded.net/file/\g<ID>')]
29 
30     LINK_PREMIUM_PATTERN = r'<div class="tfree".*\s*<form method="post" action="(.+?)"'
31 
32     WAIT_PATTERN   = r'Current waiting period: <span>(\d+)'
33     DL_LIMIT_ERROR = r'You have reached the max. number of possible free downloads for this hour'
34 
35 
36     @classmethod
37     def apiInfo(cls, url="", get={}, post={}):
38         info = super(UploadedTo, cls).apiInfo(url)
39 
40         for _i in xrange(5):
41             html = getURL("http://uploaded.net/api/filemultiple",
42                           get={"apikey": cls.API_KEY, 'id_0': re.match(cls.__pattern__, url).group('ID')},
43                           decode=True)
44 
45             if html != "can't find request":
46                 api = html.split(",", 4)
47                 if api[0] == "online":
48                     info.update({'name': api[4].strip(), 'size': api[2], 'status': 2})
49                 else:
50                     info['status'] = 1
51                 break
52             else:
53                 time.sleep(3)
54 
55         return info
56 
57 
58     def setup(self):
59         self.multiDL    = self.resumeDownload = self.premium
60         self.chunkLimit = 1  # critical problems with more chunks
61 
62 
63     def checkErrors(self):
64         if 'var free_enabled = false;' in self.html:
65             self.logError(_("Free-download capacities exhausted"))
66             self.retry(24, 5 * 60)
67 
68         elif "limit-size" in self.html:
69             self.fail(_("File too big for free download"))
70 
71         elif "limit-slot" in self.html:  # Temporary restriction so just wait a bit
72             self.wait(30 * 60, True)
73             self.retry()
74 
75         elif "limit-parallel" in self.html:
76             self.fail(_("Cannot download in parallel"))
77 
78         elif "limit-dl" in self.html or self.DL_LIMIT_ERROR in self.html:  # limit-dl
79             self.wait(3 * 60 * 60, True)
80             self.retry()
81 
82         elif '"err":"captcha"' in self.html:
83             self.invalidCaptcha()
84 
85         else:
86             m = re.search(self.WAIT_PATTERN, self.html)
87             if m:
88                 self.wait(m.group(1))
89 
90 
91     def handleFree(self, pyfile):
92         self.load("http://uploaded.net/language/en", just_header=True)
93 
94         self.html = self.load("http://uploaded.net/js/download.js", decode=True)
95 
96         recaptcha = ReCaptcha(self)
97         response, challenge = recaptcha.challenge()
98 
99         self.html = self.load("http://uploaded.net/io/ticket/captcha/%s" % self.info['pattern']['ID'],
100                               post={'recaptcha_challenge_field': challenge,
101                                     'recaptcha_response_field' : response})
102 
103         if "type:'download'" in self.html:
104             self.correctCaptcha()
105             try:
106                 self.link = re.search("url:'(.+?)'", self.html).group(1)
107 
108             except Exception:
109                 pass
110 
111         self.checkErrors()
112 
113 
114     def checkFile(self, rules={}):
115         if self.checkDownload({'limit-dl': self.DL_LIMIT_ERROR}):
116             self.wait(3 * 60 * 60, True)
117             self.retry()
118 
119         return super(UploadedTo, self).checkFile(rules)
120 
121 
122 getInfo = create_getInfo(UploadedTo)
123
```
--- 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/module/plugins/hoster/UploadedTo.py b/module/plugins/hoster/UploadedTo.py
--- a/module/plugins/hoster/UploadedTo.py
+++ b/module/plugins/hoster/UploadedTo.py
@@ -11,7 +11,7 @@
 class UploadedTo(SimpleHoster):
     __name__    = "UploadedTo"
     __type__    = "hoster"
-    __version__ = "0.86"
+    __version__ = "0.87"
 
     __pattern__ = r'https?://(?:www\.)?(uploaded\.(to|net)|ul\.to)(/file/|/?\?id=|.*?&id=|/)(?P<ID>\w+)'
     __config__  = [("use_premium", "bool", "Use premium account if available", True)]
@@ -27,6 +27,8 @@
 
     URL_REPLACEMENTS = [(__pattern__ + ".*", r'http://uploaded.net/file/\g<ID>')]
 
+    TEMP_OFFLINE_PATTERN = r'<title>uploaded\.net - Maintenance - Wartungsarbeiten</title>'
+
     LINK_PREMIUM_PATTERN = r'<div class="tfree".*\s*<form method="post" action="(.+?)"'
 
     WAIT_PATTERN   = r'Current waiting period: <span>(\d+)'

{"golden_diff": "diff --git a/module/plugins/hoster/UploadedTo.py b/module/plugins/hoster/UploadedTo.py\n--- a/module/plugins/hoster/UploadedTo.py\n+++ b/module/plugins/hoster/UploadedTo.py\n@@ -11,7 +11,7 @@\n class UploadedTo(SimpleHoster):\n     __name__    = \"UploadedTo\"\n     __type__    = \"hoster\"\n-    __version__ = \"0.86\"\n+    __version__ = \"0.87\"\n \n     __pattern__ = r'https?://(?:www\\.)?(uploaded\\.(to|net)|ul\\.to)(/file/|/?\\?id=|.*?&id=|/)(?P<ID>\\w+)'\n     __config__  = [(\"use_premium\", \"bool\", \"Use premium account if available\", True)]\n@@ -27,6 +27,8 @@\n \n     URL_REPLACEMENTS = [(__pattern__ + \".*\", r'http://uploaded.net/file/\\g<ID>')]\n \n+    TEMP_OFFLINE_PATTERN = r'<title>uploaded\\.net - Maintenance - Wartungsarbeiten</title>'\n+\n     LINK_PREMIUM_PATTERN = r'<div class=\"tfree\".*\\s*<form method=\"post\" action=\"(.+?)\"'\n \n     WAIT_PATTERN   = r'Current waiting period: <span>(\\d+)'\n", "issue": "Feature Request: [UploadedNet] Detect Maintenance Mode\nPlease update the UploadedNet plugin so it detects uploaded maintenance mode.\n\nAdding a timer to re-check indefinitely every 5 minutes or so might be necessary.\n\nElse all links in the queue are skipped as offline and have to be restarted manually.\n\nHere is the html code if Uploaded is in maintenance\n\nhttp://paste2.org/OaBy4vZ6\n\nEDiT: A check for the head title \"uploaded.net - Maintenance - Wartungsarbeiten\" should suffice, I guess..\n\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\n\nimport re\nimport time\n\nfrom module.network.RequestFactory import getURL\nfrom module.plugins.internal.CaptchaService import ReCaptcha\nfrom module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo\n\n\nclass UploadedTo(SimpleHoster):\n    __name__    = \"UploadedTo\"\n    __type__    = \"hoster\"\n    __version__ = \"0.86\"\n\n    __pattern__ = r'https?://(?:www\\.)?(uploaded\\.(to|net)|ul\\.to)(/file/|/?\\?id=|.*?&id=|/)(?P<ID>\\w+)'\n    __config__  = [(\"use_premium\", \"bool\", \"Use premium account if available\", True)]\n\n    __description__ = \"\"\"Uploaded.net hoster plugin\"\"\"\n    __license__     = \"GPLv3\"\n    __authors__     = [(\"Walter Purcaro\", \"vuolter@gmail.com\")]\n\n\n    DISPOSITION = False\n\n    API_KEY = \"lhF2IeeprweDfu9ccWlxXVVypA5nA3EL\"\n\n    URL_REPLACEMENTS = [(__pattern__ + \".*\", r'http://uploaded.net/file/\\g<ID>')]\n\n    LINK_PREMIUM_PATTERN = r'<div class=\"tfree\".*\\s*<form method=\"post\" action=\"(.+?)\"'\n\n    WAIT_PATTERN   = r'Current waiting period: <span>(\\d+)'\n    DL_LIMIT_ERROR = r'You have reached the max. number of possible free downloads for this hour'\n\n\n    @classmethod\n    def apiInfo(cls, url=\"\", get={}, post={}):\n        info = super(UploadedTo, cls).apiInfo(url)\n\n        for _i in xrange(5):\n            html = getURL(\"http://uploaded.net/api/filemultiple\",\n                          get={\"apikey\": cls.API_KEY, 'id_0': re.match(cls.__pattern__, url).group('ID')},\n                          decode=True)\n\n            if html != \"can't find request\":\n                api = html.split(\",\", 4)\n                if api[0] == \"online\":\n                    info.update({'name': api[4].strip(), 'size': api[2], 'status': 2})\n                else:\n                    info['status'] = 1\n                break\n            else:\n                time.sleep(3)\n\n        return info\n\n\n    def setup(self):\n        self.multiDL    = self.resumeDownload = self.premium\n        self.chunkLimit = 1  # critical problems with more chunks\n\n\n    def checkErrors(self):\n        if 'var free_enabled = false;' in self.html:\n            self.logError(_(\"Free-download capacities exhausted\"))\n            self.retry(24, 5 * 60)\n\n        elif \"limit-size\" in self.html:\n            self.fail(_(\"File too big for free download\"))\n\n        elif \"limit-slot\" in self.html:  # Temporary restriction so just wait a bit\n            self.wait(30 * 60, True)\n            self.retry()\n\n        elif \"limit-parallel\" in self.html:\n            self.fail(_(\"Cannot download in parallel\"))\n\n        elif \"limit-dl\" in self.html or self.DL_LIMIT_ERROR in self.html:  # limit-dl\n            self.wait(3 * 60 * 60, True)\n            self.retry()\n\n        elif '\"err\":\"captcha\"' in self.html:\n            self.invalidCaptcha()\n\n        else:\n            m = re.search(self.WAIT_PATTERN, self.html)\n            if m:\n                self.wait(m.group(1))\n\n\n    def handleFree(self, pyfile):\n        self.load(\"http://uploaded.net/language/en\", just_header=True)\n\n        self.html = self.load(\"http://uploaded.net/js/download.js\", decode=True)\n\n        recaptcha = ReCaptcha(self)\n        response, challenge = recaptcha.challenge()\n\n        self.html = self.load(\"http://uploaded.net/io/ticket/captcha/%s\" % self.info['pattern']['ID'],\n                              post={'recaptcha_challenge_field': challenge,\n                                    'recaptcha_response_field' : response})\n\n        if \"type:'download'\" in self.html:\n            self.correctCaptcha()\n            try:\n                self.link = re.search(\"url:'(.+?)'\", self.html).group(1)\n\n            except Exception:\n                pass\n\n        self.checkErrors()\n\n\n    def checkFile(self, rules={}):\n        if self.checkDownload({'limit-dl': self.DL_LIMIT_ERROR}):\n            self.wait(3 * 60 * 60, True)\n            self.retry()\n\n        return super(UploadedTo, self).checkFile(rules)\n\n\ngetInfo = create_getInfo(UploadedTo)\n", "path": "module/plugins/hoster/UploadedTo.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\n\nimport re\nimport time\n\nfrom module.network.RequestFactory import getURL\nfrom module.plugins.internal.CaptchaService import ReCaptcha\nfrom module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo\n\n\nclass UploadedTo(SimpleHoster):\n    __name__    = \"UploadedTo\"\n    __type__    = \"hoster\"\n    __version__ = \"0.87\"\n\n    __pattern__ = r'https?://(?:www\\.)?(uploaded\\.(to|net)|ul\\.to)(/file/|/?\\?id=|.*?&id=|/)(?P<ID>\\w+)'\n    __config__  = [(\"use_premium\", \"bool\", \"Use premium account if available\", True)]\n\n    __description__ = \"\"\"Uploaded.net hoster plugin\"\"\"\n    __license__     = \"GPLv3\"\n    __authors__     = [(\"Walter Purcaro\", \"vuolter@gmail.com\")]\n\n\n    DISPOSITION = False\n\n    API_KEY = \"lhF2IeeprweDfu9ccWlxXVVypA5nA3EL\"\n\n    URL_REPLACEMENTS = [(__pattern__ + \".*\", r'http://uploaded.net/file/\\g<ID>')]\n\n    TEMP_OFFLINE_PATTERN = r'<title>uploaded\\.net - Maintenance - Wartungsarbeiten</title>'\n\n    LINK_PREMIUM_PATTERN = r'<div class=\"tfree\".*\\s*<form method=\"post\" action=\"(.+?)\"'\n\n    WAIT_PATTERN   = r'Current waiting period: <span>(\\d+)'\n    DL_LIMIT_ERROR = r'You have reached the max. number of possible free downloads for this hour'\n\n\n    @classmethod\n    def apiInfo(cls, url=\"\", get={}, post={}):\n        info = super(UploadedTo, cls).apiInfo(url)\n\n        for _i in xrange(5):\n            html = getURL(\"http://uploaded.net/api/filemultiple\",\n                          get={\"apikey\": cls.API_KEY, 'id_0': re.match(cls.__pattern__, url).group('ID')},\n                          decode=True)\n\n            if html != \"can't find request\":\n                api = html.split(\",\", 4)\n                if api[0] == \"online\":\n                    info.update({'name': api[4].strip(), 'size': api[2], 'status': 2})\n                else:\n                    info['status'] = 1\n                break\n            else:\n                time.sleep(3)\n\n        return info\n\n\n    def setup(self):\n        self.multiDL    = self.resumeDownload = self.premium\n        self.chunkLimit = 1  # critical problems with more chunks\n\n\n    def checkErrors(self):\n        if 'var free_enabled = false;' in self.html:\n            self.logError(_(\"Free-download capacities exhausted\"))\n            self.retry(24, 5 * 60)\n\n        elif \"limit-size\" in self.html:\n            self.fail(_(\"File too big for free download\"))\n\n        elif \"limit-slot\" in self.html:  # Temporary restriction so just wait a bit\n            self.wait(30 * 60, True)\n            self.retry()\n\n        elif \"limit-parallel\" in self.html:\n            self.fail(_(\"Cannot download in parallel\"))\n\n        elif \"limit-dl\" in self.html or self.DL_LIMIT_ERROR in self.html:  # limit-dl\n            self.wait(3 * 60 * 60, True)\n            self.retry()\n\n        elif '\"err\":\"captcha\"' in self.html:\n            self.invalidCaptcha()\n\n        else:\n            m = re.search(self.WAIT_PATTERN, self.html)\n            if m:\n                self.wait(m.group(1))\n\n\n    def handleFree(self, pyfile):\n        self.load(\"http://uploaded.net/language/en\", just_header=True)\n\n        self.html = self.load(\"http://uploaded.net/js/download.js\", decode=True)\n\n        recaptcha = ReCaptcha(self)\n        response, challenge = recaptcha.challenge()\n\n        self.html = self.load(\"http://uploaded.net/io/ticket/captcha/%s\" % self.info['pattern']['ID'],\n                              post={'recaptcha_challenge_field': challenge,\n                                    'recaptcha_response_field' : response})\n\n        if \"type:'download'\" in self.html:\n            self.correctCaptcha()\n            try:\n                self.link = re.search(\"url:'(.+?)'\", self.html).group(1)\n\n            except Exception:\n                pass\n\n        self.checkErrors()\n\n\n    def checkFile(self, rules={}):\n        if self.checkDownload({'limit-dl': self.DL_LIMIT_ERROR}):\n            self.wait(3 * 60 * 60, True)\n            self.retry()\n\n        return super(UploadedTo, self).checkFile(rules)\n\n\ngetInfo = create_getInfo(UploadedTo)\n", "path": "module/plugins/hoster/UploadedTo.py"}]}