diff --git a/BTPanel/__init__.py b/BTPanel/__init__.py index 47c317cf..ef7f4925 100755 --- a/BTPanel/__init__.py +++ b/BTPanel/__init__.py @@ -4064,6 +4064,15 @@ def panel_monitor_v2(pdata=None): 'load_and_up_flow', 'get_request_count_by_hour') return publicObject(dataObject, defs, None, pdata) +@app.route(route_v2 + '/site_monitor', methods=method_all) +def monitor(pdata=None): + # 网站统计预览 + comReturn = comm.local() + if comReturn: return comReturn + from projectModelV2 import monitorModel + dataObject = monitorModel.main() + defs = ('get_overview', 'get_site_overview') + return publicObject(dataObject, defs, None, pdata) @app.route(route_v2 + '/san', methods=method_all) def san_baseline_v2(pdata=None): @@ -4208,6 +4217,7 @@ def abnormal_v2(pdata=None): @app.route(route_v2 + '/project/quota//html', methods=method_all) @app.route(route_v2 + '/project/proxy/', methods=method_all) @app.route(route_v2 + '/project/proxy//html', methods=method_all) +@app.route(route_v2 + '/project/webbasicscanning/', methods=method_all) def project_v2(def_name): if request.method not in ['GET', 'POST']: return path_split = request.path.split("/") @@ -4584,6 +4594,7 @@ def config_v2(pdata=None): 'set_theme', 'set_panel_asset', 'get_panel_asset', + 'get_alarm_services', ) return publicObject(config_v2.config(), defs, None, pdata) @@ -4653,8 +4664,7 @@ def panel_data_v2(pdata=None): defs = ('setPs', 'getData', 'getFind', 'getKey', 'getSiteWafConfig', 'getSiteThirtyTotal','get_wp_classification','get_wp_site_list') return publicObject(dataObject, defs, None, pdata) - -# 计划弃置 +# todo 计划调整 @app.route(route_v2 + '/ssl', methods=method_all) def ssl_v2(pdata=None): # 商业SSL证书申请接口 @@ -4704,8 +4714,6 @@ def ssl_v2(pdata=None): 'apply_order_ca', 'apply_cert_install_pay', 'verify_mail_any', - - # 'pay_test' ) get = get_input() @@ -4713,9 +4721,6 @@ def ssl_v2(pdata=None): from io import BytesIO import base64 result = toObject.download_cert(get) - # public.print_log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@1111111111111111 result: {}".format(result)) - # {'success': False, 'res': '[code: 0] no data [file: /www/wwwroot/192.168.1.139/app/Api/Cert/controllers/Cert.php] [line: 955]', 'nonce': 1706498844} - fp = BytesIO(base64.b64decode(result['res']['data'])) return send_file(fp, download_name=result['res']['filename'], @@ -4724,6 +4729,22 @@ def ssl_v2(pdata=None): result = publicObject(toObject, defs, get.action, get) return result +@app.route(route_v2 + '/overview', methods=method_all) +def overview_v2(pdata=None): + # 首页overview管理 + comReturn = comm.local() + if comReturn: return comReturn + from overviewV2.api import OverViewApi + defs = ( + "overview_template", + "get_overview", + "add_overview", + "set_overview", + "del_overview", + "sort_overview", + "get_overview_window", + ) + return publicObject(OverViewApi(), defs, None, pdata) @app.route(route_v2 + "/business_ssl", methods=method_all) def business_ssl(pdata=None): @@ -4896,7 +4917,7 @@ def plugin_v2(pdata=None): 'install', 'unInstall', 'getPluginList', 'getPluginInfo', 'get_make_args', 'add_make_args', 'getPluginStatus', 'setPluginStatus', 'a', 'getCloudPlugin', 'getConfigHtml', - 'savePluginSort', 'del_make_args', 'set_make_args') + 'savePluginSort', 'del_make_args', 'set_make_args', 'get_download_speed') return publicObject(pluginObject, defs, None, pdata) diff --git a/BTPanel/languages/all/cht.json b/BTPanel/languages/all/cht.json index 05fcd48f..0f5f5692 100644 --- a/BTPanel/languages/all/cht.json +++ b/BTPanel/languages/all/cht.json @@ -4080,5 +4080,121 @@ "8170f5d37a617dcbf16fe8dd414073dc": "從git導入成功", "6e40e5a8ad741ca4bd714fa52ef32333": "文件格式不正確,請選擇zip或gz文件", "c4996991c50032c9b296c11da356acb2": "導入失敗:{}", - "8ad9bdaced3b1cd99f1fa9d32c9a7eca": "導入成功" + "8ad9bdaced3b1cd99f1fa9d32c9a7eca": "導入成功", + "76749c0a7ec555a1cdf4c4dfde301958": "目標壓縮文件不能為空!", + "95b045c4bc0ef440acd6156fb42b50c6": "壓縮失敗:未生成目標文件{}", + "ecdc6ad598bdc08ff236f448e1d03e13": "未找到域名記錄", + "89ae4391631ed393c6c0ac36a2a0810a": "Cache 目錄中有受限制的文件。請嘗試從 LiteSpeed 緩存中清除它們", + "825d333e554f58230379a1cbc8372480": "緩存清除失敗。請檢查Nginx Helper插件是否正常運行。", + "e783e39c78ccc8fa455396f454b86c79": "獲取WP Toolkit配置信息失敗", + "45b3768a0b9da76f12937e20e17ff8c9": "{} 執行一次", + "7a13562d776fdfdc9213a82f7f01d501": "計時器文件不存在。嘗試刪除該任務,然後重新創建它!", + "b4d708d96e24278a93a6609b9e8002a8": "缺少必需參數:execute_time(格式:YYYY-MM-DD HH:MM:SS)", + "c506f17bfd828a4aeaf5a7978103f6b9": "CRONTAB_TASKBODY_EMPTY", + "1311d0f2576e30afceaa616f06a0fa53": "添加一次任務失敗", + "08423404caee54eae13add8fe145d84f": "密碼驗證失敗!", + "494345d63759dcd623286d448def8778": "執行期間發生異常{}", + "fac487bbd20975aaf778e95a2ea78a85": "PHP-FPM配置文件不存在。{}", + "7dd858aa480b572b903caa7b71000954": "Nginx配置文件{}不存在!", + "69c86a0788cb7553486d3fe54bdc5232": "無法讀取 Nginx 配置文件 {}", + "192ae9cd563752bdd188b54231f828b6": "Nginx配置文件{}缺少FastCGI超時設置,請檢查!", + "3d023dffe875ddfbc013d6052c83bf56": "無法讀取 PHP 配置文件,它可能不存在:{}", + "e599e181a3cc24b59e781c5a52c9da0b": "沒有安裝PHP版本,無法自動設置", + "d0a3141dec105a6fd820524ae77b928c": "暫時沒有備份任務!", + "340c4a30e533798f76f8deba605ff6c4": "參數錯誤!", + "f98c446d194c4fbb566c3becc91255e1": "版本必須是數字!", + "e15ac24f41e856e08e494f9d2ab51af0": "phpMyAdmin的配置有錯誤。", + "b404834ec20850fd1de15f52dc43cb06": "無法連接到遠程存儲庫。請確保密鑰配置正確!", + "38cb441d840ed6579ca6f1f876de2b61": "添加可選配置:數據庫、FTP", + "d0977de06e41fbd31702d7ddba64c3da": "wordpress網站正在部署中......", + "a2bc816cd7abf7b134e56b39edae6fda": "部署 WordPress", + "b0b4a6c23347406736732380f3798be4": "wordpress初始化失敗", + "e718ce7b8a5d4b41b3c129b477323bb2": "無法讀取 Nginx 配置文件", + "cfecbb41158d2f815c4a0b820108aeaf": "配置文件解析失敗。請檢查配置是否正確。", + "5abebd9b1d5ca579c051e1094ab375cf": "主題包已經存在!", + "26b15536eb5ad2d4c9c8d2b964ba175b": "解析 {} 配置文件時發生錯誤。請檢查格式是否正常。", + "69d02d928b14a9c948c2b11955071b64": "CDN設置僅支持nginx模式!", + "da643dc091537f1db50480faba8f32ec": "網站的整體成功", + "e162577ca7feeab927137eaff9a9895c": "CDN頭不能為空!", + "ef99e1222fa88fac33b622a1083b0dc4": "請求頭不能包含空格", + "3a0c73aeadcfa1a6a548fb68fe4cd83d": "配置文件中有錯誤。請檢查一下!", + "75242ba6bf8096739ee8274c30658e46": "文件名包含非法字符", + "25a4bafb86b96174698461c8ea8f1a6d": "文件名不能為空", + "f2ae8a2dbe55304c1cd4ce000143d868": "文件路徑不能為空", + "9277b5ccc09173ca1596107809de89fc": "如果目標路徑已有同名目錄,則更改文件名", + "06769a815392464e2095dd3aee30ab60": "如果文件夾複製失敗,請檢查目錄是否被鎖定或防篡改開啟", + "dc1aa8bc00246f2357576c2c04e74728": "當前目錄是只讀的", + "d10fab43227e65d40f86bbdc947c8092": "文件夾複製失敗:{}", + "5992e9701e2496a26893b7f11d350418": "參數缺失!小路", + "f44751d36b8c0672bc68bb2fa57c1069": "參數文件名丟失", + "2bfac17a1e400b07b888e0435034d6a5": "缺少參數歷史記錄", + "70cfa9e1ffa7477cf00bd39d0dd4facd": "該文件不存在!", + "b441db7060ad3a732e49045679b2b1ae": "指定的文件不存在!", + "3900f94dba983d245fd2e264d4398914": "沒有足夠的權限來操作文件或目錄!", + "8a8b016e2f55506d3d7f8a86c4e2a118": "恢復歷史副本失敗!", + "1fe35be7f4e10cbb7f972445cc8209fa": "連接成功!{}", + "b9940e6be68b04502240b4d9dcadf31f": "正在安裝...", + "402e7a087747cb56c718bde84651f96a": "成功!", + "24742fdc8b10e0c22da043b82ec2d034": "添加區域成功。", + "7f3784e809f273b0b5c184bc54b9faa9": "成功刪除區域。", + "e844d65ff09d2632eac952b3aead39b4": "成功設置名稱服務器。", + "6974e9e250b2c667198d058eea716a82": "成功創下SOA記錄。", + "527c6f13367a6c6fe6eccafdcee477a1": "成功清除日誌。", + "1772fbb5207afbb9dbdc5ebbac4a1207": "清除日誌失敗。", + "3e529bb4952f89cfbcae3a72a246e629": "已成功添加 DMARC 記錄。", + "cb99ed01c97dce56abf2ec0b44861a63": "已成功添加 DKIM/SPF 記錄。", + "c29aa49e3d3d91c08b207563bad272f5": "DNS 檢查器正在運行。請稍等。", + "324b9550f30c392158d06e38781f1d17": "DNS 檢查器已暫停。", + "03b9251db02492d622c55683ef2ae6d1": "DNS 檢查器已在運行。請稍等。", + "70d8963372aa6cd19254cfdfce2150eb": "DNS 檢查器運行成功。", + "fdeec8a42f9bca6eb42c417d9da14d80": "無效動作。", + "cb9004d0406249266c644782d5446c31": "成功修復所有區域。", + "af88c4ef2e220eba86b35140aba3b680": "記錄類型為必填項。", + "282e6a8a0bba12c773eeee76d800d34c": "已成功設置所有域的 TTL。", + "0511237752a4bf05b3470f55a920a13c": "{} 網站披露了 Nginx 版本", + "c1634d768da5b138e9d7f30da5776f72": "Nginx版本洩露可能會暴露敏感服務器信息並帶來安全風險", + "3377a5b197173de4cffe41bdc42e0c06": "打開 {} 網站的 nginx.conf 文件並添加", + "45a1cb21f9639223152e01c1d6213cc9": "{} 網站有 PHP 版本洩露", + "70ddb8e4ac75601221d15393379aec22": "PHP版本洩露可能會暴露服務器敏感信息並帶來安全風險", + "d8b10647324c74f52a3b24aee5b34316": "打開 {} 網站的 php.ini 文件並設置", + "44971bb65cdcdb059767f15e4ff265e6": "未為 {} 網站安裝防火牆", + "7e26e59bba292ecc0bda0c7f69e091a1": "不安裝防火牆可能會暴露敏感的服務器信息並帶來安全風險", + "633b7a612198f42925356962c605daf0": "安裝或啟用 Nginx 防火牆", + "114b3dda67fc0b22bce73684f5872804": "未為 {} 網站啟​​用跨站點攻擊保護", + "5c040e1ad447e5408b0e3eecdd455c1d": "如果沒有跨站攻擊防護,敏感服務器數據可能會通過目錄遍歷而暴露", + "0fc62e3733f8eebdc41ac57a3497f653": "在網站目錄中啟用open_basedir保護,防止攻擊者跨目錄讀取敏感文件", + "d76b44c3726a549e02705d04d20572bb": "{} 網站已禁用 SSL", + "24e1cf7550e6cff5c9a86b136f4738af": "未部署 SSL 可能會暴露敏感服務器信息並帶來安全風險", + "598483f5877ad9bfe0a2c30a24d846d9": "在網站中部署 SSL → SSL", + "0741d3f8bd49c7058a9a7e0a1e615bf1": "在 {} 網站上檢測到敏感文件", + "f98a053d674dbfc507c028cb69799413": "敏感文件【{}】暴露——可能洩露服務器敏感信息並帶來安全風險", + "9a3a5f290b230622980f79252dc0bb19": "刪除或移動網站根目錄外的敏感文件", + "781718c074dfa4fba0c1ab86af7322c3": "在 {} 網站上檢測到 SQL 數據庫文件", + "5fc606066b231ce034d1f894a2f56a87": "SQL數據庫文件【{}】暴露——可能洩露服務器敏感信息並帶來安全風險", + "7fb29e80e1607255b4889149d814d6cc": "刪除或移動網站根目錄外的SQL文件", + "7d793f5d45f692f8234cb14d77d43526": "在 {} 網站根目錄中檢測到木馬文件", + "2126356e872681f2c18ab8999d55977a": "檢測到木馬文件【{}】——可能會暴露敏感服務器信息並帶來安全風險", + "34cbe317411bc8ece32e89b2ccb3ea8c": "刪除木馬文件或進行安全審計", + "2ad6c8ba78234ac5d731bb9311eb92e5": "在 {} 網站上檢測到備份文件", + "d5d425447ff390eaf69be751e20bf6b6": "備份文件【{}】暴露——可能洩露服務器敏感信息並帶來安全風險", + "c09aa2e529fe7c6658b8b534110d7e46": "刪除備份文件或將其移動到安全位置", + "a4ec7bd83939b217a71b216c895e16ff": "{} 網站數據庫使用弱密碼", + "083b68b9c95c87161f91b810150a1cb3": "網站 %s 數據庫【{}】使用弱密碼:{}", + "f522c28207b8c85833e454afdfb59ac3": "建議在面板中修改數據庫用戶密碼,防止暴力破解和數據竊取", + "32ed3512099db2d97450af9c6ee23099": "{} 網站 FTP 帳戶使用弱密碼", + "8a071d6ddba4edecc3e44089e1b24fb7": "網站 {} FTP 帳戶【{}】使用弱密碼:{}", + "bc9fb759c38c587070326ba0aaae12f4": "立即更改弱密碼,防止攻擊者暴力破解FTP憑證並篡改網站文件", + "6a0cf1bea780ff39333eb522d8f181aa": "XSS(跨站腳本)攻擊", + "b021dbe80c4037e66959a930b37e6f8b": "為了保護您的網站,建議啟用【Nginx WAF】來有效攔截本網站的XSS攻擊。", + "6e60d80e8f41ac0b2d0579bdf22f130d": "SQL注入攻擊", + "82a2980b928e2ee7590dad990c70aca4": "為了保護您的網站,建議啟用【Nginx WAF】,以有效阻止對該網站的SQL注入攻擊。", + "34c46b685b63d1d8ce17528acc9a3f18": "目錄遍歷/文件包含攻擊", + "6af6785994f3ea3ea2c67bf07f947721": "為了保護您的網站,建議啟用【Nginx WAF】,以有效阻止對該網站的目錄遍歷和文件包含攻擊。", + "8ce854a4c99ec334244274a7eec82d02": "PHP 代碼執行攻擊", + "946e8c378800662bf5c10a2cb7eff9fb": "為了保護您的網站,建議啟用【Nginx WAF】,以有效攔截本網站的PHP代碼執行攻擊。", + "60d2c5ef1c4bb2dfb7e99eb659812f6a": "嘗試訪問敏感文件", + "b4e160dd6370e872200b9a7d12b980aa": "為了保護您的網站,建議啟用【Nginx WAF】以有效阻止訪問本網站敏感文件的嘗試。", + "98c0b1eca58e1f2580ad3e8f5b542e54": "日誌分析過程中出現錯誤", + "b7040f1f73ad7726d2141879aaa0f3bb": "請檢查日誌文件權限和格式。錯誤: {}", + "1b95893c201cd2100d5eac3a5af8c937": "發送消息失敗,發送失敗的收件人:{},錯誤:{}" } \ No newline at end of file diff --git a/BTPanel/languages/all/de.json b/BTPanel/languages/all/de.json index 805fb799..efdd16dc 100644 --- a/BTPanel/languages/all/de.json +++ b/BTPanel/languages/all/de.json @@ -4075,5 +4075,104 @@ "8170f5d37a617dcbf16fe8dd414073dc": "Import aus Git erfolgreich", "6e40e5a8ad741ca4bd714fa52ef32333": "Das Dateiformat ist falsch. Bitte wählen Sie die ZIP- oder GZ-Datei aus", "c4996991c50032c9b296c11da356acb2": "Importfehler:{}", - "8ad9bdaced3b1cd99f1fa9d32c9a7eca": "Erfolgreicher Import" + "8ad9bdaced3b1cd99f1fa9d32c9a7eca": "Erfolgreicher Import", + "76749c0a7ec555a1cdf4c4dfde301958": "Die komprimierte Zieldatei darf nicht leer sein!", + "95b045c4bc0ef440acd6156fb42b50c6": "Komprimierung fehlgeschlagen: Die Zieldatei {} wurde nicht generiert", + "ecdc6ad598bdc08ff236f448e1d03e13": "Domaineintrag nicht gefunden", + "89ae4391631ed393c6c0ac36a2a0810a": "Es gibt eingeschränkte Dateien im Cache-Verzeichnis.Bitte versuchen Sie, sie aus dem LiteSpeed-Cache zu löschen", + "825d333e554f58230379a1cbc8372480": "Das Löschen des Caches ist fehlgeschlagen.Bitte überprüfen Sie, ob das Nginx Helper-Plugin ordnungsgemäß funktioniert.", + "e783e39c78ccc8fa455396f454b86c79": "Die Konfigurationsinformationen von WP Toolkit konnten nicht abgerufen werden", + "ef63d93aec22bed16012080faa44b635": "Konfiguration konnte nicht gespeichert werden: {}", + "45b3768a0b9da76f12937e20e17ff8c9": "{} Einmal ausführen", + "7a13562d776fdfdc9213a82f7f01d501": "Die Timer-Datei existiert nicht.Versuchen Sie, diese Aufgabe zu löschen und dann neu zu erstellen!", + "b4d708d96e24278a93a6609b9e8002a8": "Fehlender erforderlicher Parameter: „execute_time“ (Format: JJJJ-MM-TT HH:MM:SS)", + "c506f17bfd828a4aeaf5a7978103f6b9": "CRONTAB_TASKBODY_EMPTY", + "1311d0f2576e30afceaa616f06a0fa53": "Eine Aufgabe konnte nicht hinzugefügt werden", + "08423404caee54eae13add8fe145d84f": "Passwortbestätigung fehlgeschlagen!", + "494345d63759dcd623286d448def8778": "Während der Ausführung ist eine Ausnahme aufgetreten {}", + "7dd858aa480b572b903caa7b71000954": "Die Nginx-Konfigurationsdatei {} existiert nicht!", + "69c86a0788cb7553486d3fe54bdc5232": "Fehler beim Lesen der Nginx-Konfigurationsdatei {}", + "192ae9cd563752bdd188b54231f828b6": "In der Nginx-Konfigurationsdatei {} fehlen FastCGI-Timeout-Einstellungen, bitte überprüfen!", + "e599e181a3cc24b59e781c5a52c9da0b": "Es ist keine PHP-Version installiert, kann nicht automatisch eingestellt werden", + "d0a3141dec105a6fd820524ae77b928c": "Derzeit gibt es keine Backup-Aufgaben!", + "340c4a30e533798f76f8deba605ff6c4": "Parameterfehler!", + "f98c446d194c4fbb566c3becc91255e1": "Version muss numerisch sein!", + "e15ac24f41e856e08e494f9d2ab51af0": "Es liegt ein Fehler in der Konfiguration von phpMyAdmin vor.", + "38cb441d840ed6579ca6f1f876de2b61": "Fügen Sie optionale Konfigurationen hinzu: Datenbank, FTP", + "a2bc816cd7abf7b134e56b39edae6fda": "Stellen Sie WordPress bereit", + "b0b4a6c23347406736732380f3798be4": "Die WordPress-Initialisierung ist fehlgeschlagen", + "e718ce7b8a5d4b41b3c129b477323bb2": "Die Nginx-Konfigurationsdatei konnte nicht gelesen werden", + "cfecbb41158d2f815c4a0b820108aeaf": "Das Parsen der Konfigurationsdatei ist fehlgeschlagen.Bitte überprüfen Sie, ob die Konfiguration korrekt ist.", + "69d02d928b14a9c948c2b11955071b64": "CDN-Einstellungen unterstützen nur den Nginx-Modus!", + "da643dc091537f1db50480faba8f32ec": "Der Gesamterfolg der Website", + "ef99e1222fa88fac33b622a1083b0dc4": "Der Anforderungsheader darf keine Leerzeichen enthalten", + "1caa7a57a628cfd5aace9db67697efa0": "Die Nginx-Konfigurationsdatei existiert nicht", + "25a4bafb86b96174698461c8ea8f1a6d": "Der Dateiname darf nicht leer sein", + "f2ae8a2dbe55304c1cd4ce000143d868": "Der Dateipfad darf nicht leer sein", + "9277b5ccc09173ca1596107809de89fc": "Wenn der Zielpfad bereits ein Verzeichnis mit demselben Namen hat, ändern Sie den Dateinamen", + "06769a815392464e2095dd3aee30ab60": "Wenn das Kopieren des Ordners fehlschlägt, prüfen Sie, ob das Verzeichnis gesperrt oder die Manipulationssicherheit aktiviert ist", + "dc1aa8bc00246f2357576c2c04e74728": "Das aktuelle Verzeichnis ist schreibgeschützt", + "d10fab43227e65d40f86bbdc947c8092": "Fehler beim Kopieren des Ordners:{}", + "5992e9701e2496a26893b7f11d350418": "Parameter fehlen!Weg", + "f44751d36b8c0672bc68bb2fa57c1069": "Der Parameterdateiname fehlt", + "2bfac17a1e400b07b888e0435034d6a5": "Fehlender Parameterverlauf", + "70cfa9e1ffa7477cf00bd39d0dd4facd": "Die Datei existiert nicht!", + "b441db7060ad3a732e49045679b2b1ae": "Die angegebene Datei existiert nicht!", + "3900f94dba983d245fd2e264d4398914": "Sie verfügen nicht über ausreichende Berechtigungen zum Bearbeiten von Dateien oder Verzeichnissen!", + "8a8b016e2f55506d3d7f8a86c4e2a118": "Die Wiederherstellung der historischen Kopie ist fehlgeschlagen!", + "1fe35be7f4e10cbb7f972445cc8209fa": "Verbindung erfolgreich!{}", + "b9940e6be68b04502240b4d9dcadf31f": "Installieren...", + "402e7a087747cb56c718bde84651f96a": "Erfolg!", + "24742fdc8b10e0c22da043b82ec2d034": "Zone erfolgreich hinzugefügt.", + "7f3784e809f273b0b5c184bc54b9faa9": "Zone erfolgreich gelöscht.", + "e844d65ff09d2632eac952b3aead39b4": "Nameserver erfolgreich eingerichtet.", + "6974e9e250b2c667198d058eea716a82": "SOA-Eintrag erfolgreich festgelegt.", + "1772fbb5207afbb9dbdc5ebbac4a1207": "Protokolle konnten nicht gelöscht werden.", + "3e529bb4952f89cfbcae3a72a246e629": "DMARC-Eintrag erfolgreich hinzugefügt.", + "cb99ed01c97dce56abf2ec0b44861a63": "DKIM/SPF-Einträge wurden erfolgreich hinzugefügt.", + "c29aa49e3d3d91c08b207563bad272f5": "Der DNS-Checker wird ausgeführt.Bitte warten.", + "324b9550f30c392158d06e38781f1d17": "Der DNS-Checker ist angehalten.", + "70d8963372aa6cd19254cfdfce2150eb": "DNS-Checker erfolgreich ausgeführt.", + "fdeec8a42f9bca6eb42c417d9da14d80": "Ungültige Aktion.", + "cb9004d0406249266c644782d5446c31": "Alle Zonen erfolgreich repariert.", + "af88c4ef2e220eba86b35140aba3b680": "Datensatztyp ist erforderlich.", + "0511237752a4bf05b3470f55a920a13c": "Auf der Website {} wird die Nginx-Version offengelegt", + "c1634d768da5b138e9d7f30da5776f72": "Die Offenlegung der Nginx-Version kann vertrauliche Serverinformationen preisgeben und Sicherheitsrisiken darstellen", + "70ddb8e4ac75601221d15393379aec22": "Die Offenlegung der PHP-Version kann vertrauliche Serverinformationen preisgeben und Sicherheitsrisiken darstellen", + "44971bb65cdcdb059767f15e4ff265e6": "Für die Website {} ist keine Firewall installiert", + "7e26e59bba292ecc0bda0c7f69e091a1": "Wenn keine Firewall installiert ist, können vertrauliche Serverinformationen offengelegt werden und Sicherheitsrisiken entstehen", + "633b7a612198f42925356962c605daf0": "Installieren oder aktivieren Sie die Nginx-Firewall", + "114b3dda67fc0b22bce73684f5872804": "Der Schutz vor websiteübergreifenden Angriffen ist für die Website {} nicht aktiviert", + "5c040e1ad447e5408b0e3eecdd455c1d": "Ohne standortübergreifenden Angriffsschutz können sensible Serverdaten durch Verzeichnisdurchquerung offengelegt werden", + "0fc62e3733f8eebdc41ac57a3497f653": "Aktivieren Sie den open_basedir-Schutz im Website-Verzeichnis, um zu verhindern, dass Angreifer vertrauliche Dateien verzeichnisübergreifend lesen", + "d76b44c3726a549e02705d04d20572bb": "Auf der Website {} ist SSL deaktiviert", + "0741d3f8bd49c7058a9a7e0a1e615bf1": "Vertrauliche Datei auf der Website {} erkannt", + "f98a053d674dbfc507c028cb69799413": "Vertrauliche Datei [{}] offengelegt – kann serververtrauliche Informationen preisgeben und ein Sicherheitsrisiko darstellen", + "9a3a5f290b230622980f79252dc0bb19": "Löschen oder verschieben Sie die vertrauliche Datei außerhalb des Stammverzeichnisses der Website", + "781718c074dfa4fba0c1ab86af7322c3": "SQL-Datenbankdatei auf der Website {} erkannt", + "5fc606066b231ce034d1f894a2f56a87": "Offengelegte SQL-Datenbankdatei 【{}】 – kann serververtrauliche Informationen preisgeben und Sicherheitsrisiken darstellen", + "7fb29e80e1607255b4889149d814d6cc": "Löschen oder verschieben Sie die SQL-Datei aus dem Stammverzeichnis der Website", + "7d793f5d45f692f8234cb14d77d43526": "Trojaner-Datei im Stammverzeichnis der Website {} entdeckt", + "2126356e872681f2c18ab8999d55977a": "Trojaner-Datei 【{}】entdeckt – kann vertrauliche Serverinformationen preisgeben und Sicherheitsrisiken darstellen", + "34cbe317411bc8ece32e89b2ccb3ea8c": "Löschen Sie die Trojaner-Datei oder führen Sie eine Sicherheitsüberprüfung durch", + "2ad6c8ba78234ac5d731bb9311eb92e5": "Sicherungsdatei auf der Website {} erkannt", + "d5d425447ff390eaf69be751e20bf6b6": "Sicherungsdatei 【{}】offengelegt – kann vertrauliche Serverinformationen preisgeben und Sicherheitsrisiken darstellen", + "c09aa2e529fe7c6658b8b534110d7e46": "Löschen Sie die Sicherungsdatei oder verschieben Sie sie an einen sicheren Ort", + "a4ec7bd83939b217a71b216c895e16ff": "{} Website-Datenbank verwendet ein schwaches Passwort", + "083b68b9c95c87161f91b810150a1cb3": "Website %s-Datenbank 【{}】verwendet ein schwaches Passwort: {}", + "f522c28207b8c85833e454afdfb59ac3": "Es wird empfohlen, das Datenbankbenutzerkennwort im Panel zu ändern, um Brute-Force-Angriffe und Datendiebstahl zu verhindern", + "32ed3512099db2d97450af9c6ee23099": "Das FTP-Konto der Website {} verwendet ein schwaches Passwort", + "8a071d6ddba4edecc3e44089e1b24fb7": "Website {} FTP-Konto 【{}】verwendet ein schwaches Passwort: {}", + "bc9fb759c38c587070326ba0aaae12f4": "Ändern Sie das schwache Passwort sofort, um zu verhindern, dass Angreifer FTP-Anmeldeinformationen brutal erzwingen und Website-Dateien manipulieren", + "6a0cf1bea780ff39333eb522d8f181aa": "XSS-Angriff (Cross-Site Scripting).", + "b021dbe80c4037e66959a930b37e6f8b": "Zum Schutz Ihrer Website wird empfohlen, die [Nginx WAF] zu aktivieren, um XSS-Angriffe auf dieser Website effektiv zu blockieren.", + "6e60d80e8f41ac0b2d0579bdf22f130d": "SQL-Injection-Angriff", + "82a2980b928e2ee7590dad990c70aca4": "Zum Schutz Ihrer Website wird empfohlen, die [Nginx WAF] zu aktivieren, um SQL-Injection-Angriffe auf dieser Website wirksam zu blockieren.", + "34c46b685b63d1d8ce17528acc9a3f18": "Angriff auf Verzeichnisdurchquerung/Dateieinschluss", + "6af6785994f3ea3ea2c67bf07f947721": "Zum Schutz Ihrer Website wird empfohlen, die [Nginx WAF] zu aktivieren, um Angriffe auf Verzeichnisdurchquerung und Dateieinschluss auf dieser Website effektiv zu blockieren.", + "8ce854a4c99ec334244274a7eec82d02": "PHP-Codeausführungsangriff", + "b4e160dd6370e872200b9a7d12b980aa": "Zum Schutz Ihrer Website wird empfohlen, die [Nginx WAF] zu aktivieren, um Versuche, auf vertrauliche Dateien auf dieser Website zuzugreifen, wirksam zu blockieren.", + "98c0b1eca58e1f2580ad3e8f5b542e54": "Bei der Protokollanalyse ist ein Fehler aufgetreten", + "b7040f1f73ad7726d2141879aaa0f3bb": "Bitte überprüfen Sie die Berechtigungen und das Format der Protokolldatei.Fehler: {}", + "1b95893c201cd2100d5eac3a5af8c937": "Nachricht konnte nicht gesendet werden, Empfänger konnte nicht senden:{}, Fehler: {}" } \ No newline at end of file diff --git a/BTPanel/languages/all/fra.json b/BTPanel/languages/all/fra.json index a46cc611..1624bd3e 100644 --- a/BTPanel/languages/all/fra.json +++ b/BTPanel/languages/all/fra.json @@ -4067,5 +4067,100 @@ "8170f5d37a617dcbf16fe8dd414073dc": "Importation depuis git réussie", "6e40e5a8ad741ca4bd714fa52ef32333": "Le format de fichier est incorrect, veuillez sélectionner le fichier zip ou gz", "c4996991c50032c9b296c11da356acb2": "Échec de l'importation :{}", - "8ad9bdaced3b1cd99f1fa9d32c9a7eca": "Importation réussie" + "8ad9bdaced3b1cd99f1fa9d32c9a7eca": "Importation réussie", + "76749c0a7ec555a1cdf4c4dfde301958": "Le fichier compressé cible ne peut pas être vide !", + "95b045c4bc0ef440acd6156fb42b50c6": "Échec de la compression : le fichier cible {} n'est pas généré", + "ecdc6ad598bdc08ff236f448e1d03e13": "Enregistrement de domaine introuvable", + "89ae4391631ed393c6c0ac36a2a0810a": "Il existe des fichiers restreints dans le répertoire Cache.Veuillez essayer de les effacer du cache LiteSpeed", + "e783e39c78ccc8fa455396f454b86c79": "Impossible d'obtenir les informations de configuration de WP Toolkit", + "ef63d93aec22bed16012080faa44b635": "Échec de l'enregistrement de la configuration : {}", + "7a13562d776fdfdc9213a82f7f01d501": "Le fichier du minuteur n'existe pas.Essayez de supprimer cette tâche, puis recréez-la !", + "c506f17bfd828a4aeaf5a7978103f6b9": "CRONTAB_TASKBODY_EMPTY", + "1311d0f2576e30afceaa616f06a0fa53": "Échec de l'ajout d'une tâche", + "08423404caee54eae13add8fe145d84f": "La vérification du mot de passe a échoué !", + "494345d63759dcd623286d448def8778": "Une exception s'est produite lors de l'exécution {}", + "fac487bbd20975aaf778e95a2ea78a85": "Le fichier de configuration PHP-FPM n'existe pas.{}", + "7dd858aa480b572b903caa7b71000954": "Le fichier de configuration Nginx {} n'existe pas !", + "69c86a0788cb7553486d3fe54bdc5232": "Échec de la lecture du fichier de configuration Nginx {}", + "192ae9cd563752bdd188b54231f828b6": "Le fichier de configuration Nginx {} ne contient pas de paramètres de délai d'attente FastCGI, veuillez vérifier !", + "d0a3141dec105a6fd820524ae77b928c": "Il n'y a pas de tâches de sauvegarde pour le moment !", + "340c4a30e533798f76f8deba605ff6c4": "Erreur de paramètre !", + "f98c446d194c4fbb566c3becc91255e1": "La version doit être numérique !", + "e15ac24f41e856e08e494f9d2ab51af0": "Il y a une erreur dans la configuration de phpMyAdmin.", + "b404834ec20850fd1de15f52dc43cb06": "Échec de la connexion au référentiel distant.Veuillez vous assurer que la clé est correctement configurée !", + "38cb441d840ed6579ca6f1f876de2b61": "Ajoutez des configurations facultatives : base de données, FTP", + "d0977de06e41fbd31702d7ddba64c3da": "Le site wordpress est en cours de déploiement....", + "a2bc816cd7abf7b134e56b39edae6fda": "Déployer WordPress", + "b0b4a6c23347406736732380f3798be4": "L'initialisation de WordPress a échoué", + "e718ce7b8a5d4b41b3c129b477323bb2": "Échec de la lecture du fichier de configuration Nginx", + "5abebd9b1d5ca579c051e1094ab375cf": "Le pack thématique existe déjà !", + "26b15536eb5ad2d4c9c8d2b964ba175b": "Une erreur s'est produite lors de l'analyse du fichier de configuration {}.Veuillez vérifier si le format est normal.", + "69d02d928b14a9c948c2b11955071b64": "Les paramètres CDN ne prennent en charge que le mode nginx !", + "da643dc091537f1db50480faba8f32ec": "Le succès global du site", + "ef99e1222fa88fac33b622a1083b0dc4": "L'en-tête de la requête ne peut pas contenir d'espaces", + "1caa7a57a628cfd5aace9db67697efa0": "Le fichier de configuration nginx n'existe pas", + "3a0c73aeadcfa1a6a548fb68fe4cd83d": "Il y a une erreur dans le fichier de configuration.S'il vous plaît, vérifiez-le !", + "75242ba6bf8096739ee8274c30658e46": "Le nom du fichier contient des caractères non autorisés", + "25a4bafb86b96174698461c8ea8f1a6d": "Le nom du fichier ne peut pas être vide", + "f2ae8a2dbe55304c1cd4ce000143d868": "Le chemin du fichier ne peut pas être vide", + "9277b5ccc09173ca1596107809de89fc": "Si le chemin de destination contient déjà un répertoire du même nom, modifiez le nom du fichier", + "06769a815392464e2095dd3aee30ab60": "Si la copie du dossier ne parvient pas, vérifiez si le répertoire est verrouillé ou si la protection contre les altérations est activée.", + "dc1aa8bc00246f2357576c2c04e74728": "Le répertoire actuel est en lecture seule", + "d10fab43227e65d40f86bbdc947c8092": "Échec de la copie du dossier :{}", + "5992e9701e2496a26893b7f11d350418": "Il manque des paramètres !chemin", + "f44751d36b8c0672bc68bb2fa57c1069": "Le nom du fichier de paramètres est manquant", + "2bfac17a1e400b07b888e0435034d6a5": "Historique des paramètres manquants", + "70cfa9e1ffa7477cf00bd39d0dd4facd": "Le fichier n'existe pas !", + "b441db7060ad3a732e49045679b2b1ae": "Le fichier spécifié n'existe pas !", + "3900f94dba983d245fd2e264d4398914": "Ne pas avoir suffisamment d'autorisations pour manipuler des fichiers ou des répertoires !", + "1fe35be7f4e10cbb7f972445cc8209fa": "Connexion réussie !{}", + "b9940e6be68b04502240b4d9dcadf31f": "Installation...", + "402e7a087747cb56c718bde84651f96a": "Succès!", + "24742fdc8b10e0c22da043b82ec2d034": "Zone ajoutée avec succès.", + "7f3784e809f273b0b5c184bc54b9faa9": "Zone supprimée avec succès.", + "e844d65ff09d2632eac952b3aead39b4": "Configuration réussie du serveur de noms.", + "6974e9e250b2c667198d058eea716a82": "Définition réussie de l'enregistrement SOA.", + "3e529bb4952f89cfbcae3a72a246e629": "Enregistrement DMARC ajouté avec succès.", + "cb99ed01c97dce56abf2ec0b44861a63": "Enregistrements DKIM/SPF ajoutés avec succès.", + "324b9550f30c392158d06e38781f1d17": "Le vérificateur DNS est suspendu.", + "fdeec8a42f9bca6eb42c417d9da14d80": "Action invalide.", + "cb9004d0406249266c644782d5446c31": "Correction réussie de toutes les zones.", + "af88c4ef2e220eba86b35140aba3b680": "Le type d’enregistrement est requis.", + "282e6a8a0bba12c773eeee76d800d34c": "Définissez avec succès le TTL pour tous les domaines.", + "0511237752a4bf05b3470f55a920a13c": "Le site Web {} divulgue la version de Nginx", + "45a1cb21f9639223152e01c1d6213cc9": "Le site Web {} divulgue la version de PHP", + "70ddb8e4ac75601221d15393379aec22": "La divulgation de la version de PHP peut exposer des informations sensibles sur le serveur et présenter des risques de sécurité", + "d8b10647324c74f52a3b24aee5b34316": "Ouvrez le fichier php.ini du site Web {} et définissez", + "44971bb65cdcdb059767f15e4ff265e6": "Pare-feu non installé pour le site Web {}", + "7e26e59bba292ecc0bda0c7f69e091a1": "Ne pas avoir de pare-feu installé peut exposer des informations sensibles sur le serveur et présenter des risques de sécurité", + "633b7a612198f42925356962c605daf0": "Installer ou activer le pare-feu Nginx", + "114b3dda67fc0b22bce73684f5872804": "La protection contre les attaques intersites n'est pas activée pour le site Web {}", + "5c040e1ad447e5408b0e3eecdd455c1d": "Sans protection contre les attaques intersites, les données sensibles du serveur peuvent être exposées via une traversée de répertoires", + "d76b44c3726a549e02705d04d20572bb": "Le site Web de {} a désactivé SSL", + "24e1cf7550e6cff5c9a86b136f4738af": "SSL n'est pas déployé, peut exposer des informations sensibles sur le serveur et présenter des risques de sécurité", + "f98a053d674dbfc507c028cb69799413": "Fichier sensible 【{}】exposé – peut divulguer des informations sensibles sur le serveur et présenter des risques de sécurité", + "9a3a5f290b230622980f79252dc0bb19": "Supprimez ou déplacez le fichier sensible en dehors du répertoire racine du site Web", + "781718c074dfa4fba0c1ab86af7322c3": "Fichier de base de données SQL détecté sur le site Web {}", + "5fc606066b231ce034d1f894a2f56a87": "Fichier de base de données SQL 【{}】exposé — peut divulguer des informations sensibles sur le serveur et présenter des risques de sécurité", + "7fb29e80e1607255b4889149d814d6cc": "Supprimez ou déplacez le fichier SQL en dehors du répertoire racine du site Web", + "7d793f5d45f692f8234cb14d77d43526": "Fichier cheval de Troie détecté dans le répertoire racine du site Web {}", + "2126356e872681f2c18ab8999d55977a": "Fichier cheval de Troie 【{}】détecté — peut exposer des informations sensibles sur le serveur et présenter des risques de sécurité", + "34cbe317411bc8ece32e89b2ccb3ea8c": "Supprimez le fichier cheval de Troie ou effectuez un audit de sécurité", + "d5d425447ff390eaf69be751e20bf6b6": "Fichier de sauvegarde 【{}】exposé – peut divulguer des informations sensibles sur le serveur et présenter des risques de sécurité", + "c09aa2e529fe7c6658b8b534110d7e46": "Supprimez le fichier de sauvegarde ou déplacez-le vers un emplacement sécurisé", + "a4ec7bd83939b217a71b216c895e16ff": "La base de données du site Web {} utilise un mot de passe faible", + "083b68b9c95c87161f91b810150a1cb3": "La base de données du site Web %s 【{}】utilise un mot de passe faible : {}", + "f522c28207b8c85833e454afdfb59ac3": "Il est recommandé de modifier le mot de passe de l'utilisateur de la base de données dans le panneau pour éviter les attaques par force brute et le vol de données.", + "8a071d6ddba4edecc3e44089e1b24fb7": "Site Web {} Compte FTP 【{}】utilise un mot de passe faible : {}", + "bc9fb759c38c587070326ba0aaae12f4": "Modifiez immédiatement le mot de passe faible pour empêcher les attaquants de forcer brutalement les informations d'identification FTP et de falsifier les fichiers du site Web.", + "6a0cf1bea780ff39333eb522d8f181aa": "Attaque XSS (Cross-Site Scripting)", + "b021dbe80c4037e66959a930b37e6f8b": "Pour protéger votre site Web, il est recommandé d'activer le [Nginx WAF] pour bloquer efficacement les attaques XSS sur ce site.", + "6e60d80e8f41ac0b2d0579bdf22f130d": "Attaque par injection SQL", + "82a2980b928e2ee7590dad990c70aca4": "Pour protéger votre site Web, il est recommandé d'activer le [Nginx WAF] pour bloquer efficacement les attaques par injection SQL sur ce site.", + "34c46b685b63d1d8ce17528acc9a3f18": "Traversée de répertoire/attaque par inclusion de fichiers", + "6af6785994f3ea3ea2c67bf07f947721": "Pour protéger votre site Web, il est recommandé d'activer le [Nginx WAF] pour bloquer efficacement les attaques par traversée de répertoires et par inclusion de fichiers sur ce site.", + "8ce854a4c99ec334244274a7eec82d02": "Attaque d'exécution de code PHP", + "946e8c378800662bf5c10a2cb7eff9fb": "Pour protéger votre site Web, il est recommandé d'activer le [Nginx WAF] pour bloquer efficacement les attaques d'exécution de code PHP sur ce site.", + "b4e160dd6370e872200b9a7d12b980aa": "Pour protéger votre site Web, il est recommandé d'activer le [Nginx WAF] pour bloquer efficacement les tentatives d'accès aux fichiers sensibles sur ce site.", + "98c0b1eca58e1f2580ad3e8f5b542e54": "Une erreur s'est produite lors de l'analyse du journal" } \ No newline at end of file diff --git a/BTPanel/languages/all/ind.json b/BTPanel/languages/all/ind.json index a6e71b00..549e76c3 100644 --- a/BTPanel/languages/all/ind.json +++ b/BTPanel/languages/all/ind.json @@ -3788,5 +3788,102 @@ "8170f5d37a617dcbf16fe8dd414073dc": "Impor dari git berhasil", "6e40e5a8ad741ca4bd714fa52ef32333": "Format file salah, silakan pilih file zip atau gz", "c4996991c50032c9b296c11da356acb2": "Kegagalan impor:{}", - "8ad9bdaced3b1cd99f1fa9d32c9a7eca": "Impor berhasil" + "8ad9bdaced3b1cd99f1fa9d32c9a7eca": "Impor berhasil", + "76749c0a7ec555a1cdf4c4dfde301958": "File terkompresi target tidak boleh kosong!", + "95b045c4bc0ef440acd6156fb42b50c6": "Kompresi gagal: File target {} tidak dibuat", + "ecdc6ad598bdc08ff236f448e1d03e13": "Catatan domain tidak ditemukan", + "89ae4391631ed393c6c0ac36a2a0810a": "Ada file yang dibatasi di direktori Cache.Silakan coba untuk menghapusnya dari LiteSpeed ​​Cache", + "825d333e554f58230379a1cbc8372480": "Pembersihan cache gagal.Silakan periksa apakah plugin Nginx Helper berfungsi dengan baik.", + "e783e39c78ccc8fa455396f454b86c79": "Gagal mendapatkan informasi konfigurasi WP Toolkit", + "ef63d93aec22bed16012080faa44b635": "Gagal menyimpan konfigurasi: {}", + "45b3768a0b9da76f12937e20e17ff8c9": "{} Jalankan satu kali", + "7a13562d776fdfdc9213a82f7f01d501": "File pengatur waktu tidak ada.Coba hapus tugas ini lalu buat ulang!", + "b4d708d96e24278a93a6609b9e8002a8": "Parameter yang diperlukan tidak ada: waktu_eksekusi (format: YYYY-MM-DD HH:MM:SS)", + "c506f17bfd828a4aeaf5a7978103f6b9": "CRONTAB_TASKBODY_EMPTY", + "1311d0f2576e30afceaa616f06a0fa53": "Gagal menambahkan tugas satu kali", + "08423404caee54eae13add8fe145d84f": "Verifikasi kata sandi gagal!", + "494345d63759dcd623286d448def8778": "Pengecualian terjadi selama eksekusi {}", + "fac487bbd20975aaf778e95a2ea78a85": "File konfigurasi PHP-FPM tidak ada.{}", + "69c86a0788cb7553486d3fe54bdc5232": "Gagal membaca file konfigurasi Nginx {}", + "192ae9cd563752bdd188b54231f828b6": "File konfigurasi Nginx {} tidak memiliki pengaturan batas waktu FastCGI, silakan periksa!", + "3d023dffe875ddfbc013d6052c83bf56": "Gagal membaca file konfigurasi PHP, mungkin tidak ada: {}", + "e599e181a3cc24b59e781c5a52c9da0b": "Tidak ada versi PHP yang diinstal, tidak dapat mengaturnya secara otomatis", + "d0a3141dec105a6fd820524ae77b928c": "Tidak ada tugas cadangan untuk saat ini!", + "340c4a30e533798f76f8deba605ff6c4": "Kesalahan parameter!", + "f98c446d194c4fbb566c3becc91255e1": "Versi harus berupa angka!", + "e15ac24f41e856e08e494f9d2ab51af0": "Ada kesalahan pada konfigurasi phpMyAdmin.", + "b404834ec20850fd1de15f52dc43cb06": "Gagal terhubung ke repositori jarak jauh.Harap pastikan kunci dikonfigurasi dengan benar!", + "a2bc816cd7abf7b134e56b39edae6fda": "Terapkan wordpress", + "b0b4a6c23347406736732380f3798be4": "inisialisasi wordpress gagal", + "e718ce7b8a5d4b41b3c129b477323bb2": "Gagal membaca file konfigurasi Nginx", + "cfecbb41158d2f815c4a0b820108aeaf": "Penguraian file konfigurasi gagal.Silakan periksa apakah konfigurasinya sudah benar.", + "5abebd9b1d5ca579c051e1094ab375cf": "Paket tema sudah ada!", + "26b15536eb5ad2d4c9c8d2b964ba175b": "Terjadi kesalahan saat mengurai file konfigurasi {}.Silakan periksa apakah formatnya normal.", + "69d02d928b14a9c948c2b11955071b64": "Pengaturan CDN hanya mendukung mode nginx!", + "da643dc091537f1db50480faba8f32ec": "Keberhasilan situs web secara keseluruhan", + "e162577ca7feeab927137eaff9a9895c": "Header CDN tidak boleh kosong!", + "ef99e1222fa88fac33b622a1083b0dc4": "Header permintaan tidak boleh berisi Spasi", + "1caa7a57a628cfd5aace9db67697efa0": "File konfigurasi nginx tidak ada", + "3a0c73aeadcfa1a6a548fb68fe4cd83d": "Ada kesalahan pada file konfigurasi.Silakan periksa!", + "25a4bafb86b96174698461c8ea8f1a6d": "Nama file tidak boleh kosong", + "f2ae8a2dbe55304c1cd4ce000143d868": "Jalur file tidak boleh kosong", + "9277b5ccc09173ca1596107809de89fc": "Jika jalur tujuan sudah memiliki direktori dengan nama yang sama, ubah nama file", + "dc1aa8bc00246f2357576c2c04e74728": "Direktori saat ini bersifat read-only", + "06769a815392464e2095dd3aee30ab60": "Jika folder gagal disalin, periksa apakah direktori terkunci atau tamper-proof diaktifkan", + "5992e9701e2496a26893b7f11d350418": "Parameter tidak ada!jalur", + "2bfac17a1e400b07b888e0435034d6a5": "Riwayat parameter tidak ada", + "70cfa9e1ffa7477cf00bd39d0dd4facd": "Filenya tidak ada!", + "8a8b016e2f55506d3d7f8a86c4e2a118": "Gagal memulihkan salinan riwayat!", + "1fe35be7f4e10cbb7f972445cc8209fa": "Koneksi berhasil!{}", + "24742fdc8b10e0c22da043b82ec2d034": "Berhasil menambahkan zona.", + "7f3784e809f273b0b5c184bc54b9faa9": "Zona berhasil dihapus.", + "e844d65ff09d2632eac952b3aead39b4": "Berhasil menyetel server nama.", + "527c6f13367a6c6fe6eccafdcee477a1": "Berhasil membersihkan log.", + "1772fbb5207afbb9dbdc5ebbac4a1207": "Gagal menghapus log.", + "3e529bb4952f89cfbcae3a72a246e629": "Berhasil menambahkan data DMARC.", + "cb99ed01c97dce56abf2ec0b44861a63": "Berhasil menambahkan data DKIM/SPF.", + "c29aa49e3d3d91c08b207563bad272f5": "Pemeriksa DNS sedang berjalan.Harap tunggu.", + "324b9550f30c392158d06e38781f1d17": "Pemeriksa DNS Ditangguhkan.", + "03b9251db02492d622c55683ef2ae6d1": "Pemeriksa DNS Sudah Berjalan.Harap tunggu.", + "70d8963372aa6cd19254cfdfce2150eb": "Pemeriksa DNS Berhasil Dijalankan.", + "fdeec8a42f9bca6eb42c417d9da14d80": "Tindakan tidak valid.", + "cb9004d0406249266c644782d5446c31": "Berhasil memperbaiki semua zona.", + "282e6a8a0bba12c773eeee76d800d34c": "Berhasil mengatur TTL untuk semua domain.", + "c1634d768da5b138e9d7f30da5776f72": "Pengungkapan versi Nginx dapat mengekspos informasi server yang sensitif dan menimbulkan risiko keamanan", + "3377a5b197173de4cffe41bdc42e0c06": "Buka file nginx.conf untuk situs web {} dan tambahkan", + "45a1cb21f9639223152e01c1d6213cc9": "Situs web {} memiliki pengungkapan versi PHP", + "70ddb8e4ac75601221d15393379aec22": "Pengungkapan versi PHP dapat mengungkap informasi sensitif server dan menimbulkan risiko keamanan", + "d8b10647324c74f52a3b24aee5b34316": "Buka file php.ini untuk situs web {} dan atur", + "44971bb65cdcdb059767f15e4ff265e6": "Firewall tidak dipasang untuk situs web {}", + "7e26e59bba292ecc0bda0c7f69e091a1": "Tidak memasang firewall dapat mengekspos informasi server yang sensitif dan menimbulkan risiko keamanan", + "114b3dda67fc0b22bce73684f5872804": "Perlindungan serangan lintas situs tidak diaktifkan untuk situs web {}", + "5c040e1ad447e5408b0e3eecdd455c1d": "Tanpa perlindungan serangan lintas situs, data server sensitif mungkin terekspos melalui traversal direktori", + "0fc62e3733f8eebdc41ac57a3497f653": "Aktifkan perlindungan open_basedir di direktori situs web untuk mencegah penyerang membaca file sensitif di seluruh direktori", + "d76b44c3726a549e02705d04d20572bb": "Situs web {} memiliki SSL yang dinonaktifkan", + "24e1cf7550e6cff5c9a86b136f4738af": "SSL yang tidak diterapkan dapat mengekspos informasi server yang sensitif dan menimbulkan risiko keamanan", + "598483f5877ad9bfe0a2c30a24d846d9": "Terapkan SSL di Situs Web → SSL", + "0741d3f8bd49c7058a9a7e0a1e615bf1": "File sensitif terdeteksi di situs web {}", + "f98a053d674dbfc507c028cb69799413": "File sensitif 【{}】terkena — dapat membocorkan informasi sensitif server dan menimbulkan risiko keamanan", + "9a3a5f290b230622980f79252dc0bb19": "Hapus atau pindahkan file sensitif ke luar direktori root situs web", + "5fc606066b231ce034d1f894a2f56a87": "File database SQL 【{}】terkena — dapat membocorkan informasi sensitif server dan menimbulkan risiko keamanan", + "7fb29e80e1607255b4889149d814d6cc": "Hapus atau pindahkan file SQL ke luar direktori root situs web", + "7d793f5d45f692f8234cb14d77d43526": "File Trojan terdeteksi di {} direktori akar situs web", + "2126356e872681f2c18ab8999d55977a": "File Trojan 【{}】terdeteksi — dapat mengekspos informasi server yang sensitif dan menimbulkan risiko keamanan", + "34cbe317411bc8ece32e89b2ccb3ea8c": "Hapus file trojan atau lakukan audit keamanan", + "2ad6c8ba78234ac5d731bb9311eb92e5": "File cadangan terdeteksi di situs web {}", + "d5d425447ff390eaf69be751e20bf6b6": "File cadangan 【{}】terkena — dapat membocorkan informasi server yang sensitif dan menimbulkan risiko keamanan", + "c09aa2e529fe7c6658b8b534110d7e46": "Hapus file cadangan atau pindahkan ke lokasi yang aman", + "f522c28207b8c85833e454afdfb59ac3": "Disarankan untuk mengubah kata sandi pengguna database di panel untuk mencegah serangan brute force dan pencurian data", + "32ed3512099db2d97450af9c6ee23099": "{} akun FTP situs web menggunakan sandi yang lemah", + "6a0cf1bea780ff39333eb522d8f181aa": "Serangan XSS (Skrip Lintas Situs).", + "b021dbe80c4037e66959a930b37e6f8b": "Untuk melindungi situs web Anda, disarankan untuk mengaktifkan [Nginx WAF] untuk secara efektif memblokir serangan XSS di situs ini.", + "6e60d80e8f41ac0b2d0579bdf22f130d": "Serangan Injeksi SQL", + "82a2980b928e2ee7590dad990c70aca4": "Untuk melindungi situs web Anda, disarankan untuk mengaktifkan [Nginx WAF] untuk secara efektif memblokir serangan injeksi SQL di situs ini.", + "34c46b685b63d1d8ce17528acc9a3f18": "Serangan Traversal Direktori / Penyertaan File", + "6af6785994f3ea3ea2c67bf07f947721": "Untuk melindungi situs web Anda, disarankan untuk mengaktifkan [Nginx WAF] untuk secara efektif memblokir serangan traversal direktori dan penyertaan file di situs ini.", + "8ce854a4c99ec334244274a7eec82d02": "Serangan Eksekusi Kode PHP", + "946e8c378800662bf5c10a2cb7eff9fb": "Untuk melindungi situs web Anda, disarankan untuk mengaktifkan [Nginx WAF] untuk secara efektif memblokir serangan eksekusi kode PHP di situs ini.", + "60d2c5ef1c4bb2dfb7e99eb659812f6a": "Mencoba Akses ke File Sensitif", + "b4e160dd6370e872200b9a7d12b980aa": "Untuk melindungi situs web Anda, disarankan untuk mengaktifkan [Nginx WAF] untuk secara efektif memblokir upaya mengakses file sensitif di situs ini.", + "b7040f1f73ad7726d2141879aaa0f3bb": "Silakan periksa izin dan format file log.Kesalahan: {}" } \ No newline at end of file diff --git a/BTPanel/languages/all/it.json b/BTPanel/languages/all/it.json index ae762e19..5e6e8da3 100644 --- a/BTPanel/languages/all/it.json +++ b/BTPanel/languages/all/it.json @@ -3740,5 +3740,123 @@ "8170f5d37a617dcbf16fe8dd414073dc": "Importazione da Git riuscita", "6e40e5a8ad741ca4bd714fa52ef32333": "Il formato del file non è corretto, seleziona il file zip o gz", "c4996991c50032c9b296c11da356acb2": "Errore di importazione:{}", - "8ad9bdaced3b1cd99f1fa9d32c9a7eca": "Importazione riuscita" + "8ad9bdaced3b1cd99f1fa9d32c9a7eca": "Importazione riuscita", + "76749c0a7ec555a1cdf4c4dfde301958": "Il file compresso di destinazione non può essere vuoto!", + "95b045c4bc0ef440acd6156fb42b50c6": "Compressione non riuscita: il file di destinazione {} non è stato generato", + "ecdc6ad598bdc08ff236f448e1d03e13": "Record di dominio non trovato", + "89ae4391631ed393c6c0ac36a2a0810a": "Nella directory Cache sono presenti file con restrizioni.Prova a cancellarli dalla cache LiteSpeed", + "825d333e554f58230379a1cbc8372480": "Cancellazione della cache non riuscita.Controlla se il plugin Nginx Helper funziona correttamente.", + "e783e39c78ccc8fa455396f454b86c79": "Impossibile ottenere le informazioni di configurazione di WP Toolkit", + "ef63d93aec22bed16012080faa44b635": "Impossibile salvare la configurazione: {}", + "45b3768a0b9da76f12937e20e17ff8c9": "{} Eseguito una volta", + "7a13562d776fdfdc9213a82f7f01d501": "Il file del timer non esiste.Prova a eliminare questa attività e poi ricreala!", + "b4d708d96e24278a93a6609b9e8002a8": "Parametro obbligatorio mancante: tempo_esecuzione (formato: AAAA-MM-GG HH:MM:SS)", + "c506f17bfd828a4aeaf5a7978103f6b9": "CRONTAB_TASKBODY_EMPTY", + "1311d0f2576e30afceaa616f06a0fa53": "Impossibile aggiungere un'attività una volta", + "08423404caee54eae13add8fe145d84f": "Verifica della password fallita!", + "494345d63759dcd623286d448def8778": "Si è verificata un'eccezione durante l'esecuzione {}", + "fac487bbd20975aaf778e95a2ea78a85": "Il file di configurazione PHP-FPM non esiste.{}", + "7dd858aa480b572b903caa7b71000954": "Il file di configurazione Nginx {} non esiste!", + "69c86a0788cb7553486d3fe54bdc5232": "Impossibile leggere il file di configurazione Nginx {}", + "192ae9cd563752bdd188b54231f828b6": "Nel file di configurazione Nginx {} mancano le impostazioni di timeout FastCGI, controlla!", + "3d023dffe875ddfbc013d6052c83bf56": "Impossibile leggere il file di configurazione PHP, potrebbe non esistere: {}", + "e599e181a3cc24b59e781c5a52c9da0b": "Nessuna versione PHP è installata, non è possibile impostarla automaticamente", + "d0a3141dec105a6fd820524ae77b928c": "Non ci sono attività di backup per il momento!", + "340c4a30e533798f76f8deba605ff6c4": "Errore di parametro!", + "f98c446d194c4fbb566c3becc91255e1": "La versione deve essere numerica!", + "e15ac24f41e856e08e494f9d2ab51af0": "C'è un errore nella configurazione di phpMyAdmin.", + "b404834ec20850fd1de15f52dc43cb06": "Impossibile connettersi al repository remoto.Assicurati che la chiave sia configurata correttamente!", + "38cb441d840ed6579ca6f1f876de2b61": "Aggiungi configurazioni opzionali: Database, FTP", + "d0977de06e41fbd31702d7ddba64c3da": "Il sito WordPress è in fase di distribuzione....", + "a2bc816cd7abf7b134e56b39edae6fda": "Distribuisci WordPress", + "b0b4a6c23347406736732380f3798be4": "inizializzazione WordPress non riuscita", + "e718ce7b8a5d4b41b3c129b477323bb2": "Impossibile leggere il file di configurazione di Nginx", + "cfecbb41158d2f815c4a0b820108aeaf": "L'analisi del file di configurazione non è riuscita.Controlla se la configurazione è corretta.", + "5abebd9b1d5ca579c051e1094ab375cf": "Il pacchetto tematico esiste già!", + "26b15536eb5ad2d4c9c8d2b964ba175b": "Si è verificato un errore durante l'analisi del file di configurazione {}.Controlla se il formato è normale.", + "69d02d928b14a9c948c2b11955071b64": "Le impostazioni CDN supportano solo la modalità nginx!", + "da643dc091537f1db50480faba8f32ec": "Il successo complessivo del sito web", + "e162577ca7feeab927137eaff9a9895c": "L'intestazione CDN non può essere vuota!", + "ef99e1222fa88fac33b622a1083b0dc4": "L'intestazione della richiesta non può contenere spazi", + "1caa7a57a628cfd5aace9db67697efa0": "Il file di configurazione nginx non esiste", + "3a0c73aeadcfa1a6a548fb68fe4cd83d": "C'è un errore nel file di configurazione.Per favore controllalo!", + "75242ba6bf8096739ee8274c30658e46": "Il nome file contiene caratteri non validi", + "25a4bafb86b96174698461c8ea8f1a6d": "Il nome del file non può essere vuoto", + "f2ae8a2dbe55304c1cd4ce000143d868": "Il percorso del file non può essere vuoto", + "9277b5ccc09173ca1596107809de89fc": "Se il percorso di destinazione contiene già una directory con lo stesso nome, modificare il nome del file", + "06769a815392464e2095dd3aee30ab60": "Se la copia della cartella non riesce, verificare se la directory è bloccata o se è attivata la protezione da manomissione", + "dc1aa8bc00246f2357576c2c04e74728": "La directory corrente è di sola lettura", + "d10fab43227e65d40f86bbdc947c8092": "Copia della cartella non riuscita:{}", + "5992e9701e2496a26893b7f11d350418": "Mancano i parametri!sentiero", + "f44751d36b8c0672bc68bb2fa57c1069": "Manca il nome file dei parametri", + "2bfac17a1e400b07b888e0435034d6a5": "Cronologia dei parametri mancante", + "70cfa9e1ffa7477cf00bd39d0dd4facd": "Il file non esiste!", + "b441db7060ad3a732e49045679b2b1ae": "Il file specificato non esiste!", + "3900f94dba983d245fd2e264d4398914": "Non avere abbastanza permessi per manipolare file o directory!", + "8a8b016e2f55506d3d7f8a86c4e2a118": "Ripristino della copia storica non riuscito!", + "1fe35be7f4e10cbb7f972445cc8209fa": "Connessione riuscita!{}", + "b9940e6be68b04502240b4d9dcadf31f": "Installazione...", + "402e7a087747cb56c718bde84651f96a": "Successo!", + "24742fdc8b10e0c22da043b82ec2d034": "Zona aggiunta con successo.", + "7f3784e809f273b0b5c184bc54b9faa9": "Zona eliminata correttamente.", + "e844d65ff09d2632eac952b3aead39b4": "Impostazione del server dei nomi riuscita.", + "6974e9e250b2c667198d058eea716a82": "Impostazione del record SOA riuscita.", + "527c6f13367a6c6fe6eccafdcee477a1": "Registri cancellati con successo.", + "1772fbb5207afbb9dbdc5ebbac4a1207": "Impossibile cancellare i registri.", + "3e529bb4952f89cfbcae3a72a246e629": "Record DMARC aggiunto con successo.", + "cb99ed01c97dce56abf2ec0b44861a63": "Record DKIM/SPF aggiunti correttamente.", + "c29aa49e3d3d91c08b207563bad272f5": "Il controllo DNS è in esecuzione.Attendere prego.", + "324b9550f30c392158d06e38781f1d17": "Il controllo DNS è sospeso.", + "03b9251db02492d622c55683ef2ae6d1": "Il controllo DNS è già in esecuzione.Attendere prego.", + "70d8963372aa6cd19254cfdfce2150eb": "Controllo DNS eseguito correttamente.", + "fdeec8a42f9bca6eb42c417d9da14d80": "Azione non valida.", + "cb9004d0406249266c644782d5446c31": "Risolte con successo tutte le zone.", + "af88c4ef2e220eba86b35140aba3b680": "Il tipo di record è obbligatorio.", + "282e6a8a0bba12c773eeee76d800d34c": "Impostazione TTL per tutti i domini riuscita.", + "0511237752a4bf05b3470f55a920a13c": "Il sito web di {} contiene l'informativa sulla versione di Nginx", + "c1634d768da5b138e9d7f30da5776f72": "La divulgazione della versione di Nginx può esporre informazioni sensibili sul server e comportare rischi per la sicurezza", + "3377a5b197173de4cffe41bdc42e0c06": "Apri il file nginx.conf per il sito web {} e aggiungi", + "45a1cb21f9639223152e01c1d6213cc9": "Il sito web di {} presenta un'informativa sulla versione di PHP", + "70ddb8e4ac75601221d15393379aec22": "La divulgazione della versione PHP può esporre informazioni sensibili sul server e comportare rischi per la sicurezza", + "d8b10647324c74f52a3b24aee5b34316": "Apri il file php.ini per il sito web {} e imposta", + "44971bb65cdcdb059767f15e4ff265e6": "Firewall non installato per il sito web {}", + "7e26e59bba292ecc0bda0c7f69e091a1": "La mancata installazione di un firewall potrebbe esporre informazioni sensibili sul server e comportare rischi per la sicurezza", + "633b7a612198f42925356962c605daf0": "Installa o abilita il firewall Nginx", + "114b3dda67fc0b22bce73684f5872804": "Protezione dagli attacchi cross-site non abilitata per il sito web {}", + "5c040e1ad447e5408b0e3eecdd455c1d": "Senza la protezione dagli attacchi tra siti, i dati sensibili del server potrebbero essere esposti tramite l'attraversamento delle directory", + "0fc62e3733f8eebdc41ac57a3497f653": "Abilita la protezione open_basedir nella directory del sito Web per impedire agli aggressori di leggere file sensibili nelle directory", + "d76b44c3726a549e02705d04d20572bb": "Il sito web {} ha SSL disabilitato", + "24e1cf7550e6cff5c9a86b136f4738af": "La mancata distribuzione di SSL potrebbe esporre informazioni sensibili sul server e comportare rischi per la sicurezza", + "598483f5877ad9bfe0a2c30a24d846d9": "Distribuisci SSL in Sito Web → SSL", + "0741d3f8bd49c7058a9a7e0a1e615bf1": "File sensibile rilevato sul sito web {}", + "f98a053d674dbfc507c028cb69799413": "File sensibile 【{}】esposto: potrebbe divulgare informazioni sensibili sul server e comportare rischi per la sicurezza", + "9a3a5f290b230622980f79252dc0bb19": "Elimina o sposta il file sensibile all'esterno della directory principale del sito web", + "781718c074dfa4fba0c1ab86af7322c3": "File di database SQL rilevato sul sito web {}", + "5fc606066b231ce034d1f894a2f56a87": "Il file di database SQL 【{}】esposto: potrebbe far trapelare informazioni riservate al server e comportare rischi per la sicurezza", + "7fb29e80e1607255b4889149d814d6cc": "Elimina o sposta il file SQL all'esterno della directory principale del sito web", + "7d793f5d45f692f8234cb14d77d43526": "File trojan rilevato nella directory principale del sito web {}", + "2126356e872681f2c18ab8999d55977a": "Rilevato file trojan 【{}】: potrebbe esporre informazioni sensibili del server e comportare rischi per la sicurezza", + "34cbe317411bc8ece32e89b2ccb3ea8c": "Elimina il file trojan o esegui un controllo di sicurezza", + "2ad6c8ba78234ac5d731bb9311eb92e5": "File di backup rilevato sul sito web {}", + "d5d425447ff390eaf69be751e20bf6b6": "File di backup [{}] esposto: potrebbe divulgare informazioni sensibili sul server e comportare rischi per la sicurezza", + "c09aa2e529fe7c6658b8b534110d7e46": "Elimina il file di backup o spostalo in un luogo sicuro", + "a4ec7bd83939b217a71b216c895e16ff": "Il database del sito web {} utilizza una password debole", + "083b68b9c95c87161f91b810150a1cb3": "Il database del sito web %s 【{}】utilizza una password debole: {}", + "f522c28207b8c85833e454afdfb59ac3": "Si consiglia di modificare la password dell'utente del database nel pannello per prevenire attacchi di forza bruta e furto di dati", + "32ed3512099db2d97450af9c6ee23099": "L'account FTP del sito web {} utilizza una password debole", + "8a071d6ddba4edecc3e44089e1b24fb7": "L'account FTP del sito web {} 【{}】utilizza una password debole: {}", + "bc9fb759c38c587070326ba0aaae12f4": "Cambia immediatamente la password debole per impedire agli aggressori di forzare brutalmente le credenziali FTP e manomettere i file del sito web", + "6a0cf1bea780ff39333eb522d8f181aa": "Attacco XSS (Cross-Site Scripting).", + "b021dbe80c4037e66959a930b37e6f8b": "Per proteggere il tuo sito web, si consiglia di abilitare [Nginx WAF] per bloccare efficacemente gli attacchi XSS su questo sito.", + "6e60d80e8f41ac0b2d0579bdf22f130d": "Attacco SQL Injection", + "82a2980b928e2ee7590dad990c70aca4": "Per proteggere il tuo sito web, si consiglia di abilitare [Nginx WAF] per bloccare efficacemente gli attacchi SQL injection su questo sito.", + "34c46b685b63d1d8ce17528acc9a3f18": "Attacco di attraversamento di directory/inclusione di file", + "6af6785994f3ea3ea2c67bf07f947721": "Per proteggere il tuo sito web, si consiglia di abilitare [Nginx WAF] per bloccare in modo efficace gli attacchi di attraversamento delle directory e di inclusione di file su questo sito.", + "8ce854a4c99ec334244274a7eec82d02": "Attacco di esecuzione di codice PHP", + "946e8c378800662bf5c10a2cb7eff9fb": "Per proteggere il tuo sito web, si consiglia di abilitare [Nginx WAF] per bloccare efficacemente gli attacchi di esecuzione di codice PHP su questo sito.", + "60d2c5ef1c4bb2dfb7e99eb659812f6a": "Tentativo di accesso a file sensibili", + "b4e160dd6370e872200b9a7d12b980aa": "Per proteggere il tuo sito web, si consiglia di abilitare [Nginx WAF] per bloccare efficacemente i tentativi di accesso ai file sensibili su questo sito.", + "98c0b1eca58e1f2580ad3e8f5b542e54": "Si è verificato un errore durante l'analisi del registro", + "b7040f1f73ad7726d2141879aaa0f3bb": "Controlla le autorizzazioni e il formato del file di registro.Errore: {}", + "1b95893c201cd2100d5eac3a5af8c937": "Impossibile inviare il messaggio, Destinatario dell'invio non riuscito:{}, Errore: {}" } \ No newline at end of file diff --git a/BTPanel/languages/all/kor.json b/BTPanel/languages/all/kor.json index 8adf8dac..d1b5ff88 100644 --- a/BTPanel/languages/all/kor.json +++ b/BTPanel/languages/all/kor.json @@ -1,11 +1,11 @@ { - "f41a4952dfc4caafbed0a6afdd243bff": "인증서 오류, 확인하십시오!", + "f41a4952dfc4caafbed0a6afdd243bff": "인증서 오류, 확인하세요!", "2dfadbc8b23727991de7eb9457f56252": "인증서가 저장되었습니다!", - "7961d31b9b6db7593b5f8795273b5b64": "인증서를 신청하지 못했습니다. 사이트 관리 페이지에서 패널 도메인 이름에 대한 인증서를 수동으로 신청하십시오.", + "7961d31b9b6db7593b5f8795273b5b64": "인증서를 신청하지 못했습니다. 사이트 관리 페이지에서 패널 도메인 이름에 대한 인증서를 수동으로 신청하세요.", "d29c0b7e434fe9f40120f2a7f8111c9e": "SSL 파일을 찾을 수 없습니다!{}", "c4ca4238a0b923820dcc509a6f75849b": "1", "96ee8f18814766fdf066df97d3e1f6ea": "LET 암호화 인증서를 신청하기 전에 도메인 이름을 패널에 바인딩해야합니다.", - "7c14ab8a86515227c637d1d045e8d422": "성공적으로 설정하십시오!", + "7c14ab8a86515227c637d1d045e8d422": "성공적으로 설정하세요!", "a453af2e4da41ca8c5035d61b961c1ae": "데이터베이스가 존재하지 않습니다", "ca9c87b1d4c2f8af80c61cf22e43250d": "이 기간에는 백업 작업이 이미 존재합니다.다른 기간을 선택하는 것이 좋습니다", "e0aa021e21dddbd6d8cecec71e9cf564": "좋아요", @@ -15,18 +15,18 @@ "25bb121145f918572eea2ef07ff8e89c": "백업 오류", "f8320b26d30ab433c5a54546d21f414c": "거짓", "18928426418954e3a8bc166c892af5c5": "사용자 이름이나 비밀번호는 비어있을 수 없습니다!", - "14422683e14b8a03fd02b84480703c41": "여러 번 로그인하지 못했습니다. {} 초 안에 다시 시도하십시오!", + "14422683e14b8a03fd02b84480703c41": "여러 번 로그인하지 못했습니다. {} 초 안에 다시 시도하세요!", "179b0ad118200b66c6e90535d9d8ad4f": "디스크 inode가 소진되었고 패널은 inode를 해제하려고 시도했습니다.다시 시도 해주세요 ...", - "7edd0140c2f050286273be74039b1df7": "확인 실패, 페이지를 새로 고치고 다시 로그인하십시오!", + "7edd0140c2f050286273be74039b1df7": "확인 실패, 페이지를 새로 고치고 다시 로그인하세요!", "9a9b0bf6269ba974cc6a00bb0f0de1d0": "검증 코드는 비어있을 수 없습니다!", - "2b7ae590e0538e70b7a359a94d30f1f4": "확인 코드가 잘못되었습니다. 다시 시도하십시오!", + "2b7ae590e0538e70b7a359a94d30f1f4": "확인 코드가 잘못되었습니다. 다시 시도하세요!", "21f763b26858bf8ff40f931d714ab106": "잘못된 사용자 이름 또는 비밀번호, {}", - "6e264f3408e9b769d3fb7e2c807f301f": "작업이 실패했습니다.키가 올바른지 확인하십시오", + "6e264f3408e9b769d3fb7e2c807f301f": "작업이 실패했습니다.키가 올바른지 확인하세요", "d4ac5985eccd334896e3cf23706e43b0": "성공적으로 추가되었습니다", - "92188d43af4373bacbf00951da16532a": "웹 사이트 경로를 얻지 못했습니다.웹 사이트가 있는지 확인하십시오", - "ceaefd9a46d78491b9fdb912b5c71eeb": "유효성 검사 파일을 만들지 못했습니다.쓰기가 차단되었는지 확인하십시오", + "92188d43af4373bacbf00951da16532a": "웹 사이트 경로를 얻지 못했습니다.웹 사이트가 있는지 확인하세요", + "ceaefd9a46d78491b9fdb912b5c71eeb": "유효성 검사 파일을 만들지 못했습니다.쓰기가 차단되었는지 확인하세요", "1bb3608b1bc684c3dc85090db249346b": "인증서 정보는 얻지 못했습니다", "b0a783e3ada9e792e3ff3ca4eb477c80": "인증서는 존재하지 않습니다!", "fca4e47d90253577901e874737b87dc0": "인증서 읽기 오류!", @@ -247,19 +247,19 @@ "b5101eb6e685091719013d1a75756a53": "\\ 1", "0bfe47819da04212a33dac83b71430e8": "\\ 2", "bef28b813bf12be3924925bbb62883dd": "성공적으로 실행되었습니다!", - "fda63bff3e0143980e5761376859b00b": "실행 실패, Apache가 설치되어 있는지 확인하십시오", + "fda63bff3e0143980e5761376859b00b": "실행 실패, Apache가 설치되어 있는지 확인하세요", "22012355700877ab73f89de8014ab20b": "아파치 규칙 구성 오류 :
활성화에 실패 :

", "9848c96a046adb1759233241661ff694": "{} 서비스가 시작되지 않았습니다", "6ed577cdce37bbd9c66871ac1677dc53": "서비스 중지 실패!", - "572e5703371c43aae299181c0e3567d4": "모든 설치 작업이 완료되면 프로그램을 실행하십시오!", + "572e5703371c43aae299181c0e3567d4": "모든 설치 작업이 완료되면 프로그램을 실행하세요!", "c7138b4b5f7ded833942aef4e230771d": "명령이 성공적으로 전송되었습니다!", "d56f0ed99825b4d62ab84753a65f7f1e": "패널이 다시 시작되었습니다", "3d8c9e517719022b27ad5f27c578fa31": "RAM False를 얻으십시오", "d47ab7b9ce539ba13f4e045561bb8ed7": "가동 시간 거짓", - "8e39175bab478762d3d029bee327c704": "시간을 다시 시작하십시오", + "8e39175bab478762d3d029bee327c704": "시간을 다시 시작하세요", "e16cf27704f83c8b0a0efc16886ea75d": "날짜를 거짓으로 받으십시오", "c158c8096b76b85803e71232b2dd5e74": "세부 사항을 거짓으로 얻으십시오", "a6ec06b5eb6a42e13e072d2e992e31a0": "reqpersec false를 얻으십시오", @@ -280,20 +280,20 @@ "72e3edfd72758944413b1e4e9c432f1e": "개별 자식 서버가 수명 동안 처리 할 연결 수의 제한", "26c74a59d7d10bd927dce45e449943f1": "구성 오류", "b2d87dda66a4643c6cf673f787c5f226": "구성 파일이 존재하지 않습니다", - "bff9ef87fdda677f86ae6dddec54a104": "호환 가능한 PHP 버전이 없습니다. 먼저 설치하십시오!", + "bff9ef87fdda677f86ae6dddec54a104": "호환 가능한 PHP 버전이 없습니다. 먼저 설치하세요!", "4bbfcde12aa36ec375a332f51bf905d6": "하루에", "60956b50bb8e8c711d3adb889a70137f": "하루에 {} 시간 {} min에 실행", "78748f15bb65939b6d130c3a5cf8b7dc": "모든 {} 일", "cf9af10dcebe2f12092ff6028a535f08": "{} 일 ​​때마다 {} 시간 {} min에 실행", "e114abed903b9d26c476d4f6cd59c04b": "시간당", - "0aef48ea8132b0551fa25a10fd0a6585": "시간당 {} min에서 실행하십시오", + "0aef48ea8132b0551fa25a10fd0a6585": "시간당 {} min에서 실행하세요", "50419faf9662e0c3f283d496bcb8eb72": "모든 {} 시간", "2a0706d7e3ca3ce9e955471a0648dfcc": "{} 시간마다 {} min에서 실행", "84d94bf0382f611906b7edd65d6af169": "모든 {} 분", "14d27796d1c96457c7c019661a2f32d4": "{} 분마다 실행", "6c25e6a6da95b3d583c6ec4c3f82ed4d": "주간", "e1df614d393ab86fd63c5062f7e77936": "모든 {}, {} 시간 {} min에 실행", - "9030e39f00132d583da4122532e509e9": "월간 간행물", + "9030e39f00132d583da4122532e509e9": "월간", "69c5e99b9ad8d2b8f11be9a60cbf71da": "월간, {} day {} Hour {} min에 실행", "9d1a0949c39e66a0cd65240bc0ac9177": "일요일", "6f8522e0610541f1ef215a22ffa66ff6": "월요일", @@ -302,7 +302,7 @@ "78ae6f0cd191d25147e252dc54768238": "목요일", "c33b138a163847cdb6caeeb7c9a126b4": "금요일", "8b7051187b9191cdcdae6ed5a10e5adc": "토요일", - "e00d5128f631253b7b6ed8d5454c0c81": "파일에 쓸 수 없으면 [System Hardening]이 활성화되어 있는지 확인하십시오!", + "e00d5128f631253b7b6ed8d5454c0c81": "파일에 쓸 수 없으면 [System Hardening]이 활성화되어 있는지 확인하세요!", "685689743579a8f09fcec5d7df04e39e": "작업 이름은 비어있을 수 없습니다!", "a5c04aced897c770105858268324b53f": "현재 작업은 상태를 비활성화하고 수정하기 전에 작업을 열어주십시오!", "85305ee6be0f078791c7437ec54dda12": "추가하지 못했습니다", @@ -318,29 +318,29 @@ "0b12c9f33fde8b15970c7390c54d7ca5": "로그를 닫지 못했습니다", "b55eed05ce4922d8a6c881f0f2b05bbf": "성공적으로 설정했습니다", "5afb8de2bbb11b44592503000290c173": "지정된 플러그인이 존재하지 않습니다!", - "8b266978ab5161642a2d95d3f03f3945": "먼저 [{}]를 제거하십시오", - "ad626ac6de7ea412c9156f73b7666cd4": "다음 소프트웨어에 따라 [{}]를 먼저 설치하십시오", + "8b266978ab5161642a2d95d3f03f3945": "먼저 [{}]를 제거하세요", + "ad626ac6de7ea412c9156f73b7666cd4": "다음 소프트웨어에 따라 [{}]를 먼저 설치하세요", "acf7b210e1f5fbdb2e24af573f0e1831": "최소한 [{0}] CPU 코어를 설치하려면 필요합니다", "d0c8fa89a1eccf8a377d11eea540fd0c": "설치하려면 적어도 [{0} mb] 메모리가 필요합니다", "52e44340370925b110c7fba475b805e3": "[{}] 시스템 만 지원합니다", - "e3b16d9e5a24c8d27578d7670e840200": "다음 소프트웨어에 의존하면 먼저 설치하십시오 [{}]", + "e3b16d9e5a24c8d27578d7670e840200": "다음 소프트웨어에 의존하면 먼저 설치하세요 [{}]", "a0405fa5f045a30ba3aeff1c65ad8c38": "설치 프로세스가 취소되었습니다!", "a13ed989898e4c7529942fa656ff6733": "시스템 크리티컬 디렉토리는 쓸 수 없습니다!", "7a71d673b95a1bd0d10705c865f5a626": "1. [System Hardening]이 설치된 경우 끄십시오.", "c5041819fd15366b66dd9539116ea6ad": "2. Yunsuo가 설치된 경우 [System Hardening] 기능을 끄십시오.", "101935ed7ea8a021a536a614363350eb": "3. Safedog가 설치된 경우 [System Protection] 기능을 끄십시오.", - "8c4aa1aa63c24703138358074a515b99": "4. 다른 보안 소프트웨어가 사용되면 제거하십시오.", - "2eaba30c177044d12634b22016f5dd99": "소프트웨어 이름을 지정하십시오!", + "8c4aa1aa63c24703138358074a515b99": "4. 다른 보안 소프트웨어가 사용되면 제거하세요.", + "2eaba30c177044d12634b22016f5dd99": "소프트웨어 이름을 지정하세요!", "0d3811da2c2a4315b921093d36e6759d": "죄송합니다. 현재 OLS 공무원은 PHP8.1을 지원하지 않습니다", - "0d06a64610d5755d0d395305f9b3a664": "먼저 Aapanel 계정으로 로그인하십시오", - "2c9056dcb1285057d5248e7ed16d2b4d": "파일 해시 확인 실패, 설치를 중지하십시오!", + "0d06a64610d5755d0d395305f9b3a664": "먼저 Aapanel 계정으로 로그인하세요", + "2c9056dcb1285057d5248e7ed16d2b4d": "파일 해시 확인 실패, 설치를 중지하세요!", "fb95b07b4c663c0a52cda545eef1d869": "설치가 성공했습니다!", "fac5f4d9d430e77699ec114d346c9bb2": "설치가 실패했습니다", "349838fb1d851d3e2014b9fe39203275": "설치하다", - "a9ba3c226edabcfe1978d6f4c5daf404": "Nginx 1.8.1은 너무 오래되어 더 이상 사용할 수 없습니다. 다른 버전을 선택하십시오!", + "a9ba3c226edabcfe1978d6f4c5daf404": "Nginx 1.8.1은 너무 오래되어 더 이상 사용할 수 없습니다. 다른 버전을 선택하세요!", "75d7d596e2cc30d482111fae7b4f6d88": "큐에 설치 작업이 추가되었습니다", "ee83f5efe8a95f2e8529da7d4bb01d2b": "Uninstallaton이 성공했습니다", - "4432eb207b29c9ead490158b76397532": "데이터베이스 목록은 비어 있지 않습니다.데이터 보안은 기존 데이터베이스를 백업하고 삭제하십시오.
강제 UNINSTALL 명령 : RM -RF/www/Server/MySQL", + "4432eb207b29c9ead490158b76397532": "데이터베이스 목록은 비어 있지 않습니다.데이터 보안은 기존 데이터베이스를 백업하고 삭제하세요.
강제 UNINSTALL 명령 : RM -RF/www/Server/MySQL", "ba922eb50c83147a9bc0e9f40877d986": "제거가 성공했습니다", "b860df98df6ab84521a4cef036973028": "점수 범위 [1-5]", "eb536feb2c569974c2b5cf85cae91041": "연결 고장!", @@ -357,9 +357,9 @@ "6f5cb320fb3a7e303403054320ad943c": "소프트웨어 목록 업데이트되었습니다!", "b269cd272a31017961c245e2c84a1a2f": "파일 다운로드 실패!", "88183b946cc5f0e8c96b2e66e1c74a7e": "알려지지 않은", - "84f7539fe8674bb0689347dc7acd7b43": "아카이브에 플러그인 정보가 없습니다. 플러그인 패키지를 확인하십시오!", - "affc007de5f6791707f3de155a3a642a": "임시 파일이 존재하지 않습니다. 다시 업로드하십시오!", - "117f1bb083c7d556079a3c77093be5e2": "내보내기 실패, 권한을 확인하십시오!", + "84f7539fe8674bb0689347dc7acd7b43": "아카이브에 플러그인 정보가 없습니다. 플러그인 패키지를 확인하세요!", + "affc007de5f6791707f3de155a3a642a": "임시 파일이 존재하지 않습니다. 다시 업로드하세요!", + "117f1bb083c7d556079a3c77093be5e2": "내보내기 실패, 권한을 확인하세요!", "a8f375e795e0a130837f2a468518a413": "비준수 이름은 숫자, 문자, 밑줄 일 수 있습니다", "a06490b9729d0868e31d834c9bffa0bd": "지정된 사용자 정의 컴파일 매개 변수가 존재하지 않습니다!", "5e71fccee12caedf853a7313ea204721": "오류 : 이름이나 서비스는 알려지지 않았습니다", @@ -370,7 +370,7 @@ "db3a5c61130d7ca2046f5f9d0cd08073": "오류 : {}", "fe723570085e5cc1ecc3dfc88a46aa2d": "시간 초과 다운로드 : {}", "0eeb116408665d50a2f2092a6c277ee6": "사용 가능한 디스크 공간이 없습니다.", - "57a43d6e8c479df3a51421eba70d5621": "패키지 체크섬이 실패했는지 확인하십시오.", + "57a43d6e8c479df3a51421eba70d5621": "패키지 체크섬이 실패했는지 확인하세요.", "c12c62dd767caf90d62356b47349d871": "이 플러그인의 진행률 표시 줄을 얻을 수 없습니다.", "8fde9a929c417549ed2f9144fa68c0d2": "규칙 이름은 글자, 숫자 및 밑줄로만 구성 될 수 있습니다!", "868a6f377594831b39e91745c7807e28": "규칙 이름 지정이 존재하지 않습니다![{}]", @@ -378,51 +378,51 @@ "473bc9055d76e148db4d28e7bec67295": "규칙 이름은 3 바이트 이상이어야합니다", "5b097df78b1d8c65d8b524354029f114": "파일 접미사는 비어있을 수 없습니다", "496e2dfba11ca4381ef6277e6e9a62dc": "디렉토리는 비어있을 수 없습니다", - "84278582ca50b97777b2c8ce780f9715": "지원 | 제안은 Aapanel 포럼을 방문하십시오", + "84278582ca50b97777b2c8ce780f9715": "지원 | 제안은 Aapanel 포럼을 방문하세요", "aa00d1012298d40c84daf11e09956c65": "다운로드 :", "3c8ad9e6e9c39de49294aa2db8630f25": "nginx가 설치되지 않았습니다", "8bdafc47214a88c8cc4bc6326771040a": "데이터 수집이 실패했습니다!", "d84c752e17017ec4b4987497ce15dfd0": "PHP로드 상태 획득이 실패했습니다!", "cf6e5eb2bfedf2e0529a552c1017c21e": "파일 쓰기 실패!", "842bbd281516b01e70be499dbe67d3aa": "성공적으로 설정했습니다", - "ff7ca5d4ef00526f701d3ae0b3833940": "목록을 얻지 못하면 [AK/SK/Storage] 설정이 올바른지 확인하십시오!", + "ff7ca5d4ef00526f701d3ae0b3833940": "목록을 얻지 못하면 [AK/SK/Storage] 설정이 올바른지 확인하세요!", "517fa3f50147b216828f9aca9fd08927": "演示服务器, 禁止此操作!", "e39bf0b6a74eb0459abefe075607833f": "오류, 작업 프로세스를 종료 할 수 없습니다!", "c40f1a202bfa106ac04f83a4740b3bd1": "서버에 연결하지 못합니다!", - "ca3eb6afad663b2881fababde6d59d63": "먼저 계정을 바인딩하십시오!", - "df1f69a87b498b8b12c90be5a3b885db": "파일 다운로드 실패, 다시 시도하거나 수동으로 업데이트하십시오!", + "ca3eb6afad663b2881fababde6d59d63": "먼저 계정을 바인딩하세요!", + "df1f69a87b498b8b12c90be5a3b885db": "파일 다운로드 실패, 다시 시도하거나 수동으로 업데이트하세요!", "e448bd5c1c654d1ef33cf40620808693": "요청 된 PHP 버전이 존재하지 않습니다!", "7c769ceaad458456d4c3bc8276015a8d": "허가가 거부되었습니다!", "178d2e6a3f4abd4552188dcf36df7687": "패널 로그가 비워졌습니다!", "99a0d283490c238c6faf2d0387dbcda7": "현재 웹 서버는 OpenLitEspeed입니다.이 기능은 아직 지원되지 않습니다.", "20b4593b7de7ef359c1a0269f83e896b": "포트 범위가 잘못되었습니다!", - "0e656ce1afc98099f2e01e8f71362f92": "올바른 포트 번호를 입력하십시오", + "0e656ce1afc98099f2e01e8f71362f92": "올바른 포트 번호를 입력하세요", "88897967b12e6907309204ad6d0647af": "일반적인 포트를 phpmyadmin 포트로 사용하지 마십시오!", "e4859a777f8d4f300baf8fff0284fe81": "Apache Phpmyadmin SSL 구성 파일을 찾지 못했습니다. 열기 전에 SSL 포트 설정을 닫으십시오.", - "6bd4e79acd767010d96091baf9daba77": "nginx phpmyadmin이 듣는 포트를 감지하지 못했습니다. 파일이 수동으로 수정되었는지 확인하십시오.", - "7478cfa7a09bbe61467b07dea2e9721d": "Apache Phpmyadmin이 듣는 포트를 감지하지 못했습니다. 파일이 수동으로 수정되었는지 확인하십시오.", + "6bd4e79acd767010d96091baf9daba77": "nginx phpmyadmin이 듣는 포트를 감지하지 못했습니다. 파일이 수동으로 수정되었는지 확인하세요.", + "7478cfa7a09bbe61467b07dea2e9721d": "Apache Phpmyadmin이 듣는 포트를 감지하지 못했습니다. 파일이 수동으로 수정되었는지 확인하세요.", "a7dad48fefe8778dd10744a8a4dbae8e": "새로운 phpmyadmin SSL 포트", - "a168cddbe84613b0a468887d44e7eaf5": "패널 인증서는 존재하지 않습니다.패널 인증서를 신청하고 다시 시도하십시오.", - "c0c23cdf9e9329e576cfbddcc85666a3": "성공적으로 열면 Phpmyadmin SSL 포트를 수동으로 릴리스하십시오", + "a168cddbe84613b0a468887d44e7eaf5": "패널 인증서는 존재하지 않습니다.패널 인증서를 신청하고 다시 시도하세요.", + "c0c23cdf9e9329e576cfbddcc85666a3": "성공적으로 열면 Phpmyadmin SSL 포트를 수동으로 릴리스하세요", "b7f3560235e37cebdbde7db33c3df64c": "작동 실패", "7f91451dfcb0045a4684fa68b35d0365": "새로운 phpmyadmin 포트", "bb1ca97ec761fc37101737ba0aa2e7c5": "오류", "14c525aba20f0a52255a799f51ced885": "경고 목록이 존재하지 않습니다!", "586a19c1eeaf6fe9d57f1d894fc487fc": "로그 파일이 존재하지 않습니다!", - "190045c03f9a72a1900c60d63e1e2b8b": "계정 바인딩이 만료되었습니다. [설정] 페이지에서 다시 바인드하십시오!", + "190045c03f9a72a1900c60d63e1e2b8b": "계정 바인딩이 만료되었습니다. [설정] 페이지에서 다시 바인드하세요!", "907fddd6007347a0daffc4a64156f0de": "성공을 무시하면이 버전은 더 이상 업데이트를 상기시킬 수 없습니다.", "131c05252110792212e3e3666a351154": "SSL 관련 구성, 다음 주 댓글이있는 404 규칙을 삭제하거나 수정하지 마십시오.", "4ba7e24ac1607ab761c124ca7352ad08": "오류 페이지 구성, 주석, 삭제 또는 수정 허용", "31bb30ca4135945adbe0c2daa9545b39": "PHP 참조 구성, 댓글, 삭제 또는 수정 허용", "f9da3e5ae75ce0ae39884ae2ea295a66": "URL 재 작성 규칙 참조, 모든 수정은 패널에서 설정 한 재 작성 규칙을 무효화합니다.", "73e1f7d487ad73d55414fe26ea11cbf0": "매개 변수를 지정하지 않음 [sitepath]", - "6aabca3a3e1c79bd5837a1ddae95fe70": "오류가 발생했습니다. 다시 시도하십시오.", + "6aabca3a3e1c79bd5837a1ddae95fe70": "오류가 발생했습니다. 다시 시도하세요.", "256c9a85375f57f2dc9f6f318c6578f1": "웹 사이트 [{}]를 성공적으로 만듭니다", - "481df7dbcd4c0317088bde8c913d5893": "웹 사이트 경로를 작성하십시오", + "481df7dbcd4c0317088bde8c913d5893": "웹 사이트 경로를 작성하세요", "b1b2484c013c646d7f41d6b2f495b6ef": "웹 사이트 경로는 루트 디렉토리가 될 수 없습니다 [/]", - "1c3bff99564f1370a5b1bf6c0773f8c4": "[이메일] 형식이 올바른지 확인하십시오", + "1c3bff99564f1370a5b1bf6c0773f8c4": "[이메일] 형식이 올바른지 확인하세요", "af9091566e669f016edf16ba97464cbe": "비밀번호가 매우 약합니다. 사용하겠다고 생각하면 진드기를 진드기 [약한 비밀번호 허용].", - "b0dbad478d4f07c38aec8f440ed98b66": "MySQL 및 PHP를 먼저 설치하십시오!", + "b0dbad478d4f07c38aec8f440ed98b66": "MySQL 및 PHP를 먼저 설치하세요!", "46491fef7553177ef58a55b2db917072": "웹 사이트 루트 디렉토리를 시스템 기본 디렉토리로 설정하지 마십시오 :
{}", "59d5fef323e89ded50ed6036848a97f3": "WebName 매개 변수의 형식이 올바르지 않으므로 Parsable JSON String이어야합니다.", "078a3d3e263be2851ddfd9fa059d098f": "포트 범위가 잘못되었습니다!100-65535 사이 여야합니다", @@ -431,12 +431,12 @@ "23eded6de9c06451f67ecb7ed3a8c95b": "기본 도메인은 와일드 카드 DNS 레코드가 될 수 없습니다", "f54249d2613e48be05837ec9cd615a5f": "당신이 추가하려는 사이트는 이미 존재합니다!", "b537e2d1946d559d3de4fb3c045d290f": "당신이 추가하려는 도메인은 이미 존재합니다!", - "f91c641aef33cf8ef4a29bc5d3a7193a": "추가하지 못했습니다. configuraton 오류를 작성하십시오!", - "c3c7869d22051eaa78a831834a398351": "오류가 삭제되었습니다. 다시 시도하십시오.", + "f91c641aef33cf8ef4a29bc5d3a7193a": "추가하지 못했습니다. configuraton 오류를 작성하세요!", + "c3c7869d22051eaa78a831834a398351": "오류가 삭제되었습니다. 다시 시도하세요.", "e2d272e229674e4c6765fab24a323604": "웹 사이트 삭제 [{}]가 성공적으로", "aa5f20e061736fe68a915163e7e6d122": "지정된 사이트는 존재하지 않습니다", "f11e72daff0ce484f4c401bd0bd28ae5": "사이트를 성공적으로 삭제했습니다!", - "c57d58c6bbd34144325871d75b42a577": "호스트 도메인 이름을 입력하십시오", + "c57d58c6bbd34144325871d75b42a577": "호스트 도메인 이름을 입력하세요", "5c7b7c2f6ed78eefdd77aaa3dddde61a": "도메인은 비어있을 수 없습니다!", "ef446d50df1605a582f9b44b57327536": "도메인 이름 형식이 잘못되었습니다!", "68ae44808f90043dee02358ee768bf6e": "도메인의 형식은 유효하지 않습니다!", @@ -444,18 +444,18 @@ "925dc658ddf0f69509632848bcd39577": "지정된 도메인 이름은 웹 사이트의 하위 디렉토리에 의해 제대로되었습니다 [{}]!", "7b02cf82181f516626a36b86c6a686f5": "사이트가 성공적으로 추가되었습니다!", "9b3c4205f2f408790c9c1c5da53c3bfb": "PHP 버전을 얻지 못했습니다!", - "abc3db87d5608cc9559556468a696a35": "도메인 이름을 선택하십시오", - "7807e17f2bf49fb802bba1a04822ea16": "포트를 선택하십시오", + "abc3db87d5608cc9559556468a696a35": "도메인 이름을 선택하세요", + "7807e17f2bf49fb802bba1a04822ea16": "포트를 선택하세요", "e5925c3a126a66c0565df6d8ef49550e": "마지막 도메인은 삭제할 수 없습니다!", - "17088ffed1e537b917a6ecc9dc957159": "개인 키 오류, 확인하십시오!", - "26924bd958e212f07c31b6ffca9cbf8c": "인증서 오류, 확인하십시오!", + "17088ffed1e537b917a6ecc9dc957159": "개인 키 오류, 확인하세요!", + "26924bd958e212f07c31b6ffca9cbf8c": "인증서 오류, 확인하세요!", "44e2c1c3cfd8d248d7c9190a8f07c0ee": "인증서를받는 오류", "fc0d039d9dcf3905ae8032c9cb33f475": "오류 :
비밀번호 액세스", + "c1f8cf125da0d6db1c4e0d09033c9ddd": "계정이나 비밀번호를 입력하세요", + "bd7fb7b4280616cbe5de49eb1ee8cc3a": "보호 할 디렉토리를 입력하세요", + "8c48114518721e3966cd4553a0cee705": "이름을 입력하세요", + "dd65d82f6868cfa127f86e5658674829": "사이트 비밀번호 보호가 설정되어 취소 한 다음 설정하세요.사이트 디렉토리 -> 비밀번호 액세스", "1cc6b0e84b90d0ca0b863fccc0f33b36": "디렉토리가 보호되었습니다", "b7526fc6f8b21e71ea1e290a982df4c9": "성공적으로 만들어졌습니다", "7c0f11514254eedfffc86cf0bd09b98f": "APACHE2.2는 Multiphp를 지원하지 않습니다!", "69be778c38b9edc0ab3040c478c39370": "오류 : %s
1.도메인 이름이 해당 사이트에 바인딩되어 있는지 확인하십시오.

2.도메인 이름이 서버에 올바르게 해결되었는지 또는 해상도가 완전히 효과적이지 않은지 확인하십시오.

3.사이트에 리버스 프록시가 설정되어 있거나 CDN을 사용하는 경우 먼저 끄십시오.

4.사이트에 301 리디렉션이있는 경우 먼저 끄십시오

5.위의 수표가 문제가 없는지 확인하면 DNS 서비스 제공 업체를 변경하십시오.

", + "77619ceb7742d8a8f87e52b02592d873": "서명이 실패하면 도메인 이름을 확인할 수 없었습니다.

1.도메인 이름이 해당 사이트에 바인딩되어 있는지 확인하세요.

2.도메인 이름이 서버에 올바르게 해결되었는지 또는 해상도가 완전히 효과적이지 않은지 확인하세요.

3.사이트에 리버스 프록시가 설정되어 있거나 CDN을 사용하는 경우 먼저 끄십시오.

4.사이트에 301 리디렉션이있는 경우 먼저 끄십시오

5.위의 수표가 문제가 없는지 확인하면 DNS 서비스 제공 업체를 변경하세요.

", "4d6822ed3bd01f379f2ab4b1e68068d7": "|-현재 갱신 할 인증서가 없습니다.", "b74c00ca5fee122c49cd66ce3d91b2cf": "| -Renewal 실패 :", "0b1c93d38c86c8d379886293cdf8ba66": "작업이 취소되었습니다!", @@ -794,7 +794,7 @@ "4fa407ee74026903dc3013d0b2471eac": "압축이 성공했습니다!", "ece43dcaac9352f58c422e500266a927": "무수압이 성공했습니다!", "ac4eb62573e34c36ff426c8a6360c781": "백업 오류!", - "438ca4ffcf6fbd44ec129e73a24f0deb": "SQL/GZ/ZIP 파일을 선택하십시오!", + "438ca4ffcf6fbd44ec129e73a24f0deb": "SQL/GZ/ZIP 파일을 선택하세요!", "0edfb4a54d6cf45209a6c7929b8b9919": "성공적으로 가져온 데이터베이스!", "f6039d44b29456b20f8f373155ae4973": "사용자 이름", "3544848f820b9d94a3f3871a382cf138": "새 비밀번호", @@ -826,17 +826,17 @@ "c11f9218de293117d2cd58a009534167": "모든 플러그인이 6.0으로 성공적으로 업데이트되었습니다!", "cc478711642936a519c27b7c388fbb50": "Aapanel Cli", "cfef992430ab5a7b2373138d4b86425c": "다시 시작 패널", - "95b8b68d1c80ca75e1ab15bf5b9a8394": "패널 포트를 변경하십시오", + "95b8b68d1c80ca75e1ab15bf5b9a8394": "패널 포트를 변경하세요", "f3013e54b467cdb2fac9a424bae963e4": "정지 패널", "15ea17031cb6a968e3b9ea2b28546c53": "지우기 패널 캐시", - "20cdfcd210da305d900d25ec4c084184": "명확한 로그인 제한", + "20cdfcd210da305d900d25ec4c084184": "로그 초기화인 제한", "ab41db99c7941ef74c37bd97733f7707": "새로 고침 패널", - "315f4fdd99e49c6a2e80a95ce82ba534": "입구 제한을 취소하십시오", - "07ed88796641228c3602122cf5075fc2": "패널 비밀번호를 변경하십시오", + "315f4fdd99e49c6a2e80a95ce82ba534": "입구 제한을 취소하세요", + "07ed88796641228c3602122cf5075fc2": "패널 비밀번호를 변경하세요", "63d8f2a0e51e9243f91b0285e4e44667": "도메인 바인딩 한계를 취소합니다", - "3913f08c2fa53f4c413cc0772f9401d1": "패널 사용자 이름을 변경하십시오", + "3913f08c2fa53f4c413cc0772f9401d1": "패널 사용자 이름을 변경하세요", "b773a80578cdc8f50d57393d6b0a3d67": "IP 액세스 한계를 취소합니다", - "a6a23a4004f99fef13372de56433edbc": "MySQL 루트 비밀번호를 강제로 변경하십시오", + "a6a23a4004f99fef13372de56433edbc": "MySQL 루트 비밀번호를 강제로 변경하세요", "bc449263dd0183a82a3d0a03cd8f26dc": "패널 기본 정보를 봅니다", "975687e8a64e2c2842a34ca6d6bf8e85": "명확한 시스템 쓰레기", "84bc199f1a5ce205b0f5fc3e64ef3e95": "pls 입력 명령 번호 :", @@ -857,7 +857,7 @@ "968c7b9246b5ab3d3e7659cea211a20b": "| -IP 액세스 한계가 취소되었습니다", "e06d1ba70f1331e9f9a113cc2f887d3f": "무단", "6c89f438bb1463ecd92f1832d0aaa277": "QR 코드가 만료되었습니다", - "a11371c8ae1f6978f0dd88d0bddaa1be": "qrcore를 성공적으로 스캔하십시오", + "a11371c8ae1f6978f0dd88d0bddaa1be": "qrcore를 성공적으로 스캔하세요", "ab9f853a311a37b0fdc50cdfb4e7ac05": "로그인 실패 2", "735ff2bcf3bc80998a077ba01d50ab8c": "로그인 실패 1", "5b0308d8fa9b2acb17601e300f789005": "API가 켜지지 않았습니다", @@ -868,8 +868,8 @@ "ed8abe55f77bc3512706869b791aa8f0": "222", "727f11bf8b090ccbf27efcfb530e262f": "성공적으로 로그인!", "8d4d13a3836227d377455b5dc0256d5a": "죄송합니다. OLS는 현재 이 기능을 지원하지 않습니다", - "6ca3d3b27428d22e047e13a552f1600e": "성공적으로 추가하십시오", - "868903fa7bc939d9ff39df264589c0fd": "성공적으로 삭제하십시오", + "6ca3d3b27428d22e047e13a552f1600e": "성공적으로 추가하세요", + "868903fa7bc939d9ff39df264589c0fd": "성공적으로 삭제하세요", "4f7e04eb8dba15474e74e11df0c02a13": "성공적으로 설정!", "aa8e78fa88d0bfaaf68110219583ba96": "다시 테스트되었습니다.", "e1bb08ea6a5543e3d7076c8dd55496c8": "탐지가 실패했습니다", @@ -898,18 +898,18 @@ "fa2f0078903e1fbd1f06fb383cded8e6": "로그인 성공 \\ n", "1a0fc31214912c08b49032069b6c0ab4": "로그인 성공", "0b2b278588fab56ed760e52a21ed5a15": "채널 연결이 끊어졌습니다", - "20536b8e623d518be1f31d393839ef70": "연결이 연결이 끊어지면 Enter를 눌러 다시 연결하려고 시도하십시오!", + "20536b8e623d518be1f31d393839ef70": "연결이 연결이 끊어지면 Enter를 눌러 다시 연결하려고 시도하세요!", "94c94a73ad6c35edec9bcd4bfb100c88": "오류 읽기 tty 버퍼 데이터, {}", "9d46aa2efa419ff4a75df14577f1e629": "클라이언트는 적극적으로 연결이 끊어졌습니다", "d566f8db7ec2abe7de92e59c901c4077": "WebSocket에서 데이터를 읽는 동안 오류가 발생했습니다.재 시도", "0a6dc00cd150c5a1a776182bb2ea7406": "ssh_login_info", "01993e4270c796db59ba22b3c2f53241": "지정된 SSH 정보가 존재하지 않습니다!", "ebd1aed8f2ab2f1ad08660f609f60206": "지정된 호스트 주소가 다른 SSH 정보에 추가되었습니다!", - "649ba4179316d90343c8169038958400": "SSH 정보가 추가되었음을 지정하십시오!", - "9d048cf9fd858ea33d6607855e4c8219": "[sort_list] 필드를 통과하십시오", + "649ba4179316d90343c8169038958400": "SSH 정보가 추가되었음을 지정하세요!", + "9d048cf9fd858ea33d6607855e4c8219": "[sort_list] 필드를 통과하세요", "e13d2375856de89c040c6eadfe65d699": "지정된 명령 이름이 이미 존재합니다", "f64f7d7e07ab5fd2c7a8eed2274793c3": "지정된 명령은 존재하지 않습니다", - "0b69cd55a690bee672a1fb91091222f1": "백업을 시작하십시오", + "0b69cd55a690bee672a1fb91091222f1": "백업을 시작하세요", "a2eabcbade98a44462292c4666e62044": "백업이 완료되었습니다", "7b73b93bef61012a61ae023017d02721": "지정된 디렉토리 {}가 존재하지 않습니다!", "360cd057ad479f8662f7d1ba66f5cc8e": "{}에 업로드, 기다려주세요 ...", @@ -918,7 +918,7 @@ "d5d68ebd5292fcb5196ec251ba873f6c": "사용자 설정은 로컬 백업을 유지하지 않고 삭제 {}", "d2f7749d7de8ce82ae866155351919b3": "로컬 백업이 유지되었습니다", "778f2718d7245db0fad84757bad751d6": "만료 된 백업을 청소하지 못했습니다. 오류 : {}", - "dd78b9ebd58a8dea880563698d4c4330": "최신 백업 수를 유지하십시오 : {} 사본", + "dd78b9ebd58a8dea880563698d4c4330": "최신 백업 수를 유지하세요 : {} 사본", "5e2616a34c7b01f741cd85ad10bb9cbc": "만료 된 백업 파일은 디스크에서 청소되었습니다 : {}", "a0adb8f2e5f0d4397d48466bafd6f230": "만료 된 백업 파일은 {} : {}에서 청소되었습니다.", "380e4afa19e793ff5f8c1ecd6e2a228a": "백업 사이트 : {}", @@ -927,8 +927,8 @@ "8f116bc202c47d146df58722a3ac30c6": "디렉토리 크기 : {}", "1f9491d864cba19c180abe8941a92023": "제외 설정 : {}", "0a474e5e60d667669b163e7a561d1868": "파티션 {} 사용 가능한 디스크 공간은 다음과 같습니다. {}, 사용 가능한 inode는 다음과 같습니다. {}", - "0064cb4c6495eb71bc7dc65c5d87d19b": "대상 파티션의 사용 가능한 디스크 공간은 {}보다 작으며 백업을 완료 할 수 없습니다.디스크 용량을 늘리거나 설정 페이지에서 기본 백업 디렉토리를 변경하십시오!", - "48f2f0381d27c0907c8f4be1bbe3db3b": "대상 파티션의 사용 가능한 inode는 {}보다 작으며 백업을 완료 할 수 없습니다.디스크 용량을 늘리거나 설정 페이지에서 기본 백업 디렉토리를 변경하십시오!", + "0064cb4c6495eb71bc7dc65c5d87d19b": "대상 파티션의 사용 가능한 디스크 공간은 {}보다 작으며 백업을 완료 할 수 없습니다.디스크 용량을 늘리거나 설정 페이지에서 기본 백업 디렉토리를 변경하세요!", + "48f2f0381d27c0907c8f4be1bbe3db3b": "대상 파티션의 사용 가능한 inode는 {}보다 작으며 백업을 완료 할 수 없습니다.디스크 용량을 늘리거나 설정 페이지에서 기본 백업 디렉토리를 변경하세요!", "1d5217f82b4cef426f8ee3fdde465424": "파일 압축 시작 : {}", "5d38cd7c4d8e2b0c4fa5591f8eab0c37": "압축 실패!", "78aeba095e656fa57452b915487c1b99": "압축 완료, {} 초, 압축 패키지 크기 : {}", @@ -937,7 +937,7 @@ "003ee27348243be75678b9cff2903eb3": "백업 WordPress [{}]가 성공적으로", "a58667d22a7d741f6c90bc6082acf1c4": "데이터베이스 내보내기 실패!", "640a52c8f34bbd9ed9f214353440a490": "알림이 전송되었습니다", - "3875029ec22001de5ece63df8ea8286d": "{}, 총 {} {} 및 실패 {}로 백업하십시오.", + "3875029ec22001de5ece63df8ea8286d": "{}, 총 {} {} 및 실패 {}로 백업하세요.", "af3eb0c9d6b3f6e7e32d6b81df04a186": "백업 실패 {}/Total {} 사이트", "0dbafec38271230939c0fc9d41e9667c": "알림을 보내지 못했습니다", "2e828c10c1802fcfb4b8cabf63941c95": "이미 존재합니다", @@ -952,11 +952,11 @@ "cdc36eac77de70b19abc76387b634df4": "이 보내기 유형은 지원되지 않습니다", "57b2840409403678623872ce30eb14b6": "메시지 채널이 설치되지 않았습니다.", "a58320e783e827f26bcf2a246b8983b1": "잘못 : sshd_config 프로필이 존재하지 않습니다. 계속할 수 없습니다!", - "ba3811adeb131e9c127f72a3e07000a7": "성공적으로 비활성화하십시오", + "ba3811adeb131e9c127f72a3e07000a7": "성공적으로 비활성화하세요", "109ff77e4cc09bb260a8603d0f56321b": "매개 변수 전달 오류!", "d2e5be778eb1cc374dbc6241f9a74aac": "키 파일을 찾을 수 없습니다!", "4f20922485d59ff65db53473b17c0df9": "검색 내용은 비어있을 수 없습니다", - "7a428a0050c9d556e632a5f7175b24ed": "접미사는 비어있을 수 없습니다.모든 파일을 검색하려면 [ *. *]를 입력하십시오", + "7a428a0050c9d556e632a5f7175b24ed": "접미사는 비어있을 수 없습니다.모든 파일을 검색하려면 [ *. *]를 입력하세요", "cdd28535892f88791917e7ed77a8245c": "디렉토리는 비어 있거나 / /", "e7582a886ed8861ac63d9b2a7d94b973": "교체 할 내용은 비어있을 수 없습니다", "90d0982f5d024da53b21f69d3f0c8cbb": "데이터베이스가 존재하지 않습니다!", @@ -968,16 +968,16 @@ "679732c39dc813cb331ab3840f2409dd": "시스템은 지원되지 않습니다", "6d981b7b2e975f5b7717b27abe1f8ad3": "열리지 못했습니다", "03f4a47830f97377a35321051685071e": "닫기", - "3cab03c00dbd11bc3569afa0748013f0": "비활성", + "3cab03c00dbd11bc3569afa0748013f0": "비활성화", "cb456215c3333db0551bd0788bc258c7": "활성화", - "d07fa2f572b6d22996d25439da3f5d88": "파일을 성공적으로 다운로드하십시오", + "d07fa2f572b6d22996d25439da3f5d88": "파일을 성공적으로 다운로드하세요", "db1cbd9059a4f043534a00142cdfffde": "다운로드 실패", "c614196ffa00bf43880f547acfab993b": "패널은 백업 파일을 찾지 못합니다 : {}", "8080ccf57df49ce6d4792cc5041be1b8": "현재 로컬, Google 스토리지 및 AWS S3 백업 복원 만 지원합니다.", - "6f3446d8579a066540c5d7e68ff05f0b": "성공적으로 복원하십시오", + "6f3446d8579a066540c5d7e68ff05f0b": "성공적으로 복원하세요", "260ca9dd8a4577fc00b7bd5810298076": "성공", "1cbb155db1ca49d77f886c41b7850b48": "오류 다운로드!", - "5bf31cdecebf4cba00879d9088cc0a2d": "먼저 소프트웨어 스토어에 Pure-FTPD 서비스를 설치하십시오.", + "5bf31cdecebf4cba00879d9088cc0a2d": "먼저 소프트웨어 스토어에 Pure-FTPD 서비스를 설치하세요.", "6fa956d3a9e880b4190bfc1de47faa90": "사용자 이름은 불법이며 특수 문자는 허용되지 않습니다!", "d684964cf02bdb37eb086fb2470c0135": "사용자 이름은 불법이며 3 자 미만일 수 없습니다!", "a6825ba054814d831e71f83ac090740e": "System Critical Directory는 FTP 디렉토리로 사용할 수 없습니다!", @@ -985,29 +985,29 @@ "1b30f87e42de42b3e2cabf0a0fe3c449": "메모 편집", "8e61d99ca246955cc31b67a365b2a216": "끄기", "d154a5ff03bd9ccd568018f5e51d00cb": "켜기", - "977bb0ee804c260d3a00b2b36e161c34": "포트의 정수를 입력하십시오", + "977bb0ee804c260d3a00b2b36e161c34": "포트의 정수를 입력하세요", "bdd5c4786695af78089e85f507e5643c": "FTP 포트", "a3ccdafa1b1c0701991598cb4b2d9036": "FTP 계정이 설정되지 않았습니다", "4a743f34ec3bb93a8ad7cb4d36a17308": "FTP 계정이 설정되지 않았습니다 1", "195822d3b030f5055e98e823153daa76": "여러 구성과 일치하면이 작업이 중지되었습니다!", "e649cd842085301ff7921625076905fb": "데이터베이스 이름은 16 자를 초과 할 수 없습니다!", "a0813a2a76fdb183b1b15f92221b404a": "지정된 리디렉션 이름이 이미 존재합니다", - "5b35ea4807e1b63678ff55b391d9b39d": "리디렉션 된 도메인을 선택하십시오", - "a971e4ab85bfbda4fb6b1d57c1c8ed7d": "리디렉션 된 경로를 입력하십시오", + "5b35ea4807e1b63678ff55b391d9b39d": "리디렉션 된 도메인을 선택하세요", + "a971e4ab85bfbda4fb6b1d57c1c8ed7d": "리디렉션 된 경로를 입력하세요", "5f74874b100d16e90aa999e06b3e222f": "경로 형식이 잘못되고 형식은 /xxx입니다", "d5ba0768cd61aa8e0cc9b9b2addc2d43": "에이전트 디렉터리에는 다음과 같은 특수 기호가 있을 수 없습니다. ?, =, [,], (,*, &,^,%, $,#,@,!, ~,`, {,},>, <, \\\\,", "f0f290884251850f0d9fa6afc91d39c1": "도메인 이름 {}는 대상 도메인 이름과 동일합니다.", "ff1251600d8019bbf4280cafc534a39c": "{}, 대상 URL은 리디렉션 된 경로와 동일합니다.", - "664d009c794ec236879112599b14a697": "리디렉션해야 할 곳을 선택하십시오", - "e63cd7427eff8a5cb737dfd1118f11ff": "웹 사이트에 액세스 할 수 없습니다. 웹 사이트가 제대로 작동하는지 확인하십시오.", + "664d009c794ec236879112599b14a697": "리디렉션해야 할 곳을 선택하세요", + "e63cd7427eff8a5cb737dfd1118f11ff": "웹 사이트에 액세스 할 수 없습니다. 웹 사이트가 제대로 작동하는지 확인하세요.", "2f0e4710a58107860d6332f0d0192ba9": "웹 서버가 설치되지 않았거나 알 수없는 웹 서버", "79ec80b46087125542314cc116850dd4": "404 리디렉션 세트를 성공적으로 리디렉션합니다", "f1af189cd525a4d5180b8ccdc305a926": "%s
SSH를 입력하고 명령을 실행하십시오 : PIP 설치 MySQL-Python", + "77e957300746061855d609a7b7588caf": "MySQLDB 구성 요소가 누락되었습니다!
SSH를 입력하고 명령을 실행하세요 : PIP 설치 MySQL-Python", "ea8dca4dbb80a367725ec532356d4ad1": "데이터베이스를 연결하려면 오류, PLS는 데이터베이스 상태를 확인합니다!", - "da422f411f10ca19fbfc0c49d7b27279": "MySQL 루트 또는 사용자 비밀번호가 올바르지 않습니다. 재설정하십시오!", + "da422f411f10ca19fbfc0c49d7b27279": "MySQL 루트 또는 사용자 비밀번호가 올바르지 않습니다. 재설정하세요!", "99e3ce74a83862e58ec4ef7c7e141aae": "데이터베이스 사용자가 존재하지 않습니다!", "a6c2bafea90fd4f58496b7de0c879daa": "슬레이브 데이터베이스 삭제 실패, 데이터 디렉토리가 존재하지 않습니다!", - "c5352c3364b49f09f07e517d6f5e2a93": "실행이 실패하고 자동 수리를 시도했습니다. 나중에 다시 시도하십시오!", + "c5352c3364b49f09f07e517d6f5e2a93": "실행이 실패하고 자동 수리를 시도했습니다. 나중에 다시 시도하세요!", "ced1ff377b05e3ba5ae9837ac8c05b80": "데이터베이스 [{}]가 존재하지 않습니다!", "c38111d1a26efef2f1d89b0dfbef1ee7": "데이터베이스 [{}] 연결이 실패했습니다", "24a92be5bb3acba016a9274b9fb19c02": "삭제 실패, 데이터베이스에 연결하지 못했습니다!", @@ -1046,7 +1046,7 @@ "db548c645b7e4e30814165cd703be4cc": "데이터베이스 데이터를 재활용 빈으로 이동하지 못했습니다!", "06e6d1c8954814a2b29d4b4372b81b59": "데이터베이스는 BIN을 재활용으로 이동했습니다!", "c54a0be87c240156a0403ba306527fa7": "이 데이터베이스에는 재활용 빈이 존재하지 않습니다!", - "3709ae738cf2d6d0c179d816c02c66ae": "현재 데이터베이스에 동일한 이름이있는 데이터베이스가 있습니다.데이터 보안을 보장하려면 복구를 중지하십시오!", + "3709ae738cf2d6d0c179d816c02c66ae": "현재 데이터베이스에 동일한 이름이있는 데이터베이스가 있습니다.데이터 보안을 보장하려면 복구를 중지하세요!", "2fe4287f5ec52dd09118ba4d6a42747b": "데이터베이스가 복구되었습니다!", "1381dce91057a208e5a3e202526fbf6e": "데이터 복구 실패!", "0f6b8bb328918f160baf00077eb21846": "루트 암호는 비어있을 수 없습니다", @@ -1054,7 +1054,7 @@ "5ed48eedb205aa687178500c75228409": "루트 비밀번호를 성공적으로 수정했습니다!", "0c18dde1f9edfcff23eb2c2ec06673a2": "원격 데이터베이스의 루트 비밀번호를 변경할 수 없습니다", "5acf42ae8ac3a8558964691403e32ead": "수정하지 못하면 데이터베이스 사용자가 존재하지 않습니다!", - "10b75740108b26c220eb7e9bdfe18182": "데이터베이스 구성 파일을 확인하지 못했습니다. MySQL 구성 파일이 있는지 확인하십시오 [/etc/my.cnf]", + "10b75740108b26c220eb7e9bdfe18182": "데이터베이스 구성 파일을 확인하지 못했습니다. MySQL 구성 파일이 있는지 확인하세요 [/etc/my.cnf]", "98925ed54b314b48c7584b73affb9556": "데이터베이스 비밀번호는 비어있을 수 없습니다", "4d15b1b40d88837aa34b5fd3c5cf1cce": "지원되지 않는 데이터베이스 유형", "39120f2e6a6a039741500e300f1dfe5f": "백업 실패!", @@ -1068,12 +1068,12 @@ "8dfd382b72c921093f5a3301b74def8e": "현재 스토리지 디렉토리와 동일하게 파일을 이동할 수 없습니다!", "cb458646a9e62deb6d7989de0029f17a": "데이터베이스가 이동했습니다!", "cfcd208495d565ef66e7dff9f98764da": "0", - "a030c44033df4fd3ed1e860220df8d65": "이진 로그를 닫기 전에 MySQL 마스터 슬레이브 복제 플러그인을 제거하십시오!!", + "a030c44033df4fd3ed1e860220df8d65": "이진 로그를 닫기 전에 MySQL 마스터 슬레이브 복제 플러그인을 제거하세요!!", "22875aa10a21e1f51ae93cd2ee20fa07": "innodb_log_buffer_size는 8MB 미만일 수 없습니다", "c7846dcb854a38c1e2e62793d648c0a7": "MySQL 비밀번호 오류!", "8435eeb739684eaee648c5ddb368543a": "Binlog가 활성화되지 않았거나 Binlog 파일이 존재하지 않습니다!", "b1dd73e742e604bdbb83829a41c6846a": "MySQL 상태는 비정상적입니다!", - "c5c74be29ca306d24bddd4f6031d0220": "매개 변수가 누락되었습니다!날", + "c5c74be29ca306d24bddd4f6031d0220": "매개 변수가 누락되었습니다! 일", "8bfe471aeee92b5cfc257706f3667e80": "데이터 보안을 보장하기 위해 최근의 Binlogs를 삭제할 수 없습니다!", "2e3b42799f015adb46c85d60b8b1d7bb": "정리 완료!", "048b0b74236019df8c9f2c0e9470765f": "데이터베이스를 얻지 못했습니다", @@ -1088,25 +1088,25 @@ "ced5be071465948d917518318181e530": "작업이 실패하면 토큰이 만료됩니다", "ed0b8b7de7d6124343c2c12f29c84a2d": "작동 실패, 유효하지 않은 토큰", "2759543b1abc5021bf03258b0032b6fb": "이메일이 없습니다", - "238865a1f3c33fae77a59ce42a641346": "전체 정보를 작성하십시오", + "238865a1f3c33fae77a59ce42a641346": "전체 정보를 작성하세요", "9bd45853e9c7cca825b227f1472901c8": "참고 이름은 7자를 초과 할 수 없습니다", - "bdd1b7bb74543fb0fae1e75f372551d8": "추가하지 못했습니다. URL이 올바른지 확인하십시오.", + "bdd1b7bb74543fb0fae1e75f372551d8": "추가하지 못했습니다. URL이 올바른지 확인하세요.", "1cb8f68ece43505dde623d0e297426ac": "알림이 성공적으로 설정되었습니다", "557738e2e8b82bbb847ab9ecc6d83c8a": "DingTalk 정보가 잘못 구성되었습니다.", - "3781473f4af411ebb3610977e7275a3d": "Dingtalk 구성 오류, Dingtalk 로봇을 재구성하십시오.", + "3781473f4af411ebb3610977e7275a3d": "Dingtalk 구성 오류, Dingtalk 로봇을 재구성하세요.", "94418c3f275f6e8bca8e35751495f370": "Feishu 정보는 올바르게 구성되지 않습니다.", - "16ff838f760194a432da12e9bb4895d9": "보낸 실패, 발신자 구성 또는 수신기 정보가 올바른지 확인하십시오.", + "16ff838f760194a432da12e9bb4895d9": "보낸 실패, 발신자 구성 또는 수신기 정보가 올바른지 확인하세요.", "203b93a974c7142ca4b203443af817d9": "이메일 정보는 올바르게 구성되지 않습니다.", "8b42e24f005c452259add632215a77a8": "보안 입력 복잡성은 충분하지 않습니다
1, 길이는 9
2, 영어 + 디지털 조합 이상이어야합니다.", - "9ad1940cfc7c1786a62bb3d784420413": "성공적으로 운영하십시오!", + "9ad1940cfc7c1786a62bb3d784420413": "성공적으로 운영하세요!", "14e1e77b50aaf60272775c43894560ad": "전보 정보가 잘못 구성되었습니다.", - "39ddfbf65700efc9a7d16b22ebb867f3": "Telegram Configuration 오류 로봇을 재구성하십시오.", + "39ddfbf65700efc9a7d16b22ebb867f3": "Telegram Configuration 오류 로봇을 재구성하세요.", "691e87b47c012051a2e82b3c87a829be": "전체를 보내고 결과를 보내십시오 : true.", "c13967b1cbadeb9e2138223c0ed9fa0d": "전체를 보내고 결과를 보내십시오 : false.", "ed702c2212ce3c1acf4b5435100b44c2": "정보가 올바르게 구성되지 않습니다.", - "b1ffdb005a4c842221dd8267c47de40a": "알림이 꺼져 있습니다. 켜고 다시 시도하십시오.", + "b1ffdb005a4c842221dd8267c47de40a": "알림이 꺼져 있습니다. 켜고 다시 시도하세요.", "75983b18d2ecbb82d71afea42138a28b": "사용자 바인딩 정보는 얻지 못했습니다", - "f9d875367d71359c197b5fe0894cdfa8": "클라우드에 대한 링크가 실패했습니다. 네트워크를 확인하십시오.", + "f9d875367d71359c197b5fe0894cdfa8": "클라우드에 대한 링크가 실패했습니다. 네트워크를 확인하세요.", "4ad85d46374d522bcd3bf2eff2cf2600": "사용자 정보는 얻지 못했습니다", "2f9fc94872130dd0fb976fc6b0b96514": "WeChat 메시지 전달이 실패했습니다.-> {}", "0b27e119bbc4a725cbf863dfd52dc473": "정의되지 않은 fun_name", @@ -1115,12 +1115,12 @@ "36150f18886cfdedefd8e0ce031ebaa6": "실행 실패 : {}", "315e5172120e0508a5da1da63fe80903": "설정 실패!", "d78db61be0fee99b043b646bcb10a1cd": "설정 성공!", - "22af6aacc48ecde709e357b7f689fa4a": "설정하려는 도메인 이름을 선택하십시오!", + "22af6aacc48ecde709e357b7f689fa4a": "설정하려는 도메인 이름을 선택하세요!", "703f48fb3880275147fb6341a601d75a": "지정된 DNS는 존재하지 않습니다!", "6afe3a685b340d46d1eb5e96f46d8b53": "설정 실패!", "25d70741ea5481da5457bc36f316f2cd": "설정이 성공했으며 {} 레코드가 업데이트되었습니다!", "a0db66604e4493a5782f45097fcad859": "이 유형은 이미 존재합니다.", - "ffbeb35495d2bfaaf4957cc8db9cd8e6": "성공적으로 추가하십시오!", + "ffbeb35495d2bfaaf4957cc8db9cd8e6": "성공적으로 추가하세요!", "e7d698b3874686530ce8eade7d46cd89": "삭제 성공", "5ccf1f7d5db89204eee4cfdcdb0944d4": "삭제 실패", "7c7d6bc523a6ba94346ef9419f4b93a6": "삭제가 성공적으로", @@ -1131,7 +1131,7 @@ "7bc387e9ae161a403dac4ccfebbf012e": "도메인 이름 {}에 대해 유효한 DNS API 키 정보가 발견되지 않았습니다.", "e5a1f5bb9e10d065f27eac8d4e8c2e8d": "DNS 레코드를 삭제하지 못했습니다 : {}", "7c89ed1def10408d3584152d2ad2eb33": "도메인 이름이 이미 존재합니다.", - "55ab92952e1b4dca79cda76843eebe99": "성공을 추가하십시오", + "55ab92952e1b4dca79cda76843eebe99": "성공을 추가하세요", "584a4244515646b153102a8d302e8546": "패널이 로그인되지 않으므로 클라우드 업로드가 불가능합니다!", "347dae5469b16521e17a37cc2e3168ad": "지정된 인증서는 없습니다.", "cf25e0eebbaec98c374104d843fb31fe": "지역 삭제가 성공적이었습니다.", @@ -1147,7 +1147,7 @@ "ef703ece601c1e3204353eaba0cd7062": "잘못된 매개 변수 유형", "cad878a2802e3f05a8f0b94822b123ef": "인증서 정보가 없습니다.", "c3c25b414fbc136ec923a6d770fceedf": "인증서는 이미 존재합니다.", - "a93ac12141fcab1f5ddb502e738a4494": "성공적으로 저장하십시오", + "a93ac12141fcab1f5ddb502e738a4494": "성공적으로 저장하세요", "9fe357faf3332a5040d055fc390945ad": "인증서 정보를 찾을 수 없습니다", "3ff7e4a7ba896ece34407eed8e2c6489": "인증서는 Let에 의해 발행되지 않습니다", "44eb815db7510a33f531b5b062964bb6": "성공을 거두십시오!", @@ -1160,22 +1160,22 @@ "5ff082a692a93d7aff84fffe2515e9d9": "오류 로그가 없습니다", "5efde395239afdd2df0b9a32c159768f": "MySQL이 설치되지 않았습니다!", "dacf49abac88060f508283464e6488b3": "로그 파일이 존재하지 않습니다!", - "cc04dd5405df97665d385bf9f945a1a5": "[{}] 웹 사이트 경로를 얻지 못했습니다. IIS 가이 사이트에 존재하는지 확인하십시오. 제작 후 패널 에서이 사이트를 삭제하십시오.", + "cc04dd5405df97665d385bf9f945a1a5": "[{}] 웹 사이트 경로를 얻지 못했습니다. IIS 가이 사이트에 존재하는지 확인하세요. 제작 후 패널 에서이 사이트를 삭제하세요.", "5043b4dd5ee84b81c695150ce7b71a1d": "일반적인 프로그램에는 기본 포트를 사용하지 마십시오!", "6bfd22d9b1190dd6f3252ffc5f07843c": "성공적인 설치", "9ce49cccc03f08a6f144e6b2951065ca": "설치가 실패했습니다", "6ec9c7ee4154392f5dcc682fc786e84b": "알 수없는 제어 명령!", "4d0e2b9d7d854b99d31322e347a8a358": "방화벽에는 {}에", "0024ce604e62e9ada858f0e1faf08fd5": "IP 주소입니다", - "330683b7ebc12ef31c9b1c21b95f9d92": "진행하기 전에 방화벽을 활성화하십시오.", - "d27cddcec5e0f66a566fbcdceb5dfef6": "성공적으로 삭제하십시오!", - "271bac9db0d6fb9f971271a8f37ca6c5": "DNSPython 모듈을 먼저 설치하십시오 : BTPIP 설치 DNSPYTHON", + "330683b7ebc12ef31c9b1c21b95f9d92": "진행하기 전에 방화벽을 활성화하세요.", + "d27cddcec5e0f66a566fbcdceb5dfef6": "성공적으로 삭제하세요!", + "271bac9db0d6fb9f971271a8f37ca6c5": "DNSPython 모듈을 먼저 설치하세요 : BTPIP 설치 DNSPYTHON", "4fe093af429d1f1fc2198447a1025931": "매개 변수 오류", "03460a8fbae274ee5f04e0ba1fa34812": "현재 기능은 전문 버전에만 해당됩니다", - "7f17f95382055aefa5d3e915c72a98d4": "도메인 이름을 입력하십시오", + "7f17f95382055aefa5d3e915c72a98d4": "도메인 이름을 입력하세요", "35c9657c6576e84644303a7ad43318f5": "도메인 이름은 IPv6 주소로 해결되며 포트 규칙은 지원되지 않습니다.", "49f648bea338734c76f49de41c91aebe": "도메인 이름 {} 해상도가 성공적으로 추가되었습니다", - "2edad93b0f08e091c3cc25470e8ddf6f": "도메인 이름 해상도가 해결되지 않았거나 해상도가 발효되지 않았습니다.해결 된 경우 10 분 후에 다시 시도하십시오.", + "2edad93b0f08e091c3cc25470e8ddf6f": "도메인 이름 해상도가 해결되지 않았거나 해상도가 발효되지 않았습니다.해결 된 경우 10 분 후에 다시 시도하세요.", "7a3359de6c4391fe9a15eb0425846fd8": "도메인 이름 {} 이미 존재합니다", "4fb42cb76f14ea60b67f9bceb6c4a49e": "모든 IP 규칙이 제거되었습니다.", "0b3157eba7dd3451bc0de1c6ca480ec2": "성공적인 운영", @@ -1183,20 +1183,20 @@ "c49175dd1fdb203713f6c1476a7f91b3": "알 수없는 제어 명령!", "2faec1f9f8cc7f8f40d521c4dd574f49": "할 수 있게 하다", "8d66632de28752245beaa40b1ccc1cbf": "포트 전달을 끄십시오", - "2d5f7bdbdb53fff3cd55702cbdbfa8bd": "국가 이름을 입력하십시오!", + "2d5f7bdbdb53fff3cd55702cbdbfa8bd": "국가 이름을 입력하세요!", "f8bacfec9ade03b0f3584356b898fca8": "실패한 추가", "eac00ab48eb660db9a0929e6f036ecf2": "이 영역은 이미 추가되었습니다. 다시 추가하지 마십시오!", - "805139d226669cfd0320c760cb10e87c": "올바른 영역 이름을 입력하십시오!", + "805139d226669cfd0320c760cb10e87c": "올바른 영역 이름을 입력하세요!", "969a6c87a281f49bd8fc2c1e43f66ec4": "작동 실패", "0683e26aace0f0c175199272031ce3e6": "포트는 비어있을 수 없습니다!", - "8e7387f80c2d22c7515b38afef01b9c2": "매개 변수 전달 오류, 포트 필드를 전달하십시오", + "8e7387f80c2d22c7515b38afef01b9c2": "매개 변수 전달 오류, 포트 필드를 전달하세요", "926dba790adb1d53c53941a06ccb2da7": "포트는 비어있을 수 없습니다", "705c5fd65ddbcaea039c3aa2f5e135ee": "범위 포트는 지원되지 않습니다", "84cd1055b1130ac448baec04de07d986": "포트는 숫자 여야합니다", "7d134add7af4d8e6fdf31cde8332da30": "포트 범위는 1-65535입니다", - "f11c2e32a42274ed9160658e259b2e58": "규칙을 무시하십시오. {}!", - "8c7cabcdcfe7a6ed8b0e27b04ad408e6": "규칙을 성공적으로 무시하십시오!", - "f5800cf5bc9b3d8aee2ea9222951ac93": "규칙 무시를 성공적으로 취소하십시오!", + "f11c2e32a42274ed9160658e259b2e58": "규칙을 무시하세요. {}!", + "8c7cabcdcfe7a6ed8b0e27b04ad408e6": "규칙을 성공적으로 무시하세요!", + "f5800cf5bc9b3d8aee2ea9222951ac93": "규칙 무시를 성공적으로 취소하세요!", "85056ee18e1ac6fefa9f955da5a155e0": "FAIL2BAN 플러그인이 설치되지 않았습니다", "dfda9d0c9d44e155e4125ebccfcbea99": "성공적으로 잠금 해제", "6ed05063a343a4a8c2fb6bb191f57644": "상태가 정상입니다, 건너뜁니다.", @@ -1207,9 +1207,9 @@ "944ec5555dd02ca9855e2aad5f31ecc3": "만료 인증서를 찾을 수 없습니다. 건너뜁니다.", "d7316ce06449be2b2961a61bc8b90044": "간격에 도달하지 못합니다.", "b388dbfa7884f3af33ba7551726ec631": "패널 로그인 알람은 하나의 알람 모드 만 지원합니다.", - "bc5339f81ff38e283bb920dfb33ca914": "패널 로그인 알람 중단을 지원하지 않으므로 일시 중단 해야하는 경우 직접 삭제하십시오.", + "bc5339f81ff38e283bb920dfb33ca914": "패널 로그인 알람 중단을 지원하지 않으므로 일시 중단 해야하는 경우 직접 삭제하세요.", "b5db9d7f14a728ef1b07894e6c776f4b": "SSH 로그인 알람은 하나의 알람 모드 만 지원합니다.", - "cbcde9242de40f0cc518436d69e567f8": "SSH 로그인 알람 중단을 지원하지 않습니다.정지 해야하는 경우 직접 삭제하십시오.", + "cbcde9242de40f0cc518436d69e567f8": "SSH 로그인 알람 중단을 지원하지 않습니다.정지 해야하는 경우 직접 삭제하세요.", "f03b55547b4adc9333d232a1cb83e437": "SSL은 하루에 한 번 밀어 넣고 건너 뜁니다.", "a0e74493945a50b77b66297bf41b1168": "사용 가능한 사이트가 없습니다.", "c46efda9f9b8b41255ed3bc215bdb2fc": "하루에 한 번 밀고 건너 뛰십시오.", @@ -1233,41 +1233,41 @@ "152b651d5c0151cc3864d20d187d77fe": "통과하다!", "bea367683a2238e537e3833d0b15622e": "지정된 서버가 이미 존재합니다 : [{} : {}]", "0b5f04d53d3af37f88b9b46b568d1dee": "실패 추가 : {}", - "0667c3c8ef82f94545b286b69ef83030": "매개 변수가 전달 된 오류가 발생했습니다. 다시 시도하십시오!", + "0667c3c8ef82f94545b286b69ef83030": "매개 변수가 전달 된 오류가 발생했습니다. 다시 시도하세요!", "4621e9c9b573b1bc868d310934d04cac": "지정된 원격 서버가 존재하지 않습니다!", "81eef63c48701d6d256ad3e7789bd8f6": "성공적으로 삭제 : {}", "c1f0a2e54f38603c731c9625f35aaa11": "성공적으로 수정되었습니다!", "072b1fb2c5c32e99fea89190987f1511": "편집 실패 : {}", "0267067a2f76a814e9f2c9c111fa6a2e": "MySQLDB 구성 요소가 누락되었습니다!", "b1b74781e4481f083f18ad6719a6b583": "데이터베이스를 연결하려면 오류가 발생합니다", - "94bce4b2a745d07c681c29af6824d435": "데이터베이스 연결 시간이 초과되면 구성이 올바른지 확인하십시오.", + "94bce4b2a745d07c681c29af6824d435": "데이터베이스 연결 시간이 초과되면 구성이 올바른지 확인하세요.", "34fbe37d35b2a1bc1a58bdcc559be395": "MySQL 비밀번호 오류.", - "3d28138b07e32fc589d1a654980b1c28": "최대 연결 수를 초과하면 나중에 다시 시도하십시오.", - "f5f1c56c404d98779a4fbe5630f7d778": "데이터베이스 연결이 실패했습니다. 루트 사용자가 127.0.0.1에 액세스 할 수있는 권한이 있는지 확인하십시오.", + "3d28138b07e32fc589d1a654980b1c28": "최대 연결 수를 초과하면 나중에 다시 시도하세요.", + "f5f1c56c404d98779a4fbe5630f7d778": "데이터베이스 연결이 실패했습니다. 루트 사용자가 127.0.0.1에 액세스 할 수있는 권한이 있는지 확인하세요.", "a9905dc3078535a661eb1aeb06f5a6da": "데이터베이스 비밀번호가 잘못되었습니다!", - "b99ad6bb4ca9c32cc31655c1f26ad347": "연결 시간이 끝나면 TCP/IP 기능을 수동으로 활성화하십시오 (시작 메뉴-> SQL 2005-> 구성 도구-> 2005 네트워크 구성-> TCP/IP-> 활성화)", + "b99ad6bb4ca9c32cc31655c1f26ad347": "연결 시간이 끝나면 TCP/IP 기능을 수동으로 활성화하세요 (시작 메뉴-> SQL 2005-> 구성 도구-> 2005 네트워크 구성-> TCP/IP-> 활성화)", "734539622328115b6a79770792621598": "지정된 데이터베이스가 이미 존재합니다. 반복적으로 추가하지 마십시오.", "d0f9cbbc082071764bd58cb868dc86d8": "작업에 실패했으며 원격 데이터베이스는 작업을 지원하지 않습니다.", - "2ff54c9774281fd464a75fac44b2bbee": "권한이 충분하지 않으면 루트 사용자를 사용하십시오.", + "2ff54c9774281fd464a75fac44b2bbee": "권한이 충분하지 않으면 루트 사용자를 사용하세요.", "d4e4cbdf86adbbf8338c46fa850b0d97": "실패한 생성 SQL Server에는 GUI 지원이 필요합니다", "0e50ad3c23c4eb42db81e7ea3da4848e": "매개 변수 전달 오류.", "9c367cb765f842bfe6a0465674b8d311": "운영이 성공적입니다.", - "7a48d7e0ce17e4a5ad1dadbfa199e464": "성공적으로 복원하십시오.", - "e9bc861d80a7d42ec15bcdb7e5529cda": "실패를 복원하십시오.", + "7a48d7e0ce17e4a5ad1dadbfa199e464": "성공적으로 복원하세요.", + "e9bc861d80a7d42ec15bcdb7e5529cda": "실패를 복원하세요.", "011f5bc126ef873c518707207467b8bf": "MongoDB 서비스는 아직 시작되지 않았습니다!", "22ccd99629b3c3d5a8533884821f4189": "데이터베이스 비밀번호는 비어 있거나 특수 문자가 없습니다!", - "c976dec7ee3b051c53f9761bd9aa73c2": "데이터베이스 비밀번호는 중국어가 될 수 없습니다. 이름을 변경하십시오!", + "c976dec7ee3b051c53f9761bd9aa73c2": "데이터베이스 비밀번호는 중국어가 될 수 없습니다. 이름을 변경하세요!", "282a7d2dabc5b37dfe75dc697dbbacae": "데이터베이스 유형 Sid IND INT 유형!", "e1fa0193b4a126d332026f2c608681c9": "데이터베이스 이름은 비어있을 수 없습니다!", "5c58f12f149b01b546d97b25b95c0df3": "지정된 데이터베이스는 존재하지 않습니다.", "89f2b141f7790003d85cee94389a5899": "가져 오기 경로는 그렇지 않습니다", "579cd57c80fb53784de0bd606c14891e": "압축 파일 만 가져올 수 있습니다!", - "c3522356d75eaa63da51f2c2f6c9bd84": "백업 도구 부족, 먼저 [App Store]를 통해 MongoDB를 설치하십시오!", + "c3522356d75eaa63da51f2c2f6c9bd84": "백업 도구 부족, 먼저 [App Store]를 통해 MongoDB를 설치하세요!", "4143861cb7ed8d905267a8ea56ad5935": "파일 형식이 잘못되었습니다!", - "2e36f9ef630e2714cd71fe91d4e8bf15": "비밀번호 인증이 활성화되었습니다.데이터베이스가 백업되면 비밀번호를 비울 수 없습니다.비밀번호를 설정하고 다시 시도하십시오!", + "2e36f9ef630e2714cd71fe91d4e8bf15": "비밀번호 인증이 활성화되었습니다.데이터베이스가 백업되면 비밀번호를 비울 수 없습니다.비밀번호를 설정하고 다시 시도하세요!", "d28fa16e1236163fbc5787469193f18f": "데이터베이스 백업이 실패하고 파일이 존재하지 않습니다", "04aa3a99d1550de2a89aa408790e0234": "백업 실패, {}.", - "2a389cf13e591eb8202af139c82a762c": "백업이 성공적으로 실행되고 백업 파일이 1B 미만이므로 백업 무결성을 확인하십시오.", + "2a389cf13e591eb8202af139c82a762c": "백업이 성공적으로 실행되고 백업 파일이 1B 미만이므로 백업 무결성을 확인하세요.", "37ef1150b54080db22f4de766c00a902": "데이터베이스 유형 sid int type!!", "bb372e9b5c377f89809981e38570e41b": "MongoDB 서비스는 아직 시작되지 않았습니다!", "1a80d7a1efd89c63a3f8f33bd9b07397": "데이터베이스 유형 SID에는 int가 필요합니다!", @@ -1278,30 +1278,30 @@ "e3d61b8e9ff54176be78612b4de00321": "데이터베이스에는 비밀번호 액세스가 활성화되지 않습니다.", "b949f2f31ecdc2714448b254511fb797": "데이터베이스 이름에는 특수 문자가 포함될 수 없습니다", "42ea48e57900c1ca39c38b7740b156e5": "데이터베이스가 존재하지 않습니다!", - "ff14e82e3d1041c3fe4986830981065d": "데이터베이스 비밀번호가 비어 있습니다.먼저 비밀번호를 설정하십시오.", + "ff14e82e3d1041c3fe4986830981065d": "데이터베이스 비밀번호가 비어 있습니다.먼저 비밀번호를 설정하세요.", "2de872b07fddc8df9c2085fa214e780b": "백업 도구 부족, 소프트웨어 스토어 PGSQL 관리자를 먼저주십시오!", - "200e48e96725c9ce425d7dbf388cbb8e": "백업 파일 크기는 2KB보다 작습니다.백업 무결성을 확인하십시오.", - "894f4e4dbeef39cd673987e501f8c2ab": "sql 、 gz 、 zip 파일을 선택하십시오!", - "f5905bb1f1098b37b11d1e1787296924": "복구 도구 부족, 소프트웨어 관리를 사용하여 PGSQL을 설치하십시오!", + "200e48e96725c9ce425d7dbf388cbb8e": "백업 파일 크기는 2KB보다 작습니다.백업 무결성을 확인하세요.", + "894f4e4dbeef39cd673987e501f8c2ab": "sql 、 gz 、 zip 파일을 선택하세요!", + "f5905bb1f1098b37b11d1e1787296924": "복구 도구 부족, 소프트웨어 관리를 사용하여 PGSQL을 설치하세요!", "ba32600a98bc2e63a7609dfd18f7a764": "데이터베이스 암호는 비어있을 수 없습니다.", "e7381be5e7f44708306bc9816f83481c": "실패를 수정하면 지정된 데이터베이스가 존재하지 않습니다.", - "7d354324037030e692b06b94f9d024c7": "PGSQL이 설치되거나 시작되지 않은 경우 먼저 설치하거나 시작하십시오.", + "7d354324037030e692b06b94f9d024c7": "PGSQL이 설치되거나 시작되지 않은 경우 먼저 설치하거나 시작하세요.", "a877289c330ccbad75d3674c560e89d3": "비밀번호는 8 자리 이상이어야합니다.", - "da3304c09f836a15a0c1ef43d28ce833": "{} 파일이 존재하지 않습니다. 설치가 완료되었는지 확인하십시오!", + "da3304c09f836a15a0c1ef43d28ce833": "{} 파일이 존재하지 않습니다. 설치가 완료되었는지 확인하세요!", "e6d4787574cefef9b9dd6b3ab549bf68": "관리자 암호가 성공적으로 변경되었습니다.절차.", - "b67d85c71006c071b58767216be65eb2": "원격 PGSQL에 연결하면 실패합니다.결함을 해결하기 위해 다음 작업을 수행하기 위해 다음 작업을 수행합니다.
1 、 데이터베이스 포트가 정확하고 방화벽은 액세스 할 수 있습니다
2 、 데이터베이스 계정 암호가 올바른지 확인하십시오.", + "b67d85c71006c071b58767216be65eb2": "원격 PGSQL에 연결하면 실패합니다.결함을 해결하기 위해 다음 작업을 수행하기 위해 다음 작업을 수행합니다.
1 、 데이터베이스 포트가 정확하고 방화벽은 액세스 할 수 있습니다
2 、 데이터베이스 계정 암호가 올바른지 확인하세요.", "0fbbe53688d144223b78036507d85b47": "SQLServer 데이터베이스는 숫자로 시작할 수 없습니다!", "27cfc7c44317601d8cbdc241c928d17c": "SQL Server 암호 복잡성 정책은 일치하지 않으며 8-128자가되어야하며, 중 3 개를 대문자, 소문자, 숫자, 특수 기호에 포함시킵니다!", "f06bab2dcffc83aa9e8e3be555a9e56f": "작동 실패.원격 데이터베이스를 백업 할 수 없습니다.", "20fe68f46608aefa2c884b9390aa4cd2": "파일이 유효한 zip 파일이 아니기 때문에 가져 오기가 실패했습니다.", "a52ecc2f72eafcf3453f9a50ffb7d0aa": "데이터베이스의 비밀번호 [", - "df4ac7366fa4fda98e94ea68f0e40d3c": "SQL 서버가 설치되거나 시작되지 않았습니다.먼저 설치하거나 시작하십시오", + "df4ac7366fa4fda98e94ea68f0e40d3c": "SQL 서버가 설치되거나 시작되지 않았습니다.먼저 설치하거나 시작하세요", "935e0f201a754f406575ec14bde54a21": "SATHE 암호는 비어 있거나 특수 기호가 없을 수 없습니다", "896543f6d67a62d4c594b28eeee3c923": "SA의 비밀번호가 성공적으로 변경됩니다.", - "bb0b766f654bd8338d9dabb8c57378ff": "데이터베이스 생성에 실패했습니다.MySQL 실행 상태를 확인하고 다시 시도하십시오.", + "bb0b766f654bd8338d9dabb8c57378ff": "데이터베이스 생성에 실패했습니다.MySQL 실행 상태를 확인하고 다시 시도하세요.", "439d4d68575132c1a273fc36bbf6f72c": "id {}가있는 Site-Info가 없습니다.", "bff0e83714a9073c270776c37cc64791": "인자 오류", - "5766c6d37d04fdab31ce8622fcf6fab6": "규칙을 가져 오기 전에 방화벽을 시작하십시오!", + "5766c6d37d04fdab31ce8622fcf6fab6": "규칙을 가져 오기 전에 방화벽을 시작하세요!", "277467377ce35c4535ce0c9e36f4978f": "규칙을 내보낼 수 없습니다", "686160d344e24c2dbcac934048f03baf": "파일은 비어있을 수 없습니다", "d9523e347c0a2971241d3ac4120a2854": "파일이 존재하지 않음", @@ -1309,7 +1309,7 @@ "b6d16a8173dd0d43f580bc6882dc5e9a": "가져오기 성공", "67abf11af36ac64a147218d125e8418f": "대상 주소 형식 오류", "d11dfae04c7fd00b48b744926f7e733b": "설정이 성공하고 다음 규칙이 실패했습니다. {}", - "434f027ff1a807413707c94a43c9a578": "방화벽을 먼저 실행한 후 규칙을 설정하십시오!", + "434f027ff1a807413707c94a43c9a578": "방화벽을 먼저 실행한 후 규칙을 설정하세요!", "7b6454aa962895f5d5147d035f91a0e2": "대상 포트는 비워둘 수 없습니다.", "9c6da8c31a9a2d7a04756b09f01696e7": "끝 부분 {} {{, 중복해서 추가하지 마세요", "229ce80f45424e882fdc5274cf37f295": "지정한 IP 주소 형식이 잘못되었습니다.", @@ -1328,7 +1328,7 @@ "ba797e05926242a5135289c98dcd9d36": "원본 포트는 비워 둘 수 없습니다.", "3ec1da1913c04a2c53dd6d6379f99d4c": "대상 주소는 비워둘 수 없습니다", "efef8b005464719937a7daa96ed5b3d8": "포트 포워딩 규칙이 이미 존재합니다, 중복해서 추가하지 마세요!", - "4943a6954b9887aa5989713fcbb2a0d1": "오류 : {} 서버에 연결할 수 없으면 [AK/SK/Storage] 설정이 올바른지 확인하십시오!", + "4943a6954b9887aa5989713fcbb2a0d1": "오류 : {} 서버에 연결할 수 없으면 [AK/SK/Storage] 설정이 올바른지 확인하세요!", "da10c98ffbf34b30edec9cf47d998a68": "성공적인 응용 프로그램!", "24380483226504475d196fdcff7a6c77": "서버를 연결하지 못했습니다!-1", "353d91a7655b3ef5e024d07eef1888ab": "서버를 연결하지 못했습니다!-2", @@ -1341,13 +1341,13 @@ "056197513cf8b469874e09b037fa5aaf": "현재 웹 서버는 지원되지 않습니다.", "7ec0387d04c7d7c8259b497464fa3282": "phpmyadmin은 이미 {}!", "4790f238a5706fa03ed78c98efabd5f2": "바인딩이 유효합니다!", - "c6fdc537935f8c3e97a442e8be9adf20": "업로드 된 폴더와 동일한 이름을 가진 파일이 있습니다.확인하고 다시 시도하십시오", + "c6fdc537935f8c3e97a442e8be9adf20": "업로드 된 폴더와 동일한 이름을 가진 파일이 있습니다.확인하고 다시 시도하세요", "055df73dfeac55aa4ddb8b31e98d3fea": "현재 사용자에게 접근하거나 수정할 수 있는 충분한 권한이 없습니다 {}", "3ff13f637b9e318936f8d30f77c57c64": "현재 디렉터리는 읽기 전용 권한입니다", "8c7dd0d2966be0d1427bb839c94a993a": "업로드 실패 : {}", "fc937a95d443a5accb3dc43dabf8a4c0": "디스크 공간 부족", "dc494cbbc1dad9fe8a2d219d561840d5": "파일 업로드 오류가 발생했습니다 임시 파일을 삭제해 주십시오【 {} {", - "45cd3dad5e3ac153966eff8aaf30c33d": "업로드한 파일과 같은 이름의 폴더가 있습니다. 확인 후 다시 시도하십시오", + "45cd3dad5e3ac153966eff8aaf30c33d": "업로드한 파일과 같은 이름의 폴더가 있습니다. 확인 후 다시 시도하세요", "eaf87474bf8e355eb84fadd0caf91f14": "현재 사용자에게 접근하거나 수정할 수 있는 충분한 권한이 없습니다", "fe56b3a6f3a8b6a24f60a62408351b0e": "이것은 Recycle Bin 디렉토리입니다. 오른쪽 상단의 [Recycle] 버튼을 누르십시오.", "8ec1fba8a89cb67bc958d7b2424156e9": "파일은 휴지통으로 이동했습니다", @@ -1358,21 +1358,21 @@ "11c99562b6212de14ddf1dcb06ea1696": "라인업에 작업이 없음 {}", "94f33212bde1cd76797fe4fe78b2167f": "{}에서 {}까지 작곡가 업그레이드", "f5484a1a111b9d70ecaafb36a7df48f6": "이메일은 존재하지 않습니다", - "59d26291d38cd716232dd08e1c6c5304": "이메일을 입력하십시오", + "59d26291d38cd716232dd08e1c6c5304": "이메일을 입력하세요", "d76fd2d8c3dffcbab0885c9bdf78fe16": "이메일이 이미 존재합니다", - "fec0532445dc524beeac7255c4d34ef8": "정보를 작성하십시오", - "ffa0dfd81ff9459785617a7a73a7d9f4": "이메일 전송 실패, STMP 비밀번호가 올바른지 또는 호스트가 올바른지 확인하십시오.", + "fec0532445dc524beeac7255c4d34ef8": "정보를 작성하세요", + "ffa0dfd81ff9459785617a7a73a7d9f4": "이메일 전송 실패, STMP 비밀번호가 올바른지 또는 호스트가 올바른지 확인하세요.", "ae73c4d1db318d09f4792e23f1b80584": "데이터가 없습니다", "7ee533d91b6b3524d4fcfcde77dc4987": "성공적으로 비어 있습니다", - "11f60f1528977a463a3ef16a8876e4f6": "사서함이 존재하지 않습니다. 사서함 목록에 추가하십시오.", - "009654d37f429367967bd49ee47c26f2": "이메일 제목을 작성하십시오", - "2ab41d39d3f12250b5dc3ae0d610caa4": "이메일 콘텐츠를 입력하십시오", - "0c1828ed3fbaf5eec3fb8ad0a7aa957a": "SMTP 정보를 찾을 수 없었습니다. 설정에서 사용자 정의 메일 스탬프 정보를 다시 구입하십시오.", + "11f60f1528977a463a3ef16a8876e4f6": "사서함이 존재하지 않습니다. 사서함 목록에 추가하세요.", + "009654d37f429367967bd49ee47c26f2": "이메일 제목을 작성하세요", + "2ab41d39d3f12250b5dc3ae0d610caa4": "이메일 콘텐츠를 입력하세요", + "0c1828ed3fbaf5eec3fb8ad0a7aa957a": "SMTP 정보를 찾을 수 없었습니다. 설정에서 사용자 정의 메일 스탬프 정보를 다시 구입하세요.", "03212d3e6324204bce266e74779ab3c9": "성공적으로 보냈습니다", "494247bcb984f09ad09176c8256e64ac": "보내지 못했습니다", - "6f81b0f19f4ef82bf31eeb9c20979f90": "추가 실패, URL이 올바른지 확인하십시오", - "3d17d5b07e5aaa72a35e60707027d352": "구성 한 손톱의 구성 정보는 찾을 수 없었습니다. 설정을 추가하십시오.", - "a75863f88c3c7b7cb43989b7b406a82a": "보내야 할 데이터를 입력하십시오", + "6f81b0f19f4ef82bf31eeb9c20979f90": "추가 실패, URL이 올바른지 확인하세요", + "3d17d5b07e5aaa72a35e60707027d352": "구성 한 손톱의 구성 정보는 찾을 수 없었습니다. 설정을 추가하세요.", + "a75863f88c3c7b7cb43989b7b406a82a": "보내야 할 데이터를 입력하세요", "5de6533189f891dc2a44ac945f53efce": "비밀번호 복잡성 확인이 비활성화되었습니다", "06fae24317d8f2b5ef156f11a0fba311": "비밀번호 복잡성 검증이 활성화되었습니다", "946cc3a7fae7508e3d34b4ed139ee2d8": "비밀번호 만료 인증이 비활성화되었습니다", @@ -1381,7 +1381,7 @@ "db6890122bbd9e97fb8e1b117b367358": "비밀번호 만료 시간은 [{}] 일로 설정됩니다", "486b7d3b3ca271d873ef1c9d4c0e07a7": "비밀번호가 변경되었습니다!", "8e6595abbb40f247c74fffdf61bd5a00": "설정 실패!다시 로그인해 보세요.", - "6c6b6e84490b34b36f33dcc8ae85fdc2": "두 번 입력 한 비밀번호는 일관성이 없습니다. 다시 시도하십시오!", + "6c6b6e84490b34b36f33dcc8ae85fdc2": "두 번 입력 한 비밀번호는 일관성이 없습니다. 다시 시도하세요!", "55f5bbcf01ad984ea402d50061609240": "암호는 5 자 미만일 수 없습니다!", "59b39458556877d386a837773736eb2d": "비밀번호의 길이는 8 자 이상이어야하며 3 자리 이상의 숫자 조합, 대문자, 소문자 및 특수 문자가 포함되어 있어야합니다.", "704372ffb884853d30e3b247765bb73a": "두 번 입력 한 사용자 이름은 일관성이없고 Plesea는 다시 시도합니다!", @@ -1401,7 +1401,7 @@ "52d7cd44ec88df37e528f140e2affcf4": "시간 초과는 정수 여야합니다!", "5ad475cca538c88655b2299588b9a091": "시간 초과 시간은 300S에서 30 일 사이 여야합니다", "7b66709539a01edb71eacc470ce7f4bc": "도메인은 IP 주소를 바인딩 할 수 없습니다", - "f522b971d05877c869be6f81b9eb7fe8": "올바른 서버 IP를 설정하십시오", + "f522b971d05877c869be6f81b9eb7fe8": "올바른 서버 IP를 설정하세요", "716e57b0f48924438fc1209c06353fc7": "시스템 임계 디렉토리를 기본 백업 디렉토리로 사용할 수 없습니다", "17ceb8d2128aa1ce5f2f51ef5b19a809": "시스템 임계 디렉토리를 기본 사이트 디렉토리로 사용할 수 없습니다", "e60263ac381ae4a9ad460a5c706b9b5a": "구성 저장", @@ -1409,23 +1409,23 @@ "59bfee3685345c8facd75248b7f17a8c": "시간 초과 기간은 30 일을 초과 할 수 없습니다", "b1770445e55578871051298a4bca2ba8": "키 디렉토리를 웹 사이트 구축의 기본 디렉토리로 사용할 수 없습니다.", "395fa878a1482de198dd9765e03cb0df": "보안 입구는 6 자 미만일 수 없습니다!", - "7030414be42829df4fa2102738ad98f8": "이 입구는 패널에서 사용되었습니다. 다른 입구를 설정하십시오!", + "7030414be42829df4fa2102738ad98f8": "이 입구는 패널에서 사용되었습니다. 다른 입구를 설정하세요!", "3aadff910a401b163029bd5915aea8ee": "입구 주소 형식이 잘못되었습니다 (예 :/my_panel)", "ac67b91773937f05690f0eed86ddc37c": "업로드 크기 제한은 2MB 미만일 수 없습니다.", - "f2c35784d83c39c7804be9817c498d97": "30에서 86400 사이의 값을 입력하십시오!", + "f2c35784d83c39c7804be9817c498d97": "30에서 86400 사이의 값을 입력하세요!", "10951b15ad70ad91dd672b3942e85954": "잘못된 운영 모드", "c277ef8831d8bcad68fafb826e050fe1": "시간 서버에 연결하지 못했습니다!", "7d8946452a1ad712185ad106a09d83cb": "저축 일의 수는 불법입니다!", "4218a6e9c12f1fa453fa8e5c1b00bd44": "이메일 형식은 불법입니다", - "df6565d8975cca7ba4276300b9c38bdf": "SSL이 꺼졌습니다. HTTP 프로토콜을 사용하여 패널에 액세스하십시오!", - "e99cd51a6216bc73a3e8ea8de05a54d8": "페이지를 새로 고치고 다시 시도하십시오!", - "74f3d2f09425457bc7a3fd34017631c9": "오류, pyopenssl을 자동으로 설치할 수 없습니다!

plesea 수동 설치를 시도하십시오 : PIP 설치 pyopenssl

", + "df6565d8975cca7ba4276300b9c38bdf": "SSL이 꺼졌습니다. HTTP 프로토콜을 사용하여 패널에 액세스하세요!", + "e99cd51a6216bc73a3e8ea8de05a54d8": "페이지를 새로 고치고 다시 시도하세요!", + "74f3d2f09425457bc7a3fd34017631c9": "오류, pyopenssl을 자동으로 설치할 수 없습니다!

plesea 수동 설치를 시도하세요 : PIP 설치 pyopenssl

", "8e4aa3a825e526915c867d103bc88064": "SSL이 켜지고 Plesea는 HTTPS 프로토콜을 사용하여 패널에 액세스합니다!", "e47079f267dd01176afaa962dcd62358": "메모 또는 패널 주소 중복!", "8c7a5b3c69236d00b3577be9c91a71cc": "요청 된 패널 정보가 존재하지 않습니다!", - "5b8ce0c16a86626165e93796b14d4bf6": "오류 읽기 PHP 구성 파일,이 PHP를 다시 설치하십시오!", - "0631278069374277ff3b2cc2949940fd": "올바른 [도메인 또는 IP]를 입력하십시오!", - "ac40ea6dbb38e754acea879d58701424": "{} 날", + "5b8ce0c16a86626165e93796b14d4bf6": "오류 읽기 PHP 구성 파일,이 PHP를 다시 설치하세요!", + "0631278069374277ff3b2cc2949940fd": "올바른 [도메인 또는 IP]를 입력하세요!", + "ac40ea6dbb38e754acea879d58701424": "{} 일", "7a3fd8f7ddf80ae2db423aa55177d22a": "{} 일 {} 시간", "377e7b3a05033be3164d7900c2feb2a6": "{} 시간 (S)", "b2a09ec7e869bb555211fe7b26b5cf3e": "{} Hour (s) {} 분 (s)", @@ -1435,14 +1435,14 @@ "2b5266cb205519f70b1bcf7e2654982a": "지정된 PHP 버전이 설치되지 않았습니다", "f54dcdd36a3b22d81acbd5358cb2a0b7": "Basicauth 인증 사용자 이름과 비밀번호는 비어있을 수 없습니다!", "5dc91c307ada29366c842b16a5de6913": "지워졌다!", - "22ad45d745e31a8dbdb6a64f94289bbb": "키는 존재하지 않습니다.켜고 다시 시도하십시오.", - "53ca2a75c705f11ff1096ffef2762084": "사용자 이름이 존재하지 않습니다.켜고 다시 시도하십시오.", - "2323ea8555972da4c7321e11488c97fe": "작동 모드를 입력하십시오", + "22ad45d745e31a8dbdb6a64f94289bbb": "키는 존재하지 않습니다.켜고 다시 시도하세요.", + "53ca2a75c705f11ff1096ffef2762084": "사용자 이름이 존재하지 않습니다.켜고 다시 시도하세요.", + "2323ea8555972da4c7321e11488c97fe": "작동 모드를 입력하세요", "5995c475ba8ebf9ca5a5a48623ce3df3": "QR 코드 데이터가 없으므로 다시 열어주세요", "40e23dd18b1ba7d11eae146c3a6f0c3b": "임시 로그인 URL을 생성하지 못했습니다", "03dbab348363a2cc86c13c7dc6be2078": "로그인 알람 취소 성공.", "655318de73b4940df95a3a570a4d9987": "알람 모듈이 설치되지 않았습니다.", - "bf5ef2bc39004caabc0c836ba6389c75": "이 채널은 구성되지 않았습니다. 다시 선택하십시오.", + "bf5ef2bc39004caabc0c836ba6389c75": "이 채널은 구성되지 않았습니다. 다시 선택하세요.", "e5e7da65a17350434adc9dc9492925df": "패널 SSL 기능을 먼저 활성화해야합니다!", "e6be2adc545cca56a638fc1b7793ebed": "패널 양방향 인증 인증서가 저장되었습니다!", "e7cf53b84401535396c856570a5bc40f": "패널 양방향 인증 {}가 성공했습니다!", @@ -1451,7 +1451,7 @@ "ed39c2105eef1ae435e6a332bd0b716f": "[{}]는 기본 알림으로 설정되었습니다.", "0b3d1848b5648a7ac08ec7425043059b": "패널 기본 알림으로 [{}]가 제거되었습니다.", "67c052db394411fdf2755100c5028f94": "설정이 실패했습니다", - "c2806eed218fbfc91e0b4f37b08ce547": "[{}] 모듈을 설치하지 못했습니다.네트워크를 확인하십시오.", + "c2806eed218fbfc91e0b4f37b08ce547": "[{}] 모듈을 설치하지 못했습니다.네트워크를 확인하세요.", "4ccd9bbf79fcc60bef3a1aca5d577e85": "[{}] 모듈이 성공적으로 설치됩니다.", "643fb3483415124df30e40a2559a02c3": "[{}] 모듈 설치가 실패했습니다.", "92013d9cfaae3995581927729dc898b8": "[{}] 모듈 제거 성공", @@ -1459,7 +1459,7 @@ "692323a652529dc1bb482078ebd98fd0": "설문지는 제출되지 않았습니다", "7a18188353d1d06b3ab9af842dd6f0f2": "설문지를 얻지 못했습니다", "eb010361bab3ef9e74a27fdc883b1bd5": "질문 매개 변수 오류", - "25baa40bd86bb31a5095cf5457e87f74": "제출 된 텍스트가 너무 길어서 조정하고 다시 제출하십시오 (Max : 512)", + "25baa40bd86bb31a5095cf5457e87f74": "제출 된 텍스트가 너무 길어서 조정하고 다시 제출하세요 (Max : 512)", "1cc5a8ad869ce7dd47987b6eb278260a": "성공적으로 제출되었습니다", "7e4182fc0365b28328ac2ec8896f73b1": "설정이 실패했습니다!{}", "94e431cde2ffda2ef08526fa2af1b0b5": "자산을 성공적으로 설정했습니다!", @@ -1470,11 +1470,11 @@ "ee6cb8cccfef01a6931ac569767b7303": "로컬 DB가 설치되었습니다", "65d7c486a72e5ad1b6bd2efb8956f3f6": "편집 실패 : {}", "f62e45c2a8ed2cfcfd94370111f2a7b3": "이름이 같은 데이터베이스가 이미 존재합니다. [{}]", - "c0845b39485db26e69520bd402a139b7": "데이터베이스 [{}] 이미 재활용 빈에서 재활용 빈에서 복구하십시오!", + "c0845b39485db26e69520bd402a139b7": "데이터베이스 [{}] 이미 재활용 빈에서 재활용 빈에서 복구하세요!", "4660d7ac939f0ce64023bd24bc25b663": "데이터베이스 이름은 16 자를 초과 할 수 없습니다", "299cf735a7b842c5bc2eaedf2e266387": "데이터베이스 이름에는 특수 문자가 포함될 수 없습니다", "d1e3ea8b4d692d87d876428f0cf476c4": "데이터베이스 이름은 불법입니다", - "32e1edf20dad771b315ddb3da35bacd3": "지정된 데이터베이스는 이미 MySQL에 존재합니다. 이름을 변경하십시오!", + "32e1edf20dad771b315ddb3da35bacd3": "지정된 데이터베이스는 이미 MySQL에 존재합니다. 이름을 변경하세요!", "54fac16736efc268ae61cc17bf80dcef": "원격 데이터베이스 [{}] 연결에 실패했습니다", "ad62ead53c1f43865593805aab80df4b": "수정 실패 : {}", "d3a51b64fa563dfcd901485db4cf5777": "데이터베이스 [{}] 암호는 비어있을 수 없습니다", @@ -1484,7 +1484,7 @@ "36856cc0aff5e4d792ab1919ec9e24f9": "데이터베이스 [{}] 백업이 성공했습니다!", "cd338377817d5286c26f62c0562ebe72": "데이터베이스 [{}]를 성공적으로 가져왔습니다.", "4461199265eb82e1de46055d7f4568b6": "백업이 성공했습니다", - "ecc5e49aaee7ba7dc9a1b1b89e008c13": "SQL/GZ/ZIP 파일을 선택하십시오", + "ecc5e49aaee7ba7dc9a1b1b89e008c13": "SQL/GZ/ZIP 파일을 선택하세요", "3bb533d00c768936c2c3bf24d2c542a2": "구성 파일이 존재하지 않습니다 {}", "c811067e114e07cbb188afd110ddc579": "서버에서 동기화 {} 데이터베이스!", "a47891f08609cb38f4de9fd50def4650": "서버에서 {} 데이터베이스를 얻으십시오!", @@ -1492,11 +1492,11 @@ "a62053a8ff838da8ba33aae82d8fda5b": "데이터베이스 연결 오류!", "65a61bd2b3c632fd1d27b19db5abf197": "MySQL 데이터베이스 비밀번호가 만료됩니다", "dfcaac01b569325ec535229328d52f6d": "데이터베이스 쿼리 오류!", - "efc33dbd7910fde6ce3fe364a7d43bfc": "rsyslog 구성 파일이 존재하지 않습니다! \\ n rsyslog가 설치되어 있는지 또는 /ect/rsyslog.cn이 존재하는지 확인하십시오!", + "efc33dbd7910fde6ce3fe364a7d43bfc": "rsyslog 구성 파일이 존재하지 않습니다! \\ n rsyslog가 설치되어 있는지 또는 /ect/rsyslog.cn이 존재하는지 확인하세요!", "a6fba111c7d0f418059856c4160b4d0d": "매개 변수가 잘못되었습니다!", "3f8ee4f649b32e181c15c39682629844": "사용자 [{}]가 존재합니다!", "b23886f3380c4a9500a7614474ff6bf8": "암호는 최소한 [{}] 문자 여야합니다", - "f20eaf62a87c2072f7c09ec70a6b90c9": "오류를 삭제하십시오", + "f20eaf62a87c2072f7c09ec70a6b90c9": "오류를 삭제하세요", "49b236322476b6e7baf65369b4b61565": "del_error", "9607dbc43fb07121ebd102497290c15b": "{} FTP 사용자가 실패했습니다!", "8b73e5696a44d470ee99c274152c1b54": "포트 [{}]가 사용됩니다!", @@ -1510,14 +1510,14 @@ "aebabb72ad41fbe46f73abcc9dc00b9f": "캐시 플러그인을 활성화하지 못했습니다.수동으로 활성화한 다음 캐시를 활성화해 보십시오.", "3981bd44ca3f1d5abafc6b15ba8c7435": "OLS 캐시 설정이 성공했습니다!", "3777f748e5535e7e38261b2e0afc8274": "OLS 캐시 구성 실패: {}", - "93916600bce5b19586cbf51d558b5d78": "[{}] 형식이 올바른지 확인하십시오 : {}", + "93916600bce5b19586cbf51d558b5d78": "[{}] 형식이 올바른지 확인하세요 : {}", "8e342838d5cf3a93e34956c9550db4d0": "배포 실패: {}", - "0dbd3323f74314d1cf85c7db5ac2fd1d": "현재 IE 브라우저 버전이 너무 낮아서 일부 기능을 표시하기에는 다른 브라우저를 사용하십시오.또는 중국 회사가 개발 한 브라우저를 사용하는 경우 Extreme Mode로 전환하십시오!", + "0dbd3323f74314d1cf85c7db5ac2fd1d": "현재 IE 브라우저 버전이 너무 낮아서 일부 기능을 표시하기에는 다른 브라우저를 사용하세요.또는 중국 회사가 개발 한 브라우저를 사용하는 경우 Extreme Mode로 전환하세요!", "47b1cbb355da8faa6415f12c96469ba1": "20 연속 검증 실패, 1 시간 동안 금지", "dd1ddef2d75c7c80540db8c12270af8a": "전달 된 매개 변수는 보편적 인 내부 객체가 아닙니다", "e7e807310035d5b348cbf55c28df2968": "작업자 RAM을 거짓으로 얻으십시오", "dc2e22fb7940c00998017d342198a9e2": "작업자 가동 시간을 거짓으로 얻으십시오", - "f5332a2b815ca2e09f3e658e8c81a282": "작업자를 다시 시작하십시오", + "f5332a2b815ca2e09f3e658e8c81a282": "작업자를 다시 시작하세요", "2d052af48937c6a8916f84a9a5d2a5e1": "작업자 날짜를 거짓으로 받으십시오", "6880f4164c935867cecf3a89e8ac01ce": "작업자 시간 세부 사항을 거짓으로 얻습니다", "a3589163c43210f6d8f52f6a2d46823f": "근로자 reqpersec false를 얻으십시오", @@ -1527,25 +1527,25 @@ "f656a1e1c80cdf1eb1c63d3a0b121a65": "노동자 유휴 노동자에게 거짓을 얻으십시오", "dd2b16eb608e5838d556598d479e9264": "복원이 시작될 때까지 기다립니다", "9bb70ddd7b082fbaafb0b47a989b5cf5": "시간대를 얻지 못했습니다!", - "38f40438a6c7e12eca9b4ea2ad297b3e": "성공적으로 최고로 설정하십시오!", - "257ee5f5c18f04e3a83fd18b33babf08": "삽입되지 않은 ID를 입력하십시오!", + "38f40438a6c7e12eca9b4ea2ad297b3e": "성공적으로 최고로 설정하세요!", + "257ee5f5c18f04e3a83fd18b33babf08": "삽입되지 않은 ID를 입력하세요!", "c6afe11bc7f565bb0a423883101ce67f": "쿼리 실패 :", "403470819fb903a95a8fd9a22b01a3ee": "crontab_month", - "7207ebce07676b20d98ec74a0ff65c77": "{} : {}에 대해 하루에 한 번 실행하십시오.", - "4f4ae97ac3a0f45ef67bda70d5e4fe0b": "{} : {}에서 {} 일을 한 번씩 실행하십시오.", - "82dccd8eb88a5611e453cbf6f25fa90f": "한 시간마다 한 번씩 실행하십시오", + "7207ebce07676b20d98ec74a0ff65c77": "{} : {}에 대해 하루에 한 번 실행하세요.", + "4f4ae97ac3a0f45ef67bda70d5e4fe0b": "{} : {}에서 {} 일을 한 번씩 실행하세요.", + "82dccd8eb88a5611e453cbf6f25fa90f": "한 시간마다 한 번씩 실행하세요", "a84b2e49920d839395e3f93812f9ac03": "매일 0:00부터 시작하여 {} 시간의 {} 분마다 실행됩니다.", "41924db412ce09aa5ef5c9f1f9c88ee8": "각 시간의 0 분부터 시작하여 {} 분마다 실행됩니다.", - "45abd276fba3519ea010cb5b3c44a484": "{} : {}에서 {} 매번 한 번 실행하십시오.", - "06ce21d9c603152315f749e19fab3148": "매월 {} 일의 {} : {}에서 한 번 실행하십시오.", + "45abd276fba3519ea010cb5b3c44a484": "{} : {}에서 {} 매번 한 번 실행하세요.", + "06ce21d9c603152315f749e19fab3148": "매월 {} 일의 {} : {}에서 한 번 실행하세요.", "f2fc5ae4c94a95a754c58b15197bc135": "{} 초마다 실행됩니다", - "eb8cb9c97e5888beefc46d6c0645ff4f": "시작하고 한 번 실행하십시오", + "eb8cb9c97e5888beefc46d6c0645ff4f": "시작하고 한 번 실행하세요", "7b9732c358c4e407030aca56ccb7a72b": "해당 예약 작업에 대한 데이터가 발견되지 않았습니다.예정된 작업이 존재하는지 확인하려면 페이지를 새로 고치십시오!", - "b55a6e4ebb6e988c6d46840ca6cc3315": "파일에 쓸 수 없으면 시스템 경화가 활성화되어 있는지 확인하십시오!", + "b55a6e4ebb6e988c6d46840ca6cc3315": "파일에 쓸 수 없으면 시스템 경화가 활성화되어 있는지 확인하세요!", "fff2eb19d097654514fc97c4a6e6d233": "Crontab 작업", "64e1288887b58a1c65d05676f7197477": "예정된 작업의 상태 수정 [", "ef1a7595dfa94a12b47bb18d3ac94313": "이 ID의 예정된 작업은 존재하지 않습니다", - "1844e0f52715901c376dca67e5742aa9": "예약 된 작업이 실패하면 디스크가 쓸 수 있는지 또는 시스템 경화가 활성화되어 있는지 확인하십시오!", + "1844e0f52715901c376dca67e5742aa9": "예약 된 작업이 실패하면 디스크가 쓸 수 있는지 또는 시스템 경화가 활성화되어 있는지 확인하세요!", "5a7b17945b660284bb813be218c04c71": "{} 설정이 실패했습니다", "5e7205744bd38904dcbc7c0b77456fc7": "삭제 {}", "140fb31d1756ae3c75b297f0c17f8b24": "카테고리 이름에는 HTML 문을 포함 할 수 없습니다", @@ -1565,9 +1565,9 @@ "e9ca7bae70907408382135107fb85a13": "다운로드 실패!", "272892ac18608e0a1ad6bf080afd2e51": "명확하게 성공적으로!", "06511118622e143af60d10d0877c9a3d": "청산이 실패했습니다!", - "424a90061acbe105658b97a0d86a4de2": "Filename을 입력하십시오!", - "14854122a7fb5958664a8d840dc0bead": "WebDav 스토리지를 먼저 설치하십시오!", - "a027ff0717f56bf016b2f023d92e0c32": "해당 파일이 발견되지 않아 클라우드 스토리지에서 수동으로 다운로드하십시오.", + "424a90061acbe105658b97a0d86a4de2": "Filename을 입력하세요!", + "14854122a7fb5958664a8d840dc0bead": "WebDav 스토리지를 먼저 설치하세요!", + "a027ff0717f56bf016b2f023d92e0c32": "해당 파일이 발견되지 않아 클라우드 스토리지에서 수동으로 다운로드하세요.", "f7314eff61e017245b088eecfee0c418": "클라우드 스토리지 객체가 올바르게 초기화되지 않았습니다!", "a09c248c44ca9548bce41bc3e79b400d": "클라우드 스토리지에서 파일이 발견되지 않았습니다!", "9b23d05e4cb1d3ee22dd3dd7212817ab": "분류 이름은 비어있을 수 없습니다", @@ -1584,16 +1584,16 @@ "1cd20eabfaa5ad5793b4075f976bf475": "JSON 파일을 구문 분석 할 수 없습니다!", "205904d76b14dbdb456fc2a2997ba5b1": "JSON 파일 컨텐츠 형식이 올바르지 않습니다!", "f63f66d08d61a3b16c11e0dfce9510e1": "{} 예약 작업을 성공적으로 가져옵니다", - "414522bb8a68d31211190865a1cefdd0": "파일을 가져 오도록 선택하십시오!", + "414522bb8a68d31211190865a1cefdd0": "파일을 가져 오도록 선택하세요!", "8342696568c9b58f16cf29e2492cddea": "수입 실패!{0}", - "51b34794854788b7e5eb8c3a8fab0242": "시간 매개 변수를 통과하십시오!", + "51b34794854788b7e5eb8c3a8fab0242": "시간 매개 변수를 통과하세요!", "860f363ecfcf11c8740b9068152b910c": "임시 시스템 종료 및 강화 성공!", "acbe969acf9b4925e963f102f3430f84": "시스템 강화의 임시 종료가 실패했습니다!", "14a7c9c4ed221e7b3234de80bb8b9ef9": "로그 절단을 성공적으로 활성화했습니다", "15af2c7a6a5766d84ad8c57c5d2fb0dc": "성공적으로 닫힌 로그 절단", "636cccf0b373acec35770f9f26710396": "로그 절단을 활성화하지 못했습니다", "bd6df8255e394034ebcf93fcebfe06d3": "획득 실패 :", - "90a80c8e64ee80e8577c44699b6faa7b": "예정된 작업을 생성하지 못했습니다 {}, 시스템 경화가 활성화되었는지 또는 디스크 조건이 있는지 확인하십시오.", + "90a80c8e64ee80e8577c44699b6faa7b": "예정된 작업을 생성하지 못했습니다 {}, 시스템 경화가 활성화되었는지 또는 디스크 조건이 있는지 확인하세요.", "796b4f2a019427bc554ef1166faad8aa": "성공적으로 닫습니다", "f222f6f9531a00476e39863b53bcde07": "오프닝 실패", "52d812a7c0b57b35fac4e668122191a3": "스크립트 실행이 실패했습니다", @@ -1610,9 +1610,9 @@ "aa40ceff8d69dc0bf2a3887e2d5c778c": "연결 실패 : {} {}", "69ee350f3262c97f7e3f35cc66443942": "Paramiko 모듈이 존재하지 않으며 설치가 실패합니다!", "d580ca3289757bd32c3e11df44ccea78": "비밀번호 또는 개인 키는 모두 비어있을 수 없습니다 : {} : {}", - "df9dc7c6d010fa7d486ab5c61159450f": "인증 시간이 초과되면 Enter를 누르면 다시 시도하십시오! {}", + "df9dc7c6d010fa7d486ab5c61159450f": "인증 시간이 초과되면 Enter를 누르면 다시 시도하세요! {}", "05d673d467b6e721ff5ee92b285e5072": "개인 키 확인이 실패하거나 개인 키가 잘못되었거나 SSH-DSS 개인 키 인증 유형이/etc/ssh/sshd_config 구성 파일에서 활성화되지 않을 수 있습니다.", - "cae18886e1496f99e56fe64dae2a0947": "인증 실패, 개인 키가 올바른지 확인하십시오 : {}", + "cae18886e1496f99e56fe64dae2a0947": "인증 실패, 개인 키가 올바른지 확인하세요 : {}", "7e850998d3cb8c4dc8b204766721e846": "계정 또는 비밀번호 잘못 : {}", "dfd29171bd018b7352abb2cf085404fd": "사용자 이름 또는 비밀번호 잘못 : {}", "8a857e7b7b8835de19ffb7404445b30f": "지원되지 않은 인증 유형 : {}", @@ -1622,16 +1622,16 @@ "bd35e8b82c9450d88a62a318773a2244": "수출이 실패했습니다", "e9a08443260e6f3b795eb57419a6ad77": "클라우드 스토리지에 링크하지 못했습니다!", "66924214c228f7eb631ac940281c7190": "성공 설정", - "d55e6e0c13df775ea0eabea4f36ff8da": "하나 이상의 명령과 방화벽을 활성화하십시오", + "d55e6e0c13df775ea0eabea4f36ff8da": "하나 이상의 명령과 방화벽을 활성화하세요", "322d678e45d68284d90503f36da32648": "작업이 실행되었습니다", "26eaf477d247c668a143b415491995dd": "현재 IP 주소 [{}]는 화이트리스트에 없습니다.", "c26b7075352954fb3e96fbe983dbd083": "현재 IP 주소 [{}]는 화이트리스트에 있습니다.", "f9cfac18ac1fe92adcc47b139d0617a8": "추가 실패", "bf31291dfc89be9a8af12c3fa15e7e4d": "작동이 실행되었습니다", "71a1c5f19c8e300d350f5f68c71e4559": "삭제 실패", - "01f144a7cfd324d0dab94f8aa6e29374": "성공적으로 삭제하십시오", + "01f144a7cfd324d0dab94f8aa6e29374": "성공적으로 삭제하세요", "749707db319ac2fa02785c1bdb58083b": "오류 : SSHD 구성 파일이 존재하지 않습니다", - "80b695b495da54ed6a76eac8a965bc7b": "로그인 알람을 성공적으로 취소하십시오", + "80b695b495da54ed6a76eac8a965bc7b": "로그인 알람을 성공적으로 취소하세요", "40d3b22b13a0b11ed727aa257e2228c0": "메시지 채널이 설치되지 않았습니다", "87597848076b873c1a9bb9ffea64950b": "오류 : SSHD 구성 파일이 존재하지 않습니다", "bdb119e343438b628e7ba8b20e4632ed": "오류 : SSHD 구성이 존재하지 않습니다", @@ -1654,9 +1654,9 @@ "7658d0092e96ef38859c12f2a91f641f": "현재 배포 작업이 없습니다!", "f5fa57ce44938aa510e6cb68bd52c24b": "로그 파일이 없습니다", "1bb87a5feb9e217c858933afdce8f4e7": "로그 파일이 너무 큽니다!", - "21290da79237752afe963ecef5d89b5a": "스캔을 성공적으로 시작하십시오", + "21290da79237752afe963ecef5d89b5a": "스캔을 성공적으로 시작하세요", "8e0e316031928c8c96c94ad6d57bd03e": "디렉토리가 스캔되지 않았습니다", - "9208374e1391bb886971bad99b2380f1": "불일치를 입력하십시오", + "9208374e1391bb886971bad99b2380f1": "불일치를 입력하세요", "580d97d0b321127650cf1901cc3524b2": "레코드는 존재하지 않습니다", "152b976545ff1ee50e0de21da7af1266": "확인중입니다.....", "e6a6fa2d0bcc8bfc2af5bcd4640ade03": "매개변수 검증", @@ -1683,8 +1683,8 @@ "fa5e4af74d3d68ba371e6dcf84595c3d": "웹 사이트는 존재하지 않습니다", "45f9a99535dea651b8f160f6cf23f826": "구성 파일 읽기가 실패했습니다!", "5e3b84200bea6d70f6fed1d5802a7fa0": "쿼리 실패, 주소가 없습니다", - "5fa721871e93bc4121df74ce51454519": "플러그인 활성화 실패, 나중에 다시 시도하십시오.", - "9f139adb77c26c263ff2a956d66f80fe": "플러그인 비활성화가 실패했습니다. 나중에 다시 시도하십시오.", + "5fa721871e93bc4121df74ce51454519": "플러그인 활성화 실패, 나중에 다시 시도하세요.", + "9f139adb77c26c263ff2a956d66f80fe": "플러그인 비활성화가 실패했습니다. 나중에 다시 시도하세요.", "f8e169b0ef8d58f84c71e375141852ed": "세트를 만들지 못했습니다", "e35ca748f8c5a0e78731bae94fb7d68a": "세트를 제거하지 못했습니다", "468baaa7179c8b181d1de35fa00267e9": "잘못된 유형의 세트 항목", @@ -1727,24 +1727,24 @@ "5316694cae24d434370be2d76146a500": "|-오류 : {}", "b763e7e9f6b23d4b5066458506d26d55": "백업 작업 실행이 실패했습니다.", "713660262f5ab9c3af9aa17c8d8a412c": "백업", - "de5ac4bddf9b72b649c0cbd4243f76c6": "몇 초 후에 다시 시도하십시오...잠시 기다려 주십시오...", + "de5ac4bddf9b72b649c0cbd4243f76c6": "몇 초 후에 다시 시도하세요...잠시 기다려 주십시오...", "6905a88552caae6df77f56bd19f6d76a": "Cron 작업 설정은 로컬로 유지됩니다.로컬 백업이 유지됩니다.", "63701b3fa795bcd399aab5d489f8eae9": "Cron 작업 설정은 로컬을 유지하지 않습니다.로컬 백업은 유지되지 않습니다.", "837cc24a222df21e74245f4cfac6ad09": "사용자 설정을 하지 않음", "57d4380c974a85fe8db5914c934addf4": "예정된 작업이 존재하지 않습니다!{}", - "038ae15d38f9f027abda2aabf18324ab": "최신 백업 수를 유지하십시오. {}에 대한 사본 {} 사본", + "038ae15d38f9f027abda2aabf18324ab": "최신 백업 수를 유지하세요. {}에 대한 사본 {} 사본", "58c65e272cfde6fc8cf73d0ffcde4bbd": "{}에 업로드, 기다려주세요 ...", "243c0f3ec002883d6fa7770957ecf9bd": "예정된 작업이 존재하지 않습니다!", "78df833c741b9814545d76a83f2db9b5": "{} 백업 데이터베이스 {}는 존재하지 않습니다", "472f0ed974a6a2aec9b70fe7d39b27ee": "MongoDB는 보안 인증을 활성화했습니다.", "8a09aa6b7131f71b3ba97f13d5b7823f": "지정된 주문 번호는 존재하지 않으며 갱신 할 수 없습니다!", "72905fe72d071dffbc0c1a20eb8def87": "이 주문에 대한 정보는 발견되지 않았습니다.", - "0b033e06e17e9fb14f93e6f11eed6599": "주문이 만료되었습니다.다시 신청하십시오!", + "0b033e06e17e9fb14f93e6f11eed6599": "주문이 만료되었습니다.다시 신청하세요!", "3497d17853f8a84d0b552dcea4fabad2": "이 주문의 정보는 찾을 수 없었습니다.", - "972f14a9afdebc7e5b366f465171776a": "주문이 만료되었습니다.다시 신청하십시오.", + "972f14a9afdebc7e5b366f465171776a": "주문이 만료되었습니다.다시 신청하세요.", "1008d1a5b18463e45c0bdb930bc0087c": "이 인증서는 찾을 수 없었습니다.", - "2e95d6e834bed89e1e199808d0cfd8aa": "-path 매개 변수에 웹 사이트 문서 루트를 지정하십시오!", - "4a8d983505848031c77a15c408cd1f3e": "|-명령을 삭제하십시오", + "2e95d6e834bed89e1e199808d0cfd8aa": "-path 매개 변수에 웹 사이트 문서 루트를 지정하세요!", + "4a8d983505848031c77a15c408cd1f3e": "|-명령을 삭제하세요", "ed069811f3c302d22a0f4aafc6903826": "|-사용자는 응용 프로그램을 포기하고 프로그램을 종료합니다!", "daa9a175b001e007de4d7ca89ec19aec": "유효하지 않은 노드 유형 : {}", "abb41b16dcebff17c55d75000fe3cabf": "잘못된 자동화", @@ -1760,21 +1760,21 @@ "079217f7bb63fed72af9bb79048e3967": "'*", "b3248ad84a12659b1599607f969741a0": "CloudFlare DNS 권한이 있어야합니다", "0ad00e6c415af62cdaa8537c32574052": "별명이 이미 존재합니다!", - "9c82954b2bf15dc7a9462145d9782aac": "프로 버전을 업그레이드하십시오!", - "3a306f42856e51481470e9702cc22169": "성공적으로 저장하십시오!", - "9758ed50c1e1816e1eecb98e0c3ed1ec": "성공적으로 삭제하십시오!", + "9c82954b2bf15dc7a9462145d9782aac": "프로 버전을 업그레이드하세요!", + "3a306f42856e51481470e9702cc22169": "성공적으로 저장하세요!", + "9758ed50c1e1816e1eecb98e0c3ed1ec": "성공적으로 삭제하세요!", "4b9f49d0625305474bd478ed077bba0b": "ID가 필요합니다", "615df74f7d5141a1084369b9da4ccb4a": "제공자가 찾을 수 없습니다!", "4a9382b97abdf8cb5b237bf7d64873e2": "search_and 및 검색은 동시에 사용할 수 없습니다.", "7d7d9ba1a8780278b2a05b91eacfb2e7": "DNS 레코드를 찾을 수 없습니다!", "8d49c4cd608eaa6d8d9a1e0ab6658fb4": "DNS 제공 업체는 찾을 수 없습니다!", "79922b861a42a4e2350f69501eb25ca0": "DNS 레코드를 찾을 수 없습니다!", - "39b361ca64471b92b1b1e84dee7d5226": "성공적으로 업데이트하십시오!", + "39b361ca64471b92b1b1e84dee7d5226": "성공적으로 업데이트하세요!", "84e9feba40d0aed963505e503cf821e3": "업데이트 실패...", "8ef6a7854d197b829e350936856847fc": "SSL 인증서를 찾을 수 없습니다!", "02d59ec01b27b9b07cc92b56b4590690": "SSL 인증서가 30일 미만이므로 갱신할 필요가 없습니다!", "c85411871b8773e799e64d0c23ef79d3": "주문을 찾을 수 없습니다!", - "9dd5fcad400ad7db65baa55be5535d94": "성공적으로 신청하십시오!", + "9dd5fcad400ad7db65baa55be5535d94": "성공적으로 신청하세요!", "3f5a9a220cd8c53770c59c4931beb2be": "auth_type가 있어야합니다", "4fadb14ca725c013569fc00385d750fd": "도메인이 비어 있습니다", "2a6bb1bdd798217656edecf672b6df3c": "Http01 확인 오류가 발생했지만 사이트를 찾을 수 없습니다.", @@ -1782,7 +1782,7 @@ "fdbdc3e70ef01cae6ba7f67b34622aa1": "알 수없는 인증 유형", "52357aa86932ebcc9ff6e741ef6244b5": "업데이트 인증서 실패", "2e54bae7cebff2ed29eee92ee852cf0f": "SSL 인증서를 찾을 수 없습니다!", - "022c6efa50cd0022ffa66b42f08caadc": "성공적으로 제거하십시오!", + "022c6efa50cd0022ffa66b42f08caadc": "성공적으로 제거하세요!", "9ecbde266be14f2c038c06f339f7ee46": "SSL을 찾을 수 없습니다!", "9bb50ed8d9b14f51d1a44a423db43e6e": "성공적으로 설정!", "049734a8ec5a38304b7e0dff089b05fe": "배포 메일", @@ -1800,14 +1800,14 @@ "d3e42cf08c9dd4657e1ec738bcd7fa4f": "대상 포트는 비어있을 수 없습니다", "2e983c6be925499dd08a349a82f9e215": "대상 도메인 이름은 잘못된 형식입니다", "2101cff923c114c46970531cebe61e9c": "도메인 이름 : 【{}】 해상도가 실패했습니다", - "484a79b99ea7c89818e54bc86611e0ab": "신분증을 전달하십시오", + "484a79b99ea7c89818e54bc86611e0ab": "신분증을 전달하세요", "8bc83520b9c5e0cb6a83e1cf6961cfdf": "설정이 성공하지만 다음 규칙 설정은 실패합니다 :: {}", "373ee51dfa98aab065593b352f395b59": "대상 주소는 잘못된 형식입니다", "26fe283bcf5841270188165305b2f876": "대상 주소 {} 이미 존재합니다. 반복해서 추가하지 마십시오.", - "4b8abdf7e8565603bc0b09534e1c53aa": "규칙을 설정하기 전에 방화벽을 활성화하십시오!", + "4b8abdf7e8565603bc0b09534e1c53aa": "규칙을 설정하기 전에 방화벽을 활성화하세요!", "50c7672327d3879977f1672bac1ee999": "대상 IP는 비어있을 수 없습니다", - "b9c6715ad1caf1dd7f933c42ab63707a": "Old_Data를 통과하십시오", - "842a116f755d53aacda61c8d5b90125e": "New_Data를 통과하십시오", + "b9c6715ad1caf1dd7f933c42ab63707a": "Old_Data를 통과하세요", + "842a116f755d53aacda61c8d5b90125e": "New_Data를 통과하세요", "edbe2ffb112ecc945237a594ab786679": "수정이 성공적이었습니다", "f94b62cff0c45cb08b61da3ca2615d72": "파일이 존재하지 않습니다", "0976b2102c7a8af33f04ab2059e997ca": "파일 컨텐츠는 비정상적이거나 기형이 있습니다", @@ -1841,26 +1841,26 @@ "f006b06691ecd76b8a34e2825c17b6aa": "알 수없는 전략 : {}", "55bbeb07229c08c530c5119918035594": "출력 규칙이 성공적으로 설정됩니다", "8be2d40f6fa3e12c46ba68bfb23951d1": "Outputhe Rule 설정 실패 : {}", - "5d6e1e45c8d58b5f2800aabe961be7e6": "계정 서비스가 시작되지 않으면 먼저 서비스를 시작하십시오", - "9f570fb82d621c780cae5d4a3b7b21fa": "성공적으로 시작하십시오", + "5d6e1e45c8d58b5f2800aabe961be7e6": "계정 서비스가 시작되지 않으면 먼저 서비스를 시작하세요", + "9f570fb82d621c780cae5d4a3b7b21fa": "성공적으로 시작하세요", "d6fd80e8f386ec01318ebbd911b3cb8c": "시작 실패", "54b737c15ee80b356bed65d1e4bbdf11": "중지 실패", - "ca5ae41ecee3659791384fbb49c573f2": "성공적으로 중지하십시오", - "f9458b55789fb6b79f107c061d9050e0": "성공적으로 다시 시작하십시오", + "ca5ae41ecee3659791384fbb49c573f2": "성공적으로 중지하세요", + "f9458b55789fb6b79f107c061d9050e0": "성공적으로 다시 시작하세요", "ce070d796c159496ab8253cc60891b9e": "다시 시작 실패", "ca0431c082d8980ad8a7fbfff9a3cc4e": "성공적으로 다시로드", - "f61bf123501eb5094cd6782409088c6f": "현재 Nginx만이 웹 서버로 지원됩니다.웹 서버를 Nginx로 조정하고 웹 서버를 조정할 때 웹 사이트 데이터를 백업하십시오.", + "f61bf123501eb5094cd6782409088c6f": "현재 Nginx만이 웹 서버로 지원됩니다.웹 서버를 Nginx로 조정하고 웹 서버를 조정할 때 웹 사이트 데이터를 백업하세요.", "01b4fc496d491eed58270beca1664e66": "설치 스크립트 다운로드가 실패했습니다", "b6bbb24d50175d3a920095caccfc8cc7": "작업이 이미 존재합니다", "22e6df6f7a837552a50ec27a63418a99": "설치 작업이 작업 대기열에 추가되었습니다.", "01545ec6a6d49b956f303f9ac0f7aeed": "업그레이드가 성공적이었습니다", "f43df7708267595d8c8ee27cca2e25c7": "인증서 내용은 비어있을 수 없습니다", - "749c4e1e3720c1aa28459dd4953cf782": "인증서 형식과 콘텐츠가 올바른지 확인하십시오.", - "5e6ddd918845e96916d903a667e65da6": "성공적으로 설정하십시오", + "749c4e1e3720c1aa28459dd4953cf782": "인증서 형식과 콘텐츠가 올바른지 확인하세요.", + "5e6ddd918845e96916d903a667e65da6": "성공적으로 설정하세요", "9aad9a87ef3911e202093b08b2f570ed": "성공적으로 닫습니다", "b4987b794be5974dd020719b9c1d0a41": "IPv6 주소는 지원되지 않습니다", - "793f2b3ffa18b3513258114b0216cb7b": "호스트 주소가 올바른지 확인하십시오. 예 : 192.168.1.20", - "af8d2d8e000adaed48feb1c1502cea6d": "죄송합니다. 오프닝 실패, App Store로 이동하십시오-Enterprise가 세부 정보를 볼 수 있도록 Tamper Proof.", + "793f2b3ffa18b3513258114b0216cb7b": "호스트 주소가 올바른지 확인하세요. 예 : 192.168.1.20", + "af8d2d8e000adaed48feb1c1502cea6d": "죄송합니다. 오프닝 실패, App Store로 이동하세요-Enterprise가 세부 정보를 볼 수 있도록 Tamper Proof.", "e9f9d8e8358b9291af5e41417184ddd2": "파일 보호를 성공적으로 추가했습니다", "c4faf633a3fd32e8b5d8138dbddc1693": "방화벽을 열지 못했습니다", "5ebd3aeb7b2c96cf6c64f82bfa333f02": "방화벽을 성공적으로 열었습니다", @@ -1875,11 +1875,11 @@ "90b0ccf9b077f2cadeef3daaf17d86b8": "화재/벽에는 {}에", "3d2fb8221a478c63e13b494d7279e2ac": "성공적으로 추가, {} 포트에 대해 동일한 규칙이 존재하며 건너 뛰었습니다.", "fc66f87cb8d92e3caf13485d65ecc309": "성공적으로 작동합니다", - "9a321cf078154e6594a8a29fb7847738": "먼저 dnspython 모듈을 설치하십시오", + "9a321cf078154e6594a8a29fb7847738": "먼저 dnspython 모듈을 설치하세요", "2463904b74dc3ffd3fb849f87a0e3a3a": "파일 내용이 잘못되었습니다!", "7a3f417adbeb8a69180134c6f2373c36": "파일이 비어 있습니다!", - "29b89ed8f1aa15665f877c12e0d14bac": "수입이 실패했습니다.규칙의 형식이 잘못되었습니다.수출 규칙의 형식에 따라 다시 시도하십시오!", - "002827869c69ad72bc41ca442547bbac": "규칙을 무시하는 취소를 성공적으로 취소하십시오", + "29b89ed8f1aa15665f877c12e0d14bac": "수입이 실패했습니다.규칙의 형식이 잘못되었습니다.수출 규칙의 형식에 따라 다시 시도하세요!", + "002827869c69ad72bc41ca442547bbac": "규칙을 무시하는 취소를 성공적으로 취소하세요", "63ecd16effc3eab31bf1eec574ece639": "잠금 해제 성공!", "eacd845def6fe750cfc0986f24565045": "로컬 로그인 비밀번호가 비어 있습니다.", "fea087517c26fadd409bd4b9dc642555": "정상", @@ -1895,7 +1895,7 @@ "90b65217be3c698d9b1fbff0dccdc71b": "Mongodb 서비스가 아직 활성화되지 않았습니다!", "7d1a075632098426af1e2197d274bdb6": "데이터베이스 이름에는 다음 문자가 포함될 수 없습니다./\\\\.\\", "48b2c30b0f984cdcc6cd7ed4ee376fdc": "데이터베이스 이름에 공백이 포함되어 있어 제대로 추가할 수 없습니다!", - "93efcc7fc4e9d402978828bacd4a5bc2": "데이터베이스 사용자가 이미 존재합니다. 다른 데이터베이스 이름을 사용하십시오!", + "93efcc7fc4e9d402978828bacd4a5bc2": "데이터베이스 사용자가 이미 존재합니다. 다른 데이터베이스 이름을 사용하세요!", "393223cf51f8e25df5d53ae425de74a9": "데이터베이스가 존재하지 않습니다.", "2162130c1a1937f839cc660f5e70ebdb": "Mongodb 서비스가 아직 활성화되지 않았습니다!", "45da541afaa00457a2f4617a1dd4855f": "MongoDB 제한으로 인해 관리자 이름 데이터베이스 삭제가 금지되어 있습니다!", @@ -1960,37 +1960,37 @@ "393f59f008214da917a3644f9bddd08c": "지정된 항목이 존재하지 않습니다!", "76f7795cbd69658732375d59e3ac4443": "package.json 구성 파일은 프로젝트 디렉토리에 없습니다!", "da87ee74f07713dc1fb6d97d770c6b9a": "지정된 nodejs 버전이 존재하지 않습니다!", - "53dc11c67093dc8650a2a0bcc739af9e": "의존성 패키지를 먼저 설치하십시오!", + "53dc11c67093dc8650a2a0bcc739af9e": "의존성 패키지를 먼저 설치하세요!", "9e37cac0b6ac4947a8eaab9c4741d096": "지정된 모듈이 설치되었습니다!", "a23324d67a76505b9485e1925b49ce69": "지정된 모듈을 설치하지 못했습니다!", "e175807189b9fed334d7fa1d9517e302": "지정된 모듈이 설치되지 않았습니다!", "7d837b25ee483c045c3d27e461661024": "이 모듈은 다른 설치된 모듈에 따라 다르며 제거 할 수 없습니다!", "a06864f6c23b22710bc49fa3794247aa": "이 모듈을 제거 할 수 없습니다!", "3378916dcc3a51351a823bf417959965": "매개 변수 유형이 잘못되었으므로 DICT OBJ 객체가 필요합니다", - "2ab730bc17ad482c454d62e5d6dda728": "Nodejs 버전 관리자를 먼저 설치하십시오", + "2ab730bc17ad482c454d62e5d6dda728": "Nodejs 버전 관리자를 먼저 설치하세요", "683eecd5ab2302a02009bb53528a8206": "프로젝트 이름 형식은 잘못되었으며 문자, 숫자, 밑줄 및 표현을 지원합니다. ^[0-9A-ZA-Z _] $", - "9360c6893e4ca4d7030d99d9ae4b34c7": "Nginx 또는 Apache를 먼저 설치하십시오", + "9360c6893e4ca4d7030d99d9ae4b34c7": "Nginx 또는 Apache를 먼저 설치하세요", "999e1ffe680ef91f5cf9795c34aa7acc": "매개 변수 유형이 잘못되었으므로 DICT OBJ가 필요합니다", - "9f474c0c49ec1c30e3c19f13e9d2a52e": "하나 이상의 nodejs를 설치하기 전에 Nodejs 버전 관리자를 설치하십시오.", + "9f474c0c49ec1c30e3c19f13e9d2a52e": "하나 이상의 nodejs를 설치하기 전에 Nodejs 버전 관리자를 설치하세요.", "9791ddabd2954257bfed271e0e7254dd": "시작 명령은 비어있을 수 없습니다", "f8498a22f4e43acaae880208f0980675": "지정된 항목이 존재하지 않습니다", "26aa1657ebfac1237da6a1f8ccae86b4": "도메인 이름은 비어있을 수 없습니다", "8f5e21613d5cfe258f7965986f95b750": "매핑 된 프로젝트에는 하나 이상의 도메인 이름이 필요합니다.", "bd397222b97310807e5ecfdcec2c30ff": "지정된 도메인 이름이 존재하지 않습니다", "8f04dfa02fe0ef0106680e1a3e9f1759": "항목은 존재하지 않습니다", - "64bc3d77e07e9e2757509ce626273a99": "[도메인 관리] 옵션에 하나 이상의 도메인 이름을 추가하십시오.", - "7514fe0af7b6f84f1c3c0a01613010fe": "[모듈]으로 이동하여 [1 키 설치]를 클릭하여 모듈 종속성을 설치하십시오!", + "64bc3d77e07e9e2757509ce626273a99": "[도메인 관리] 옵션에 하나 이상의 도메인 이름을 추가하세요.", + "7514fe0af7b6f84f1c3c0a01613010fe": "[모듈]으로 이동하여 [1 키 설치]를 클릭하여 모듈 종속성을 설치하세요!", "11382e970be52495256dd21192a671a7": "시작 스크립트가 구성되지 않았습니다", - "ef6b21f990d5f7f0a881e354a365063d": "시작 명령은 알려지지 않은 보안 소프트웨어에 의해 가로 채 렸습니다. 설치 소프트웨어 로그를 확인하십시오.", + "ef6b21f990d5f7f0a881e354a365063d": "시작 명령은 알려지지 않은 보안 소프트웨어에 의해 가로 채 렸습니다. 설치 소프트웨어 로그를 확인하세요.", "bbffcc99d1822ea57ca5e7dc614157ec": "프로젝트는 존재하지 않습니다", "53797f7f191af4c7851d0419ca27b334": "프로젝트가 시작되지 않았습니다", "f45bc552cdf8369ab9fe2213eec7b802": "로그 파일이 존재하지 않습니다", "f9be861aad3eda81843c7797487da8e9": "현재 시스템 보안 상태는 양호하며, 뚜렷한 취약점이나 위험 요소는 없습니다.", "890e24b14414e3da9bc2ad63d6d0befb": "시스템에는 특정 보안 위험이 있으며 일부 구성이나 정책을 개선해야 합니다.", "951c23a91dfe39b5ea5d00405b4dc2c5": "시스템에 명백한 보안 취약점이 있습니다. 제때에 수정해 주세요.", - "de36cae19b2a65a45cb4dfccb435530b": "시스템이 위험도가 높은 상태입니다. 가능한 한 빨리 관련 위험 항목을 수리하십시오.", + "de36cae19b2a65a45cb4dfccb435530b": "시스템이 위험도가 높은 상태입니다. 가능한 한 빨리 관련 위험 항목을 수리하세요.", "ea848f5d6978f5916cd3df4191195e2a": "호스트가 이미 존재합니다 ists", - "7aa425b3819e79208faaed38fe137f34": "서버에 연결하지 못했습니다. Docker가 시작되었는지 확인하십시오.", + "7aa425b3819e79208faaed38fe137f34": "서버에 연결하지 못했습니다. Docker가 시작되었는지 확인하세요.", "c90ca78b1fc8554e867a696d30255cba": "Docker 호스트 추가 성공적", "8ee5196fbd93bf345bf018132e808a0a": "호스트 삭제 성공적", "c0ef08aa7bd6276137ccd491a8041223": "백업 할 볼륨이 없습니다", @@ -2005,24 +2005,24 @@ "1ef49203b5ddab4a6b30eddab93c6d73": "이 템플릿 이름이 이미 존재합니다!", "356dbf2911e78ebedbd99f13df311ce1": "템플릿이 성공적으로 추가되었습니다!", "4f6a25bc1019404777b1a95b85c375f3": "템플릿을 변경하지 않았습니다!", - "029a1a33fb7a828191eac587a4d98db4": "템플릿 내용 형식 오류 오류가 유효한 Docker-Compose 템플릿을 입력하십시오!", + "029a1a33fb7a828191eac587a4d98db4": "템플릿 내용 형식 오류 오류가 유효한 Docker-Compose 템플릿을 입력하세요!", "052009ea42871f16153ca6fb451be303": "수정 된 템플릿이 성공적으로!", "550993f7a7c3863e988dc02458bb413b": "이 템플릿은 찾을 수 없었습니다!", - "86eb5f101087c690c1229fffceb97cba": "성공적으로 삭제하십시오!", + "86eb5f101087c690c1229fffceb97cba": "성공적으로 삭제하세요!", "c541f51f11868ef56cf50524eeddd226": "항목은 찾을 수 없었습니다!", "c3f9a083e42b21151560ba7e23667129": "템플릿을 찾을 수 없었습니다!", "d5d3eedff8acf67756e21b4612aaa380": "컨테이너 이름이 이미 존재합니다! :
[{}]", "05073a33c4bfcb8113af6b3222a0cccd": "이 포트 [{}]는 이미 다른 템플릿에서 사용됩니다", - "69a22232c25cb907570f837e4032ed7e": "매개 변수 오류, template_id를 전달하십시오!", + "69a22232c25cb907570f837e4032ed7e": "매개 변수 오류, template_id를 전달하세요!", "35698a69135017d7f8345e32cb5a87fe": "이 템플릿은 발견되지 않았거나 파일이 손상되었습니다!", "49d5a6420e1b84d63826fa1d79e5236d": "템플릿 파일이 존재하지 않습니다", - "e199ad07ae94664293828e753ec2a9a8": "템플릿 [{}]은 project : [{}]에 의해 배포되었습니다. 템플릿을 변경하고 다시 시도하십시오!", + "e199ad07ae94664293828e753ec2a9a8": "템플릿 [{}]은 project : [{}]에 의해 배포되었습니다. 템플릿을 변경하고 다시 시도하세요!", "a3017095090064d0ec98861e35d3849c": "프로젝트 이름이 이미 존재합니다!", "a9a92ec33cfb8eb3288cfc84edcd48ad": "성공적인 배포!", - "a180787fbf3d2e3fac72a13cb98ce513": "Docker-Compose가 너무 낮아서 최신 버전으로 업그레이드하십시오!", + "a180787fbf3d2e3fac72a13cb98ce513": "Docker-Compose가 너무 낮아서 최신 버전으로 업그레이드하세요!", "d8b370ee0351106fe38046541c421361": "프로젝트 이름은 찾을 수 없었습니다!", "30159c83433a6845a080ad879c0fb61d": "정리가 성공적이었습니다!", - "6483a5effa8c7ebce28c3838ee6f6e6e": "성공적으로 정리하십시오!", + "6483a5effa8c7ebce28c3838ee6f6e6e": "성공적으로 정리하세요!", "5ded1fa085b4c46667f9c8871d00a46c": "{} 프로젝트가 실패했습니다 : {}", "0e0ae38580f51369586ba6933a7c3105": "매개 변수가 누락 된 project_id!", "78f91123fc323aab6eb38f2bfb8e26d7": "프로젝트 구성을 찾을 수 없습니다!", @@ -2033,13 +2033,13 @@ "ce932f534479bae87f0615fa7214e5a1": "루트 디렉토리를 스캔 할 수 없습니다", "bf3d793f9f908f7d2d26a1be8dbb80fe": "경로는 존재하지 않습니다!", "d2fe452a7fa69442d5296b8e4832ede3": "템플릿이 성공적으로 추가되었습니다 : [{}]", - "8d92d05b95b166c5683fdb88f7de8bed": "템플릿을 추가하지 못했습니다 : 템플릿 이름은 이미 존재하거나 잘못 형식화되어 있습니다 [{}], docker -compose -f [compose.yml 파일 지정] 구성을 확인하십시오.", + "8d92d05b95b166c5683fdb88f7de8bed": "템플릿을 추가하지 못했습니다 : 템플릿 이름은 이미 존재하거나 잘못 형식화되어 있습니다 [{}], docker -compose -f [compose.yml 파일 지정] 구성을 확인하세요.", "428ed92bf9d3198f4c9885c11fdb2be3": "이 템플릿은 성공합니다 : [{}]
이 템플릿이 실패 : 템플릿 이름이 이미 존재하거나 잘못 형식화되어 있습니다 [{}]", "70975749d256333f1b3b62c864ca265a": "수정하지 못합니다!", - "2360e954ae9eecac28b2a3edad5e8ce0": "성공적으로 수정하십시오!", + "2360e954ae9eecac28b2a3edad5e8ce0": "성공적으로 수정하세요!", "7c6f761019365f8a5cfb2fb54d9e199d": "info.json이 다운로드됩니다!", "10066fce84fe34e9cc33e0338532988b": "info.json 다운로드가 실패했습니다!", - "0672e579ab0e3454713eb683ddcc4859": "{} 다운로드 실패, 재 동기화하십시오!", + "0672e579ab0e3454713eb683ddcc4859": "{} 다운로드 실패, 재 동기화하세요!", "8e790e81fffa7f51d099f710bd8f82cf": "{} yml 파일 테스트 실패, {}", "371acfea202589c4efd6724888f66595": "{} 다운로드 완료!", "51cf61e34b3f71ce1e430cdfcf129b80": "{} 감압이 실패했습니다", @@ -2048,10 +2048,10 @@ "374e3fe41b55a0b29420e455fb514dd6": "스토리지 볼륨이 생성되었습니다", "6d0d40f64f89227daf345eb2257638e8": "{}에는 공간이 포함될 수 없습니다", "a00b49ace55de909015029a0d6d6096f": "{}는 null이 될 수 없습니다!", - "54498312bb8f97ce07a9a0b0b47cfad1": "서버 포트 [{}]가 점유되어 있습니다. 다른 포트로 변경하십시오!", + "54498312bb8f97ce07a9a0b0b47cfad1": "서버 포트 [{}]가 점유되어 있습니다. 다른 포트로 변경하세요!", "47b74e08252747225c49ea0cb011c79e": "프로젝트 시작 실패 {}", - "838089af9a2941a49862f342c056a8ca": "프로젝트 제작을 시작하십시오", - "9b149598fb30f54fec9e82a3d121a464": "{} 이미 존재합니다. 프로젝트 이름을 변경하십시오", + "838089af9a2941a49862f342c056a8ca": "프로젝트 제작을 시작하세요", + "9b149598fb30f54fec9e82a3d121a464": "{} 이미 존재합니다. 프로젝트 이름을 변경하세요", "634370637f6a5b88940c75f826953d0c": "사용자 프로젝트 디렉토리는 생성하지 못했습니다. 세부 사항 : {}", "f7b14d3f642d711a23d5a0cca725fd0d": "프로젝트 디렉토리를 복사하지 못했습니다.세부 사항 : {}", "7bdaccb3d20432c5e0150862ab1cc3f3": "누락 된 매개 변수 이름", @@ -2073,14 +2073,14 @@ "aad4acc1243565c5c2ca41e5733e5fe0": "성공적인 \\ r \\ n", "d8f5a29760a4f000dd754819b1faadcc": "실패 \\ r \\ n", "73977612ef83925db43df7745df9c5eb": "\\ r \\ nno 10 분 이상 응답! \\ r \\ n", - "6345c76d66a8a9e9cdd3f9d996ff062d": "CMD를 통과하십시오", + "6345c76d66a8a9e9cdd3f9d996ff062d": "CMD를 통과하세요", "bba401eadefa8222f3e60a312cc19f34": "Docker Run 또는 Docker Pull 명령 만 실행할 수 있습니다.", "b5592904212696df3e5bcec990c8676a": "위험한 명령이 존재합니다 : [{}], 실행이 허용되지 않습니다!", "cfff471dc04b6ba4aeb2cc2844b2c94b": "위험한 기호가 존재합니다 : [{}], 실행이 허용되지 않습니다!", "f1d9b154a0c2625d828a504a8cb35682": "명령이 실행되었습니다!", - "45a0bbacbe8d5ea062167e88423e4573": "Nginx 또는 Apache 서버가 감지되지 않았습니다. 먼저 설치하십시오!", + "45a0bbacbe8d5ea062167e88423e4573": "Nginx 또는 Apache 서버가 감지되지 않았습니다. 먼저 설치하세요!", "bdaf560796795d6a303bc9a1d75a34c5": "프로젝트 유형 [{}] 기존 도메인 : {}", - "4588a786e80c83c2cbde37b930c3d778": "서버 포트 [{}]가 사용되지 않으므로 반전에 사용중인 포트를 입력하십시오!", + "4588a786e80c83c2cbde37b930c3d778": "서버 포트 [{}]가 사용되지 않으므로 반전에 사용중인 포트를 입력하세요!", "6888cf6586ce3c187150146a2d1db0ac": "실패를 추가하면 데이터베이스를 작성할 수 없습니다!", "9f9663b59d32947ff1f2c5b364c571b8": "성공적으로 추가되었습니다!", "e6bddfc6a0bbf72d592236c61b411f9a": "오류로 실패한 추가 : {}", @@ -2099,7 +2099,7 @@ "286933a4f24bee0eed1f9300f70a30c7": "Docker Run 명령 만 실행할 수 있습니다", "a46a6b274dcbfc5a629d234c2816a165": "위험 기호가 있습니다 : [{}], 실행이 허용되지 않습니다!", "8135363a6a5e2c145c6cedab8ac1e510": "포트 형식이 잘못 되었으며이 방법은 지원되지 않습니다!", - "3b825826968319b6256c4020cc49676f": "서버 포트 [{}]가 이미 점유되어 있습니다. 다른 포트로 교체하십시오!", + "3b825826968319b6256c4020cc49676f": "서버 포트 [{}]가 이미 점유되어 있습니다. 다른 포트로 교체하세요!", "70b35bb3bb2fe425a981e8cc68c06906": "필요한 이미지를 가져 오십시오", "e768fcd4ff22e2f3cc2535f1ea9c5682": "이미지가 존재하지 않습니다!", "7dc29c1ed7012513111b11f56c73a4f8": "메모리 할당량이 사용 가능한 금액을 초과했습니다!", @@ -2110,14 +2110,14 @@ "bf6b8400e1726aadf1cee7d6c1c5d173": "이미지 이름 형식은 다음과 같이 잘못되었습니다. nginx : 최신", "f0beb6e739348ae10c9f15cb91638d2f": "컨테이너 생성이 실패했습니다. 세부 사항 : {}!", "e5d4020fc5f8c26e22add8db8a62f06a": "메모리 할당량은 메모리 매장보다 작을 수 없습니다!", - "c68d012ef602a12e38636c306c10c894": "컨테이너 이름 또는 네트워크 브리지가 이미 존재합니다.컨테이너 이름을 변경하고 다시 시도하십시오!", - "c4272ed0aaf1e7e2bcc08f1003c2391d": "이 이미지에는 시작 명령이 없습니다. 컨테이너 시작 명령을 지정하십시오!", + "c68d012ef602a12e38636c306c10c894": "컨테이너 이름 또는 네트워크 브리지가 이미 존재합니다.컨테이너 이름을 변경하고 다시 시도하세요!", + "c4272ed0aaf1e7e2bcc08f1003c2391d": "이 이미지에는 시작 명령이 없습니다. 컨테이너 시작 명령을 지정하세요!", "a73eb9f1fb82232c9f70bb80024a9d9c": "권한 예외!세부:{}", - "196a4f415d73b007e0627563a530967e": "컨테이너 생성이 실패했습니다!적절한 시간에 Docker 서비스를 다시 시작하십시오!", + "196a4f415d73b007e0627563a530967e": "컨테이너 생성이 실패했습니다!적절한 시간에 Docker 서비스를 다시 시작하세요!", "ea7b2beec49a425b5742339d00a5aeb8": "이미지 [{}]가 존재하지 않습니다!", "c29c7e4f72858367cd21d10303411592": "컨테이너 이름이 이미 존재합니다!", "c4dc041770b8a0e34d1399141d0e4de8": "컨테이너 이름이 유효하지 않습니다", - "97bcbd1e3b4df0f1c6ec642e7be17afe": "사용중인 서버 포트 {}!다른 포트를 변경하십시오", + "97bcbd1e3b4df0f1c6ec642e7be17afe": "사용중인 서버 포트 {}!다른 포트를 변경하세요", "994e5a057aca3524ba773ec33228e184": "창조 실패!{}", "00ff90441ea0bdece5d9e5c72efa14a7": "컨테이너 생성이 실패했고 Docker와의 연결이 시간이 내려졌습니다!", "8879635d66ad75dcbfc8c31ba1351116": "컨테이너가 실행되지 않았습니다!{}", @@ -2136,7 +2136,7 @@ "f2124ee490df203b3f86509401c76a09": "컨테이너가 성공적으로 편집되고 현재 지정된 [{}] 네트워크가 생성되고 IP를 사용자 정의 할 수없고 IP가 자동으로 할당 된 경우 서브넷이 지정되지 않습니다!", "b95d75cd8e04e9cca297c3cd1091b2eb": "컨테이너가 성공적으로 편집되고 네트워크 [{}] 설정이 실패하고 IP 주소가 자동으로 귀하에게 오류 세부 정보를 할당했습니다.", "4363bb34365a67238ecc6a98ce46b361": "이미지가 생성되었고 {}", - "4bb30e8d57a6a7e548758daf4ac33983": "성공적으로 제출하십시오!", + "4bb30e8d57a6a7e548758daf4ac33983": "성공적으로 제출하세요!", "a32e1f09fc2739d94c51a7168675e0e9": "제출 실패! {}", "172f51d3307b02aeb6dc703a442f4724": "컨테이너를 얻지 못했습니다", "684fc00ae67504a56c09ef71431b1261": "성공적으로 수출 : {}", @@ -2162,17 +2162,17 @@ "53a5658dfa0a2e85083fd63b961d35be": "성공적으로 삭제되었습니다!", "dac7d97aeb94cf9d3b3b5d7d072c4cff": "다시 시도하기 전에 엔터프라이즈 탬퍼 보호를 끄십시오!", "32ca87e65c5fc75d3857767417b56439": "삭제하지 못했습니다!{}", - "b0ea22ff0b389c2a32b8f4367ab650db": "매개 변수 오류, 재시작 정책을 다시 전달하십시오.", - "179a2001e96bb8d0475488f80c7216a8": "성공적으로 업데이트하십시오!", + "b0ea22ff0b389c2a32b8f4367ab650db": "매개 변수 오류, 재시작 정책을 다시 전달하세요.", + "179a2001e96bb8d0475488f80c7216a8": "성공적으로 업데이트하세요!", "3b2f70397fa8a827c7146cbd900f7222": "업데이트 실패!{}", "c147897a9d1746a58de531e9c0158c23": "컨테이너가 시작되지 않았으며 이름을 바꿀 수 없습니다!", "a89c2e8f7eb81399f984330e55014c6f": "성공적으로 이름을 바꿉니다!", "8a615b544c027899738b19f2cc40fd93": "이름 변경 실패!{}", - "3506ae5524d7b5dbd75ed328349e065e": "상위를 성공적으로 설정하십시오!", + "3506ae5524d7b5dbd75ed328349e065e": "상위를 성공적으로 설정하세요!", "363b76cd4207ec1adb31b9f7ee3930c8": "성공하지 못했습니다!", "0fffc4397713115e14ef45273241dfbb": "매개 변수 오류, 전달 : 비고!", - "dce2cbc7791016e4876ab144e53b4f82": "매개 변수 오류, 통과하십시오 : id!", - "ca1bc3e1d32b99b90395da47b88576a9": "매개변수 오류입니다. ws_callback을 전달하십시오!", + "dce2cbc7791016e4876ab144e53b4f82": "매개 변수 오류, 통과하세요 : id!", + "ca1bc3e1d32b99b90395da47b88576a9": "매개변수 오류입니다. ws_callback을 전달하세요!", "b4770fb21a608a5ba1ecacae409093d0": "매개변수 오류입니다. 전달해 주세요: _ws!", "11cde3a2ca81c845978b98e4a6ec471e": "모니터링 절약 시간은 긍정적 인 정수가되어야합니다!", "b314fb25bf654a2256bf53b0f6986c93": "모니터링 데이터는 999 일 이상 유지 될 수 없습니다!", @@ -2181,14 +2181,14 @@ "422f78617d6852c41e370982d73235ed": "설정이 실패했습니다!실패 이유 : {}", "dca5bd22c99a74f74074a3a53d78a58b": "{} 성공", "ec1ec17a5862a949e277432e1d09484d": "설정이 실패했습니다!실패 이유 : {}", - "f4dc83b81fe6993f99c2b54494eeeec1": "성공적으로 모니터링을 시작하십시오!", + "f4dc83b81fe6993f99c2b54494eeeec1": "성공적으로 모니터링을 시작하세요!", "af79fd88d4b6f7e8a1ac05e199747fdb": "모니터링을 시작하지 못했습니다!", "6f4d03d4d1ee0bd282ea744730b7ceda": "도커 모니터링이 성공적으로 중단되었습니다!", "4cc06d8560bb116a38a5aae1458cbe4a": "Docker-Compose 파일 경로는 비어있을 수 없습니다!", "8d885b86e8562c2128689c4a2601c054": "Docker-Compose 파일이 존재하지 않습니다!", "a87b64b2d19f29438274f80ce36a3579": "설치 작업이 대기열에 추가되었습니다!", "d388487780fba74e4ff3f3b9ffbce58b": "제거 할 수 있습니다!", - "c4ba6d01fd53333a6e7e85707758c550": "성공을 해제하십시오!", + "c4ba6d01fd53333a6e7e85707758c550": "성공을 해제하세요!", "b7affa7cc663144bc99b9edb3f1a027f": "수리 작업이 줄에 추가되었습니다!", "cb49a4daafc9d27bd460967891968225": "성공적으로 저장되었습니다!", "58fcf0699f38a60c8025330585ac205a": "실패 저장, 이유 : {}", @@ -2198,7 +2198,7 @@ "f2bd8f0373084151bbc07e8c1409e37c": "설정 실패! {}", "a848bbd79221dfdce1c9dca536dbfada": "프록시 설정의 JSON 형식이 잘못되었습니다!", "edf6eb680187066c4dea216b3b20d6d2": "프록시 설정이 완료되었습니다!", - "720d2290c3082615c0f79894bfdcabd7": "올바른 I PV 6 주소를 입력하십시오!", + "720d2290c3082615c0f79894bfdcabd7": "올바른 I PV 6 주소를 입력하세요!", "b01f9411136207ad7df28b9bf2387e2a": "업그레이드 실패!실패 이유:{}", "da896b628e3ded58445e4b015320f327": "다음 이유로 인해 오버로드가 실패합니다.{}", "efb869976990f78b3d6fcbaf270e3323": "새로고침에 성공했습니다.", @@ -2208,33 +2208,33 @@ "5e022f79dcc774c79bc55ee28774e2e7": "이미지 이름은 포함 할 수 없습니다.", "c00be60f9f3f7d747aadfdb124e855ef": "성공적으로 저장 : {}", "cb1f8d99b492340cf701101c87884a8c": "이미지를 내보낼 수 없습니다!", - "afaa91d141ded3e37b8b9ebf8bc31c51": "이미지를 내보내지 못하고 Docker에 대한 연결이 시간이 내려졌습니다.Docker를 다시 시작하고 다시 시도하십시오!", + "afaa91d141ded3e37b8b9ebf8bc31c51": "이미지를 내보내지 못하고 Docker에 대한 연결이 시간이 내려졌습니다.Docker를 다시 시작하고 다시 시도하세요!", "5b980f2e1c82c04c91376d55d4306a91": "이미지를 내보내지 못했습니다!
{}", - "e5e8c7cac8b71e94280fa08301d21e78": "이미지 경로를 입력하십시오!", + "e5e8c7cac8b71e94280fa08301d21e78": "이미지 경로를 입력하세요!", "5441400ea3bd16cffdf70c46c34f61d4": "이미지를 가져 오지 못했습니다.파일 확장자는이어야합니다.", "0720c6c4f478b3a374b4a438f7cf80ad": "이미지를 가져오지 못했습니다. docker 연결 시간이 초과되었습니다. docker를 다시 시작한 후 다시 시도해 보세요!", "22cc0388137842df9649b3bbcff345e8": "이미지 가져오기에 실패하고 임시 컨테이너 디렉터리가 생성되지 않은 경우 보호 소프트웨어에 차단 기록이 있는지 확인하세요.", "67b97e4746a2faf5d59206a80bb28649": "이미지 가져 오기가 성공했습니다! {}", - "deceb44868a29ae5d579114348736cbb": "이미지 가져 오기에 실패했고 컨테이너의 임시 디렉토리가 생성되지 않았습니다.보호 소프트웨어에 가로 채기 레코드가 있는지 확인하십시오!", + "deceb44868a29ae5d579114348736cbb": "이미지 가져 오기에 실패했고 컨테이너의 임시 디렉토리가 생성되지 않았습니다.보호 소프트웨어에 가로 채기 레코드가 있는지 확인하세요!", "8eb05618b0f04e727b0685427fd49c8e": "이미지를 가져 오지 못했습니다!
{}", - "721aa02577670c1049ea9d12caa8938c": "올바른 dockerfile 경로를 입력하십시오!", - "736df9a7c491f3299efdeb9f7d7e9e0f": "이미지를 성공적으로 구축하십시오!", + "721aa02577670c1049ea9d12caa8938c": "올바른 dockerfile 경로를 입력하세요!", + "736df9a7c491f3299efdeb9f7d7e9e0f": "이미지를 성공적으로 구축하세요!", "6e85568dae869303ca7a4486f55458a3": "빌드가 실패하고 연결 시간이 초과되었습니다", "5bb301b85cc1f42e56174d3d9a4c0286": "빌드 실패!{}", "f51455b323ec2db8004c812001043330": "빌드 실패! 지정된 Dockerfile을 찾을 수 없었습니다", "8e1b9c9b75950d0feba6813d32766e61": "빌드 실패! {}", "eba0ec758a6464a20c14c0f23ceee62e": "미러가 성공적으로 삭제되었습니다!", "8dd326278d09a3ac4bc56cf725c8f262": "삭제가 실패하고 이미지가 존재하지 않을 수 있습니다!", - "11ead921bc0e3d94f1f9e0db4bf8ed8d": "이미지 ID는 둘 이상의 이미지에서 사용되며 이미지를 삭제하도록 강요하십시오!", - "43993616c7433350755d30a3b4d065dd": "이미지가 사용 중입니다.이미지를 삭제하기 전에 컨테이너를 삭제하십시오!", + "11ead921bc0e3d94f1f9e0db4bf8ed8d": "이미지 ID는 둘 이상의 이미지에서 사용되며 이미지를 삭제하도록 강요하세요!", + "43993616c7433350755d30a3b4d065dd": "이미지가 사용 중입니다.이미지를 삭제하기 전에 컨테이너를 삭제하세요!", "d6992c3fcf2269c249cd5f18f1ac2c11": "이미지를 삭제하지 못했습니다!
{}", - "0c6c071174fde5b47c9eef8088c17a89": "이미지를 삭제하지 못했고 Docker에 대한 연결이 시간을 초과하고 다시 시작하고 다시 시도하십시오!", - "a3ba80a8e1e0d9af94c809e909431b3c": "실패, 저장소에 로그인 [{}] 실패했습니다.이 저장소에 다시 로그인하십시오! \\ r \\ n", - "cc40077b6ee61fbfa35713a21e8eb866": "bt_failed, 저장소에 로그인 [{}] 실패했습니다.이 저장소에 다시 로그인하십시오!{}", - "60b488c60b6747bf34a86a69740b636d": "푸시 이미지는 [/]를 포함 할 수 없으며 다음 형식을 사용하십시오 : image : v1 (이미지 이름 : 버전).", + "0c6c071174fde5b47c9eef8088c17a89": "이미지를 삭제하지 못했고 Docker에 대한 연결이 시간을 초과하고 다시 시작하고 다시 시도하세요!", + "a3ba80a8e1e0d9af94c809e909431b3c": "실패, 저장소에 로그인 [{}] 실패했습니다.이 저장소에 다시 로그인하세요! \\ r \\ n", + "cc40077b6ee61fbfa35713a21e8eb866": "bt_failed, 저장소에 로그인 [{}] 실패했습니다.이 저장소에 다시 로그인하세요!{}", + "60b488c60b6747bf34a86a69740b636d": "푸시 이미지는 [/]를 포함 할 수 없으며 다음 형식을 사용하세요 : image : v1 (이미지 이름 : 버전).", "44dbec830b87eb037e8fcbb0e1b56160": "Docker Public Repository로 추진할 수 없습니다!", "b4c46001066c912344e3bdb0df86e848": "저장소 [{}] 로그인이 실패했습니다!", - "0ebfb094c6482acb049e0dd0d3107307": "푸시 실패, 이미지 레이블 오류, 다음과 같은 입력하십시오 : v1.0.1", + "0ebfb094c6482acb049e0dd0d3107307": "푸시 실패, 이미지 레이블 오류, 다음과 같은 입력하세요 : v1.0.1", "d26bdd6e86002ed92089dc71347822ce": "푸시 실패,이 저장소로 푸시 할 권한이 없습니다!", "82058092ad7d2c7aa5e2f012b6544e59": "푸시 실패! {}", "2b228d4775d23d2725ec227ba648bd43": "성공적으로 밀고, 거울 : {}", @@ -2253,22 +2253,22 @@ "714841af7f3de6c8d99ba03f4cee0ee5": "풀이 실패, 이미지 형식이 잘못되었습니다. nginx : v 1! \\ r \\ n", "2d941c4fa4da32ccafa8670a07f23c1d": "이미지가 성공적으로 당겨졌습니다.", "5282194697748d9fcd1ccd8a90428424": "이 거울 이미지가 없을 수도 있습니다.", - "d6facab17334983e7c6f8c561c239820": "이미지를 가져 오지 못했습니다. 이것은 개인 이미지입니다. 계정 비밀번호를 입력하십시오!", + "d6facab17334983e7c6f8c561c239820": "이미지를 가져 오지 못했습니다. 이것은 개인 이미지입니다. 계정 비밀번호를 입력하세요!", "b507deb7848d566982b339265c8f5482": "당기는 이미지 실패

이유 : {}", "e90811ef0a60b6d299b4e1064d7788d0": "쓸모없는 이미지가 없습니다!", "f343313c101aeaff0516990ebea3dcef": "삭제하지 못했습니다! {}", - "90ecd58b3feb0b2be11f0af685ad39fe": "쓸모없는 이미지의 삭제가 실패했고 Docker와의 연결이 시간이 내려졌습니다.Docker 서비스를 다시 시작하고 다시 시도하십시오!", + "90ecd58b3feb0b2be11f0af685ad39fe": "쓸모없는 이미지의 삭제가 실패했고 Docker와의 연결이 시간이 내려졌습니다.Docker 서비스를 다시 시작하고 다시 시도하세요!", "0568e5e8aa7c811dd420c818189a0d46": "초 전", "53c53a79f864561f8b6886b3dde7cd51": "몇 분 전", "f329a0dab82282e50e3aea9260e95d53": "몇 시간 전", "7a1af30a5ce889031cbc2472766159e3": "며칠 전", "558a41d55884223583b3542e802d2b64": "미러 이름은 비워둘 수 없습니다!", - "4097585e32152eb74bbee5ab8c463718": "Docker Service가 비정상적으로 실행 중입니다. 다시 시작하고 다시 시도하십시오!", - "26a0931677e111565f3ff7d059b94d8b": "게이트웨이 설정이 잘못되었습니다. 서브넷과 일치하는 게이트웨이를 입력하십시오 : {}", - "def2ba1ce0e4d77692c14e5b984636fa": "서브넷 주소 형식 오류 오류 예를 들어 입력하십시오 : 172.16.0.0/16", - "716eeeb727fd667635ccf1d18891d46e": "IP 범위 형식 오류 오류이 서브넷에 적합한 IP 범위를 입력하십시오.", + "4097585e32152eb74bbee5ab8c463718": "Docker Service가 비정상적으로 실행 중입니다. 다시 시작하고 다시 시도하세요!", + "26a0931677e111565f3ff7d059b94d8b": "게이트웨이 설정이 잘못되었습니다. 서브넷과 일치하는 게이트웨이를 입력하세요 : {}", + "def2ba1ce0e4d77692c14e5b984636fa": "서브넷 주소 형식 오류 오류 예를 들어 입력하세요 : 172.16.0.0/16", + "716eeeb727fd667635ccf1d18891d46e": "IP 범위 형식 오류 오류이 서브넷에 적합한 IP 범위를 입력하세요.", "e310a873e7812c7f994d482604061fee": "IP 범위 [{}]는 이미 존재합니다!", - "db88b911ea66744c24b22efcafef2101": "시스템 커널 버전이 너무 낮아서 커널을 업데이트하거나 다른 네트워크 모드를 선택하십시오.", + "db88b911ea66744c24b22efcafef2101": "시스템 커널 버전이 너무 낮아서 커널을 업데이트하거나 다른 네트워크 모드를 선택하세요.", "9cebb294a44695984eaaf2134df63a51": "현재 노드는 떼가 아니며 사용하기 전에 구성해야합니다.", "85ac438bd64f13e2ad61cf60e5ade3d3": "네트워크를 추가하지 못했습니다!{}", "640520ffb5d9c01336710bad3ea6d7ff": "네트워크가 성공적으로 추가되었습니다!", @@ -2291,15 +2291,15 @@ "9cdc09516d85ae057d1d9bedc988849e": "네트워크를 성공적으로 만들었습니다!", "5395cc8155f62a666b8f0d0f9f207676": "저장소 정보가 이미 존재합니다!", "9b10e472adfe6372c9175b9002f098fd": "[공식 Docker Repository] 편집 할 수 없습니다!", - "5858be44c285048a8f51c126b2fd23e9": "편집 실패!이유 : 계정 비밀번호 암호 해독 실패!저장소를 삭제하고 다시 추가하십시오", + "5858be44c285048a8f51c126b2fd23e9": "편집 실패!이유 : 계정 비밀번호 암호 해독 실패!저장소를 삭제하고 다시 추가하세요", "7e51d0e26e1b467aff3c89d3e0751ec0": "편집 실패!이유:{}", "6478f13dd58e5a4329e19be9020243ff": "이 저장소는 찾을 수 없습니다", "d5309f3186607eb36bee41e8a28cea3a": "성공 편집!", "9e20bffc0d4093d18fcbc5c98fa0fd87": "[공식 Docker 리포지토리]를 제거 할 수 없습니다!", "a62336a87697ab6911ba550015a798ef": "삭제 실패, 저장소 ID가 존재하지 않을 수 있습니다!", - "54197759827cfaf0cdb1e213fa49771e": "로그인 테스트가 실패했습니다!이유 : 계정 비밀번호 오류 일 수 있습니다. 확인하십시오!", + "54197759827cfaf0cdb1e213fa49771e": "로그인 테스트가 실패했습니다!이유 : 계정 비밀번호 오류 일 수 있습니다. 확인하세요!", "657a0b7e82731fb4ae516d14081f17d0": "로그인 테스트가 실패했습니다!이유: {}", - "221d1ea3c23f430e03a4486dca865014": "컨테이너가 존재하지 않습니다. 브라우저를 새로 고치고 다시 시도하십시오!", + "221d1ea3c23f430e03a4486dca865014": "컨테이너가 존재하지 않습니다. 브라우저를 새로 고치고 다시 시도하세요!", "7e88e25ea6c628c2d03c526c04af3eed": "컨테이너 상태를 얻지 못했습니다.", "cb337dbfbc18aafa482051b6fc349dea": "구성 파일을 가져 오지 못했습니다", "84d3fc0c1c70fcd6fdd7ca7c3be11225": "프로젝트는 이미 존재합니다!", @@ -2311,7 +2311,7 @@ "4ec9c8311b7814ee0f17b634cb7a6ae0": "프로젝트 간격이 성공적으로 수정되었습니다!", "cda91d4feb0c7cceb0fa1aeabcf536b4": "차례로 컨테이너 발사!", "97f2a2dcbe0d211b8972c6151950b213": "다음 컨테이너가 실행 중입니다. {}.멈추고 시작할 수 있습니까?런닝 컨테이너를 직접 중지하도록 선택할 수도 있습니다!", - "9d160eff84c44041cf4eb5c624874c4e": "차례로 컨테이너 발사를 시작하십시오!", + "9d160eff84c44041cf4eb5c624874c4e": "차례로 컨테이너 발사를 시작하세요!", "33b5d440d17f3837309707b5b049e899": "순차적으로 컨테이너가 정지중입니다!", "b687943a0a61ed9f039213d7c5e0fcca": "컨테이너가 순서대로 정지하기 시작합니다.", "ec7b13b39406a81e90df7b7d06a4b134": "잘못된 상태입니다!", @@ -2330,7 +2330,7 @@ "6d64734fff5534f48029ffba4aa3678d": "1. 일반 비즈니스에 대한 명령이 필요한지 확인하는 것이 좋습니다
2. 불필요한 손실을 피하기 위해 공식적이고 신뢰할 수있는 인프라를 선택하는 것이 좋습니다.", "6684913201a60be0b5e89c4dfb210719": "Bashrc 백도어 발견 {}", "9a9f27d5f9f8c056fff7986c87a94c30": "이미지에는 bashrc 백도어가있는 것으로 밝혀졌습니다 : [{}], 악성 코드 내용 :
{}", - "d8a828116070b9d92315ca309cca1991": "1. 이미지를 사용하여 배포 된 컨테이너를 입력하고 파일
2에서 악성 코드를 삭제하십시오.컨테이너가 침입되었는지 확인하고 컨테이너에서 비즈니스의 액세스 토큰 또는 계정 비밀번호를 업데이트하십시오
3.공식 이미지 또는 기타 신뢰할 수있는 이미지 배포 컨테이너를 교체하는 것이 좋습니다.", + "d8a828116070b9d92315ca309cca1991": "1. 이미지를 사용하여 배포 된 컨테이너를 입력하고 파일
2에서 악성 코드를 삭제하세요.컨테이너가 침입되었는지 확인하고 컨테이너에서 비즈니스의 액세스 토큰 또는 계정 비밀번호를 업데이트하세요
3.공식 이미지 또는 기타 신뢰할 수있는 이미지 배포 컨테이너를 교체하는 것이 좋습니다.", "e1439f3f7d25d378078d513a82a3fa87": "백도어 파일 발견 {}", "9ede9d4bd542eedf78e39b0acf0206e3": "Bashrc 백도어 파일 [{}]은 이미지에 존재하는 것으로 밝혀졌으며 악성 코드 내용은 다음과 같습니다.
{}", "686765b4612ecd8f774648db29a1541d": "Cron Backdoor 발견 {}", @@ -2343,13 +2343,13 @@ "a2b09164c8d23894736bcc6a646861e0": "TCPWRPARPE BACKDOOR 파일 [{}]이 이미지에 존재하는 것으로 밝혀졌으며 악성 코드 내용은 다음과 같습니다.
{}", "a7fd9f6b190b8531039376fbbda5f482": "탈출의 위험이있는 사용자 {}", "5d46ed5f4af3f30cfcc8bd66942f93b4": "사용자 이름 {}는 명령 [{}]을 통해 컨테이너 탈출을 완료 할 수 있으므로 공격자는 호스트 또는 다른 컨테이너에 대한 액세스 권한을 얻을 수 있습니다.악성 콘텐츠 :
{}", - "4ca0a18aa36a60613104cacdae514dec": "1. 이미지를 삭제하거나 더 이상 사용하지 않는 것이 좋습니다
2.이미지를 사용하는 비즈니스가있는 경우 컨테이너 환경을 입력하고 /etc /sudoers 파일에서 사용자 {}의 내용을 삭제하십시오.", + "4ca0a18aa36a60613104cacdae514dec": "1. 이미지를 삭제하거나 더 이상 사용하지 않는 것이 좋습니다
2.이미지를 사용하는 비즈니스가있는 경우 컨테이너 환경을 입력하고 /etc /sudoers 파일에서 사용자 {}의 내용을 삭제하세요.", "611afea08ae3b216a34dfde4c143f46c": "지원되지 않는 시스템 버전", "68ae8c43a52aac63c5c62e1974afdda6": "스크립트 ID는 비어있을 수 없습니다", "eee298ea1d9259c2f0e2061ecd89c21c": "지정된 스크립트가 존재하지 않습니다", "b68a8dd0c887719b7cc3e10dc11843ce": "Aapanel의 내장 스크립트는 삭제할 수 없습니다", - "aefb82d7caf36c7f34a4cf60168a1297": "이 스크립트는 현재 작업 [{}]에서 사용 중이며 먼저 작업을 삭제하십시오!", - "4223589c4945a6757845760cf467a183": "이 스크립트는 현재 작업 이벤트 [{}]에서 사용 중이며 먼저 작업 이벤트를 삭제하십시오!", + "aefb82d7caf36c7f34a4cf60168a1297": "이 스크립트는 현재 작업 [{}]에서 사용 중이며 먼저 작업을 삭제하세요!", + "4223589c4945a6757845760cf467a183": "이 스크립트는 현재 작업 이벤트 [{}]에서 사용 중이며 먼저 작업 이벤트를 삭제하세요!", "2e32a56c4ec44d75ff6cf5c6ac366db8": "성공적으로 삭제 된 스크립트 [", "16687cbe6e87af3bc2762f0410453ec5": "스크립트 이름 또는 내용은 비어있을 수 없습니다", "1e156c08409accc1dc3da5c395c3ea22": "반환 유형 오류", @@ -2357,7 +2357,7 @@ "91896a15daf4558843249e11b7aa1fc5": "수정이 실패했습니다", "919c17a8f22c59f9af57399aa649003e": "성공적으로 수정 된 스크립트 [", "71c95be7ca536d92d8f175fa245ddeb0": "이 스크립트에는 매개 변수가 필요합니다", - "7ef6898209b89f4ace813b19f5eac840": "스크립트 실행 오류, 스크립트 코드가 올바른지 확인하십시오 : \\ n {}", + "7ef6898209b89f4ace813b19f5eac840": "스크립트 실행 오류, 스크립트 코드가 올바른지 확인하세요 : \\ n {}", "2086e84cd166412cf7236bdfb66e6d6f": "실행 실패, 오류 메시지 : \\ n {}", "7a38e49c19eace49f0e9a0d03efadd1b": "실행 성공 : \\ n {}", "5e1459e1ff5449309bd13d173dca1197": "작업 이름은 비어있을 수 없습니다", @@ -2372,9 +2372,9 @@ "89c375395150b0550b20cdf31faf4ef5": "작업이 존재하지 않습니다", "1df9f0729d55ed5e561bdf73b6b14976": "작업 ID는 비어있을 수 없습니다", "497b38d4da5f19ed3f041f4ae6af6059": "run_stcript_id 및 run_stcript에는 하나 이상의 유효한 값이 필요합니다", - "cf76609030a04a8e357171a25d76f2e8": "다음 연산자 중 하나를 사용하십시오. {}", + "cf76609030a04a8e357171a25d76f2e8": "다음 연산자 중 하나를 사용하세요. {}", "bb4d743f102448bf1ad62e1f1bd25e21": "지정된 작업이 존재하지 않습니다", - "56fcd6720b5bd174b1d614b7c7761fd5": "스크립트에는 매개 변수가 필요합니다. 매개 변수를 작성하십시오", + "56fcd6720b5bd174b1d614b7c7761fd5": "스크립트에는 매개 변수가 필요합니다. 매개 변수를 작성하세요", "809888a81d143c1118d056643719a133": "트리거 이벤트를 추가하지 못했습니다", "dd66e7c4d78fab1dfd30524d47af971e": "이벤트 ID는 비어있을 수 없습니다", "8abc3d5d0d73a76ae66603858617ad1b": "지정된 이벤트는 존재하지 않습니다", @@ -2387,7 +2387,7 @@ "38641e6ce3a6369e108eb595672c8edc": "성공적으로 제거되었습니다!", "9cae26284a7ad2f46132c1e8e196d089": "성공적으로 설치되었습니다!", "a9a92e55770213c8aa1fb2871dc43563": "관리자 포트를 성공적으로 설정했습니다!", - "b611124a9bad44e328d7ce809912802d": "성공적으로 설정하십시오!", + "b611124a9bad44e328d7ce809912802d": "성공적으로 설정하세요!", "2321763bf0b4cbf345b1e19dc9faec47": "Adminer PHP 버전을 성공적으로 설정했습니다!", "40a1f70c155550ad2dafa5e556e10c3c": "PHP 버전이 설치되지 않습니다!", "e75e68c65607a7cfcc570d51345d7e33": "파일 모니터", @@ -2400,7 +2400,7 @@ "bdb199a03e52488d499ea6bb0cb0d1ed": "IP 주소 세그먼트를 차단하려면 WAF가 필요합니다", "1ac8e9ffcea7cf6e9fa183c1b9038599": "IP 데이터가 존재하지 않습니다!", "04d46623edcb5663566cf43f575de9b2": "웹 사이트 이름은 비어있을 수 없습니다!", - "4dcde63f7fd4415f3b5eb6cb889d135c": "추가가 성공적이었습니다", + "4dcde63f7fd4415f3b5eb6cb889d135c": "추가 성공적이었습니다", "d303480175994c6ad240cf24a4a99640": "웹 사이트 구성이 존재하지 않습니다!", "87d1f7257214d09ba39656b72c864bac": "계정 설정 성공!", "aa5bb2d58da86c4b9160e94d0c4538f1": "Uri는 비어있을 수 없습니다!", @@ -2410,8 +2410,8 @@ "1ed0fa9bb8768d56bf2d3232d7067023": "잘못된 청취 포트 범위!, 요구 사항 : 1024-65535", "e6aa58b2f41bc53f6b84657d47eb35c1": "데이터 저장 경로가 존재하지 않습니다!", "c87be59ecbed944c2b45fea87d62f473": "IP 통계 모드 오류, 요구 사항 : 0 또는 1", - "fbc4861b0190c90a5388e44d2bbac678": "현재 버전을 사용할 수 없습니다. 패널을 업그레이드하고 다시 시도하십시오.", - "8b1d5629a1346da21fcaeb9f8f0db6d2": "시간 형식 오류를 시작하십시오!", + "fbc4861b0190c90a5388e44d2bbac678": "현재 버전을 사용할 수 없습니다. 패널을 업그레이드하고 다시 시도하세요.", + "8b1d5629a1346da21fcaeb9f8f0db6d2": "시간 형식 오류를 시작하세요!", "7a238977c4b13d23ac3e6b151a914cab": "종료 시간 형식 오류!", "a87a482f3bced3ce16bc9a351e8b5ce8": "시작 시간은 종료 시간보다 클 수 없습니다!", "a0ef69b1680461368a9130e770256ca6": "날짜 형식 오류!", @@ -2436,10 +2436,10 @@ "191fae10bdd9d3eb6cb110b524fe40b7": "제출이 성공적이었습니다", "f53208c04e48d7ee19222b6adf343810": "사용자 이름의 길이는 3 자 미만일 수 없습니다!", "251e2cae1dbed2b37f7d16961a606970": "권한 수준 선택이 잘못되었습니다!", - "a835325a5600b6571a24111e4d318e2c": "웹 사이트를 선택하십시오!", + "a835325a5600b6571a24111e4d318e2c": "웹 사이트를 선택하세요!", "a669655fa991afcfa0cfa3f62286d944": "비밀번호 길이는 5 자 미만일 수 없습니다!", "4d8d30e66ad9aaccc738ad99d5083955": "사용자 이름이 이미 존재합니다!", - "12152390a5bf2ebce0f00b0fb5c650a2": "추가가 성공적이었습니다!", + "12152390a5bf2ebce0f00b0fb5c650a2": "추가 성공적이었습니다!", "4d1b7f489e07d6ca02ca1910a3884c48": "사용자는 존재하지 않습니다!", "3e83aa40dd320efb027151c02aab2871": "암호의 길이는 8 자 미만일 수 없습니다!", "d3748b3102cc8ba898f0f0bec842ce9e": "수정이 성공적이었습니다!", @@ -2448,7 +2448,7 @@ "c88239bc4a113ab0f02acb9bc31b3437": "웹 포트가 잘못되었습니다!", "f06e6a5985a91ac55c651e0b573378f0": "웹 보안 디렉토리는 비어있을 수 없습니다!", "41a871d7ec26993be1367226321e06fa": "보안 입구 주소의 길이는 6 자리 미만일 수 없습니다!", - "16f83d0969b9f7fe56ac3b55f9dedb26": "이 입구는 이미 패널에서 차지하고 있습니다. 다른 입구를 사용하십시오!", + "16f83d0969b9f7fe56ac3b55f9dedb26": "이 입구는 이미 패널에서 차지하고 있습니다. 다른 입구를 사용하세요!", "066df5a1cf19314e0265a1eb396848ac": "유인 주소는 예를 들어 : /my_monitor와 같이 잘못 형식화되었습니다", "794ee58637251012717d7e565aafc2a1": "설정이 성공적이었습니다!", "2531ce72ea98e5aa8f4953eee783b540": "오류 로그가 발견되지 않았습니다!", @@ -2459,23 +2459,23 @@ "696212205a77e698860ff5195992642b": "수리 작업이 완료되었습니다", "97cb85456b49af4258f4c8da38bb576a": "예정된 작업이 성공적으로 추가됩니다!", "2739213f569742c0782252f41279c060": "예정된 작업을 추가하지 못했습니다", - "1cc4efde4fab0b4bbc2812a8b58f59b0": "사이트 이름을 지정하십시오", - "3b5ef9e1ea5a8dbd9606075686dbf15f": "날짜 범위를 지정하십시오", + "1cc4efde4fab0b4bbc2812a8b58f59b0": "사이트 이름을 지정하세요", + "3b5ef9e1ea5a8dbd9606075686dbf15f": "날짜 범위를 지정하세요", "f8412f656685f470a82b74de3d9f24d5": "수출 작업이 이미 존재합니다", - "96ed379ec1882dcf52f0ff65057efb92": "내보낼 필드를 지정하십시오", + "96ed379ec1882dcf52f0ff65057efb92": "내보낼 필드를 지정하세요", "4e698e0709485a0e93a706964b748c5b": "알 수없는 내보내기 유형", "2a2dbc12afac446fe408eb78453bc6c2": "내보내기 작업이 존재하지 않습니다", "9ff8782f584db728284fadd719967806": "수출 작업에 오류가 발생했습니다", "b4421542e9cff8ce336075b668b8f87e": "내보내기 기록은 존재하지 않습니다", - "41564d1cd7f8ecb23bcc590cb2217518": "새 데이터 디렉토리를 입력하십시오", + "41564d1cd7f8ecb23bcc590cb2217518": "새 데이터 디렉토리를 입력하세요", "699856a3cc697d8afcfd04dcd2f0729a": "지정된 디렉토리는 현재 디렉토리와 동일합니다.", "103422cd692bcaf56a7367075caf2274": "지정된 디렉토리는 현재 디렉토리와 동일한 디스크에 분할되어 있으므로 데이터 마이그레이션이 필요하지 않습니다.", "bcbd9605d3b8753bb8afbc765b293e01": "수정 및 데이터 마이그레이션 작업이 시작되었습니다", - "967a57ad58881afe2c5da6cf0d7fce8c": "IP 주소와 크롤러 이름을 입력하십시오", - "62b73e6c2a169296e73edf8a4d1e02f0": "올바른 IP 주소를 입력하십시오", - "0e1a26f6137c04f0f80956210069e46d": "올바른 크롤러 이름을 입력하십시오", - "fe8d50ca26f2e864d2bf4a932801bb85": "예상치 못한 오류, 플러그인을 수정하십시오", - "21aa998a1dee8774bc88ce2a070bf4de": "IP 주소를 입력하십시오", + "967a57ad58881afe2c5da6cf0d7fce8c": "IP 주소와 크롤러 이름을 입력하세요", + "62b73e6c2a169296e73edf8a4d1e02f0": "올바른 IP 주소를 입력하세요", + "0e1a26f6137c04f0f80956210069e46d": "올바른 크롤러 이름을 입력하세요", + "fe8d50ca26f2e864d2bf4a932801bb85": "예상치 못한 오류, 플러그인을 수정하세요", + "21aa998a1dee8774bc88ce2a070bf4de": "IP 주소를 입력하세요", "2e0c672edc06ef05e44de98ac1b7a47d": "삭제가 성공적입니다", "0f9d9b728fba6427b5ff4da49aee1738": "거미가 잘못 선택되었습니다!", "e48c86e701ddba3ab084d5457aa58714": "IP는 비어있을 수 없습니다!", @@ -2530,8 +2530,8 @@ "6b803f13e4c829ed6a65c0d5976af511": "비정상 또는 기형 파일 내용 : {}", "d6cd6db68490fced73e7bcf3e269fc3d": "선택한 연락처 목록이 비어 있습니다", "721537a954932be33814ab079df57c78": "할당량을 보내지 않습니다. 리필 팩을 구입하거나 다음 달에 새로 고침을 기다리십시오.", - "debbea6b34bd0edb5bed5be7d68044c1": "나머지 금액 {} 미완성 된 작업이 차지하는 금액 {} {}를 보내는 데 필요한 금액은 보충 패키지를 구입하십시오.", - "cb8c344616c2690af7d75e87f9c80aea": "너무 큰 숫자를 선택하십시오", + "debbea6b34bd0edb5bed5be7d68044c1": "나머지 금액 {} 미완성 된 작업이 차지하는 금액 {} {}를 보내는 데 필요한 금액은 보충 패키지를 구입하세요.", + "cb8c344616c2690af7d75e87f9c80aea": "너무 큰 숫자를 선택하세요", "4b0dae036acd930ca1c942474b04738f": "주소가 존재하지 않습니다", "cd0c2875bbba989082b0bea54837c422": "작업이 성공적으로 추가되었습니다", "48a84605a7e7d8938acea34996b55bb9": "작업을 추가하지 못했습니다 : [{0}]", @@ -2541,8 +2541,8 @@ "2c09afb2ce9a25b5e33e0b5eb7e10cb9": "메일을 보내지 못했습니다, 오류 이유 [{0}]", "2af4936790c12bc9522e844a3187f142": "매개 변수 오류 : mail_type", "cf6a1096f4f9f5c3632f03ddd00f8436": "이 유형은 이미 존재합니다", - "c92cf27565701074c9297c9f6e001056": "{}, 실패 {}, 복제 사서함 {}를 성공적으로 추가하십시오.", - "119acd39beb57884b7fce4275c0324d9": "{}, 중복 사서함 {}를 성공적으로 추가하십시오.", + "c92cf27565701074c9297c9f6e001056": "{}, 실패 {}, 복제 사서함 {}를 성공적으로 추가하세요.", + "119acd39beb57884b7fce4275c0324d9": "{}, 중복 사서함 {}를 성공적으로 추가하세요.", "0b898fa833d00b281702ae7791a5624d": "실행중인 작업 만 멈출 수 있습니다", "4cd93d208ac9f476b452f930ced5e3e0": "{} 성공적으로", "e38bacaba20440245e0aae88f984f78d": "필요한 매개 변수가 누락되었습니다", @@ -2587,18 +2587,18 @@ "47cb4d76e39373c5fbb474f01a7f9cdb": "매개 변수 rc_user 오류", "ada2e3b01cdd14582e9bde6794e56de3": "매개 변수 rc_pass 오류", "ee668afb3022f7a04020a4355995df08": "사용자는 존재하지 않습니다", - "fe3adb79b459800ef1bb0f8042e7fe4a": "먼저 RoundCube를 설치하십시오", + "fe3adb79b459800ef1bb0f8042e7fe4a": "먼저 RoundCube를 설치하세요", "ebdab9ee4ea6ea28adfd7da342b8af7a": "필요한 문서가 누락되었습니다", - "d77f421bec3e1db5836f52aa5b53e61b": "[{}]를 실행하여 먼저 pflogsumm을 설치하십시오", + "d77f421bec3e1db5836f52aa5b53e61b": "[{}]를 실행하여 먼저 pflogsumm을 설치하세요", "4980e2fc0b7bce4c83da3fe631a97bce": "PostFix 구성 파일이 없습니다", "2867124182a8a707a7e8aeb1faa60d4e": "postfix 구성 파일은 myDestination 매개 변수를 찾지 못했습니다.", "9a8b3de2d2fc5f9114798532eae929b5": "DoveCot을 구성하지 못했습니다", "a4cab041ab51d1c2f65f67d7d82ec8a5": "메일 서버가 있습니다", "7fcbf57e8fe359587beb56c6d6a35059": "메일 서버를 설치하지 마십시오", - "1d25cf1f445bdffccf0c7c04f98e90d8": "성공적으로 설치하십시오", + "1d25cf1f445bdffccf0c7c04f98e90d8": "성공적으로 설치하세요", "b4575dff8587db1b71ea56ef26fa160e": "서비스 이름이 존재하지 않습니다", "c138b2ea9b2ce96219987b1dc34a1751": "수리 완료", - "fab07dcaf5fa1e2468aed520eb12f60e": "RSPAMD 서비스가 실행 중인지 확인하십시오", + "fab07dcaf5fa1e2468aed520eb12f60e": "RSPAMD 서비스가 실행 중인지 확인하세요", "4b1b92ddcc4d8d18e1fc6d6a2c23b290": "성공적으로 플러시", "ff6975219190cff0cd77a5d45a4e587a": "도메인 이름", "02909d9d9c7b1c15aca48a0f3b632849": "새로 고침 ({}) 캐시 레코드를 성공적으로 캐시합니다", @@ -2607,13 +2607,13 @@ "cb98099b2d50b0ef968b5e35a208055e": "도메인 이름이 이미 존재합니다", "05c53d8c333382f2a88a51e182be4f83": "도메인 추가 [{}]가 성공했습니다!ip err : {}", "8b460c0a4ee7b9f9abf8b7d9cead2cba": "도메인 추가 [{}]가 성공했습니다!", - "17d9629d2f06c1ee2212061b91161d4e": "도메인 이름으로 전달하십시오", + "17d9629d2f06c1ee2212061b91161d4e": "도메인 이름으로 전달하세요", "232b6fcdd02dbb56d0b4680d54e2f357": "도메인 이름이 존재하지 않습니다", - "2f1897169b16b705ba6a5b29a05a983d": "도메인 이름 [{0}] 레코드를 성공적으로 수정하십시오!", + "2f1897169b16b705ba6a5b29a05a983d": "도메인 이름 [{0}] 레코드를 성공적으로 수정하세요!", "5e22d528a4b6e80126d13acec3f03e11": "도메인 _name", - "2ca49954e8a7fb75ed4cd9e1bca24e00": "도메인을 성공적으로 삭제하십시오!({})", + "2ca49954e8a7fb75ed4cd9e1bca24e00": "도메인을 성공적으로 삭제하세요!({})", "20aa86e3c9f40c2469f13b3c03dd280e": "매개 변수는 비어 있고 불충분 한 암호 강도입니다 (대문자와 소문자 및 숫자를 포함해야하며 길이는 8 이상입니다)", - "35dc5b31856636d5281ebc710edeaf24": "계정 이름을 입력하십시오", + "35dc5b31856636d5281ebc710edeaf24": "계정 이름을 입력하세요", "1f26a48fd4db1e46c21cdab41fdfd7bd": "비밀번호 강도가 부족합니다 (대문자 및 소문자 및 숫자를 포함해야하며 길이는 8 이상입니다)", "69e1e781dd3949f8b6a6fff74bbc79b0": "이메일 주소 형식이 잘못되었습니다", "e387e797495f8e6068a2378ea2a9d46b": "이메일 주소는 대문자를 가질 수 없습니다!", @@ -2628,16 +2628,16 @@ "8e3e96d2a9f285ae645e587477b14555": "사서함 사용자 성공 수정 {}", "3d0fd00e4f68fb6a1ebb5de73954f5ca": "삭제 실패!", "daa8873086f44ca2724f03513c8ca775": "사서함 사용자 삭제 성공적으로 {}", - "f5a9438fc0a655d491b336ef4122d03d": "메일을 보낼 수 없음, 오류 원인 : 일부 서비스가 시작되지 않았습니다. 서비스 상태를 확인하십시오.", + "f5a9438fc0a655d491b336ef4122d03d": "메일을 보낼 수 없음, 오류 원인 : 일부 서비스가 시작되지 않았습니다. 서비스 상태를 확인하세요.", "9fab0f5f8d9a53a59587cc911de514f7": "일부 클라우드 공급 업체 (Google, Amazon과 같은)는 기본적으로 포트 25를 닫습니다. 우체국 서비스를 정상적으로 사용하기 전에 공급 업체에 연락하여 포트 25를 열어야합니다.", "b11852c790672b942ed2c547c08d0767": "메일을 보내지 못했습니다. 오류 이유 : 들어오는 주소 형식이 올바르지 않습니다.", "1a4fd4fdd2dcf2d2f06f30522c1d4914": "인터페이스는 공개 액세스를 지원하지 않습니다!", - "55252847683f299cdbdb6c8a6f2aaf69": "이메일을 보낼 수 없음, 이유 : 일부 서비스가 시작되지 않았습니다. 서비스 상태를 확인하십시오.", + "55252847683f299cdbdb6c8a6f2aaf69": "이메일을 보낼 수 없음, 이유 : 일부 서비스가 시작되지 않았습니다. 서비스 상태를 확인하세요.", "56865f3d8aa564a93ed26724862960d1": "메일을 보내지 못했습니다. 오류 이유 [{}]", "e79b5fbde5e49479aaafd5a1fe379e61": "계정 이름 err", "333b7343c6bf424033940a8a97b12bb7": "메일을받지 못했습니다. 오류 이유 [{0}]", "1fd6e81e08c403b6c111f4ca1a673d63": "메일 경로는 존재하지 않습니다", - "5778692e244a35e113e61ed5a4a36063": "메일을 성공적으로 삭제하십시오", + "5778692e244a35e113e61ed5a4a36063": "메일을 성공적으로 삭제하세요", "653869d8a742ca8c58e33b6c1530b403": "경로에 대한 잘못된 JSON 형식", "beb65edc70a951b625901e5b198ed89e": "제공된 경로가 없습니다", "894b5d9ee6b19333f6871fe484756116": "일부 파일은 삭제되지 않았습니다. \\ n", @@ -2645,7 +2645,7 @@ "b400dc9934847d9fe1d234befb30054d": "서비스 이름이 잘못되었습니다", "fcc0d9c357a8bfa2d83e3e250264d4c7": "잘못된 작동", "29c102771255855883869f4bb3b4c2e4": "{} {} 작동의 성공적인 실행", - "a35dd0bfd9996e07728358593562dccc": "계정 이름으로 전달하십시오", + "a35dd0bfd9996e07728358593562dccc": "계정 이름으로 전달하세요", "f935fa53dce46fbb36cefa0a0b08ec65": "계정 이름은 유효하지 않습니다.", "dd130650a1e48b849b7c61ec23d72cea": "우편 발송, 오류 이유 [{0}]", "4168802788e2d2bcdf3238824b47b58e": "PostFix 구성 파일을 찾을 수 없습니다 {}", @@ -2659,7 +2659,7 @@ "2e9f5dd27bf2f972f374084fd8bc56be": "메일 전달이 성공적으로 수정되었습니다", "666b75a042d5cd8cba3a6d1c2f270704": "메일 전달 삭제가 성공적으로 삭제됩니다", "03c6490678727779b9a553b0e03c1d43": "전진 이름이 이미 존재합니다", - "b08e9212679fd4cf82dd5ea8beda84f4": "성공적으로 설정하십시오", + "b08e9212679fd4cf82dd5ea8beda84f4": "성공적으로 설정하세요", "631cca78135ab71a389991d7155bea59": "SMTP 릴레이는 이미 존재합니다", "0b5eff39ea7076bcc36235e042de422d": "구성 정보가 없습니다", "318cc2da7d028b5497ec2e2b7bcb577e": "SMTP 릴레이는 존재하지 않습니다", @@ -2672,18 +2672,18 @@ "97f87b75c36da3aec2a952fa834627ac": "설정 성공", "db8452315d0eb9f8aa56f5ba4e010254": "DoveCot 구성 파일을 찾을 수 없습니다 {}", "54d5be9023bb0918159a58ef65e7cf46": "설정 도메인 이름이 존재하지 않습니다", - "bdc245ab2373b030a79738e5806967b4": "설정이 실패하고 지금 구성 파일을 복원하십시오", + "bdc245ab2373b030a79738e5806967b4": "설정이 실패하고 지금 구성 파일을 복원하세요", "af7746eac1b9f41d829e2f150be96440": "설정 성공", "45448be795807701f1d6d79c73a5e453": "성공적으로 설정", - "6b73df7e52420a0609340be53b559a27": "계정 이름을 입력하십시오", + "6b73df7e52420a0609340be53b559a27": "계정 이름을 입력하세요", "f3482253072b82f9099ba7b79bd694ce": "유효하지 않은 계정 이름 (예 : xx@example.com)", "75e698a13245f4ea49f033e336f9a7ae": "실패, 이유를 얻는다 : [{0}]", "4b590c993349c4a9332fe7c30cc3623b": "성공을 거두었습니다", "fd1c6c13e2281da435056d1cd3de0d19": "성공적으로 움직였습니다", - "d6b9ff1c86c87a4d3d169d19b8b803da": "FQDN을 입력하십시오 (완전한 자격을 갖춘 도메인 이름 예 : mail.aapanel.com).", - "f003e31bb108bfc6e2dca6b6a493e2c4": "FQDN (완전한 자격을 갖춘 도메인 이름 예 : smtp.gmail.com)을 입력하십시오.", + "d6b9ff1c86c87a4d3d169d19b8b803da": "FQDN을 입력하세요 (완전한 자격을 갖춘 도메인 이름 예 : mail.aapanel.com).", + "f003e31bb108bfc6e2dca6b6a493e2c4": "FQDN (완전한 자격을 갖춘 도메인 이름 예 : smtp.gmail.com)을 입력하세요.", "b20c85e36016672347fc67d33c95b9e9": "포트 25가 열렸습니다", - "1af60deed5a95f10c9ee73efeff48999": "다른 서비스의 포트 25에 연결할 수 없으므로 호스팅 제공 업체에 문의하십시오.", + "1af60deed5a95f10c9ee73efeff48999": "다른 서비스의 포트 25에 연결할 수 없으므로 호스팅 제공 업체에 문의하세요.", "540d99b4d5cfe696f6e46cde48eda194": "소스 파일 오류를 얻으십시오!", "bef8386758cab502fd7b6edd15619c85": "그런 파일이 없습니다!", "22d422258dca7c9b0975f91f927678f0": "다시 다운로드했습니다", @@ -2700,16 +2700,16 @@ "7bc1a5dc172f07bc2480c7b2067e08cd": "누락 된 도메인", "abe0a1bf4c110c5e912db5968951edb3": "수정 된 도메인 [{}]이 성공했습니다!", "de5085e3caa72f9417811a3a16fbdc5f": "RoundCube는 이미 존재합니다", - "bd85bad7c1cedffc46ae70e0db8034f6": "MySQL 서비스가 감지되지 않아서 먼저 설치하십시오!", - "c6a51d5b1a7bd956ca4c4f338c086f83": "NGINX 서비스가 감지되지 않아서 먼저 설치하십시오!", + "bd85bad7c1cedffc46ae70e0db8034f6": "MySQL 서비스가 감지되지 않아서 먼저 설치하세요!", + "c6a51d5b1a7bd956ca4c4f338c086f83": "NGINX 서비스가 감지되지 않아서 먼저 설치하세요!", "04558b9e13998b32d658e8cd8b0d1ad0": "매개 변수 사이트 이름 오류", "90baf7cab644bc240457a2c47e6ebf00": "매개 변수 php_version 오류", "cf84746ee6e7a5bb44a33492dcf06859": "매개 변수 ID 오류", "fcabc387917b8ffea3954ce306154a14": "매개 변수 경로 오류", "bdf7ec8b7b06dbcc5cdd37b7fcf0be78": "이 사이트에 RoundCube가 배포되지 않았습니다", - "162ee492c21d8ca85c113a5ed39cb19a": "성공적으로 추가하십시오", + "162ee492c21d8ca85c113a5ed39cb19a": "성공적으로 추가하세요", "18aa77314905ba8cc4ebbbef5e5bfc61": "매개 변수 emails_to_add 오류", - "16bc256c4be0dc8ac8c57a502d76ed7d": "블랙리스트를 성공적으로 추가하십시오", + "16bc256c4be0dc8ac8c57a502d76ed7d": "블랙리스트를 성공적으로 추가하세요", "8392e379584c66a9f7a4913c7d31fac5": "매개 변수 emails_to_remove 오류", "b28deaa432321b73e5b6708c3cdb29a2": "블랙리스트가 삭제되었습니다", "aea0ac1bc82821423517f7d240f4fc20": "블랙리스트 파일이 없습니다", @@ -2720,13 +2720,13 @@ "040af72cf6c4a1e2b1c442829628d063": "누락 된 매개 변수 : 활성", "456da492cfd986feef0e8b6172ee52b9": "유형이 성공적으로 변경되었습니다", "ee94cfd2755c5d0bc7c532a5550b0632": "누락 된 매개 변수 : 수신자", - "2ab854061aad0aede6cc7164670391df": "{}를 추가하여 구독 거부 목록을 추가하십시오", + "2ab854061aad0aede6cc7164670391df": "{}를 추가하여 구독 거부 목록을 추가하세요", "a721d48e1f148b2cbab44c96c5d5a27c": "{} 추가 실패", "612ba9a3aadccbd5aee092178e59a95a": "성공적으로 제거되었습니다", "0f72c62155338caff34448acccab2065": "기본 유형을 변경할 수 있습니다", "f354e294ef8e10dfa5d5330710ac2244": "ID 매개 변수를 전달해야합니다!", "59ba6a6955b093d3d8ab3c8ad9e07907": "죄송합니다.이 기능은 전문 회원 전용입니다.", - "981b4b10fbb172510dd8bc6c78442abc": "현재 URL에 액세스 할 수 없습니다. 리버스 프록시를 올바르게 설정하십시오!", + "981b4b10fbb172510dd8bc6c78442abc": "현재 URL에 액세스 할 수 없습니다. 리버스 프록시를 올바르게 설정하세요!", "b016f3fad3a16d8ab6f834d028138bb2": "누락 된 매개 변수!길", "4e1b0afecf8cca9bc1c7baefbbaa5020": "누락 된 매개 변수!quota_type", "f17f1430a59b12a71518577a2ac98394": "누락 된 매개 변수!quota_storage", @@ -2736,15 +2736,15 @@ "31883af5f94e56074d46535fb885be81": "작업이 성공했습니다", "cd605148babc76c2acdd97401fde84e4": "필요한 ID 매개 변수가 누락되었습니다", "24e2e9a2bb00384d2d5199605e8429c6": "성공적으로 만듭니다", - "f18f18a50495f5b2cc683fa8b388d7a6": "성공을 편집하십시오", - "362dff77f7403550e886db901404856c": "성공적으로 삭제하십시오", - "5219b0eed304e85ff3b5d223ad1a19ea": "기본 도메인을 지정하십시오", + "f18f18a50495f5b2cc683fa8b388d7a6": "성공을 편집하세요", + "362dff77f7403550e886db901404856c": "성공적으로 삭제하세요", + "5219b0eed304e85ff3b5d223ad1a19ea": "기본 도메인을 지정하세요", "99e790a4dcecd5a50224da0a6bbfe290": "패널을 업데이트 한 후 사용할 수 있습니다", - "21217aade801d79f727da6da4bbc9028": "사용자 이름을 지정하십시오", + "21217aade801d79f727da6da4bbc9028": "사용자 이름을 지정하세요", "c66b529d95d463970172da0cdb289df4": "할당량 상태가 성공적으로 업데이트됩니다", "10d7350372e998438adf642e58055fe2": "할당량 상태 업데이트가 실패했습니다", - "634709ee9a1f6829d28bf76ddf278711": "도메인과 IP를 지정하십시오", - "decc12f91f9703a201987fdeabe572a4": "[{}]가 이미 같은 이름을 가진 사이트가 이미 존재합니다. 만들기 전에 수정하십시오.", + "634709ee9a1f6829d28bf76ddf278711": "도메인과 IP를 지정하세요", + "decc12f91f9703a201987fdeabe572a4": "[{}]가 이미 같은 이름을 가진 사이트가 이미 존재합니다. 만들기 전에 수정하세요.", "de67e3b2c564a899fe3195606036a7f1": "설치 성공", "8d5496d961b4d4e08474b20c1450737a": "사이트를 만들지 못했습니다", "74a7684631b29d814a52e3401576411a": "시간 형식이 잘못되었습니다", @@ -2761,12 +2761,12 @@ "841be447d44ca7e7424592573211f34f": "의심스러운 파일, 수동 검사가 권장됩니다", "512e1fecde26404204e6072b3a12dcda": "위험이 없습니다", "3dfa767ed09b94292e6ed5bd39fce5d0": "위험이 없습니다", - "6f72fe3fe88bd53bf8f690d2b0c5f842": "업로드해야 할 파일을 선택하십시오", + "6f72fe3fe88bd53bf8f690d2b0c5f842": "업로드해야 할 파일을 선택하세요", "d27bc4b1f587e887d48e7fe92d7a5b23": "파일이 존재하지 않습니다", "8d5b6682ddc9e4453c4d971d3044dc7b": "파일은 시스템에 의해 웹 쉘로 감지됩니다!", - "c21a06cf7008cdaa11bcc918d6ea1c0d": "파일을 찾을 수 없습니다. 테스트를 업로드하십시오", + "c21a06cf7008cdaa11bcc918d6ea1c0d": "파일을 찾을 수 없습니다. 테스트를 업로드하세요", "786c8548bf1e0cfec63644e085f73ece": "시스템 오류", - "449061dfe5a4b59740b41d2705ad0bcc": "삭제 해야하는 경로를 작성하십시오", + "449061dfe5a4b59740b41d2705ad0bcc": "삭제 해야하는 경로를 작성하세요", "704ec17e6ea425b9acd1265f1dcd0072": "비어있을 수 없습니다", "43043017cb4d53a3d984d879a42e2ebb": "성공적으로 수입", "3874a2dc1de33534dd53275bf1e54004": "존재하지 않습니다", @@ -2782,25 +2782,25 @@ "6512bd43d9caa6e02c990b0a82652dca": "11", "698d51a19d8a121ce581499d7b701668": "111", "dab4bbd12ffc7517800304f0bdc4fc86": "교체 할 데이터는 비어있을 수 없습니다", - "436b3a5c35b1b4c27cd55cd2fd9e6f95": "Nginx를 성공적으로 다시 추가하여 발효하십시오", + "436b3a5c35b1b4c27cd55cd2fd9e6f95": "Nginx를 성공적으로 다시 추가하여 발효하세요", "102779676feeffd385f7038542c05441": "이미 존재합니다", "965983d46c2695569cdb4e9e12fd6571": "가로 채워야하는 데이터는 비어있을 수 없습니다.", "9416a531e05cf18f1c26b97263e3c96b": "존재하지 않습니다", - "52932c15b4fa68c60b470a4dbcdd9852": "교체 파일이 비어 있습니다. 데이터를 추가하십시오", + "52932c15b4fa68c60b470a4dbcdd9852": "교체 파일이 비어 있습니다. 데이터를 추가하세요", "8fcc9a1b8fb706211e066cd5f7df0a65": "성공적으로 삭제하면 Nginx를 다시 시작하여 적용됩니다", "00203649d952e20d9611cfcd21b53034": "삭제 실패/존재하지 않습니다", "3365f0d08012012075d406cf271d77f6": "필요한 차단 된 콘텐츠는 비어있을 수 없습니다", "2c555efbcf00eec34e159cbb930a49fd": "차단 된 콘텐츠가 이미 존재합니다", "c7f766edcc806204f816c6de56e0e8a1": "차단 된 컨텐츠는 존재하지 않습니다", - "9fbc55a13069e729c3d4fb48d823badb": "IPv6 액세스를 활성화하십시오!", - "95d19257def109989336b6347a8f0fc3": "올바른 IPv6 주소를 입력하십시오", + "9fbc55a13069e729c3d4fb48d823badb": "IPv6 액세스를 활성화하세요!", + "95d19257def109989336b6347a8f0fc3": "올바른 IPv6 주소를 입력하세요", "c0481d94eb7e8c7f46f76fec921373e2": "주소가 존재하지 않습니다!", "f6c7ec89d03c9c2ac46e336abc81b7a3": "목록이 비어 있습니다!", "5be36040b9fa33036a454c12f27b7375": "우분투를 지원하지 마십시오!", "11158f5edfbaa7a72e2e1e701b426a73": "CentOS7 만 일시적으로 지원됩니다", "0959d7ee773960b7193779c9fdadcb0c": "우분투의 스위치를 지원하지 않습니다!", "9033e0e305f247c0c3c80d0c7848c8b3": "!", - "25e5fccc23b6134c8a7c5afa6befd508": "Spider를 성공적으로 업데이트하십시오!", + "25e5fccc23b6134c8a7c5afa6befd508": "Spider를 성공적으로 업데이트하세요!", "76e2205e6fc3d06106b783a710b1fe10": "클라우드 연결 오류!", "17cae6641b0b761574f69f864134bf7e": "클라우드 연결 오류!", "ce5275d6e4a918c8236e31e85270d290": "열려 있는!", @@ -2809,9 +2809,9 @@ "b14aa6510f1cff54c60f576ef0731959": "기간은 20 초 미만일 수 없습니다", "d8f4a1993546cc4b850cde3599e27aec": "찾을 수 없습니다", "fd16ce6210fa8913fa6230549b264979": "잘못된 매개 변수!", - "b4bc1177cfc8a0d0758e49b6a16f96d5": "손상된 구성 파일, 방화벽을 수정하십시오!", + "b4bc1177cfc8a0d0758e49b6a16f96d5": "손상된 구성 파일, 방화벽을 수정하세요!", "ef78de4bb739700e26b532d670638846": "프로필을 찾을 수 없습니다!", - "c02aa591c33647ad91bb649c1663bcd1": "이 기능을 사용하기 전에 Aapanel 웹 사이트 속도 플러그인을 제거하십시오!", + "c02aa591c33647ad91bb649c1663bcd1": "이 기능을 사용하기 전에 Aapanel 웹 사이트 속도 플러그인을 제거하세요!", "07a7794bae1a87cab16d773ce4c9597d": "글로벌 설정에서는 외국 접근 금지가 가능하지 않습니다!", "bbaae08a3d7f937d5524fdfd83b37894": "설정이 성공적입니다!즉시 적용하려면 Nginx를 다시 시작해야합니다", "3549141361cdf1fcb62983aa5965e7be": "CC_INCREASE_TYPE 매개 변수가 필요합니다", @@ -2832,48 +2832,48 @@ "d7bdef3923c512c13a60dc05970ca1cf": "시작 IP는 최종 IP보다 클 수 없습니다.", "b1f0a374986c41eaeafaa08485b42b59": "지정된 IP 세그먼트가 이미 존재합니다!", "aef0de8ec2a48f9f94f54d41a008f8f9": "IP는 이미 다음과 같습니다.", - "74e16058920cfff989e455cb7edca425": "성공적으로 수정하십시오!", + "74e16058920cfff989e455cb7edca425": "성공적으로 수정하세요!", "4e140d99b9d960dc0faf5d43d200eab0": "잘못된 데이터 형식", "4295a035192a0fcd88c89d16f69972ef": "성공적으로 수입!", "acb8450d83f87a19ac444ce07dbeae96": "데이터 형식이 잘못되었습니다", "0b8faaf8776c5eb0c07dcebc13dc55bb": "웹 사이트 루트 경로를 추가 할 수 없습니다 [", "2128a6acdfae9f60c3a292ae9afa33d2": "추가 한 URL이 이미 존재합니다", - "4229662446c462c1d5212338127e8036": "URL을 입력하십시오!", - "3862c72b9bbd0accd915f171d10b5df0": "매개 변수를 입력하십시오!", + "4229662446c462c1d5212338127e8036": "URL을 입력하세요!", + "3862c72b9bbd0accd915f171d10b5df0": "매개 변수를 입력하세요!", "e4fd18cafa65c2071efa92e329fb1aed": "이미 존재합니다!", "96dd1aef326fe2e13e360245d729f9a5": "비 엔티티!", - "f10ae1b19b9c946f277946863a7ef9de": "설정하려는 사이트를 입력하십시오!", - "340c2b3dcf52aad038d610aea126fdf8": "유형을 입력하십시오!", + "f10ae1b19b9c946f277946863a7ef9de": "설정하려는 사이트를 입력하세요!", + "340c2b3dcf52aad038d610aea126fdf8": "유형을 입력하세요!", "d7fda198ce652fc42e3b62bc39a87dcb": "지역에 들어가십시오!", "fc28444072899e60e6b2cb526651db31": "입력 유형이 잘못되었습니다!", "53267148f9e661f7ab274b68ffe21bd9": "오류 유형 요청이 입력되었습니다!", "0956e47e87d4d56af7f3a5bc36ec80de": "입력 된 사이트가 잘못되었습니다!", - "3964f2ebc20aec0215b29f34e4e9cc8e": "입력하십시오 : 아이디!", - "f30e2178ef2d7f61c9b4dbf1c73f6876": "입력하십시오 : 열기!", - "cfec0e080bc7d4ebaae29eaec8dcba24": "입력하십시오 : 상태!", + "3964f2ebc20aec0215b29f34e4e9cc8e": "입력하세요 : 아이디!", + "f30e2178ef2d7f61c9b4dbf1c73f6876": "입력하세요 : 열기!", + "cfec0e080bc7d4ebaae29eaec8dcba24": "입력하세요 : 상태!", "0e69f6afc958a9a1e75f1eb93908e9a9": "입력 한 상태 코드가 잘못되었습니다!", "0fa9cb1eb677f9243d0737a37a69f89f": "수정 성공!", - "40ae230e6831501721508b806e3e8f16": "사이트 ID를 입력하십시오!", + "40ae230e6831501721508b806e3e8f16": "사이트 ID를 입력하세요!", "ef589b2e5faa2bd4c28c0017ccd737f6": "데이터가 없습니다!", - "89c6a8aafca7b01d7645766802707a37": "설정하려는 사이트를 입력하십시오!", - "5ccddb202b5b5e7f96aa3181bda9beb3": "유형을 입력하십시오!", - "2913b96effaf71ad6c7487658e4056ce": "지역 이름을 입력하십시오!", + "89c6a8aafca7b01d7645766802707a37": "설정하려는 사이트를 입력하세요!", + "5ccddb202b5b5e7f96aa3181bda9beb3": "유형을 입력하세요!", + "2913b96effaf71ad6c7487658e4056ce": "지역 이름을 입력하세요!", "9c4bd2c334c14c48159a045e21a279c6": "입력 된 유형이 잘못되었습니다!", "66d6ebf480448bc6846362868a584866": "不允许设置【中国大陆】和【中国大陆以外地区】一同开启地区限制!", - "60e59018ad2d3e94f166beed6445cf7f": "신분증을 입력하십시오!", - "86484538f21c95f5d8b2e1df43135470": "오픈을 입력하십시오!", - "230f490b7f059873ba86a8ad13a8b007": "상태를 입력하십시오!", + "60e59018ad2d3e94f166beed6445cf7f": "신분증을 입력하세요!", + "86484538f21c95f5d8b2e1df43135470": "오픈을 입력하세요!", + "230f490b7f059873ba86a8ad13a8b007": "상태를 입력하세요!", "ee89c7f6d23c70ad8f7f0072e3e0cb9e": "이 URL에 대한 매개 변수가 발견되지 않았습니다!", "d1a198fffa0319462af0ceca6bc39dca": "[/] URL이있는 URL을 추가하면 화이트리스트가 허용되지 않습니다.", "0711b255059aaab715cfb46f6c503af7": "URL [ /]는 화이트리스트에 추가 할 수 없습니다.", - "e233e412faa6c35ecb389c502a7b6537": "성공적으로 설정하십시오", + "e233e412faa6c35ecb389c502a7b6537": "성공적으로 설정하세요", "e78511f517dc9b86fd743725e8eae766": "블록 시간은 86400을 초과 할 수 없습니다!", "14fc8ce684c7f8c9cbd9357d46db244c": "추가 된 요청 헤더가 이미 존재합니다!", "0d2d762c7ed9b83476612b6c08dcb18e": "지정된 요청 헤더가 존재하지 않습니다!", "9c3c6a1bed873cbb175e46b5cefc99e8": "지정된 규칙이 존재하지 않습니다!", "0d1596574ac7aa5d5ecb88d72c42f986": "지정된 URI가 이미 존재합니다!", "e66a7a8d9d1f830988f1f4a5f37ece0f": "지정된 규칙이 이미 존재합니다!", - "8528abe0d097e78242d535d5fe8d0753": "IP 주소를 입력하십시오", + "8528abe0d097e78242d535d5fe8d0753": "IP 주소를 입력하세요", "2aae8271977f5ad9ae44838f2b68bf91": "잘못된 거미 유형!", "d9a32e26c6c673f85332bff9907e73bc": "추가 실패!", "50ff5b4f63ca1d6f72ac0884ce10a274": "현재 IP가 존재하지 않습니다!", @@ -2881,7 +2881,7 @@ "de12faa543f0eb0c72ebc64849053f14": "지정된 규칙이 이미 존재합니다. 반복해서 추가하지 마십시오.", "5d1dc231a71676f0d96c0ea4308153b6": "데이터를 얻지 못했습니다", "64b31dda1dfab5250169f4cca5684824": "Nginx 서버 만 지원됩니다", - "8147e6e4e48008b09597cc2f7b70cd8d": "성공적으로 동기화하십시오!", + "8147e6e4e48008b09597cc2f7b70cd8d": "성공적으로 동기화하세요!", "432deaf800ca653afe458c204cbfbcad": "클라우드에 연결하지 못했습니다", "7f3e6e3b62e446f04ab407e6aba2bb22": "업데이트 완료!", "1f5d3751c5fd0f0d7d110164be8a597a": "편집 실패", @@ -2893,24 +2893,24 @@ "bb145fd3bdcecf6ec853d1a887a58d6f": "SAFE_LOGS 매개 변수가 없습니다", "c8eaeeb8efa13219ac368b6e39204592": "site_logs 매개 변수가 없습니다", "883efdac3eb44df42fc05b2e8e3061f9": "site_all 매개 변수가 없습니다", - "af2d7b1ee22be2dc3928b7c57580aa23": "올바른 웹 사이트 목록을 입력하십시오", + "af2d7b1ee22be2dc3928b7c57580aa23": "올바른 웹 사이트 목록을 입력하세요", "9f351e9815c428a76aecab3c2c4a4b75": "정리", "50e457f6032e9d93fe4b58aec073da31": "잘못된 상태 값", "631e7fc49fb8bdf2a3f13bdaf354915e": "작업은 지원되지 않습니다", - "42e2a4ce9fbfd7ecf5a60a66cab89887": "나쁜 웹 사이트 목록을 구문 분석하십시오", + "42e2a4ce9fbfd7ecf5a60a66cab89887": "나쁜 웹 사이트 목록을 구문 분석하세요", "8ce75a209ed6cd3ed34d38aa7ea167c3": "액세스가 실패했습니다!", - "a127bc2882f46ea763349be63b7a43ec": "올바른 백업 데이터를 입력하십시오", + "a127bc2882f46ea763349be63b7a43ec": "올바른 백업 데이터를 입력하세요", "d6b3a322a8c5e66d8e4e05b81456adff": "200 상태 코드 가로 채기를 설정할 수 없습니다!", "a8be909d5c4c96eda1b9b53089187b9e": "상태 코드가 허용되지 않습니다!", "f471d5490f674bf6c0999d9291a911a5": "반환 상태 코드가 허용되지 않습니다!", "8b8e26f29b987d60a8decbd2e73be7a7": "200 리턴 상태 코드 가로 채기를 설정할 수 없습니다!", "337f8ed984e970f2873fc42622d99521": "정적 코드는 존재하지 않습니다", - "6fc66d367ac0c5d115479b7f852e98f4": "사이트 이름을 전달하십시오", + "6fc66d367ac0c5d115479b7f852e98f4": "사이트 이름을 전달하세요", "c8f9ac5c9288a3f53cccd5555ad1ee07": "위도 및 경도 오류", "acc31522551404d50744536a2c1986a9": "데이터베이스 파일이 없습니다", "eaafa722b4e623b2ac09f4ed2d9cee5a": "유형 매개 변수를 전달해야합니다", "2ac8aa908980e30a259bb8526527909b": "검색 매개 변수는 전달되어야합니다 1", - "62de36f39113a05a97a245a6d3126ca5": "질문 할 웹 사이트 이름을 선택하십시오.", + "62de36f39113a05a97a245a6d3126ca5": "질문 할 웹 사이트 이름을 선택하세요.", "7dbda89c64cdbf3c9afc9bceb5216308": "검색 매개 변수는 통과해야합니다", "84611bf808a166c5c384e72c9290573e": "이 ID는 존재하지 않습니다", "0960b1153519b9ab3f2e5fc5e39da8c0": "[uri] 매개 변수를 전달해야합니다", @@ -2921,11 +2921,11 @@ "e200e571a58c37376c8498c2dc506c95": "[param] 유형이 잘못되었고 JSON 형식이 필요합니다", "96ed9027cae5703401727a3d07764133": "현재 URI는 존재하지 않습니다", "466767592170f74d16bcac3034109b33": "경로 인수는 통과되어야합니다", - "c2d2481eafb29f7e1525c6c63441359e": "웹 사이트 이름을 전달하십시오", - "4950f82b4231ebbfa780bcf4eec4c545": "올바른 IP 주소를 입력하십시오!", + "c2d2481eafb29f7e1525c6c63441359e": "웹 사이트 이름을 전달하세요", + "4950f82b4231ebbfa780bcf4eec4c545": "올바른 IP 주소를 입력하세요!", "abd5af540ed5a858d02b03846d94c1f4": "불가피한!", "5c1392db72dc56bdf4ecfe41eb39622c": "비우기 완료!", - "5f401d1d15e2b6346405fcd81caee5ed": "사이트를 선택하십시오", + "5f401d1d15e2b6346405fcd81caee5ed": "사이트를 선택하세요", "df0af44dbb9037dfb3e4a23e2d22d184": "시간에 도달하지 못했습니다", "74dc340e56666816aba1f2de4d8bda47": "업데이트가 실패했습니다", "6e57d6c47d23024e41f4a1aac73a3ea9": "그것", @@ -2937,10 +2937,10 @@ "d1adb09331d9afa950900abca1056553": "IP 범위는 비어있을 수 없습니다", "dc5b7cdade7167836e61a128d7e4342c": "IP 세그먼트 {}는 잘못된 형식이며 CIDR 표현식이어야합니다.", "193cb0af0143dc48f159b0fe55d2fc75": "소스 URL은 비어있을 수 없습니다", - "0708cc379456476aaba988b381c61782": "일치하는 콘텐츠를 전달하십시오", - "973aeb9471388c7321b04f3d921b98da": "설정 해야하는 URL 컨텐츠를 전달하십시오", - "864ffd29519010eafc7c5a5b958fb6a9": "설정하려는 사용자 에이전트를 입력하십시오", - "9c5f65f543fc633b9f8d20fed389a3ee": "설정하려는 요청 헤더의 이름을 입력하십시오.", + "0708cc379456476aaba988b381c61782": "일치하는 콘텐츠를 전달하세요", + "973aeb9471388c7321b04f3d921b98da": "설정 해야하는 URL 컨텐츠를 전달하세요", + "864ffd29519010eafc7c5a5b958fb6a9": "설정하려는 사용자 에이전트를 입력하세요", + "9c5f65f543fc633b9f8d20fed389a3ee": "설정하려는 요청 헤더의 이름을 입력하세요.", "1822f04ebba43b9d3576660d94e4818d": "검증이 통과됩니다", "64f3408287530191cb9198dd02030e49": "관련 웹 사이트는 비어있을 수 없습니다", "a29f521a7a2794dded1316a1b00a8767": "우선 순위는 비어있을 수 없습니다", @@ -2994,7 +2994,7 @@ "36cf3d060b27c024b0fd85b85c533148": "매개 변수가 올바르지 않으면 Picturenew 매개 변수의 텍스트 매개 변수의 길이는 100을 초과 할 수 없습니다.", "799b18f9ca831f3048d74df2feb31206": "워터 마크 문자에는 특수 문자 <> \\가 포함될 수 없습니다.", "6e0dbbe7466271740e6609ed570d355b": "워터 마크 캐릭터는 현재 중국어를 포함 할 수 없습니다", - "198024662dba359f2392e60e88c40aa2": "이 기능을 사용하기 전에 웹 사이트 속도 플러그인을 제거하십시오!", + "198024662dba359f2392e60e88c40aa2": "이 기능을 사용하기 전에 웹 사이트 속도 플러그인을 제거하세요!", "855804452a86a87b7698c481b8fa262b": "의사 정적에는 [! -e $ request_filename] 지침이 포함되어 있으며,이 기능을 사용하기 전에 제거해야합니다!", "788b7bc259014fc9c1991f11c3ac0917": "IP 주소는 유효하지 않습니다", "b53e7fec7f9097f923ac52bcb0b4c724": "시간은 1보다 작을 수 없습니다", @@ -3046,7 +3046,7 @@ "0f5b3e572f9dd832eebf01fdc0d7ce8c": "매개 변수가 올바르지 않으면 경고 방법을 보내주십시오", "3979187f0bae65dc1fca4f1967742397": "구성 파일을 읽지 못했습니다", "c9bbcef0c80ca1a2859dd61d0210a117": "매개 변수 [send_type]가 잘못되었습니다", - "a79ff4350874c27408a1858a88058344": "인스턴스화 메시지 채널이 실패하면 메시지 채널이 올바르게 설정되어 있는지 확인하십시오.", + "a79ff4350874c27408a1858a88058344": "인스턴스화 메시지 채널이 실패하면 메시지 채널이 올바르게 설정되어 있는지 확인하세요.", "50f223163c6f8e9f6b46d66165252cab": "셧다운 성공!", "02eef33534a6f8b3c95fc65e4f98bea9": "불완전한 정보", "2f45c6e0ccf998c7d31b3764e7da3751": "노트 이름은 15 자 미만일 수 없습니다", @@ -3055,12 +3055,12 @@ "b136ab8957d5ede7e3747fcc927a49aa": "매개 변수 형식 오류", "4ccc991965b1b5bbe3efd6b65a1cd6fb": "신체 유형은 JSON, Form Data 또는 NULL이어야합니다", "b0b017688b107601f2b3439381c4c61b": "전송 메소드가 올바르지 않습니다", - "4f4979589df1b84ac44fc64a92e2b3f3": "SSL 옵션이 잘못되었는지 확인하십시오", + "4f4979589df1b84ac44fc64a92e2b3f3": "SSL 옵션이 잘못되었는지 확인하세요", "85284ecbde15ff997e89e6e8f07e399b": "WeChat 정보는 올바르게 구성되지 않습니다", "3fb32283f52bea8068006817c5b9b95b": "결합은 성공적입니다", "8acd58125d3f7cc181a71926ef5c8a4b": "클라우드에 링크하지 못했습니다", "886051a73fe04f873d814dc9823b4064": "DingTalk 정보가 올바르게 구성되지 않았습니다", - "2d1b0e55888d196484a0bfd0f85ff71c": "Dingtalk 구성이 잘못되었습니다. Dingtalk 로봇을 재구성하십시오.", + "2d1b0e55888d196484a0bfd0f85ff71c": "Dingtalk 구성이 잘못되었습니다. Dingtalk 로봇을 재구성하세요.", "eee590fc0d0f3382fe436b60b02e37f0": "사서함 정보는 올바르게 구성되지 않습니다", "e4e7eb56340203583dd940475fc6e924": "수신 사서함이 구성되지 않았습니다", "c6beb4efa41b5adbf89191be9d139c70": "메시지를 보내지 못했고, 수신자를 보내지 못했습니다 : {}", @@ -3087,38 +3087,38 @@ "5d85a89cf9ff8fb99547cb1648205489": "파일 경로는 중국어가 될 수 없습니다!", "952345fe8555c6ba578f251a317f85bc": "구성 매개 변수는 비어있을 수 없습니다", "08dd0ea6d64131b95ad64ca11233bd0a": "ENV 매개 변수는 비어있을 수 없습니다", - "8dea3a35e564837dd758e1f814e24f92": "저장 실패, compose.yaml 파일 형식이 올바른지 확인하십시오 : 【{}】", - "2a3a9ebecbcd261e0550cb4469910ed1": "저장이 실패했습니다.Docker-Compose 버전이 너무 낮습니다.최신 버전으로 업그레이드하십시오!", + "8dea3a35e564837dd758e1f814e24f92": "저장 실패, compose.yaml 파일 형식이 올바른지 확인하세요 : 【{}】", + "2a3a9ebecbcd261e0550cb4469910ed1": "저장이 실패했습니다.Docker-Compose 버전이 너무 낮습니다.최신 버전으로 업그레이드하세요!", "e32a4e5887229cc3ce7412591de16cff": "저장 실패", "4e06eef94d131a0203e8f1f87db4fee5": "project_name 매개 변수는 비어있을 수 없습니다", - "c80ca81b19893dafd2629ce74407d5cf": "생성 실패, compose.yaml 파일 형식이 정확한지 확인하십시오 : \\ r \\ n {}", - "66855212f1fe552bf49c4388155b3082": "생성이 실패했고 Docker-Compose 버전이 너무 낮아서 최신 버전으로 업그레이드하십시오!", + "c80ca81b19893dafd2629ce74407d5cf": "생성 실패, compose.yaml 파일 형식이 정확한지 확인하세요 : \\ r \\ n {}", + "66855212f1fe552bf49c4388155b3082": "생성이 실패했고 Docker-Compose 버전이 너무 낮아서 최신 버전으로 업그레이드하세요!", "5a135e409fdee335e0f4397a4293835a": "template_name 매개 변수는 비어있을 수 없습니다", - "1cc869c0afb0c2f94e0937d9eb364e34": "템플릿 이름이 이미 존재합니다. 템플릿을 삭제하고 다시 추가하십시오!", - "cd21239456a2d52fb2317cc699bbd93c": "프로젝트 이름이 이미 존재합니다. 추가하기 전에 삭제하십시오!", + "1cc869c0afb0c2f94e0937d9eb364e34": "템플릿 이름이 이미 존재합니다. 템플릿을 삭제하고 다시 추가하세요!", + "cd21239456a2d52fb2317cc699bbd93c": "프로젝트 이름이 이미 존재합니다. 추가하기 전에 삭제하세요!", "5076d42e5242f2b79244d73f13da367e": "컨테이너 오케스트레이션 삭제", "02867c418e07f941a1c5d3f6bc926f86": "project_list 매개 변수는 비어있을 수 없습니다", "a88321660a22f931bc1f0861baa5dc1e": "project_list 매개 변수 형식 오류 : {}", - "468c559ee2d3d5e39aeef93e62b006d1": "삭제 실패, Docker-Compose 버전이 너무 낮아서 최신 버전으로 업그레이드하십시오!", + "468c559ee2d3d5e39aeef93e62b006d1": "삭제 실패, Docker-Compose 버전이 너무 낮아서 최신 버전으로 업그레이드하세요!", "3590612b29e5aa49645f02d01c9e520e": "Container_id 매개 변수는 비어있을 수 없습니다", "d7fc188f711a4c3eb5b85949dfd9a696": "컨테이너가 존재하지 않습니다", - "77ae5114c51a32c268b0bf7a03c0c528": "이름 매개 변수를 전달하십시오!", - "bd9b13cc06f202661c7bb89a02322532": "경로 매개 변수를 전달하십시오!", - "719b089ab1a7d4ff5c161f3f5c5b7f24": "설치 구성을 얻지 못하면 제거하고 다시 설치하십시오!", - "c7f98cd83b58fad3ab719bfa337bdb6b": "매개 변수 오류는 App_Name 매개 변수를 통과하십시오", - "043e4ffcd792692d7b7acb5a2504c329": "Docker 서비스가 시작되지 않았습니다. 먼저 Docker 서비스를 시작하십시오!", - "9f1dcd0020905875a6a48744ffe17766": "Docker Service가 성공적으로 설치되지 않았습니다. Docker 서비스를 먼저 설치하십시오!", + "77ae5114c51a32c268b0bf7a03c0c528": "이름 매개 변수를 전달하세요!", + "bd9b13cc06f202661c7bb89a02322532": "경로 매개 변수를 전달하세요!", + "719b089ab1a7d4ff5c161f3f5c5b7f24": "설치 구성을 얻지 못하면 제거하고 다시 설치하세요!", + "c7f98cd83b58fad3ab719bfa337bdb6b": "매개 변수 오류는 App_Name 매개 변수를 통과하세요", + "043e4ffcd792692d7b7acb5a2504c329": "Docker 서비스가 시작되지 않았습니다. 먼저 Docker 서비스를 시작하세요!", + "9f1dcd0020905875a6a48744ffe17766": "Docker Service가 성공적으로 설치되지 않았습니다. Docker 서비스를 먼저 설치하세요!", "bfec153394be0516b0d79d4653c9e19d": "FRPS 응용 프로그램이 이미 존재합니다. 다시 설치하지 마십시오!", "fce729be4320e9afbdad888641d08f8d": "FRPC 응용 프로그램이 이미 존재합니다. 다시 설치하지 마십시오!", - "f6f8ff9f4c8990d7e24ac682a50c40a4": "같은 서비스 이름이 이미 존재합니다. {}, 다른 이름을 변경하십시오", + "f6f8ff9f4c8990d7e24ac682a50c40a4": "같은 서비스 이름이 이미 존재합니다. {}, 다른 이름을 변경하세요", "66fd0bc16d0f3c5c9e61779749a93c56": "도메인 이름 [{}] 형식이 잘못되었습니다", - "c68494100dc74cced33c845f35e5aaac": "초기화 {} 실패.docker-compose.yml 파일이 존재하지 않는지 감지되었습니다.제거하고 다시 설치하고 다시 시도하십시오.", + "c68494100dc74cced33c845f35e5aaac": "초기화 {} 실패.docker-compose.yml 파일이 존재하지 않는지 감지되었습니다.제거하고 다시 설치하고 다시 시도하세요.", "76a5e52d7834e4cdf7984adc785f720e": "응용 프로그램은 성공적으로 생성되었지만 리버스 프록시 생성에 실패했습니다.오류 세부 사항 : {}", "e59b647380ea44f97645f979773c683a": "응용 프로그램이 성공적으로 생성되어 응용 프로그램이 초기화되기를 기다리고 있으며 1-5 분이 걸릴 수 있습니다 ...", - "c71b369171a386e4df59acf49f5203b0": "매개 변수 오류, 통과하십시오 : {}", - "5e60e6550487262a79210c48736c2cba": "포트 [{}]는 이미 [{}]에서 사용되었으며 다른 포트로 변경하십시오.", - "dc60f8a111d142dbdc1605dc047e23e6": "연결해야 할 데이터베이스를 선택하십시오!", - "667d37fe4593e52760bc51ada7287988": "연결하려는 캐시를 선택하십시오!", + "c71b369171a386e4df59acf49f5203b0": "매개 변수 오류, 통과하세요 : {}", + "5e60e6550487262a79210c48736c2cba": "포트 [{}]는 이미 [{}]에서 사용되었으며 다른 포트로 변경하세요.", + "dc60f8a111d142dbdc1605dc047e23e6": "연결해야 할 데이터베이스를 선택하세요!", + "667d37fe4593e52760bc51ada7287988": "연결하려는 캐시를 선택하세요!", "1b6d9f6dc5480584f937681a5d9f0a80": "캐시 정보를 찾을 수 없습니다", "f013f8c1d30136733e3d476dbe3a238e": "업데이트 된 구성이 성공적입니다", "3d928c01114361a57fb24c42d9a1ee2d": "구성 업데이트 실패 : {}", @@ -3133,49 +3133,49 @@ "fc0d20951439bcc2d1101019e09556ff": "{} 프로파일이 감지되지 않음 : {}", "3bceda9d61ef4cfc8559796178503164": "{} 구성이 성공적으로 업데이트되었습니다", "b1d0019ab8cbb83b1b99016c4927c1fd": "Alist 구성이 업데이트되었습니다", - "7194829138a21af26d26fb0d57426fc8": "연결하려는 데이터베이스를 선택하십시오!", + "7194829138a21af26d26fb0d57426fc8": "연결하려는 데이터베이스를 선택하세요!", "0a17156f2603044863d54b67ac1f7a07": "알 수없는 데이터베이스 유형 : {}", "62a2454d1d40411885721e465168a016": "NOCODB 구성이 업데이트되었습니다", "1c757f474b2cf26c14c591709c6963a6": "HomeAssistant 구성을 성공적으로 업데이트했습니다", "5ca65c2eed5a6762590ba133f66a8672": "OpenVPN 구성을 성공적으로 업데이트했습니다", - "987a030ec5eb506b45fd17b8b4eb1329": "Service_name 매개 변수를 전달하십시오", - "05ea75c6d686df18830714369dc078ed": "APP_NAME 매개 변수를 전달하십시오", + "987a030ec5eb506b45fd17b8b4eb1329": "Service_name 매개 변수를 전달하세요", + "05ea75c6d686df18830714369dc078ed": "APP_NAME 매개 변수를 전달하세요", "975ecde111f2dfe514b71b4d4941ba1c": "성공적으로 재건되었습니다!", - "9b70785b1f6c44d42a1fa85dbb7000b2": "ID 매개 변수를 전달하십시오", + "9b70785b1f6c44d42a1fa85dbb7000b2": "ID 매개 변수를 전달하세요", "2321c03a1d4fc4cb5b9b87275a0d4712": "지정된 앱은 찾을 수 없었습니다!", "63428213090160e31085eadae3508244": "아직 설치된 앱이 없습니다!", - "43dc377c8c1929c0c2bc959d94337657": "ID 매개 변수를 전달하십시오!", - "d4188b564c1af018074056fffde42fba": "m_version 매개 변수를 전달하십시오!", - "2a65ff2dedaa3b18bf4d4678b99ff77b": "s_version 매개 변수를 전달하십시오!", + "43dc377c8c1929c0c2bc959d94337657": "ID 매개 변수를 전달하세요!", + "d4188b564c1af018074056fffde42fba": "m_version 매개 변수를 전달하세요!", + "2a65ff2dedaa3b18bf4d4678b99ff77b": "s_version 매개 변수를 전달하세요!", "e7df495f8488ec05ebf913bceccbc8d4": "업데이트 할 주요 버전과 동일한 버전 번호 만 선택할 수 있습니다!", "fc15d16befa9eb8ccfb25da964a284de": "현재 응용 프로그램은 이미 최신 버전이며 업데이트 할 필요가 없습니다!", "cd260af0ae4915ee07569fc877f77495": "업데이트 할 원본 버전보다 높은 버전 번호 만 선택할 수 있습니다!", "7ac82bcde612b1a109d988d4b3dbf626": "업데이트가 성공적이었습니다!", "01b722bbe474a50d8291bbe2e71804c6": "지정된 앱은 찾을 수 없었습니다 !!", - "2140e826934629d9a43ba2bf4f2b1774": "app 매개 변수를 전달하십시오!", - "2ab5fb77429e37f42b87e205d6e51728": "Service_name 매개 변수를 전달하십시오!", - "9d6521661f6a152c21bf6d4305d5c9b3": "App_name 매개 변수를 전달하십시오!", + "2140e826934629d9a43ba2bf4f2b1774": "app 매개 변수를 전달하세요!", + "2ab5fb77429e37f42b87e205d6e51728": "Service_name 매개 변수를 전달하세요!", + "9d6521661f6a152c21bf6d4305d5c9b3": "App_name 매개 변수를 전달하세요!", "e020f13e1a68b8030d7038cea78b3aaa": "백업 성공!", "c4dcfb467d82071a7a4cbbe0b5036f9e": "아직 백업 데이터가 없습니다!", - "76b5c77ee72a9ffa0f4b3a8e0101ad41": "file_name 매개 변수를 전달하십시오!", + "76b5c77ee72a9ffa0f4b3a8e0101ad41": "file_name 매개 변수를 전달하세요!", "1281e3ed765ec369a06400340f4beb78": "지정된 백업은 찾을 수 없었습니다!", - "012967525dac4f0c5395c210223ca2ef": "file_name 매개 변수를 전달하십시오!", + "012967525dac4f0c5395c210223ca2ef": "file_name 매개 변수를 전달하세요!", "8cc2feae92bd228672051763130e6d49": "백업 파일이 존재하지 않습니다!", "3c06b7d1ee52e760b361d12cd00f55b5": "백업 파일은 비정상적입니다!", "010c30483dbe836d24382a368f482770": "회복 성공!", "543fa46832267ce6cb3b47594d8d8f82": "앱이 존재하지 않습니다!", - "c52891f1485d1070a2e063358ae71fa9": "f_path 매개 변수를 전달하십시오!", - "df107ded5612d825c3db3bd46a9845f0": "f_name 매개 변수를 전달하십시오!", - "ef41e47b4ea1bd4143562bd0989b9b20": "f_size 매개 변수를 전달하십시오!", - "b9290da45e148202dccf0058dfc3b27a": "Blob 매개 변수를 전달하십시오!", - "a27dfcdb7619659552bfdfc79930b7d9": "이름이 같은 백업 파일이 있습니다. 다시 업로드 해야하는 경우 동일한 이름으로 파일을 삭제하십시오!", + "c52891f1485d1070a2e063358ae71fa9": "f_path 매개 변수를 전달하세요!", + "df107ded5612d825c3db3bd46a9845f0": "f_name 매개 변수를 전달하세요!", + "ef41e47b4ea1bd4143562bd0989b9b20": "f_size 매개 변수를 전달하세요!", + "b9290da45e148202dccf0058dfc3b27a": "Blob 매개 변수를 전달하세요!", + "a27dfcdb7619659552bfdfc79930b7d9": "이름이 같은 백업 파일이 있습니다. 다시 업로드 해야하는 경우 동일한 이름으로 파일을 삭제하세요!", "37a9a30931e079caf79fb61eed10547f": "백업 파일이 성공적으로 업로드되었습니다!", - "490068785260b543087967659d79b496": "상태 매개 변수를 전달하십시오!", - "1204853b15f4234a8cb88df5a46b5a42": "시작/중지/재시작/재 구축 매개 변수를 통과하십시오!", + "490068785260b543087967659d79b496": "상태 매개 변수를 전달하세요!", + "1204853b15f4234a8cb88df5a46b5a42": "시작/중지/재시작/재 구축 매개 변수를 통과하세요!", "062f4a8230dd8af4311344fcdbf6f1ea": "설치되지 않은 것은 성공적이었습니다!", - "7b016fb85c09d39e89eb1875e590a6ac": "응용 프로그램 범주를 얻지 못하면 오른쪽 상단에서 [응용 프로그램 목록 업데이트]를 클릭하십시오.", - "20552a0ed8eef740c631cc049fd940b9": "응용 프로그램 유형 오류, 전달하십시오 : {}!", - "c0963001ffeaec423d1be82d464d6a1a": "ID/Service_name 매개 변수를 전달하십시오!", + "7b016fb85c09d39e89eb1875e590a6ac": "응용 프로그램 범주를 얻지 못하면 오른쪽 상단에서 [응용 프로그램 목록 업데이트]를 클릭하세요.", + "20552a0ed8eef740c631cc049fd940b9": "응용 프로그램 유형 오류, 전달하세요 : {}!", + "c0963001ffeaec423d1be82d464d6a1a": "ID/Service_name 매개 변수를 전달하세요!", "4de8e45b499205551f4a09fd074e5246": "매개변수가 누락되었습니다.ID", "02e85c0a0fa01fabdb5426af13e87853": "매개변수가 누락되었습니다.앱 이름", "d910ee67a0875a17b6e663f9e19369a4": "이 앱 링크는 지원되지 않습니다!", @@ -3185,31 +3185,31 @@ "a04daa98db618d6c2a19aeed5af39448": "지정된 앱에 대한 docker-compose.yml 파일을 찾을 수 없습니다!", "75d0c803cc4694e08d99d958ef762fcc": "도메인 이름은 비어있을 수 없습니다!", "676c8a7788ad0ddcb68d53fc7d960679": "Baota Net Network를 생성하지 못했습니다.err : {}", - "23d07f1e537a8809b268a60a6881f44c": "포트 범위 오류, 0-65535 사이의 포트를 입력하십시오!", - "f26d903f2f99c2bb4a214a2dd863e8f9": "{} 포트는 [{}]에 의해 점유되었으며 포트를 변경하십시오!", + "23d07f1e537a8809b268a60a6881f44c": "포트 범위 오류, 0-65535 사이의 포트를 입력하세요!", + "f26d903f2f99c2bb4a214a2dd863e8f9": "{} 포트는 [{}]에 의해 점유되었으며 포트를 변경하세요!", "86c1887e12c52e7da3d3c413fe6e20d1": "다음과 같은 이유로 도메인 이름 액세스가 추가되지 않았습니다. {}", - "b4bf995bdf5a4506e8286bbd9b24fc2b": "도메인 매개 변수를 전달하십시오!", - "6473522415a76cf1e712b23980020814": "disable_domain 매개 변수를 전달하십시오!", - "4522d1a945678e134f39e5909db6ac81": "App_name 매개 변수를 전달하십시오!", + "b4bf995bdf5a4506e8286bbd9b24fc2b": "도메인 매개 변수를 전달하세요!", + "6473522415a76cf1e712b23980020814": "disable_domain 매개 변수를 전달하세요!", + "4522d1a945678e134f39e5909db6ac81": "App_name 매개 변수를 전달하세요!", "6da74914983889333884da51c3aa400a": "전송 app_path path!", - "8267489f1a242a5034b5ffd66fd504a0": "Memory_Limit 매개 변수를 전달하십시오!", - "658658f81426b1d37bae43373d44498b": "s_version 매개 변수를 전달하십시오!", - "6a40ca48521720e9a084fd682c55efcb": "Service_name 매개 변수를 전달하십시오!", - "e1bb243ae3776918bb07dbfdfd831a0b": "allow_access 매개 변수를 전달하십시오!", - "98efbca9758919c9938e5ae4002ac085": "도메인 이름은 비어 있지 않거나 도메인 이름을 설정하지 않도록 상자를 확인하십시오!", + "8267489f1a242a5034b5ffd66fd504a0": "Memory_Limit 매개 변수를 전달하세요!", + "658658f81426b1d37bae43373d44498b": "s_version 매개 변수를 전달하세요!", + "6a40ca48521720e9a084fd682c55efcb": "Service_name 매개 변수를 전달하세요!", + "e1bb243ae3776918bb07dbfdfd831a0b": "allow_access 매개 변수를 전달하세요!", + "98efbca9758919c9938e5ae4002ac085": "도메인 이름은 비어 있지 않거나 도메인 이름을 설정하지 않도록 상자를 확인하세요!", "82ee36ab230ba75855c15b9be4ac8a4e": "실패 중지 : {}!", "845d40e701d5c584ae4f059602b3f57d": "시작 실패 : {}!", "d2c66f1c264e9a389a34f60d3a921723": "시작에 성공했습니다!", "20f1c870fe256a123d1c17299a93a4ba": "재부팅이 성공적이었습니다!", "c5838a6fdef9fed0165274f6ed50ea4b": "다운로드가 실패했습니다!", "870a81aa5509bcd7aa51cf27e410eea9": "다운로드가 성공적이었습니다!", - "f70386f0f4846336b6eee06d16a55a33": "앱 DB 매개 변수를 전달하십시오!", - "2fe5b2b5ae4c0c601076922f34391c6b": "사용자 이름 매개 변수를 전달하십시오!", - "b046515d91d43d56962b42eb216b11c9": "비밀번호 매개 변수를 전달하십시오!", + "f70386f0f4846336b6eee06d16a55a33": "앱 DB 매개 변수를 전달하세요!", + "2fe5b2b5ae4c0c601076922f34391c6b": "사용자 이름 매개 변수를 전달하세요!", + "b046515d91d43d56962b42eb216b11c9": "비밀번호 매개 변수를 전달하세요!", "e997ba4648bad603fc310169de46e0ea": "지정된 데이터베이스 응용 프로그램은 찾을 수 없었습니다!", "2025d918448073508d336b72a7a28093": "데이터베이스가 이미 존재합니다!", "4a8f0a2ac362e62ba4e76f52b5791f0e": "생성에 성공하였습니다!", - "76f3f12040afb77724966e2af67ab403": "데이터베이스 매개 변수를 전달하십시오!", + "76f3f12040afb77724966e2af67ab403": "데이터베이스 매개 변수를 전달하세요!", "74fd3ba5b92aa59e471161d2a585a93c": "model_name 매개변수는 null일 수 없습니다.", "760a1226f2ba701b04963681ab97d575": "model_version 매개변수는 null일 수 없습니다.", "2a88d88050ddcc0e28f0da4576be2232": "service_name 매개변수는 null일 수 없습니다.", @@ -3218,10 +3218,10 @@ "d4503f6b7fe9af6267e7ff25b7b8d3fe": "모델 삭제 실패, docker-compose 실행 예외!", "d75a01e0d2c0cb8dad89216653024903": "모델이 삭제되었습니다.", "bf483666a33d372f729985363d512d74": "기본 도메인 이름은 일반적인 DN이 될 수 없습니다", - "3c4b1f6d2d9ef27ace95adceea599588": "추가가 실패했고 데이터를 사이트 데이터베이스에 삽입 할 수 없습니다.", + "3c4b1f6d2d9ef27ace95adceea599588": "추가 실패했고 데이터를 사이트 데이터베이스에 삽입 할 수 없습니다.", "20825a634340a0b49b1a5e7f2fe47ea3": "추가 실패 및 Docker 웹 사이트 데이터베이스에 데이터를 삽입 할 수 없습니다.", "653f81d3e5516550e6d5e35abcdbe97c": "[{}]는 패널의 역 생성이며 [/]의 HTTP 인증을 삭제할 수 없습니다!", - "d4b66e7369e5077a3c31ad79629f0ab9": "삭제 해야하는 웹 사이트 목록을 전달하십시오!", + "d4b66e7369e5077a3c31ad79629f0ab9": "삭제 해야하는 웹 사이트 목록을 전달하세요!", "f0501638237d7e8f934ec55ac3ffb20f": "설치에 실패하면 네트워크를 확인하거나 수동으로 git을 설치하세요.", "608113c9694987fa65b22ecb164aee59": "환경이 성공적으로 설치되었습니다.", "3f68fc9dcbe1e4581f2e5aae5adec9f8": "apphub 디렉터리가 존재하지 않습니다.", @@ -3234,8 +3234,8 @@ "6e40e5a8ad741ca4bd714fa52ef32333": "파일 형식이 잘못되었습니다. zip 또는 gz 파일을 선택하세요.", "c4996991c50032c9b296c11da356acb2": "가져오기 실패:{}", "8ad9bdaced3b1cd99f1fa9d32c9a7eca": "가져오기 성공", - "e48121dc556643fd31b26c190eedbad3": "Nginx 만 지원됩니다. 사용하기 전에 Nginx를 설치하십시오!", - "135f7ef9aeb50bf7b988416b0a679dff": "도메인 이름은 비어있을 수 없습니다. 하나 이상의 도메인 이름을 입력하십시오!", + "e48121dc556643fd31b26c190eedbad3": "Nginx 만 지원됩니다. 사용하기 전에 Nginx를 설치하세요!", + "135f7ef9aeb50bf7b988416b0a679dff": "도메인 이름은 비어있을 수 없습니다. 하나 이상의 도메인 이름을 입력하세요!", "c82b42d921224a0699f854c28c2450d2": "프록시 대상은 비어있을 수 없습니다!", "fe092e7668cf0e9e6dafef6a1fa084a4": "Unix 파일 경로는/tmp/flash.app.sock과 같은/로 시작해야합니다!", "f68c204aa9e12e0513aa7a4569449cfe": "유닉스 파일은 다음으로 끝나야합니다./tmp/flash.app와 같은 잠금.잠그다!", @@ -3246,26 +3246,26 @@ "f76df64b8f66e4f6050adf633c91c7fb": "웹 사이트 [{}]는 이미 존재합니다. 다시 추가하지 마십시오!", "6599f1c3d3d3760768d9023827e8edf0": "리버스 프록시 프로젝트가 성공적으로 추가되었습니다!", "85e34f49357adccd76d557a540a2e5d8": "SiteName은 비어있을 수 없습니다!", - "1daab0a25efad301906af4874ee4c8ac": "로그 유형이 잘못되었습니다.기본적으로/file/rsyslog/off로 전달하십시오!", - "ff9e0ecf6c4926c0a309e67f9baedf39": "구성 파일 읽기 실패, 웹 사이트를 삭제하고 다시 추가하십시오!", + "1daab0a25efad301906af4874ee4c8ac": "로그 유형이 잘못되었습니다.기본적으로/file/rsyslog/off로 전달하세요!", + "ff9e0ecf6c4926c0a309e67f9baedf39": "구성 파일 읽기 실패, 웹 사이트를 삭제하고 다시 추가하세요!", "2a6176cc22256a713204964a34fd1384": "로그 경로는 비어있을 수 없습니다!", "18292d8929b9f9b6639dcc6e49d4f4a7": "로그 경로는/로 시작해야합니다.", "306b5ccbae58fe7278c8e098b5f06f25": "이름은 비어있을 수 없습니다!", "b9f153e64173504e3700aa30b08fa0aa": "Auth_path는 비어있을 수 없습니다!", "c9ab8ba4f7de925b29414bbb86bd3d1f": "Auth_path는/로 시작해야합니다!", "cd44f9dcf9679c8151ce2b721f2fc6eb": "사용자 이름과 비밀번호는 비어있을 수 없습니다!", - "6750646f694a0c3dd46f9617ff055e61": "[{}]는 HTTP 인증에 존재하지 않습니다. 먼저 추가하십시오!", + "6750646f694a0c3dd46f9617ff055e61": "[{}]는 HTTP 인증에 존재하지 않습니다. 먼저 추가하세요!", "714145aeae9a04f8ecf9e1f54072202a": "사용자 이름은 비어있을 수 없습니다!", "36eb0a1bb3c002f5ed0fbf8f010881e3": "비밀번호는 비어있을 수 없습니다!", "f20db7351e9cf57ecb9f79ad3e032081": "[{}]는 이미 HTTP 인증에 존재하며 다시 추가 할 수 없습니다!", "218fd0a172e37293fc001328b3daca79": "[{}]는 패널의 반대 표현이며 [/]의 HTTP 인증을 삭제할 수 없습니다!", - "8b6cabd487e5ab76183addd53bea2d87": "성공적으로 삭제하십시오!", - "3034cdc7475c3fa220d4092128ff9c48": "gzip_status는 비어있을 수 없습니다. 1 번 또는 0 번 전달하십시오!", - "76661faaa298338bf731c737a62b7d6c": "gzip_min_length 매개 변수가 잘못되었습니다.0보다 큰 숫자를 입력하십시오!", - "f11df0d336c64058321a01bcbdc4667c": "gzip_comp_level 매개 변수가 유효하지 않습니다.0보다 큰 숫자를 입력하십시오!", - "5d113183845fc6e26c05bc1218677a30": "CACHE_STATUS는 비울 수 없습니다. 1 번 또는 0 번 전달하십시오!", - "a23b240364f5291f71d599e2355e6920": "만료 매개 변수는 불법입니다.0보다 큰 숫자를 입력하십시오!", - "c255b7e9dd800a8cd26ff83b3698713b": "WebSocket_Status는 비어있을 수 없습니다. 1 번 또는 0 번 전달하십시오!", + "8b6cabd487e5ab76183addd53bea2d87": "성공적으로 삭제하세요!", + "3034cdc7475c3fa220d4092128ff9c48": "gzip_status는 비어있을 수 없습니다. 1 번 또는 0 번 전달하세요!", + "76661faaa298338bf731c737a62b7d6c": "gzip_min_length 매개 변수가 잘못되었습니다.0보다 큰 숫자를 입력하세요!", + "f11df0d336c64058321a01bcbdc4667c": "gzip_comp_level 매개 변수가 유효하지 않습니다.0보다 큰 숫자를 입력하세요!", + "5d113183845fc6e26c05bc1218677a30": "CACHE_STATUS는 비울 수 없습니다. 1 번 또는 0 번 전달하세요!", + "a23b240364f5291f71d599e2355e6920": "만료 매개 변수는 불법입니다.0보다 큰 숫자를 입력하세요!", + "c255b7e9dd800a8cd26ff83b3698713b": "WebSocket_Status는 비어있을 수 없습니다. 1 번 또는 0 번 전달하세요!", "4bace8520f540a6ae54d48086a7465ba": "site_name은 비어있을 수 없습니다!", "aed0d6fc7665b30b1db8cd429e48c90d": "이드는 비어있을 수 없습니다!", "81ec4e731430cca9b3d8bff6372bfafc": "proxy_path는 비어있을 수 없습니다!", @@ -3277,10 +3277,10 @@ "88f9a8852b822982a9a3e839813d91bb": "도메인은 비어있을 수 없습니다!", "85fb0c03511da1e4d308fd135dec4486": "도메인 이름에는 쉼표가 포함될 수 없습니다!", "a1e7a2f08295c8f8161a8feb9e2110b0": "도메인 이름의 포트 번호 [{}]는 불법입니다!", - "5f77e0a83a9aa0e7e534e5136c99ab31": "하나 이상의 도메인 이름을 유지하십시오!", + "5f77e0a83a9aa0e7e534e5136c99ab31": "하나 이상의 도메인 이름을 유지하세요!", "b9902ea698ded06e8ef4f31ba1057795": "도메인은 비어있을 수 없습니다!", "5f04c54facbae56e5cdebc22b5ecbf73": "conf_type는 비어있을 수 없습니다!", - "bec317d58a8302e2aaf523e28f100710": "성공을 저장하십시오!", + "bec317d58a8302e2aaf523e28f100710": "성공을 저장하세요!", "ba4088d3a70108e609823381c7f81f96": "OID는 비어있을 수 없습니다!", "ebfb6fcc2f55debe2703d50d58255f8f": "키가 비어있을 수 없습니다!", "fc83b0fa2366a3136f1fd8874d0bee65": "CSR은 비어있을 수 없습니다!", @@ -3304,8 +3304,8 @@ "b74b269372107d024f6c9e13cf911a4e": "HTTPS 상태는 비어있을 수 없습니다!", "cefc1b6af0b80a883304b58651283f02": "상태는 비어있을 수 없습니다!", "f8a019279d00484c29abaf1cb4b9260c": "IP_TYPE 매개 변수가 잘못되었으며 검은 색 또는 흰색이 전달되어야합니다!", - "f8e8cf373fa65891fe5a6e65505d30d0": "IPS는 비어있을 수 없습니다. 한 줄에 하나씩 IP를 입력하십시오!", - "0677c4ecb9efdab30c5077e69b1745ba": "IP는 비어있을 수 없습니다. IP를 입력하십시오!", + "f8e8cf373fa65891fe5a6e65505d30d0": "IPS는 비어있을 수 없습니다. 한 줄에 하나씩 IP를 입력하세요!", + "0677c4ecb9efdab30c5077e69b1745ba": "IP는 비어있을 수 없습니다. IP를 입력하세요!", "b8c0bc6452f788c758a4f7bedd761757": "프록시 정보가 없습니다!", "70a9558c31a978ce2b1297a2a21c1317": "이 URL [{}]에 대한 프록시 정보가 없습니다!", "82ca4452a42da1388fd435ca8a2801e7": "proxy_host는 비어있을 수 없습니다!", @@ -3314,8 +3314,8 @@ "5c6869f159feda62d0e6441f3eb1f97c": "Global WebSocket은 개방 상태에 있으며이 URL에 대한 WebSocket 지원을 개별적으로 비활성화 할 수 없습니다!", "ff6c12be57557ce452395adac7e02b30": "Oldstr와 Newstr는 동시에 비어있을 수 없습니다!", "8c9bac9aea3d7a22d3789f837dd40d3c": "get.sub_type는 문자 조합 만 포함 할 수 있습니다", - "2ac2f7203f5049438855d537f52cfee4": "입력 한 내용에는 중국어가 포함됩니다.현재 버전의 NGINX를 지원하지 않음을 감지했습니다.Nginx 1.20 이상의 버전을 다시 설치하고 다시 시도하십시오!", - "f1522550bdc24955aa540480fdccaff5": "현재 NGINX 버전이 기본 교체 유형 만 지원하는지 감지했습니다.Nginx 버전 1.20 이상을 다시 설치하고 다시 시도하십시오!", + "2ac2f7203f5049438855d537f52cfee4": "입력 한 내용에는 중국어가 포함됩니다.현재 버전의 NGINX를 지원하지 않음을 감지했습니다.Nginx 1.20 이상의 버전을 다시 설치하고 다시 시도하세요!", + "f1522550bdc24955aa540480fdccaff5": "현재 NGINX 버전이 기본 교체 유형 만 지원하는지 감지했습니다.Nginx 버전 1.20 이상을 다시 설치하고 다시 시도하세요!", "0d57a0216b328aeba6ef5fc3cbf3b7e9": "교체 전에 컨텐츠에 대한 구성 정보가 없습니다 : [{}]!", "e00f42f6421b797439a64e3ef24c132a": "site_name 不能为空!", "a6fd23485ca8abe4ab7d0580d28c4bf9": "정리 성공!", @@ -3372,7 +3372,7 @@ "b44992b4430f7759108e5242176b7871": "[+] 컬 또는 wget이 설치되었습니다.", "4ba07005cef8f98a0625a7d1eb0a142e": "컬이나 wget이 설치되어 있습니다", "e3a56811a35322959c535d38d2e91f7e": "[!] 컬이나 wget이 설치되지 않았습니다. 설치하려고 합니다...", - "613a8be93fcd44002e549e0767c85a86": "OS 유형을 감지할 수 없습니다. 컬 또는 wget을 수동으로 설치하십시오.", + "613a8be93fcd44002e549e0767c85a86": "OS 유형을 감지할 수 없습니다. 컬 또는 wget을 수동으로 설치하세요.", "8a4d20948ccc8034e3118af3bb683da3": "aapanel 설치 시작", "df97b5d4f31c5cd4a3611774abb6de52": "[*] aapanel 설치를 시작합니다...", "d91a58f92edb4b30de7e5399908922da": "[*] 다음 명령을 사용하여 aapanel 설치: {}", @@ -3522,7 +3522,7 @@ "fd0099266c1971c5c40036e615d67fd4": "성공적으로 마이그레이션되었습니다.", "87aa2e739755a6fea3a63876b5a1d48e": "성공적으로", "d7db03701029007097b8e0cd61a983f6": "현재 마이그레이션 작업이 없습니다.", - "808781229f7b019ba6a44ea3871e3b6d": "마이그레이션 작업 실패를 읽었습니다. 나중에 다시 시도하십시오!", + "808781229f7b019ba6a44ea3871e3b6d": "마이그레이션 작업 실패를 읽었습니다. 나중에 다시 시도하세요!", "e728b6a004aa5e61efd25bf815a6e290": "백업 작업 시작 중...", "c9d48d6a4ebe28917b5439c91faaff68": "aapanel 설치가 완료되었습니다!", "f5e7895e7c31fedd32b520012910f960": "마이그레이션 작업", @@ -3581,7 +3581,7 @@ "e7e06b2dd59401dcf79acf2e3124d2fb": "터미널 데이터 백업이 완료되었습니다.데이터 크기: {}", "a273d4d4d0cf13abc1d7a4f96b8c851e": "터미널 데이터 복원 시작", "1a15a2b43f1dd92e836a592fb180843d": "복원에 실패했습니다. 파일이 존재하지 않습니다.", - "95d831166994e434da49f3ed70b73e8e": "단말기 데이터 복구 완료", + "95d831166994e434da49f3ed70b73e8e": "터미널 데이터 복구 완료", "e3a04ee4c0a034510866948e571c7966": "방화벽 데이터 백업 시작", "9a176a20c15e3dc096ed8bc5a05182ba": "방화벽 포트 규칙 ✓", "ce693968cbf6e5f66af91e3dd2317d78": "방화벽 IP 규칙 ✓", @@ -3705,5 +3705,115 @@ "99782b6a478e499d45a91f9d78e1c73a": "phpmyadmin-{} 설치 시작", "640c4e334dc9587e212d36e685059478": "FTP 설치 시작-{}", "aecfeaaa9e3bcff1f6169598772e90c0": "패널 실행 환경 복원 시작", - "3b83e3fdb17c70ca190e263e0bd7173e": "동일한 환경이 존재하는 경우 설치를 건너뜁니다." + "3b83e3fdb17c70ca190e263e0bd7173e": "동일한 환경이 존재하는 경우 설치를 건너뜁니다.", + "76749c0a7ec555a1cdf4c4dfde301958": "대상 압축 파일은 비워둘 수 없습니다!", + "95b045c4bc0ef440acd6156fb42b50c6": "압축 실패: 대상 파일 {}이(가) 생성되지 않았습니다.", + "ecdc6ad598bdc08ff236f448e1d03e13": "도메인 레코드를 찾을 수 없습니다", + "89ae4391631ed393c6c0ac36a2a0810a": "캐시 디렉터리에 제한된 파일이 있습니다.LiteSpeed ​​캐시에서 삭제해 보세요.", + "825d333e554f58230379a1cbc8372480": "캐시 지우기에 실패했습니다.Nginx Helper 플러그인이 제대로 작동하는지 확인하세요.", + "e783e39c78ccc8fa455396f454b86c79": "WP Toolkit의 구성 정보를 가져오지 못했습니다.", + "ef63d93aec22bed16012080faa44b635": "구성을 저장하지 못했습니다: {}", + "45b3768a0b9da76f12937e20e17ff8c9": "{} 한 번 실행", + "7a13562d776fdfdc9213a82f7f01d501": "타이머 파일이 존재하지 않습니다.이 작업을 삭제한 다음 다시 만들어 보세요!", + "b4d708d96e24278a93a6609b9e8002a8": "필수 매개변수 누락: Execute_time(형식: YYYY-MM-DD HH:MM:SS)", + "c506f17bfd828a4aeaf5a7978103f6b9": "CRONTAB_TASKBODY_EMPTY", + "1311d0f2576e30afceaa616f06a0fa53": "작업을 한 번 추가하지 못했습니다.", + "08423404caee54eae13add8fe145d84f": "비밀번호 확인에 실패했습니다!", + "494345d63759dcd623286d448def8778": "실행 중에 예외가 발생했습니다. {}", + "fac487bbd20975aaf778e95a2ea78a85": "PHP-FPM 구성 파일이 존재하지 않습니다.{}", + "7dd858aa480b572b903caa7b71000954": "Nginx 구성 파일 {}이 존재하지 않습니다!", + "69c86a0788cb7553486d3fe54bdc5232": "Nginx 구성 파일 {}을(를) 읽지 못했습니다.", + "192ae9cd563752bdd188b54231f828b6": "Nginx 구성 파일 {}에 FastCGI 시간 초과 설정이 누락되었습니다. 확인하세요!", + "3d023dffe875ddfbc013d6052c83bf56": "PHP 구성 파일을 읽지 못했습니다. 파일이 없을 수 있습니다: {}", + "e599e181a3cc24b59e781c5a52c9da0b": "PHP 버전이 설치되어 있지 않아 자동으로 설정할 수 없습니다.", + "d0a3141dec105a6fd820524ae77b928c": "당분간 백업 작업이 없습니다!", + "340c4a30e533798f76f8deba605ff6c4": "매개변수 오류입니다!", + "f98c446d194c4fbb566c3becc91255e1": "버전은 숫자여야 합니다.", + "e15ac24f41e856e08e494f9d2ab51af0": "phpMyAdmin 구성에 오류가 있습니다.", + "b404834ec20850fd1de15f52dc43cb06": "원격 저장소에 연결하지 못했습니다.키가 올바르게 구성되었는지 확인하세요!", + "38cb441d840ed6579ca6f1f876de2b61": "선택적 구성 추가: 데이터베이스, FTP", + "d0977de06e41fbd31702d7ddba64c3da": "워드프레스 홈페이지 배포중입니다....", + "a2bc816cd7abf7b134e56b39edae6fda": "워드프레스 배포", + "7e8ca7bb5dd0e69e0cd0d0e66832e2cd": "데이터베이스 생성에 실패했습니다.mysql 실행 상태를 확인하신 후 다시 시도해 주세요.{}", + "b0b4a6c23347406736732380f3798be4": "워드프레스 초기화 실패", + "e718ce7b8a5d4b41b3c129b477323bb2": "Nginx 구성 파일을 읽지 못했습니다.", + "cfecbb41158d2f815c4a0b820108aeaf": "구성 파일 구문 분석에 실패했습니다.구성이 올바른지 확인하십시오.", + "5abebd9b1d5ca579c051e1094ab375cf": "테마 패키지가 이미 존재합니다!", + "26b15536eb5ad2d4c9c8d2b964ba175b": "{} 구성 파일을 구문 분석하는 동안 오류가 발생했습니다.포맷이 정상적인지 확인해주세요.", + "69d02d928b14a9c948c2b11955071b64": "CDN 설정은 nginx 모드만 지원합니다!", + "da643dc091537f1db50480faba8f32ec": "웹사이트의 전반적인 성공", + "e162577ca7feeab927137eaff9a9895c": "CDN 헤더는 비워둘 수 없습니다!", + "ef99e1222fa88fac33b622a1083b0dc4": "요청 헤더에는 공백이 포함될 수 없습니다.", + "1caa7a57a628cfd5aace9db67697efa0": "nginx 구성 파일이 존재하지 않습니다.", + "3a0c73aeadcfa1a6a548fb68fe4cd83d": "구성 파일에 오류가 있습니다.확인해주세요!", + "75242ba6bf8096739ee8274c30658e46": "파일 이름에 잘못된 문자가 포함되어 있습니다.", + "25a4bafb86b96174698461c8ea8f1a6d": "파일 이름은 비워둘 수 없습니다.", + "f2ae8a2dbe55304c1cd4ce000143d868": "파일 경로는 비워둘 수 없습니다.", + "9277b5ccc09173ca1596107809de89fc": "대상 경로에 이미 같은 이름의 디렉터리가 있는 경우 파일 이름을 변경합니다.", + "06769a815392464e2095dd3aee30ab60": "폴더 복사에 실패한 경우 해당 디렉터리가 잠겨 있는지, 변조 방지 기능이 켜져 있는지 확인하세요.", + "dc1aa8bc00246f2357576c2c04e74728": "현재 디렉터리는 읽기 전용입니다.", + "d10fab43227e65d40f86bbdc947c8092": "폴더 복사 실패:{}", + "5992e9701e2496a26893b7f11d350418": "매개변수가 누락되었습니다!길", + "f44751d36b8c0672bc68bb2fa57c1069": "매개변수 파일 이름이 누락되었습니다.", + "2bfac17a1e400b07b888e0435034d6a5": "누락된 매개변수 기록", + "8a8b016e2f55506d3d7f8a86c4e2a118": "기록 복사본을 복원하지 못했습니다.", + "1fe35be7f4e10cbb7f972445cc8209fa": "연결 성공!{}", + "b9940e6be68b04502240b4d9dcadf31f": "설치 중...", + "402e7a087747cb56c718bde84651f96a": "성공!", + "24742fdc8b10e0c22da043b82ec2d034": "영역을 추가했습니다.", + "e844d65ff09d2632eac952b3aead39b4": "네임서버를 성공적으로 설정했습니다.", + "6974e9e250b2c667198d058eea716a82": "SOA 레코드를 성공적으로 설정했습니다.", + "527c6f13367a6c6fe6eccafdcee477a1": "로그를 삭제했습니다.", + "1772fbb5207afbb9dbdc5ebbac4a1207": "로그를 지우지 못했습니다.", + "cb99ed01c97dce56abf2ec0b44861a63": "DKIM/SPF 레코드를 추가했습니다.", + "c29aa49e3d3d91c08b207563bad272f5": "DNS 검사기가 실행 중입니다.기다리세요.", + "324b9550f30c392158d06e38781f1d17": "DNS 검사기가 일시 중지되었습니다.", + "70d8963372aa6cd19254cfdfce2150eb": "DNS 검사기가 성공적으로 실행되었습니다.", + "fdeec8a42f9bca6eb42c417d9da14d80": "잘못된 작업입니다.", + "cb9004d0406249266c644782d5446c31": "모든 영역을 성공적으로 수정했습니다.", + "af88c4ef2e220eba86b35140aba3b680": "레코드 유형이 필요합니다.", + "282e6a8a0bba12c773eeee76d800d34c": "모든 도메인에 대해 TTL을 성공적으로 설정했습니다.", + "0511237752a4bf05b3470f55a920a13c": "{} 웹사이트에 Nginx 버전 공개가 있습니다.", + "3377a5b197173de4cffe41bdc42e0c06": "{} 웹사이트에 대한 nginx.conf 파일을 열고 추가", + "d8b10647324c74f52a3b24aee5b34316": "{} 웹사이트의 php.ini 파일을 열고 설정합니다.", + "44971bb65cdcdb059767f15e4ff265e6": "{} 웹사이트에 방화벽이 설치되지 않았습니다.", + "7e26e59bba292ecc0bda0c7f69e091a1": "방화벽을 설치하지 않으면 민감한 서버 정보가 노출되어 보안 위험이 발생할 수 있습니다.", + "633b7a612198f42925356962c605daf0": "Nginx 방화벽 설치 또는 활성화", + "114b3dda67fc0b22bce73684f5872804": "{} 웹사이트에 대해 교차 사이트 공격 보호가 활성화되지 않았습니다.", + "5c040e1ad447e5408b0e3eecdd455c1d": "사이트 간 공격 보호 기능이 없으면 민감한 서버 데이터가 디렉터리 탐색을 통해 노출될 수 있습니다.", + "0fc62e3733f8eebdc41ac57a3497f653": "공격자가 디렉터리 전체에서 민감한 파일을 읽지 못하도록 웹 사이트 디렉터리에서 open_basedir 보호를 활성화합니다.", + "d76b44c3726a549e02705d04d20572bb": "{} 웹사이트에서 SSL이 비활성화되었습니다.", + "24e1cf7550e6cff5c9a86b136f4738af": "SSL이 배포되지 않으면 민감한 서버 정보가 노출되어 보안 위험이 발생할 수 있습니다.", + "598483f5877ad9bfe0a2c30a24d846d9": "웹사이트에 SSL 배포 → SSL", + "0741d3f8bd49c7058a9a7e0a1e615bf1": "{} 웹사이트에서 민감한 파일이 감지되었습니다", + "f98a053d674dbfc507c028cb69799413": "민감한 파일 【{}】노출 — 서버에 민감한 정보를 유출하고 보안 위험을 초래할 수 있음", + "9a3a5f290b230622980f79252dc0bb19": "웹사이트 루트 디렉터리 외부의 민감한 파일을 삭제하거나 이동하세요.", + "781718c074dfa4fba0c1ab86af7322c3": "{} 웹사이트에서 SQL 데이터베이스 파일이 감지되었습니다.", + "5fc606066b231ce034d1f894a2f56a87": "SQL 데이터베이스 파일 【{}】노출됨 — 서버에 민감한 정보를 유출하고 보안 위험을 초래할 수 있음", + "7fb29e80e1607255b4889149d814d6cc": "웹 사이트 루트 디렉터리 외부로 SQL 파일을 삭제하거나 이동합니다.", + "7d793f5d45f692f8234cb14d77d43526": "{} 웹사이트 루트 디렉터리에서 트로이 목마 파일이 발견되었습니다.", + "2126356e872681f2c18ab8999d55977a": "트로이 목마 파일 【{}】감지됨 — 민감한 서버 정보를 노출하고 보안 위험을 초래할 수 있음", + "34cbe317411bc8ece32e89b2ccb3ea8c": "트로이 목마 파일을 삭제하거나 보안 감사를 수행하세요.", + "2ad6c8ba78234ac5d731bb9311eb92e5": "{} 웹사이트에서 백업 파일이 감지되었습니다.", + "d5d425447ff390eaf69be751e20bf6b6": "백업 파일 【{}】노출됨 - 민감한 서버 정보가 유출되고 보안 위험이 발생할 수 있음", + "c09aa2e529fe7c6658b8b534110d7e46": "백업 파일을 삭제하거나 안전한 위치로 이동하세요.", + "a4ec7bd83939b217a71b216c895e16ff": "{} 웹사이트 데이터베이스는 취약한 비밀번호를 사용합니다.", + "083b68b9c95c87161f91b810150a1cb3": "웹사이트 %s 데이터베이스 【{}】가 약한 비밀번호를 사용합니다: {}", + "f522c28207b8c85833e454afdfb59ac3": "무차별 공격 및 데이터 도용을 방지하려면 패널에서 데이터베이스 사용자 비밀번호를 변경하는 것이 좋습니다.", + "32ed3512099db2d97450af9c6ee23099": "{} 웹사이트 FTP 계정이 취약한 비밀번호를 사용합니다.", + "8a071d6ddba4edecc3e44089e1b24fb7": "웹사이트 {} FTP 계정 【{}】은 취약한 비밀번호를 사용합니다: {}", + "bc9fb759c38c587070326ba0aaae12f4": "공격자가 FTP 자격 증명을 무차별 대입하여 웹 사이트 파일을 변조하는 것을 방지하려면 취약한 비밀번호를 즉시 변경하십시오.", + "6a0cf1bea780ff39333eb522d8f181aa": "XSS(교차 사이트 스크립팅) 공격", + "b021dbe80c4037e66959a930b37e6f8b": "귀하의 웹사이트를 보호하려면 [Nginx WAF]를 활성화하여 이 사이트에 대한 XSS 공격을 효과적으로 차단하는 것이 좋습니다.", + "6e60d80e8f41ac0b2d0579bdf22f130d": "SQL 주입 공격", + "82a2980b928e2ee7590dad990c70aca4": "귀하의 웹사이트를 보호하려면 [Nginx WAF]를 활성화하여 이 사이트에 대한 SQL 주입 공격을 효과적으로 차단하는 것이 좋습니다.", + "34c46b685b63d1d8ce17528acc9a3f18": "디렉터리 탐색/파일 포함 공격", + "6af6785994f3ea3ea2c67bf07f947721": "귀하의 웹사이트를 보호하려면 [Nginx WAF]를 활성화하여 이 사이트에 대한 디렉터리 탐색 및 파일 포함 공격을 효과적으로 차단하는 것이 좋습니다.", + "8ce854a4c99ec334244274a7eec82d02": "PHP 코드 실행 공격", + "946e8c378800662bf5c10a2cb7eff9fb": "귀하의 웹사이트를 보호하려면 [Nginx WAF]를 활성화하여 이 사이트에 대한 PHP 코드 실행 공격을 효과적으로 차단하는 것이 좋습니다.", + "60d2c5ef1c4bb2dfb7e99eb659812f6a": "민감한 파일에 대한 액세스 시도", + "b4e160dd6370e872200b9a7d12b980aa": "귀하의 웹사이트를 보호하려면 [Nginx WAF]를 활성화하여 이 사이트의 민감한 파일에 액세스하려는 시도를 효과적으로 차단하는 것이 좋습니다.", + "98c0b1eca58e1f2580ad3e8f5b542e54": "로그 분석 중 오류가 발생했습니다.", + "b7040f1f73ad7726d2141879aaa0f3bb": "로그 파일 권한과 형식을 확인하세요.오류: {}", + "1b95893c201cd2100d5eac3a5af8c937": "메시지 보내기 실패, 보내기 실패의 수신자:{}, 오류: {}" } \ No newline at end of file diff --git a/BTPanel/languages/all/pt.json b/BTPanel/languages/all/pt.json index ddf651ce..bfc52802 100644 --- a/BTPanel/languages/all/pt.json +++ b/BTPanel/languages/all/pt.json @@ -1,4067 +1,3709 @@ { - "1dc8a14e9861fa32b544006590c08666": "Arquivo movido para a lixeira!", - "07cbb5e8d174369377832adc0debb2b3": "Arquivo excluído com sucesso!", - "807e31c87b236897fa1fef873d6f6e6c": "Arquivo criado com sucesso!", - "0bfe47819da04212a33dac83b71430e8": "\\ 2", - "7060f57ff9e237a85b15eef45647d061": "O nome do arquivo contém mais de 256 bytes", - "38435dd5a615624cc69531abfbd703fd": "Nenhum caractere especial pode ser incluído no nome do arquivo!", - "755a84ac806ba86d4c48936dc66e3fef": "Não é possível fazer upload de arquivos para o documento do sistema Root!", - "3f619d1715a6655f2005cfc5b8c68772": "Carregado com sucesso!", - "e43d9157935634a15059bd1bf18415dc": "A recuperação falhou!", - "0e20e16a4febfeda715769b902a59334": "Este não é um diretório", - "6036dced70bfdbbd88295453cbde9bfa": "A criação de arquivos falhou!O disco está cheio!Por favor, limpe o espaço primeiro!", - "30d24a9b6b261e0750bb661b31987b5d": "Não é recomendável usar [.] no final do arquivo, porque pode haver riscos de segurança", - "be0d6b0c39cab719b1c61c8015434a33": "Nomes de arquivos não podem conter caracteres especiais!", - "b9e117b56b51b2d3018081eacee6b3db": "Existe um arquivo solicitado!", - "2ad238d651bf0bd82f0ae2956282be25": "Falha ao criar arquivo!", - "88c49b5495c38de4f1c7bb7faddc87ef": "O nome do arquivo de link suave especificado deve conter o caminho completo (caminho completo)", - "066985109e0866765c631bf851b9fac8": "Erro do parâmetro!", - "b2d87dda66a4643c6cf673f787c5f226": "Arquivo de configuração não existe", - "167ef22f59be6706a317a2f02e27e656": "O nome do arquivo de link suave especificado já existe", - "69908f8298ea9cf873cc85644efdbad6": "A criação do arquivo softlink falhou", - "b9fafba1d56fff09f8dffc1d53d23106": "O arquivo softlink foi criado com sucesso", - "0253f56ac4bf1e2bab05844f11588b3a": "Os nomes de diretórios não podem conter caracteres especiais!", - "40a0060d11d54723173dfe1fe62115a1": "Existe um diretório solicitado!", - "6ee1e36c05e03fa9fffd8679802b9cd4": "Diretório criado com sucesso!", - "16ae03054adcefefefea0a445bb4bdc0": "Falha ao criar diretório!", - "c7a6a892c6cdfc9b0fedefb0a1d2083a": "O diretório solicitado não existe", - "d6ed4f1a1cbc9a3c09c4cab0587c9675": "A edição deste diretório pode causar exceções de serviço!", - "e4db5a6f17eff85861e5d13d5cb29538": "Não é possível excluir o diretório não vazio!", - "18d4019ccaddd6709b38fa3a0a6f36bd": "O diretório mudou para a lixeira!", - "7f01a8955f1313d39d7305c5a8f369d3": "Diretório excluído com sucesso!", - "50f496129c1f31d2c5945f7626b85b79": "Falha ao excluir o diretório!", - "f2cbbab1d3bffc73466f6b494c0bd4f9": "Falha ao excluir o arquivo!", - "3b9f9f808c2b8cc4e2ebcbc944400e59": "A recuperação foi bem -sucedida!", - "1993c6755b58772f028e33223e43629b": "Nunca incomoda os problemas até que o incomoda!", - "62dea51f3a49420412addfc2715da183": "Lixeira esvaziada!", - "f5b5dc046351c258a40f25a76f4ff36c": "Recurso de reciclagem Recurso desligado!", - "7aed5cccfbfccf8f9c6b395993214cf6": "Recurso de reciclagem LIGADO LIGADO!", - "10863e27eb3cb8450a82141a1a2fe884": "Arquivo copiado com sucesso!", - "bc79eb69c067675e6c004685489ec15a": "Falha ao copiar o arquivo!", - "04095d5bd6142994817541b148e646b7": "Não é recomendável usar [.] No final do diretório, porque pode haver riscos de segurança", - "fdd370a7fdd0583ab2c525f61354de40": "Falha ao copiar diretório!", - "2af7856d75a678be6c9483fce92fa142": "Não é recomendável usar [.] No final do arquivo, porque pode haver riscos de segurança", - "4d2d9fb4c5fad04a57ae0d78ff6e3cac": "O nome do arquivo de destino já existe!", - "6fd3281a326ae6e050a123f18c85d52b": "Operação sem sentido", - "49aa3054caf3f7113a50d7cf8e145db1": "Arquivo movido!", - "7a33ac075e0ad5cf363f9629c3772d4f": "Falha ao mover o arquivo!", - "41b80398421e2b8fc213bf916b9c72ce": "O formato de arquivo não suporta edição online!", - "35cbcc43b11038bf4a1b07d5ac213175": "Não é possível editar arquivos maiores que 2 MB online!", - "48203f43edd25a6df396ff263a02ea45": "Arquivo de verificação de gravação falhou: {}", - "e11ae7287b857365e57738fee02092d4": "Falha ao abrir o arquivo, o arquivo pode ser ocupado por outros processos!", - "c9ecd22ff27392ab09e84a9173fc2139": "[Caminho] O parâmetro não pode estar vazio!", - "5f8cb036f6ecb0c73502d1d7919702c8": "Não é possível modificar a cópia do histórico diretamente!", - "5b543e9330be7ac350668b11a302b001": "Erro:
Falha ao ativar:

", - "f9042e5392acaa2809c35adb664bd064": "Erro:
", - "db8ecb61f23a81a38b2c83858269f951": "Salvo!", - "ca3cfb19cf2e54f4fc95497f81e80b88": "Erro: %s
", - "2faec1f9f8cc7f8f40d521c4dd574f49": "Habilitar", - "a4e33d99e725f759048c54f98f074052": "Erro de configuração, não pode ser definido, tente usar a correção de comando: \"Bash /www/server/panel/plugin/tamper_core/install.sh install\"", - "e69cc1102c087a819764e93d50ab3ef0": "O site especificado não pôde ser encontrado.", - "a584585f2e3445e4d2d93865bb0c7952": "O banco de dados especificado não pôde ser encontrado.", - "2226683c8d89df274e2ded7e04fc4a82": "Você não pode usar o diretório crítico do sistema como o diretório de backup padrão", - "100f712f58657782dda9a5bc070e0248": "O parâmetro está incorreto", - "946fb31f804cdde218dbf05d7183e94e": "MD5 consistente!", - "b269cd272a31017961c245e2c84a1a2f": "Download do arquivo falhou!", - "1336bbfcadd9119f86ecd48c2d9fb770": "A conexão do banco de dados é anormal.Verifique se a autoridade do usuário root ou os parâmetros de configuração do banco de dados estão corretos.", - "ee102508d210854b6fc7da18e598140b": "Detecção de senha gerada falhou!", - "6e72fc97e2f1be35ae40ca21d6b1df38": "O banco de dados deste WordPress não foi encontrado, isso pode ser causado pelo fato de você ter excluído manualmente o banco de dados", - "6df8e9d3a4e149ff12445d981f6fc244": "Redefinição de senha bem -sucedida", - "f748d4e467e9f4f27540b6f5ce5b1ef8": "Atualmente, este recurso suporta apenas nginx", - "9747bb4f34180afd2f9a681397b269fb": "Limpo com sucesso!", - "015d337f0646fe4b8a89b30041436e7f": "Atualizado com sucesso!", - "321b336d92b3e894060637528499dcf9": "A implantação foi bem -sucedida!", - "1850193ca4b37a25ee94db903eddc16f": "A implantação falhou!", - "b390405514d6291f511c9f3a4fb31249": "O ID do site deve ser numérico", - "e650b17a0b833e3bcdd8e859b37ce94e": "Este banco de dados não foi encontrado!", - "a0adaeeb3642584bd931c757b6f71d78": "A otimização do PHP FPM foi bem -sucedida", - "f11ab236591dc778c39c9429e141dba2": "A otimização do MySQL foi bem -sucedida", - "d145648d4281cb3266714c5986bcab8b": "Configuração do cache do nginx fastcgi já existe", - "9c373c2796e866dc590f9dc7c80609da": "Nginx FastCGI Erro de configuração!", - "2750e686fcc97deec0122789a059edbd": "Configuração do cache do nginx fastcgi", - "615681ddc1b0efb9f6d434adc1451bb7": "A configuração do cache fastcgi init nginx já existe", - "a61c53dff88925e428f2a295b18ac807": "NGINX INIT ERRO DE CONFIGURAÇÃO FASTCGI!", - "28b386f7ab5957184b60f47c0e540d68": "Configuração do cache fastcgi init nginx", - "b7082bd55a134bb3a142570572e1c469": "A configuração fastcgi não existe na configuração do site", - "c0ff8a4b4b8f68c4ba7df88588291590": "A configuração FastCGI já existe na configuração do site", - "e3a6621c5ea036c8f82d3f2d343f1bc8": "Site Erro de Configuração Fastcgi!", - "5afb8de2bbb11b44592503000290c173": "O plugin especificado não existe!", - "a6e74e577f39fe07f08db82f8e5ff715": "安装 过程 已 取消!", - "2eaba30c177044d12634b22016f5dd99": "Especifique o nome do software!", - "0d3811da2c2a4315b921093d36e6759d": "Desculpe, atualmente o oficial do OLS não suporta Php8.1", - "0d06a64610d5755d0d395305f9b3a664": "Faça login como conta AAPALE primeiro", - "2c9056dcb1285057d5248e7ed16d2b4d": "A verificação do hash de arquivo falhou, pare de instalação!", - "fb95b07b4c663c0a52cda545eef1d869": "A instalação foi bem -sucedida!", - "fac5f4d9d430e77699ec114d346c9bb2": "Instalação falhou", - "a9ba3c226edabcfe1978d6f4c5daf404": "Nginx 1.8.1 é muito velho, não está mais disponível, escolha outra versão!", - "75d7d596e2cc30d482111fae7b4f6d88": "Tarefa de instalação adicionada à fila", - "4432eb207b29c9ead490158b76397532": "A lista de banco de dados não está vazia.Para sua segurança de dados, faça backup e exclua o banco de dados existente.", - "ba922eb50c83147a9bc0e9f40877d986": "A desinstalação foi bem -sucedida", - "b860df98df6ab84521a4cef036973028": "Faixa de pontuação [1-5]", - "eb536feb2c569974c2b5cf85cae91041": "Falha na conexão!", - "770e9b26a896c92ec8274506c3d202b4": "Falha ao obter a lista de software ({}) ', \"401", - "16ad37f5aafc6478f2f6d63d70554530": "Por favor, não repita adicionando", - "18ea7bdb25b2a66507ffb1bb8b42fefa": "Painel exibe apenas até 12 software!", - "2aa461271893ae0493789e9e8f248fdc": "Barra de atalho Exibir apenas até 5 software!", - "98cb93d354af289a900cd9e03cee2df2": "A instalação falhou!", - "cbfcfe47e7420af71ce1666844c565a3": "Classificação salvada", - "6a20d0daaec1ce3950a321704041dc90": "Este plugin não possui modelo!", - "6f5cb320fb3a7e303403054320ad943c": "Lista de software atualizada!", - "84f7539fe8674bb0689347dc7acd7b43": "Nenhuma informação do plug -in encontrada no arquivo, verifique o pacote de plug -in!", - "e218c4ab90648e73f4d0953990d0d16d": "Tem_file_not_exist!", - "117f1bb083c7d556079a3c77093be5e2": "Falha na exportação, verifique as permissões!", - "a8f375e795e0a130837f2a468518a413": "Nomes não compatíveis podem ser apenas números, letras, sublinhamentos", - "a06490b9729d0868e31d834c9bffa0bd": "Os parâmetros de compilação personalizados especificados não existem!", - "998ad6f12ce5285a1b72d4265d9b36cc": "Excluído com sucesso", - "088322e850f185f815f1b9713b80afba": "文件 下载 失败!", - "b4fdea08b54d2b33ee1f68aadf9c9040": "连接 下载 失败 , 请 尝试 到 【面板 设置】 页面切换 通讯 点 , , 或 服务器 服务器 网络 是否 正常:

Erro: Falha ao estabelecer uma nova conexão

", - "3fd915df19d972e9693d1e043623206f": "连接 下载 失败 , 请 尝试 到 【面板 设置】 页面切换 通讯 节 , , 或 服务器 服务器 网络 是否 正常:

Erro: Leia o tempo de tempo

", - "2e5af2b779702e4c1a5dccd402dc7e8c": "连接 节点 失败 , 请 尝试 到 【面板 设置】 页面切换 通讯 节 , , 或 检查 服务器 网络 是否 正常:

Erro: Encontro fechado de extremidade remota sem resposta

", - "18c5ecf0f75b10d5cbf0b33f3cc697d7": "磁盘 空间 , , 请 清理 清理 后 再试!", - "c9f96bf82e11d357db58b5ad0d52c31b": "软件 失败 , , 请 软件 列表 , 并 重试 重试", - "bdea6edffe26fd0985fd051144f8ca12": "指定 进度 信息 不 存在!", - "8fde9a929c417549ed2f9144fa68c0d2": "O nome da regra só pode ser composto de letras, números e sublinhados!", - "473bc9055d76e148db4d28e7bec67295": "O nome da regra precisa ser maior que 3 bytes", - "5b097df78b1d8c65d8b524354029f114": "Sufixo de arquivo não pode estar vazio", - "496e2dfba11ca4381ef6277e6e9a62dc": "Diretório não pode estar vazio", - "811544f02f92e50584dd389bbdd761bc": "Erro do parâmetro!-1", - "ae2c3655aab6402bd855f44421dc51d4": "Erro do parâmetro!-2", - "e79a40d9379469f0f3d26251ecf0d334": "O arquivo de configuração nginx não existe!", - "9eee7650a676d53dc51e3361f2b2b99f": "Endereço de conexão errado", - "38b5977db90e0d87467a6dead02cc9d4": "A conexão foi bem -sucedida", - "aae28d19de861fdbd60625f5924b0ffe": "O aperto de mão do protocolo SSH tem o tempo de mão, e a qualidade da rede com o servidor de destino é muito ruim", - "01993e4270c796db59ba22b3c2f53241": "As informações SSH especificadas não existem!", - "ebd1aed8f2ab2f1ad08660f609f60206": "O endereço do host especificado foi adicionado a outras informações do SSH!", - "3a648aa4c838316ca3a8cded3d306d01": "指定 ssh 信息 已经 添加 过 了!", - "9d048cf9fd858ea33d6607855e4c8219": "Por favor, passe no campo [sort_list]", - "e13d2375856de89c040c6eadfe65d699": "O nome do comando especificado já existe", - "f64f7d7e07ab5fd2c7a8eed2274793c3": "O comando especificado não existe", - "6ca3d3b27428d22e047e13a552f1600e": "Adicione com sucesso", - "868903fa7bc939d9ff39df264589c0fd": "Excluir com sucesso", - "179b0ad118200b66c6e90535d9d8ad4f": "O disco inode foi esgotado, o painel tentou liberar o inode.Por favor, tente novamente ...", - "e3fa50f6413dbb7bfe7cb26e1acd3d98": "Por favor, faça o login com a conta primeiro", - "121303c67f81a8ebda41de51c8afaf27": "Faça login na sua conta AAPALE no painel primeiro!", - "d5670370d84473122d8e4d5a3b27b4bf": "Erro de parâmetro: num", - "64ab1925be79469a2097a6490725e3cf": "erro de parâmetro", - "c40f1a202bfa106ac04f83a4740b3bd1": "Não se conecta ao servidor!", - "6b1c16b7a785029c0a11de3ab31cb125": "O sucesso do status de descarga", - "e06c1ddc33f674068e3ca201094145d1": "Ativar com sucesso", - "819b23804f66eddddfba39e7bdc53e68": "Ativar falhou", - "4f57c5dce8b638737a368af15409439f": "Ativar falhou", - "fe94df1697f309269e00428cae6bd141": "Renovar falhou", - "b2ac1158b825f44cb363648fa3ad60cb": "Renovar com sucesso", - "78d29c0fadebf704e471a63afd430250": "Aplicar falhado", - "3649e869737aa87f263194ce7f88f19e": "Aplique com sucesso", - "34c4dc380e690d2ff6ebb6aaed103401": "Product_id Erro do parâmetro!", - "28731318aa493586f88894355a79cb48": "Falha ao se conectar ao servidor!", - "73e1f7d487ad73d55414fe26ea11cbf0": "Não especificar o parâmetro [sititepath]", - "481df7dbcd4c0317088bde8c913d5893": "Por favor, preencha o caminho do site", - "b1b2484c013c646d7f41d6b2f495b6ef": "O caminho do site não pode ser o diretório raiz [/]", - "1c3bff99564f1370a5b1bf6c0773f8c4": "Verifique se o formato [email] correto", - "af9091566e669f016edf16ba97464cbe": "Senha muito fraca, se você tem certeza de usá -la, marque [Permitir senhas fracas]", - "b0dbad478d4f07c38aec8f440ed98b66": "Por favor, instale o MySQL e o PHP primeiro!", - "59d5fef323e89ded50ed6036848a97f3": "O formato do parâmetro do nome da web está incorreto, deve ser uma string json parseal", - "078a3d3e263be2851ddfd9fa059d098f": "A faixa de porta está incorreta!deve estar entre 100-65535", - "e448bd5c1c654d1ef33cf40620808693": "A versão PHP solicitada não existe!", - "50370024fdd22dc69099a46d011b20e2": "A versão php não pode estar vazia", - "23eded6de9c06451f67ecb7ed3a8c95b": "O domínio primário não pode ser o registro de DNS curinga", - "f54249d2613e48be05837ec9cd615a5f": "O site que você tentou adicionar já existe!", - "b537e2d1946d559d3de4fb3c045d290f": "O domínio que você tentou adicionar já existe!", - "f91c641aef33cf8ef4a29bc5d3a7193a": "Falha ao adicionar, escreva erro de configuração!", - "aa5f20e061736fe68a915163e7e6d122": "O site especificado não existe", - "f11e72daff0ce484f4c401bd0bd28ae5": "Site excluído com sucesso!", - "c57d58c6bbd34144325871d75b42a577": "Por favor, insira o nome de domínio do host", - "68ae44808f90043dee02358ee768bf6e": "O formato de domínio é inválido!", - "9b3c4205f2f408790c9c1c5da53c3bfb": "Falha ao obter a versão PHP!", - "abc3db87d5608cc9559556468a696a35": "Escolha um nome de domínio", - "7807e17f2bf49fb802bba1a04822ea16": "Escolha uma porta", - "e5925c3a126a66c0565df6d8ef49550e": "O último domínio não pode ser excluído!", - "17088ffed1e537b917a6ecc9dc957159": "Erro de chave privada, verifique!", - "26924bd958e212f07c31b6ffca9cbf8c": "Erro de certificado, verifique!", - "44e2c1c3cfd8d248d7c9190a8f07c0ee": "Erro de obter certificado", - "1082bc146a2beee89d676f1761c3d770": "Erro:
' + iserror.replace (\"\\ n\",'
", - "7063e5fbf2ea8d0809fe307b6df00467": "Certificado salvo!", - "c4636b898d7abdeda4822d907a2b608c": "Um nome de domínio genérico não pode ser usado para solicitar um certificado usando [Validação do arquivo]!", - "4d57667036e49fef4ac00e0ae7a6b271": "Os sites que têm proxy reverso ativados não podem solicitar SSL!", - "275a0fbc129a78e37940d73790e861ee": "Vá ao Software Store para instalar [resolução em nuvem] e preencha o nome do domínio NS Binding.", - "c0648613bca301f3ff24978159fa7d08": "SSL LIGADO!", - "0036e981aae7ddbe84f8657639fc931e": "SSL não está atualmente ativado", - "27d48e2ec05bc30d098773aa1932992e": "SSL Desligado!", - "c143ec88720f5daa98027d2f4a3ccdb5": "O perfil do site especificado não existe", - "d735dcb58f6eae90b35430c015f9c2b1": "O site começou", - "d2e55743ae869e961b49b3df3a181a32": "Site_stop_success", - "0fdda9d236857f01644add954fa198f3": "O site parou", - "0adc9bbeffa3274734784668a484df9c": "O controle de tráfego do site suporta apenas o NGINX Web Server!", - "b80750c02857779508ffe53d107aaebc": "Restrições de simultaneidade, restrições de IP, restrições de tráfego devem ser maiores que 0", - "2fdecc016fda3833df349c0fc5bbb8c5": "O controle de tráfego do local foi desligado!", - "2d24e82230176a1327c59ce535566e83": "O endereço da URL é inválido!", - "44bd68c6703adf65ff21c63e9a876aa1": "O formato do domínio primário está incorreto", - "df4641ff0ca3ea3afbd816fb231c5857": "Obtenha a configuração do PHP Falha!", - "228de818e8ad124d6d99935186a1fc68": "Falha ao obter, não há documento padrão no arquivo de configuração", - "24d8ad2f656b7298e00f66f61f4149eb": "O arquivo de índice padrão não pode estar vazio", - "b9c4b5be42307a2a19bb5cc791c1e817": "O formato de documento padrão é inválido, por exemplo, index.html", - "98c97d41dd6fde8d155e9b9d4a1ecd0c": "O documento padrão não pode estar vazio!", - "4eb35aa4b95736df133dd3ad772f1ec9": "O diretório crítico do sistema não pode ser usado como diretório do site", - "ddc2be35a5ed0bf09a88139c4ad10b4a": "O mesmo que o caminho original, sem necessidade de mudar!", - "842bbd281516b01e70be499dbe67d3aa": "Definido com sucesso", - "f1bef4fd5183ae83a5896c32a3d5e81d": "A configuração PHP personalizada suporta apenas Nginx", - "879e0d022ff268704f93a7e2b504c224": "A configuração da conexão PHP não pode estar vazia ao personalizar a versão!", - "3cb7d414f8ae92b2b29057f91346f7dc": "A falha na configuração, não foram encontrados itens de configuração relacionados ao Php-XX no arquivo de configuração do site!", - "4622561ceaaecb6ef7dd51e65c9f4ec5": "Diretório base desligado!", - "e4ec1f40794bdf92e7261e6e0c51895a": "Diretório Base LIGADO!", - "1592678472ea1b601fd74abff47c56b1": "Não consigo obter URL alvo", - "18edd294853d381dbe0d612ab58bc123": "Um erro foi detectado no arquivo de configuração.Por favor, resolva -o antes de prosseguir", - "8b5899be4df3aedb03c6fbad9055ed1c": "O nome do banco de dados não pode ser mais de 40 caracteres!", - "111376d92c49c1a6c1522a2ef1dac23c": "O nome de proxy reverso especificado ou a pasta proxy já existe", - "09a988aa2e3185fce9fa8f4e8710b862": "Não pode definir proxies de diretório e global", - "012a8e497feddccb8e4a47aa5e2dc156": "Por favor, digite o número", - "2500f9c35e34174da3e2f78afd6d35a7": "目标 URL 无法 访问", - "faf2457853593b3296699c4adacc7825": "Por favor, insira o conteúdo a ser substituído", - "748e5ad33460a17cf26c8024bb0a1620": "O conteúdo para substituir não pode ser o mesmo que o conteúdo a ser substituído", - "195d5db9e1559f06348715bc3a822036": "Um proxy reverso global já existe no arquivo de configuração/vhost de reescrita/nginx mestre", - "cc38d47ec9ac62ffc67a5db9c08d5d52": "URL de destino não pode estar vazio", - "fb79afbbe0688565b7894b644dfd798d": "O URL de destino não pode ser [http: // ou https: //], preencha o URL completo, como: https://aapanel.com", - "29c9da826ae868c8c6444328f48bcf40": "Os proxies reversos não estão atualmente disponíveis para sites do WordPress que usam implantação de um clique", - "a59dfc3ae22fd96d46011503a4f40744": "Proxy suspenso", - "078bb5f960587121c7cd606ddba5ad58": "Ative o proxy reverso antes de editar!", - "fe7185cec796e18d58f8e84dc4da946f": "Atualmente suporta apenas o Nginx", - "38441d4a89765279852ca2830aa89c83": "A nova regra de reescrita de URL foi salva!", - "b9c1dcb37c44dca19765636de065b1c1": "O backup foi bem -sucedido!", - "9a962a24e9b7b07800d6b7c7efd86f30": "O nome de usuário ou senha não pode ser inferior a 3 dígitos!", - "7eb904262649f9b2e4ba52e2bba9db71": "O formato de senha está errado, não use símbolos especiais para os dois primeiros dígitos!", - "492c7f01035f1cf9b88756f897f02b87": "Erro, o domínio primário não pode ser o endereço IP!", - "0a2b8c4a98495f6af19be9c1c342844e": "Conseguiu, teste o programa JSP!", - "49281f9c7680652b1d110625da5c8cca": "Tomcat Mapping fechado!", - "ec3b07b78fd4f3307c84858957ddbd0f": "Obtenha o caminho da execução do site false", - "02e602e968050352febfc4ddcae332f0": "OpenLitesPeed não suporta definir o site padrão", - "613a6375944c3035efe735e87766fbbd": "A atualização foi bem -sucedida!", - "a7ea66c7a7ca61c727cf1ebe830ffed2": "Falha ao conectar o servidor!", - "6177805463a6a4f28e61bb3435bee13b": "Definido com sucesso, o site será interrompido automaticamente quando expirar!", - "1a69486f70b6baf749e6e1c4d5fcf689": "O sufixo de URL não pode estar vazio!", - "2f858201b6da6a5419c5af8fd26f815c": "O nome de domínio da cadeia anti-roubo não pode estar vazio!", - "f36c15e89d61e07fb44095ae920b8fbc": "Por favor, ligue o hotlink primeiro!", - "70dc560b6f4af6d210c9eeb8434c571c": "Os recursos de resposta devem usar o caminho URI ou o código de status HTTP, como: /test.png ou 404", - "aa8722f512ecebf5dae454e526402508": "Por favor, ligue o anti-roubo primeiro!", - "bd0d7585c64988d80747a32fb0e3e15e": "O log está vazio", - "0d0d87a34e787b2f4a59d912d4d441e4": "O nome da categoria não pode estar vazio", - "c4f16bb3d87b92062f73954c86485f64": "Adicione até 10 categorias!", - "5fd53f59be2a3dee94df28886840b9a3": "O nome da categoria especificada já existe!", - "1c44b4096bb88e459ddadef895bea1c2": "A categoria especificada não existe!", - "8f52253b1f007fd14ed0f60b89593d2d": "Categoria excluída!", - "6818a5095a78431eb3c99fe022b687b0": "O nome da categoria não pode exceder 16 cartas", - "8d5a0b5b1a1c8691e1c0918e5a4da1a7": "Esta função suporta apenas nginx/apache", - "71ccc3a25f49fdbe883488707ac1187e": "查询 , , 不 存在 的 地址", - "7ac0a27b48f2931c7f294b996fe6b273": "Erro analisando o arquivo de configuração", - "ee3a15a26aee235ac255e37342b444bb": "Configuração com sucesso", - "29faf053a22c387532298233399e66f9": "Erro de análise do arquivo de configuração", - "79799f8c2f024685df774550ea5b427d": "Site [proxy, redirecionamento, http para https] não estão configurados para reiniciar automaticamente", - "6c881e76c76b1f102bcb97a8b4f682f6": "Este site ligou [proxy, redirecionamento, http para https] reinicialização automática", - "13fc1b8a101214be1a472db8de1bd8fd": "O site desligou o reinício automático", - "bff0e83714a9073c270776c37cc64791": "参数 错误", - "1fb58c8e2967a648359d13aa22d9e493": "O site não existe!", - "da07d14105efb3ba634c1d35618447ab": "O parâmetro está incorreto!", - "ea2b2676c28c0db26d39331a336c6b92": "começar", - "ef399b2d446bb37b7c32ad2cc1b6045b": "parar", - "0b12c9f33fde8b15970c7390c54d7ca5": "Falha ao fechar o log", - "b55eed05ce4922d8a6c881f0f2b05bbf": "definido com sucesso", - "2e828c10c1802fcfb4b8cabf63941c95": "Já existe", - "d4ac5985eccd334896e3cf23706e43b0": "Adicionado com sucesso", - "d24776f54a44056b81759c279541eaa1": "IP não existe", - "c377bd51882c2de13c05f3fd77364d1e": "Abrir com sucesso", - "4bd6cd0bd1b02515d1f2a1ef87840fb6": "Fechado com sucesso", - "c4ca4238a0b923820dcc509a6f75849b": "1", - "0eda49d395586a0e870e7da49c5bc640": "Erro: o arquivo de configuração de configuração do SSHD não existe, não pode continuar!", - "10ebe4455acdf740afe863011118db72": "A opção SSH falhou", - "021210c97d1980259846f925154cd17f": "Método de criptografia errado", - "35011518f3d61995df94ae0f52ce71f2": "Aberta falhou", - "d9a55194048476c17552e9355a257855": "Cancelar com sucesso o alarme de login!", - "cdc36eac77de70b19abc76387b634df4": "Este tipo de envio não é suportado", - "a58320e783e827f26bcf2a246b8983b1": "错误 : sshd_config 配置 文件 不 存在 , 无法 继续!", - "ba3811adeb131e9c127f72a3e07000a7": "Desativar com sucesso", - "109ff77e4cc09bb260a8603d0f56321b": "Erro de passagem de parâmetro!", - "d2e5be778eb1cc374dbc6241f9a74aac": "FILE -chave não encontrado!", - "d187c9f82e81043dea37d92457d7b940": "清除 排序 成功!", - "8611f56e253646a455ceeb020052fa97": "Falhou em modificar", - "5bf31cdecebf4cba00879d9088cc0a2d": "Instale o serviço puro-ftpd na loja de software primeiro.", - "53233c1f083feff5285b9544b566dcd8": "O nome de usuário não pode conter espaços", - "98ab552039d582462abab98bf1346858": "Nome não pode conter /\\\\:*? \\ \"<> | Símbolo", - "85305ee6be0f078791c7437ec54dda12": "Falha ao adicionar", - "49b236322476b6e7baf65369b4b61565": "Del_error", - "e274abcaad0a7fff74d9adb67e578d5f": "Falhou em excluir", - "977bb0ee804c260d3a00b2b36e161c34": "Por favor, insira um número inteiro para a porta", - "20b4593b7de7ef359c1a0269f83e896b": "A faixa de porta está incorreta!", - "a3ccdafa1b1c0701991598cb4b2d9036": "A conta FTP não foi configurada", - "4a743f34ec3bb93a8ad7cb4d36a17308": "A conta FTP não foi configurada 1", - "195822d3b030f5055e98e823153daa76": "Combinando várias configurações, esta operação foi interrompida!", - "11927e516f4d83a37e6dc2b52f1c9a3c": "Edit_error", - "bef28b813bf12be3924925bbb62883dd": "Executado com sucesso!", - "fda63bff3e0143980e5761376859b00b": "A execução falhou, verifique se o Apache instalou", - "742096f80d8e7cf31085f9dc73f0f97e": "Erro de configuração da regra do Apache:
Falha ao ativar:

' + resultado [1] .Place (' \\ n ','
", - "6ed577cdce37bbd9c66871ac1677dc53": "A parada de serviço falhou!", - "c7138b4b5f7ded833942aef4e230771d": "Comando enviado com sucesso!", - "d56f0ed99825b4d62ab84753a65f7f1e": "Painel reiniciado", - "ebdcf538e79de6922f498cc8c735eab5": "O firewall do sistema não está aberto", - "a296add6341b715925c0be2b83514ee3": "O endereço IP que você inseriu é ilegal!", - "3433b9709eed7423f1900061ef743af6": "Desativar este IP fará com que seu servidor falhe", - "57e7b2320dd3984312335605d57ee0f8": "O IP existe na lista de blocos, sem necessidade de repetir o processamento!", - "4bb8df740a7119979ff7854d034200a8": "O endereço IP é ilegal!", - "ff9c66f005c08efd15752fb261057b46": "O intervalo de portas deve estar entre 22 e 65535!", - "b26b09909c3b090f31dba4a0986e1b84": "A porta existe, não há necessidade de repetir o lançamento!", - "408f58c25fc55295236fbb64a2d884ff": "Falhou, não pode excluir a porta atual do painel", - "d0749aaba8b833466dfcbb0428e4f89c": "SUCESSO", - "3b144e13d2ee7af72b5b81e21a935a2a": "Não use porta padrão comum!", - "e06d1ba70f1331e9f9a113cc2f887d3f": "Não autorizado", - "6c89f438bb1463ecd92f1832d0aaa277": "Código QR expirado", - "a11371c8ae1f6978f0dd88d0bddaa1be": "Digitalize qrcore com sucesso", - "ab9f853a311a37b0fdc50cdfb4e7ac05": "O login falhou 2", - "735ff2bcf3bc80998a077ba01d50ab8c": "O login falhou 1", - "3dfca5981995cf406aed48842d0e44ba": "Desbaste!", - "5b0308d8fa9b2acb17601e300f789005": "API não está ligada", - "55c294cfb3e6b69997d8b5cf04369914": "Telefone não ligado", - "13b08ce52b782ebdc94a64637cd3c992": "Aguardando o código de código de digitalização do aplicativo 1 Login 1", - "21d947c00f0d5b4ca710f7db100b8af3": "Aguardando o código de código de digitalização do aplicativo 2 Login 2", - "ed8abe55f77bc3512706869b791aa8f0": "当前 二维码 失效 222", - "0b1c93d38c86c8d379886293cdf8ba66": "Tarefa cancelada!", - "9fdd777388a418cef77bce46c1b2511a": "O formato de compressão especificado não é suportado!", - "4fa407ee74026903dc3013d0b2471eac": "A compressão foi bem -sucedida!", - "ece43dcaac9352f58c422e500266a927": "A descompressão foi bem -sucedida!", - "ac4eb62573e34c36ff426c8a6360c781": "Erro de backup!", - "438ca4ffcf6fbd44ec129e73a24f0deb": "Selecione o arquivo SQL/GZ/ZIP!", - "0edfb4a54d6cf45209a6c7929b8b9919": "Banco de dados importado com sucesso!", - "48c877827e48d31209338985c135f438": "Php_not_found", - "e649cd842085301ff7921625076905fb": "O nome do banco de dados não pode ser mais de 16 caracteres!", - "a0813a2a76fdb183b1b15f92221b404a": "O nome de redirecionamento especificado já existe", - "5b35ea4807e1b63678ff55b391d9b39d": "Selecione o domínio redirecionado", - "a971e4ab85bfbda4fb6b1d57c1c8ed7d": "Por favor, insira o caminho redirecionado", - "24caf5e8cbacea789aa9ce1f06053adb": "代理 目录 不 能 有 以下 特殊 符号 符号?, =, [,],), (,*, &,^,%, $,#,@,!, ~, `, {,},>, <, \\\\,,', \\ \"]", - "664d009c794ec236879112599b14a697": "Selecione para onde você precisa redirecionar", - "e63cd7427eff8a5cb737dfd1118f11ff": "O site não pode ser acessado, verifique se o site está funcionando corretamente", - "2f0e4710a58107860d6332f0d0192ba9": "servidor web não instalado ou desconhecido servidor web", - "79ec80b46087125542314cc116850dd4": "404 Redirecionar conjunto com sucesso", - "552513ce5bfd7c87187f462f71263a08": "% s
' % public.get_msg_getText (' Desculpe, algo deu errado", - "9ef5b3575d4c2024222ffe32e7024ab9": "Redirecionamento antigo limpo", - "514fcff31fc3b35b764c1c9b439a349e": "Redirecionamento suspenso", - "3b108349b93f7c8c4e2346f8d48c092a": "保存 成功", - "a72754d202cd0b311b58e71e3f61a79b": "Remova com sucesso", - "6c5018491271049dfb28d4eaca5c05b8": "Lançar a configuração já existe!", - "b7526fc6f8b21e71ea1e290a982df4c9": "Criado com sucesso", - "95b74eae33bf38472127f1895e100f68": "O formato do nome do item de inicialização está incorreto, suporte: [a-ZA-Z0-9_]!", - "917297554206e682bc2fc3d0e942d812": "A configuração de lançamento não existe!", - "b9e6a581c8bda90f8722c4210f9f1d26": "excluído com sucesso", - "192c0d1fef1fe1536e84a5e61df898bf": "A configuração de lançamento não existe!", - "024e23842baaaaa0342604dee854b73c": "Não correr", - "38950dde8222e03087c13f7edb464126": "Incapaz de obter informações do processo", - "b55a6e4ebb6e988c6d46840ca6cc3315": "Incapaz de gravar no arquivo, verifique se o endurecimento do sistema está ativado!", - "685689743579a8f09fcec5d7df04e39e": "O nome da tarefa não pode estar vazio!", - "a5c04aced897c770105858268324b53f": "A tarefa atual é desativar o status, abra a tarefa antes de modificar!", - "08a1ce771119bb393fa49478216ae809": "O log está vazio", - "b8fd4dbe5c3650beaec0a3d44d7f0245": "Toras esvaziadas", - "ff47c70e853d0b3635935be883b018e9": "Falha ao esvaziar logs de tarefas!", - "e0c4da1afd18acbb66bc5fac261a42ef": "A tarefa especificada não existe!", - "38fa2d4f8f9a13062c0c9007d97f6a84": "Falha ao ler o arquivo!", - "f57d5686d9dd67f0e81924de8d13af95": "Tarefa foi executada!", - "0a7b427205be69137ec0c34b0daa2808": "O servidor especificado não existe!", - "9181efe701ab213f180e21134c3ec784": "O banco de dados especificado não existe!", - "a807692f816811dfd0a39636671636f6": "O SSL não está ativado no banco de dados, abra -o no MySQL Manager First", - "8b2e1449f33eee0bfa85c4371934c09b": "O nome do banco de dados não pode estar vazio", - "dabda9e25d8947d0cc2f77315f88d7ae": "O nome de usuário do banco de dados não pode estar vazio", - "ee0b424e76ee035ae4b49ab73fc9cfb1": "O nome do banco de dados não pode conter caracteres especiais!", - "95ad503eed6fabffe114016f288aa996": "O nome do banco de dados é ilegal!", - "62fc613c65110582f6483d5331e13dda": "O nome de usuário do banco de dados é ilegal!", - "1289763e4f4017915b90fc7f6d64f278": "Banco de dados existe!", - "ed9386a8a2244478b48c442f1641d8fe": "O nome de usuário já existe.Por razões de segurança, não permitimos que um usuário de banco de dados gerencie vários bancos de dados", - "94e51c3dd2ab4957c6fc864b28236ad9": "Se a permissão de acesso for [IP especificado], você precisará inserir o endereço IP!", - "5ebea5e082e9347c1055620d1a925edf": "Falhou ao conectar -se ao banco de dados especificado", - "df2f36f9a17ef3ae6d7d61f10feae2c0": "O banco de dados especificado já existe no MySQL, altere o nome!", - "abf15f63af718dd9eab47991f728b039": "Abra com sucesso, entre em vigor depois de reiniciar manualmente o banco de dados", - "ea8dca4dbb80a367725ec532356d4ad1": "Erro para conectar o banco de dados, por favor, verifique o status do banco de dados!", - "da422f411f10ca19fbfc0c49d7b27279": "O MySQL Root ou a senha do usuário está incorreto, tente redefinir!", - "99e3ce74a83862e58ec4ef7c7e141aae": "O usuário do banco de dados não existe!", - "a6c2bafea90fd4f58496b7de0c879daa": "A exclusão do banco de dados de escravos falhou, o diretório de dados não existe!", - "c5352c3364b49f09f07e517d6f5e2a93": "A execução falhou, tentativa de reparo automático, tente novamente mais tarde!", - "db548c645b7e4e30814165cd703be4cc": "Falha ao mover os dados do banco de dados para a lixeira!", - "06e6d1c8954814a2b29d4b4372b81b59": "O banco de dados foi movido para a lixeira!", - "3709ae738cf2d6d0c179d816c02c66ae": "Existe um banco de dados com o mesmo nome no banco de dados atual.Para garantir a segurança dos dados, pare de recuperação!", - "1381dce91057a208e5a3e202526fbf6e": "A recuperação de dados falhou!", - "0f6b8bb328918f160baf00077eb21846": "A senha raiz não pode estar vazia", - "e6271141086fae7863bfe1d5b6ac3e24": "A senha do banco de dados não pode conter caracteres especiais!", - "5acf42ae8ac3a8558964691403e32ead": "Falha ao modificar, o usuário do banco de dados não existe!", - "10b75740108b26c220eb7e9bdfe18182": "O arquivo de configuração do banco de dados falhou ao ser verificado, verifique se o arquivo de configuração do MySQL existe [/etc/my.cnf]", - "98925ed54b314b48c7584b73affb9556": "A senha do banco de dados não pode estar vazia", - "4d15b1b40d88837aa34b5fd3c5cf1cce": "Tipo de banco de dados não suportado", - "39120f2e6a6a039741500e300f1dfe5f": "备份 失败!", - "d30de818714c05511e9bcf3333bcc664": "Database_input_err", - "12c37754d1604dc1b9154eee1f460efe": "A sincronização foi bem -sucedida", - "85b08b086888f8ee2680ddd3398f3574": "A sincronização falhou", - "712d5c60bf965a53ad98f51a18328fb3": "O comprimento do diretório de dados não pode exceder 32 bits", - "b6c2b300fce65a2f92364862af7f0358": "Símbolos especiais não podem ser incluídos no caminho do banco de dados", - "8dfd382b72c921093f5a3301b74def8e": "O mesmo que o diretório de armazenamento atual, o arquivo não pode ser movido!", - "cb458646a9e62deb6d7989de0029f17a": "Banco de dados movido!", - "cfcd208495d565ef66e7dff9f98764da": "0", - "a030c44033df4fd3ed1e860220df8d65": "Desinstale o plug-in de replicação do MySQL Master-Slave antes de fechar o log binário!!", - "22875aa10a21e1f51ae93cd2ee20fa07": "innodb_log_buffer_size não pode ser menor que 8 MB", - "c7846dcb854a38c1e2e62793d648c0a7": "Erro de senha do MySQL!", - "586a19c1eeaf6fe9d57f1d894fc487fc": "O arquivo de log não existe!", - "8435eeb739684eaee648c5ddb368543a": "O binlog não está ativado ou o arquivo binlog não existe!", - "b1dd73e742e604bdbb83829a41c6846a": "O status do MySQL é anormal!", - "c5c74be29ca306d24bddd4f6031d0220": "Parâmetros estão faltando!dias", - "2e3b42799f015adb46c85d60b8b1d7bb": "Limpeza completa!", - "048b0b74236019df8c9f2c0e9470765f": "Falhou em obter bancos de dados", - "34e30525f59e7e2202d51d1314c119aa": "Reparado com sucesso!", - "9133beb60bf19699376626515071105e": "Falha ao reparar!", - "84876979c316886c9143e5b895476405": "Falhou em otimizar ou já otimizado", - "b263d2d0b9a2fe2cb5ea3c37240e7fe7": "Mudou com sucesso", - "d72873c28781d7d42a8a50e344a38c65": "Falhou em mudar", - "e7e807310035d5b348cbf55c28df2968": "Faça de Ram do Trabalhador Falso", - "dc2e22fb7940c00998017d342198a9e2": "Obtenha o tempo de atividade do trabalhador falso", - "2d052af48937c6a8916f84a9a5d2a5e1": "Faça a data do trabalhador falsa", - "6880f4164c935867cecf3a89e8ac01ce": "Obtenha o detalhe do tempo do trabalhador falso", - "a3589163c43210f6d8f52f6a2d46823f": "OBRIGAR REQPERSEC FALSO", - "6dfcfe44b282f6a36ea2e487b583c543": "OBRIGAR TOTALACCESSES FALSO", - "d1448a41deace3e0a5cb3555cee67b97": "OBRIGAR TOTALKBYTES FALSO", - "1bdd788c6927c1fd0420ca6e2316642e": "Faça com que os trabalhadores ocupam trabalhadores falsos", - "f656a1e1c80cdf1eb1c63d3a0b121a65": "Faça com que os trabalhadores ociosos falsos", - "7a7f329389283fdd3290c735f90946e9": "mpm_event_module conf não encontrado ou /www/server/apache/conf/extra/httpd-mpm.conf está vazio", - "63400fbcab9ebc837e0e6a34a7e7c9d1": "证书 不 存在!", - "1432ed095c34a1fb4357d4a69223c05d": "证书 读 取 错误!", - "0007d170de017dafc266aa03926d7f00": "删除 成功", - "e048e6989acfbee4fa371b8be68e05f1": "O endereço IP que você inseriu é ilegal!", - "ec1d9ff2578e1f231696217b2c2d15ab": "Falha, não pode excluir a porta atual do painel!", - "517fa3f50147b216828f9aca9fd08927": "演示 , , 禁止 此 操作!", - "45db7159d9c542eb725f38a79255b33a": "O protocolo especificado não existe!", - "dd923e13e2389e764f7d833482dc58d3": "O email ou senha do usuário não pode estar vazio!", - "a72005cea9c8d0e8925115a09f62e834": "Por favor, insira seu e -mail válido", - "2b770a5bd35c0e286c6296f942990bf7": "Registre -se com sucesso", - "2bdacd9b8281d94958a8da4d29420926": "Vincular com sucesso", - "7826987ad3c4b2226b8f7a601657d23b": "Nome de usuário inválido ou e -mail ou senha!Por favor, verifique e tente novamente!", - "956e02d7073941eea4a679bba23fb449": "设置 成功!", - "10a1984f6c5b935c5d8c7d4b4345e1e5": "同步 成功!", - "b6601359f1ae1067d4c4d271b7407639": "同步 成功 1!", - "86da84e8e3aacf73ee745caee5904268": "同步 失败!", - "8ed30fe61ac59c9e1cb4a75d9a48d477": "Criado com sucesso!", - "330e51da1228a070540f82eb8e78155c": "Configure com sucesso!", - "3c8ad9e6e9c39de49294aa2db8630f25": "Nginx não está instalado", - "8bdafc47214a88c8cc4bc6326771040a": "A aquisição de dados falhou!", - "d84c752e17017ec4b4987497ce15dfd0": "Aquisição de status de carga PHP falhou!", - "cf6e5eb2bfedf2e0529a552c1017c21e": "O arquivo de gravação falhou!", - "e39bf0b6a74eb0459abefe075607833f": "Erro, não pode encerrar os processos de tarefas!", - "ca3eb6afad663b2881fababde6d59d63": "Por favor, vincule sua conta primeiro!", - "572e5703371c43aae299181c0e3567d4": "Por favor, execute o programa quando todas as tarefas de instalação terminarem!", - "df1f69a87b498b8b12c90be5a3b885db": "Download do arquivo falhou, tente novamente ou atualize manualmente!", - "7c769ceaad458456d4c3bc8276015a8d": "Permissão negada!", - "178d2e6a3f4abd4552188dcf36df7687": "Loges do painel são esvaziados!", - "99a0d283490c238c6faf2d0387dbcda7": "O servidor Web atual é o OpenLitesPeed.Esta função ainda não foi suportada.", - "0e656ce1afc98099f2e01e8f71362f92": "Por favor, insira o número da porta correta", - "88897967b12e6907309204ad6d0647af": "Por favor, não use a porta usual como a porta phpmyadmin!", - "e4859a777f8d4f300baf8fff0284fe81": "Não encontrou o arquivo de configuração SSL do Apache Phpmyadmin, tente fechar as configurações da porta SSL antes de abrir", - "7478cfa7a09bbe61467b07dea2e9721d": "Não detectou a porta que o apache phpmyadmin ouve, confirme se o arquivo foi modificado manualmente.", - "a168cddbe84613b0a468887d44e7eaf5": "O certificado do painel não existe.Inscreva -se para o certificado do painel e tente novamente.", - "c0c23cdf9e9329e576cfbddcc85666a3": "Abra com sucesso, por favor, libere manualmente o PhpMyadmin SSL Port", - "b7f3560235e37cebdbde7db33c3df64c": "Operação falhou", - "14c525aba20f0a52255a799f51ced885": "A lista de aviso não existe!", - "190045c03f9a72a1900c60d63e1e2b8b": "A ligação da conta expirou, por favor, re-vincular na página [Configurações]!", - "907fddd6007347a0daffc4a64156f0de": "Ignorar o sucesso, esta versão não será mais lembrada para atualizar.", - "7901466782835534ad8736db6ef1f5f1": "Key de login inválido1", - "f155037a804d9eb3e28318ac56b4cce7": "A chave especificada não existe ou expirou1", - "6eef9dff3428b19422dbbfe061fc8266": "Key de login inválido2", - "ea4dede6817ca735a9df32b4e63fd1ac": "Key de login inválido3", - "4682250bcbe96f4c0c59712ef1ff1560": "Key de login inválido4", - "8b4bcc31cc9ad0a259e17a1ebfcfb859": "A chave especificada não existe ou expirou5", - "c132c7b820d6b4d23038989f10dc7d90": "Tempo de validade do código QR expirado6", - "ab72200c3852bb7165e1e0d9456c5679": "Digitalize o código com sucesso, faça login!", - "d003e41a7688df391d78442602802077": "Tecla de login inválida", - "883102f20053b7b88799f5712192fcec": "Vincular -se com sucesso!", - "c332d7ea3375e567e1b586dfb79c2156": "Não é possível configurar a API através da interface da API", - "1a67cd008f15e0d8f07135998e116ede": "File_upload_success", - "e9fe2f4360929409c22f85b1648f384c": "Espaço de disco não suficiente", - "89af45ab166322b00f4301f0e57b44bc": "错误 的 参数!", - "5c97229e5cb4adbe5089c8b1ddd4d6b2": "O nome do arquivo de link é ilegal!", - "b40170992801cb3d6930f5649d1dfe4f": "Não é recomendável usar [.] no final do diretório, porque pode haver riscos de segurança", - "5dbee253e0c0010801afe5aa4a75076c": "Diretório copiado com sucesso!", - "1c209b0ee7e706650fc8d7577558262d": "Renomeado com sucesso!", - "717d5d580ae0c460998885cf68e4a139": "A codificação de arquivos não é compatível e não pode ser lida corretamente!", - "e9dc8cb01fc4c70ac2510a9ea7636d98": "Arquivos maiores que 3 MB não podem ser editados online!", - "58aef93ddbc22f703ceef78764598542": "Falha ao salvar o arquivo de configuração:

não modifique a regra 404 comentada na configuração SSL

Para modificar a configuração 404, encontre o seguinte local de configuração:

#Erro-Page-Start Error Page Configuration, permitido ser comentado 
", - "796a33e66e4f68f2f213e62c86064d67": "Conteúdo do arquivo errado, salve novamente!", - "32433489c03870de521a9e73aec03c2a": "Erro:
'+iserror.replace (\"\\ n\",'
", - "3e84df818633b978c88bf54f2272e3db": "O componente rar não suporta a plataforma AARCH 64", - "08f4aae44a9ffaffc3e72390e7ce2b20": "已 将 压缩 任务 添加 到 消息 队列!", - "903e9fbbeca62b94e7860c1739138f18": "O arquivo especificado não existe!", - "0c929407264ab24358bed16e6c6f393b": "Falhou em definir", - "fda9ea5dbc0c92ecc0e4e679a325d9d3": "Tarefa excluída", - "ff9db61cd735be695320e1842af8fc1c": "Não adicione repetidamente!", - "856c603181a38914ebd8d8831e6547c0": "Este objeto favorito não pôde ser encontrado!", - "b549591089f4dd8afe2ca56c0ae6b8bc": "O arquivo não existe!", - "c1ec45ad120cdc77fa4808961df88f6a": "Este arquivo é webshell [ %s] ' %get.fileName.strip (). Split ('/", - "7b05147a0e7962f52f65957a02be4ac3": "Sem risco", - "9edc346dd4486fc2b4c02557335a42dc": "Por favor, insira um diretório válido!", - "f9e2e9cec2f30ffac0609b0ef2d6c987": "Iniciando o processo de matança de Trojan.Os detalhes estarão no registro de segurança do painel", - "a830f1f6084a8274e7079a7be44e6091": "O arquivo de modelo não existe!", - "118f77feff598376a776af9b8e738efc": "Salvo com sucesso", - "fa67d9fb1543314f20fd8378dd70a1d3": "O nome do módulo não existe!", - "d9bf5d15a21059b1e0b24c9aa8790611": "A tarefa de push especificada não existe!", - "e1d9719c4816cb12250cc51b94483dc2": "excluído com sucesso.", - "c6f3b75129a45bc7481b3f65425afef2": "O parâmetro está errado", - "7b84e677e97bd4943a6639a22c1a1704": "Senha 参数 不 能 为空", - "5f3160e82bc0c5278923b609841e588b": "开启 成功", - "f288f8c23f8d03a699a49bf1fb8e7f53": "ssh 选项 失败", - "24513dc8c02bb021a1c944009c19215b": "开启 失败", - "8a3140f96ba5c5df5560d0bd27aa4cd8": "关闭 成功", - "8d4d13a3836227d377455b5dc0256d5a": "Desculpe, o OLS atualmente não suporta esse recurso", - "ec3e16ff1cd800e523f731b41df3f426": "SSL_BTUSER_UN", - "68e5b651b8a03d3426ebe579b6277ad3": "Na verificação, entre em contato com o AAPALEL se a auditoria ainda falhar após 24 horas", - "e258cf596248ca4aa2e4e2f13330bddd": "Parâmetro ausente: orgname", - "16d3f2401cbbe53b161e39ecdf231835": "Parâmetro ausente: orgphone", - "a3f1cf2cf7b9ad3a2647dcc4ea53b6bf": "Parâmetro ausente: OrgPostalCode", - "f55e8a77d3d5e546dd17c9d390d0f6ff": "Parâmetro ausente: orgregion", - "7352f05f848f83458514f0831219268a": "Parâmetro ausente: orgcity", - "c8ebbfbfcd3f26ac1002b94108792064": "Parâmetro ausente: orgaddress", - "27080d6b8da669b86c02360fb57b8887": "Parâmetro ausente: orgdivision", - "a5400f9a88a3f15a80b0ff75fdc5864e": "Falha ao obter o arquivo de validação!", - "629a33ef099a4963a8e6e249f30c72e9": "Não conseguiu, tente novamente mais tarde!", - "580669bcb4613a94bea927ddf53f50f7": "[Force HTTPS] está ativado no site atual, desative esta função antes de solicitar um certificado SSL!", - "561835523e11275c474be160c1ad22b6": "Erro de verificação!", - "633f426cb9cb6957cf0166705091dfe3": "Erro de tipo de parâmetro", - "a27662985dec244948a7fd891fa209cf": "O certificado não existe!", - "3a68c964dedbb33eb3091b4945423351": "Certificado excluído!", - "ad1bd4960cc19a6639b0d31892e3ea3a": "Falhou em excluir!", - "e5c00995fa7d7901a1087b9605be1a30": "A análise de certificado falhou", - "db1d81b9d44158c60f1341a0cb9a532d": "Certificado salvo com sucesso!", - "2e3554148da9aa3efb7c11bb41680a5e": "Falha ao salvar o certificado!", - "70feb1290a735feedc5d1e01b3f19d09": "Não há certificado que possa ser renovado no site atual.", - "385fdc82de8819f151a0c8a6fba725ec": "O parâmetro pdata não pode estar vazio!", - "6e264f3408e9b769d3fb7e2c807f301f": "A operação falhou.Por favor, verifique se a chave está correta", - "92188d43af4373bacbf00951da16532a": "Falhou em conseguir o caminho do site.Verifique se o site existe", - "ceaefd9a46d78491b9fdb912b5c71eeb": "Falha ao criar o arquivo de validação.Verifique se a gravação foi bloqueada", - "1bb3608b1bc684c3dc85090db249346b": "Nenhuma informação de certificado foi obtida", - "239067c8e0586af7c09738e8240438fb": "A renovação falhou e o diretório de certificação não existe.", - "c7664672bf11463a4cc40c61aeca77f1": "A renovação falhou, faltando conta_key.", - "bd6995f087c0dacaecd470ca10539a2b": "A lista de nomes de domínio aplicada não pode estar vazia.", - "569488d54cbcce1331896e4254f63a92": "Aplicação bem -sucedida.", - "be2d0d9f1a9d04ff22b70bd5bee9b8ef": "Ocorreu um erro ao solicitar um certificado usando DNS", - "fa57fd4dd2f47d6e5e076c347fbee513": "Site_add_err_domain_tow", - "67989149a6cb18900a8d4bfd990b395e": "Path_error", - "4f7e04eb8dba15474e74e11df0c02a13": "Configurado com sucesso!", - "aa8e78fa88d0bfaaf68110219583ba96": "Foi testado novamente.", - "e1bb08ea6a5543e3d7076c8dd55496c8": "A detecção falhou", - "621a965bba1442f39a3491d7442e968b": "当前 系统 暂 不 支持", - "5ec14542d76e320be548502216749b04": "扫描 失败", - "1df790ce75c2644b8d1a0708874340b6": "扫描 完成", - "ccf864247f7985a86e14f7fe4b9ce5a7": "Configurado com sucesso!", - "83fca103ffe22d911a49196e3065ff25": "Testado novamente", - "4ff3b49771b3e27d533b9f4757e8e405": "无日志", - "e50f043316845a08a945f69e097f1a54": "Com sucesso aberto", - "9bac3879208bc174db83cbf159528cc6": "Sem autenticação de senha", - "47615fee65c01faa2563c55350de8a80": "Ative a autenticação de senha com sucesso", - "679732c39dc813cb331ab3840f2409dd": "O sistema não é suportado", - "6d981b7b2e975f5b7717b27abe1f8ad3": "Falhou em abrir", - "db1cbd9059a4f043534a00142cdfffde": "Download falhou", - "7ac73ef676faaa8a5f8e3924b4d151e3": "Nome de usuário ou senha não pode ser inferior a 3 caracteres", - "88d8a4565feba5ad270c00e85564b96d": "OpenLitesPeed atualmente não é suportado", - "c1f8cf125da0d6db1c4e0d09033c9ddd": "Por favor, insira uma conta ou senha", - "bd7fb7b4280616cbe5de49eb1ee8cc3a": "Por favor, insira o diretório para ser protegido", - "8c48114518721e3966cd4553a0cee705": "Por favor, insira o nome", - "dd65d82f6868cfa127f86e5658674829": "A proteção de senha do site foi definida, cancele e depois definida.Diretório do site -> Acesso à senha", - "1cc6b0e84b90d0ca0b863fccc0f33b36": "Diretório foi protegido", - "dd7fcae8b88e39af06cf23a1c822d8d7": "Erro: % s
' % public.get_msg_getText (' Erro de configuração", - "afa29ddf9281626cc3c38c6916fc85f8": "Por favor, digite a senha!", - "c0e041994aa754afc78eeb7d7a733dd4": "A senha não pode ser inferior a 3 caracteres", - "f47761ebe7a90671002269fa583fd42d": "A senha não pode conter espaços", - "544373e5036db114055a7273925d383d": "Por favor, digite o nome de usuário!", - "80e16ffe250d19ec3484768a1ebfadb6": "O nome de usuário não pode ser inferior a 3 caracteres", - "e221dfc9ae035c5db6c115506cbb15ee": "Por favor, insira um nome!", - "123ae3bf1c245ce11cfa41ca10875999": "O nome não pode ser inferior a 3 caracteres", - "ecc99202a14e7eca326476cfda2e480e": "Nome não pode conter espaços", - "d80776d69dc2af608bb20a1c387632d7": "O formato de nome deve ser [aaa_bbb]", - "3f96c422b7a59fe6e8bf7531c647a64c": "A conta especificada não existe", - "cb5e7fdc51569eedfbf3a9a0d3c819cc": "A ordem especificada não existe!", - "8bd32b310825307a909c682871008642": "Ordem excluído com sucesso!", - "2b8b978f7f97a454d3be4cf4b1ea9e8a": "Leitura de certificado falhou, o diretório não existe!", - "a28e320cb6513b4ad7e9b07318173cb5": "Certificado revogado!", - "7c1bcdcad166aaaec98c557f8c12d2cf": "O arquivo de certificado especificado não existe!", - "22d9a8450558b9bf05b71c456bf07e4c": "Aquisição de informações de certificado falhou!", - "cc7bd98381615b01789afbd472cb8ed3": "O ID do site não pode estar vazio!", - "decd4452e2e4872aa81049fea69a0c24": "Site perdido, incapaz de continuar se candidatando a certificado", - "8aafdd14f862ba469d943eb6e52c7cf3": "Há um problema com o arquivo de configuração do projeto atual, reconstrua -o", - "bb1e256ec5acd23fe74fd0ec4f69eac4": "Diretório de site inválido, verifique se o site especificado existe!", - "5baab329a2a5a14995a13ce40b764f53": "Seu site tem 301 redirecionamento ,, por favor, desligue -o primeiro!", - "fc599fad703c68aafb8c9089927a2f70": "Sites com proxy reverso ativados não podem solicitar o SSL!", - "7991712d27c6b33afae7854e63cdcada": "O site foi redirecionado, feche -o antes de se inscrever!", - "1ac08c2976cb7a015cac826a21716e43": "Depois de configurar o Force HTTPS, você não pode usar [verificação de arquivos] para solicitar um certificado!", - "d1bd748a8cf1224225f51bb9487d024f": "Vá ao Software Store para instalar [Cloud Analysis] e preencha o nome do domínio NS Binding.", - "ea7887f6f54c03df77b9e7b7451c1a7c": "Informações de parâmetros incompletos, sem parâmetro de índice [índice]", - "a453af2e4da41ca8c5035d61b961c1ae": "O banco de dados não existe", - "ca9c87b1d4c2f8af80c61cf22e43250d": "Uma tarefa de backup já existe neste período.É recomendável que você escolha outro período de tempo", - "e0aa021e21dddbd6d8cecec71e9cf564": "OK", - "dc542b3a7ffb20d7a1fc0c2b35f208d8": "Diretório não existe", - "4cc4ddc196a295ee4ab82daec08f91a6": "Site não existe", - "9d1ee7d092060a4d3418a979fba5e46b": "Backup_error", - "8080ccf57df49ce6d4792cc5041be1b8": "Atualmente, suporta apenas a restauração de backups locais, Google Storage e AWS S3", - "6f3446d8579a066540c5d7e68ff05f0b": "Restaurar bem -sucedido", - "260ca9dd8a4577fc00b7bd5810298076": "sucesso", - "1cbb155db1ca49d77f886c41b7850b48": "Baixar erro!", - "f41a4952dfc4caafbed0a6afdd243bff": "Erro de certificado, verifique!", - "2dfadbc8b23727991de7eb9457f56252": "O certificado foi salvo!", - "7961d31b9b6db7593b5f8795273b5b64": "Falha ao solicitar um certificado, tente solicitar manualmente um certificado para o nome de domínio do painel na página de gerenciamento do site", - "96ee8f18814766fdf066df97d3e1f6ea": "Você precisa vincular o nome de domínio ao painel antes de se inscrever no certificado Lets Crypt.", - "90d0982f5d024da53b21f69d3f0c8cbb": "O banco de dados não existe!", - "b376175f0c97d2ab7c37e44ec3b3a1b9": "Não apoiou MySQL5.1!", - "238865a1f3c33fae77a59ce42a641346": "Por favor, preencha as informações completas", - "bdd1b7bb74543fb0fae1e75f372551d8": "Falha ao acrescentar, verifique se o URL está correto", - "1cb8f68ece43505dde623d0e297426ac": "Conjunto de notificação com sucesso", - "557738e2e8b82bbb847ab9ecc6d83c8a": "As informações do dingTalk estão configuradas incorretamente.", - "3781473f4af411ebb3610977e7275a3d": "Erro de configuração do DingTalk, reconfigure o robô DingTalk.", - "16ff838f760194a432da12e9bb4895d9": "O envio falhou, verifique se a configuração do remetente ou as informações do receptor está correta.", - "203b93a974c7142ca4b203443af817d9": "As informações de email não estão configuradas corretamente.", - "9bd45853e9c7cca825b227f1472901c8": "O nome da nota não pode exceder 7 caracteres", - "ed702c2212ce3c1acf4b5435100b44c2": "As informações não estão configuradas corretamente.", - "14e1e77b50aaf60272775c43894560ad": "As informações do telegrama estão configuradas incorretamente.", - "39ddfbf65700efc9a7d16b22ebb867f3": "Erro de configuração do telegrama, reconfigure o robô.", - "691e87b47c012051a2e82b3c87a829be": "Enviar resultado completo, envie: true.", - "c13967b1cbadeb9e2138223c0ed9fa0d": "Enviar resultado completo, envie: false.", - "8b42e24f005c452259add632215a77a8": "A complexidade da entrada de segurança não é suficiente
1, o comprimento não deve ser menor que 9
2, combinação digital em inglês +.", - "9ad1940cfc7c1786a62bb3d784420413": "Operar com sucesso!", - "c8c7de7f5b740307d55affea39b79993": "A configuração foi bem -sucedida", - "75983b18d2ecbb82d71afea42138a28b": "As informações de ligação ao usuário não foram obtidas", - "f9d875367d71359c197b5fe0894cdfa8": "O link para a nuvem falhou, verifique a rede", - "4ad85d46374d522bcd3bf2eff2cf2600": "Nenhuma informação do usuário foi obtida", - "94418c3f275f6e8bca8e35751495f370": "As informações de Feishu não estão configuradas corretamente.", - "13341a871fc817c77ee365fed82b0f0f": "未 正确 配置 邮箱 信息。", - "aceb96ce4932e8d1b58640af7121d05a": "发送 , , 接收 者 不 能 为空.", - "08fdcaf66e5e5cbfe01d5eb344686b63": "FILE_NOT_EXIST", - "4a58aa387fa733c13c1e816289868024": "已 添加 到 上传队 列.", - "7536a2361cc0d72fd2d1ce4e74949d45": "File_not_exists", - "fcc4567e6dc94c976c8102ad28bcba99": "Não_zip_file", - "058ed1d23eca2bad24689263c908ef55": "Arquivos de arquivo rar não suportam a exclusão de arquivos", - "870d81669cdce17f6608da73eb7922c5": "O Arquivo RAR não suporta essa função!", - "1f2b40ea67976821d6af3e76acff3113": "Erro de passagem do tipo de corte.", - "55380aa906c3928200204a7e96b8c577": "O número de cópias reservadas não pode ser menor que 3.", - "06482fed33b3694a3fa3d64ed4f8a61e": "O tamanho do corte não pode estar vazio.", - "98b0d6aa49d26a727cb0dc818e053372": "definido com sucesso.", - "518f4b70a957a8d71989682303d3347c": "FILE_COPY_SUCCESS", - "249c1420f04f333d99def7232efde467": "File_copy_err", - "b58f83b7c94925bdedf78d01304af4c2": "Arquivo ou diretório não existe.", - "1a113550906df694b005f7e39c5be59d": "Conjunto de sucesso.", - "98008ecc1b74ac6a36e94c0731136bfc": "File_download", - "70225f5038f2c7cb69db4656162a6fbd": "Arquivo excluído com sucesso", - "481ccf34266a8d6c9d03039824aa483b": "Arquivo escrito com sucesso", - "2e48b30735e60d3d11df7247375c615b": "O arquivo foi descomprimido com sucesso", - "eb2a4ab7037f0f3d6483fb8d632e06c8": "Arquivo de pacote compactado modificado com sucesso", - "24e271800e65d36040652ccd3dcf173b": "Não é um arquivo de arquivo Tar.gz válido", - "1fda77eea4b98631ac475c46499d6275": "Editar fracassado!", - "757bd92f03a7906e5737a49f5dce79ec": "O arquivo foi descomprimido com sucesso", - "400fbd43b699e4d8ce0780625f6b2cd4": "Por favor, insira as palavras -chave da pesquisa!", - "f6ffe3563260b9a7ce7110ab962cf77f": "O diretório de pesquisa não existe!", - "5ff082a692a93d7aff84fffe2515e9d9": "Nenhum log de erros", - "5efde395239afdd2df0b9a32c159768f": "O MySQL não está instalado!", - "dacf49abac88060f508283464e6488b3": "O arquivo de log não existe!", - "6bfd22d9b1190dd6f3252ffc5f07843c": "Instalação bem -sucedida", - "9ce49cccc03f08a6f144e6b2951065ca": "instalação falhou", - "6ec9c7ee4154392f5dcc682fc786e84b": "Comando de controle desconhecido!", - "4b59d0cc86b830af1f7684eefef0d845": "PORT_CHECK_RANGE", - "5e7e12a9b6e99a5a546876ca7b61e4ad": "Firewall_ip_format", - "e55c44fbd41784b7731f71e2789cad65": "Add_success", - "330683b7ebc12ef31c9b1c21b95f9d92": "Ative o firewall antes de prosseguir.", - "a3c72de16808f111cbe7e4c6dacc401b": "Del_success", - "4fe093af429d1f1fc2198447a1025931": "Erro de parâmetro", - "03460a8fbae274ee5f04e0ba1fa34812": "Os recursos atuais são exclusivos da versão profissional", - "35c9657c6576e84644303a7ad43318f5": "O nome de domínio é resolvido para um endereço IPv6 e as regras da porta não são suportadas.", - "7f17f95382055aefa5d3e915c72a98d4": "Por favor, insira o nome de domínio", - "2edad93b0f08e091c3cc25470e8ddf6f": "A resolução de nomes de domínio não foi resolvida ou a resolução não entrou em vigor.Se foi resolvido, tente novamente após 10 minutos.", - "4fb42cb76f14ea60b67f9bceb6c4a49e": "Todas as regras de IP foram removidas.", - "0b3157eba7dd3451bc0de1c6ca480ec2": "Operação bem -sucedida", - "932c825a6aee54ff754f33c628cd90bc": "Esta porta já existe, não adicione novamente!", - "3cdc0e6cbe36c89d83cc097e8eb9ae0e": "Operação bem -sucedida.", - "c49175dd1fdb203713f6c1476a7f91b3": "Comando de controle desconhecido!", - "b557d15011dc753ba4f0c8207ced5079": "Ativar 'se get.status == \"Open\" else \"desativar", - "8d66632de28752245beaa40b1ccc1cbf": "Desligue o encaminhamento da porta", - "f8bacfec9ade03b0f3584356b898fca8": "Adicionar falhou", - "eac00ab48eb660db9a0929e6f036ecf2": "Esta área já foi adicionada, por favor, não adicione novamente!", - "805139d226669cfd0320c760cb10e87c": "Por favor, digite o nome da área correta!", - "969a6c87a281f49bd8fc2c1e43f66ec4": "Operação falhou", - "b4cbd781c2881c2884884b03b26f620a": "Add_error", - "8e7387f80c2d22c7515b38afef01b9c2": "Erro de passagem de parâmetros, passe no campo da porta", - "926dba790adb1d53c53941a06ccb2da7": "Porto não pode estar vazio", - "705c5fd65ddbcaea039c3aa2f5e135ee": "Portas de alcance não suportadas", - "84cd1055b1130ac448baec04de07d986": "A porta deve ser numérica", - "7d134add7af4d8e6fdf31cde8332da30": "O intervalo de portas é 1-65535", - "85056ee18e1ac6fefa9f955da5a155e0": "Fail2ban Plugin não está instalado", - "dfda9d0c9d44e155e4125ebccfcbea99": "Desbloqueado com sucesso", - "0b42e1a1e6fb36c4c2153ee205049f67": "Firewall_ssh_port_err", - "5043b4dd5ee84b81c695150ce7b71a1d": "Por favor, não use portas padrão para programas comuns!", - "ad70094b72ba945410e79407b37d02ee": "Edit_success", - "6ed05063a343a4a8c2fb6bb191f57644": "状态 , , 跳 过.", - "29833bee6957ec87ae7e9f81346a0929": "服务 未 , , 跳 过.", - "f99d5d784d98d4e59b100ffb596fbc9a": "一 天 推送 次 , , 跳 过.", - "2e11d603b68f16cce28a92f1fee630d4": "永久 , , 跳 过.", - "887755b06aa757db733fcdb5c4b90d8e": "未 达到 , , 跳 过.", - "944ec5555dd02ca9855e2aad5f31ecc3": "未 找到 证书 , 跳 跳 过.", - "d7316ce06449be2b2961a61bc8b90044": "O intervalo não é alcançado, pule.", - "b388dbfa7884f3af33ba7551726ec631": "O alarme de login do painel suporta apenas um modo de alarme.", - "b5db9d7f14a728ef1b07894e6c776f4b": "O alarme de login do SSH suporta apenas um modo de alarme.", - "cbcde9242de40f0cc518436d69e567f8": "Não suporta suspender o alarme de login SSH.Se você precisar suspender, exclua -o diretamente.", - "f03b55547b4adc9333d232a1cb83e437": "O SSL é empurrado uma vez por dia, pulado.", - "a0e74493945a50b77b66297bf41b1168": "Nenhum site disponível.", - "76670478dc410ea9dac92449744be0f5": "Falha ao obter informações de atualização.", - "c46efda9f9b8b41255ed3bc215bdb2fc": "Empurre uma vez por dia, pule.", - "5a7e11fe74ccbd5275a23cd8eea35d81": "status normal , pular.", - "6ca2675195e92143f625d036f2f9cf39": "Serviço não instalado , Pule.", - "7fa2732a0c267c57a13aeab79cc50677": "O limiar não atingiu , pular.", - "d3c3a9bfb08603870aed3d34085f21ef": "Certificado expirado não encontrado, pulando.", - "8f17aebb2889752cf3c60ac571167c8b": "Nenhum diretório de proteção especificado", - "b0186e5e273a163a78c04376a5756b1e": "O diretório especificado não existe", - "178faf4b16b565602375d71e7870fe73": "Database ['+data_name+'] já está na lixeira de reciclagem, por favor, restaure da lixeira!", - "35936286a74058c49c309b2a7b6bcc27": "O nome de usuário do banco de dados é inválido!", - "e2d70330883c9001c29e0225b6c99e9c": "O nome do banco de dados é inválido!", - "41f18553a11adc5fbacbe1d0cb53cf3f": "Database_name_err_t", - "ac188694f0bee170c27f2e63db985bda": "Database_name_exists", - "0667c3c8ef82f94545b286b69ef83030": "Erro de parâmetro passado, tente novamente!", - "4621e9c9b573b1bc868d310934d04cac": "O servidor remoto especificado não existe!", - "c1f0a2e54f38603c731c9625f35aaa11": "Modificado com sucesso!", - "c14997f1be1d5e4fe6299f628fb4ae04": "Database_err_mysqldb", - "94bce4b2a745d07c681c29af6824d435": "A conexão com o banco de dados cronometrou, verifique se a configuração está correta.", - "34fbe37d35b2a1bc1a58bdcc559be395": "Erro de senha do MySQL.", - "3d28138b07e32fc589d1a654980b1c28": "Excedido no número máximo de conexões, tente novamente mais tarde.", - "f5f1c56c404d98779a4fbe5630f7d778": "A conexão do banco de dados falhou, verifique se o usuário root está autorizado a acessar 127.0.0.1.", - "db6312fd8aeed0c0dd3abaa5510baeea": "Database_err_pass", - "e4ab2cbe2965dbfdb5c8ea7f9cf3211b": "Database_err_connect", - "7816f2893fd68a570c28648231a91c8a": "DATABASE_ERR_NOT_EXISTS", - "b99ad6bb4ca9c32cc31655c1f26ad347": "A conexão tem o tempo limite, ative manualmente a função TCP/IP (menu Iniciar-> SQL 2005-> Ferramentas de configuração-> Configuração de rede 2005-> TCP/IP-> Ativar)", - "734539622328115b6a79770792621598": "O banco de dados especificado já existe, não adicione -o repetidamente.", - "2ff54c9774281fd464a75fac44b2bbee": "Permissões insuficientes, use o usuário root.", - "d4e4cbdf86adbbf8338c46fa850b0d97": "Criar falha, o SQL Server requer suporte à GUI", - "011f5bc126ef873c518707207467b8bf": "O serviço MongoDB ainda não foi iniciado!", - "22ccd99629b3c3d5a8533884821f4189": "A senha do banco de dados não pode estar vazia ou ter caracteres especiais!", - "c976dec7ee3b051c53f9761bd9aa73c2": "A senha do banco de dados não pode ser chinesa, altere o nome!", - "282a7d2dabc5b37dfe75dc697dbbacae": "Tipo de banco de dados SID precisa do tipo int!", - "e1fa0193b4a126d332026f2c608681c9": "O nome do banco de dados não pode estar vazio!", - "5c58f12f149b01b546d97b25b95c0df3": "O banco de dados especificado não existe.", - "477915c8ca573c6b7cd244c4d0e6c904": "导入 路径 不 存在!", - "fd7f1b632dde768d9c3309545010d65f": "仅 支持 导入 压缩 文件!", - "c3522356d75eaa63da51f2c2f6c9bd84": "Falta de ferramentas de backup, instale o MongoDB através da [App Store] primeiro!", - "2e36f9ef630e2714cd71fe91d4e8bf15": "A autenticação de senha foi ativada.A senha não pode estar vazia quando o banco de dados é backup.Defina uma senha e tente novamente!", - "d28fa16e1236163fbc5787469193f18f": "O backup do banco de dados falhou, o arquivo não existe", - "2a389cf13e591eb8202af139c82a762c": "O backup é executado com sucesso, o arquivo de backup é menor que 1b, verifique a integridade do backup.", - "ae1110dd560e4e7968b297620be7ea36": "Backup_success", - "37ef1150b54080db22f4de766c00a902": "Tipo de banco de dados SID precisa int tipo !!", - "bb372e9b5c377f89809981e38570e41b": "O serviço MongoDB ainda não foi iniciado !!", - "1a80d7a1efd89c63a3f8f33bd9b07397": "O tipo de banco de dados SID requer um int!", - "e36f515323b0caa721c681b2d378a695": "O serviço MongoDB não está ativado!", - "a8471468b30261458a4a3f6509348563": "Modifique a falha , O banco de dados [' + nome de usuário +'] senha não pode estar vazio.", - "d9533af3481500e4eab2d71bc0d80f50": "A senha do banco de dados não pode estar vazia ou conter caracteres especiais", - "5e2ab00d16dbc00c7fc25cbade8fab26": "A modificação falhou porque o banco de dados especificado não existe.", - "e3d61b8e9ff54176be78612b4de00321": "O acesso à senha não está ativado para o banco de dados.", - "0e50ad3c23c4eb42db81e7ea3da4848e": "Erro de passagem de parâmetros.", - "9c367cb765f842bfe6a0465674b8d311": "A operação é bem -sucedida.", - "e9bc861d80a7d42ec15bcdb7e5529cda": "Restaure a falha.", - "b949f2f31ecdc2714448b254511fb797": "O nome do banco de dados não pode conter caracteres especiais", - "ff14e82e3d1041c3fe4986830981065d": "A senha do banco de dados está vazia.Defina a senha primeiro.", - "200e48e96725c9ce425d7dbf388cbb8e": "O tamanho do arquivo de backup é menor que 2kb.Verifique a integridade do backup.", - "42ea48e57900c1ca39c38b7740b156e5": "O banco de dados não existe!", - "d1b44799de985cad123821498285dfbd": "Database_input_err_format", - "f5905bb1f1098b37b11d1e1787296924": "Ferramenta de recuperação, use o gerenciamento de software para instalar o PGSQL!", - "3397a2bc97209578e6c113606a4c7b7b": "Database_input_success", - "ba32600a98bc2e63a7609dfd18f7a764": "A senha do banco de dados não pode estar vazia.", - "e7381be5e7f44708306bc9816f83481c": "Modificar a falha , O banco de dados especificado não existe.", - "7d354324037030e692b06b94f9d024c7": "Se o PGSQL não estiver instalado ou iniciado, instale ou inicie -o primeiro", - "a877289c330ccbad75d3674c560e89d3": "A senha não deve ser inferior a 8 dígitos.", - "b67d85c71006c071b58767216be65eb2": "Conectar -se a falha no PGSQL remoto.Execute as seguintes operações para corrigir a falha:
1 、 A porta do banco de dados está correta e o firewall permite o acesso
2 、 Verifique se a senha da conta do banco de dados está correta
um registro de liberação do cliente
4 、 postgreSql.conf Add Lister_addresses ao endereço IP do servidor correto.", - "0fbbe53688d144223b78036507d85b47": "Os bancos de dados SQLServer não podem começar com números!", - "27cfc7c44317601d8cbdc241c928d17c": "A política de complexidade de senha do SQL Server não corresponde, deve ser de 8 a 128 caracteres e conter 3 deles em maiúsculas, minúsculas, dígitos, símbolos especiais!", - "20fe68f46608aefa2c884b9390aa4cd2": "A importação falhou porque o arquivo não é um arquivo zip válido.", - "df4ac7366fa4fda98e94ea68f0e40d3c": "O servidor SQL não está instalado ou iniciado.Instale ou inicie primeiro", - "e340ecd20183fa25cd63e23e08fdc084": "A senha do banco de dados [' + nome de usuário +'] não pode estar vazia.", - "935e0f201a754f406575ec14bde54a21": "A senha de Sathe não pode estar vazia ou ter símbolos especiais", - "896543f6d67a62d4c594b28eeee3c923": "A senha do SA é alterada com sucesso.", - "5ff3a39df475716b995ae13aa8ce5351": "请 先 启动 防火墙 后 再 导入 规则!", - "fe69ff3993dd9d06f1891b538b6156be": "没有 规则 无法 导出", - "6e69656ffb626c2f108cb70f960e58c1": "文件 不 能 为空", - "d9523e347c0a2971241d3ac4120a2854": "文件 不 存在", - "cf36e08b3ff2cfd7bb952c062cc79f49": "文件 内容 异常 或 格式 错误", - "b6d16a8173dd0d43f580bc6882dc5e9a": "导入 成功", - "67abf11af36ac64a147218d125e8418f": "目标 地址 格式 错误", - "f6088e4ae24e551baa0f7a697b867695": "设置 成功", - "434f027ff1a807413707c94a43c9a578": "请 先 启动 防火墙 后 再 设置 规则!", - "7b6454aa962895f5d5147d035f91a0e2": "目标 端口 不 能 为空", - "229ce80f45424e882fdc5274cf37f295": "指定 IP 地址 格式 错误", - "444bcb3a3fcf8389296c49467f27e1d6": "OK", - "6e68a14dc03d5bc90eea5ca623dd61c8": "请 传入 Old_data", - "4f87808ff2ae8fa99b12357b7837bc78": "修改 后 的 指定 ip 地址 格式 错误", - "69be671786f62ce872f87de1ab761746": "修改 成功", - "fd643caf7884ce64697fb2a670cc3304": "请 传入 new_data", - "91166df490bd1ced7a0aac6daebc96ca": "目标 域 名 不 能 为空", - "af9a54527ffd3f962a61e34911f918dc": "目标 域 名格式 错误", - "7f9c4436cdf25844dcd0cd46b62c2916": "请 传入 Id", - "315208d3066fd1615ba13b698c0af371": "目标 IP 不 能 为空", - "ba797e05926242a5135289c98dcd9d36": "源端口 不 能 为空", - "efef8b005464719937a7daa96ed5b3d8": "端口 转发 规则 已 , , 请 勿 重复 添加", - "d83dadd8fcee6c014db8af454bc279fc": "Baixar com sucesso", - "4c87778ab71a4e47170ccafd6edb4922": "Site Fastcgi Configuração completa", - "8b266978ab5161642a2d95d3f03f3945": "Desinstale [{}] primeiro", - "ad626ac6de7ea412c9156f73b7666cd4": "Depende do seguinte software, instale [{}] primeiro", - "acf7b210e1f5fbdb2e24af573f0e1831": "Pelo menos [{0}] núcleos da CPU são necessários para instalar", - "d0c8fa89a1eccf8a377d11eea540fd0c": "Pelo menos [{0} mb] a memória é necessária para instalar", - "52e44340370925b110c7fba475b805e3": "Somente suporta [{}] sistema", - "e3b16d9e5a24c8d27578d7670e840200": "Depende do software a seguir, instale primeiro [{}]", - "a0405fa5f045a30ba3aeff1c65ad8c38": "Processo de instalação cancelado!", - "97ea48864552dd650a247ee84c819335": "
erro: {}
{}

{}
{}

", - "7e6168670b8c83eaf043f8416d404c3c": "A resolução do DNS falhou durante o download, verifique se a configuração da rede é normal:

erro: nome ou serviço não conhecido

", - "56da753a1257bfd353bd2445e47a8629": "Falha ao conectar -se ao nó de download, verifique se a rede de servidores é normal:

Erro: Falha ao estabelecer uma nova conexão

", - "e0c9b0c8c2f5253db114e66b4e4bec0c": "Falha ao conectar -se ao nó de download, verifique se a rede de servidores é normal:

Erro: conexão recusada

", - "5aed407c1121163f6c2e60ff5d01f748": "Falha ao conectar -se ao nó de download, verifique se a rede de servidores é normal:

erro: {}

", - "a5358f63960aea748d33487821759591": "软件 包 下 载超 时 , 请 重试: {}", - "b72e871e3b94d0de910d5bbe91c734ea": "Espaço de disco insuficiente, limpe -o e tente novamente!", - "38e160ce58d4b962cd661df3b9f3325f": "A verificação do pacote de software falhou, atualize a lista de software e tente novamente", - "862e260fdf90664d8bcc0d58347b1ab6": "As informações de progresso especificadas não existem!", - "868a6f377594831b39e91745c7807e28": "O nome da regra Especificar não existe![{}]", - "c8ef5bb0221c3b1f8c90c6648ed0ff5b": "Obter valor {} false", - "d4a3f809e2109d7429c9fefd1ebb4996": "Get Key {} false", - "f86ecbf6201e5cd8df8b72fa2063029c": "Senha de chave privada incorreta: {}", - "71c1d999795c8090f7935a505db13faf": "Erro de chave privada: {}", - "35c953aecb570759e062d478bc5947c0": "Erro de chave privada!", - "649ba4179316d90343c8169038958400": "Especifique que as informações do SSH foram adicionadas!", - "5d9cf1940fae6317dd43a7f1b5ca8f36": "O nome da regra Especificar já existe![{}]", - "46491fef7553177ef58a55b2db917072": "Por favor, não defina o diretório raiz do site como o diretório principal do sistema:
{}", - "5c7b7c2f6ed78eefdd77aaa3dddde61a": "O domínio não pode estar vazio!", - "ef446d50df1605a582f9b44b57327536": "O formato de nome de domínio está incorreto!", - "1628c2a26ab6d1211b435f85782f8acc": "O nome de domínio especificado foi vinculado pelo site [{}]", - "925dc658ddf0f69509632848bcd39577": "O nome de domínio especificado foi vinculado por um subdiretório do site [{}]!", - "7b02cf82181f516626a36b86c6a686f5": "Site adicionado com sucesso!", - "fc0d039d9dcf3905ae8032c9cb33f475": "Erro:
{}", - "ad74aa2854e988c3157f92e0120bb19e": "Apache2.2 não suporta multiHP!, {}", - "73d6e709b568b43405052cec999798c5": "O formato de configuração de conexão PHP está incorreto, consulte o exemplo!", - "90a0cb1e2a8bee7ba3bcc51d8b80ee2e": "O soquete Unix especificado [{}] não existe!", - "751ac8fd72a0acd79772370efcae9c89": "Incapaz de conectar -se a [{}], verifique se a máquina pode se conectar ao servidor de destino", - "90da7d2de9aa12ec32ee04172ca0d2d3": "Erro de formato de domínio enviado:", - "4f137439eb93e6c752873c8af2d3d1cb": "A tarefa de varredura tem na fila!", - "57b2840409403678623872ce30eb14b6": "O canal de mensagem não está instalado.", - "b0698ab9adefa7515299f311c725ba4d": "Classificação clara com sucesso", - "169137d790f7352d616082ad8498e7dc": "Configuração com sucesso!", - "d9743f24c43ea9b347b70513bb115730": "Nome não pode conter /\\\\:*? \\", - "22012355700877ab73f89de8014ab20b": "Erro de configuração da regra do apache:
, <, \\\\,,", - "f1af189cd525a4d5180b8ccdc305a926": "%s
Por favor, digite SSH e execute o comando: pip install mysql-python", - "c38111d1a26efef2f1d89b0dfbef1ee7": "Database [{}] Falha na conexão", - "24a92be5bb3acba016a9274b9fb19c02": "Excluir falhou, falhou ao se conectar ao banco de dados!", - "d10533dec09d380264317010ec3e5af8": "Os dados do banco de dados não existem!", - "c54a0be87c240156a0403ba306527fa7": "A lixeira não existe para este banco de dados!", - "2fe4287f5ec52dd09118ba4d6a42747b": "Banco de dados recuperado!", - "5c846631ce72048c89ced433e4906107": "O endereço IP não pode estar vazio!", - "8bfe471aeee92b5cfc257706f3667e80": "Para garantir a segurança dos dados, os binlogs recentes não podem ser excluídos!", - "ee3025fb775c175b755f78732269dfc4": "Otimizado com sucesso!", - "f5332a2b815ca2e09f3e658e8c81a282": "Obter o tempo de reinicialização do trabalhador falso", - "583e0c5cfd4be57cb9bef0a1745f81c8": "Informações de erro: {}", - "086a727d5b55e2ccedc7cd0c194936f0": "erro info2: {}", - "a3dcb5c816b8d611f73cddb3c53578d4": "erro de erro6: {}", - "ff7ca5d4ef00526f701d3ae0b3833940": "Falha ao obter a lista, verifique se a configuração [AK/SK/Storage] está correta!", - "6bd4e79acd767010d96091baf9daba77": "Não detectou a porta que o nginx phpmyadmin ouve, confirme se o arquivo foi modificado manualmente.", - "bb1ca97ec761fc37101737ba0aa2e7c5": "ERRO", - "e615667ab7e4ce542cc2de0e95b5983c": "Verificação falhada!", - "9d45236535b39cb2afdc976ef584dc89": "Um servidor permite até {} ligações de dispositivo!", - "166be1ba5c792888e84a51c48f5a5eed": "As chaves temporárias só podem ser obtidas através da interface da API", - "c980badad6cc4c836a0c61a4373cff24": "Falha ao salvar o arquivo de configuração:

{}", - "d07fa2f572b6d22996d25439da3f5d88": "Baixe o arquivo com sucesso", - "7c0f11514254eedfffc86cf0bd09b98f": "Apache2.2 não suporta multiHP!", - "4db53632205257cce66f7b93d6c71e84": "Site não existe", - "c614196ffa00bf43880f547acfab993b": "O painel não encontra o arquivo de backup: {}", - "d29c0b7e434fe9f40120f2a7f8111c9e": "Não pode encontrar o arquivo SSL!{}", - "d073ffae779ebcc103ee5d50ec9b4508": "\\ 1 {} \\ 2", - "13d829d3f2b78c971207d944f2a96c55": "Falha ao excluir o arquivo, razão: {}", - "0b08674e1c87f3f8508a4ae9b0c160f8": "Falha ao criar uma tarefa de backup {}", - "b1ffdb005a4c842221dd8267c47de40a": "As notificações foram desligadas, ligue -as e tente novamente.", - "bfed318b618d0498d11eccc268e13388": "未 安装 [{}] 插件", - "dd8afa69a88e456b4be56178abd5c02f": "暂 不 支持 该 , , 请 将 [{}] 插件 升级 到 最新 版", - "366b093f5e53c815e658acd14dd27eaf": "Especifique o arquivo!", - "4d0e2b9d7d854b99d31322e347a8a358": "Firewall tem {}", - "49f648bea338734c76f49de41c91aebe": "Nome de domínio {} resolução adicionada com sucesso", - "7a3359de6c4391fe9a15eb0425846fd8": "Nome de domínio {} já existe", - "2d5f7bdbdb53fff3cd55702cbdbfa8bd": "Por favor, digite o nome do país!", - "0683e26aace0f0c175199272031ce3e6": "A porta não pode estar vazia!", - "8c7cabcdcfe7a6ed8b0e27b04ad408e6": "Ignore as regras com sucesso!", - "f5800cf5bc9b3d8aee2ea9222951ac93": "Cancelar ignorar a regra com sucesso!", - "0161305479129bbe47bb020605a15d40": "Configure bem -sucedido!", - "bc5339f81ff38e283bb920dfb33ca914": "Ele não suporta suspender o alarme de login do painel, se você precisar suspender, exclua -o diretamente.", - "e2eb774c78e2d0b8801cbea7221b555e": "Intervalo não atingido , pular.", - "f2458ad2b43110cfc09fac4b29508acf": "Erro de configuração, não pode ser definido, tente usar a correção de comando:", - "fdf95ff2f0a3298c8a83aad5255780e5": "Banco de dados [", - "65eb245cbaced4d79b422f5ab3536bec": "Database_name_len", - "3c6e0b8a9c15224a8228b9a98ca1531d": "chave", - "152b651d5c0151cc3864d20d187d77fe": "Passar!", - "32248dec8372e446a9cd7bf5a6bbce5a": "pegar[", - "b4a88417b3d0170d754c647c30b7216a": "resultado", - "d0f9cbbc082071764bd58cb868dc86d8": "A operação falhou, o banco de dados remoto não suporta a operação.", - "4143861cb7ed8d905267a8ea56ad5935": "O formato de arquivo está incorreto!", - "04aa3a99d1550de2a89aa408790e0234": "O backup falhou, {}.", - "c254f52cdaeb7f1a88c6bdd3e3e3c3f8": "Modifique a falha , o banco de dados [", - "7a48d7e0ce17e4a5ad1dadbfa199e464": "Restaurar bem -sucedido.", - "2de872b07fddc8df9c2085fa214e780b": "Falta de ferramentas de backup, por favor, primeiro através do Software Store PGSQL Manager!", - "da3304c09f836a15a0c1ef43d28ce833": "{} O arquivo não existe, verifique se a instalação está concluída!", - "4920936553b1b998eae96983725a4caa": "{} O arquivo não existe, verifique se a instalação é {} completa!", - "cfc453301efca8006f07df0ee6832607": "{} O arquivo não existe, {} verifique se a instalação é {} completa!", - "e6d4787574cefef9b9dd6b3ab549bf68": "A senha do administrador é alterada com sucesso.Procedimento.", - "f06bab2dcffc83aa9e8e3be555a9e56f": "Operação falhou.O banco de dados remoto não pode ser backup.", - "a52ecc2f72eafcf3453f9a50ffb7d0aa": "A senha do banco de dados [", - "b468cf5dd5c36c5fc9b7ccab639448a7": "设置 成功, 以下 规则 设置 失败: {}", - "9c6da8c31a9a2d7a04756b09f01696e7": "端口 {} 已 , , 请 勿 重复 添加", - "99404700c0746498a22a6ac82f3a78ba": "域名: 【{}】 解析 失败", - "905d5834754a81bea63ea590793346bc": "目标 地址 {} 已 存在 , 请 勿 重复 添加", - "5bd31a01422acec34ec752e0a46f9415": "不 能 添加 自己 的 ip", - "3ec1da1913c04a2c53dd6d6379f99d4c": "目标 地址 不 能 为空", - "1dbdac6410eb6757e4bf9e7064fc4454": "Falha ao conectar -se ao nó de download, verifique se a rede de servidores é normal:

Erro: Leia o tempo limite

", - "834651dc386d92eee706ea3209fbee54": "Falha ao conectar -se ao nó de download, verifique se a rede de servidores é normal:

Erro: ENCENDO REMOTO FECHADO CONEXÃO SEM RESPOSTA

", - "51e2d6a9fad132514cd636247983ef3b": "O download do pacote cronometrado, tente novamente: {}", - "1fd07d2b5181c3afe63864c702f1708c": "Espaço de disco insuficiente, limpe -o e tente novamente!", - "205b871771552fb2c6ec82e717ffdb5e": "Banco de dados Não é possível conectar!", - "bea367683a2238e537e3833d0b15622e": "O servidor especificado já existe: [{}: {}]", - "65d7c486a72e5ad1b6bd2efb8956f3f6": "Falha ao editar: {}", - "f62e45c2a8ed2cfcfd94370111f2a7b3": "Um banco de dados com o mesmo nome já existe: [{}]", - "c0845b39485db26e69520bd402a139b7": "Banco de dados [{}] já na lixeira, recupere -se da lixeira!", - "4660d7ac939f0ce64023bd24bc25b663": "O nome do banco de dados não pode ser mais de 16 caracteres", - "d1e3ea8b4d692d87d876428f0cf476c4": "O nome do banco de dados é ilegal", - "32e1edf20dad771b315ddb3da35bacd3": "O banco de dados especificado já existe no MySQL, altere o nome!", - "ced1ff377b05e3ba5ae9837ac8c05b80": "Database [{}] não existe!", - "ad62ead53c1f43865593805aab80df4b": "Falha ao modificar: {}", - "d3a51b64fa563dfcd901485db4cf5777": "Banco de dados [{}] senha não pode estar vazio", - "0c18dde1f9edfcff23eb2c2ec06673a2": "Não pode alterar a senha raiz do banco de dados remoto", - "f730258407ac8fda3c780e7c59a09f16": "Modificada senha com sucesso para o banco de dados [{}]!", - "25bb121145f918572eea2ef07ff8e89c": "Erro de backup", - "4461199265eb82e1de46055d7f4568b6": "O backup foi bem -sucedido", - "ecc5e49aaee7ba7dc9a1b1b89e008c13": "Selecione o arquivo SQL/GZ/ZIP", - "3bb533d00c768936c2c3bf24d2c542a2": "Arquivo de configuração não existe {}", - "c811067e114e07cbb188afd110ddc579": "SYNC {} Banco de dados (s) do servidor!", - "a47891f08609cb38f4de9fd50def4650": "Obtenha {} bancos de dados (s) do servidor!", - "5a1fa27717a308de1e384b03b2b8b760": "参数 错误! p", - "7a1caaac30a6886f3b5e3cd1a9b50d8b": "参数 错误! Limite", - "749707db319ac2fa02785c1bdb58083b": "Erro: o arquivo de configuração de configuração SSHD não existe", - "80b695b495da54ed6a76eac8a965bc7b": "Cancelar com sucesso o alarme de login", - "40d3b22b13a0b11ed727aa257e2228c0": "O canal de mensagem não está instalado", - "87597848076b873c1a9bb9ffea64950b": "Erro: o arquivo de configuração de configuração SSHD não existe", - "bdb119e343438b628e7ba8b20e4632ed": "Erro: a configuração sshd não existe", - "45de64a88b25b6527ccd3efbce76ed3b": "Erro de passagem de parâmetros", - "0fd775e0a957d247e199d2cd911078e8": "A senha não pode estar vazia", - "2279ae228c06ace23e59cc218f2536f8": "A senha não pode ter menos de 8 bits", - "207d2e497f2ca0d97f1453671d4d824a": "O nome de usuário já existe", - "e1c5fbbb3782936fa209244fcc62ea7e": "A senha deve conter letras e números ou símbolos", - "4c94c49ecaebd37c52172946778fc296": "Falha de configuração", - "93916600bce5b19586cbf51d558b5d78": "Verifique se o formato [{}] está correto, por exemplo: {}", - "f5fa57ce44938aa510e6cb68bd52c24b": "Nenhum arquivo de log", - "1bb87a5feb9e217c858933afdce8f4e7": "O arquivo de log é muito grande!", - "21290da79237752afe963ecef5d89b5a": "Comece a digitalizar bem -sucedido", - "8e0e316031928c8c96c94ad6d57bd03e": "O diretório não foi digitalizado", - "9208374e1391bb886971bad99b2380f1": "Tipo de incompatibilidade", - "580d97d0b321127650cf1901cc3524b2": "O registro não existe", - "3f8ee4f649b32e181c15c39682629844": "O usuário [{}] existe!", - "8b73e5696a44d470ee99c274152c1b54": "Porta [{}] é usada!", - "da10c98ffbf34b30edec9cf47d998a68": "Aplicação bem -sucedida!", - "24380483226504475d196fdcff7a6c77": "Falha ao conectar o servidor!-1", - "353d91a7655b3ef5e024d07eef1888ab": "Falha ao conectar o servidor!-2", - "8ec1fba8a89cb67bc958d7b2424156e9": "Arquivo movido para a lixeira", - "99a091a444e6e207f60506fb4f0bdcce": "Arquivo excluído com sucesso", - "3812bb9254d5bcb879ec62f0fb5bdd49": "{}:

{}", - "e5e8c7cac8b71e94280fa08301d21e78": "Por favor, insira o caminho da imagem!", - "5441400ea3bd16cffdf70c46c34f61d4": "Falhou em importar a imagem.A extensão do arquivo deve ser.tar!", - "67b97e4746a2faf5d59206a80bb28649": "A importação de imagem foi bem -sucedida! {}", - "8eb05618b0f04e727b0685427fd49c8e": "Falha ao importar imagem!
{}", - "721aa02577670c1049ea9d12caa8938c": "Por favor, insira o caminho correto do Dockerfile!", - "736df9a7c491f3299efdeb9f7d7e9e0f": "Crie imagem com sucesso!", - "6e85568dae869303ca7a4486f55458a3": "Falha na construção, a conexão cronometrada", - "5bb301b85cc1f42e56174d3d9a4c0286": "A construção falhou!{}", - "f51455b323ec2db8004c812001043330": "Build falhou! O Dockerfile especificado não foi encontrado", - "8e1b9c9b75950d0feba6813d32766e61": "Build falhou! {}", - "eba0ec758a6464a20c14c0f23ceee62e": "Espelho excluído com sucesso!", - "8dd326278d09a3ac4bc56cf725c8f262": "A exclusão falhou e a imagem pode não existir!", - "11ead921bc0e3d94f1f9e0db4bf8ed8d": "O ID da imagem é usado em mais de uma imagem, force a imagem a ser excluída!", - "43993616c7433350755d30a3b4d065dd": "A imagem está em uso.Exclua o contêiner antes de excluir a imagem!", - "d6992c3fcf2269c249cd5f18f1ac2c11": "Falha ao excluir a imagem!
{}", - "0c6c071174fde5b47c9eef8088c17a89": "Falha ao excluir a imagem, a conexão com o Docker cronometrou, reinicie e tente novamente!", - "60b488c60b6747bf34a86a69740b636d": "A imagem empurrada não pode conter [/], use o seguinte formato: Imagem: v1 (nome da imagem: versão)", - "44dbec830b87eb037e8fcbb0e1b56160": "Incapaz de pressionar para o repositório público do Docker!", - "b4c46001066c912344e3bdb0df86e848": "Repositório [{}] Login falhou!", - "d26bdd6e86002ed92089dc71347822ce": "Push falhou, não tenha permissão para empurrar para este repositório!", - "2b228d4775d23d2725ec227ba648bd43": "Empurre com sucesso, espelho: {}", - "2fae21ffd185d9e9730b39bc7de23852": "Imagem puxada com sucesso!", - "8a635442294fd90195a43d9a1672fc3f": "Falha ao puxar a imagem!", - "2d941c4fa4da32ccafa8670a07f23c1d": "A imagem foi puxada com sucesso.", - "5282194697748d9fcd1ccd8a90428424": "Pode não haver essa imagem espelhada.", - "d6facab17334983e7c6f8c561c239820": "Falha ao puxar a imagem, esta é uma imagem privada, digite a senha da conta!", - "b507deb7848d566982b339265c8f5482": "Puxe a falha da imagem

Motivo: {}", - "e90811ef0a60b6d299b4e1064d7788d0": "Sem imagens inúteis!", - "f343313c101aeaff0516990ebea3dcef": "falhou em excluir! {}", - "90ecd58b3feb0b2be11f0af685ad39fe": "A exclusão de imagens inúteis falhou e a conexão com o Docker cronometrou.Tente reiniciar o serviço do Docker e tente novamente!", - "719ee030d81490fc055af0c4426aacb9": "Detecção falhou: {}", - "ee3936ffdc910e2cb8578ad1fae322f0": "Passes de detecção!", - "2e5c9168b81de403131125abe3537861": "Os nomes de modelos não podem conter caracteres especiais;Somente cartas, números, sublinhados, pontos e sublinhados são suportados", - "1ef49203b5ddab4a6b30eddab93c6d73": "Este nome de modelo já existe!", - "356dbf2911e78ebedbd99f13df311ce1": "Modelo adicionado com sucesso!", - "4f6a25bc1019404777b1a95b85c375f3": "Não mudou o modelo!", - "029a1a33fb7a828191eac587a4d98db4": "Erro de formato de conteúdo do modelo, digite um modelo válido do Docker-Compose!", - "052009ea42871f16153ca6fb451be303": "Modelo modificado com sucesso!", - "550993f7a7c3863e988dc02458bb413b": "Este modelo não foi encontrado!", - "c3f9a083e42b21151560ba7e23667129": "O modelo não foi encontrado!", - "d5d3eedff8acf67756e21b4612aaa380": "O nome do contêiner já existe!:
[{}]", - "05073a33c4bfcb8113af6b3222a0cccd": "Esta porta [{}] já é usada por outros modelos", - "69a22232c25cb907570f837e4032ed7e": "Erro do parâmetro, passe no template_id!", - "35698a69135017d7f8345e32cb5a87fe": "Este modelo não foi encontrado ou o arquivo é corrupto!", - "49d5a6420e1b84d63826fa1d79e5236d": "O arquivo de modelo não existe", - "e199ad07ae94664293828e753ec2a9a8": "O modelo [{}] foi implantado pelo Project: [{}], altere um modelo e tente novamente!", - "a3017095090064d0ec98861e35d3849c": "O nome do projeto já existe!", - "a9a92ec33cfb8eb3288cfc84edcd48ad": "Implantação bem -sucedida!", - "a180787fbf3d2e3fac72a13cb98ce513": "O Docker-Compose é muito baixo, atualize para a versão mais recente!", - "d8b370ee0351106fe38046541c421361": "O nome do projeto não foi encontrado!", - "6483a5effa8c7ebce28c3838ee6f6e6e": "Limpe com sucesso!", - "78f91123fc323aab6eb38f2bfb8e26d7": "Configuração do projeto não encontrada!", - "cbc095654e63f5aaacab36686f73a19c": "Projeto de parada falhou: {}", - "976c3ccc50057edea75d85859a5a1068": "Falha ao iniciar o projeto: {}", - "bd2d9013418630f5ff14b03265a1a623": "Falha ao reiniciar o projeto: {}", - "5b0854983625160cfbf1295ceb6ec327": "Puxe com sucesso!", - "e3f7848d66fd6f9643e360912346f42e": "Falhou em suspender o projeto: {}", - "e0c878e9b7558aa646cf4856eb407767": "Falhou em desconhecer o projeto: {}", - "ce932f534479bae87f0615fa7214e5a1": "Incapaz de escanear o diretório raiz", - "d2fe452a7fa69442d5296b8e4832ede3": "Modelo adicionado com sucesso: [{}]", - "8d92d05b95b166c5683fdb88f7de8bed": "Falha ao adicionar modelo: o nome do modelo já existe ou está formatado incorretamente [{}], use Docker -Compose -f [especifique o arquivo compuse.yml] para verificar", - "428ed92bf9d3198f4c9885c11fdb2be3": "Esses modelos são bem -sucedidos: [{}]
Esses modelos falham: o nome do modelo já existe ou é formatado incorretamente [{}]", - "70975749d256333f1b3b62c864ca265a": "Falha em modificar!", - "2360e954ae9eecac28b2a3edad5e8ce0": "Modifique com sucesso!", - "ae178e022cf2fe30f402145572528de8": "Nomes de volume podem ter nada menos que 2 caracteres!", - "365c770f123d22093084908ebcdc75fc": "O nome do volume já existe!", - "2dc51ae60242f0e5b56a9f0d176f91d4": "Adição falhou {}", - "307feea9ab8928f39595316b11992cb1": "As tags da opção de driver devem ser pares de dicionário/valor-chave!", - "f529949f8a98615c109ee8b8eb9f7656": "Adicionar falhou!{}", - "2a0f93407bb61e2403ccd032cbc64e3e": "excluir com sucesso", - "a4ec5c1fa47f2ce0c875f91ea4e7dd08": "O volume de armazenamento está em uso e não pode ser excluído!", - "11ff7153b67d275618dd3a62d1e56373": "O volume de armazenamento não existe!", - "55c31f03e88bd6ad4ce7f68d425648dd": "Sem volumes de armazenamento inúteis!", - "11cde3a2ca81c845978b98e4a6ec471e": "O tempo de economia de monitoramento precisa ser um número inteiro positivo!", - "60e46aeaed758964902dd7ae99858f03": "Lá", - "1ba194462d31177d3db4ad6bf18fdbe5": "A configuração do serviço do Docker falhou, desligue o AAPALEL Anti-Intrusion e tente novamente!", - "4efe3b3293612df00264568bf6b9d66a": "A configuração falhou!Motivo do fracasso: {}", - "dca5bd22c99a74f74074a3a53d78a58b": "{} Sucesso", - "be62f7640f2c5b730ba50ecc580ae618": "Erro do arquivo de configuração global, verifique {}!", - "8ebe0b989b543cf96149811c7a1f3fe2": "Endereço de aceleração [{}] Erro de formato
Referência: https://mirror.ccs.tencenty.com", - "ec1ec17a5862a949e277432e1d09484d": "A configuração falhou!Motivo de falha: {}", - "179a2001e96bb8d0475488f80c7216a8": "Atualizar com sucesso!", - "f4dc83b81fe6993f99c2b54494eeeec1": "Comece a monitorar com sucesso!", - "6f4d03d4d1ee0bd282ea744730b7ceda": "O monitoramento do Docker parou com sucesso!", - "4cc06d8560bb116a38a5aae1458cbe4a": "O caminho do arquivo do Docker-Compose não pode estar vazio!", - "8d885b86e8562c2128689c4a2601c054": "O arquivo Docker-Comppose não existe!", - "7bdd4d85dda1275e2be709fd9e0d71dd": "O arquivo do Docker-Compose não é executável ou não é um arquivo do Docker-Compompose!", - "c28e19f0398bc1819a890878021836c1": "A tarefa de instalação já existe, não adicione novamente!", - "a87b64b2d19f29438274f80ce36a3579": "A tarefa de instalação foi adicionada à fila!", - "b7affa7cc663144bc99b9edb3f1a027f": "A tarefa de reparo foi adicionada à fila!", - "cb49a4daafc9d27bd460967891968225": "Salvo com sucesso!", - "739722f14db791bd300e08318a48ba59": "Salvar falhou, razão: DAEMON.JSON ERRO DE FORMATO DE ARQUIVO DE CONFIGURAÇÃO!", - "58fcf0699f38a60c8025330585ac205a": "Salvar falhou, razão: {}", - "52910a27ad5d3b057cba9ac0fa8cc5ab": "Permitir desinstalação", - "114452c42500d38f0a2ab5b820d854f5": "Por favor, exclua manualmente todos os recipientes e imagens antes de desinstalar!", - "f7598fd50292eaadb7fc07cba9bf399f": "Desinstale com sucesso!", - "7c6f761019365f8a5cfb2fb54d9e199d": "info.json é baixado!", - "10066fce84fe34e9cc33e0338532988b": "O download info.json falhou!", - "0672e579ab0e3454713eb683ddcc4859": "{} Download falhou, por favor, resync!", - "8e790e81fffa7f51d099f710bd8f82cf": "{} teste de arquivo yml falhou, {}", - "371acfea202589c4efd6724888f66595": "{} Download concluído!", - "51cf61e34b3f71ce1e430cdfcf129b80": "{} Descompressão falhou", - "c59b65890496cdf2b14d127a1f76f73d": "{} extraído com sucesso", - "0117718c35c7a16a62de5c259e1d35ee": "A criação do diretório falhou pelos seguintes motivos: {}", - "374e3fe41b55a0b29420e455fb514dd6": "O volume de armazenamento foi criado", - "6d0d40f64f89227daf345eb2257638e8": "{} não pode conter espaços", - "a00b49ace55de909015029a0d6d6096f": "{} não pode ser nulo!", - "54498312bb8f97ce07a9a0b0b47cfad1": "A porta do servidor [{}] está ocupada, mude para outra porta!", - "47b74e08252747225c49ea0cb011c79e": "Startup de projeto falhou {}", - "9b149598fb30f54fec9e82a3d121a464": "{} já existe, altere o nome do projeto", - "634370637f6a5b88940c75f826953d0c": "O diretório do projeto do usuário falhou em criar, detalhes: {}", - "f7b14d3f642d711a23d5a0cca725fd0d": "Falha ao copiar o diretório do projeto.Detalhes: {}", - "4097585e32152eb74bbee5ab8c463718": "O serviço do Docker está funcionando de forma anormal, reinicie e tente novamente!", - "26a0931677e111565f3ff7d059b94d8b": "A configuração do gateway está errada, digite um gateway que corresponda à sub -rede: {}", - "def2ba1ce0e4d77692c14e5b984636fa": "Erro de formato de endereço de sub -rede, digite por exemplo: 172.16.0.0/16", - "716eeeb727fd667635ccf1d18891d46e": "Erro de formato de intervalo IP, digite o intervalo de IP apropriado para esta sub -rede:", - "85ac438bd64f13e2ad61cf60e5ade3d3": "Falha ao adicionar rede!{}", - "640520ffb5d9c01336710bad3ea6d7ff": "Rede adicionada com sucesso!", - "87574a543563d2e037b87a6cf705e3ff": "A rede padrão do sistema não pode ser excluída!", - "23b6d9d6c36088deb928efad7fb9b63b": "A rede não pode ser excluída enquanto estiver em uso!", - "2aa70dad9bff94a855fdde3fc113e6c5": "Excluir falhou!{}", - "8f512551c7ddf61331c3d068e80c642c": "Não há redes inúteis!", - "a636381ee5e6d6d021fff745ca132905": "O ID do contêiner não pode estar vazio", - "31a75a8d220d37dc4a7ea28d0f24cc19": "A desconexão da rede foi bem -sucedida!", - "a2b9895fca7698902da9319b52392366": "ID do contêiner: {}, não existe!", - "c81f03a558307d5aaf3b339af28e04ff": "ID da rede: {}, não existe!", - "12a90fe85b8863e1dea43284988d7750": "A desconexão da rede falhou!{}", - "6226d2fef3bf047236f0f3a57dcd71fb": "Conexão de rede bem -sucedida!", - "d882b8375782b1bc56ccaf84ed27d20b": "Falha ao conectar -se à rede!{}", - "e721a26ad3ba9bd6207ab753880eaaef": "O nome já existe!

Nome: {}", - "5395cc8155f62a666b8f0d0f9f207676": "Informações do repositório já existem!", - "9b10e472adfe6372c9175b9002f098fd": "[Repositório oficial do Docker] Não editável!", - "5858be44c285048a8f51c126b2fd23e9": "A edição falhou!Motivo: a descriptografia de senha da conta falhou!Exclua o repositório e adicione -o novamente", - "7e51d0e26e1b467aff3c89d3e0751ec0": "A edição falhou!Razão:{}", - "6478f13dd58e5a4329e19be9020243ff": "Este repositório não pôde ser encontrado", - "d5309f3186607eb36bee41e8a28cea3a": "Editar sucesso!", - "9e20bffc0d4093d18fcbc5c98fa0fd87": "[Repositório oficial do Docker] não pode ser removido!", - "a62336a87697ab6911ba550015a798ef": "Excluir falhou, o ID do repositório pode não existir!", - "54197759827cfaf0cdb1e213fa49771e": "O teste de login falhou!Motivo: pode ser um erro de senha da conta, verifique!", - "657a0b7e82731fb4ae516d14081f17d0": "O teste de login falhou!Razão: {}", - "6169a7282b361deb5f6f5b6e18f9426e": "Erro do parâmetro CMD", - "286933a4f24bee0eed1f9300f70a30c7": "Somente o comando do Docker Run pode ser executado", - "a46a6b274dcbfc5a629d234c2816a165": "Existem símbolos de perigo: [{}], a execução não é permitida!", - "8135363a6a5e2c145c6cedab8ac1e510": "O formato da porta está errado, esse método não é suportado!", - "1ea6886cda394cf55463a11bafd310c2": "A porta do servidor [{}] está ocupada, mude para outra porta!", - "70b35bb3bb2fe425a981e8cc68c06906": "Por favor, puxe a imagem que você precisa", - "e768fcd4ff22e2f3cc2535f1ea9c5682": "A imagem não existe!", - "7dc29c1ed7012513111b11f56c73a4f8": "A cota de memória excedeu o valor disponível!", - "73aff7a8ab244bc5d0d1448e9a0ae6f0": "A cota de memória não pode ser inferior a 6 MB!", - "be3b4eda1df0f4ad57551e55845247ab": "Image [{}] não existe!", - "56a727f1edc5f008ee8f41a638662322": "A cota da CPU excedeu os núcleos disponíveis!", - "45c163fd880ce5a21373fbd53bbcd642": "A reserva de memória não pode ser inferior a 6 MB!", - "bf6b8400e1726aadf1cee7d6c1c5d173": "O formato do nome da imagem está incorreto.", - "f0beb6e739348ae10c9f15cb91638d2f": "A criação de contêineres falhou, detalhes: {}!", - "c68d012ef602a12e38636c306c10c894": "O nome do contêiner ou a ponte de rede já existe.Altere o nome do contêiner e tente novamente!", - "c4272ed0aaf1e7e2bcc08f1003c2391d": "Não há comando de inicialização nesta imagem, especifique o comando de inicialização do contêiner!", - "196a4f415d73b007e0627563a530967e": "A criação de contêineres falhou!Reinicie o serviço do Docker no momento apropriado!", - "c29c7e4f72858367cd21d10303411592": "O nome do contêiner já existe!", - "c4dc041770b8a0e34d1399141d0e4de8": "O nome do contêiner é inválido", - "00ff90441ea0bdece5d9e5c72efa14a7": "A criação do contêiner falhou e a conexão com o Docker cronometrou!", - "facfe02e3070c389fe486efac23f2ab6": "容器 创建 成功!", - "71dc70f7ab3a4bc0c2a7141718d3a9b2": "Falha na criação!", - "ed0029af5f77a5dfacbc2452e8c3ec92": "ID de contêiner é anormal", - "c5b3db7efde90edcb803a4a79e559b21": "O novo nome da imagem não pode estar vazio!", - "b10305369ebb41ef24699b8137733465": "O espelho não existe!", - "d567f353b12e618571935661f31c2a16": "A edição de contêiner falhou e a conexão com o Docker cronometrou.", - "df69bbf953e4171eb7a0bf47e5d16ef9": "A edição bem -sucedida, [{}] não especificou uma sub -rede e o IP foi atribuído automaticamente!", - "bb16b4e47a37093f63879b7f7c07d298": "Editando a configuração bem -sucedida da rede [{}], o IP foi atribuído automaticamente a você, detalhes de erro: {}!", - "b84bf4d95051856f9965b55bb5402de3": "O contêiner não existe!", - "c558fedcb5850939202e684ff32c7c50": "Atualização falhou! {}", - "4363bb34365a67238ecc6a98ce46b361": "A imagem foi gerada e {}", - "4bb30e8d57a6a7e548758daf4ac33983": "Envie com sucesso!", - "9ff81cc845af62a773af3412bdf7d9a0": "O ID do contêiner é anormal, atualize a página e tente novamente!", - "d8f5602e197fb8b3c772f071ad4a8baf": "Selecione o tipo de shell!", - "9ad72ac09babc507baa6e165041e128c": "Este shell não é suporte de escolha suportado ou sh!", - "172f51d3307b02aeb6dc703a442f4724": "Falhou em conseguir contêiner", - "3ab9d9b76e8d22434930622b5f0acc6a": "O contêiner foi excluído!", - "d1fe1d6e5e8c17b60f749ad36ff3bcaa": "A porta do servidor IPv6 [{}] está ocupada!", - "9f13645ac42f0c9908a35637a525d561": "A porta do servidor IPv4 [{}] está ocupada!", - "8708a53096a7d7bce5d3042be8feb736": "Pare de ter sucesso!", - "d40b23e847e0619c6e2133eebfd51807": "O ID do contêiner está vazio", - "4e62f10d98b7560d22cf614879790624": "Sem log de contêineres", - "4bfb779dfe8300c1f2da1f1dae06a4ce": "A conexão do docker falhou", - "e9b0defc5226436d7d2580972376cad0": "Erro de parâmetro, passe: digite", - "d0e42e6dd40adc10d0027ab9993d8741": "O diretório de log de contêineres não existe, o corte do log não pode ser definido!", - "3af555ace78d310a5db6e9449ed6843b": "Abriu com sucesso!", - "641fe4d504d197e8570f3bc693f5c15b": "Fechado com sucesso!", - "e04e8dc32dc0f13aea94cb4996a0057c": "O arquivo de log não existe", - "3e0f56b62a18226db6b8c71e8c917be4": "A limpeza do log foi bem -sucedida!", - "81259d9e5861e65db29844c19d9feb80": "Sem contêineres inúteis!", - "53a5658dfa0a2e85083fd63b961d35be": "Excluído com sucesso!", - "dac7d97aeb94cf9d3b3b5d7d072c4cff": "Por favor, desligue a proteção de violação corporativa antes de tentar novamente!", - "32ca87e65c5fc75d3857767417b56439": "falhou em excluir!{}", - "b0ea22ff0b389c2a32b8f4367ab650db": "Erro do parâmetro, passe na política de reinicialização RESTART_POLICY!", - "3b2f70397fa8a827c7146cbd900f7222": "Atualização falhou!{}", - "c147897a9d1746a58de531e9c0158c23": "O contêiner não é iniciado e não pode ser renomeado!", - "a89c2e8f7eb81399f984330e55014c6f": "Renomeie com sucesso!", - "3506ae5524d7b5dbd75ed328349e065e": "Defina o top com sucesso!", - "363b76cd4207ec1adb31b9f7ee3930c8": "Não pertencente com sucesso!", - "0fffc4397713115e14ef45273241dfbb": "Erro do parâmetro, passe: Observe!", - "dce2cbc7791016e4876ab144e53b4f82": "Erro do parâmetro, passe: id!", - "6345c76d66a8a9e9cdd3f9d996ff062d": "Por favor, passe em CMD", - "bba401eadefa8222f3e60a312cc19f34": "Somente os comandos do Docker Run ou Docker Pull podem ser executados", - "cfff471dc04b6ba4aeb2cc2844b2c94b": "Símbolo perigoso existe: [{}], a execução não é permitida!", - "f1d9b154a0c2625d828a504a8cb35682": "O comando foi executado!", - "ffbc0becd099136e10a606c5cb338738": "获取 配置 文件 失败", - "f5f8b40f1c2f9119cbfe30f9170b0c77": "写入 失败!", - "8487fce38acb36ef8309a11c2fd0b0df": "项目 添加 成功!", - "5d979474b01661462c2bf1374b889680": "无效 的 容器 顺序!", - "d8c7e9e12cfce0a6cce8098aeafd9a19": "容器 顺序 修改 成功!", - "34ec1bff50b1ccfea1d0467ce796431c": "项目 不 存在!", - "1931efaa97304583c390dfaf18e9be01": "项目 时间 间隔 修改 成功!", - "961a3e18b2bacf3f6bb1c3e821719615": "正 在 依次 启动 容器 中!", - "090598eaf20295f37dc49f32efa985d5": "以下 容器 正在 运行 : {}。 是否 允许 先 强制 停止 再? 您 您 也 选择 选择 自己 手动 停止 运行 中 容器!!! 可以 可以 选择 手动 停止 运行 中 容器!!", - "ceeffcc734ac38cf82b3ba33544cb6ee": "开始 依次 启动 容器!", - "33b5d440d17f3837309707b5b049e899": "正 在 依次 停止 容器 中!", - "b687943a0a61ed9f039213d7c5e0fcca": "容器 开始 按 顺序 停止", - "ec7b13b39406a81e90df7b7d06a4b134": "无效 的 状态!", - "0df1e0596d9e1835d62be1b5ba537fac": "容器 {} 已经 被 项目 组 {} 添加 了!", - "d6d90f977089e176ec7443db17c41279": "容器 添加 成功!", - "04cd9210bf9290bda98bc76ca4bc59fd": "容器 删除 成功!", - "d867a5e10a7a9485129c679b85453e3f": "项目 删除 成功!", - "584e35dd4a55da88bd232ac7a19b9b95": "A tarefa de backup foi criada com sucesso.", - "221d1ea3c23f430e03a4486dca865014": "O contêiner não existe, atualize o navegador e tente novamente!", - "7e88e25ea6c628c2d03c526c04af3eed": "Falha ao obter o status do contêiner:", - "70a38ee8ab8fa0a8ddfe18a65795c571": "Salvar erro!{}", - "9c36e7618938262d25ba84fb3f4e25cc": "Uma tarefa de compactação foi adicionada à fila de mensagens!", - "efc33dbd7910fde6ce3fe364a7d43bfc": "O arquivo de configuração do RSYSLOG não existe! \\ Nupase Verifique se o rsyslog está instalado ou se /cect/rsyslog.cn existe! \\ N.Instale o rsysLog", - "5f74874b100d16e90aa999e06b3e222f": "O formato do caminho está incorreto, o formato é /xxx", - "d49c4e6f0a63eb94dfb921be5d804e8b": "Site não existe!", - "f5484a1a111b9d70ecaafb36a7df48f6": "O email não existe", - "704372ffb884853d30e3b247765bb73a": "Os nomes de usuário inseridos duas vezes são inconsistentes, Plesea tente novamente!", - "e8572d7e44ae44b169ea90d73d31decd": "O tempo de tempo limite precisa estar entre 300-86400", - "10951b15ad70ad91dd672b3942e85954": "Modo operacional errado", - "2eccda3dec7fa3a985668d79c718be23": "O questionário foi enviado", - "45a0bbacbe8d5ea062167e88423e4573": "Nginx ou Apache Server não foram detectados, instale um primeiro!", - "deceb44868a29ae5d579114348736cbb": "A importação da imagem falhou e o diretório temporário do contêiner não foi criado.Verifique se o software de proteção tem um registro de interceptação!", - "0ebfb094c6482acb049e0dd0d3107307": "Falha pela falha, erro de etiqueta da imagem, digite como: v1.0.1", - "0af5787b053c4bf5dbe610731f7d4199": "O caminho do arquivo não pode conter caracteres chineses!", - "c541f51f11868ef56cf50524eeddd226": "O item não foi encontrado!", - "b314fb25bf654a2256bf53b0f6986c93": "Os dados de monitoramento não podem ser retidos por mais de 999 dias!", - "af79fd88d4b6f7e8a1ac05e199747fdb": "Falha ao começar a monitorar!", - "838089af9a2941a49862f342c056a8ca": "Comece a criar o projeto", - "e310a873e7812c7f994d482604061fee": "Faixa IP [{}] já existe!", - "08efe6a4e12437b79225c8b59fd710eb": "O ID da rede não pode estar vazio", - "e5d4020fc5f8c26e22add8db8a62f06a": "A cota de memória não pode ser menor que a reserva de memória!", - "97bcbd1e3b4df0f1c6ec642e7be17afe": "Porta do servidor {} em uso!Mude a outra porta", - "b5592904212696df3e5bcec990c8676a": "Comando perigoso existe: [{}], a execução não é permitida!", - "4ca72e3c9599adfbda8becdf2492b3c7": "项目 已 存在!", - "c0ef08aa7bd6276137ccd491a8041223": "Não há volume para fazer backup", - "a13ed989898e4c7529942fa656ff6733": "O diretório crítico do sistema não é gravável!", - "7a71d673b95a1bd0d10705c865f5a626": "1. Se o [endurecimento do sistema] estiver instalado, desligue -o", - "c5041819fd15366b66dd9539116ea6ad": "2. Se Yunsuo estiver instalado, desative o recurso [Hardening System]", - "101935ed7ea8a021a536a614363350eb": "3. Se o SafeDOG estiver instalado, desative o recurso [Proteção ao sistema]", - "8c4aa1aa63c24703138358074a515b99": "4. Se outro software de segurança for usado, desinstale -o", - "349838fb1d851d3e2014b9fe39203275": "Instalar", - "17e4e003ade65cd7a54131d3404d2f98": "Não aberto", - "96aa6974173414b7a392afd70e5af6ad": "Não consegue encontrar o arquivo de configuração nginx [{}]", - "d85076ee3898ee82924d3b38cd49b7a8": "Processos dos trabalhadores", - "d0d1c4d1d25829f47c3e497e7f3c0132": "Auto significa automático", - "5c81587d9eb573fc7e6a4bc67b4603ba": "Conexões de trabalhadores", - "939bf39176f01b8324dfed32f5580af3": "Tempo limite da conexão", - "5f892c3cd4a800e96fd4a7d6b81cdef2": "Se deve habilitar a transmissão compactada", - "0dd93c7dd7d0a539fb21b522a5c138cf": "Arquivo mínimo para comprimir", - "6dfd8b44b3dad3eaec0587ac3bacdcd1": "Nível de compressão", - "36bacbbd75b4f381e4ae33983250de39": "Arquivo máximo para fazer upload", - "6b30b46e4151e28f5e815efdaccf2544": "Tamanho da tabela de hash do nome do servidor", - "4351aafd37b886a0537c175ea055d5aa": "Tamanho do buffer do cabeçalho do cliente", - "3f1adbc068546184b4d2ca44fc9eb253": "Buffer do corpo do cliente", - "f6039d44b29456b20f8f373155ae4973": "Nome de usuário", - "6b1bc4e672d58d46d23502dcd78129be": "Limpando informações do log", - "0e900c57ee4635719ba671229ead12ff": "Limpando o histórico de tarefas", - "1dfefaa079cbde4da09e89af6b49ff33": "Limpando registros de monitoramento de rede", - "f59489317e210ec566cf6b6c9e3b20b9": "Limpando registros de monitoramento da CPU", - "e0976b426e3109ee01a1182b7c04b987": "Limpando registros de monitoramento de disco", - "2c1eb277ff700f04b65306399784f875": "Limpando informações de IP", - "4abfe31831aa15dc27ff44067b2bf0d1": "Limpando o histórico do sistema", - "0c06c1eb5ef47b883f7cbcab9be84e97": "O painel é embalado com sucesso.Por favor, não faça login no painel para fazer outras operações!", - "b097eb5212f13c74d1c96b59f65c4dd6": "Com sucesso as tarefas {}!", - "0d793de4ae05511630a2eeea9b5528d9": "| -Cleared [{}], arquivos excluídos [{}], espaço de disco libertado [{}]", - "db62071d34202efa3a0aa1a743394938": "| -SPOOL LIMPEDED, ALIMENTOS DELETED [{}], espaço de disco libertado [{}]", - "a1d3c6c221b8ceaaef8881e09d0a2945": "|-Sessão php esclarecedor ...", - "c16f6a333c0ba871467568be496cbea0": "| -Php Sessão limpa, excluída arquivos [{}], espaço de disco libertado [{}]", - "5d88b58a1c0ba0dee9eeb89a8bcdda36": "|-CLEARIDO A UP ARQUIVOS TEMAIS E LOGS SITE ...", - "e038ca57ad9c03f40bec42908af2ccff": "| -Temporary Arquivos e logs do site Logados, Arquivos excluídos [{}], espaço de disco libertado [{}]", - "fa3d217e80478d3c03c437b7fc11432f": "| -Error, o nome de usuário não pode ser inferior a 5 caracteres", - "4cffae9f32bf898c859a5937268b9727": "| -Error, não pode usar nome de usuário muito simples", - "fbcb6a4b1126170666b4c4102afbb43d": "| -Now Nome de usuário: {}", - "cbe2d798534f872748b7cba6615596d8": "Edição personalizada com AAPALEL", - "51708089c15820800d3dd7bd8d8cdfba": "AAPALEL", - "fee066b1b93fecf9545758cf9a87c3de": "Atualizando o plugin ...", - "c6462fea6d27e4ecfc68ae1944051f77": "O login teve sucesso, carregando ...", - "c11f9218de293117d2cd58a009534167": "Todos os plugins são atualizados com sucesso para 6.0 compatíveis!", - "cfef992430ab5a7b2373138d4b86425c": "Reinicie o painel", - "95b8b68d1c80ca75e1ab15bf5b9a8394": "Alterar porta do painel", - "f3013e54b467cdb2fac9a424bae963e4": "Painel de parada", - "15ea17031cb6a968e3b9ea2b28546c53": "Cache do painel limpo", - "20cdfcd210da305d900d25ec4c084184": "Limite de login claro", - "ab41db99c7941ef74c37bd97733f7707": "Recarregue o painel", - "315f4fdd99e49c6a2e80a95ce82ba534": "Cancelar o limite de entrada", - "07ed88796641228c3602122cf5075fc2": "Alterar senha do painel", - "63d8f2a0e51e9243f91b0285e4e44667": "Cancelar o limite de ligação do domínio", - "3913f08c2fa53f4c413cc0772f9401d1": "Alterar o nome de usuário do painel", - "b773a80578cdc8f50d57393d6b0a3d67": "Cancelar o limite de acesso IP", - "a6a23a4004f99fef13372de56433edbc": "Altere à força a senha do MySQL Root", - "bc449263dd0183a82a3d0a03cd8f26dc": "Exibir informações padrão do painel", - "975687e8a64e2c2842a34ca6d6bf8e85": "Lixo claro do sistema", - "84bc199f1a5ce205b0f5fc3e64ef3e95": "Pls insira o número do comando:", - "51c6348531daaf0fb1e84fafa12b5f15": "Por favor, insira nova senha:", - "34c4edd98a45ea8a13556965a6c4f2b0": "Por favor, digite o novo nome de usuário (> 5 caracteres):", - "219863186dddc079747a525bb7877a88": "Por favor, insira a nova senha do MySQL Root:", - "c172da334fdcac77f704fa4408dd2f16": "| -Error, a senha não pode estar vazia", - "a79cf67c04d379c4916dc584c9d8333f": "| -Error, a senha não pode ser inferior a 8 caracteres", - "06f5000079703a33b91564159f07770a": "| -Error, a senha não pode conter caracteres especiais", - "913153f9957100bcf3029e8f3d5bc5e9": "Por favor, insira a nova porta do painel:", - "00213d6b5423971311e5a47f83081a24": "| -Error, a nova porta é a mesma que a porta atual do painel, sem necessidade de mudar", - "e1e57838b2c7e1567fb96e20bfd474e0": "| -Error, porta especificada já está em uso", - "5093d954f09d473d091355fe292920a8": "Limite de entrada cancelado", - "e0b1cb1725c8fb29d42fa69d679a73ea": "| -Domain Limit cancelado", - "968c7b9246b5ab3d3e7659cea211a20b": "| -IP Limite de acesso cancelado", - "aab2b67d697c82001fc3764f03df953e": "Terminal AAPALEL", - "f2dbc6dd77ebd7ee6e635d2e88a29388": "Tentativas de reconexão: {}", - "7b4a3e2ccafd5410416625d455f7db44": "A conexão de tentativa falhou, {}", - "770d0e3e69e2bdb0f4688d602253fa28": "Autenticação da chave privada", - "3dbc3d6f340c62446d5e19a7a338474c": "Autenticação falhou {}", - "e0825948c99299a2d2f7171634bd5fe8": "O servidor de destino recusou ativamente a conexão", - "a51fb75bde49493b290d1d654cbd018f": "A resposta do cabeçalho do protocolo cronometrou -se e a qualidade da rede com o servidor de destino foi muito ruim: {}", - "59cd37aca5d30b4bd0c1b746c8dc4cc0": "As chaves privadas podem exigir acesso à senha: {}", - "41f6f8e498eb036ae69adbe2f80c3dd6": "Erro desconhecido: {}", - "0122cb69d6c480c4e5a18fcb0acdfd49": "A autenticação é bem -sucedida e o canal de sessão está sendo construído", - "fa2f0078903e1fbd1f06fb383cded8e6": "Login Sucesso \\ n", - "1a0fc31214912c08b49032069b6c0ab4": "Sucesso de login", - "0b2b278588fab56ed760e52a21ed5a15": "Canal desconectado", - "20536b8e623d518be1f31d393839ef70": "A conexão está desconectada, pressione Enter para tentar se reconectar!", - "94c94a73ad6c35edec9bcd4bfb100c88": "Erro ao ler os dados do buffer tty, {}", - "9d46aa2efa419ff4a75df14577f1e629": "O cliente desconectou ativamente", - "d566f8db7ec2abe7de92e59c901c4077": "Ocorreu um erro ao ler dados do WebSocket.Repetir", - "0a6dc00cd150c5a1a776182bb2ea7406": "Ssh_login_info", - "14230d11143a03f4330c6433d5032a9d": "Anterior", - "d55b30607c2a9a2616347d6edb789f6b": "Durar", - "96b0141273eabab320119c467cdcaf17": "Total", - "5da618e8e4b89c66fe86e32cdafde142": "De", - "9952a15e524c95759c3580205db6fac1": "Depende do seguinte software, instale [{1}] primeiro", - "00d5ef7a9e107dd42de216656ab32c38": "Verificação falhou", - "d706b5d82086b915fe2b3ef9921b4181": "Temporário_id ({})", - "48649d8c2d04aa439d10bc45eaba8f75": "falha no login", - "131c05252110792212e3e3666a351154": "Configuração relacionada ao SSL, não exclua ou modifique a próxima linha de 404 regras comentadas", - "4ba7e24ac1607ab761c124ca7352ad08": "Configuração da página de erro, permitida a ser comentada, excluída ou modificada", - "31bb30ca4135945adbe0c2daa9545b39": "Configuração de referência PHP, permitida a ser comentada, excluída ou modificada", - "f9da3e5ae75ce0ae39884ae2ea295a66": "Referência da regra de reescrita de URL, qualquer modificação invalidará as regras de reescrita definidas pelo painel", - "7d9fca00db8a10042f1c2cbffdd54a9e": "# Arquivos ou diretórios proibidos", - "4bd66f16fad90ea635ef102c2ccd3969": "# Configurações relacionadas a verificação de diretório para aplicação de um clique para certificado SSL", - "6aabca3a3e1c79bd5837a1ddae95fe70": "Houve um erro de criação, tente novamente.", - "256c9a85375f57f2dc9f6f318c6578f1": "Crie o site [{}] com sucesso", - "c3c7869d22051eaa78a831834a398351": "Houve um erro excluindo, tente novamente.", - "e2d272e229674e4c6765fab24a323604": "Excluir site [{}] com sucesso", - "4018ce634a10d352867f04962f107c14": "Houve uma configuração de erro, tente novamente.", - "eeddf79f68ffe029ed83fddcba46b35f": "Antigo proxy", - "6f3177a6be43fd2328162d05c1c2c712": "#Cache do CLEAR", - "636699280eaed9dc8b494d9092868760": "#Regra de proxy reverso #Referenciado, se comentado, o proxy reverso configurado será inválido", - "1876192a4e66c5623979e0b02fead8e7": "Configuração relacionada à conexão #Persistente", - "222a267cc5778206b253be35ee3ddab5": "Atual", - "c27a45bf16475a157ca1014cf886bb56": "Por favor, insira uma nota", - "362538d60f495840284c667e67831b16": "Diretório de varredura", - "54b4c2c946bb5e97d787825f41f344b0": "#Configuração de proteção do HotLink", - "a17f5bc22553d897f6363867c0165256": "Categoria padrão", - "6fa956d3a9e880b4190bfc1de47faa90": "O nome de usuário é ilegal, personagens especiais não são permitidos!", - "d684964cf02bdb37eb086fb2470c0135": "O nome de usuário é ilegal, não pode ser inferior a 3 caracteres!", - "a6825ba054814d831e71f83ac090740e": "O diretório crítico do sistema não pode ser usado como diretório FTP!", - "8e61d99ca246955cc31b67a365b2a216": "Desligar", - "d154a5ff03bd9ccd568018f5e51d00cb": "Ligar", - "bdd5c4786695af78089e85f507e5643c": "Porta FTP", - "aa00d1012298d40c84daf11e09956c65": "Download:", - "ad6fc2abb89b42d391b4bf84e8e6cd2d": "Serviço SSH desativado", - "0692d6f0819524aaa05e73f03022ec5b": "Serviço SSH ativado", - "7b73b93bef61012a61ae023017d02721": "O diretório especificado {} não existe!", - "360cd057ad479f8662f7d1ba66f5cc8e": "Enviando para {}, aguarde ...", - "95130692a2979832dc4d2143403f3a11": "Carregado com sucesso para {}", - "d5d68ebd5292fcb5196ec251ba873f6c": "As configurações do usuário não retêm backups locais, excluídos {}", - "d2f7749d7de8ce82ae866155351919b3": "O backup local foi mantido", - "778f2718d7245db0fad84757bad751d6": "Falha ao limpar backup expirado, erro: {}", - "dd78b9ebd58a8dea880563698d4c4330": "Mantenha o número mais recente de backups: {} cópias", - "5e2616a34c7b01f741cd85ad10bb9cbc": "Os arquivos de backup expirados foram limpos do disco: {}", - "a0adb8f2e5f0d4397d48466bafd6f230": "Os arquivos de backup expirados foram limpos de {}: {}", - "9572c95333f896e891521e61d7c5a297": "Raiz do documento do site: {}", - "7a9a182fc01b961feb593d180d13aeb8": "Diretório de backup: {}", - "1f9491d864cba19c180abe8941a92023": "Configuração de exclusão: {}", - "1d5217f82b4cef426f8ee3fdde465424": "Comece a comprimir arquivos: {}", - "5d38cd7c4d8e2b0c4fa5591f8eab0c37": "A compressão falhou!", - "5789a3a4123ffb9fd9073fbda416e9c6": "Site backup para: {}", - "6cb4511c7761c4cdaab742496c122023": "O diretório foi apoiado para: {}", - "003ee27348243be75678b9cff2903eb3": "Backup WordPress [{}] com sucesso", - "46d0294b3bb11e927f96319ee81395cf": "O upload do arquivo falhou, pule este backup!", - "a58667d22a7d741f6c90bc6082acf1c4": "A exportação do banco de dados falhou!", - "3875029ec22001de5ece63df8ea8286d": "Backup para {}, um total de {} {} e falhas {}.", - "af3eb0c9d6b3f6e7e32d6b81df04a186": "Backup falhou {}/total {} sites", - "640a52c8f34bbd9ed9f214353440a490": "Notificação foi enviada", - "0dbafec38271230939c0fc9d41e9667c": "Falha ao enviar notificação", - "4f20922485d59ff65db53473b17c0df9": "O conteúdo da pesquisa não pode estar vazio", - "7a428a0050c9d556e632a5f7175b24ed": "O sufixo não pode estar vazio;Por favor, digite [ *. *] Para pesquisar todos os arquivos", - "cdd28535892f88791917e7ed77a8245c": "O diretório não pode estar vazio ou /", - "e7582a886ed8861ac63d9b2a7d94b973": "O conteúdo a ser substituído não pode estar vazio", - "d5ef96e383d376beeec28da7acfea516": "Baixar arquivo", - "f24f6c5f5841340f898a6baaa6478bcd": "Baixar arquivo {}", - "7c282bcf37923b74b76fb8295f806051": "#Regra de redirecionamento #Referenciado, se comentado, a regra de redirecionamento configurada será inválida", - "7e74def784761dd8bec3018cc6ea5a6f": "#Regra de redirecionamento referenciado", - "ff1251600d8019bbf4280cafc534a39c": "{}, o URL de destino é o mesmo que o caminho redirecionado", - "d8a8433146dbbeae50556fbae3021090": "Desculpe, algo deu errado", - "98890699b6686f80f746e6c49132a9e6": "Excluir redirecionamentos [{}] com sucesso", - "4bbfcde12aa36ec375a332f51bf905d6": "Por dia", - "78748f15bb65939b6d130c3a5cf8b7dc": "Cada {} dias", - "cf9af10dcebe2f12092ff6028a535f08": "Todos os dias {}, execute a {} hora {} min min", - "e114abed903b9d26c476d4f6cd59c04b": "Por hora", - "0aef48ea8132b0551fa25a10fd0a6585": "Por hora, execute a {} min", - "50419faf9662e0c3f283d496bcb8eb72": "Cada {} horas", - "2a0706d7e3ca3ce9e955471a0648dfcc": "Todas as horas {}, executadas em {} min", - "84d94bf0382f611906b7edd65d6af169": "Cada {} minutos", - "14d27796d1c96457c7c019661a2f32d4": "Execute todos os minutos {}", - "6c25e6a6da95b3d583c6ec4c3f82ed4d": "Semanalmente", - "e1df614d393ab86fd63c5062f7e77936": "Cada {}, execute a {} hora {} min min", - "9030e39f00132d583da4122532e509e9": "Mensal", - "69c5e99b9ad8d2b8f11be9a60cbf71da": "Mensalmente, execute no {} dia {} hora {} min min", - "9d1a0949c39e66a0cd65240bc0ac9177": "Domingo", - "6f8522e0610541f1ef215a22ffa66ff6": "Segunda-feira", - "5792315f09a5d54fb7e3d066672b507f": "Terça-feira", - "796c163589f295373e171842f37265d5": "Quarta-feira", - "78ae6f0cd191d25147e252dc54768238": "Quinta-feira", - "c33b138a163847cdb6caeeb7c9a126b4": "Sexta-feira", - "8b7051187b9191cdcdae6ed5a10e5adc": "Sábado", - "884b10623e397741c72987473f90295d": "Cada {0} dias", - "1b30f87e42de42b3e2cabf0a0fe3c449": "Editar notas", - "5ed48eedb205aa687178500c75228409": "Senha raiz modificada com sucesso!", - "db669c6377ab90eef78800a48fd4a453": "Solicitar tempo limite", - "af52f5340c065f4d38182f7a27d59f75": "Mantenha vivo", - "70b46e57f3c33abdb9558bc5c3a234d9": "Pedidos máximos de Keep-alive por conexão", - "6868568c3abc547e622a303891a906b0": "Processos padrão", - "224114c62dceb7ebee2db43c6c79a961": "Número máximo de fios ociosos", - "3c60809d9a5a0900dfbc28bb017e410b": "Número mínimo de fios ociosos disponíveis para lidar com picos de solicitação", - "3783030daf8154be6e11fc4160c229c3": "Número de tópicos criados por cada processo infantil", - "2f25e4b1a2cb84576740da749a2daef2": "Número máximo de conexões que serão processadas simultaneamente", - "72e3edfd72758944413b1e4e9c432f1e": "Limite para o número de conexões que um servidor infantil individual lidará durante sua vida", - "26c74a59d7d10bd927dce45e449943f1": "Erro de configuração", - "0c939a5a8e86280f277af48ae2b6a292": "Servidor ssh", - "a7dad48fefe8778dd10744a8a4dbae8e": "Nova porta SSL phpmyadmin", - "7f91451dfcb0045a4684fa68b35d0365": "Nova porta phpmyadmin", - "8b7e4d42188dd3064e99d4cc76f2f94d": "O código QR atual expirou, atualize a página e rescindam o código!", - "238baadc7351e6af7625f2b3c888adfd": "Este servidor está vinculado a um máximo de dispositivos {}, que atingiu o limite!", - "888c9de5fc0f1389080b1c2bfac90ee1": "Falha ao salvar o arquivo de configuração", - "6b7b87210440f6f1e97c96967dd1d95d": "Não modifique a regra 404 comentada na configuração SSL", - "b85e34869ba5c840bdf723cba455d12c": "Para modificar a configuração 404, encontre o seguinte local de configuração", - "556aff9eb9e6c10d844f9ac632325b01": "Descompacte o arquivo", - "8524de963f07201e5c086830d370797f": "Carregando...", - "b2395c5c988697212ef92e320d47097b": "[Composer.json] O arquivo de configuração não é encontrado no diretório especificado!", - "1b58517a177793277f673701c1b7d8b2": "O arquivo [composer.lock] existe no diretório especificado, exclua -o antes de executar", - "e59eb71bb0d6c668ddf49a526468f40a": "Atualmente, a versão mais recente, não é necessária atualização!", - "6a02d85d98b578f0f37853bf366a30d2": "Não conte arquivos ou diretórios maiores que 100 MB", - "881d744d56d26d542409c9e9a37ffae9": "O módulo especificado {} não está instalado.", - "195db7b1dd43ab76173d8f6497a878d6": "Ssl_get_success", - "04eb7ae7b137df9d43f7588dac35db5d": "SSL_NOT_BTUSER", - "ca9cb3b791215702c4330798c401a014": "Tive com sucesso!", - "37779be9505d214d4c1b4b4e0e787a6a": "Por favor, vincule sua conta!", - "b7ad022c6ce9435c43c6760c8ba89b20": "Ca Can", - "5d39c57e28ab85457e4949306be619e8": "A conexão do servidor CA cronometrou, tente novamente mais tarde.", - "721eb0b3ea85b39c22f16d6dfc84bc32": "O nome de domínio não pertence a este provedor de serviços DNS.Verifique se o nome do domínio está preenchido corretamente.", - "b5366a9c53b455fdf8a552c205ca9021": "A conexão do servidor DNS falhou.Por favor, verifique se a chave está correta.", - "4de3dc0403846edfe5ff520837e2bbe5": "A assinatura falhou, o nome exato do nome de domínio de domínios: (.+): {} Excedeu o número semanal de emissões repetidas!", - "30c0b6ae1acf6137b588473814f3330d": "A assinatura falhou, o IP do servidor atual atingiu o limite de criar até 10 contas a cada 3 horas.", - "797e2e43e3fc3737891adc8ab4a1655c": "A verificação falhou, o nome de domínio não foi resolvido ou a resolução não entrou em vigor.!", - "9efd01f346301888216d77d35ec156cf": "Autenticação falhou, o erro de resolução do nome de domínio ou URL de verificação não pôde ser acessado!", - "6c23a7d25119c77017d1aa04761fefe8": "Falha ao se conectar ao servidor CA, tente novamente mais tarde.", - "b7a370078ae6520cde883252890195cf": "Nome de domínio não suportado {}, verifique se o nome do domínio está correto!", - "1593706a4e3794c75129c8347021f0c5": "O nome de domínio {} não encontrou um registro de resolução.Por favor, verifique se o nome do domínio foi resolvido.!", - "1d80008b0cc4936ab73047baf061c84e": "Se um registro de resolução TXT válido não for encontrado no nome de domínio {}, verifique se o registro do TXT está analisado corretamente.Se for aplicado pelo DNSAPI, tente novamente em 10 minutos.!", - "81dab277ae106f35a118916e25f3f026": "Encontrou o registro txt errado em {}: {}, verifique se a resolução do txt está correta.Se for aplicado pelo DNSAPI, tente novamente em 10 minutos.!", - "b1bc7e763e87ef08d753a0676a0d5361": "Esse nome de domínio não existe sob esta conta DNSPOD.Adicionando a análise falhou.!", - "43901eff07fff70732a4e1d6a732920b": "A conexão com o tempo limite, o servidor da CA não pôde acessar seu site!", - "7cb06b776259c13fa73d3be5577df74c": "O nome de domínio {} é necessário atualmente para verificar o registro da CAA.Por favor, resolva manualmente o registro da CAA ou tente novamente após 1 hora.!", - "09c36cbe592612c2546e60652f2d6964": "Tempo limite de verificação, verifique se o nome do domínio foi resolvido corretamente.Se o DNS for resolvido, a conexão entre o servidor e deixe", - "27bad102d3dd6f86d5f6c680c8353089": "A criação do pedido falhou, tente novamente mais tarde!", - "e10beec48a4a4b433b2fec2eaff64671": "Mais de 5 falhas de verificação em 1 hora, o aplicativo é temporariamente banido, tente novamente mais tarde!", - "1a728d28f052c9956f9d014d60c61bff": "O servidor da CA negou o acesso, tente novamente mais tarde!", - "3f56bc50f098e641bb3d42e2d4255cbe": "Pronto para se inscrever para SSL, nome de domínio {}", - "3b5e16d8f5e1b88c78e494e6601a4d01": "Tenha sucesso, resolva manualmente o nome de domínio", - "cf6b24b05942cd0c3723d7a4c25e6138": "Certificado de Salvamento ..", - "bbb21c1842b512148f687ea068553c85": "|-Configuração de renovação automática ..", - "c06d0b48f82d74d3c2854dabdba12d93": "| -O aplicativo é bem-sucedido e está sendo implantado automaticamente no site!", - "1851141907c561e6ac67cba17e549232": "| -Enializando o protocolo ACME ...", - "78e67927014eab1b84eb285b6057fca6": "|", - "4896fdcb74c0e04522c8d3d89d08d569": "|-Informações de verificação para obter ...", - "81a3b1828b60659bc3d3c9711e66f0ba": "| -User envia solicitação de verificação ...", - "f147fc272d665cd009e1108c5fb6993d": "| -Estando CA para verificar o nome do domínio [{}] ...", - "4c699430325d31db3d7b43b0a0999364": "| -Gee os resultados da verificação da CA [{}] ...", - "2b7dd2a937ababf46efb11073787664c": "| -Todos nomes de domínio são verificados e a RSE está sendo enviada ...", - "1de253d3eb460e60480626694092d89e": "| -GETING CERTIFICAÇÃO CONTEÚDO ...", - "a0c16d2f8e2aeba9dd9a3b040861ff39": "A aquisição de certificados falhou, tente novamente mais tarde.", - "89edc2a5e6ccecc2bdbdd1f9536fb90a": "| -Error: {}, saiu do processo de aplicação.", - "94417e0c15f634f59ce15128ef146686": "| -Error: {}, saia do processo de aplicação.", - "03268bb5fa60cf57ac7c30f1f99dab01": "| -Exitou o processo de aplicação!", - "409bd1860bf065c68921473fc2266347": "| -Adding Resolution Record, nome de domínio [{}], valor de gravação [{}] ...", - "8b2ee088303a8001eaedb8c62e3de7e3": "| -TEXT para verificar o resultado da resolução, nome de domínio [{}], gravar valor [{}] ...", - "a11fba95c84fff590acd7dbdea4528e6": "| -Request CA para verificar o nome do domínio [{}] ...", - "676e1a4f8e4561ad55045461f3421d62": "| -CHECK CA VERIFICAÇÃO RESULTADOS [{}] ...", - "d60d5b998a8ef802ba7f5b5ed343e256": "|-um erro ocorreu, tente novamente [{}]", - "71087be1722815599ebecd0fd0f58b5e": "|-Conteúdo do certificado de busca ...", - "6d1e7a222bfe888debd080a117490c9d": "| -Clearing Resolve History [{}]", - "4d6822ed3bd01f379f2ab4b1e68068d7": "Atualmente, não há certificados para renovar.", - "b74c00ca5fee122c49cd66ce3d91b2cf": "| -Nowal falhou:", - "023d5992564106099e169c79963e8ed8": "Nenhum certificado encontrado para o pedido especificado!", - "d0b3af29d4790521c7850f4955d66745": "Precisa de pelo menos um nome de domínio!", - "7d90329d5aa9a8f393956278ecc24dba": "| -Verifique o dir : {}", - "ebe9660f1426b037f25101329deed827": "Nenhuma informação chave válida DNSAPI encontrada", - "a618b4f6cda69737d20199139556d955": "Falta informações de verificação do pedido, tente reaplicar!", - "22b6e2227978405de1335f645c3cf352": "|-{} Resultados da verificação da consulta ..", - "6a7eae900a29ff7f1661c80cfd199ab9": "| -Verificação foi bem-sucedida!", - "a10a65f23fcb6e0ac204f2de7b5fe9f3": "A conexão do servidor da CA cronometrada, tente novamente mais tarde.", - "d568b4df4d83c54698fe15ad656181ed": "Emitindo falhado, o domínio {} excedeu o limite de reedições semanais!", - "5ac0673b95a9e6af88bb008e24c09bf4": "A conexão com o servidor CA falhou, tente novamente mais tarde.", - "2948ef630d1bdb0b2e7209d83f13af67": "Nome de domínio não suportado {}, verifique se o nome do domínio está correto!", - "35390f482d893d9c9c0c0bb055e70572": "Muitos pedidos para esse nome de domínio.Por favor, tente novamente 3 horas depois", - "08ab5b550622ca76c10161f1e6b54a00": "| -Local Autenticação foi bem-sucedida!", - "20449c21ce7377b2599c101bdabf6560": "| -Local Autenticação falhou!", - "bab62ab47e998a0ca716266835bf8a31": "|-Creating Order ..", - "6517db66d510fdaea47a55ff778a0c94": "|-Informações de verificação para obter ..", - "655a6038ba5837b278b39e18d93adea0": "|-Nome de domínio verificador ..", - "2d51882843ffc29148c2ced7741663dc": "| -Sending CSR ..", - "dfa86860b18fd5248e3e72415c19233c": "| -Downloading Certificado ..", - "7e0173b4f1e9e78c08a70a0350422af2": "Aplicação bem -sucedida!", - "02900bf9834436584397d0e1ed6d6385": "Aplicação de sucesso, implantando no site ..", - "8a09aa6b7131f71b3ba97f13d5b7823f": "O número do pedido especificado não existe e não pode ser renovado!", - "cf6c5b924aa4aede56b3e0e0373ec1f8": "Especifique o nome de domínio para solicitar um certificado", - "e08c1382c834439d0fdccbc24d36ec86": "Especifique o tipo de verificação", - "ed5c4feb5edcfbb95544d094d451921e": "Especifique a raiz do documento do site", - "fb3d957c8fad98876c10db10e32c0126": "Especifique DNSAPI", - "dcbd3fcb143a3101480566f5c1f07ad3": "Especifique o DNSAPI Secret", - "1f93e148160dbf6dc586fb1b90a37758": "Especifique o Índice de Ordem", - "6953519c64b998226d0294b961deca62": "Revogar o certificado", - "8fcc1d6fd24fad55d9e8fea6631886db": "Por favor, insira o índice da ordem para ser revogado no parâmetro -Index", - "2e95d6e834bed89e1e199808d0cfd8aa": "Especifique a raiz do documento do site no parâmetro - -path!", - "4a8d983505848031c77a15c408cd1f3e": "| -Retry the Command", - "ed069811f3c302d22a0f4aafc6903826": "| -O usuário abandona o aplicativo e sai do programa!", - "76d7463224add6c478d218ab79999597": "| -Certificado obtido com sucesso!", - "140bda69874872f8402052c613c0b3b9": "e -mail de teste de alerta AAPAnel", - "76a1ec4a3fcdc304394ff14dc90f8072": "O número de threads do painel deve estar entre 1-1024", - "dd7e82b5fb3c67e3e41d96f22ba838fd": "Nova porta do painel", - "bc6ccc8f305d830532bf24b0791e0e18": "Suporte de tag curto", - "f83e9911e0194a7a510840e43ee68c1e": "Suporte a tag asp", - "fe264e2a01e31b8c0887b9392c00eaa7": "Tempo máximo de execução de script", - "e778f31ded144a4c69fd8d19c814f1d6": "Tempo máximo de entrada", - "3138333042653cb833e6220509ebe967": "Limite de memória de script", - "afd0bc79b0d6ef5e1c4e1cae6a929392": "Tamanho máximo dos dados de postagem", - "7b9659f9a85898f51af2bb16650e8c32": "Se deve permitir o upload de arquivo", - "750a12e2e02652783023eb6a6548fa61": "Tamanho máximo do arquivo de upload", - "125e4c30d7a0127379a98f95941f5864": "Valor máximo do arquivo de upload simultaneamente", - "b02022be27142978dfad9cb581984e0d": "Soquete ao longo do tempo", - "23b4411eff14661f93f7afea452ea8e3": "Nível de erro", - "800ba971c4dbb82d7d4d9c28840165b1": "Se deve produzir informações detalhadas do erro", - "444b2157e1e732e2ec65786a52551454": "Se deve ativar o pathinfo", - "236df51bb0e6416236e255b528346fca": "Fuso horário", - "d2174fc17fcd785706114088b84dbbce": "URL de login temporário foi gerado", - "f561aaf6ef0bf14d4208bb46a4ccb3ad": "xxx", - "b5101eb6e685091719013d1a75756a53": "\\ 1", - "2f9fc94872130dd0fb976fc6b0b96514": "A entrega da mensagem do WeChat falhou.-> {}", - "4c4bb8f0fc783e3ff0caf8c69cee8e67": "O plugin [{}] não está instalado", - "c0f4aacf53164f19a0e3560514306452": "Esta operação ainda não foi suportada, atualize o plugin [{}] para a versão mais recente", - "271bac9db0d6fb9f971271a8f37ca6c5": "Por favor, instale o módulo DNSPython primeiro: BTPIP Install DNSPython", - "d11dfae04c7fd00b48b744926f7e733b": "A configuração foi bem -sucedida, a seguinte regra falhou: {}", - "1016ed461618afd2dde9a4a709a4d080": "|-Retire as informações de verificação para o front-end, aguarde o usuário resolver manualmente o nome do domínio e completar a verificação ...", - "77619ceb7742d8a8f87e52b02592d873": "A assinatura falhou, não conseguimos verificar seu nome de domínio:

1.Verifique se o nome do domínio está ligado ao site correspondente.

2.Verifique se o nome do domínio foi resolvido corretamente no servidor ou a resolução não é totalmente eficaz.

3.Se o seu site tiver um proxy reverso configurado ou se você estiver usando um CDN, desligue -o primeiro.

4.Se o seu site tiver um redirecionamento 301, desative -o primeiro

5.Se as verificações acima confirmarem que não há problema, tente alterar o provedor de serviços DNS.

", - "5e71fccee12caedf853a7313ea204721": "Erro: nome ou serviço não conhecido", - "b6e3d7366f73e2c5e32717d679db6474": "Erro: falha ao estabelecer uma nova conexão", - "cdffdb1c794cf0dd777b3941a31459e4": "Erro: Leia o tempo limite", - "4573823cc04a9cbf8a7bb254b762db91": "Erro: conexão recusada", - "e3c2e426ad1b23571c48ec572ca675bf": "Erro: conexão fechada final remota sem resposta", - "db3a5c61130d7ca2046f5f9d0cd08073": "Erro: {}", - "fe723570085e5cc1ecc3dfc88a46aa2d": "Download Timeout: {}", - "0eeb116408665d50a2f2092a6c277ee6": "Sem espaço em disco disponível.", - "57a43d6e8c479df3a51421eba70d5621": "Verifique a soma de verificação do pacote falhou.", - "c12c62dd767caf90d62356b47349d871": "Não é possível obter a barra de progresso para este plug -in.", - "e9ca862378b02ba5fea97e3a6f9fdd5e": "Banco de dados de teste", - "fb7938419791f6dbc5464da8b4300c71": "10 falhas consecutivas de autenticação são proibidas por 1 hora", - "d55e6e0c13df775ea0eabea4f36ff8da": "Ative pelo menos um comando e firewall", - "572097b2302e2c7fe0a3375db4e3ad9b": "Certificado A leitura falhou!", - "188c4e0ff2d4cb58ecfcd2608cfeea2c": "A conexão do servidor DNS falhou, verifique se a chave está correta.", - "e3b11e6d575174fdb838e311bb404fd5": "Especifique a tecla DNSAPI", - "a33d17910b7aa3b68c4d864bede9bdf3": "Renovar certificado", - "0dbd3323f74314d1cf85c7db5ac2fd1d": "A versão atual do navegador do IE é muito baixa para exibir alguns recursos, use outro navegador.Ou se você usar um navegador desenvolvido por uma empresa chinesa, mude para o modo extremo!", - "47b1cbb355da8faa6415f12c96469ba1": "20 falhas consecutivas de verificação, proibidas por 1 hora", - "bb0b766f654bd8338d9dabb8c57378ff": "A criação do banco de dados falhou.Por favor, verifique o status de execução do MySQL e tente novamente.", - "5fa721871e93bc4121df74ce51454519": "Ativar o plug -in falhado, tente novamente mais tarde.", - "9f139adb77c26c263ff2a956d66f80fe": "O plug -in desativado falhou, tente novamente mais tarde.", - "f8e169b0ef8d58f84c71e375141852ed": "Falhou em criar conjunto", - "e35ca748f8c5a0e78731bae94fb7d68a": "Falha ao remover conjuntos", - "468baaa7179c8b181d1de35fa00267e9": "Tipo inválido de itens definidos", - "35c9b2817b191a3f60553d46b748068b": "Falhou em alterar os itens do estado do conjunto", - "cb8b69d8e4823d098886369ada22724f": "Adicionar falha, erro {}!", - "a73eb9f1fb82232c9f70bb80024a9d9c": "Exceção de permissão!Detalhes:{}", - "8879635d66ad75dcbfc8c31ba1351116": "O contêiner não foi executado!{}", - "684fc00ae67504a56c09ef71431b1261": "Exportado com sucesso para: {}", - "7e4182fc0365b28328ac2ec8896f73b1": "A configuração falhou!{}", - "458c9e6b1324cc3843c313c99a9c8623": "Pare de falhar! {}", - "b10f78da3571670e8567e599aba8d475": "Falha ao obter informações sobre contêineres! {}", - "8a615b544c027899738b19f2cc40fd93": "A renomeação falhou!{}", - "bda730e0e5c7444ef6f4f49957ab4f39": "A ser pago", - "299cf735a7b842c5bc2eaedf2e266387": "O nome do banco de dados não pode conter caracteres especiais", - "d8aaad37b96ac2886dbb9849b8254d7f": "| -No Certificado SSL encontrado dentro de 30 dias!", - "84278582ca50b97777b2c8ce780f9715": "Para obter suporte | sugestões, visite o fórum AAPALEL", - "a01e808b2be07634b0e3714bff919ae1": "Falha ao remover itens do conjunto", - "9a321cf078154e6594a8a29fb7847738": "Instale o módulo DNSPython primeiro", - "82058092ad7d2c7aa5e2f012b6544e59": "Falha de empurrar! {}", - "994e5a057aca3524ba773ec33228e184": "Falha na criação!{}", - "a32e1f09fc2739d94c51a7168675e0e9": "A submissão falhou! {}", - "5e3b84200bea6d70f6fed1d5802a7fa0": "A consulta falhou, não existe endereço", - "3544848f820b9d94a3f3871a382cf138": "Nova Senha", - "b60091f633dedd493b16f5548e32233d": "Endereço de inicialização do painel", - "e82eb2921856b4230611dc1406f60a6f": "Lixo do sistema limpo, totalmente excluído [{}] arquivos, espaço de disco libertado [{}]", - "cc478711642936a519c27b7c388fbb50": "AAPALEL CLI", - "39ea14ec0df812219c450ba15230ad2d": "| -Error, nenhuma porta válida inserida", - "bab5cb07adebbfbd938180d6862a7ce7": "| -Error, PLS não usa a porta comum como porta de painel", - "a6122a65eaa676f700ae68d393054a37": "Começar", - "6678fd91bc04eb1e34e3474809387e7a": "A consulta falhou, não existe endereço", - "0b69cd55a690bee672a1fb91091222f1": "Inicie o backup", - "a2eabcbade98a44462292c4666e62044": "Backup concluído", - "380e4afa19e793ff5f8c1ecd6e2a228a": "Site de backup: {}", - "f0f290884251850f0d9fa6afc91d39c1": "O nome do domínio {} é o mesmo que o nome de domínio alvo, desmarque -o", - "60956b50bb8e8c711d3adb889a70137f": "Por dia, execute a {} hora {} min", - "fca4e47d90253577901e874737b87dc0": "Erro de leitura de certificado!", - "0537c7e0d4363b745101a807e6b14683": "A emissão falhou, o nome de domínio raiz do nome de domínio %S excede o limite máximo de emissão semanal!", - "89f2b141f7790003d85cee94389a5899": "O caminho de importação não", - "579cd57c80fb53784de0bd606c14891e": "Somente arquivos compactados podem ser importados!", - "5766c6d37d04fdab31ce8622fcf6fab6": "Por favor, comece o firewall antes de importar regras!", - "74a7684631b29d814a52e3401576411a": "O formato de tempo está incorreto", - "f146f571f352f376dda16114593afd32": "Não arquivo php nesta pasta", - "a5ef7f95136c8e93b70c99cdc25d3b1b": "A regra está vazia ou o arquivo de regra está errado", - "8756f93b16b703129c155cf4bf950e64": "Esta regra já existe", - "2163538a10246cd5973057248443e827": "Erro de análise da base de regras", - "876088098a14f073e5da6fb4bf9a435a": "O arquivo base de regra não existe", - "6342b28c7c40e67016eb255e0f6fd382": "Esta regra não existe na base de regras", - "e8edb193e1cb171a17efe2765d72af71": "O arquivo não existe", - "1bbd886460827015e5d605ed44252251": "11111111", - "e1fa6849f823a00ea3ce2b63a584c918": "Nenhum risco é encontrado, aguarde um período de tempo para verificar", - "4919ae009da24772f54033981c72e7e0": "Este arquivo é webshell", - "c3ff5d517aa0206b89c0107494480efb": "O arquivo atual é webshell", - "841be447d44ca7e7424592573211f34f": "Arquivos suspeitos, a inspeção manual é recomendada", - "512e1fecde26404204e6072b3a12dcda": "Não há risco", - "3dfa767ed09b94292e6ed5bd39fce5d0": "Livre de risco", - "6f72fe3fe88bd53bf8f690d2b0c5f842": "Selecione o arquivo que você precisa fazer o upload", - "d27bc4b1f587e887d48e7fe92d7a5b23": "O arquivo não existe", - "8d5b6682ddc9e4453c4d971d3044dc7b": "O arquivo é detectado como uma webshell pelo sistema!", - "c21a06cf7008cdaa11bcc918d6ea1c0d": "O arquivo não foi encontrado, envie o teste", - "786c8548bf1e0cfec63644e085f73ece": "erro do sistema", - "449061dfe5a4b59740b41d2705ad0bcc": "Por favor, preencha o caminho que você precisa excluir", - "704ec17e6ea425b9acd1265f1dcd0072": "Não pode estar vazio", - "43043017cb4d53a3d984d879a42e2ebb": "Importado com sucesso", - "3874a2dc1de33534dd53275bf1e54004": "Não existe", - "2608ba6b8d1d54f9ffbfc630123ec583": "Erro de tipo", - "2684d8fd0fc1dfb52e16b70b47334f53": "Sucesso de desligamento", - "ef00da3502e70bd84fff4b5036ff8288": "Precisa definir números!", - "1720bc60b372b85a213d6492cdb677e5": "já existe!", - "2bc3cbf8db79ff0fac4659dc5c9b2dac": "Não existe!", - "07dc67d62b952497160f106a5c499b9e": "Erro de análise de arquivo Restaurar as configurações de fábrica!", - "cccd0da021862b684d131d9646a1d97f": "O arquivo não existe para restaurar as configurações de fábrica!", - "d3c6f5d15561b322dcf534f98c15d125": "Já existe!", - "d9c9b13c7fec0945d08ec49965daa4d6": "erro desconhecido!", - "6512bd43d9caa6e02c990b0a82652dca": "11", - "698d51a19d8a121ce581499d7b701668": "111", - "dab4bbd12ffc7517800304f0bdc4fc86": "Os dados a serem substituídos não podem estar vazios", - "436b3a5c35b1b4c27cd55cd2fd9e6f95": "Adicione com sucesso reiniciar o nginx para entrar em vigor", - "102779676feeffd385f7038542c05441": "já existe", - "965983d46c2695569cdb4e9e12fd6571": "Os dados que precisam ser interceptados não podem estar vazios", - "9416a531e05cf18f1c26b97263e3c96b": "não existe", - "52932c15b4fa68c60b470a4dbcdd9852": "O arquivo de substituição está vazio, adicione dados", - "8fcc9a1b8fb706211e066cd5f7df0a65": "Excluído com sucesso, reinicie o nginx para entrar em vigor", - "00203649d952e20d9611cfcd21b53034": "Excluir falhado/não existe", - "3365f0d08012012075d406cf271d77f6": "O conteúdo bloqueado necessário não pode estar vazio", - "2c555efbcf00eec34e159cbb930a49fd": "O conteúdo bloqueado já existe", - "c7f766edcc806204f816c6de56e0e8a1": "O conteúdo bloqueado não existe", - "9fbc55a13069e729c3d4fb48d823badb": "Ative o acesso IPv6!", - "95d19257def109989336b6347a8f0fc3": "Por favor, insira o endereço IPv6 correto", - "c0481d94eb7e8c7f46f76fec921373e2": "O endereço não existe!", - "f6c7ec89d03c9c2ac46e336abc81b7a3": "A lista está vazia!", - "5be36040b9fa33036a454c12f27b7375": "Não apoie o Ubuntu!", - "11158f5edfbaa7a72e2e1e701b426a73": "Apenas o CentOS7 é suportado temporariamente", - "0959d7ee773960b7193779c9fdadcb0c": "Não suporta a mudança do Ubuntu!", - "9033e0e305f247c0c3c80d0c7848c8b3": "!", - "25e5fccc23b6134c8a7c5afa6befd508": "Atualize o Spider com sucesso!", - "76e2205e6fc3d06106b783a710b1fe10": "云端 连接 错误!", - "17cae6641b0b761574f69f864134bf7e": "Erro de conexão em nuvem!", - "a71f40d50550ba90db76e85b4b93c083": "开启!", - "6242e194577ec71ab8fb3717c7777bec": "关闭!", - "fee1c1b6bffab76b18b09b002c405753": "O número de vezes não pode ser menor que 20", - "b14aa6510f1cff54c60f576ef0731959": "O período não pode ser inferior a 20 segundos", - "d8f4a1993546cc4b850cde3599e27aec": "não encontrado", - "fd16ce6210fa8913fa6230549b264979": "Parâmetro errado!", - "b4bc1177cfc8a0d0758e49b6a16f96d5": "Arquivo de configuração corrupta, corrija o firewall!", - "ef78de4bb739700e26b532d670638846": "Perfil não encontrado!", - "c02aa591c33647ad91bb649c1663bcd1": "Desinstale o plug -in de velocidade do site AAPALEN antes de usar esse recurso!", - "07a7794bae1a87cab16d773ce4c9597d": "Proibir o acesso estrangeiro não está ativado nas configurações globais!", - "bbaae08a3d7f937d5524fdfd83b37894": "A configuração é bem -sucedida!Para entrar em vigor imediatamente, você precisa reiniciar o nginx", - "8998ac964e10fa904c6f44b9a1d45839": "Precisa do parâmetro CC_INCREASE_TYPE", - "21d5a4dda3dccf2cde4a2453923ba0c1": "O tempo de bloco não pode exceder 86400 segundos", - "123f5dc9d4ce755a22034ce48a34f0ac": "Você precisa definir os números!", - "2c6392950dd8b9feeaa322428f883d6f": "O formato do segmento IP está incorreto", - "d7bdef3923c512c13a60dc05970ca1cf": "O IP inicial não pode ser maior que o IP final", - "b1f0a374986c41eaeafaa08485b42b59": "O segmento IP especificado já existe!", - "aef0de8ec2a48f9f94f54d41a008f8f9": "O IP já existe em:", - "74e16058920cfff989e455cb7edca425": "Modifique com sucesso!", - "4e140d99b9d960dc0faf5d43d200eab0": "Formato de dados incorreto", - "4295a035192a0fcd88c89d16f69972ef": "Importado com sucesso!", - "acb8450d83f87a19ac444ce07dbeae96": "O formato de dados está incorreto", - "168861bb3452cc8ed67893c706ed69e5": "Importar com sucesso!", - "0b8faaf8776c5eb0c07dcebc13dc55bb": "Não pode adicionar o caminho raiz do site [", - "2128a6acdfae9f60c3a292ae9afa33d2": "O URL que você adicionou já existe", - "4229662446c462c1d5212338127e8036": "Por favor, insira o URL!", - "3862c72b9bbd0accd915f171d10b5df0": "Por favor, insira parâmetros!", - "e4fd18cafa65c2071efa92e329fb1aed": "já existe!", - "08e36a7534385774e7972fc88ea1ca5d": "Adicione bem -sucedido", - "96dd1aef326fe2e13e360245d729f9a5": "não -entidade!", - "f10ae1b19b9c946f277946863a7ef9de": "Por favor, insira o site que deseja definir!", - "340c2b3dcf52aad038d610aea126fdf8": "Por favor, insira um tipo!", - "d7fda198ce652fc42e3b62bc39a87dcb": "Por favor, insira a região!", - "fc28444072899e60e6b2cb526651db31": "O tipo de entrada está incorreto!", - "53267148f9e661f7ab274b68ffe21bd9": "Tipo de solicitação de erro inserido!", - "0956e47e87d4d56af7f3a5bc36ec80de": "O site inserido está incorreto!", - "3964f2ebc20aec0215b29f34e4e9cc8e": "Por favor, digite: ID!", - "f30e2178ef2d7f61c9b4dbf1c73f6876": "Por favor, digite: Abra!", - "cfec0e080bc7d4ebaae29eaec8dcba24": "Por favor, digite: Status!", - "a6fba111c7d0f418059856c4160b4d0d": "O parâmetro está incorreto!", - "0e69f6afc958a9a1e75f1eb93908e9a9": "O código de status inserido está incorreto!", - "0fa9cb1eb677f9243d0737a37a69f89f": "Modificação bem -sucedida!", - "40ae230e6831501721508b806e3e8f16": "Por favor, insira o ID do site!", - "ef589b2e5faa2bd4c28c0017ccd737f6": "Não há dados!", - "89c6a8aafca7b01d7645766802707a37": "Por favor, insira o site que você deseja configurar!", - "5ccddb202b5b5e7f96aa3181bda9beb3": "Por favor, digite o tipo!", - "2913b96effaf71ad6c7487658e4056ce": "Por favor, insira o nome da área!", - "9c4bd2c334c14c48159a045e21a279c6": "O tipo inserido está incorreto!", - "66d6ebf480448bc6846362868a584866": "不 允许 设置 【大陆】 和 和 【中国 大陆 以外 地区】 开启 地区 地区!", - "60e59018ad2d3e94f166beed6445cf7f": "Por favor, insira um ID!", - "86484538f21c95f5d8b2e1df43135470": "Por favor, digite o Open!", - "230f490b7f059873ba86a8ad13a8b007": "Por favor, insira o status!", - "d3748b3102cc8ba898f0f0bec842ce9e": "A modificação foi bem -sucedida!", - "ee89c7f6d23c70ad8f7f0072e3e0cb9e": "Não foram encontrados parâmetros para este URL!", - "d1a198fffa0319462af0ceca6bc39dca": "Adicionar um URL com um [/] URL não tem permissão para a lista de permissões", - "0711b255059aaab715cfb46f6c503af7": "URL [ /] não tem permissão para ser adicionado à lista de permissões", - "e233e412faa6c35ecb389c502a7b6537": "Definido com sucesso", - "e78511f517dc9b86fd743725e8eae766": "O tempo de bloco não pode exceder 86400!", - "14fc8ce684c7f8c9cbd9357d46db244c": "O cabeçalho da solicitação que você adicionou já existe!", - "0d2d762c7ed9b83476612b6c08dcb18e": "O cabeçalho de solicitação especificado não existe!", - "9c3c6a1bed873cbb175e46b5cefc99e8": "A regra especificada não existe!", - "0d1596574ac7aa5d5ecb88d72c42f986": "O URI especificado já existe!", - "e66a7a8d9d1f830988f1f4a5f37ece0f": "A regra especificada já existe!", - "8528abe0d097e78242d535d5fe8d0753": "Por favor, insira o endereço IP", - "2aae8271977f5ad9ae44838f2b68bf91": "Tipo de aranha errado!", - "d9a32e26c6c673f85332bff9907e73bc": "Adicionar falhou!", - "50ff5b4f63ca1d6f72ac0884ce10a274": "O IP atual não existe!", - "de12faa543f0eb0c72ebc64849053f14": "A regra especificada já existe, não adicione -a repetidamente", - "5d1dc231a71676f0d96c0ea4308153b6": "Falha ao obter dados", - "64b31dda1dfab5250169f4cca5684824": "Somente os servidores nginx são suportados", - "191fae10bdd9d3eb6cb110b524fe40b7": "A submissão foi bem -sucedida", - "8147e6e4e48008b09597cc2f7b70cd8d": "Sincronize com sucesso!", - "432deaf800ca653afe458c204cbfbcad": "Falha ao se conectar à nuvem", - "7f3e6e3b62e446f04ab407e6aba2bb22": "Atualização concluída!", - "1f5d3751c5fd0f0d7d110164be8a597a": "Falha em editar", - "c2aaeb20ceb12d108a77c9383498a988": "A importação falhou", - "62fa7116894b93d89d11ba4eb1e41268": "Exportar com sucesso", - "139fd85baeada3d9d7cd8c65cf418df1": "Falha na exportação, o arquivo de log não existe", - "efb7b1e669a74d47a4baecbe1a2adc6e": "A exportação falhou", - "852e9973e436256e109f3a02ec9c140c": "Falha ao esvaziar, opção errada", - "bb145fd3bdcecf6ec853d1a887a58d6f": "Sem parâmetro sAFE_LOGS", - "c8eaeeb8efa13219ac368b6e39204592": "Parâmetro site_logs", - "883efdac3eb44df42fc05b2e8e3061f9": "Não site parâmetro site_all", - "af2d7b1ee22be2dc3928b7c57580aa23": "Por favor, insira a lista de sites correta", - "9f351e9815c428a76aecab3c2c4a4b75": "Limpar", - "50e457f6032e9d93fe4b58aec073da31": "Valor de status incorreto", - "631e7fc49fb8bdf2a3f13bdaf354915e": "A operação não é suportada", - "42e2a4ce9fbfd7ecf5a60a66cab89887": "Analisar a lista de sites ruins", - "8ce75a209ed6cd3ed34d38aa7ea167c3": "Acesso falhou!", - "a127bc2882f46ea763349be63b7a43ec": "Por favor, insira os dados de backup corretos", - "d6b3a322a8c5e66d8e4e05b81456adff": "Não tem permissão para definir 200 interceptação de código de status!", - "a8be909d5c4c96eda1b9b53089187b9e": "Código de status não permitido!", - "f471d5490f674bf6c0999d9291a911a5": "Código de status de retorno não permitido!", - "8b8e26f29b987d60a8decbd2e73be7a7": "Não é permitido definir 200 de interceptação de código de status de retorno!", - "337f8ed984e970f2873fc42622d99521": "Código estático não existe", - "6fc66d367ac0c5d115479b7f852e98f4": "Por favor, passe o nome do site", - "c8f9ac5c9288a3f53cccd5555ad1ee07": "Erro de latitude e longitude", - "67c052db394411fdf2755100c5028f94": "A configuração falhou", - "acc31522551404d50744536a2c1986a9": "Nenhum arquivo de banco de dados", - "eaafa722b4e623b2ac09f4ed2d9cee5a": "O parâmetro de tipo deve ser passado", - "2ac8aa908980e30a259bb8526527909b": "O parâmetro de pesquisa deve ser passado 1", - "62de36f39113a05a97a245a6d3126ca5": "Selecione o nome do site a ser consultado", - "7dbda89c64cdbf3c9afc9bceb5216308": "O parâmetro de pesquisa deve ser aprovado 2", - "84611bf808a166c5c384e72c9290573e": "Este ID não existe", - "0960b1153519b9ab3f2e5fc5e39da8c0": "[URI] o parâmetro deve ser passado", - "acaf3f3e6dcd6d9151630196089ef423": "[param] O parâmetro deve ser passado", - "f2eda7fc24524105189f3ef3853071a0": "[Tipo] O parâmetro deve ser passado", - "2f9d47a4a39f4ed99af1f20ddce75df6": "[STYPE] O parâmetro deve ser passado", - "eecc4f30c2c1ee3d9cf27edf9290c034": "O URI atual já existe", - "e200e571a58c37376c8498c2dc506c95": "O tipo [param] está errado, precisa de formato JSON", - "96ed9027cae5703401727a3d07764133": "O URI atual não existe", - "466767592170f74d16bcac3034109b33": "O argumento do caminho deve ser passado", - "d81f83ae44da0682974272b976e8e550": "Recuperação bem -sucedida", - "c2d2481eafb29f7e1525c6c63441359e": "Passe o nome do site", - "d83f684bb80236fbb89274d65cfc8119": "File_re_recycle_bin_err", - "4693fdceb14e16daac459aaef1d444c9": "File_re_recycle_bin", - "4950f82b4231ebbfa780bcf4eec4c545": "Por favor, insira o endereço IP correto!", - "abd5af540ed5a858d02b03846d94c1f4": "Faracho!", - "5c1392db72dc56bdf4ecfe41eb39622c": "Terminado em esvaziar!", - "5f401d1d15e2b6346405fcd81caee5ed": "Selecione um site", - "df0af44dbb9037dfb3e4a23e2d22d184": "O tempo não foi alcançado", - "74dc340e56666816aba1f2de4d8bda47": "A atualização falhou", - "8057e57596c33acf04619825d625a483": "A atualização foi bem -sucedida", - "6e57d6c47d23024e41f4a1aac73a3ea9": "Isto", - "b8c769fb426082acc16345608995c52f": "Atualizar bem -sucedido", - "eda0e602069bd48f46f456d8c2eadd3f": "Limpo com sucesso", - "f1cee94f9171dfe24f63e3e4c701e6d1": "Atualização bem -sucedida, um total de {} itens foram atualizados", - "45484ac5ec748cf3362d425ed7142b75": "A regra não pode estar vazia", - "34ad6868d5517e16532a27e67dd7b659": "O endereço IP do cliente não pode estar vazio", - "f9982dd2a6456912c0da42091c9843a6": "IP do cliente {} Erro de formato", - "d1adb09331d9afa950900abca1056553": "O intervalo de IP não pode estar vazio", - "dc5b7cdade7167836e61a128d7e4342c": "O segmento IP {} está no formato errado e deve ser uma expressão CIDR", - "193cb0af0143dc48f159b0fe55d2fc75": "O URL de origem não pode estar vazio", - "0708cc379456476aaba988b381c61782": "Passe o conteúdo correspondente", - "973aeb9471388c7321b04f3d921b98da": "Por favor, passe o conteúdo de URL que você precisa definir", - "864ffd29519010eafc7c5a5b958fb6a9": "Por favor, digite o agente do usuário que deseja definir", - "9c5f65f543fc633b9f8d20fed389a3ee": "Digite o nome do cabeçalho da solicitação que você deseja definir", - "1822f04ebba43b9d3576660d94e4818d": "A verificação passa", - "b36196750a032a791ecc8035853dc648": "O nome da regra não pode estar vazio", - "64f3408287530191cb9198dd02030e49": "O site associado não pode estar vazio", - "a29f521a7a2794dded1316a1b00a8767": "A prioridade não pode estar vazia", - "d7687135850c7d6afb5041e912b33824": "O estado ativado não pode estar vazio", - "6c671ab904133b581c1104942fe2c85e": "Ser usado para uma regra global não pode ser nulo", - "6f2a7d11851641b23d3f632552afa1bc": "A ação não pode estar vazia após uma partida de sucesso", - "7636b5101fba6a060fb30e30278eaa73": "O portal da partida não pode estar vazio", - "a805238b51120c00d0d4d6cff3b2d75f": "A regra não pode estar vazia5", - "01af1d384cfeae598fe40b29cb96737a": "A regra não pode estar vazia4", - "261d3dfaaca74f7fd29a4d304b036712": "A regra não pode estar vazia3", - "06ce124a509953bf7031fcd480c960fd": "O ID da regra já existe", - "6094a892b83d8bb51cf8197d39a7a25e": "规则 名 已 存在", - "362dff77f7403550e886db901404856c": "Exclua bem -sucedido", - "5538ee312635d0c82567238d58c23429": "As regras não", - "c085d954281443e56fde4f00fc27a3c4": "A regra IS_GLOBAL não pode estar vazia", - "151648106e4bf98297882ea2ea1c4b0e": "Atualizar bem -sucedido", - "e04a27d5fc3ba14c49f5e5383a21eaa5": "O estado precisa ser passado", - "03ce2004f163fa785d50ee2fd790ab38": "Parâmetros estão faltando: tipo", - "afad5921afb5338dae127d8451819581": "Erro do TypeParameter", - "31edbe069268a91831424986f5b5f36b": "Parâmetros estão faltando", - "b7c7b9e550d049c96732daefaed87f30": "A exclusão falhou e os dados não existem", - "8a053f40d81ebe24c54b365c60ce453a": "Parâmetros estão faltando: UA", - "06febc0dd7b24b4ede244d87c6da9899": "Parâmetros estão faltando: tipo", - "5a111a2b93b4c9ace88c30243f3befd6": "A modificação falhou e os dados não existiram", - "beb17a764dd515a66b16905b019a4252": "Parâmetros estão faltando :: pdata", - "e00dc8fc227ea447cb2698f5db98da48": "Os dados não estão no formato correto", - "897756b1d00a36b9afeb5ef76ff845e8": "O IP é importado com sucesso!", - "79f9ab06ea335dd09d909872a7398e1e": "O URL é importado com sucesso!", - "e82e753924daf07d001e460901b6fd96": "O UA é importado com sucesso!", - "112dd48824aab35f4b9dc986b6313885": "Limpou com sucesso!", - "4743684898b36b9ed3ac8e1ac5ca7024": "Exportar bem -sucedido!", - "baa8f76f78ba1a954406d06dacf64c10": "Ativado com sucesso!", - "50f223163c6f8e9f6b46d66165252cab": "Sucesso de desligamento!", - "68ae8c43a52aac63c5c62e1974afdda6": "O ID do script não pode estar vazio", - "eee298ea1d9259c2f0e2061ecd89c21c": "O script especificado não existe", - "b68a8dd0c887719b7cc3e10dc11843ce": "O script interno do AAPALEL não pode ser excluído", - "aefb82d7caf36c7f34a4cf60168a1297": "Atualmente, este script está sendo usado por tarefa [{}], exclua a tarefa primeiro!", - "4223589c4945a6757845760cf467a183": "Atualmente, este script está sendo usado pelo evento de tarefa [{}], exclua o evento de tarefas primeiro!", - "2e32a56c4ec44d75ff6cf5c6ac366db8": "Script excluído com sucesso [", - "16687cbe6e87af3bc2762f0410453ec5": "Nome ou conteúdo do script não pode estar vazio", - "1e156c08409accc1dc3da5c395c3ea22": "Erro de tipo de retorno", - "4371a6ff5a908b5ed6f43d52b49f7d30": "Erro do tipo de script", - "91896a15daf4558843249e11b7aa1fc5": "Modificação falhou", - "919c17a8f22c59f9af57399aa649003e": "Script com sucesso modificado [", - "72a21489a541757ee98b54790e5f431f": "Modificado com sucesso", - "71c95be7ca536d92d8f175fa245ddeb0": "Este script requer parâmetros", - "7ef6898209b89f4ace813b19f5eac840": "Erro de execução do script, verifique se o código do script está correto: \\ n {}", - "2086e84cd166412cf7236bdfb66e6d6f": "Falha na execução, mensagem de erro: \\ n {}", - "7a38e49c19eace49f0e9a0d03efadd1b": "A execução foi bem -sucedida: \\ n {}", - "5e1459e1ff5449309bd13d173dca1197": "O nome da tarefa não pode estar vazio", - "028f9aecc8c5edf83c2480f3ad9a62b0": "O conteúdo do script e o ID do script não podem estar vazios ao mesmo tempo", - "540b2cc165934ef688f12e044c500f69": "O tipo de tarefa não pode estar vazio", - "14ccb76798e0752c668bf447e7c536dd": "A expressão de Crontab não pode estar vazia", - "db17fc000dce92ec98ef53267f816b9c": "Expressão inválida de Crontab", - "cb541ef3c967a13cb4b1185a661214cf": "Script não existe", - "ed1bb81caf44e6b159848fcd0b28b0a4": "Este script requer parâmetros de script", - "14753fa53d0a8928c69d56611bdb43d7": "Tarefa já existe", - "aa76a4150f28fd8de372eb5fa2646a2f": "O tempo de início definido não pode ser mais cedo do que o horário atual", - "1844e0f52715901c376dca67e5742aa9": "Escrevendo a tarefa agendada falhou, verifique se o disco é gravável ou se o endurecimento do sistema estiver ativado!", - "aca7c9ca983c46286d91717fba637d80": "Tarefa [%s] adicionada com sucesso!", - "89c375395150b0550b20cdf31faf4ef5": "Tarefa não existe", - "186545b5548d9a6a1774a4049fdc9848": "Modificação de tarefas [%s] bem -sucedido!", - "20163019b13e51d668125cdeed968a52": "Tarefa [%s] Excluído com sucesso!", - "1df9f0729d55ed5e561bdf73b6b14976": "O ID da tarefa não pode estar vazio", - "497b38d4da5f19ed3f041f4ae6af6059": "Run_stcript_id e run_stript requerem pelo menos um valor válido", - "cf76609030a04a8e357171a25d76f2e8": "Por favor, use um dos seguintes operadores: {}", - "bb4d743f102448bf1ad62e1f1bd25e21": "A tarefa especificada não existe", - "56fcd6720b5bd174b1d614b7c7761fd5": "O script requer parâmetros, preencha os parâmetros", - "809888a81d143c1118d056643719a133": "Falhou ao adicionar um evento de gatilho", - "cf7b722aa54eaed8ec532abc7aeeb6c2": "Adicionado um novo evento para tarefa [{}]", - "dd66e7c4d78fab1dfd30524d47af971e": "O ID do evento não pode estar vazio", - "8abc3d5d0d73a76ae66603858617ad1b": "O evento especificado não existe", - "858080b55748bca57bca9006f2c36e10": "Modificação de eventos bem -sucedida", - "3269bea9f50e03c3d9c0daf3c14602c0": "Modificar evento: {}", - "f9fe8aba24799e53034cfd45a3c96824": "A exclusão de eventos falhou", - "4af5c12570de2eb62dc6e7877735c476": "Excluir evento: {}", - "101da618f72223d3eac9e66fe510b04f": "O ID do evento de tarefas não pode estar vazio", - "bee903cc3d03ab2c237eefb1d601fbcb": "A execução do script falhou com a mensagem de erro: \\ n {}", - "a0219a1dc1f8cdc782b95eaeb34a0115": "Arranjo de tarefas", - "da16076fff96665c62f1467f75785e26": "Task [{}] aciona a condição [retorna o resultado {} {}], o script predefinido foi executado!", - "75ca3ddb981b38aedc780ff2e95672f9": "Task [{}] aciona a condição [retorna o resultado {} {}], a execução do script predefinido falha: {}", - "1d78758685e5e2f4efeeb490f8521abd": "\\ n", - "394c2bed157aca84e125264dc28cbba2": "Tarefa [{}] adicionada com sucesso!", - "bed2edf1461178a1ff2c8a7cd88e837a": "Modificação de tarefas [{}] bem -sucedida!", - "4530a7e1558d007a02b066d0244f4fbe": "Tarefa [{}] excluída com sucesso!", - "9bb70ddd7b082fbaafb0b47a989b5cf5": "Não conseguiu obter o fuso horário!", - "38f40438a6c7e12eca9b4ea2ad297b3e": "Definir para o topo com sucesso!", - "257ee5f5c18f04e3a83fd18b33babf08": "Por favor, insira a identificação não ingênua!", - "c6afe11bc7f565bb0a423883101ce67f": "Consulta falhou:", - "403470819fb903a95a8fd9a22b01a3ee": "Crontab_month", - "7b9732c358c4e407030aca56ccb7a72b": "Não foram encontrados dados para a tarefa programada correspondente.Atualize a página para verificar se a tarefa agendada existe!", - "fff2eb19d097654514fc97c4a6e6d233": "Tarefas de Crontab", - "64e1288887b58a1c65d05676f7197477": "Modifique o status da tarefa programada [", - "ef1a7595dfa94a12b47bb18d3ac94313": "A tarefa programada com este ID não existe", - "5a7b17945b660284bb813be218c04c71": "{} A configuração falhou", - "5e7205744bd38904dcbc7c0b77456fc7": "Excluir {}", - "140fb31d1756ae3c75b297f0c17f8b24": "O nome da categoria não pode conter instruções HTML", - "e5e2e32bece629fcba864f7f5e8df60f": "CRONTAB_TASKNAME_EMPTY", - "f3b898619b284003475f2039ce53968c": "Tarefa de plano modificada com sucesso [", - "92f1227778f186dd8c5f6cae42f5285a": "Adicionado com sucesso tarefa programada [", - "a384027172bbce7cb6d3cc48d5c77ab4": "CRONTAB_TASKLOG_EMPTY", - "2306427c0311012bfe93e694c2bf21ed": "Crontab_tasklog_close", - "69df352ec3722e1847aee1b033e4bedc": "Crontab_tasklog_close_err", - "a0d347c48839cab209fa3827c667a5c8": "Excluir tarefas programadas", - "4962aeec761318537d034315f44a412b": "Excluir tarefas agendadas:", - "d5925f01eeb5596fed21f5dae6ffed30": "Crontab_task_exec", - "72bf657fef1eeafa1c8ecde5e4c06405": "A execução da tarefa falhou!Nenhum registro de tarefa correspondente encontrado.", - "8804f9a6882b09397bbc0599ba59b7ca": "A execução da tarefa falhou!O", - "e9ca7bae70907408382135107fb85a13": "Download falhou!", - "272892ac18608e0a1ad6bf080afd2e51": "Claro com sucesso!", - "06511118622e143af60d10d0877c9a3d": "A limpeza falhou!", - "424a90061acbe105658b97a0d86a4de2": "Por favor, insira o nome do arquivo!", - "14854122a7fb5958664a8d840dc0bead": "Por favor, instale o armazenamento webdav primeiro!", - "a027ff0717f56bf016b2f023d92e0c32": "Nenhum arquivo correspondente encontrado, faça o download manualmente do armazenamento em nuvem", - "f7314eff61e017245b088eecfee0c418": "Objeto de armazenamento em nuvem não inicializado corretamente!", - "a09c248c44ca9548bce41bc3e79b400d": "O arquivo não foi encontrado no armazenamento em nuvem!", - "9b23d05e4cb1d3ee22dd3dd7212817ab": "O nome da classificação não pode estar vazio", - "fade4a03622ee745aaf87044d697203f": "A duração do nome da categoria não pode exceder 16 dígitos", - "c875cf8f63d81c7fb198018d5c4bfa79": "O nome da categoria especificado já existe", - "f66442d89b8c613c082425a93b417695": "A categoria especificada não existe", - "caf573e6b4299b7f60e24635b0295e9d": "Categoria excluída", - "9133e7faf0b9fc202294e495163b1ced": "O nome não pode ser alterado para o nome da classificação de tarefa padrão do sistema", - "a3ee2a93b0a298de033ca1b784f62f04": "Não pode ser definido como classificação do sistema ou classificação padrão!", - "f300a6ee81c71057acc7beecdaf472c7": "Definindo sucesso!", - "290435bc045f16e4d099d721b7f706c3": "A configuração falhou", - "8d49c76279564d3127e45cae01976d37": "/tmp/cron_task_data.json", - "d7ee2f4d054a35aab002985b80644f24": "Falha na exportação:", - "1cd20eabfaa5ad5793b4075f976bf475": "Incapaz de analisar o arquivo json!", - "205904d76b14dbdb456fc2a2997ba5b1": "O formato de conteúdo do arquivo JSON está incorreto!", - "f63f66d08d61a3b16c11e0dfce9510e1": "{} Tarefas programadas importadas com sucesso", - "414522bb8a68d31211190865a1cefdd0": "Escolha importar o arquivo!", - "8342696568c9b58f16cf29e2492cddea": "A importação falhou!{0}", - "51b34794854788b7e5eb8c3a8fab0242": "Por favor, passe no parâmetro de tempo!", - "860f363ecfcf11c8740b9068152b910c": "Desligamento temporário do sistema e reforço bem -sucedido!", - "acbe969acf9b4925e963f102f3430f84": "O desligamento temporário do reforço do sistema falhou!", - "14a7c9c4ed221e7b3234de80bb8b9ef9": "Corte de toras ativado com sucesso", - "15af2c7a6a5766d84ad8c57c5d2fb0dc": "Corte de toras fechadas com sucesso", - "bd6df8255e394034ebcf93fcebfe06d3": "Aquisição falhou:", - "90a80c8e64ee80e8577c44699b6faa7b": "Falha ao criar tarefa agendada {}, verifique se o endurecimento do sistema está ativado ou condição de disco", - "796b4f2a019427bc554ef1166faad8aa": "Fechar com sucesso", - "f222f6f9531a00476e39863b53bcde07": "A abertura falhou", - "52d812a7c0b57b35fac4e668122191a3": "A execução do script falhou", - "c601909c952f2064e91d6f3c1d1a7128": "★ Iniciar o backup [{}]", - "890b5b1ca2b1aa96f0781c9fdc77ab88": "☆ Backup está completo [{}]", - "5316694cae24d434370be2d76146a500": "| -Error: {}", - "8f116bc202c47d146df58722a3ac30c6": "Tamanho do diretório: {}", - "78aeba095e656fa57452b915487c1b99": "Compressão concluída, levou {} segundos, tamanho da embalagem compactada: {}", - "b763e7e9f6b23d4b5066458506d26d55": "A execução da tarefa de backup falhou.", - "713660262f5ab9c3af9aa17c8d8a412c": "Backup para", - "243c0f3ec002883d6fa7770957ecf9bd": "A tarefa programada não existe!", - "57d4380c974a85fe8db5914c934addf4": "A tarefa programada não existe!{}", - "78df833c741b9814545d76a83f2db9b5": "{} Banco de dados de backup {} não existe", - "69c66d6525e77e17c2aaffea61f4d730": "Falha ao vincular ao armazenamento em nuvem, verifique se a configuração está correta!", - "58c65e272cfde6fc8cf73d0ffcde4bbd": "Enviando para {}, aguarde ...", - "5c9b599b99f7a169b9cd25f7045eaac5": "Sucesso de sincronização!", - "439d4d68575132c1a273fc36bbf6f72c": "Nenhum site encontrado Info com id {}", - "e9a08443260e6f3b795eb57419a6ad77": "Falha ao vincular ao armazenamento em nuvem!", - "636cccf0b373acec35770f9f26710396": "Falhou em ativar o corte de toras", - "dd2b16eb608e5838d556598d479e9264": "Espere a restauração começar", - "81c5f87b76468dbe7a152121fee71663": "Não há troncos redundantes para limpar", - "12af24fd6d32854160728cffa4ea2150": "Nenhuma limpeza foi bem -sucedida", - "2c4eca852599890038970a7e0f384470": "Image [{}] não existe, você pode tentar [puxar forçado]!", - "cb337dbfbc18aafa482051b6fc349dea": "Falha ao obter o arquivo de configuração", - "84d3fc0c1c70fcd6fdd7ca7c3be11225": "O projeto já existe!", - "a280b122a0b3249c26b1f94ad4573f50": "A gravação falhou!", - "72b8d771409a71a6650a65e1174cec30": "O projeto foi adicionado com sucesso!", - "0fa934d82d7863e34606d19520d12e48": "Ordem de contêiner inválidos!", - "eedeb135fe678559787fe2cb304f24cc": "O pedido de contêiner foi modificado com sucesso!", - "0c1dcdb6582992fa9ec4169c7c958e47": "O projeto não existe.", - "4ec9c8311b7814ee0f17b634cb7a6ae0": "O intervalo do projeto foi modificado com sucesso!", - "cda91d4feb0c7cceb0fa1aeabcf536b4": "Lançando contêineres por sua vez!", - "97f2a2dcbe0d211b8972c6151950b213": "O seguinte contêiner está em execução: {}.É permitido forçar a parada e depois começar?Você também pode optar por parar manualmente um contêiner em execução!", - "beb887915b2334d0bcb0f23910ee03fa": "O cancelamento do email {} é bem -sucedido", - "8e2b88c75a1d079404963b237ec134b0": "O token expira", - "33a7c1ccab0575fe23ece0f46ccdee4e": "Tokens inválidos", - "6b803f13e4c829ed6a65c0d5976af511": "Conteúdo de arquivo anormal ou malformado: {}", - "027ef5979f72a8ad82da2a5d58ee069e": "Excluído permanentemente {} da lixeira!", - "f00369482ba4cd8b50446356d3fad724": "O período de expiração da senha não pode ser menor que {} dias", - "501b1c01d3b31cb34cbcad5a19ae851e": "O período de expiração da senha não pode ser maior que {} dias", - "5ad475cca538c88655b2299588b9a091": "O tempo de tempo limite precisa estar entre os 300 e 30 dias", - "e60263ac381ae4a9ad460a5c706b9b5a": "Configuração salva", - "ac40ea6dbb38e754acea879d58701424": "{} Dias", - "7a3fd8f7ddf80ae2db423aa55177d22a": "{} Dias {} horas", - "377e7b3a05033be3164d7900c2feb2a6": "{} Horas", - "b2a09ec7e869bb555211fe7b26b5cf3e": "{} Horas {} minutos", - "9c9a5e9d306cf687381d8f1924b43b9c": "{} Minutos", - "4943a6954b9887aa5989713fcbb2a0d1": "Erro: Não é possível conectar ao servidor {}, verifique se a configuração [AK/SK/Storage] está correta!", - "75809e3b321efe1afbdf9773494d5dd9": "Não encontrou o arquivo de configuração {}, tente fechar as configurações da porta SSL antes de abrir", - "35e15c0be5bb51b628d96c9a520c9b01": "Port [{}] está em uso!", - "7ec0387d04c7d7c8259b497464fa3282": "phpmyadmin já {}!", - "4790f238a5706fa03ed78c98efabd5f2": "A ligação é válida!", - "b4e82db400aed46c6a1d61b93ff20f0f": "Falha na conexão: {}", - "aa40ceff8d69dc0bf2a3887e2d5c778c": "Falha na conexão: {} {}", - "69ee350f3262c97f7e3f35cc66443942": "O módulo Paramiko não existe e a instalação falha!", - "d580ca3289757bd32c3e11df44ccea78": "Senha ou chave privada não pode estar vazia: {}: {}", - "df9dc7c6d010fa7d486ab5c61159450f": "Autenticação cronometrada, pressione Enter para tentar novamente! {}", - "05d673d467b6e721ff5ee92b285e5072": "A verificação de chave privada falha, a chave privada pode estar incorreta ou o tipo de autenticação de chave privada SSH-DSS pode não ser ativado no arquivo de configuração/etc/ssh/sshd_config", - "cae18886e1496f99e56fe64dae2a0947": "Autenticação falhou, verifique se a chave privada está correta: {}", - "7e850998d3cb8c4dc8b204766721e846": "Conta ou senha incorreta: {}", - "dfd29171bd018b7352abb2cf085404fd": "Nome de usuário ou senha incorreta: {}", - "8a857e7b7b8835de19ffb7404445b30f": "Tipo de autenticação não suportada: {}", - "bb07cf4e0082f6181204bf785e625924": "A importação falhou", - "4e19c797e19c111b1fad1470cc2c18e3": "Não há comandos exportáveis", - "bd35e8b82c9450d88a62a318773a2244": "A exportação falhou", - "73b1d7767613c6300db27ade773369fa": "Remova o site remoto do WordPress falhado", - "9d160eff84c44041cf4eb5c624874c4e": "Comece a lançar contêineres por sua vez!", - "886051a73fe04f873d814dc9823b4064": "Informações do DingTalk não estão configuradas corretamente", - "2d1b0e55888d196484a0bfd0f85ff71c": "A configuração DingTalk está incorreta, reconfigure o robô DingTalk", - "02eef33534a6f8b3c95fc65e4f98bea9": "Informações incompletas", - "2f45c6e0ccf998c7d31b3764e7da3751": "Nomes de notas não podem ter mais de 15 caracteres", - "eee590fc0d0f3382fe436b60b02e37f0": "As informações da caixa de correio não estão configuradas corretamente", - "e4e7eb56340203583dd940475fc6e924": "A caixa de correio receptora não está configurada", - "c6beb4efa41b5adbf89191be9d139c70": "Falha ao enviar mensagem, destinatário do Falha ao enviar: {}", - "e401ec76f9a9d1dfe7d484e6c4b49656": "Falha ao enviar e -mail para alguns destinatários, incluindo: {}", - "b136ab8957d5ede7e3747fcc927a49aa": "Erro de formato de parâmetro", - "4ccc991965b1b5bbe3efd6b65a1cd6fb": "O tipo de corpo deve ser JSON, Dados de formulário ou nulo", - "b0b017688b107601f2b3439381c4c61b": "O método de envio está incorreto", - "4f4979589df1b84ac44fc64a92e2b3f3": "Verifique se a opção SSL está errada", - "85284ecbde15ff997e89e6e8f07e399b": "As informações do WeChat não estão configuradas corretamente", - "27285cc132e6c145a142ae2dff054ace": "O nome da nota não pode exceder 15 caracteres", - "94f33212bde1cd76797fe4fe78b2167f": "Atualizar compositor de {} para {}", - "387e90104fbc0261c1ae5db9443f0b22": "Defina o método de login root como: {}", - "e420cebff3e23fb8eedd388024ce1839": "O formato de URL de destino está errado {}", - "7207ebce07676b20d98ec74a0ff65c77": "Execute uma vez por dia para {}: {}", - "4f4ae97ac3a0f45ef67bda70d5e4fe0b": "Execute uma vez a cada {} dias em {}: {}", - "82dccd8eb88a5611e453cbf6f25fa90f": "Execute uma vez a cada {} minuto da hora", - "a84b2e49920d839395e3f93812f9ac03": "A partir das 0:00 todos os dias, execute cada {} minuto de {} horas", - "41924db412ce09aa5ef5c9f1f9c88ee8": "A partir do 0º minuto de cada hora, execute a cada {} minutos", - "45abd276fba3519ea010cb5b3c44a484": "Execute uma vez a cada {} em {}: {}", - "06ce21d9c603152315f749e19fab3148": "Execute uma vez no {}: {} do {} dia de cada mês", - "f2fc5ae4c94a95a754c58b15197bc135": "Executar cada {} segundos", - "eb8cb9c97e5888beefc46d6c0645ff4f": "Comece e execute uma vez", - "46039515107ea576bdaf75935b8b5f0d": "Excluir tarefas agendadas: {}", - "b23886f3380c4a9500a7614474ff6bf8": "A senha deve ser pelo menos [{}] caracteres", - "f20eaf62a87c2072f7c09ec70a6b90c9": "Excluir erro", - "9607dbc43fb07121ebd102497290c15b": "{} Usuário FTP falhou!", - "384169bf557e2785a74c6ab4c8ca0d9c": "Erro de edição", - "b1f79322ef609c5ad200c552dfbeba85": "O período de tempo limite não pode ser inferior a 300 segundos", - "59bfee3685345c8facd75248b7f17a8c": "O período de tempo limite não pode ser superior a 30 dias", - "b1770445e55578871051298a4bca2ba8": "Você não pode usar o diretório de chaves como diretório padrão para construção de sites", - "40e79165af94fb353f73532550d50dbc": "O firewall do sistema atual é iptables e não suporta o status de configuração.", - "7f643aa5c0ac22eb56b8e0283a245537": "O firewall do sistema atual é iptables e não suporta parar.", - "759cbd156929358f44fea3d7a2303d12": "O firewall do sistema atual é iptables e não suporta a reinicialização.", - "9eeb5949442ea424abb29b42f4f3763d": "O firewall do sistema atual é iptables, que não suporta a recarga.", - "6fe3c8f7481574a858f4c4e3dcb190b8": "Falha ao definir uma regra de porta: {}", - "cc84ff9fa77f59978d67ebe5c21c4cc6": "A regra do porto foi configurada com sucesso", - "5fb5bec15f0680c0f8281e2a77f01564": "Falha ao definir a regra: {}", - "31bdde170e92eb68e5cf19070a0257b2": "Falha ao definir uma regra de encaminhamento de porta: {}", - "14af00e29f1c7f276529a7f13d37bcf3": "Nomes de tabela não suportados: {}", - "37859bf15c1d49002153157ecdd4ad45": "A configuração da regra falhou: {}", - "202ed89223bc105db8c706695994099e": "A regra é definida com sucesso", - "9fcd0fb925f2f1f9fc5157a937c1527a": "A configuração da regra falhou: {}", - "9ef9f6bcb8cd56f9b4d8be162918810e": "Falha ao iniciar o firewall: {}", - "afa08ad3f9767240b0219e668944beee": "O firewall foi iniciado com sucesso", - "bc1ad4532116f7e179339e07a39be1a3": "Falhou em parar o firewall: {}", - "50ac40822152a67e4195c04488aa7129": "O firewall foi parado", - "c8b9e1198399365ab380361c761ab78d": "Falha ao reiniciar o firewall: {}", - "04105f039f2850a3472f9b79c7ae5111": "O firewall sobrecarregado falhou: {}", - "2be1a57d150c047f0c5d936a904d884a": "Falha ao definir a regra da porta de saída: {}", - "af95b488978d644c7ef7b4b856def666": "A regra da porta de saída é definida com sucesso", - "194fbdb576220abe3bc3ae3746af89a7": "Parâmetros de política desconhecida: {}", - "f006b06691ecd76b8a34e2825c17b6aa": "Estratégia desconhecida: {}", - "55bbeb07229c08c530c5119918035594": "A regra de saída é definida com sucesso", - "8be2d40f6fa3e12c46ba68bfb23951d1": "A configuração da regra ou a falha de regra: {}", - "703480d2938f7c89b563e1d731e94118": "O envio de teste falhou", - "fdc137942b6f2d81fa922d7ace16a94c": "Um tipo que não é suportado pela interface atual", - "37f17a256a93646ef0ac721096ec0ce8": "A mesma configuração de envio já existe e não pode ser adicionada repetidamente", - "2783bb2e5b99dce08138bf58d0880603": "Remetente correspondente não encontrado", - "b5a30e6f46753c06ada44d6bbd757599": "Excluir com sucesso", - "81550843cd0a2d7e046cb23a868f8e8e": "O envio foi bem -sucedido", - "3fb32283f52bea8068006817c5b9b95b": "O desbaste é bem -sucedido", - "8acd58125d3f7cc181a71926ef5c8a4b": "Falha ao vincular à nuvem", - "6e3ce0906145a9641111ebbf7735f145": "O Telegram falhou ao enviar {}", - "135f7ef9aeb50bf7b988416b0a679dff": "O nome de domínio não pode estar vazio, digite pelo menos um nome de domínio!", - "c82b42d921224a0699f854c28c2450d2": "O alvo proxy não pode estar vazio!", - "fe092e7668cf0e9e6dafef6a1fa084a4": "O caminho do arquivo Unix deve começar com/, como/tmp/flash.app.sock!", - "f68c204aa9e12e0513aa7a4569449cfe": "Os arquivos UNIX devem terminar.Lock, como/tmp/flash.app.trancar!", - "5c23a6c025d7071599c70575dc858f26": "O alvo proxy não existe!", - "2fba0b6c1602ec254b1bc06bacba575d": "O alvo proxy deve começar com http: // ou https: //!", - "772c6f93b20b52d5c998f4b58dbcf8f7": "Port [{}] é ilegal!", - "f76df64b8f66e4f6050adf633c91c7fb": "O site [{}] já existe, não adicione novamente!", - "6599f1c3d3d3760768d9023827e8edf0": "Projeto de proxy reverso adicionado com sucesso!", - "85e34f49357adccd76d557a540a2e5d8": "Sitename não pode estar vazio!", - "1daab0a25efad301906af4874ee4c8ac": "O tipo de log está incorreto.Passe o padrão/arquivo/rsyslog/off!", - "ff9e0ecf6c4926c0a309e67f9baedf39": "A leitura do arquivo de configuração falhou, exclua o site e adicione -o novamente!", - "2a6176cc22256a713204964a34fd1384": "O caminho de log não pode estar vazio!", - "18292d8929b9f9b6639dcc6e49d4f4a7": "O caminho do log deve começar com/", - "306b5ccbae58fe7278c8e098b5f06f25": "O nome não pode estar vazio!", - "b9f153e64173504e3700aa30b08fa0aa": "Auth_path não pode estar vazio!", - "c9ab8ba4f7de925b29414bbb86bd3d1f": "Auth_path deve começar com/!", - "cd44f9dcf9679c8151ce2b721f2fc6eb": "O nome de usuário e a senha não podem estar vazios!", - "6750646f694a0c3dd46f9617ff055e61": "[{}] não existe na autenticação HTTP, adicione -a primeiro!", - "714145aeae9a04f8ecf9e1f54072202a": "O nome de usuário não pode estar vazio!", - "36eb0a1bb3c002f5ed0fbf8f010881e3": "A senha não pode estar vazia!", - "f20db7351e9cf57ecb9f79ad3e032081": "[{}] já existe na autenticação HTTP e não pode ser adicionada novamente!", - "218fd0a172e37293fc001328b3daca79": "[{}] é uma representação reversa do painel, e a autenticação HTTP de [/] não pode ser excluída!", - "8b6cabd487e5ab76183addd53bea2d87": "Exclua bem -sucedido!", - "3034cdc7475c3fa220d4092128ff9c48": "Gzip_status não pode estar vazio, passe o número 1 ou 0!", - "76661faaa298338bf731c737a62b7d6c": "O parâmetro gzip_min_length é inválido.Por favor, insira um número maior que 0!", - "f11df0d336c64058321a01bcbdc4667c": "O parâmetro gzip_comp_level é inválido.Por favor, insira um número maior que 0!", - "5d113183845fc6e26c05bc1218677a30": "Cache_status não pode estar vazio, passe o número 1 ou 0!", - "a23b240364f5291f71d599e2355e6920": "O parâmetro expire é ilegal.Por favor, insira um número maior que 0!", - "c255b7e9dd800a8cd26ff83b3698713b": "Websocket_status não pode estar vazio, passe o número 1 ou 0!", - "81ec4e731430cca9b3d8bff6372bfafc": "Proxy_path não pode estar vazio!", - "9aecc647ffb6f126e5aa1f6c16af43b0": "Proxy_pass não pode estar vazio!", - "d591e0043cbf6d14950a46178a537626": "O alvo proxy deve começar com http: // ou https: //", - "247d1a7dc144bd12d4c9f8797387babe": "【{}】 Já existe no proxy reverso e não pode ser adicionado novamente!", - "36a7891857288c55bc5d87c470212812": "ID não pode estar vazio!", - "62dc2bbb0528fe87522c74b113883a48": "O site especificado não existe!", - "c8a68e4ff275e827bbbe348eddecbf2b": "Projeto de proxy reverso excluído com sucesso!", - "88f9a8852b822982a9a3e839813d91bb": "Os domínios não podem estar vazios!", - "85fb0c03511da1e4d308fd135dec4486": "O nome de domínio não pode conter vírgulas!", - "5f77e0a83a9aa0e7e534e5136c99ab31": "Mantenha pelo menos um nome de domínio!", - "5f04c54facbae56e5cdebc22b5ecbf73": "Conf_type não pode estar vazio!", - "bec317d58a8302e2aaf523e28f100710": "Salvar bem -sucedido!", - "21e0b44e0a302af58d59ca9d8948f4e1": "Domainorpath não pode estar vazio!", - "34a2695966750d96d6772ce00f0d3772": "RedirectType não pode estar vazio!", - "e3a270e8f43af2a339bfb2181ad83025": "RedirectPath não pode estar vazio!", - "352289584d886d4f04591b6f9b7785b8": "Tour não pode estar vazio!", - "ddcb1cafcc4b5e308f6057e07af2d10a": "O RedirectDomain não pode estar vazio!", - "58bad30cc21797d832b361fcedff61b9": "RedirectName não pode estar vazio!", - "320968539b06847a07f9c48f39a73120": "O caminho não pode estar vazio!", - "51d2fd3c34890a88eafbb2801fe0827f": "O redirecionamento parou ou o diretório de arquivos de configuração não existe!", - "38e380b5535be56ebae6addcf29390ba": "Corrigir não pode estar vazio!", - "ad89a60d7720b8bb5095f2752e5006ae": "Return_rule não pode estar vazio!", - "b74b269372107d024f6c9e13cf911a4e": "O status HTTPS não pode estar vazio!", - "cefc1b6af0b80a883304b58651283f02": "O status não pode estar vazio!", - "f8a019279d00484c29abaf1cb4b9260c": "O parâmetro ip_type está incorreto, preto ou branco deve ser passado!", - "f8e8cf373fa65891fe5a6e65505d30d0": "O IPS não pode estar vazio, digite IP, um por linha!", - "0677c4ecb9efdab30c5077e69b1745ba": "IP não pode estar vazio, digite IP!", - "70a9558c31a978ce2b1297a2a21c1317": "Nenhuma informação de proxy encontrada para este URL [{}]!", - "82ca4452a42da1388fd435ca8a2801e7": "Proxy_host não pode estar vazio!", - "6dac7e9b2cbc32789bde984cddb699f4": "Proxy_type não pode estar vazio!", - "0dc7d98b8a487dfa0794f7c792240e4c": "O caminho do arquivo Unix deve estar em/ou http: // unix: no início, como/tmp/flash.app.trancar!", - "5c6869f159feda62d0e6441f3eb1f97c": "O WebSocket global está em um estado aberto e não tem permissão para desativar individualmente o suporte do WebSocket para este URL!", - "ff6c12be57557ce452395adac7e02b30": "Oldstr e Newstr não podem estar vazios ao mesmo tempo!", - "8c9bac9aea3d7a22d3789f837dd40d3c": "Get.sub_type só pode conter combinações de cartas de", - "2ac2f7203f5049438855d537f52cfee4": "O conteúdo que você inseriu contém chinês.Detectamos que a versão atual do NGINX não a suporta.Tente reinstalar uma versão do Nginx 1.20 ou superior e tente novamente!", - "f1522550bdc24955aa540480fdccaff5": "Detectou que a versão Nginx atual suporta apenas tipos de substituição padrão.Por favor, tente reinstalar o nginx versão 1.20 ou superior e tente novamente!", - "0d57a0216b328aeba6ef5fc3cbf3b7e9": "Nenhuma informação de configuração encontrada para o conteúdo antes da substituição: [{}]!", - "e00f42f6421b797439a64e3ef24c132a": "site_name 不能为空!", - "a6fd23485ca8abe4ab7d0580d28c4bf9": "Limpeza bem -sucedida!", - "61e795d02f4452904f2574d936c571e6": "A limpeza falhou, o diretório de cache não existe!", - "a1e7a2f08295c8f8161a8feb9e2110b0": "O número da porta de nome de domínio [{}] é ilegal!", - "b8c0bc6452f788c758a4f7bedd761757": "Sem informações de proxy!", - "5a3c3438dbcadf4a0d59858f17a8522f": "Os logs de tarefas estão vazios!", - "e8ab4d6107eaf37c98f250be20f146e1": "Logs de tarefas esvaziados!", - "bff9ef87fdda677f86ae6dddec54a104": "Nenhuma versão compatível com PHP encontrada, instale primeiro", - "6faf10dc1d0a94af6880463d519f0eea": "Falta o ID do parâmetro", - "e12a73c264c16d2806bf0ce73b2cfcf6": "Não há informações do módulo", - "3272a0f463c78ef84836f71c8448baa3": "Não há informações de configuração de alarme", - "affc007de5f6791707f3de155a3a642a": "O arquivo temporário não existe, por favor, reinicie-se!", - "3765f17d36dbbf2ce3f42263140bb3f9": "Carregado com sucesso!", - "0024ce604e62e9ada858f0e1faf08fd5": "Endereço IP você", - "d27cddcec5e0f66a566fbcdceb5dfef6": "Exclua com sucesso!", - "0267067a2f76a814e9f2c9c111fa6a2e": "O componente mysqldb está faltando!", - "b1b74781e4481f083f18ad6719a6b583": "Erro para conectar o banco de dados", - "a9905dc3078535a661eb1aeb06f5a6da": "A senha do banco de dados está incorreta!", - "894f4e4dbeef39cd673987e501f8c2ab": "Selecione SQL 、 GZ 、 FILE DE ZIP!", - "920db7480bc77b933eb865b04de8cdf3": "A operação falhou, re-copia o processo de cópia ou corte", - "486b7d3b3ca271d873ef1c9d4c0e07a7": "Senha alterada!", - "02856125a0aec1ec67b24951428f67dc": "Os arquivos principais do WordPress falharam ao corresponder às somas de verificação de referência do wordpress.org. {}", - "cfbf0c9c17512b298c8b307e73033075": "Atualize as somas de verificação do pacote do WordPress com sucesso", - "6a25f80c8857d963572f859081af91d3": "Set não encontrado com ID: {}", - "505a83f220c02df2f85c3810cd9ceb38": "Sucesso", - "37cfe4b00fbfc30c5e3b15ad17520f48": "Site não encontrado com site_id: {}", - "f3fb02190645ed11e25de5351caab7e5": "Nenhum plugins e tema a ser instalado.", - "0cfa7cd7e56e19ff098dd87a233db662": "Plugins e temas foram instalados.", - "eb947d0425d3b993ed05b287625f2051": "Os arquivos principais do WordPress foram reinstalados com sucesso do WordPress.org.", - "6cc4f90f8b0f7bb128b4df344b710bc6": "O arquivo de configuração do site não existe", - "58eac73e209abcf5558f097cc75479fc": "ato inválido {}", - "fc56bc051482810e67d8ff626413b97a": "Site Erro de configuração FastCGI!", - "cf5e559da9fe591b2e323b6c5256dbf1": "Backup com sucesso", - "24e99618736c83c1c1b988031b7c9434": "Arquivo de backup não existe", - "5a15b5051b23b01a5255e487b2253957": "O arquivo de backup está corrompido", - "8481d8c32406addb83d2a66ce09598af": "Restaurar com sucesso", - "99ac109d5444d49cc4e0843d5c907a42": "Backup não existe", - "f67022804bf55cae837832fa197ba294": "Arquivo de backup inválido: nome do arquivo muito curto", - "013ac7af74bdde0edb9d3b0f614302b3": "Arquivo de backup inválido: deve ser um arquivo zip", - "f7c7495bd49a8682f80ba8b8a90b8af4": "Arquivo de backup inválido: não existe", - "1c15430c7f5ef18cc5d47b2d2490862a": "O arquivo de backup está bem", - "020254a190663e92df86bb0c07bf4afb": "Caminho {} não encontrado", - "ac94d37e09e3309247a1e022992c8495": "O arquivo não é um backup local bem formado.Arquivo ausente: {}", - "7bdae9ae2982d97e526fba3d98f5076a": "O arquivo de backup está bem formado", - "4bc2b162b4c39ba6724edd19a15a82b6": "Ainda não suportado port por porta.", - "a6347d6ba3e6b85b84eed1e23a465f9b": "O arquivo não é um backup bem formado do PLESK/CPALEL.Arquivo ausente: {}", - "3f938b81b7c12b10e6435dbb1c34b550": "O arquivo não é um backup bem formado do PLESK/CPALEL.Diretório ausente: {}", - "497aca5bdff545722d3c5f0547dafec8": "Migração com sucesso", - "29e98fee8cbc1f364106e54ee4cd392f": "O arquivo de banco de dados AAPALEL foi corrompido", - "74b16de05d8929d2613ef196e894473b": "Wordpress_onekey foi atualizado", - "22db56698526b9e4ae2abca292410ac2": "Wordpress_onekey foi criado", - "a2dc8832db108e6ab0009370001b5374": "A otimização do PHP FPM falhou: {}", - "d119e89bf7dd0ce8d9ca126659d882ed": "A otimização do MySQL falhou {}", - "10b3f17435803b4463777482dd4ab714": "WordPress URL-LEWRITE ainda não suporta {}", - "dc694f4fecf032a5727a1307157cd18d": "Regras padrão do WordPress de URL-Re-Rereno não encontrado", - "f6c04bc94c24e04d0b657c107570ec9a": "Configure o WordPress URL-LEWRITE com sucesso", - "28396423d28abafe5fef29f3cb0da46f": "Nome do pacote muito curto", - "8c76e41a33ed9190773151fcbc271714": "O pacote deve ser um arquivo zip", - "225c5a5d69d56b3447484c33ec3fa575": "Arquivo de pacote não existe", - "acfb85be871ad48bf9b4bc691dc8a429": "Desembale o pacote com sucesso", - "c8cdf2dbda702683e4c2d163749a8a86": "Falha ao adicionar hosts, porque o arquivo hosts não encontrado", - "38e39642911d9b72f0d61cc33fe29c96": "Hosts foram adicionados com sucesso", - "1943d3d5873a56b21f8e26fb0317b8a3": "Desculpe, preciso de um arquivo {} para trabalhar.Por favor, reinicie esse arquivo para sua instalação do WordPress.", - "06e37761396e2b1c91bfa0a75919f4dc": "O arquivo {} já existe.Se você precisar redefinir algum dos itens de configuração deste arquivo, exclua -o primeiro.", - "5585cd5effb016865e8a5548b2a300ab": "Arquivo {} não encontrado", - "217932dd896e58f85e2cdd08a4bf7a37": "Atualizar com sucesso", - "26b0eeab95be626fcf4953be6430a674": "A conexão mysql está bem", - "df43c598d3b084c18e047e0428db2b76": "A tabela prefixo {} foi usada como o nome da tabela", - "a2f3b940fbf94a00b98a6aec87e80d33": "Corrija o WordPress siteurl com sucesso", - "4d05c98e9c29a1fde900f2b16d95808b": "Observando mudar", - "f7530ed5e59bc503fedf64d2a8d49383": "Arquivo de tira {} atributo i com sucesso", - "5675ba4a70ea58a4c0623e6bc753c164": "Atualizar o arquivo {} com sucesso", - "2f45d6b0909bde6c8cb337ff8523d684": "Não é possível fazer login no WordPress", - "dac8f0c4d2c15ac26e88126bbf20527d": "Não é possível conectar ao site: {}", - "2cdf75c9ec9bd8d3a0100834aa23687f": "Configuração AapAnel-WP-Toolkit falhou: {}", - "8d22857439e2d6aee724941afdcdbacb": "Configuração AAPALEL-WP-TOOLKIT Falha: URL de ativação não encontrada", - "dee07decb57682d323f72915dfa23ca6": "Configuração AAPALEL-WP-TOOLKIT Falha: Falha ao substituir o plug-in", - "848a12cfc38bbd5bb6b437394c4c8004": "Ative aapanel-wp-toolkit falhou: {}", - "a971a85637b4ee80bd481839de8bc14a": "Configuração AAPALEL-WP-TOOLKIT", - "372ad52d86a5eae66c27f4028449f4f9": "Não é possível obter a chave de segurança do AAPALEL-WP-TOOLKIT", - "3d8c9e517719022b27ad5f27c578fa31": "Fique falso", - "d47ab7b9ce539ba13f4e045561bb8ed7": "Obtenha tempo de atividade falsa", - "8e39175bab478762d3d029bee327c704": "Obtenha tempo de reinicialização falso", - "e16cf27704f83c8b0a0efc16886ea75d": "Obtenha a data falsa", - "c158c8096b76b85803e71232b2dd5e74": "Obtenha detalhes de tempo false", - "cdd32490a46567fd0c1ee9d4b170b762": "Obtenha o TotalAccesss False", - "62b939086708b37d68c00cb713994b52": "Obtenha o totalkbytes false", - "13b06d17b35dfeeafa50e12ad9ec1735": "Fiquem trabalhadores ocupados falsos", - "724fc9214ccce3e6a5787648240a4533": "Fique falsa ociosa", - "e00d5128f631253b7b6ed8d5454c0c81": "Incapaz de gravar no arquivo, verifique se o [endurecimento do sistema] está ativado!", - "18928426418954e3a8bc166c892af5c5": "O nome de usuário ou a senha não podem estar vazios!", - "14422683e14b8a03fd02b84480703c41": "Você não conseguiu fazer login muitas vezes, tente novamente em {} segundos!", - "7edd0140c2f050286273be74039b1df7": "A verificação falhou, atualize a página e faça login novamente!", - "9a9b0bf6269ba974cc6a00bb0f0de1d0": "O código de verificação não pode estar vazio!", - "2b7ae590e0538e70b7a359a94d30f1f4": "O código de verificação está incorreto, tente novamente!", - "21f763b26858bf8ff40f931d714ab106": "nome de usuário ou senha errada , - - - - - - - - - - + + + + + + + + + + @@ -55,7 +55,7 @@
- - + + diff --git a/BTTask/task.py b/BTTask/task.py index e2676b7c..bf9bb896 100644 --- a/BTTask/task.py +++ b/BTTask/task.py @@ -12,6 +12,7 @@ # aa Background Schedule Task # ------------------------------ +import importlib import json import os import re @@ -20,6 +21,7 @@ import sys import threading import time from datetime import datetime, timedelta +from typing import Optional import psutil @@ -341,20 +343,20 @@ def check502Task(): task_ExecShell("check502task") +# todo 计划废弃 # 每1小时检查面板证书是否有更新 -def check_panel_ssl(): - try: - lets_info = public.ReadFile("{}/ssl/lets.info".format(BASE_PATH)) - if not lets_info: - del lets_info - return - os.system( - PYTHON_BIN + " {}/script/panel_ssl_task.py > /dev/null".format(BASE_PATH) - ) - del lets_info - except Exception as e: - raise e - +# def check_panel_ssl(): +# try: +# lets_info = public.ReadFile("{}/ssl/lets.info".format(BASE_PATH)) +# if not lets_info: +# del lets_info +# return +# os.system( +# PYTHON_BIN + " {}/script/panel_ssl_task.py > /dev/null".format(BASE_PATH) +# ) +# del lets_info +# except Exception as e: +# raise e # 更新PID文件 def update_pid_file(pid): @@ -367,87 +369,30 @@ def update_pid_file(pid): logger.error(f'Error writing to PID file: {e}') -# 面板守护 -# todo -def daemon_panel(): - def find_panel_pid(): - for pid in psutil.pids(): - try: - p = psutil.Process(pid) - if 'BT-Panel' in p.name(): # 假设进程名包含 'BT-Panel' - return pid - except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): - continue - return None - - panel_pid_file = "{}/logs/panel.pid".format(public.get_panel_path()) - # 检查PID文件是否存在 - if not os.path.exists(panel_pid_file): - logger.info(f'{panel_pid_file} not found, starting panel service...') - return - - panel_pid = "" - try: - # 读取PID文件 - with open(panel_pid_file, 'r') as file: - panel_pid = file.read() - except Exception: - service_panel('start') - return - - if not panel_pid: - logger.info(f'PID is empty in {panel_pid_file}, starting panel service...') - service_panel('start') - return - - panel_pid = panel_pid.strip() - # 检查PID对应的进程是否存在 - if not psutil.pid_exists(int(panel_pid)): - logger.info( - f'PID {panel_pid} not found, attempting to find running panel process...' - ) - panel_pid = find_panel_pid() - - if panel_pid: - # 更新PID文件 - update_pid_file(panel_pid) - else: - logger.info('No panel process found, starting service...') - service_panel('start') - - else: - # 检查进程是否是面板进程 - comm_file = f"/proc/{panel_pid}/comm" - if os.path.exists(comm_file): - with open(comm_file, 'r') as file: - comm = file.read() - if not comm or comm.find("BT-Panel") == -1: - logger.info( - f'Process {panel_pid} is not a BT-Panel process,' - f'comm-{comm} commtype-{type(comm)}' - ) - service_panel('start') - return - - else: - logger.info(f'comm file not found for PID {panel_pid}, restarting service...') - service_panel('start') - - +# 服务守护 def daemon_service(): - task_ExecShell("daemon_service") - - -def service_panel(action='reload'): - if not os.path.exists('{}/init.sh'.format(BASE_PATH)): - os.system("curl -k https://node.aapanel.com/install/update_7.x_en.sh|bash &") - else: - os.system("nohup bash /www/server/panel/init.sh {} > /dev/null 2>&1 &".format(action)) - logger.info("Panel Service: {}".format(action)) + try: + from script import restart_services + importlib.reload(restart_services) + obj = restart_services.RestartServices() + obj.main() + del obj + except Exception: + from script.restart_services import RestartServices + obj = RestartServices() + obj.main() + del obj # 重启面板服务 def restart_panel(): + def service_panel(action='reload'): + if not os.path.exists('{}/init.sh'.format(BASE_PATH)): + os.system("curl -k https://node.aapanel.com/install/update_7.x_en.sh|bash &") + else: + os.system("nohup bash /www/server/panel/init.sh {} > /dev/null 2>&1 &".format(action)) + logger.info("Panel Service: {}".format(action)) + rtips = '{}/data/restart.pl'.format(BASE_PATH) reload_tips = '{}/data/reload.pl'.format(BASE_PATH) @@ -459,25 +404,6 @@ def restart_panel(): service_panel('reload') -# 取面板pid -def get_panel_pid(): - try: - pid = public.ReadFile('/www/server/panel/logs/panel.pid') - if pid: - return int(pid) - for pid in psutil.pids(): - try: - p = psutil.Process(pid) - n = p.cmdline()[-1] - if n.find('runserver') != -1 or n.find('BT-Panel') != -1: - return pid - except: - pass - except: - pass - return None - - # 定时任务去检测邮件信息 def send_mail_time(): if not os.path.exists('/www/server/panel/plugin/mail_sys/mail_sys_main.py') or not os.path.exists('/www/vmail'): @@ -494,7 +420,36 @@ def check_panel_msg(): # 面板推送消息 def push_msg(): - os.system('nohup {} /www/server/panel/script/push_msg.py > /dev/null 2>&1 &'.format(PYTHON_BIN)) + def _read_file(file_path: str) -> Optional[list]: + if not os.path.exists(file_path): + return None + content = public.readFile(file_path) + if not content: + return None + try: + return json.loads(content) + except: + return [] + + sender_path = f"{BASE_PATH}/data/mod_push_data/sender.json" + task_path = f"{BASE_PATH}/data/mod_push_data/task.json" + sender_info = _read_file(sender_path) or [] + work = False + for s in sender_info: + # default sender_type sms data is {} + if s.get("sender_type") != "sms" and s.get("data"): + work = True + break + if not work: + return + + task_info = _read_file(task_path) or [] + if not task_info: + return + + public.ExecShell( + 'nohup {} /www/server/panel/script/push_msg.py > /dev/null 2>&1 &'.format(PYTHON_BIN) + ) # 检测面板授权 @@ -1031,7 +986,7 @@ TASKS = [ {"func": update_monitor_requests, "interval": 60 * 20}, # 每隔20分钟更新一次网站报表数据 {"func": check_panel_msg, "interval": 3600}, # 每1小时面板消息提醒 - {"func": check_panel_ssl, "interval": 3600}, # 每1小时面板证书是否有更新 + # {"func": check_panel_ssl, "interval": 60}, # 每1小时面板证书是否有更新 {"func": dns_checker, "interval": 3600 * 3}, # 每3小时dns解析验证 {"func": find_favicons, "interval": 43200}, # 每12小时找favicons {"func": domain_ssl_service, "interval": 3600}, # 每6小时进行域名SSL服务(内置时间标记, 可提前检查) @@ -1070,8 +1025,7 @@ def thread_register(brain: SimpleBrain, is_core: bool = True): # delay normal tasks, 削峰 if not is_core: - d = min(3, int(1 + (index + 1) / 2)) - time.sleep(d) + time.sleep(10) brain.register_task( func=task["func"], diff --git a/BTTask/task_script.py b/BTTask/task_script.py index e1f0914e..410b7b34 100644 --- a/BTTask/task_script.py +++ b/BTTask/task_script.py @@ -56,12 +56,6 @@ def task(): # 所有导入请在函数中进行, 异常由顶层处理记录task.log # ====================================================== # 守护服务 -@task() -def daemon_service(): - from script.restart_services import RestartServices - RestartServices().main() - - @task() def make_suer_ssl_task(): from ssl_domainModelV2.service import make_suer_ssl_task diff --git a/class/acme_v2.py b/class/acme_v2.py index 12a6d8d1..e85ffea8 100755 --- a/class/acme_v2.py +++ b/class/acme_v2.py @@ -429,16 +429,42 @@ class acme_v2: return apply_domains + def is_ip(self, domain): + # IPv4地址 + is_ipv4 = public.checkIp(domain) + if is_ipv4: + return True + # IPv6地址 + pattern_v6 = re.compile(r"^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$") + if pattern_v6.match(domain): + return True + return False + # 创建订单 def create_order(self, domains, auth_type, auth_to, index=None): domains = self.format_domains(domains) if not domains: - raise Exception(public.lang("Need at least a domain name!")) + raise Exception(public.lang("Need at least a domain name or ip addr!")) # 构造标识 identifiers = [] + all_is_ip = set() for domain_name in domains: + is_ip = self.is_ip(domain_name) + all_is_ip.add(is_ip) + if is_ip: + identifiers.append({"type": "ip", "value": domain_name}) + continue identifiers.append({"type": 'dns', "value": domain_name}) payload = {"identifiers": identifiers} + if len(all_is_ip) != 1: + raise Exception("Domain names and IP addresses cannot apply for certificates at the same time!") + all_is_ip = next(iter(all_is_ip)) + if all_is_ip: + payload = {"identifiers": identifiers, "profile": "shortlived"} + if auth_type != 'http': + raise Exception( + "Only HTTP file verification method can be used to apply for certificates for IP addresses!" + ) # 请求创建订单 res = self.acme_request(self._apis['newOrder'], payload) @@ -627,6 +653,7 @@ class acme_v2: identifier_auth['domain'], identifier_auth['auth_value'] ) + return None # 从云端验证域名是否可访问 def cloud_check_domain(self, domain): @@ -1217,8 +1244,8 @@ if ( $well_known != "" ) { return int(time.time() + (86400 * 90)) # 下载证书 - def download_cert(self, index): - if self._debug is True: + def download_cert(self, index) -> dict: + if self._debug: return { "cert": "---debug mode cert---", "private_key": "---debug mode private_key---", @@ -1395,7 +1422,6 @@ fullchain.pem Paste into certificate input box paths = [ '/www/server/panel/vhost/cert', '/www/server/panel/vhost/ssl', - '/www/server/panel', '/www/server/panel/plugin/mail_sys/cert', ] for path in paths: @@ -1592,13 +1618,21 @@ fullchain.pem Paste into certificate input box return self._config['orders']['csr'] domain_name, domain_alt_names = self.get_alt_names(index) X509Req = OpenSSL.crypto.X509Req() - X509Req.get_subject().CN = domain_name - if domain_alt_names: - SAN = "DNS:{0}, ".format(domain_name).encode("utf8") + ", ".join( - "DNS:" + i for i in domain_alt_names - ).encode("utf8") + if not self.is_ip(domain_name): + X509Req.get_subject().CN = domain_name + if domain_alt_names: + SAN = "DNS:{0}, ".format(domain_name).encode("utf8") + ", ".join( + "DNS:" + i for i in domain_alt_names + ).encode("utf8") + else: + SAN = "DNS:{0}".format(domain_name).encode("utf8") else: - SAN = "DNS:{0}".format(domain_name).encode("utf8") + if domain_alt_names: + SAN = "IP:{0}, ".format(domain_name).encode("utf8") + ", ".join( + "IP:" + i for i in domain_alt_names + ).encode("utf8") + else: + SAN = "IP:{0}".format(domain_name).encode("utf8") X509Req.add_extensions( [ @@ -1620,6 +1654,7 @@ fullchain.pem Paste into certificate input box return OpenSSL.crypto.dump_certificate_request(OpenSSL.crypto.FILETYPE_ASN1, X509Req) def create_csr_new(self, index): + import ipaddress from cryptography import x509 from cryptography.x509.oid import NameOID from cryptography.hazmat.primitives import hashes @@ -1629,28 +1664,51 @@ fullchain.pem Paste into certificate input box return self._config['orders'][index]['csr'] # 获取域名和备用域名 domain_name, domain_alt_names = self.get_alt_names(index) - # 创建X509请求对象 - csr_builder = x509.CertificateSigningRequestBuilder() - csr_builder = csr_builder.subject_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, domain_name) - ]) - ) - # 添加 SubjectAltName 扩展 - san_list = [x509.DNSName(domain_name)] - if domain_alt_names: - san_list.extend([x509.DNSName(name) for name in domain_alt_names]) - csr_builder = csr_builder.add_extension( - x509.SubjectAlternativeName(san_list), - critical=False - ) # 生成私钥 pk = self.create_certificate_key(index).encode() private_key = load_pem_private_key(pk, password=None) + + is_ip_cert = self.is_ip(domain_name) + + # 构建 CSR + if is_ip_cert: + # 对于 IP 证书,ACME v2 不允许在 Common Name 中包含 IP 地址。 + # 主题可以为空,因为所有标识符都在 SAN 中。 + csr_builder = x509.CertificateSigningRequestBuilder().subject_name( + x509.Name([]) + ) + else: + csr_builder = x509.CertificateSigningRequestBuilder().subject_name( + x509.Name([ + x509.NameAttribute(NameOID.COMMON_NAME, domain_name) + ]) + ) + + if is_ip_cert: + # IP证书 + # 添加 subjectAltName 扩展 + org = [x509.IPAddress(ipaddress.ip_address(domain_name))] + if domain_alt_names: + alt_names = org + [x509.IPAddress(ipaddress.ip_address(alt)) for alt in domain_alt_names] + else: + alt_names = org + else: + # 域名证书 + # 添加 subjectAltName 扩展 + org = [x509.DNSName(domain_name)] + if domain_alt_names: + alt_names = org + [x509.DNSName(alt) for alt in domain_alt_names] + else: + alt_names = org + + csr_builder = csr_builder.add_extension( + x509.SubjectAlternativeName(alt_names), + critical=False, + ) + # 签署 CSR csr = csr_builder.sign(private_key, hashes.SHA256()) - # 返回 CSR (ASN1 格式) return csr.public_bytes(Encoding.DER) # 构造域名验证头和验证值 @@ -1898,7 +1956,10 @@ fullchain.pem Paste into certificate input box self._config['account'][k] = {} if not 'key' in self._config['account'][k]: - self._config['account'][k]['key'] = self.create_key() + try: + self._config['account'][k]['key'] = self.create_key() + except: + self._config['account'][k]['key'] = self.create_key_new() if type(self._config['account'][k]['key']) == bytes: self._config['account'][k]['key'] = self._config['account'][k]['key'].decode() self.save_config() @@ -1910,7 +1971,10 @@ fullchain.pem Paste into certificate input box if 'private_key' in self._config['orders'][index]: return self._config['orders'][index]['private_key'] # 创建新的私钥 - private_key = self.create_key() + try: + private_key = self.create_key() + except: + private_key = self.create_key_new() if type(private_key) == bytes: private_key = private_key.decode() # 保存私钥到订单配置文件 @@ -1921,26 +1985,35 @@ fullchain.pem Paste into certificate input box # 创建Key # noinspection PyUnresolvedReferences def create_key(self, key_type=OpenSSL.crypto.TYPE_RSA): + if key_type not in [OpenSSL.crypto.TYPE_RSA, OpenSSL.crypto.TYPE_DSA, OpenSSL.crypto.TYPE_EC]: + key_type = OpenSSL.crypto.TYPE_RSA key = OpenSSL.crypto.PKey() key.generate_key(key_type, self._bits) private_key = OpenSSL.crypto.dump_privatekey( OpenSSL.crypto.FILETYPE_PEM, key) return private_key - def create_key_new(self, key_type): + def create_key_new(self, key_type='RSA'): from cryptography.hazmat.primitives import serialization - from cryptography.hazmat.primitives.asymmetric import rsa + from cryptography.hazmat.primitives.asymmetric import rsa, ec, ed25519 - private_key = rsa.generate_private_key( - public_exponent=65537, # 公共指数 - key_size=self._bits, # 密钥大小(2048位) - ) + if key_type == 'RSA': + private_key = rsa.generate_private_key( + public_exponent=65537, + key_size=self._bits + ) + elif key_type == 'EC': + private_key = ec.generate_private_key(ec.SECP256R1()) + elif key_type == 'ED25519': + private_key = ed25519.Ed25519PrivateKey.generate() + else: + raise ValueError(f"Unsupported key type: {key_type}") private_key_pem = private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption() ) - return private_key_pem.decode() + return private_key_pem # 写配置文件 def save_config(self): @@ -2248,6 +2321,17 @@ fullchain.pem Paste into certificate input box import random args_obj = public.dict_obj() if not cron_id: + all_count = public.M("dns_domain_ssl").count() + if all_count == 0: + return + if all_count == 1: + try: + one = public.M("dns_domain_ssl").field("info").find() + one_info = json.loads(one["info"]) + if one_info.get("issuer") == "aapanel.com" and one_info.get("issuer_O") == "aapanel.com": + return + except: + pass cronPath = public.GetConfigValue('setup_path') + '/cron/' + echo shell = '{} -u /www/server/panel/class/acme_v2.py --renew_v3=1'.format(sys.executable) public.writeFile(cronPath, shell) @@ -2853,6 +2937,7 @@ fullchain.pem Paste into certificate input box def delete_order(self, get): return self._delete_order(get)["finish_list"][0] + # noinspection PyTypeChecker def _delete_order(self, get): from sslModel import certModel certModel = certModel.main() @@ -2993,6 +3078,48 @@ fullchain.pem Paste into certificate input box import traceback public.print_log(traceback.format_exc()) + def _renew_business_order(self, ssl): + """续签商业证书, 仅限一次性购买多年的证书""" + from BTPanel import app + from ssl_domainModelV2.business_ssl import BusinessSSL + with app.app_context(): + busines_api = BusinessSSL() + order_list = busines_api.get_order_list().get("message", []) + if not order_list: + return + for order in order_list: + if not (order.get("certId") == ssl.cert_id and order.get("renew", False) is True): + continue + write_log( + f"|- Domain Subject:【{ssl.subject}】Business SSL certificate is being renewed, please wait..." + ) + try: + new_get = public.dict_obj + new_get.uc_id = order["uc_id"] + res = busines_api.renew_cert_order(new_get, cert_id=order["certId"]) + if res.get("status") == 0: + write_log( + f"|- Domain Subject:【{ssl.subject}】Business SSL certificate renewal successfully!" + ) + else: + write_log( + f"|- Domain Subject:【{ssl.subject}】Business SSL certificate renewal failed: {res.get('message', 'Unknown error')}" + ) + except Exception as e: + write_log( + f"|- Domain Subject:【{ssl.subject}】Business SSL certificate renewal failed: {str(e)}" + ) + finally: + busines_api.list_business_ssl(public.to_dict_obj({"p": 1, "limit": "10"})) + break + else: # for else + write_log( + f"|- Domain Subject:【{ssl.subject}】Business SSL certificate is not is not enabled renew, " + f"can only be skipped." + ) + return + + # noinspection PyUnboundLocalVariable def renew_cert_v3(self, index: str = None, cycle: int = 31): # ============= import =============== import sys @@ -3012,85 +3139,83 @@ fullchain.pem Paste into certificate input box s = 0 count = ssl_obj.count() write_log("", "wb+") - order_list = None # businiess list + reload = False for ssl in ssl_obj: s += 1 write_log(f"|-Renewing the {s} certificate,There are {count} certificates in total...") - # 计算 30 天后的日期 - after_ts = round((time.time() + 86400 * cycle) * 1000) - if ssl.not_after_ts > after_ts: - write_log( - f"|- Domain Subject:【{ssl.subject}】The expiration date is greater than {cycle} days," - f" so there is no need for renewal!" - ) - continue + # ================= check expire time =========================== + # 是否Let's ip ssl + is_ip_ssl = all(self.is_ip(ip) for ip in ssl.dns) + is_lets = ssl.info.get("issuer_O") == "Let's Encrypt" + if is_ip_ssl and is_lets: + # 计算 3 天后的日期 + temp_cycle = 3 + after_ts = round((time.time() + 86400 * temp_cycle) * 1000) + if ssl.not_after_ts > after_ts: + write_log( + f"|- IP Subject:【{ssl.subject}】The expiration date is greater than {temp_cycle} days, skip" + ) + continue + else: # 其余 + # 计算 30 天后的日期 + after_ts = round((time.time() + 86400 * cycle) * 1000) + if ssl.not_after_ts > after_ts: + write_log( + f"|- Domain Subject:【{ssl.subject}】The expiration date is greater than {cycle} days, skip" + ) + continue # ================ businiess ssl renew ========================= if ssl.is_order == 1: - from BTPanel import app - from ssl_domainModelV2.business_ssl import BusinessSSL - with app.app_context(): - busines_api = BusinessSSL() - if not order_list: order_list = busines_api.get_order_list().get("message", []) - if not order_list: continue - for order in order_list: - if not (order.get("certId") == ssl.cert_id and order.get("renew", False) is True): - continue - write_log( - f"|- Domain Subject:【{ssl.subject}】Business SSL certificate is being renewed, please wait..." - ) - try: - new_get = public.dict_obj - new_get.uc_id = order["uc_id"] - res = busines_api.renew_cert_order(new_get, cert_id=order["certId"]) - if res.get("status") == 0: - write_log( - f"|- Domain Subject:【{ssl.subject}】Business SSL certificate renewal successfully!" - ) - else: - write_log( - f"|- Domain Subject:【{ssl.subject}】Business SSL certificate renewal failed: {res.get('message', 'Unknown error')}" - ) - except Exception as e: - write_log( - f"|- Domain Subject:【{ssl.subject}】Business SSL certificate renewal failed: {str(e)}" - ) - finally: - busines_api.list_business_ssl(public.to_dict_obj({"p": 1, "limit": "10"})) - break - else: # for else - write_log( - f"|- Domain Subject:【{ssl.subject}】Business SSL certificate is not is not enabled renew, " - f"can only be skipped." - ) - continue - # ================ businiess ssl renew end ========================= + self._renew_business_order(ssl) + continue - # 官网自购商业证书续签后, 不是let's encrypt的证书不续签 - if ssl.info.get("issuer") not in ( - "R3", "R8", "R11", "R10", "R5" - ) and ssl.info.get("issuer_O") != "Let's Encrypt": + # ================= Let's Encrypt renew ========================= + # 非let's encrypt的证书跳过 + if not is_lets: write_log( f"|- Domain Subject:【{ssl.subject}】It's not a Let's Encrypt certificate and cannot be renewed!") continue - auth_type = ssl.auth_info.get("auth_type") + if is_ip_ssl and ssl.panel_uf == ["panel"]: # 如果是ip ssl且是面板证书 + from ssl_domainModelV2.service import apply_panel_ip_ssl_script + _, e = apply_panel_ip_ssl_script(ip=",".join(ssl.dns), log_path=ssl.log) + if e: + write_log( + f"|- IP Subject:【{ssl.subject}】Http Verification Renewal SSL certificate failed: {e.strip()}" + ) + else: + write_log( + f"|- IP Subject:【{ssl.subject}】Http Verification " + f"Renewal SSL certificate processed via script, please check log file" + ) + reload = True + continue - # 如果上次用的http, 则尝试http, 失败继续进行dns兜底 + auth_type = ssl.auth_info.get("auth_type") + # 如果上次用的http, 则尝试http, 失败继续进行dns兜底再次尝试 if auth_type == "http": # panel ssl if ssl.user_for.get("panel") == ["panel"]: - from ssl_domainModelV2.service import apply_panel_ssl_http temp = "" for d in ssl.dns: if "*." not in d: temp = d break if temp != "": - panel_apply = apply_panel_ssl_http(domain=temp) + from ssl_domainModelV2.service import apply_panel_ssl_http, generate_panel_task + panel_task_obj = generate_panel_task({"domain": temp}) + panel_apply = apply_panel_ssl_http( + domain=temp, task_obj=panel_task_obj + ) + if panel_task_obj: + panel_task_obj.task_done() + temp_ssl = DnsDomainSSL.objects.filter(hash=panel_apply.get("ssl_hash", "")).first() + if temp_ssl: + temp_ssl.deploy_panel() + reload = True write_log(f"|- Domain Subject:【{ssl.subject}】 {panel_apply.get('msg')}") - if panel_apply.get("status"): - continue + continue # other site ssl site_path = ssl.auth_info.get("auth_to").rstrip("/") @@ -3187,6 +3312,9 @@ fullchain.pem Paste into certificate input box f"Renewal SSL certificate Failed:{str(e)}" ) continue + + if reload: + public.writeFile("/www/server/panel/data/reload.pl", "1") return def apply_cert_domain( @@ -3214,6 +3342,7 @@ fullchain.pem Paste into certificate input box self.logger("", "wb+") index = "" self._auto_wildcard = auto_wildcard + apply_res = {"status": True} try: self.get_apis() self._set_task(5) @@ -3248,12 +3377,12 @@ fullchain.pem Paste into certificate input box self.send_csr(index) self._set_task(90) self.logger(public.lang("|-Downloading certificate..")) - cert = self.download_cert(index) + apply_res: dict = self.download_cert(index) self._set_task(99) - cert["status"] = True - cert["msg"] = public.lang("Application successful!") + apply_res["status"] = True + apply_res["msg"] = public.lang("Application successful!") self.logger(public.lang("|-Successful application!")) - return cert + return apply_res except Exception as ex: self.remove_manual_apply_lock(index) self.remove_dns_record() @@ -3264,8 +3393,18 @@ fullchain.pem Paste into certificate input box else: msg = ex self.logger(public.get_error_info()) - _res = {"status": False, "msg": msg, "index": index} - return _res + apply_res = {"status": False, "msg": msg, "index": index} + return apply_res + finally: + try: + if not apply_res.get("status", True): + from ssl_domainModelV2.model import DnsDomainSSL + DnsDomainSSL.objects.filter( + dns__contains=domains, + info__issuer_O="Let's Encrypt", + ).update({"renew_status": 0}) + except Exception as e0: + public.print_log(f"Error reset renew status: {e0}") def echo_err(msg): diff --git a/class/common.py b/class/common.py index db2cbe67..40a7a97d 100755 --- a/class/common.py +++ b/class/common.py @@ -29,10 +29,13 @@ public.sys_path_append("class_v2/") class panelSetup: def __init_panel_asset(self) -> None: from config_v2 import config as config_v2 - panel_asset = config_v2().get_panel_asset() - if panel_asset.get("status") == 0: - g.panel_asset = panel_asset.get("message") - return + try: + panel_asset = config_v2().get_panel_asset() + if panel_asset.get("status") == 0: + g.panel_asset = panel_asset.get("message") + return + except Exception as ex: + public.print_log("init_panel_asset error: {}".format(str(ex))) from BTPanel import PANEL_DEFAULT_ASSET g.panel_asset = PANEL_DEFAULT_ASSET @@ -48,7 +51,7 @@ class panelSetup: if ua.find('spider') != -1 or g.ua.find('bot') != -1: return abort(403) - g.version = '7.59.0' + g.version = '7.63.0' g.title = public.GetConfigValue('title') g.uri = request.path g.debug = os.path.exists('data/debug.pl') diff --git a/class/files.py b/class/files.py index 919200bd..aecfc2c6 100644 --- a/class/files.py +++ b/class/files.py @@ -2148,7 +2148,7 @@ session.save_handler = files'''.format(path, sess_path, sess_path) fp.close() if isConf != -1: - isError = public.checkWebConfig() + isError = public.checkWebConfig(path=get.path) if isError != True: public.ExecShell('\\cp -a /tmp/backup.conf '+get.path) return public.return_msg_gettext(False, public.lang('ERROR:
'+isError.replace("\n", '
')+'
')) diff --git a/class/jobs.py b/class/jobs.py index 85fce2f3..e2896aff 100755 --- a/class/jobs.py +++ b/class/jobs.py @@ -36,6 +36,7 @@ def control_init_now(): set_pma_access() check_enable_php() reset_restart_record() + setup_site_total() def control_init_delay(): delay_list = [ @@ -44,6 +45,7 @@ def control_init_delay(): (clear_other_files,), (remove_tty1,), (clean_hook_log,), + (catch_panel_ssl,), (acme_crond_reinit,), (clear_fastcgi_safe,), (run_script,), @@ -76,52 +78,6 @@ def control_init_new(): control_init_now() control_init_delay() -# todo 计划移除 -def control_init(): - update_py312() - public.chdck_salt() - rep_websocket_conf() - clear_other_files() - sql_pacth() - #disable_putenv('putenv') - #clean_session() - #set_crond() - clean_max_log('/www/server/panel/plugin/rsync/lsyncd.log') - clean_max_log('/var/log/rsyncd.log',1024*1024*10) - clean_max_log('/root/.pm2/pm2.log',1024*1024*20) - remove_tty1() - clean_hook_log() - acme_crond_reinit() - run_new() - clean_max_log('/www/server/cron',1024*1024*5,20) - clean_max_log("/www/server/panel/plugin/webhook/script",1024*1024*1) - #check_firewall() - # check_dnsapi() - clean_php_log() - files_set_mode() - set_pma_access() - # public.set_open_basedir() - clear_fastcgi_safe() - # update_py37() - run_script() - set_php_cli_env() - check_enable_php() - #sync_node_list() - check_default_curl_file() - null_html() - remove_other() - deb_bashrc() - # upgrade_gevent() - install_pycountry() - upgrade_polkit() - #hide_docker() - rep_pyenv_link() - rm_apache_cgi_test() - uninstall_pip_lxml() - install_pyroute2() - upgrade_fastcgi_cache_conf_format() - - def install_packages(): try: import dns.resolver @@ -154,8 +110,6 @@ def install_packages(): except Exception as e: public.print_log("install pyroute2 error:", str(e)) - - def rm_apache_cgi_test(): ''' @name 删除apache测试cgi文件 @@ -177,6 +131,11 @@ def uninstall_pip_lxml(): except: pass +def catch_panel_ssl(): + """收录面板SSL""" + from ssl_domainModelV2.service import sync_panel_ssl + sync_panel_ssl() + def acme_crond_reinit(): ''' @name 修复acme定时任务 @@ -192,7 +151,6 @@ def acme_crond_reinit(): except: pass - def rep_pyenv_link(): ''' @name 修复pyenv环境软链 @@ -451,12 +409,12 @@ def sql_pacth(): CREATE TABLE IF NOT EXISTS `git_sites_auth` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `site_id` INTEGER, - `auth_type` REAL, - `oauth_access_token` REAL, - `oauth_scope` REAL, - `oauth_token_type` REAL, - `branch` REAL, - `repo` REAL, + `auth_type` TEXT, + `oauth_access_token` TEXT, + `oauth_scope` TEXT, + `oauth_token_type` TEXT, + `branch` TEXT, + `repo` TEXT, `number_copies` INTEGER DEFAULT 5 )""" sql.execute(csql, ()) @@ -468,15 +426,15 @@ def sql_pacth(): `site_id` INTEGER, `status` INTEGER, `deploy_status` INTEGER, - `script_path` REAL, - `log_path` REAL, - `deployment_time` REAL, - `execut_time` REAL, - `commit_hash` REAL, - `commit_hash_short` REAL, - `msg` REAL, - `author_name` REAL, - `committed_time` REAL + `script_path` TEXT, + `log_path` TEXT, + `deployment_time` TEXT, + `execut_time` TEXT, + `commit_hash` TEXT, + `commit_hash_short` TEXT, + `msg` TEXT, + `author_name` TEXT, + `committed_time` TEXT )""" sql.execute(csql, ()) @@ -485,8 +443,8 @@ def sql_pacth(): CREATE TABLE IF NOT EXISTS `site_deploy_script` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `site_id` INTEGER, - `title` REAL, - `script_path` REAL, + `title` TEXT, + `script_path` TEXT, `is_webhook` INTEGER DEFAULT 0 )""" sql.execute(csql, ()) @@ -644,7 +602,56 @@ def remove_other(): if os.path.exists(f): os.remove(f) +# 免费监控报表更新 +def setup_site_total(): + # 获取免费监控报表状态,关闭则不更新 + site_total_monitor_path = '/etc/systemd/system/site_total.service' + if not os.path.exists(site_total_monitor_path): + return + panel_path = public.get_panel_path() + config_py = "{}/class_v2/config_v2.py".format(panel_path) + + # 获取版本更新时间,截至分钟级 + update_time = os.path.getmtime(config_py) + update_time = int(update_time) // 60 * 60 + + # 尝试获取上次更新时间搓 + last_install_file = "{}/data/free_site_total.pl".format(panel_path) + last_install_time = 0 + if os.path.exists(last_install_file): + try: + last_install_time = int(public.readFile(last_install_file)) + except: + pass + + # 清除已删除的网站数据 + try: + import shutil + data_path = '/www/server/site_total/data/total' + site_list = None + if os.path.exists(data_path): + site_list = public.M('sites').field('name').select() + site_list = [item['name'] for item in site_list] + + if site_list: + for name in os.listdir(data_path): + full = os.path.join(data_path, name) + if os.path.isdir(full) and name not in site_list: + shutil.rmtree(full) + except: + pass + + # 更新时间相同,不更新 + if last_install_time == update_time: + # public.print_log("setup_site_total: The update time is the same. No update") + return + + install_sh = "{} {}/script/free_total_update.py".format(public.get_python_bin(), panel_path) + res = public.ExecShell(install_sh) + public.print_log(res) + + public.writeFile(last_install_file, str(update_time)) def null_html(): null_files = ['/www/server/nginx/html/index.html','/www/server/apache/htdocs/index.html','/www/server/panel/data/404.html'] diff --git a/class/panelDnsapi.py b/class/panelDnsapi.py index 3265979f..f55a9694 100644 --- a/class/panelDnsapi.py +++ b/class/panelDnsapi.py @@ -1320,18 +1320,31 @@ class GodaddyDns(BaseDns): # =============== 域名管理 ==================== def get_domains(self) -> list: try: - res = self._make_request("GET", "/v1/domains").json() - domains = [] - for domain in res: - if domain.get("status") != "ACTIVE": - sync_log(f"|-- warning: [{domain.get('domain')}] is Not ACTIVE, Skip It...") - continue - if domain.get("expires") and domain.get("expires") < datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ"): - sync_log(f"|-- warning: [{domain.get('domain')}] is Expired, Skip It...") - continue - domains.append(domain.get("domain")) - domains.sort() - return domains + all_domains = [] + limit = 300 + endpoint = f"/v1/domains?limit={limit}" + while 1: + res = self._make_request("GET", endpoint).json() + if not res: + break + for domain in res: + if domain.get("status") != "ACTIVE": + sync_log(f"|-- warning: [{domain.get('domain')}] is Not ACTIVE, Skip It...") + continue + if domain.get("expires") and domain.get("expires") < datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ"): + sync_log(f"|-- warning: [{domain.get('domain')}] is Expired, Skip It...") + continue + all_domains.append(domain.get("domain")) + + if len(res) < limit: + break + + last_domain = res[-1]["domain"] + endpoint = f"/v1/domains?limit={limit}&marker={last_domain}" + time.sleep(1) # 限流 + + all_domains.sort() + return all_domains except Exception as e: raise HintException(f"get domains error {e}") diff --git a/class/public/common.py b/class/public/common.py index f60c06f8..66b3061a 100644 --- a/class/public/common.py +++ b/class/public/common.py @@ -1810,7 +1810,7 @@ def change_nginx_server_old_http2(nginx_file: str): # 错误收集适配 # 检查Web服务器配置文件是否有错误 -def checkWebConfig(repair_num=2): +def checkWebConfig(repair_num=2, path=None): f1 = '{}/'.format(get_vhost_path()) f2 = '{}/'.format(get_plugin_path()) setup_path = get_setup_path() @@ -1835,35 +1835,28 @@ def checkWebConfig(repair_num=2): if os.path.exists(f3): os.remove(f3) web_s = get_webserver() - if web_s == 'nginx': - result = ExecShell( - "ulimit -n 8192 ; {setup_path}/nginx/sbin/nginx -t -c {setup_path}/nginx/conf/nginx.conf".format( - setup_path=setup_path)) - writeFile('/tmp/nginx_new.conf', readFile('/www/server/nginx/conf/nginx.conf')) - # print_log('checkWebConfig--result:{}'.format(result)) - searchStr = 'successful' - nginx_version = ExecShell("{}/nginx/sbin/nginx -v".format(setup_path)) - # print_log('nginx') - version_info = nginx_version[1] - elif web_s == 'apache': - # print_log('apache') - # else: + if web_s == 'apache' or (path is not None and 'httpd.conf' in path): result = ExecShell("ulimit -n 8192 ; {setup_path}/apache/bin/apachectl -t".format(setup_path=setup_path)) searchStr = 'Syntax OK' apache_version = ExecShell("{}/apache/bin/httpd -v".format(setup_path)) version_info = apache_version[1] + elif web_s == 'nginx': + result = ExecShell( + "ulimit -n 8192 ; {setup_path}/nginx/sbin/nginx -t -c {setup_path}/nginx/conf/nginx.conf".format( + setup_path=setup_path)) + writeFile('/tmp/nginx_new.conf', readFile('/www/server/nginx/conf/nginx.conf')) + searchStr = 'successful' + nginx_version = ExecShell("{}/nginx/sbin/nginx -v".format(setup_path)) + version_info = nginx_version[1] else: - # print_log('other') result = ["1", "1"] searchStr = "1" version_info = "Unknow" - # print_log('checkWebConfig--result1:{}'.format(result)) if result[1].find( 'the "listen ... http2" directive is deprecated, use the "http2" directive instead') != -1 and web_s == "nginx" and is_change_nginx_http2(): if repair_num > 0: repair_num -= 1 change_nginx_http2() - # print_log('nginx----1') return checkWebConfig(repair_num) if result[1].find(searchStr) == -1: @@ -2753,22 +2746,39 @@ def get_panel_version(): def get_os_version(): - ''' + """ @name 取操作系统版本 @author hwliang<2021-08-07> @return string - ''' - p_file = '/etc/.productinfo' - if os.path.exists(p_file): - s_tmp = readFile(p_file).split("\n") + """ + # sys ver + version = "" + if os.path.exists("/etc/.productinfo"): + s_tmp = readFile("/etc/.productinfo").split("\n") if s_tmp[0].find('Kylin') != -1 and len(s_tmp) > 1: version = s_tmp[0] + ' ' + s_tmp[1].split('/')[0].strip() - else: - version = readFile('/etc/redhat-release') + + release_version = ( + "/etc/redhat-release", + "/etc/system-release", + "/etc/amazon-linux-release" + ) + for tmp_file in release_version: + if not version and os.path.exists(tmp_file): + s_tmp = readFile(tmp_file) + version = s_tmp + break + + # 2025/12 适配腾讯云及其他发行版 if not version: - version = readFile('/etc/issue').strip().split("\n")[0].replace('\\n', '').replace(r'\l', '').strip() + tmp = public.readFile('/etc/os-release') + if tmp: + version_match = re.search(r'PRETTY_NAME=["\']?([^"\']+)["\']?', tmp) + if version_match: + version = version_match.groups()[0] else: version = version.replace('release ', '').replace('Linux', '').replace('(Core)', '').strip() + # py ver v_info = sys.version_info try: version = "{} {}(Py{}.{}.{})".format(version, os.uname().machine, v_info.major, v_info.minor, v_info.micro) @@ -9112,6 +9122,9 @@ def OfficialApiBase(): return 'https://www.aapanel.com' # return 'http://dev.aapanel.com' +# 部分插件下载地址 +def sync_plugin_OfficialApiBase(): + return 'https://download.aapanel.com' # 官网下载根地址 def OfficialDownloadBase(): diff --git a/class/public/websitemgr.py b/class/public/websitemgr.py index 6863c786..ffbae41d 100644 --- a/class/public/websitemgr.py +++ b/class/public/websitemgr.py @@ -156,6 +156,9 @@ def create_php_site_with_mysql(domain: str, site_path: str, php_ver_short: str, if data['siteId'] is not None: from public import websitemgr websitemgr.remove_site(data['siteId']) + + if data.get('databaseErrorMsg', ''): + raise HintException(data.get('databaseErrorMsg', '')) raise HintException(public.lang('Database creation failed. Please check mysql running status and try again.')) return aap_t_simple_site_info(data['siteId'], data['d_id']) diff --git a/class/system.py b/class/system.py index c93c2f1e..50a95cfe 100644 --- a/class/system.py +++ b/class/system.py @@ -953,6 +953,8 @@ class system: return public.is_memcached_process_exists() elif name == 'mongodb': return public.is_mongodb_process_exists() + elif name == 'pgsql': + return public.is_process_exists_by_exe('/www/server/pgsql/bin/postgres') else: return True diff --git a/class_v2/ajax_v2.py b/class_v2/ajax_v2.py index fa27eab8..4cd3a135 100644 --- a/class_v2/ajax_v2.py +++ b/class_v2/ajax_v2.py @@ -840,7 +840,7 @@ class ajax: return public.return_message(-1, 0, public.lang("Please run the program when all install tasks finished!")) panel_update_name = '/LinuxPanel_EN-' if updateInfo['is_beta'] == 1: updateInfo['version'] = updateInfo['beta']['version'] - if updateInfo['is_pro'] == 1: + if updateInfo['is_pro'] == 1: updateInfo['version'] = updateInfo['pro']['version'] panel_update_name = '/LinuxPanelPro_EN-' @@ -1112,6 +1112,9 @@ class ajax: service_type = ["nginx","apache"] if public.get_multi_webservice_status(): service_type = ["nginx"] + + is_changed = False + oldPort = None for i in service_type: file = "/www/server/panel/vhost/{}/phpmyadmin.conf".format(i) conf = public.readFile(file) @@ -1142,8 +1145,9 @@ class ajax: conf = re.sub(rep, "Listen " + get.port + "\n", conf, 1) rep = r"VirtualHost\s*\*:[0-9]+" conf = re.sub(rep, "VirtualHost *:" + get.port, conf, 1) - if oldPort == get.port: - return public.fail_v2(public.lang('Port [{}] is in use!', get.port)) + + if oldPort != get.port and is_changed is False: + is_changed = True public.writeFile(file, conf) public.serviceReload() @@ -1159,6 +1163,16 @@ class ajax: get.port = oldPort fw.DelAcceptPort(get) + from firewallModelV2.comModel import main as firewall_main + fwd = firewall_main() + if is_changed and oldPort: + fwd.set_port_rule(public.to_dict_obj( + {"port": oldPort, "operation": "remove", "reload": "0"} + )) + + fwd.set_port_rule(public.to_dict_obj( + {"port": get.port, "brief": "phpmyadmin"} + )) return public.success_v2(public.lang('Setup successfully!')) def _get_phpmyadmin_auth(self): @@ -1368,7 +1382,7 @@ class ajax: conf = re.sub(reg,"address *:{}".format(get.port),conf) if oldPort == get.port: - return public.fail_v2(public.lang('Port [{}] is in use!', get.port)) + return public.success_v2(public.lang('Setup successfully!')) public.writeFile(filename,conf) import firewalls @@ -1443,12 +1457,25 @@ class ajax: if os.path.exists("/www/server/panel/vhost/apache/phpmyadmin.conf"): os.remove("/www/server/panel/vhost/apache/phpmyadmin.conf") else: - if conf.find(stop_path) != -1: - conf = conf.replace(stop_path,pma_path) + access_control_start = 'accessControl {\n' + ols_conf = """accessControl { + allow 127.0.0.1 + allow ::1 + deny All +} +""" + + if conf.find(access_control_start) == -1: + conf = conf + '\n' + ols_conf msg = public.getMsg('START') else: - conf = conf.replace(pma_path,stop_path) - msg = public.getMsg('STOP') + try: + start_idx = conf.find(access_control_start) + end_idx = conf.find('}', start_idx + len(access_control_start)) + 1 + conf = conf[:start_idx] + conf[end_idx:] + msg = public.getMsg('STOP') + except: + return public.return_message(-1,0,public.lang('There is an error in the configuration of phpMyAdmin.')) public.writeFile(filename,conf) public.serviceReload() @@ -1456,6 +1483,8 @@ class ajax: return public.success_v2(public.lang('phpMyAdmin already {}!', msg)) + return public.return_message(-1,0,public.lang('Parameter error!')) + def ToPunycode(self,get): import re get.domain = get.domain.encode('utf8') diff --git a/class_v2/config_v2.py b/class_v2/config_v2.py index c879985d..3e87bf10 100644 --- a/class_v2/config_v2.py +++ b/class_v2/config_v2.py @@ -1941,8 +1941,8 @@ class config: if 'api' not in data: data['api'] = 'checked' if p_token['open'] else '' - import panel_ssl_v2 as panelSSL - data['user_info'] = panelSSL.panelSSL().GetUserInfo(None)['message'] + import panelSSL + data['user_info'] = panelSSL.panelSSL().GetUserInfo(None) data['user'] = {} try: data['user']['username'] = public.get_user_info()['username'] @@ -4070,19 +4070,28 @@ class config: 'main_bg_image': 'main_bg_images', 'main_bg_image_opacity': 'main_bg_images_opacity', } - if not os.path.exists(self.__panel_asset_config): - return public.success_v2(default_values) - - # 旧配置字段替换成新key - path_data = json.loads(public.readFile(self.__panel_asset_config)) - - for old_key, new_key in old_to_new.items(): - if old_key in path_data: - path_data[new_key] = path_data.pop(old_key) - - # 更新配置文件 - public.writeFile(self.__panel_asset_config, json.dumps(path_data, indent=2)) try: + if not os.path.exists(self.__panel_asset_config): + return public.success_v2(default_values) + + # 旧配置字段替换成新key + cf = public.readFile(self.__panel_asset_config) + if not cf: # 空配置 + public.ExecShell(f"rm -f {self.__panel_asset_config}") + return public.success_v2(default_values) + + try: + path_data = json.loads(cf) + except json.JSONDecodeError: # 配置异常 + public.ExecShell(f"rm -f {self.__panel_asset_config}") + return public.success_v2(default_values) + + for old_key, new_key in old_to_new.items(): + if old_key in path_data: + path_data[new_key] = path_data.pop(old_key) + + # 更新配置文件 + public.writeFile(self.__panel_asset_config, json.dumps(path_data, indent=2)) result = {} for key, default in default_values.items(): value = path_data.get(key, default) @@ -4119,3 +4128,58 @@ class config: return public.success_v2(result) except: return public.success_v2(default_values) + + # 面板服务监控list + def get_alarm_services(self, get=None): + try: + get.validate([ + Param("p").Integer(), + Param("limit").Integer(), + Param("search").String(), + ], [ + public.validate.trim_filter(), + ]) + page = 1 if not hasattr(get, "p") else int(get.p) + limit = 10 if not hasattr(get, "limit") else int(get.limit) + search = "" if not hasattr(get, "search") else str(get.search).strip().lower() + except Exception as ex: + public.print_log("error info: {}".format(ex)) + return public.return_message(-1, 0, str(ex)) + + from script.restart_services import SERVICES_MAP, ServicesHelper, pretty_title + from mod.base.push_mod.mods import TaskConfig + + all_services = list(SERVICES_MAP.keys()) + if not search: + services = all_services + else: + services = [s for s in all_services if search in s or search in pretty_title(s).lower()] + + # 移除未安装的, 以及内置的panel + services = [ + s for s in services if ServicesHelper(s).is_install and s != "panel" + ] + total = len(services) + start = (page - 1) * limit + if start >= total or limit <= 0: + return public.success_v2({"data": [], "total": total}) + + page_services = services[start: page * limit] + tasks_obj = TaskConfig() + res = [] + for s in page_services: + service = ServicesHelper(s) + alarm = tasks_obj.get_by_keyword("services", s) or {} + res.append({ + "admin": os.path.exists("/www/server/panel/plugin/" + service.shop_name), + "name": s, + "title": service.pretty_title, + "shop_name": service.shop_name, + "alarm": { + "alarm_id": alarm.get("id", ""), + "alarm_status": alarm.get("status", False) + }, + "version": service.version, + "status": service.is_running, + }) + return public.success_v2({"data": res,"total": total}) \ No newline at end of file diff --git a/class_v2/crontab_v2.py b/class_v2/crontab_v2.py index 38638a93..a0357242 100644 --- a/class_v2/crontab_v2.py +++ b/class_v2/crontab_v2.py @@ -285,10 +285,12 @@ class crontab: try: task['user'] = self.parse_user_from_sbody(task['sBody']) except:pass - # 从sBody中移除sudo -u部分,只显示实际命令 + # 从sBody中移除sudo -u部分,只显示实际命令 if 'sudo -u' in task['sBody']: task['sBody'] = task['sBody'].split("bash -c '", 1)[-1].rstrip("'") - # task['user'] = task.get('user', 'root') + # 只显示实际命令 + if "<<'EOF'" in task['sBody']: + task['sBody'] = task['sBody'].split("<<'EOF'", 1)[-1].strip().rstrip("EOF").strip() # 任务不存在 ,标记为停止 if task['type'] == 'once': @@ -730,7 +732,11 @@ class crontab: # 如果user有值,则修改sBody user = get.get('user', 'root') if user : - get['sBody'] = "sudo -u {0} bash -c '{1}'".format(user, get['sBody']) + if get["sType"] != "toShell": + get['sBody'] = "sudo -u {0} bash -c '{1}'".format(user, get['sBody']) + else: + get['sBody'] = f"sudo -u {user} bash <<'EOF'\n{get['sBody']}\nEOF" + if get.get('version',''): version = get['version'].replace(".", "") get['sBody'] = get['sBody'].replace("${1/./}", version) @@ -1010,16 +1016,19 @@ WantedBy=timers.target if get['sType'] == 'toShell': get['sBody'] = get['sBody'].replace('\r\n', '\n') - # 如果user有值,则修改sBody + # 修改sBody user = get.get('user', 'root') if user: - get['sBody'] = "sudo -u {0} bash -c '{1}'".format(user, get['sBody']) + if get["sType"] != "toShell": + get['sBody'] = "sudo -u {0} bash -c '{1}'".format(user, get['sBody']) + else: + get['sBody'] = f"sudo -u {user} bash <<'EOF'\n{get['sBody']}\nEOF" + # 如果get中有version键,就替换sBody中的版本号占位符 if get.get('version',''): version = get['version'].replace(".", "") get['sBody'] = get['sBody'].replace("${1/./}", version) - print(get['sBody']) # 新增定时任务:在指定时间执行一次 if get['type'] == 'once' and get['sType'] == 'toShell': @@ -1459,26 +1468,6 @@ WantedBy=timers.target 'log_cleanup':head + python_bin + " " + public.GetConfigValue('setup_path') + "/panel/script/log_cleanup.py " + " " + param['sName'], } - # 取消插件调用计划任务 - # if param['backupTo'] != 'localhost': - # cfile = public.GetConfigValue('setup_path') + "/panel/plugin/" + param['backupTo'] + "/" + param[ - # 'backupTo'] + "_main.py" - # if not os.path.exists(cfile): cfile = public.GetConfigValue('setup_path') + "/panel/script/backup_" + \ - # param['backupTo'] + ".py" - # wheres = { - # 'path': head + python_bin + " " + cfile + " path " + param['sName'] + " " + str( - # param['save']) + attach_param, - # 'site': head + python_bin + " " + cfile + " site " + param['sName'] + " " + str( - # param['save']) + attach_param, - # 'database': head + python_bin + " " + cfile + " database " + param['sName'] + " " + str( - # param['save']) + attach_param, - # 'logs': head + python_bin + " " + public.GetConfigValue( - # 'setup_path') + "/panel/script/logsBackup " + param['sName'] + " " + str(param['save']), - # 'rememory': head + "/bin/bash " + public.GetConfigValue('setup_path') + '/panel/script/rememory.sh', - # 'webshell': head + python_bin + " " + public.GetConfigValue( - # 'setup_path') + '/panel/class/webshell_check.py site ' + param['sName'] + ' ' + param[ - # 'urladdress'] - # } try: shell = wheres[type] except: @@ -1506,6 +1495,8 @@ fi # shell = head + '''curl -sS -X POST --connect-timeout 10 -m 3600 -H "Content-Type: application/json" -d '{}' {} '''.format(json.dumps(param1), # param['urladdress']) shell = head + '''curl -sS -L -X POST {} --connect-timeout 10 -m 3600 -H "Content-Type: application/json" -d '{}' {} '''.format(user_agent, json.dumps(param1), param['urladdress']) + # elif type == 'toPython': + # ... else: shell = head + param['sBody'].replace("\r\n", "\n") cronPath = '/www/server/cron' # 修改为实际的路径 diff --git a/class_v2/data_v2.py b/class_v2/data_v2.py index 44c42124..0274f18b 100644 --- a/class_v2/data_v2.py +++ b/class_v2/data_v2.py @@ -456,15 +456,20 @@ class data: apache_b64_path = public.image_to_base64(os.path.join(public.get_panel_path(), "BTPanel/static/img/apache.png")) ols_b64_path = public.image_to_base64(os.path.join(public.get_panel_path(), "BTPanel/static/img/soft_ico/ico-openlitespeed.png")) + # 按流量排序 + re_data = None + if get.get('re_order'): + re_data = self.get_site_request() + if re_data['status'] == 0: + re_data = re_data['message'] + for i in range(len(data['data'])): - # 添加维护模式状态 - if get.get('project_type', '') == 'WP2': - data['data'][i]['maintenance'] = False - path = os.path.join(data['data'][i]['path'],'.maintenance') - if os.path.exists(path): - data['data'][i]['maintenance'] = True - elif get.get('project_type', '') == 'PHP': - pass + # 添加流量排序 + if re_data: + if data["data"][i]['name'] in re_data: + data['data'][i]['re_total'] = re_data[data["data"][i]['name']]['total']['request'] + else: + data['data'][i]['re_total'] = 0 data["data"][i]["last_backup_time"] = backup_info_map.get(data['data'][i]['id'], {}).get("last_backup_time", "") @@ -563,9 +568,17 @@ class data: # data["net_flow_info"] = net_flow_json_info # except Exception: # data["net_flow_info"] = {} + # 判断是否进行了类型筛选 if get.get('site_type', ''): data['data'] = filtered_data + + if get.get('re_order') and re_data: + if get.get('re_order') == 'desc': + data['data'] = sorted(data['data'], key=lambda x: x["re_total"], reverse=True) + else: + data['data'] = sorted(data['data'], key=lambda x: x["re_total"]) + elif table == 'firewall': for i in range(len(data['data'])): if data['data'][i]['port'].find(':') != -1 or data['data'][i]['port'].find('.') != -1 or data['data'][i]['port'].find('-') != -1: @@ -1196,7 +1209,7 @@ class data: if len(version_list)<3:return {'status': 0, "timestamp": int(time.time()), "message": result} if int(version_list[0])<4:return {'status': 0, "timestamp": int(time.time()), "message": result} if int(version_list[0])==4 and int(version_list[1])<1:return {'status': 0, "timestamp": int(time.time()), "message": result} - if int(version_list[0])==4 and int(version_list[2])<2:return {'status': 0, "timestamp": int(time.time()), "message": result} + if int(version_list[0])==4 and int(version_list[1])<1 and int(version_list[2])<2:return {'status': 0, "timestamp": int(time.time()), "message": result} #取网站域名列表 try: prorject_type=["PHP","WP2"] @@ -1257,6 +1270,26 @@ class data: public.writeFile(cache_file, json.dumps(result)) return {'status': 0, "timestamp": int(time.time()), "message": result} + + # 简化版获取网站请求数用于排序 + def get_site_request(self,get=None): + #保留免费版 + if not os.path.exists(os.path.join(public.get_panel_path(),"plugin/monitor/info.json")): + site_names = [ i.get('name','') for i in public.M("sites").field("name").select() if i.get('name','') !='' ] + start_date= None if get==None else get.get('start_date',None) + end_date= None if get==None else get.get('end_date',None) + return {'status': 0, "timestamp": int(time.time()), "message": self.get_multi_site_stats(site_names=site_names,start_date=start_date,end_date=end_date)} + + # 直接读取监控报表数据缓存 + path = os.path.join(public.get_panel_path(), "plugin/monitor/site_thirty_total.json") + try: + re_data = {} + if os.path.exists(path): + re_data = json.loads(public.readFile(path)) + return {'status': 0, "timestamp": int(time.time()), "message": re_data} + except: + return {'status': -1, "timestamp": int(time.time()), "message": {}} + # 获取waf报表数据 def getSiteWafConfig(self, get=None): @@ -1596,8 +1629,21 @@ class data: apache_b64_path = public.image_to_base64(os.path.join(public.get_panel_path(), "BTPanel/static/img/apache.png")) ols_b64_path = public.image_to_base64(os.path.join(public.get_panel_path(), "BTPanel/static/img/soft_ico/ico-openlitespeed.png")) + # 处理网站流量排序 + re_data = None + if get.get('re_order'): + re_data = self.get_site_request() + if re_data['status'] == 0: + re_data = re_data['message'] + # 补充字段 for item in data: + if re_data: + if item['name'] in re_data: + item['re_total'] = re_data[item['name']]['total']['request'] + else: + item['re_total'] = 0 + # 处理备份时间 if item.get('last_backup_time', None): try: @@ -1669,6 +1715,13 @@ class data: else: data = sorted(data, key=lambda x: x[order_list[0]], reverse=True) + # 处理网站流量排序 + if get.get('re_order') and re_data: + if get.get('re_order') == 'desc': + data = sorted(data, key=lambda x: x["re_total"], reverse=True) + else: + data = sorted(data, key=lambda x: x["re_total"]) + res = { 'data': data, 'total': total diff --git a/class_v2/database_v2.py b/class_v2/database_v2.py index 31c7dfbd..0564c9fa 100644 --- a/class_v2/database_v2.py +++ b/class_v2/database_v2.py @@ -3632,6 +3632,8 @@ SetLink except Exception as ex: public.print_log("error info: {}".format(ex)) return public.return_message(-1, 0, str(ex)) + if get.access == "": + return public.success_v2("Set successfully!") username = get.username host = get.host diff --git a/class_v2/files_v2.py b/class_v2/files_v2.py index 9fcb174b..e13f6083 100644 --- a/class_v2/files_v2.py +++ b/class_v2/files_v2.py @@ -2342,7 +2342,7 @@ session.save_handler = files'''.format(path, sess_path, sess_path) fp.close() if isConf != -1: - isError = public.checkWebConfig() + isError = public.checkWebConfig(path=get.path) if isError != True: public.ExecShell('\\cp -a /tmp/backup.conf ' + get.path) return public.return_message(-1, 0, 'ERROR:
' + isError.replace("\n", diff --git a/class_v2/firewallModelV2/comModel.py b/class_v2/firewallModelV2/comModel.py index dc53077e..43d4d4eb 100644 --- a/class_v2/firewallModelV2/comModel.py +++ b/class_v2/firewallModelV2/comModel.py @@ -188,7 +188,7 @@ class main(Base): data['ping'] = isPing - cache.set(cache_key, data, 3600) + cache.set(cache_key, data, 10) return public.success_v2(data) # 2024/3/26 下午 3:40 获取防火墙状态 @@ -219,6 +219,19 @@ class main(Base): def check_iptables_env(self, firewall_status): if firewall_status: if not os.path.exists('/etc/systemd/system/BT-FirewallServices.service'): + # 判断 数据库是否有数据 如果没数据直接初始化(新安装面板场景) + if public.M('firewall_country').count() == 0 and \ + public.M('firewall_ip').count() == 0 and \ + public.M('firewall_malicious_ip').count() == 0 and \ + public.M('firewall_forward').count() == 0: + + exec_shell = '(' + if not os.path.exists('/usr/sbin/ipset'): + exec_shell = exec_shell + '{} install ipset -y;'.format(public.get_sys_install_bin()) + exec_shell = exec_shell + 'sh {panel_path}/script/init_firewall.sh)'.format( + panel_path=public.get_panel_path()) + public.ExecShell(exec_shell) + return {'status': True, 'msg': 'install.'} return {'status': False, 'msg': public.lang('Firewall not initialised.')} elif public.ExecShell("iptables -C INPUT -j IN_BT")[1] != '': #丢失iptable链 需要重新创建 exec_shell = 'sh {}/script/init_firewall.sh'.format(public.get_panel_path()) @@ -496,7 +509,7 @@ class main(Base): sort_data = sorted(list_port, key=lambda x: x['addtime'], reverse=True) if get.query == "": - cache.set(cache_key, sort_data, 86400) + cache.set(cache_key, sort_data, 10) if get.export == "1": get.row = len(sort_data) return self.return_page(sort_data, get) @@ -577,7 +590,7 @@ class main(Base): sort_data = sorted(list_ip, key=lambda x: x['addtime'], reverse=True) if get.query == "": - cache.set(cache_key, sort_data, 86400) + cache.set(cache_key, sort_data, 10) else: #缓存流程 new_list = [] sort_data = data @@ -634,7 +647,9 @@ class main(Base): for i in range(len(rule_db)): if (rule_db[i]['T_Address'] == list_forward[j]['T_Address'] and rule_db[i]['S_Port'] == list_forward[j]['S_Port'] and - rule_db[i]['T_Port'] == list_forward[j]['T_Port']): + rule_db[i]['T_Port'] == list_forward[j]['T_Port'] and + rule_db[i]['Protocol'].upper() == list_forward[j]['Protocol'].upper() + ): list_forward[j]['id'] = rule_db[i]['id'] list_forward[j]['brief'] = rule_db[i]['brief'] list_forward[j]['addtime'] = rule_db[i]['addtime'] @@ -653,7 +668,7 @@ class main(Base): sort_data = sorted(list_forward, key=lambda x: x['addtime'], reverse=True) if get.query == "": - cache.set(cache_key, sort_data, 86400) + cache.set(cache_key, sort_data, 10) return self.return_page(sort_data, get) @@ -1667,7 +1682,18 @@ class main(Base): if get.operation == "add" and not self.check_ip_exist(get): return public.fail_v2("Target address {} already exists, please don't add it repeatedly".format(get.address)) + if get.strategy == "drop": + #读取封禁列表 + ip_rules_file = "data/ssh_deny_ip_rules.json" + try: + ip_rules = json.loads(public.readFile(ip_rules_file)) + except Exception: + ip_rules = [] + if get.address in ip_rules: + #移除封禁列表 + ip_rules.remove(get.address) + public.writeFile(ip_rules_file, json.dumps(ip_rules)) self.set_ip_db(get) info = { diff --git a/class_v2/git_tools.py b/class_v2/git_tools.py index de670a53..a9503296 100644 --- a/class_v2/git_tools.py +++ b/class_v2/git_tools.py @@ -10,7 +10,7 @@ I8MGJUwtjfcKc5w4E0SmjHtl5KRuv0WI7NyW3SlEwCrZmcmaREiC99KS4CzwW5Su330khbLdQaeuAWr4 I8MGJUwtjfcKc5w4E0SmjHwLsErBQ84ek459TV1n0Iir/P4mdpfwDI34s6+8CBN0 oJmRip7wPjMZoK6DWTZ5QhLdKXx15rHOjo4rZMWBQ9I= I8MGJUwtjfcKc5w4E0SmjHwLsErBQ84ek459TV1n0Iir/P4mdpfwDI34s6+8CBN0 -iOUsBGgOHEqzdAdQgfAp4hCVMJQVjPNjfYh3Thqf4L0= +iOUsBGgOHEqzdAdQgfAp4j3wnUjRiYKRNCV/AJLY4Tq9tI2MtVClijOZgnnqJPgu xR6fRUqpQVYbqROwFmCXIfD94AH3xLqlvi5n8KFgDh0= rpy88ff5JnVuJqXSNlYf+CQ4VKHExseR2LosMAdYEeHGNm80vDZH+2U6FEAnuapk 1u+XjG/2+GSQRv6EzCaWRQ== @@ -25,6 +25,7 @@ yqw5QtaWyzGezg4Vccp78hNuN8c4A4f2x6ZMk9M/JzWnscQJA6r9+6aeeKV8xz1cLNB998rd1zdMpqgZ wgR07xfoapmx6eEnFHXXYrIeMJaP3Lg2M3zaGXD/L9jMR9SdCGXoRS1F21qr5fOVNlgHsX0gt4mSOUDRyKmUMg== NqhMbY8+EQI8zhTG6Zh2I8nMS5vRNHUMfJAXdyssu1hox3wWClqERYe6a3luBz4g1xBBZxQroZnqrc2c4DwuiMVOTh//qm/oXnR8qGkOQGc= JPjq3Houak+XBY2X3mfPih2FHmONgqzX9O00TZ8MFR5faucpdT6vwZaHhDKa5ftmPftegsV3FYF2FuOirK6/+p8L6Z8IU64lAu4F9r5ak2g= +RC8IWtD8oQ+ISFVqRg4bKXwaEei3erxu1ldTslEG/Mw= 1u+XjG/2+GSQRv6EzCaWRQ== u7MbwlTBVqkMsjxHUNDh1S3AtVDKKgYYY0SNjdvsf2U= TDYxsJRe7KQ7HxQ3mZJhBr6hbspFmrEvuwCAFDZ5Zfut6f7Q3UVX8VDL5JTAfE7v @@ -38,6 +39,71 @@ wElA3opDQ52PWGn7tf+g0nupKcf+Z6tV1vCO+9x9O5hV9+hKwfbQy7XPIoyaFFVwnrBsS+qKkqNokQLD faP3BDqznvpMXEZXXpQPipRSKs6q9mRJFQ/1tI9lMwRfzY9viJfBSDSskYTFxHi0 96orka/uERLyRst14azQwnND1LaAMeJ6hPF2g6RNEz4508AjLEo5hLQ8uuK/gOvz1WsnHdWp9xzYIVXG5Wr9dA== 1u+XjG/2+GSQRv6EzCaWRQ== +pjgHhhCDVoNH2VAZFdItGRxLNJWqMBYpsLq4fbsn4nK3C/tgKgZPNG0ysJUXHP1cze94/ZeQ7+eXjO+3Gqa5FA== +W1M23wU8a/L8M7rT6WndBuULsUoYSxTNecr2IQVUsN4= +FdiCS85SRBQfnSjMA8tkZbHZZT2xZv+S1BUUnmnW7ORKxF2eI5LuHB0D7Ml788f5Sr9pER9MrEEYY62f7EjmIg== +wgR07xfoapmx6eEnFHXXYo4se8cEG3Kpe+KryARC+58c1jICgdZ/yfiiPJOB8osn +32pdC9DD05OE2l0oXazDFN6Jj6uUh6PYld1P65Mxgl5YmLr+nz4OLLDJquMry7j4Qfr9dFQMqmUdYBplTnT27A== +VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6HkkA9Gasdp6akd3ncwf5DBjdnbLZ07FuyqKCrMm4OFz2nnZAbTXX4KdIgjxX9S5PLtAx/19Fi+amohX1GFV4I51zlb038OK4a/AdshMxk5nbslsOcLY0B37bWRHbTn+v0GrMATLBzVKKtjW3FoqFRuub +32pdC9DD05OE2l0oXazDFN6Jj6uUh6PYld1P65Mxgl58n17bNWzRY5PkUbe2LCEzF4HlLmCuvwhvO85ELeYyObR16yZKpm7C1HluBpzgXKk= +VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkkf//0Dq193Je5Ar1mJZ1QyQJMBlGup8pvCzZdfAzjPnk4SsK6/F3ucGaxwTFiPS27bxG75cYSj255CCjGflbtzZWGMrweugi38m6w62aJWkrqCedWYAhH80ahUlGZjS4rjyw216+PQGojvsgULr3zT/5HgvMFP0nf/pLi7hL+Kgqt52iyubdDSqVQuFKd9Vr3r5Jnr8eWgLj1iwqlOFSZH +32pdC9DD05OE2l0oXazDFN6Jj6uUh6PYld1P65Mxgl58n17bNWzRY5PkUbe2LCEz5NzXgtflsnAELRzJ79eIwDmBwKzP5qxi5Zwigbn1np3NQHYi4R8tkYpCIg9yVzmh +1u+XjG/2+GSQRv6EzCaWRQ== +xWoGNWjKGPfI4gq8aHoTfMrdRww2g57Uk9s2J3TIApI9D/6wlZz7lxgOKkpaPbb/ +1u+XjG/2+GSQRv6EzCaWRQ== +DhGOnzaLoe/mRiWv/+GmGNIvMsjYjoxtlmZBjF0cj98= +w44z1BB/jW42msqlWJyJTD09OOcK07btaT8PJhnjnOryS2Q8ElvZwkv2lgSMxq2xAHSghALT3fvZyw8fV/hG4VZDVJ6zF1MuLa/umB4seBw= +Z8UsPk1Q7HtwjRd4g01ryw== +FlUnQeyvweluWKK167CMY/1898HoZDsoSMhh5HevAHtJdDWjdYAMS8GiHHoi54E/7Qf+jhnxzZ4QplXiRZ4hb24FlayYDyggEy8R7QKCXJlKpg8Y0r+Pz7bppoOI3+ELUWInObwimhH5oznSLJLp/VyuixXZDSw3zv1iFjjxNBk= +jndZyCadN/M4C30ykyvm5kIu/dHCuKiNVLlG6kXvpujNlldwjKix5+qNeht1DBBb +jndZyCadN/M4C30ykyvm5iIdbL8ALXXJVbRgtTMyC/ZW0q4ZJ4NzA6E7Cl5bpTFLL5FjJhcuIjROJEBj3HwxF9urI6fs9uEoYd6TfHmxqQ7K9H124aWDG0b+2/6u1nAc +Ys4bozvJBgtB7q16qcvtBzz4IFFRP2RNLBsgRBsrH4s= +Z8UsPk1Q7HtwjRd4g01ryw== +b4OJVZe8QyIpjuTpKXDL9A== +zYuCrpMrZGCN996UA1dFfLTtvznfZRqXzlXQfjKHrMfRIMEOUKi0BWmI2sWYdaIuzYqSQaRbQFAZiyv8eRFUGg== +1V2v8QerKOmubvSxgB4eTBSbsw+EoRzCH6VFK4pshJvt0U0yXeIKS4oUjrIqBaW+MXSilSMCRcz7UZzNXdFeoHKvUDlEKKKr6lE62NcG0GQ= +VmVrGQo2zRokW/ZuO9bN65x96E+pC4TupOHurj34PBY= +1V2v8QerKOmubvSxgB4eTBSbsw+EoRzCH6VFK4pshJtVhQUtC0aIqQ78n1HrownqBJXx7MEiDT+a/vby3Fcs/feReb/ylQuVRK8XBX/BzHY= +VmVrGQo2zRokW/ZuO9bN65x96E+pC4TupOHurj34PBY= +1V2v8QerKOmubvSxgB4eTDZ3EKvNuzXfugw4d0uR/p+6M1f2C8CROjn6JGQT/KF2aJ+FRgywFZKWkBCO4/9XkkGAREwA1DuG32ZiyD0upayIurjcklS0P33dK7Zf+TmZNrW4yJ5wqaohHeYn2Oy4Lw== +VmVrGQo2zRokW/ZuO9bN65x96E+pC4TupOHurj34PBY= +1u+XjG/2+GSQRv6EzCaWRQ== +1Z3d1s7PrIvVtiGIHGqo9oB5LSxH1wcx5s70MHzqJI/YzrtS/QczNmU4AGgLGQuUUish1rltPMZcah6p/tGpKA== +DqFx3Rpza5o4vicCtXOicPqdH0sFd/mEXlULjZrcZ2Ax0SyHndjTPDqbFdXaXa5f +wlLHv6kT3Q/RmtMBN4nDAXAgmEpTNKhl/Ku7CTXRbmEhL6UDrTaPqV3PfID5zuyK +VmVrGQo2zRokW/ZuO9bN65EInAISNt4CCvgWZgEky7IvP7P1PhSZsWdnqeLeXltI +VmVrGQo2zRokW/ZuO9bN6zDOoO18tt3IKW1SN0KZVkdFCSGlAvUMczGussvx0S/O +VmVrGQo2zRokW/ZuO9bN62LyPhrpuimLthZ8SvJqaQtsUXE0U78REvwEn7wqx0UAEMYfppKAj90ayC8ks/yZcQ== +VmVrGQo2zRokW/ZuO9bN62M5JKBMB2wbaGVtIztpSbY= +VmVrGQo2zRokW/ZuO9bN63D18jIE8KTcNlp8G6M2Tt4iQnt9yXrb+2qex6qrhrFMXq2HOcwUQkGY/uXaotwZNhbjuqmpwIWxlE3j10r0hYn3eeJFDHYu0bfe3S0i1OlNqhu1/ijZwfcBqakBEwHPUw== +VmVrGQo2zRokW/ZuO9bN62AZzSY5SKY9KaM8xfTuWH0o7Ju0QMOJcloFjr5XacsGkCFcOoyTcRJNIlw7zOSsOg== +VmVrGQo2zRokW/ZuO9bN6+Lanj3qrPBboaRwkh+fpX8= +VmVrGQo2zRokW/ZuO9bN6x+GkWSrrprQTmUCd7+H5booS08mL+hZLHY3KdgBqROUSq53IQMCCvbW7gG2MopqkQ== +VmVrGQo2zRokW/ZuO9bN6w8bwDqNEQWd9UEqTXTgiMQ= +VmVrGQo2zRokW/ZuO9bN68UmqmTz7waOKQ27hlhBpr0= +VmVrGQo2zRokW/ZuO9bN60cPNN1buZ3tNVsF10zNMvPX9FyMeZE4JKcaMRhzPHYMZRajBN0Kxor4+ssX6u8hmg== +1u+XjG/2+GSQRv6EzCaWRQ== +Y8HkLTdjJQjgCEIw2B+EMbThz1dSgQbNhE9T8hzoKP2M8OxEoOzMqwYhsv1J5Oelr+46B9sR172OLh3kC4hi9Do3YOZ7BLyP3HshOfKS7Afs5bAx5Hwr3oKobegHcG58 +1u+XjG/2+GSQRv6EzCaWRQ== +ZrEVxhe9z77KmfHc7tAjqc/7sKLe/39blideAHqyza6dTRhfBTk2uMqRCS4mxFm4 +xWoGNWjKGPfI4gq8aHoTfJyqLHabBD1iJSIRtS+vVP/qK9U4dwCG9tm/2cEcotpqWqk7/Pxb9CiKiFSoGCHZtg== +1u+XjG/2+GSQRv6EzCaWRQ== +wlLHv6kT3Q/RmtMBN4nDAXAgmEpTNKhl/Ku7CTXRbmEhL6UDrTaPqV3PfID5zuyK +VmVrGQo2zRokW/ZuO9bN61bklGyHCdRDwhzdKaT1wWw= +VmVrGQo2zRokW/ZuO9bN671TnOGd5kEaR2OhRIJWyigNpGPqHwY9fl/njBrgL7pyuSUcg2/a5FEP2vpkgV+H7W1SmDBAS7oIYnjSvzGxOT++RBwVTRk9G0lFPSH2HT32 +VmVrGQo2zRokW/ZuO9bN671TnOGd5kEaR2OhRIJWyij+zdfqr8/AhFQvbnbcDvR5Ya9T87QNEWfsj4x6S/9hwSSK299qPhb8n2iTK9zSnVw= +VmVrGQo2zRokW/ZuO9bN65kxhnzq0IrXe3PB5ojQRp8xZ3llMSTGK5ZYLywGvuGxWrb2L/WzloSxoKWlz6jI+lveb28SNkQ96NXs7SfPnNg= +VmVrGQo2zRokW/ZuO9bN671TnOGd5kEaR2OhRIJWyihlhnhscte6BsO5YpGniiDB5fZT+ozId4eDAMSWoxJp+eNSFRWVna7XzGzcYSQHfzo= +VmVrGQo2zRokW/ZuO9bN6/yXFVJTQr6/Lcq2wD6EhXo= +1u+XjG/2+GSQRv6EzCaWRQ== +VmVrGQo2zRokW/ZuO9bN6wH0gJ4Fm/bzVDHZiAKpZWHNJ9UT+lq89xmQXenMglOi +VmVrGQo2zRokW/ZuO9bN6/vjIZW5XooRPjM3gjxwVrxUzre7U3XJiuTjyzAskHJx +VmVrGQo2zRokW/ZuO9bN6w6fwsVPVYGoAfq23/Hs6Kv9faLxUyAfyjq9+YsUsEOi7C73/9MO626Di672AUUxvw== +1u+XjG/2+GSQRv6EzCaWRQ== +L0eUthVnpkGsmKFAX6d+uMfCKxbeZE5XF/T3qfhxdVg= +A50UO/kAI17YP7MCbTvBkFQ/jf5eMs11PzZj1m3IBsQ= +L0eUthVnpkGsmKFAX6d+uKdLEGlEXm+o7O9zcmHr26U= +1u+XjG/2+GSQRv6EzCaWRQ== UHareEuCnf4j7DI89P3gp6EfM86/mJ28h6DWNjj0WMs= Eg9bMGC46p86xWzMkaze6actMoCRwmzw5nK3AnhFP5ezH9B8znPqhD6wSe01FQwl eLcpLeV/+9uVlQTwkhqIj0nRm5Ki5hLhTMVpzQvu144rT6aS09+2X/WWPn7AuNAM @@ -151,9 +217,6 @@ EFBFgJDcvthaVbYohI7UmjbgDbryepRW+5ziRnvDyKv+ZUv+rfTA3uE/kY80Q+zW O3CUgrw2GJfB+mDjH5+NdlLfWzGGcVjxsShvfey0MCzJNveaJootUcZMvsCBsekd VmVrGQo2zRokW/ZuO9bN6zM/X2hHBCd+n2OGnnATmrSuY4P/AlnqUWfNJ3Nv+yym+23XOt/VtAFjI4+uaZ37LaB5rRm5EX66q73htuB41qv/eddN7PQ2NhhKOqPEbTC/2Umuf0lVEh5txUWbl5nezMmeb8jIonXvv+BoJW2+Yv0HISjIF5xZ3hbKAHQGvgK0 1u+XjG/2+GSQRv6EzCaWRQ== -po4gDbkGtZGvsVkqlQC6ZtzW2KGUWUfbRJtGZkgFsfI= -bjpI32qzKze0nfrRYYQXm52fISpL2LoprdZaLiVsZflnfTWfR7poMOL9/KmAbMqN -f6i+lsi35nURDz6EJdx9zHkEwXP+oTAogJyWuMcbY+ZZ6yMs+3M1VW68XyQtgqTEszR2+utJag/6ZEkEyXREIDjG1OPGbAYVC8u9gu898hMVAxDbCuY0DTUWKAe+VUFpfecUyxUWezW5mIRnu5Cc2seM8cvptglcz1qt7cMsAJQJn64dDiaM3LEsFvITk8cZuPCPDovOlPHiBqQgsW3FCQ== 1u+XjG/2+GSQRv6EzCaWRQ== yx4jtgR9zogTFauTn1AZ83+Im1UVzMyIsn3AZxAdE1A= XrDYKvoK/BzpXJ6MTPsBnj1aMxMC3QxgHZeYsjQLKZU= @@ -169,21 +232,14 @@ xWoGNWjKGPfI4gq8aHoTfOAhJ9RsP3gx+Kkvlbii3AcFOwm5GZOC0ugkWuFAb1m9S092QPAppuL0hfuE J1UGlXkKhKXD36OrXXhN8O09NfoDAnduZvxJfECpea86hKeHbTljbnFWrv15EqBi6ktLnOd80BqnjzMxmX8LNsALedR8xz6mlE04jdkyPW2iKLUe0y2GBZtUl20enT79 VmVrGQo2zRokW/ZuO9bN63/+88H66P6TYX9U+MJaZneDW2Q0crllAh6+11tfppwy 1u+XjG/2+GSQRv6EzCaWRQ== -f6qFdnNudmV1tQ3gCzLqza8AIAcv2Ge5W9LRV4dCfpM= -e5BuMOd4b1PCrKxUNUXSv+OcwD1rls+LizuAa+jLXIlK2fONKo62fgpGqenVJzy/TfS7oPAvGqZ1tcaFCApNIGog16TXNL+3CEwrI89iYivVNovMk0vyK9i8XFr8wj2c -2EfdZawMIsiz5cxkigbzGmcuR0P9+nkVxvBBOCgHGQ47mW4iPN0aiEmdZv8z+QJ3PJ1Xn3Ar7cJpFyh8wWrD7a14tDYVUm6Ii1nYIvtT31REVP25vql+VVzIytJsGepJPLT7Wyaib50Wj5LVKPxS7w== -Vn/F9tGazMZc2e1bR4ro2tDnCtiZn68qd64P40dudmBwmRacw2JsHGwN3huUCrd2 -Yp2CN00+Kg3MK/CvbmvZdZ75JYqLGf5be7k38OP0/BgzMOqfOsB1uF1HrLUyHu96kxOt0yBQF6GzD+CT953mAMjOpBwGNAe5vVrnzfDAqnM= -uZ4WptKDDVprOsDtb46jIplwuOAYB1Erf/I8DzRHEMc= -Yp2CN00+Kg3MK/CvbmvZdXj6ni3fstL5Hb8bv6m5SPcBUue4WVcfQFItZvRmYGgr/J9z6TFnr3fg7rHVEGsadQ== -JEQphHHb4fhyvivSKkGI0bZpjpfBMuPKclS/+r5ra8o= -mlOjw/YIbKSF9C2u0mt01wM/tt66t3qqQuKxKWIu1AE3+/rq4G9Eol7NRzgOPwxj -Yp2CN00+Kg3MK/CvbmvZdcQUXGMP9+jGtukgv50w/hg= -Yp2CN00+Kg3MK/CvbmvZdZ75JYqLGf5be7k38OP0/BgzMOqfOsB1uF1HrLUyHu96A2GyT/CQdsJNtLRFQFKOGmuLfdu5vcJGNZT6S3ZdpFA= -1u+XjG/2+GSQRv6EzCaWRQ== nXHLJs+jc9UGwRbqbBpdlv7RIwv7OTNY8ZNgm6Q8rv4= 32pdC9DD05OE2l0oXazDFKNPx6ZKw6mVkHhc9cys9JCYmrBrjpV8MjXMrP5xvSJWV4DCBiE8hUWlrry5GIJHsA== -32pdC9DD05OE2l0oXazDFGCAOv2jQbVvvltdcsVmmxJsbnbYfA/HDWZTG+IPqLAj +1u+XjG/2+GSQRv6EzCaWRQ== +CU51y3DKNJot7qy7c7KKwEIjBvdrhknGgoXMGkry6+isTDlITNSf9VcrQ3/fRKq0 +QqanJPg7wDt+KU+rOzQdHPhfsDZYJ2w/okNGgOPc0BAshvRRcQHYZUqyaHu8Ql1N +QqanJPg7wDt+KU+rOzQdHO6rJDqNPbHBbpL9gA3aTH5h6+lJwElRgcHVK7LuKEZL +QqanJPg7wDt+KU+rOzQdHGCvE7dtg+DA1vaHOke2oUMavKrNg6s7Tse5PNGRQjpGpVLwxgGkltimZuFB1bAcLg== +xWoGNWjKGPfI4gq8aHoTfO2qok4PugNiRxu5BawYMC55EVZ4y4vsnD+TuT4OHb6Z0+7txKiRlj+zWiZgkOb1AQnKCqtJG4QQ5FM6LaHghbM9rc5qeonYJkRzFZutBua49VVmjzdGlAEDdgEsdN9cwg== 1u+XjG/2+GSQRv6EzCaWRQ== 8i88MKADknh6ve+bU8Ezbzk5fjilgrwbCJkZMaCHp427cay1Q0tiNSjEkRZY1N+b xWoGNWjKGPfI4gq8aHoTfLGwcK6lSi0s7PJ/4qXBduIfw3TrbSUOJov6tReWxobLZ/FtjlES23Uh1Z4EBFUdmoU/So+QQZIVsAFYOpdm81HOZdbEs3A33H0lPCFaBLqjhwFeoSqRWskbTettcHEhSvCIod7uq7SIJ8F4ZZYD3fo= @@ -528,11 +584,18 @@ jBFbuFLWzVvzxJ8SXKI0Rq5KSA4pa6zfCMDu0lTzmyRLcv04XT7GTjBMkGpSWKCmDe6bPzpS+fJawokH tM+wBKzQAjsCT1cieAkzGJKlVzEduFYv2kgDi7xw29Oil073Z77k23nsVceF9x5w 1u+XjG/2+GSQRv6EzCaWRQ== yBZOkXnzauCHBf6JZDcSuQfrsfM9iBtRU9cVs6YP4tU= +jg7eBeIur3TCOhQ/dZ75zDaDc8iOcT8mC95I0oq/3+A= o3kxTO4RwuXO7GZ9wpXG+QxVUt0SnAgx/W4T5QbH9vVJJBZT2Jf5iQMwtcVaojrJ D57kV+ftjbtB8HPaHfRK48m8vl2z80xCMPhc7IM3FgBKfrvof/Q1bXqWN3xzjdck VmVrGQo2zRokW/ZuO9bN6/stb0OaAgDdvGMCXk/bABM= -xWoGNWjKGPfI4gq8aHoTfO2qok4PugNiRxu5BawYMC55EVZ4y4vsnD+TuT4OHb6Z0+7txKiRlj+zWiZgkOb1AQnKCqtJG4QQ5FM6LaHghbNRqafuIACJqy1+olDhaOSB -Z3TTnRjaf+68c4mQaPk6wsAMogyPW4+B92JMBTJnSFUUI2SEIDWLRdrH3kRYWX9NRqVSxEq6nCdD5szjx6Lkog== +1u+XjG/2+GSQRv6EzCaWRQ== +P1bBdERejTBi3ynjwlj7j8OOQL9S3NwXCHKmvPdKCclwTsZbWc6pVP8yy7jvqJ7tl31R2YxzNuQBsTxhKyWcdKmUYRwi96hlOKniHB3zQI1LT+S7zkiqZudM/OMXt4xIIeWadQiGxTYea5Ef7LZong== +QqanJPg7wDt+KU+rOzQdHPhfsDZYJ2w/okNGgOPc0BAshvRRcQHYZUqyaHu8Ql1N +QqanJPg7wDt+KU+rOzQdHO6rJDqNPbHBbpL9gA3aTH5h6+lJwElRgcHVK7LuKEZL +QqanJPg7wDt+KU+rOzQdHGCvE7dtg+DA1vaHOke2oUMavKrNg6s7Tse5PNGRQjpGpVLwxgGkltimZuFB1bAcLg== +1u+XjG/2+GSQRv6EzCaWRQ== +xWoGNWjKGPfI4gq8aHoTfO2qok4PugNiRxu5BawYMC55EVZ4y4vsnD+TuT4OHb6Z0+7txKiRlj+zWiZgkOb1AQnKCqtJG4QQ5FM6LaHghbM9rc5qeonYJkRzFZutBua49VVmjzdGlAEDdgEsdN9cwg== +Z3TTnRjaf+68c4mQaPk6wsAMogyPW4+B92JMBTJnSFUUI2SEIDWLRdrH3kRYWX9Nfs/etp3pB0EZdO8f/ajrYOMaDrfR+K/XeWHjXeLsBD8= czKRuF/oikvnUOrcx2+OjSgJtFGGzeOSM0uZBYq7+nG/FSIHKI5hxWDI8+Om3HrIkyr1/DyCiMLxWE+9Wb/Lfg== 1u+XjG/2+GSQRv6EzCaWRQ== OoTjg/m6SCtc2tiWjbe6jyavt1+fzt+fCeYWllW3h4A= @@ -541,7 +604,8 @@ aLwgkGEOIdbi1NNBuhnqa9ynSKnCwErnKnBwuLKs2jRp8bFeLFHCb+U0yYRqCLmL39+dZ59rYz3GK9cM WvyWJj1hrCEXxqZLjwynLM8XOxD+gY/WxipIf6pOJrUl1YwB3BRJeuXhWf2CaRUpLLUd0wOVosHi8incH3mGZjfP7W8kH8y//svM4L7Y5UCpWZ/v6AGzwJN9REprP3IwpBmbeu3SzFw7TNctqR+4g0rtZbORLCSTzaQwU6Aoo0g= ciHIKg4HGsBKmwIex5HaLQQFtmPIOQtJDE0qpXPybL0= 744+BgzK3LVsSzMxY5sSrw== -I7Hu5Qsrk+SRs5D2RQ8ynHloYg8G1sr80DUgj+aIyoC7vAoq1NTxylW/fCj9W4Y0MPxKfkZaSu5RdLOUsg8xrg== +1u+XjG/2+GSQRv6EzCaWRQ== +I7Hu5Qsrk+SRs5D2RQ8ynHloYg8G1sr80DUgj+aIyoC7vAoq1NTxylW/fCj9W4Y0ZKpkZr0O1NwbwR6NPvkpcna5BOAiKXsNqtQQ+WT+L/A= CGtXn+NIKmFYVmV5CSdrUFMZoynl6EhrtrAfZj9Zv2AWVgDBy5Ca+QQ3vCPgWSX5 uHWmSQqlkf1t9WaL7fJ2JbSC/oRZ9uZCNHZnlB7XLAZXJXAjNB+3PNBTy1W4vf2L 1u+XjG/2+GSQRv6EzCaWRQ== @@ -555,8 +619,10 @@ aDrqk5T4YrZRF3nbGXehgHgCACebl/10/W+0uADBmTtV7txx1Dl7TFPWUSZADWC/ LpF5Nv1xS9lXjkSGXxhRv5kBqhKfT+kKDGgvrCq/fOg8WDoOI5CffAWGhucX45Mk 84Vymj90Wzn5yYuvz1pUuMy7lr/u1aBIBuI8iBW/p2o= VmVrGQo2zRokW/ZuO9bN69GT8jbGo6G/oFkQMvKvtlPyE7qF+sjPN/2Ihdi/hgh70shhiwUgq1rK9oAgFyFPTA== -VmVrGQo2zRokW/ZuO9bN67wbge5UUNA1t/X2AVGsHS7bL6iKvvEBvOhu8hxd0wTrpGLrJPglpMdwiqjDRjlxew== -1u+XjG/2+GSQRv6EzCaWRQ== +VmVrGQo2zRokW/ZuO9bN6wn28ahOS5Tv3YmGnRs/eFalWzcPoqTVst0iXA65RJyu +VmVrGQo2zRokW/ZuO9bN6+1J8qmg/BdJBhQ6pm3ctv1vvwLS9QNdBFapuIN74KfDuYMn7iWrdMMEpVGZWmVW0g== +VmVrGQo2zRokW/ZuO9bN6wPDCdzqGra1DbPf4Swvz9o= +VmVrGQo2zRokW/ZuO9bN67wbge5UUNA1t/X2AVGsHS4CqjGLYk17n0btVWreE7jN0MYeNjt9fvwy+9hyJnHcXA== auZi0vV8Th1M5xUz1rxru/ig3NQYdeexqe43ltrjbnc= 1u+XjG/2+GSQRv6EzCaWRQ== rJq3IyL4WHj3ANQUjfoAA1EqNx7UF3kPslP1/SXMGiM= @@ -1046,6 +1112,19 @@ VmVrGQo2zRokW/ZuO9bN62iqLP50z+k0NaPdpF0sZJtg+0etVhzrF7Si//OhXW3sdQVR4r4Jef1ZUbOR 1u+XjG/2+GSQRv6EzCaWRQ== guSZID0bFQuDFoWO2uxAJpl8qpbGgxm9x6/geK4kAOM= 1u+XjG/2+GSQRv6EzCaWRQ== +1u+XjG/2+GSQRv6EzCaWRQ== +8CfPvs0r3seFzZqy/qWwovbqrgiFf9G46sDC5gGCbuzSCFqV+wQQzskJMWPs5+avxK+UplOOFo+sPYWW6T8KKQ== +CXE6yYC1FySregq1+GJzTnKEZ1wfjt2EPGwOSAgT5VM= +1u+XjG/2+GSQRv6EzCaWRQ== +ooY0KCbFm/vXqHKpQAkspt4jYNimWiRu+zBkdyV/rjvEEPgPfbfJpXqVVcvksIQ/ +1u+XjG/2+GSQRv6EzCaWRQ== +tHz0aRebX9i8AbCMccCKRFg7xRKDpLjw5cUxl4u9/iw= +xF/vKN+xQbwK2H7vBii2bWHmQr8vAF+9IrZD6zI80t4ktaXxG+gE3V+fjibeK8WW +1u+XjG/2+GSQRv6EzCaWRQ== +1u+XjG/2+GSQRv6EzCaWRQ== +8CfPvs0r3seFzZqy/qWwovbqrgiFf9G46sDC5gGCbuygyQNeh3hO67nnDOHJoDjacXpkjVHt2O0oyCu39p8jyg== +1u+XjG/2+GSQRv6EzCaWRQ== +1u+XjG/2+GSQRv6EzCaWRQ== cFjvq7khV9Wwxu5Xsu1OwOt2ir0l/tIxkEGXdEo/xk+ubKo5v4Si4EWQUz/EEtObKm+Y6yISfX4/mNDvvvA0yQ== YB7OeM849hUV1qSXoekJqTxPrNvhwb+aMnuCLIwLkGs1HowlDdRct5TSGMuCsKGrE0Mv4TyhndKWXFesDqXEBw== CAhn8dRUItEbEErp4w+lX6xlADbgGWV57Q31nGIhIgd6R8SmzXl0DH6Gc1uW+sajAOA3J4/bC75M/8Q39N4Ifw== @@ -1059,11 +1138,3 @@ lt0ONPc5ulpyg8e5cXCrlWe52Y91ZZ32+aCGKOQZZI8lXFb1aN5V92iRPhaFlCKZzR66Swf7wCZmWRuR wTaMsuvTBcvSVbSbRa0pNUA5aImc5OyYTdUsRpTGESRgF0WEqdvdbF54PbEc8iIh CAhn8dRUItEbEErp4w+lXzc+Prj3x3sc/i+3uEQFbyIeZWN6MUHM3z79Tit4hfIxeFvags4LXu4/K3hRjqwDsQ== 1u+XjG/2+GSQRv6EzCaWRQ== -ooY0KCbFm/vXqHKpQAkspv2GUpXHdl/ezcTghmsllng= -1u+XjG/2+GSQRv6EzCaWRQ== -ooY0KCbFm/vXqHKpQAkspt4jYNimWiRu+zBkdyV/rjvEEPgPfbfJpXqVVcvksIQ/ -1u+XjG/2+GSQRv6EzCaWRQ== -tHz0aRebX9i8AbCMccCKRFg7xRKDpLjw5cUxl4u9/iw= -AnS4WlQEZYbtLPgfDV/iDg== -1u+XjG/2+GSQRv6EzCaWRQ== -1u+XjG/2+GSQRv6EzCaWRQ== diff --git a/class_v2/log_analysis_v2.py b/class_v2/log_analysis_v2.py index 5d84bcd1..3bd8170e 100644 --- a/class_v2/log_analysis_v2.py +++ b/class_v2/log_analysis_v2.py @@ -264,10 +264,10 @@ echo "[*] shut down" result['start_time']=start_time else: result['time'] = "0" - result['start_time'] = "2022/2/22 22:22:22" + result['start_time'] = "None" if 'time' not in result: result['time'] = "0" - result['start_time'] = "2022/2/22 22:22:22" + result['start_time'] = "None" result['xss'] = self.get_log_count(speed + 'xss.log') result['sql'] = self.get_log_count(speed + 'sql.log') result['san'] = self.get_log_count(speed + 'san.log') diff --git a/class_v2/monitorModelV2/process_managementModel.py b/class_v2/monitorModelV2/process_managementModel.py index 8b2e42df..ad622be5 100644 --- a/class_v2/monitorModelV2/process_managementModel.py +++ b/class_v2/monitorModelV2/process_managementModel.py @@ -1,200 +1,169 @@ -piG6BsMF31u4R4iA6R4SRA== dTLQ8Wr3wPn7w6pte1B1YA== -DRVOWA8p3Hg+UVFB+ijoeJiQKS/oQs+5utRgqpiaBn4= -SbQQ5SqO9QrBwZ9ObpMYLw== -aB1r/Hl41eeDYHjvKNsDN+fwXnHZ5cKnjNQNkvt811Q= wiYVtfO/yzajW1Tv5z7hyA== +SbQQ5SqO9QrBwZ9ObpMYLw== +1u+XjG/2+GSQRv6EzCaWRQ== bbgfjwWjzPNOxnsxTb5hzQ== 1u+XjG/2+GSQRv6EzCaWRQ== XIfdJ79nObMM+vyAmKbTmw== DjrnV2ugcXpCQCRtr1AhjOqKcFaCI68w9rOW7RONBIZ5ibaGH1F5fN1ozytPQ6he -ic+a3PsSrb0KPm4AsF9vXtHZSKiYneN9Rh+9RnSNB9WK7HTAVn7HvWa3LZoeRP2P 1u+XjG/2+GSQRv6EzCaWRQ== 1u+XjG/2+GSQRv6EzCaWRQ== GC18aI/weGPndT9J1gQkOXLINKNA+KXP+Dhe1VxZyWA= -HuLSKhYFyga2gCsAbUvtZHLP0BAfxDGimJZciagBXbE= -i5Pjb3wFWjgWhO/Oy7348x0KCcyi6IVF8qqP7v32njhzG+8BdTBQyqlCg3CRdkP+hkP1ySPJM/rBG9E6T++rIg== -rdSLxsl+Jo+9wGF1wR0xFfkiBqqHhxwN5kl0Lj1eqZJZBJ0Un+czbpqSSOCnL00rgrs3FzTKbr1MIAbXu6UVGg== -0SQnak5isFUZ7qBrHG5nONf0/iIYxo+ossW+sIeJPVqc06D+NOpjaE6Uqq4RDZ6D+X1V5oSWDCNufz1Z5NsruQ== -QoXjlU/yrq3LjBi536E1lAtUbyzoaPGqmdMscHtc82Eqnx3xaK7ND//Aee6pjueUoSkSd7Kn/GTgusZOZkazWr735TNoBy8E2i+TeT5QpBw= -EnTcTKmPyFkaGN9DqDzaSceq8uDBrg212ADWAEQ4IZ7RrbWtCNgCxsKxhOwBdNTIiDKGNrYM1guBNGIg+GP4oH9ldbTHxPoem41Xx3gcVH4= -VdrjM3tESbDpF9uC89FIBP9Gd1akXGqOvVf2yxPgOSm6+6n45/Opv1Gr2Z6wLcSiweXQCxy9SU/Ps8OhjacAOibd0MvWgOEF/Qj8Hg1OpD4= -23L+yCPrnnJuqxnn47seC6mWE/7wPUK89o8BQ4gkIOBjwQKKbOoe6bUJw6g30fgZLJKIywqZgDEqKLNb6Wk4ZA== -ls1D8gXPZvKpYcbhjFq/angELE3042eHnGYIIdOc3EqVbEv8X3JJ8d4kjYJRVOzknDfBdJPlavOFcLuc1C3RlQ== -Ucs0nOwLNKLYeguD5Ho6We236+pzwCXfjIf8zCbNBPUj8Trs/3tdQqbzpyL2y/A3nGNz3pdXfnPIeWgvZPJdJCQ3oPUcIKLTYx+hNA8fP3A= -1u+XjG/2+GSQRv6EzCaWRQ== -PdlH+lu7jNu2OvYS8I8SIGv8UV7r+RCWsVIOF9/nLLA= -EnTcTKmPyFkaGN9DqDzaSeIxT+jPdlkzsjUgVGeo67M= -lfXDVmh5N4vkcCpP16rRNU+nS75ACFRPief37RRqVEQ= -QoXjlU/yrq3LjBi536E1lNTH28NopdOB61QQlHyGFcA= -UrqM+fZEnAnh676kBTiBqQ2F5qpH1BZ72+KLbvQGDMU= -zKCrIlbP/DDhVHiZ3fIxklV8gb38KK+GbBXLALoFwPQ= -VoVkMP9tW2A1crYS1JPcez/T5g9qr04wEneJMF3RRlA= -40d0Kjq9eFveZcVdlpFWHqsMLb6Cbgq596PvxkzyPPs= -KIZi5iGAZ1ERVsYyf9tRFc+B9Yz08eywa9GtzLEWwb0= -CCWp04qZQAG0xvBg/GxA1ac8M6aDoxCupSpEbINrd14SIsQMCX2yg35fZKfSZ45bUlwsnEKO6CphPTsCe870BQ== -ELPZs21xKKoOnovAKJosLe8y3drsV3LCJ9rBZ59KMXaSIKv2MS1cInuGvowyQR6/da+MfD6aJgPi0OIyjKl/TA== -0aJdVaqIprJqIF2ACVD434ZUgkgWJjA1UrDXUzIX7hLHfRqO7xfTfRdmPwLbMjnBsyI29qYoF8SnX188Ei+AEA== -cEDtw6uMb2/A6mWG+mGficxASjA1PsBLQqmyk6avgrA5NU4ovgWemvxpF4tbZuYyAvelvkrb1my6fx7rBEPUgA== -4bCaCPES2AXNnKU3FRtflw== -1u+XjG/2+GSQRv6EzCaWRQ== oKVaGzjnS0ibnrCRJ6VhOXjlPFbbLUbXwFxCuM1lBik= -x4aYGEXHUiyydN0TvGTj6vQYATZwfiFdhjHTFnA8Gao= C/AADmj7KKNzSBTrmgjwHtkMmAZdvtiecPcfgdxsdp4= Oonoanjo57cFaJw3N8v3+Re7+iV0uPfFwq4o6iaSCBM= sTBwU4/6vbNIKaonWCsmPxBuizocf0lQLoMzCcsQdOE= -GQ8bP5FSB8U92LYKcbOqVPtrzArbXQw92sj1bGuzJ1Lzc0ykynAZHg7W7lIh9VCyvuy1xx0xiuBt1I7P54NmCcm3dxPo0HOwwo7tFDhoPu+yzldqqdrWTSIRrCoxLw+5YpASeQRxYjEULaeTwkqePveTZpraNCJDzhOxUhZMIOjZFUfSB2xXKuI/iazrrLYM -6XekAdRuN93speBaqeGdS7mZ+YDSAF/1X41AUJfffwgDxVBNvGTIh/BqnzHblDVEvD5QZ86VvPZQOOmgg2lVbc/yUOnfJgQ4ct4qN8vJ9S61s4UZ77FCLYvI5zgjpBa3 -Ct7YEe25Op6jhkRit6HXSSZJ3/Z8e08T/asIJPAS+JBiQpX5IzKziQ+RX8qVdG0kcWgO+eRhWTxs+8ABKecvwkYRx2jE2A3stRu9WnJ1usM= -hTUqYvcYvtmpKOewm481/HtdVHS5tCgP3k907Eb+/iNqJkMKXLfNx7388XmgCPT4y5b8ijy8mCMYYFBgxS+Y0PsJa+5ddHmDK4MoaD7zkxy4lAUla3fx83H4XA/p6emPuqNg6mWcazm2Tg7vwmSRYY4Gs+oh7Bef0ZSfwvpMdC3pgSvu6bTZx+abnOM0VmGnPvQNxptUCE9WZugB2G2CUQ== -QP9mdDvW8SzUpgVgx/NNy+PQKhOQCI9rUmKBAXP10dQohDuTfGSFbX2wVW1lE8+KWgSYsWVlDUNEoE7fuKKjg9eahEWTIGX3v6Ox+oMhYA7IdJYsJfG+u28Xblk0g3t/GQsYgE32MZxhDOynNbR5eA== -mtgwn5Yb9q2LR0oKaA1GDK35p3socJhZP/ty80mesNBoCZh8/LZIyqglfgIVeQWfDoJMlSeA89++zDh+b/cl4PZWkjjhkhxGMA1+/4R9GeucHxc0N5RGTUp9GUl8NFzhnJBAbItJO/Ooj8Adr/iqems+7nd0AhmOz0XdBpC8EkQ5O9mFl+bYDPxKMWVcK7hX0T6spCqOX8IvONthb6z56zjLZcgoYBYY5IceJEA+013xOI22RXtRL8aaOIxsWDdST2Zffi+0qqgsXA9PZTH2RwdC+LofeuboPsUEQks5gH0SpcMO8vMKy3X4TwFGqAwJ -/P08j/NQ3V/6NH/K2OPqHb4UIWT5SuwzNgp0moMGPo7NaIPUXB2YYugHQeg5J3YZ41rI3+EMFYTXhZ48WK+JFY+L648GbWWN+n4J6sblnUk/Y3BWP1/or3NVwvGtDRpaVcJcTZuCsGIovzGUJeOpujRmFEqVHUnsTRCEyPhJ9jY6fPj16MVMwHSYMHq4tgBtWySlYT2STtRxbg7aJix8yg== -DFIcnybg9Q4e8lvNk2V2upGcuZPvzrdvtUWnQY2SrrrB76YW+dcib4zuKwU0cgd7PijQCOSs1xBFA63r8yKE+BZMpIJBPcQB0nAeBcdL8AnXfEZOX/dPIJkH+2T669dro6gre3MO8GntEgTBUobb04CGQo6Xbdhdjm2W2WlfXBBivBepOgNVICEyrBEWxJ6F3qViMPn/yj3zpF1putTvCtxD3OSaQQKlTQjwwDk87N5pAANpnAgmsTpnsGc5gwEWKsGT8CEY2q30YHoO9WZdvQ== -fBUMMACbLfIUiv22DBztC9D4tN7oztrdPKUY/nUgEKs8lLVTmCNXtzImPf+SyMdcxAqdceLgLMswKsNRoTwjEOVxK0+6kH3NoMKL8JR3Axw= -KpJ00HDVp573NWedwG3qjM4nIxeXBH1Xcj8oXm1JJju9zofOnBQAbjDel5Vf4V5+CCtWZ4rZ7L7oaIW7uZznMm5bEdo4WIfLcntIP0I0Rj6y+ldQhj+n3LowsUT4JgF2Re8UK7HV5d7IVq6F3Pok4g== -NYEZAf0CPJOvudyjBgyMzE2jwr20AEiuxvmw/forLgZERQ9CF6rwwXghLg/05yOWH7DsxQtiRV0jbRcghSMcamekmL3rjNcnlxlzHIz03L9Afg2mZCw2wpE1ng2uSMu2 -+wBlhY7T5u3USVjT9x1efC8TgTZeldB/Gm8A6jOghoftvOsZOwZkZ2waSc2ajCEu8/W+3Ne1P33gQgamZtXq0KRjdAlySMJ1LwafiTxCX/wcCGguMUTgIMT8pgJWKlP3 -vX3aw/VpCn2kdUdQ401ThnzVz9KSbiqiT6L++1PUtLCWNoHXu3hXQN1cFaNNoZLtxxPINpim31IYDqEJoBDph8kNEHythJKRmMo5Z0+V4K7hgquEbbLh6QkAZoWpM+de -Rwr5WRRWJc49eH5/ngaIBiWYeyNcMjokcXjDWWMdBpR9adsWuzQNUXNAKZOXfKil/IcpYdPvTbxEDZ3s0NmGyw1GIqb/xlAka2sQwmeAeAXxauBb3FooztVgs2YWUorEk7ZkyIFFLL9lDDIkexMk9Zip8Ezq0UfS4SDL/2+UqILPJNyweBJ2lb418UIVi8ei -ZUOeDkg+GlcyKcw8Uhn9Gkzo/f8t5Thp7tyqlTwTNGzDRXaXsNYqq58i15gSj/SXZmHhMPM8acC24U2Iz388I1TabZfzR3emEMt8tor2R5qDMGDRDt3uq51gLvSbi/o7pySbUdqo94mg6zOkQZZ4qQ== -ogK1joGXApEMwUMZDKuBPQ+K7io6hyKKF6eB/S2JjwxAs9ZmLoyXyu20uQSyV7LVv0TLo45EVujcWKH0qwbMzz7uVhKFhOvhBxY3r6NN3AQZeC4mZJpMD7Ita9zCqRrE2xRqPICGsrqOQCpgPf2mYLasUXusCU7X3XaczNkzeXgEPQEfDIGDzjdgoBDve0lD -kHKnlmRHLSoRZ3FlW7VxUDBfKAp9xAMQoasPRHDCJMzjQCpKGX5xlWdj28e19mbOuK412zaSn4fr8EiZ6CQkVPJV0JhCC6oXJ1VP5dzwVK6sJP2xnnrc1maP+2bSVCSJJW6XTQBnXN67lZ9csTc/55kThXgt8/WgNWfGnv7cNft7qMGh/uqDpiTxkTvtWFyfBLHpDodAuaAm3HZF81Kb9g== -Rwr5WRRWJc49eH5/ngaIBuv5m2Ve4B1fcLet+/1wo7DH0d23Qhw6EO8INtX4jGWqGtX5+lRj8NTlwImbeCDIR7whFKL4fiSpDcIWEbjfEvA3nU/uai0b+GjyPufitj7z -UymC8Fo8j5Vfm3c3mvSqVFlgOxkgngkb4zutUybie1eYRMKNM2R0Apu4INJTA+KsZzhEsS0Dg47oP2HXN636LPwOVEk3KNf6rD5qgihriEUcABpi+i4p6MgzO0aadCLO -Cqu/R4uxTK+Rjxynhwj8CfHKWpq32DKWeMBQre76RnzbGVSYpcv/9UNs/yZShnWykkMGuk7OIuRPKCi9fXAn91OtupWnmBE/tPrM6UCmBhOzozY6zSf4z7sHfK15NfQsadC4mwWFokseEn0i8rJBXv5XXYpBjiKMnnLxRTbzuKs= -GLJti+lpRHd7Oc2b5e+nlFAlPs/zP7tUhNYN+4uCpfDwFAjlXxr7u15rd1sMBPzQd4cew+cfFWW0cLAdoMsQO8scE0139HOrzP+lc1LQt+GdbK/albCj1Cwzxm6RjnEE -yoNfTnPxkT2ArtuDpRb26am0DA2k2Xon9SZObD9Px9u4mwT57Nln0TTGVdqJQcq+0cTeXnb3giLG+gqXnBuVYdQUPl01Vu+xBAOrY2dmrWA2ETuL8gZ9oDkUBfRCWk08pjDdAnBxSYBi/tFWtStR/Q== -PEQnpcHCCkNy3Q7rsdi/TK3Xxav7oi9sGAog4t8hQeSbJg1i8dcEVVLrHD/2FpX+Y3Y8NVyvTEw3MFgOjXg5Z3inmwUbEV9YzGRFNZiNldg= -XCHGYowgcWiXCPE3uFJ0ZSKOiHX8d0J3vy29XAMA1SeblILvIlSLkA1MisVOiIdR8trHQ7lcjcjeEYK312AhuA== -ijJqnkItaijg8Xxs/K8JAtEg/1CRLWdefN4APtezsqDTzlCt54L8MhtthOhfZBPCMGcLXf4L0yj4bf2nNSwz1U1/71jG7FqtWYPcN7DRP70= -U31Q5qsC0ZXwyq8Zvtv3463ts4GVBg3RkiE4S/DzaA6Kp8GeQBp7km2wFZXuGu4Qc1rF6tnaxDAWpyk6yZ9Z1V66e0iOMfXFOGVg9Z8gVVw= -Uma9eTOXwECuwd3yDyjkcVNVDqfGb+Xyc0AfsH/Lxdjqxri6EcuUN5gbD8qkevZ49ORG2Fny0UYggt129TzU3qVjI/LW9sdY3Tv95jg0aPg= -4mJjQ2Zr7TaCMSHEDH1cmNC9B6otCDNHWFtyq1OIjer6HF3uv5P3Ah3xQAtzeb0757eFH5uqqJ7+WetJ8IfyzFGIHdCnNSuAABkwXyZDQuc= -i2sw6+ZuogTNbw/oNKxMgeHb+1h6dsKyBoq229eIP+ootCEFRhDcvdvzh+nsZyWcKhEir+qfaM3KgbcBMkWYBfBY7N4WBJ7QD0HkqP4nK4I= -F2DWu3kKh2SE9esMcSzIGfJ+0XMuBwVtVj8iDPswkZPUxgGTPxq30Ixn/I28m1U3b9kMRMkkWS+JVyFDH5VnZiHOp4OhqAF14AOvwkU2gEw= -oDtnF93s1JkfTVQ9UzfoivqdVspjUgLvGtzFnOwO5TtqaeFScbiQcr9H8kA7Pghsvi5p67GLwNQUFk+jJObctRecC9oeWPUG1GQgK8oJXFA= -JPxDl53ivISpEUZ+1kQXQXMkwdTaHzfGE1gmcvUGrI1628Vukw8+Tr2vtKNIeQLhv6uPRQQcMjoLbM6J4+lctcZSACtSN4TMxHu8vTP8sq5cFtZfX6Hp1MA1/J/Ok0Tm -RrtdXHpDf8ftCQ4plQxw0HSkwvLurQVAdFqJ2vvEDrjKg9uE6YmWw40PaMMTfomE4srMPDhufk4eoHyPuBrvY4yoRW/aaI/Mic+SApmuiok= -c33sbT/GTUpquVFIngMO87dfZjzWcp4w+CxsZIom8hnCV4LQCVINvpXQKpQwscS46W+bs/X9FlMad7t7mrWHazRBqMMn1vYjX4+/MlIw5mp5jgZaKdUE6zxw3uBSIoS6Qfeod5AnUo1RuBAmOxzLYA== -D7Xe+CnrKuTWLm74s5CdULixGR1tSsjFREsLXI3w1fOCT9R1iAfD71fBMTYs8RQDd+578zqvHQbhLzp9wNKHV1QGVpIuu0XVQ3ZOfGrW331O57iqgWVKwNy0+TA8s4yn4uKBj/GHfqoW+P8hf2Y/iw== -t607yNsl+Xt4IUZUKCdg120PGcOsg1C5ytM/H738uXTHLSoefTvEFhchJxU6jCLjxj8wt8jNH4wUy8VleGCDcQa4Cqg3WtkSsjTogkIG8ss= -v1YvZLHufhLKFxIHRhqo121CaphAKXTzi+2OQ/Jt+2Ra8IbIbxhjYLnTbprhUVFVEdfSGSka+7HARRFgMLOuRNhwyux3UaQBPkoTNTFyYzs8tx7Lwn1ov8idcvuZqjoq -O0mtTdlcYfDttKJPtVyrjT7Vr7M+sSOE09EuesaodxvBQ0f1f82UIsSTbWj1oec7fJbrrisZPiNv85eApWnhpgY+dmjE1upeUmHSjs/TBhc= -Zs0AOqbSh/pxVla9Y6PkDHix7FEQa/lG9Xe9odgRvWBg/fLfX6CaHcjTCDy3Udru5iRaLK7p7tpRdesj8fy8uWL5VP9BHPjb2yo1d8NGp1w= -eP9y1UpA8RKgKDUIdVctvyfy3tDu4z1rJ5eEoNhYGLPUnbbTOnOP52gaVwcexczf78FiWjR/hUM/wR1ShNcBCLbP2anqHbSSEhBnTsDwBE4+v/swe5ginLtQblP8dcOiOJLgNPcLB7OsAiKkh0up1Xi4SR0Z+6UcqNd1oEffI2c= -eP9y1UpA8RKgKDUIdVctv5D2EaOJzqmMQgPuQUW0viADntFpL+OR+jyI4sc/yfJaa8WDEM9qhqyjn9UWgm3wq/x5eOVXdd4Zi0GnGHErWUxLRFycodvusOgBeFy1Rf6XkcY+hGJzZyc4wlLPAC30ZIzK2tsYRCgZw6AEQaZJ4OI= -V9s5Eo3Xcr3HGbb2kxKWGBy3TVUwgHQ0HlRWypwzK0rSJKWkUaHeJV60likc2x6BCRpPWJ866FM3o7ViuvFhsqjMOkmOE/VZUAuEZQ9ARsU= -ECQx4hhql9YPrq7JsTDQaKPFGEO85KpRVw7iAwFx+sHmIx2FBJIY08G4dmyeVsdrGj7nqklvYYxhdd8i3Q/8v/EFGpXLSkcBcocB9tuVIq0= -yUEvl2lmwCONcgsqq7zSb+bsBrBDVDADE4qAggOZKqRYnwiwh+tCkoX3N8tQQj94YtF9XFrFiR9XpmeMmcUpk3QRYUNp12NQuMrOacdrhR+hHHln1Vbai+2SZwxiSRg7 -u+YxRTYN8EJVeuURXtdcZmDUmLfeALtrsOJn6iGUQPr/JDY0TtUU3bhX3QGqIcnSPR6NQViOuU54/qL93hDwWxjZkkE2OTGd/2UbeTHyolfDsW4NEaMTKexhguTwoE0K -c2G+D5skO/+d+thjXmC1YUfVX+l7iWgX9T0c9PXin3gutxdDzXVeMcl6Xfle6alDePLg9NsXQLkUJC0M6bvsYEiWIwaq3GTGPdXDs7FE4G6jCNJxO1pLDWSmDyKgRSOS -o4QTqehA3AlJXkkcJZDUJiu8aX5WBwJ8DPaJ+OLwuZqAeqwI4DMcOEIwurUrckqZp8Koyjfn3RIHisWySq1U0fxdkjrKYgs2L5fMv8WV9mSvaPZnEqYOvHG6wsKTcKnQ -UyvkdV5qs24BbOkkeKQI33u6ArkTJBgz0Ss2onvlDERuqdFwTRUb4f3Q/WiESZUnLa4y03LnZMp/RftQIlV2m91QOExNYFrX0esZ7sDdO4o4i+eSqNEaLEvPr3qYBerNBCI2h9bIcHZWiANsdpfDdQ== -yL3V7JujJ3KF9f8XtukZsR1fBJIf7GJQ4YkaACLOGsVDiOxskKXNQYQxnTbWLPRsZrBuS1Fe3DcgHTUuWLfLd4Fw559n67DfeG4HwABfM3FUmI1EYGMPp7sZWL7qtyCWJR9N1mltg/8WrBdfNAnH0B54iJ7F8X1ViYcXicK0pWimFELauqZhgLeOdpcPNRwe -Optb+ZZvcgzfoopw/H9ohY+Pa2BmRt02gEQCo9AqlcpFc7GOIZhbYQBOxIyaube5WJCVuEAsrx3/gYzb9ShcHJcgPpkHCMuXnQHO1UVitunUWrMvslPVdSSUFmpC5DfP4X3WEmStNbYEXvjzYDHGLg== -1Gt/p2zFJnwB8mRUNG4E22OhcfaaQ89D89ZyKhAoJpPCFyqgu7edsDMIM1I2ucM19GOj4qe3GWawcR2f+t4Gfr65NyakK2HZYUs45NEU7Cs1wZjDferOyImlO/o257lZ -OTCrWmGpA4EdwTS+E16lD4VaAh7pDL09qwQdgri1dA3vQiC4xwH64veDLn1yvmMrl3yCRLP3RKYK4cmqbiNVYnshkRpd2zWGN1jp1vuDAIqJkJg/C4CLFI3XuEWKg+kg -VmUH3ezP1MwgHNKPAXaOFx0SCA2BhsoQPfuhCiEf9E12HPTU7Yj+DFZsX+NiywvPSXS+BcXWFmbMx+0GgNkdhnE+SLwvjVOBS0BKyT8PmjSEOzr6RajHGqnfKYHapBkOXCFmeWY5LSkmw5OLk1Tjzw== -7Cumgo3JknMVMx9d4IyXNkWblnKDeDeoxr61OsoOCUNKX+2st58f1PBkaCQ9Ia1jr5GDlka3sJiXlAFFGh9lFCdWTvGsamc67ufjc9RWDozPNbCPRW+/lI3g1nDP5hFX8SwW1CZKxWtn0YA7Oc9axQ== -XjBVJ2fDvhqj13zHSPhNq4a/VLCQNkDASpY02Xga/Ae3sqYAzA2RkYvcT0raXxa92r9qkRiMel4/QItFFGOOMnjeDSrcpJ8Q0n5tBEEiY4R5zixk2HZVh1msPMqP+9mXDLzDJNOp9CQlFUEkE5iBA12Z1Wv7CBU5FPs4OYFqeUs= -mb5ArhJqY8U7Nhj3n51LRgVpmRFD4NHWHZSW6JTOzw/7u4vN0xNGZ5J8d33/n4wpH8JeKbYZru9COcNPB1RTqNxypEzIetud0GaIspNozv1ypxW7aW0tK7Ag19G7wLSClxcTmV49pIapmSepFbCvPhS+KVgNY/2c1L9UrlmzyI0= -eIAbDBBMnbQNURiQ/SQSj0Yr6NsZ1YoYvEDZf2EiSRgF3TWp1Um5nhuZqvLgw4qhIJWe5FN/haGPgtqHNVGSbH/TsVHYtELdz+atH0h/Z1tt+jucbNVYhhmbWshgfFdaDXu1mHOdIShKRvFpFxldew== -WMryAG7s9FKjtjrG4x+ATNmu2wszZmtzysm6i3wgpZadOLO9/ZUSF6y6dLDxOuPnAVpKa6yN4xld2dDyKKgTmqoBJhqRirzqJbKQ+0gSuRTjfleFb4FsAJ6zCoJk3PeRvXAXbEOUrSCmz2KkGYUYRQ== -WMryAG7s9FKjtjrG4x+ATOQjM6HjHtlGa8M/Jtg/uZLKDhwMkQV0s9GUOWRJ1VWbYgF4Vr6cH8SXZJNnrKRk83C67UEKd1nA5OVrKD6ocgiWbmRdmzqpVefTgxsAfxMmBy8l2vVMAhYCOSCS7vRaCQ== -WMryAG7s9FKjtjrG4x+ATNrh7dTugRp+04uBk/GSVw5LASCW74N6Ga3pvnS/VXYDQsivFtV+i1iXncagRAYIvE5SuELzodmnMfYMx1kr7zk/VwVwQaxPVYYIB6xoP6bAA4pZv9tFlx44bFfZ909CoA== -WMryAG7s9FKjtjrG4x+ATBQQi98Oq52QOwHM1kpjILnLhFORzJ68hVlRhyTTS2dRrq+0ZNWIwi+JyFTeVO8jQ9lQVWJZZYW8qCZDuCe/Yt2oEln9gcCzKr+H/APNHS3P7buJdlKeDCPPxUGiq4u2jw== -WMryAG7s9FKjtjrG4x+ATHHxs27PI3yMHf+eKI5O6HCRJmN9NoPXQGGhg8es7ScHiOCC0XWzwWPhMklgPTG4GvnWwaTcKlVCZupsc6iVC5eqBfwJ24u6uwjs9i3Df8PU0ziVf0deWwiov3Ek3fmc6A== -WMryAG7s9FKjtjrG4x+ATC+CQvkTOYaW0xCvOF9tMTvIMNmF5CsiGspToLXf+IeN+nYOwz7p0lRnDzrwC2wP1zTmeLHQaHCR8qqKluHY/KcAskVdJx0nFTfbDZMUmTASMwwHdZH/fUO/ZaHzwiqrnA== -WMryAG7s9FKjtjrG4x+ATDHYw/qAF9L/WYO4Wh8/K/gzN0ezfEYg0FxSf87Z+bMoTc8J7Gvt0onDf+pP4CuWzo8G8DDB+ZLbmQFMCQv4Gut7bWkGzoXJQXfaohg17ya3ZofORP0LtpSMlo/BxzU7jg== -WMryAG7s9FKjtjrG4x+ATBVZ1OkNxU4zBg7teiYs5c/CaFnQC3a1I6m7faKgS8ZVA4yLRjDyYsAZpa7245PyergBBVwFFH6HmKuKQ7A1gGo/6DwUzhXPA8TxhxC1q88qpBAyzBBYSdYrgGfvuTqsXw== -WMryAG7s9FKjtjrG4x+ATM/EbaHuaIT2sybliDIfD7j6r35UTo7NYFZRlrVvQiHw1cQgcLXGhBK7zIArm1uZg3WRIVGiKaEsIyEwcMJeJq/RJRQV3VcpMObXSD5dZo3SvboG3XVZThQdLGhNFP/G0Q== -WMryAG7s9FKjtjrG4x+ATAdl4avdl+hip0KZ+75VAnrQV/Pk0SyMPFwSHkA5XpNjDbTgiwCWiqaKg83iNhOHBYJp2TE8YRnHnTbnVSy8t9gIA4dNzjFn4JXuClxUWXXkc/A0XSBNs/xDGhpWF+ndUQ== -WMryAG7s9FKjtjrG4x+ATKR++QNc0SJWmG2pcTkqP+Yym7W6h6lBj2/RCffuI3zv9foH1AtBZPly2+kYRUbEDAww2N8GU6gx1qAAPikD8k0z7RsRAqWIa+KkVRGLFrVVwgnB/MeND+82Pe0wXeOJUg== -WMryAG7s9FKjtjrG4x+ATCLs9tk9Jltu2ibqzlObVwNB4Guq8ibqEdeKnK2TyySOAO/Ine8V3xPDbhbNVEyzUe8PPbAbg8gAnSNTwNvK89I2AVbo6HZPOy6Jcl09MwHYSCaxASYteUjDGkjMsWrrXw== -WMryAG7s9FKjtjrG4x+ATB2qq2ymrxcxLsPkD+m3XrSI2N2+ZRJ3eD+s9eQDVamg+7njOyPJrh65dDsZQCCUNjjFu7OyKGRhcT6kCI+FJZMYtkEGHHz9+PMPfogU1f2BrYyjUOxBNbF/TUHeyw8Aog== -WMryAG7s9FKjtjrG4x+ATOEy7/q9poeP/FqVlweawPPrKCAMVQZ5h06PAZVXWMSiQkzeYW3YpSPAOjb3GOxHTgch5CvH0Xekog2zoMhn1y0pPvzbZYWxJ7MaD6edE4EKmtEKiA7Bjj04vrSAQRkw3g== -WMryAG7s9FKjtjrG4x+ATGhR+unI2h74qdTLP7c+xNjUIK5he6zXxFVALfstE1v2JJzL6k53U2c6Q80wk4pLrYKXWZ1LOF2CkF2zKg23Jhr3uuSLfIIjCKHSP1RQpfxP9XUoIAcx/o0T8ZbwM7BWlw== -WMryAG7s9FKjtjrG4x+ATDNt289XB4z5X6cf+rpuIYu/y1ZRboRfEAM8dlSkdMYEQi0k2LPMRZG49i+OikNXME9tAy3ZYFz/S6oMQGFxcdckiJT0s5pvDNiH/XmOKGU06+Es4PF80hhgFFBTw7qfQw== -WMryAG7s9FKjtjrG4x+ATMgv+MtjO7FtemUMEZb9FojV1JkUKbj9Krklg5Df0I/59ocr61fClFZvuselgezf35+GsHIg0XjP/D4Mn2m1v4TEgdWHtzjMoTCzy7uibFfDOFJZwoN4aDjnvjFQ1HS9BuRz9rAAbV4Us6lVHO1NCYQ= -cW6VfR5aZO4LK69BZsjV9crSLG9PIz+TGmuuhzZzbJsZziHU7ZnuAY6OK306VBJIfHpKpYF5XUgk6wzhq8A9yktWjNRT8Zwbl4ZCAtKQsASJ8ZeX2XJAc+MG5CLEMF46nleScxctrO6OMnDmQ4FKdQ== -qXz/P6tVzdUn0oeNwT5P5GUTOj15ONhltrAZDg3uz8+cz7lLpSBr4qzzaARhAhY8v/EQncx5cMJOfxhR2mUP+HPH38SryLW9z4LaaSx+R4s1oiOCUdTwDFOrqVxFSDvYM9X0PPXKvaAqxW+kvxtNoQ== -u9mvWPj2GQyeh4Qfg/3Jk0F+enxwpkcd4cVgUbKEjKPDyTaFz8NJ0DuyeWx8oGlVIXJdnlkiZWOv77XDEtAX0V2FHBnVWBnPEGmRbUQCTqEco3UPCD3t37w2dEgvYm2ZOKTlRmp46AQKp74G7mJ87g== -u9mvWPj2GQyeh4Qfg/3Jk4Kkm8Da//W0pSXkBnB3Z0ZucXeNfRaqEdskySzi8GxJe5iBfUt2r2xaJMX12K513CiekJa5Lqgyv7hpn80olxEtaElTf+pBKVS06dStqXtIdUv8sggqznqUh+SfMuIorNxfv8+vZZt/F6OhKfAM9uo= -u9mvWPj2GQyeh4Qfg/3Jk2Y7CLucDXrFQMDP/vNqUcFBBoU/SJ1Q6vFBo/3rdeq9SSz627vkZ2UQDP3TYS/hn32SmFoWHbs1ypYucLNWZeqEgrSdzjn+tExUhBbfKvLlhHruu7OPU8Y2ySWAqhUDP4SIiqRZbMaYRztquwx98F8= -u9mvWPj2GQyeh4Qfg/3Jk6ZzJZSqscDZOHsDwfXZl2numAbrtOPyz8uWbrx8vgIfflEMgWNlUL/XcUXMLvZBiTmcC4ihstUjUhoGvxKSxxYnTtRbCI+pN7SLgzFFGW84g4LuGQiqOqy/ds+Q7NxncZKnHsTyBV2TXa0gyzvNrYY= -u9mvWPj2GQyeh4Qfg/3Jk85Wg6xc4QdVkVFkKn7phwRwSBemcn7v/zYOEFY7ZR0rZrrhKYyCCjyPBxlMd52CxwixdtfGrltan6Q5N5JSTBGZVfYA89Hizmj9ixHpw6E1rEFmJQcujwZQF1qxZDtGN7AAzGh+UtVO6T9EaarsjI0= -u9mvWPj2GQyeh4Qfg/3Jk+XSamLEKdP1wc/owroCbvOt43VRnBmyr6pXnX1Wp4ugN8yY3TrOkzTqGUL1lMVEtc14uu5iIyHEwoL5fVQTA10uSoKAtFx4tXYUO9TGWbktWRWf9u+FibbSIiUxh4r4zQ== -u9mvWPj2GQyeh4Qfg/3Jk4p4JccEzwE701o1Hvtv8RLgf7s63UDhY3CdacNFIx+ma8rSIZd8+HOcxHvTi5JZh0RR94JdU2o9vHg2+Anw0noFsoo0B2TLPnzk/U58/tI7tL5X2cCSsrkiif7HYk+FDA== -u9mvWPj2GQyeh4Qfg/3JkyunHx5F8pN12FI8w8bGHc8PT0RJ1ik9rOvWz0nxCgMB95VK5Polaw18USNfn0UHraSRdJnNHBkkF5SbN2X9q+afOKw15+MFNFUel/uuowT8EtX09y1P8gBRS+vTMRblU3v4j7QT7RX7r8bqNa/+GnQ= -u9mvWPj2GQyeh4Qfg/3JkwFHURXL0F3lVUG4MYO4Z+CFpWMKpr9K6TnuTtqKlGcqNGGAtLqIlfLSUN0H9pE7u+Vs+zVGKT5y73ZBqYL2xRGhpyMxSg0E3VGxeHfL735hFitq9ZfsxG/GW5gwpLIycW2EehjIhuyMHCi1GQBZEYg= -u9mvWPj2GQyeh4Qfg/3Jk+/CDh9J0IZnC8hReRXw+Umz/8JuHSL0Q/BS68JLWdBapxPtKCsxS+pwpxh6YaW73Hys2MDHBM56ftFysTHtG+ueEqmyXYhqtgY3NBRrvV847Ep0rcZsXyRrxoqPOrsbwQZTOCpOoDuzwVx7DsCsvk8= -u9mvWPj2GQyeh4Qfg/3Jk7tH0NbWKnoRUzCSYmczsVc+1NMPu4Mp1UOV4QV9L9HJCQlvpe/JCSgaF9feNutG8SNjToJO79MFOIcr48Lgj9Ay9+tKedmp+Z+Uxq2cP4J0/Imu/PLctuO6THYMj/s8Nw== -u9mvWPj2GQyeh4Qfg/3Jk+l0QL47Qrb3z56wQfMVF6nZ4uT4S4ss9Bps56roEWQIR7rGMvhrpwlc60RJTjBbsmBFIDCVkhBzKJIZ64xjL7W/7WZNLXY4MdBoZZwp4LmigdpGnRJ9+KL7zizsydYEUNtkdsrtNuhlSRYYJFHxBz4= -u9mvWPj2GQyeh4Qfg/3Jk/4Xxo+6RU8qO11KZpuw8Bhw+58+RO/ozcnjeTnqhhAtpNc1cGEYiPseIBFUR1Nxil28Ixn0ELPDop0Y2KWOoVv/6gt4XTlPt/W1JZqZRA/vx8++Jcd6gdbe5vW5Oz8YU4dFv8CTdpX4bGyks6eB/pY= -k8mQATL2QGzdHVb/ZqU0sdhr/fHf9LEKT2RVauO7PV5k3kgwhTztgLNbkH+BmV4/Pk6g+EEKg987GEI4YDWznGUpHNPklJ5S4tL5CUpGGm07t2PS1TdV7LnXXLKs8IhmBDwb4J7iBFAadgcdI5mT6A== -Optb+ZZvcgzfoopw/H9ohV7P1ww7HNP/i6UvRFAyH4f1dGmnb4FXU9hOqrHZ2iWHVN0Vrk7rU3JK9Wt0VyVrf7HJJff9eRLYW8+yUQBzKhPANw8Wod2rxu8BgxCDiU9MeWTyk9ygFVXd1535Vk8f3g== -O0H12djxOPpYv3DI+nktXcfY8mj1r9TI5/bRMWfRk/UNsmywSrOU4V/gP4TFJYSVwwK6YHTB221bjhhmUyw0Q5oEDpemVFwY0Rh2E9m5GP/CJMw5yvKxbhBMTjbjx6KGMU1JjHwTVGyleGYqdzS2tQ== -L2qllRaufT5w7PPs814S6rwJrryp795HfIlSSWRZKcdHXSHyiLRqzXNxgEe7GX2Xjm7wdcKYfEI3CK97H+Sra2yYG7DkOyngECk6zNjiZpDdnAfoZ7/+fQw6pQw2ehfnXM9RtWtoXOH7ApaB5UErfQ== -GCa+LjTuIcQFdoFSHacKrr0BJRQ64ySoR/C/RpwFxIEaesCSIkPH3WLrkTMW8Eb9pq2iZ0SJ6bourSD1TtgY1DQKJTYq6/APe8XPoClmHkEt/UWlPbAMJUfcPP6UHlMlTE49dUn2DxKTK6zlAP8OLQ== -tp5g+osoOV/pmK+tBcXKV22d9HxcLMH+xTwms4BYy9dPBjrzfxOROpQlyteKmKpmFRUppTYemg73OD86JGUMTE4wMlQ29zo95Znb8JExYm7n0ZoEj1LmiY4jrSVYBndY1G0FuGYM2MS4sU9+AnS2EA== -tp5g+osoOV/pmK+tBcXKV8uUTAiPocxsNwpKfFrj78UoZext6dgqhXvLVuzQPgAHPnQrtRgunxQqXxaxV8NLmir+TM6FrDSKCl5e9m+VrCWQU68bjLgcX421o2gyTnPEllHMrG8UKEcrD5KlRX0+ow== -tp5g+osoOV/pmK+tBcXKV6neYTsy2CBToPppeuR+1qhIFV5ufM3BpqAdx9NcFGzk0tMll/JW77Kha5GiDhtwEy9i1DqVy69M5tGkQexGCFbPFupVmqqjur1qFTbudWD6Gj8SQx7IUKlsKtBsYl3Ecw== -tp5g+osoOV/pmK+tBcXKVyHhjlHhc+8OyciAEIPtMKdJ7km+qxLwPmF6uR/Il0KsOmvIw1AoPgUwPRfbhbRJuyp9zT144++FKrH5GhqFDifI53iHtun//ddkHe/XPCkhKPzRK4XiwWEiSTBo/O9fwA== -tp5g+osoOV/pmK+tBcXKVyncfbXigmOSKsGNbE35zxQBzcHPGmO7xa+kVKyGcGw/nhOnl9JFy3J990rE2dKhI7+7XZJm1qXa5hwMD/B5/hkz+UX8th/FK8rSKs60MzN6CRpd0S0Hn09u1oByLcNq+g== -tp5g+osoOV/pmK+tBcXKV+0kNyfVosEvu1R5eIdu4mqJK/C2Xiw3YPLIY9haorUwimJsC8qf7GwnP7/DHxkQ2lI/nEYqLq6DgTX2Q/RqiC7xdf1GnikUfqpyUgIOxtXD+VTiU+m72vsm/s2IYZw+xw== -tp5g+osoOV/pmK+tBcXKV7FjVUrcsdJ3A3YM+WnARMI6e/9yYrUwUm6z6teb4DrgH0C92Pw53k2cvXbizYZQIfKvQBC81hrDi5ccUcRtDX1LwpMM/AFM3k6uaPJtqxFX1wPn0/iN9aAnuWYtNmOKTw== -tp5g+osoOV/pmK+tBcXKV23o/6FCCKq253U3hcS90I0BKd7a+rj9vrM0erCmF5fgQ7zLdhTC66dGYxORDhOCqMIhyI1LiOSK0ZHLlQJODncmBSSJMs7dXXLYExcPtxigHv18uHuc+oBY+bDjt7yPOpBPbXJcxAYfmc4FlYcZ8hY= -tp5g+osoOV/pmK+tBcXKV5NkfIfu6lyMg9b8khIrQtYI6ae2yWEudVczO9o55hLgdwio62a0SsIZax5MvGJylvOVb7Nc4dbpebjU3WKZFfzgAoH9x7fLDIKfWb2Z0HDvRnf2X7ym2qSFdjFmOrgYu+VID5J9vsD4VpS0Qe+vsws= -tp5g+osoOV/pmK+tBcXKVzTZueI/mphDci1n7i4FvjEhHVFae1ypLGLSSkID9FE8Ao4KINj7K3pSaDsJGG7nun/o/67TR0+7U1SYfpjCUxmEt1wrRoq6Tirt/vPYpSjToZkzNLeq+IZPrRPaLa5OIepHlMWd+7xIJ5wr1UNNs/k= -tp5g+osoOV/pmK+tBcXKV/R1y1G15U2L/+mO+1q9xsmI6a3P2IWGD5pa0Carq/A/xwWpE2Md6t2Wv+rgc6EMwM9lR26uoTXBpPliXXqV76qlH0YV0vwRSueJUcbSuAPYLS8Am+AYoHoW3mCnXs656HIOH0Kum0/yjHIog8jdXj4= -tp5g+osoOV/pmK+tBcXKV1nrdSo4U5sImCiOzub/YfcLeDqpPXs4az+MWQ4dntNOBN/19PUoRylHR6T0T6sB3EtA75DvoY22xQvQQkXPOfCLAP5Mbp/zJcqEufJuAemYoOmRpMMYhwPMTByMXB2d8we1RyORED1IbXOLqOmAU+E= -tp5g+osoOV/pmK+tBcXKV2XIfCmcFG05EPSUV1i+BCzS5BPRJ6Esec+PamL+FyPsmGfClXKYu6XyF9pI/ZpSBfCwT7/XKlkUaqu33LTflkbevzZ0RKBlexQLCEvL+sL4cORr8od3FfAb5j5Ff+POj7CwkpttuJ/vhHuyxnNCwek= -iaAodRlbbDbdxCarNwkcQdoTVutsf6DDR9dYt9gT2Dt9YKBt9ktQmVkZryk55qSRBIQEKM2Zw4AProG46/+su20DlJ4Okv9gogPBQQ865pvc7aQ3BokSiJOuNGzMeDVW -phX6+xCiuQFZuok+RnQpZDtuXW6l0Z/fULj48AYMV8G65jxvIjADDr898dvf+QZUI9cVeQChYvXHZDFmVbJT7bZjk78T5FVOXnbjVL3lTWYUQd1JWLfy5Zvp+gy93rdh -6dJZtsb8CUPLf6XAX0fHyzOINiwDqD+a0wyfh6+clwJcKemZZWtrS24SqtRArpwsKByB5lq2v+zcUQh9chResg9HlDBoZeV4THSiKnI+jdw= -lpMeOmzCLPmsgqJkG7PE0uIgltFtjNk9joqoi/Sx5S7Z3Hx9I+2EOHepDdzOp0bXwM65kSbvZETscKym3dV9d+06XVZxbHvbKbxpli6UKzI= -lpMeOmzCLPmsgqJkG7PE0jWng/ZqcMX1cl5Z5Pm7O4/ZytOomuD8iSxW/o7XtMO5+i1+0HbeVVdrK3zTwVpP/JyiW+ZqL3FvwsktMy1ynd7a417nF56s5xndYxt4f9Yv -dDQ2U1xB29TjkFiRc3OY9/7W0ws1tGSg2m7m2Tqp9dg5UeSyYqzwRruFgovxcuV9aKft4FBBlInJ5drQZjAZAGcIPichSJAeo7NoE+61puY= -phX6+xCiuQFZuok+RnQpZBTHYsxYcds8EwQje3SixNq4j769utpwHMU+QxYxIPWMISACJ7key8eERNbKSxulVflk7w+0RYqm5PaHBvdgHnI= -6dJZtsb8CUPLf6XAX0fHyzOINiwDqD+a0wyfh6+clwJcKemZZWtrS24SqtRArpwsKByB5lq2v+zcUQh9chResg9HlDBoZeV4THSiKnI+jdw= -glsVHMdFb/IeJsxHuz5fO9rID0zbKTCYiMUut/6OYeDxaLt+nJl6yiZbzgy1GJ2W3MrTwFTfwF4MkwrPvP5EbtBwqbSZRh/yDZePmhERZag= -LllQdNg6CwTfXdYMyq0nDg4z5E0nl6cQ+JwOyb8yTWm/nkPMbxdYEXHyeqyqde00+c58w6eOh1dK5d8qz+QcUQ== -u9mvWPj2GQyeh4Qfg/3Jk2ASxmE3NWLfHbdsvZfzKIqbD9pcZOaSu8iu3+2su1dg/0qIvoQUPMDaWJ8UD801pfdPGOyh2Q8BAi8Rh4XZ3H6wElXcHWlU+mGMJ4V8Sp8T -u9mvWPj2GQyeh4Qfg/3Jk743lvh+RBZaS40NPQX0FlF4yKVTVZ+6x94ikzwHvd0gZXRB3p7eRD9lp7TGholSJMjz7hMFEEe/HbqLcRrRhq2l3kZgXCsxBUoLw5d5Go5L+5HBJqtKmTMS216uhbkZxw== -u9mvWPj2GQyeh4Qfg/3Jk5Bfw3Qg1JNky6Qzkq0rIuCg3Iyvai0TbwAmlCFeQxBEFUXT1LEkCCObL+IrndH+gRpzmUbK0B1+EQlDa9x7R1KOP0xEJT+eHg+lUpEbycTKIPaGT8owbEHpZWJegtvgnA== -u9mvWPj2GQyeh4Qfg/3Jk0o90/9mCvvXcHLwVxWpPy2TG4JAkDeHQ5tODo9lC/OrQTj2jD6Jj/TH5u8dwrbQWOntAXUqKDvKaZ/oD1yWRM2Jv8VgPwbGbABPMC9XRyKKmr3Pu4HV55Y0yc/ceXP2Ag== -u9mvWPj2GQyeh4Qfg/3Jk0n0O4lJoUim6Eqj3aXcB9+VClCq0cYi3SXapmP+GulURUxxmjT0HWW10/QL2IzHQprUFH17R13Ncnk04N7evinySbTyxkgvNH7TGXXg26EBUSQyNHCaYyvJGbThNuUMqg== -u9mvWPj2GQyeh4Qfg/3JkyunHx5F8pN12FI8w8bGHc8PT0RJ1ik9rOvWz0nxCgMB95VK5Polaw18USNfn0UHraSRdJnNHBkkF5SbN2X9q+afOKw15+MFNFUel/uuowT8EtX09y1P8gBRS+vTMRblU3v4j7QT7RX7r8bqNa/+GnQ= -nrGCUtZXO8lhMUzpsw7flZ91P8LuwTyQc7ctIpjtlcUqrrpkghMmRmtgIz0nrzEEfUfHH35Nsi0wHH9irMek/0ac4bUEQRanjgBZNDBP3rYTH8w7Ajd/zLhkn5Lrf3fEix0w9W0HBV/gva/a5Ouvwd0HYrV03O+i8wuB2Jd9v0Y= -OlA3Ms276mZTcqwKAwXvu5EFP6wUp6Tc8bHeRGfU0rVqmQmrCtwmip5nduVo4ES3udiIu0L7M/8b9MUtJmlbHDqsOzv5vyY0QIXUaQUTLZU= -8p4c/a5VsUSqHSeB2usqZycD37psYBNkNnPj1fiVTuiZUqK/y6FMbycxnb+zen50lRoX/YhV6BJMwFCovbBDPg7DKOmmpDGP9t0ikPTNI/auAuJJoqD86QvppAsnl4iY -KE24wbSLDn1spIcZwLIuO+B0IizzYj4xKt5JChRY72ns+cwTPeG6J6a3IwwqXFceMo+CrRvcoX8bXFoznahLhw== -8lApj2B7Plee0WvmT7TeQp+gJVvFAsIP/JC2C8RasjmndPKNXehKIrKd8oQFJw0AICRsi1vVOziDdgnInw7ZbLHXjmgxEaSanOmRWKVaW+k= -2Poxxdy9o8AvAQ8T2zP50IWtw/1ESBKlEtSbdOmYYsS6yr8YAomiJQwVP+k7Expq6Lu80jKOSPyRvX4XH91qbNTajCBICm9G6EG1rU4tidv1Ji5nLHskR1kxeeyV5JIc -6I/H1Zpit1TSo4efV6bxh+qs8BV2y9sBv9FEAqnH3/ZqxYg+NDJCpT8u2pIoCmXytfZhPXXeD48qT3QbAU0Q4SCBhinazuvJgDCcBAZiIOQEyeYbiY/bJzKU9DoAVQqI8Cdze4vBmc+XF+dN58qLLg== -ztzuq6nAH2ogL/nP4kxvNxCxLpdYh57+FTjjNfzNPkBbBxri/pKFEgGvP6KCQ5Vs4QwY2otmjZ4K4dauoTYR97j+ZR7tXAi9zwKJ35wbDbdQqiV+XNbMqJu8PXLXYQCH +GQ8bP5FSB8U92LYKcbOqVPtrzArbXQw92sj1bGuzJ1Lzc0ykynAZHg7W7lIh9VCyvuy1xx0xiuBt1I7P54NmCaUW3qDO4vDEDgNnr5tx25XSIUFK36ly1NPXQ5cKhTaKKY2PuFGUIRTgJLnmHKZ6rtPsYi+er0G3oUSurcYq66G93KMSGhPVmdG7uQgrHLXK +6XekAdRuN93speBaqeGdS7mZ+YDSAF/1X41AUJfffwgDxVBNvGTIh/BqnzHblDVETVM2BFXYuBvnidONKvswirCZuo0YQqzXk485DTgPNgSiBUJ5/nEYuKWzwRz2EtOG +Ct7YEe25Op6jhkRit6HXSSZJ3/Z8e08T/asIJPAS+JBiQpX5IzKziQ+RX8qVdG0k+9VGrihwDB8QzDbpynegSHJuEzqZvOxElwonvYKnuiVUtl+f2wJMEiTRiEircAwx +hTUqYvcYvtmpKOewm481/B2gAy+jMRHpBaVo3hgSQKveBpZnfiaaQJqEGz4dQRAAoPjrnTPmwEfa7l1rd8HfZzlAdCR0t/W9uEcsNGKx6MG0d2jkDJ4rAO1FziKue1qmOXsASal1BUZDxHrhKiNRHCwBZJbIynrRvsIobCUukE3StVBSHzOKdaHKmqmx9tbYADLWwDPHuc9cy66EAab+iA== +QP9mdDvW8SzUpgVgx/NNyzURUe739RX3BKG1zk9v1m9OoIZSjGWvo6TXTICotvLRyN47l0S5jee/no3k43ZcyYj4NDyK9SfULNV5Ue8NAomxHgu3TI04bRLG46iaKeEsy5eyzqPaKh+5YmUp86Hvmw== +mtgwn5Yb9q2LR0oKaA1GDGzUnuKiswWHGPJLIW7Z94LJ6jbB6dPiTTmdxvdZPsw9HXYUfU63tQS4wSQ0DT/6DJFK9YFJ0k+uVF/aKFvTk4G68cDx8krNRycMx9x6OAft8PyovG84DWSZ6JY9rcyOA/tAKRvSucrjXIlaMrgWnoka9rV6eMhZ91AwjWn/LiGSEaU3y877c6zBD5HKWAY3ng== +h7WP3qR36zSTaE0s/+p3hNR8gUCbnHBoXHja860/I28CTjTZMZtfR/i6wtPd9+H+tVOAO3vMWPMC6TSdpNfmg9mUvegPBStXYHNFYCZ9su50zoLb38qvVopNPNzvzO48 +/P08j/NQ3V/6NH/K2OPqHWlyWl4EXvanxIbQ8c7n+YyvpULRsx5XGnzyqGhBV+ggc3K2tMy6nJLzSTn+RxJLT8elmZK0JCAv4Yi843hNPhORLJFeMTlnOu+FD/kNqeDg +9t7G9KsV18ZPeHEN/on3FgfIOtcDp7MSC6+zZHNJmL1ErhPMhUeVzC+r32DCXMZ2bLaZAaaw+Ue3cdQ7xDbDLk/UezxUUOqEZ198LuXmfdI= +DFIcnybg9Q4e8lvNk2V2ukKHduLKp+1+NRk6KQLKdGAdTIDQfEgpF4nBNspzZA4zk/jwJ0eX6ICboOr9mk9zoiGYAoBCfGurABtBdeWQy8yNl1mn5cYS/d6lex2Bbh1Ff7/h992heGpBWV1brS5cbrQgpn+cizoN63XTQxW51A43DFVH8p5TBvQCqIVkXE/x +gGcZDV00xmqUAj0qEkM32khpLy0P6psWSCFAIiTs0WP2loBUwlZXSZX0guea+VTAoi3t2h1JWwvm+CUz3zM1bAk0ac6DWeUqQa5Be6WyNL+s953xKFLMpFLrymsRbvng +fBUMMACbLfIUiv22DBztC9D4tN7oztrdPKUY/nUgEKtYdKSNz4aD5MTje5Qzj7ZZvQqP8jyAxRzynAY7aptmSDO/b3kAanky+I/j0WKYPJo= +KpJ00HDVp573NWedwG3qjFsnRlLZuWdGn1bjY2FHIlJpVPS7yXB7PVTpxESTKaYFtjWzV79CkBkLdZHbC6Jfihikl3FoZV7SZZ3bDSPRYWY4M9ryIANA5pveYbqG9dVfrOOj62o00ztx1L7JT79ayA== +NYEZAf0CPJOvudyjBgyMzFnGayp4rwbm/gmdXXGoYvTf+uPLQhf8/VbVKowzHqpf6oBxmQ98ZJnQQTUrNmoEg2ksFgIUqVGcApPTmgvNmbWpjkbUBefYo1tt+1Fu8TZ1 ++wBlhY7T5u3USVjT9x1efC8TgTZeldB/Gm8A6jOghoftvOsZOwZkZ2waSc2ajCEuBXp0W5TBrX+T3Pp+K35UEQnPeU63y38FyOjEj0dDRVJmaoPB8dRsbb/45NGls2LT +vX3aw/VpCn2kdUdQ401ThnzVz9KSbiqiT6L++1PUtLCWNoHXu3hXQN1cFaNNoZLthyVfc4lerj4Utwy1nf0ZUwwC2dofbt9/wib3+yDEtPe89e0/DzgF+YLRGw4DlTu/ +Rwr5WRRWJc49eH5/ngaIBiWYeyNcMjokcXjDWWMdBpSIilamo2Fp+LRai3EoItGRBojd75Ni5HkAP7fUIG3OnAdDxcuE+aaa5s1t7+FOAzI0NY1gAYekmIM+ttiAdBx7n+dCtiM+T7Rlch8ugr04VFCrp8D9r13gtZASjh1iRPEuAukLA2FyiJmHdY1d1898 +ZUOeDkg+GlcyKcw8Uhn9GpptuCPU3ERPnLdpHj8ptZO4bq019KMgzmrvCrfcWN6yuw+oJpxZAgN/aqSdVvb4S86cLIbl/YoKv656p6ZlsbH1JQGO2oipFeYyZVcIU3KIDcWSbr+DooVix4xv54BOiQ== +ogK1joGXApEMwUMZDKuBPdSGLgHFFcxw7bHRCfBfUkLtByuf1sNhEipb5siHtVr0EvGj9yULpMg4MezflXhVcWi6t8JoHQbc+Yq9DmZFduVzYK0vI6TNbGogbL+WHqG4kdiJ6k9el+q+hOgCEN0mLYsrEtIXuwNXFBdsI98w5TztFgf9aKFIEoT4NzmpZmqN +kHKnlmRHLSoRZ3FlW7VxUJBupt4XT04mL89VUW50sRc7HqVdETsO6k2RltJzzI/+FTxbmrqKRHUVPT3YnMj6TTBp10UjvyvrgzP7wRQdzMtObrPoY7QwAjjG4s43bJiwvCFJHvPDfzU1nQZgI2bd/uf9mGajvCLTTxuzwNZiHk0nDrcOjn0rBSZyc2vyOkUg/75gcN5gC7GWrytIHP4I9g== +Rwr5WRRWJc49eH5/ngaIBoyLyhNt56NkXCLLrlEfADufGinb5xgGRt93LjG5NkXjuEWT0WbJcR8KN3ptvEd9rsMPQ1trHlWcX6LsD65CN4XZJiP3sY1V4hsq8vsDUke3 +UymC8Fo8j5Vfm3c3mvSqVEWmJtt+t1pZSgFkbiEDyf4n09yJTjlhyqt1CmRxWvF+6JSLNR5+My0ikLzudju9fkTb9reAnS2IfrUU15nCHAHDmKai/4yFE63sPTfoytfW +Cqu/R4uxTK+Rjxynhwj8CcGxdReiN87Zbp/B2NpgUwdwp/ToeOpxZMbo0GlfQYQZt+U6g8pmOfPQjaSdGMdn7/h2NpBzGT+acBYhX8pP4feg5M2uicluryyV/5M2eHY0++s7oPIyf3NOTSQbK+x97HqFANI8XfBctJgrQnU9hqg= +hsSLeDBq70w4vj6GUYkiYWbQ1SEfQJifpWN3ltWewf6pKxd6q5YKO738OwkLNoKhUryzlqGziNnfIKNWlhcksFQfdjAmS2m7TaJz9eEZRVFP+tCVdpxRw7Y29u6DCvWB +yoNfTnPxkT2ArtuDpRb26cLrdT3Bo+KHeu1JeVDwOnweA7XgtdBB/9dRI0uxcn7iLJGr2j/RQJg0um2NVngjeTFNAd2Nxlp2u0tXPYqDvVdsrLSGdXVJoJBGBC3ZYGGhq3ksqwZa6LHWNb9wAy8wmg== +PEQnpcHCCkNy3Q7rsdi/TOmiWbpRyLRseFIDx+2spKazdJuhs/+uDBj8wvdc9MhpV+6m4ZT0MZmnVQ5oiCV0MPqwB+N+wgQ35xV04iBSma8= +XCHGYowgcWiXCPE3uFJ0ZSR5Uz18go85IuhJY7zpq3CMFyZPuFhqJ7I43IjqNAceYFaLuUSbW5iUytCxQx+Ia/mf+cIfCF8mLVi2WRi9cyU= +ijJqnkItaijg8Xxs/K8JApwvsZ5ecN4rRrrw2JfjLPLvKvADxIlzkjdPnp69fPtbySPRia+pr1fZjjlAnio3PFgkHfqMhZsK0URrRrryHgA= +U31Q5qsC0ZXwyq8Zvtv34z1Ba3YU/ecS2sxr3sqLwTQx20BeMnJfX9lQVx/cfVn7Z5xKgVvIxwNw/xtA2+3MIdQLKR4FBW3VAl4XDuRB4d0= +Uma9eTOXwECuwd3yDyjkcR9I23+cKzqoiqLRzT8FUppO9WICRKZNcH6Q7MggQbNLV3FR0K1z1fsr3D/k5R5Qpo7yRdc+LUqT98g5VGeo/rw= +fKhgtgnW1lEA4yy3gPB94+p7v3t74sapqcyP/rQPPVjoA3d18Q+UEJ5kgiIfB0DFp3nbeedrlIb1j0SnSMk3y1FpXwtz0Y0NER9JMSDWMus= +i2sw6+ZuogTNbw/oNKxMgUvkn0n8v4FkJ/2bKCLZe8aoy/B5jqArPh/v7b6saztdaiSSdLr0WAo8U2E5Dm9kFG3WZ5lzC3dJVqZ6RVQEp94= +F2DWu3kKh2SE9esMcSzIGc4xOKKSMsZ2MjADbIZEoC+nwJ/1gz/yZ8VZKhnUZAM3JzD00ZeO/yiA7Ml0gPY5s+SzSFAJ412474EyoHYI3EicTH3rBUEA2p4+RBdxjX18 +oDtnF93s1JkfTVQ9Uzfoit5WBbfg/2dkYfHiF5Jp4+9Es4TOefSqMB36iNknG/AGxwFAQt3k//c68+EQasjnPaNighujrGPsmGRTGPc9btjF4yzyAEJqSErk2fi4+ocU +JPxDl53ivISpEUZ+1kQXQYStoD/ETSQpdruR+W9MNTkkI1S4pPaK7cr7knfqQJu+E/1/XF3RoBPcy3oI7htOck8B08q+IS/nbg2Ihz0IoxW1pQwGHsx+eUr7CWaaLyrI +RrtdXHpDf8ftCQ4plQxw0BMMA5e1nP5W4Vaj9/8+W3IuXnTkeiTKaMgBmBBuU8VTPVbpyatpCX9blthHwLwZC+gel7jf4yn8IwM1qzphreg= +c33sbT/GTUpquVFIngMO8z0Yn1dMlVx7iRDQ/yueBvCyaVgWqKeVQh0AmkKrU+gO/HW3IRljfFk+Y5XOeC3OutHvRUOzrSR0l25nLYDmOPNa/73+TmTZ0EGl0wILkLQmkYZtcopP7X45AmlUQDQWng== +D7Xe+CnrKuTWLm74s5CdUAUWv7SGTBXfIT29rQkQbf9nsSpb2IfEf+tOCwkbyppzRnFmmtIHyNZS4ldxDJ3yE1c+QzxXWMVe3N9VKn7TLCXpr8ox2Q/skI8NEsHb1Uh8QG042FNRLNN7e+uubpZvBw== +t607yNsl+Xt4IUZUKCdg1xRyWL6KVJX83FPBFHh5HrSDsSijS3hPAB9rBOv4wGeKKiu2cyPuFUz1ZYxLZGj57O6b01VwaEb9RfU0TeLfy+Y= +v1YvZLHufhLKFxIHRhqo1+DJ8wcXNMcFEF0n3FTdUEZ2Cyt0bhS1aN3civKEWro7x95aEpXY+VUZD6DDdIOobLHDK/b/j8If6eHugs09Gaaw75nMwFOFtnbbm7QRAyvI +O0mtTdlcYfDttKJPtVyrjTGmeVztDO609AN7gfrrm709Ne7bpp2FSTU1yjiGj37ksSRbsBKE185n5e18hNsFgIoc8a1/Zj4bZhXkYndf3Zo= +Zs0AOqbSh/pxVla9Y6PkDBoyDdtreKPUioh31MPp+r7rLF6jQb7E3v6muvEnhFswuDK/bfsFLFQktoYcrET/uONa/tFM/1p85MVN6eTq2E0= +eP9y1UpA8RKgKDUIdVctvxt6SfO2udTJKtZ40Ec8GfBl22AMR1QcCpZV3TCmSsMn6NbTKzCy5howzFiw40IsYstP2TDlgmlY4yAi49eqigye5YXawSvMChtpEXA09O1gzaXTL05KEl5s7qsNyxMRKHpqV2x5CTLpHWFSjSS41nQ= +eP9y1UpA8RKgKDUIdVctv8UB/mEoz5yQ9XKRlg6M7OvtPwcF03rooWWJoHcoA8tTJMzdmmQ9ESFovKEf/X4rVCvMCTCIFP+uC/i1imZBWZazEnf5ooXwoXAcxTuvv6DR+7vuh85wl7FYO3nwcr0PYPW9EG5mwh1C1k0gr3Cd2Xo= +jlyatDnTvJkXgFSCTGo3tqoOpehCgVicpMJfLlzv1/JOtr9QKkpLF1ghFNMoIR8Pep/tt4j9RcQtvFJ/2bDKimkJtB0etYW7VgmtAQIpnUc= +ECQx4hhql9YPrq7JsTDQaAlM6F4zVv8Tw/RZI4P2t/2Hk5fMd3ZL1v+qHEa6yhCEdLL5EfWX31sMlPrtXNV+7cE6MN8Nftgoj0L2oaOOmHnqP1+ywkSMT5XNJWmCHZnq +yUEvl2lmwCONcgsqq7zSb2k3NewcezrRJ3no6yervz25SBqLh/L5vt1gN7cQEiuCFmMB7BtxxCNMAVT1HKxdFCpAWiSnxnOqHvF93XVvSr2SOKG4Gsgv4KhivkFthJcQ966++8FD1B+ZbNs4yT3VsA== +u+YxRTYN8EJVeuURXtdcZsZ2ptdhoj+rCBDm8F03rutnidwKxgqla1ky/CLd8qMNMULUC2pcQeF8FWb4/fsZPxCVJu0efD2J7+p1lI8K7W7MQehYyJyGoQUbJOFjle6F +AS9+AURcEG1BucPfCwzeHSyQlurVorWcrfzdVLZokec7ORdvVJElDVBfIcaKBR2+9Wd5bS+uUuV/4rkF6AfaUa05XVTQXlb7G04FwYNsGGvcDltpd+EC4j9SrnLiIfUB +o4QTqehA3AlJXkkcJZDUJrhopeMAbiSq0TIroqHSh7dVQvABDgwwckhs76b6AN1vxYOAW+DVu+9EP4BX23ngUPpXu0ocX+lPUiPRY+ETAwTBe2LtIYKMOoVOrfjtaO6i +GH1HhyXKGfEMcZXYE219kF1aFUMeR4mAKOS5fawyNlDJ2xjN8m9FT9k2AbFt79l5e7ED9vuZIQfXQ1Snzzz7IfFCtAEFKDVpTCjrd1v+YV8YCIeMs7VmiCnQJQ3AZt0nrSdLqCzjiQROE+6FuEvbDw== +yL3V7JujJ3KF9f8XtukZsWUIpdoGoLk2OFOnUnmvuxx0hVCg3Jwyrz8SozLoIHMHIknqKbDwyTkaIKr4C772Ww5f+ZrKTXGO750ax9EXfP1QTv/A87Z00+8ItT294XlLnuyx2r9zH8xm8ja4W3IxfyJ3qfn0pJe5IMXpuTawmepxEUzGKbtU39xr5hjOLtq4 +Optb+ZZvcgzfoopw/H9ohY1ChpT7C9yZIUKRNPw6YMkmH7TRVvBvmHzl/6ObKz/yF8KkCzu4BeV3cKMRFTdvQJZcb65V4nyIye/3B9yYjZKdG4Z1iR48QWRfYRjD3IEO+ThQA77ourdxprn5Q2DEJg== +1Gt/p2zFJnwB8mRUNG4E2zbSLoSc9+RkLQ+5lue/f3tLh6ttDbXJTeoN3M2pQQMpGV/K5ujG98Pb9KAMDMxCey9vdzEEzFkssSm5X+8GKMbDtl+OgOWGt4/LDsSTAU2w +iQWcT+NnjKoF31XI9cw2YUWxCU/MqUMgv7dSbJ9DhEaU3k3lTjhLIHlyWiUe442QtTEjIKrWONxKh3AZ9IDA1fwbAWjRkBe49y0lzyQa7fwkKVhd9HRBVUuBcMrZpasp +IXYtIlQBIioKIAehYu+n3MWR0sPzErS7p8wkCtKP+yRhDg3dRpqO8gQUNlzRUuVjvDrGcNP/5kpu06M7TbSNFlH99MrdISsd1BrvGLuFTUd//0FqcLxLUrdKk4MI0vZ38fwKt8GWqqFXmu17gvJzfw== +Fic+PF+8pyenEu8liCSk1cRkOB6KwrGNV5y3SRud9MhLYEGoSfOh/mDo6CzkAlGTRgysKDkaEOhg//MhPuGwetM3ndDGG436oZ/yayTKSe39+MqPWYXeF4G2ttNplKMdgW/bZwstFGBWSHgO8vR/tA== +XjBVJ2fDvhqj13zHSPhNq7iBZkEUQJF9FNgsf7A7sQX0BEsBq5vNz1vLJT5/hwfdf/8hBnXiBUg6jnZX+nE+UXEyGAEeKoG6zt993Whq3wbVZEwYXF79/eE8NzwjXHr9nxgGroeCUIhDJYTfocjyvx7xjVMTPT1BultUGewKumE= +mb5ArhJqY8U7Nhj3n51LRrhnK24VdqncYSGeTrm2dQIxgJ0m79RtuX2d3PeS5O0HfG1vvZJlLPEp84Y6W+ojuSf4tFM+7Z/EfSpZDlpOdu2ZOAT33Y87+4/jOv25cTxxC3o9EUrG0uEpBmcJTEKCH1+ETzWXwfylGaXvs3m9D0M= +eIAbDBBMnbQNURiQ/SQSj0Yr6NsZ1YoYvEDZf2EiSRgF3TWp1Um5nhuZqvLgw4qh3ToiYF3KF2/sdauu6FFXPCwxsNmQWHZ0qmw32QTeuXDUdNYXLlHgGeRzdWN+bFcWmSJebFhzxhit7N0IVN/0PQ== +WMryAG7s9FKjtjrG4x+ATPog1C405fm1Xt1n5xvAlYjCFA0cGsE36OyBVzGhT0eQvS2I0DltEW73yNtF0HqjlPxYxdp8FHQ8hg1LQ8O45LJ19oX7U/FhUYYX+lB69IdKVUOJZtwHX0hWIoUVxSIjJw== +WMryAG7s9FKjtjrG4x+ATFnfe3bvAr3kkkamwUt1yFIzp5VtpBOOJpIx6U+IEKp0rYFXe2zC2eoCj4jNR4XBVMsbctF5m+kLapztWFrc2hOWkIsXTN5wgeykg8FAmSVISho2jo6DoT9gxYOVrWzfUg== +WMryAG7s9FKjtjrG4x+ATA1XxevnK+neTT4KR3WqQSujTrBgKVp4VDYMGIzpZ+WysHJffb4v4B40VpOfXse+klURG4mTvLdsliLSLKYw24hZa1xoKch3GLWBi9MlIn9qMirWPyp+0cIDFNYqaMWA9g== +WMryAG7s9FKjtjrG4x+ATCyXY3m4S/EtR6O31JSeR089qxbJDvN9eg9kh/UOkZKSbA0uIIpOdunJqgF6r6cEBe/UPN53oDqHkx1gkOhcaQW9NGvystoErhK01Ew7Yoo3gxQiqP7C2PoXMassZpGPbQ== +WMryAG7s9FKjtjrG4x+ATAnP4pgELgDzZsLJO2uCVOMJ2rX0tNBOTYoEqc3y1sAvPD2baZKHaU5mebct/cNiGdiuKef89Xnuj+Cyh9qye5AEoZX/wY6kMhYr3vH98wvy0MC6dDYgvHoxUaeSViqJag== +WMryAG7s9FKjtjrG4x+ATLxzEfC0e66mOQYLQZCydKb7/Bwv5Nx8nl8TIRZYwsRPWxEQd0z0/TkhK7b1smeCcQ06DBuSb3o33ypwyepQQtvIKoo7zB7mrLaKfrKmwv0NDNu5OEQ9j8chXroPrZzIqg== +WMryAG7s9FKjtjrG4x+ATLVo5dmFqLHUZxWx44aQW+vDO8CjfE61W2zzbSSoHAzMuc/8XJ0h+pemP0Zauta5OtL+KYE6xkuJXHpNvrBe5BZzVwhYpgvVzfQnnvHj8KELF4MOFofT8iykuxXvNEtM4A== +WMryAG7s9FKjtjrG4x+ATOrN9XCR7WAa1G4HP+VCB6pUML3E2tCAUIfzF0G7uf3wtIIyFL+NH7mKnCZWTwGPFD2sxynbPRCbYycgD39kDVM6Arq+iduE8pkBafIMuSZGVUrnU+sem4kD7Z6Cp+NTFw== +WMryAG7s9FKjtjrG4x+ATM/EbaHuaIT2sybliDIfD7ipApjXiwYdmUaEVEn592IvgZ/TjFlHZpZKM++B0V1PUfblMEOZMLpDNfSsjIWvPqIxpS4MxthvKI59kWWeHf2QeefUzWLy/3av86XPPd7epYqwyAYi1J5kc/x3Fuizcr4= +WMryAG7s9FKjtjrG4x+ATAdl4avdl+hip0KZ+75VAnrQV/Pk0SyMPFwSHkA5XpNjDbTgiwCWiqaKg83iNhOHBSao7Eqe+Sf6A4dpcsnOZBkvVOlVs9WavhfGVgFeCm6xZZUh2OYvCjYNardw9I727A== +WMryAG7s9FKjtjrG4x+ATKR++QNc0SJWmG2pcTkqP+Yym7W6h6lBj2/RCffuI3zv9foH1AtBZPly2+kYRUbEDKZCAWkFalpi8lOBCVw7htnAj8EhSelqEptZeuAv4L6TPsKHhG2XzzaT1XBpiiRWGg== +WMryAG7s9FKjtjrG4x+ATOcQ0lVkg1tu+xrgjlmF/sw/7ZhTq3wbjVzF+83ivPECEGybWALn7zjX8ndJRILJeUDtsExnFS3JvUVAH8LwxUk3Ya8iayIX/Bbv0lDF1WkXIV97RLrdY02ikrjby3YLOg== +WMryAG7s9FKjtjrG4x+ATKjZ3EBOshBqZzeSpOExlRp6yG5eSFvlCF+6PNaDiFomCz6xDJtC4JM/Fi4wEjAv7wQj55VfTB1Ol/TmsBaFAkCOIYk8oPnNpdcLhZQx63SJCd6gn9U7VYlkUZG5aPSKbg== +WMryAG7s9FKjtjrG4x+ATKqF6F/kMLWl7MmcuE4WEnM9lR7ny4UK/o3qDmMDIE0O6Bonm+2y53Z9KbjBXEZ+RkUO04ycR9E8D+QnU0m3uUQPbpy+QLbqW9p1GN/tuHX6PmEQd6MERILwZdZAfC0HOdoTU3BjbCVpN74G9rmUXMQ= +WMryAG7s9FKjtjrG4x+ATHhx+e9iJHveIp14i2AXXRD0axBAl5H4MH7csDRkFoX4C9RdetdLTMDOhVwOxhxrVmFbrC4TBebc2RPKLSfjujvZJJDly7y/mb1sCiZjvjW+AZ6CVfSMBKd4Ji/6RW+FNQ== +WMryAG7s9FKjtjrG4x+ATKRhM/OV8bTOVitaG4JeLQ0yWsEftJ3GcewLRr3nm/5bR+JRG6dI1Cg19riN6g8T5kT8klFyTSdYidKnqVdAd1hSDF4vAKGtigvVRqM3oJTp3YjQ1xDxAYZuyvpmg2u94Q== +WMryAG7s9FKjtjrG4x+ATMgv+MtjO7FtemUMEZb9Foi0bRZ5pcIcaW6acSF6SG+shd1rrPgTaq76Pv2X7Gn3BD+WOzqN4e8DvcDLqKoW44S/07ivKGHc9qda+60EKAr4eVfJSsYZzolbkFpbSyPOYW/1TPS5ibb+1d46+ifA4NU= +cW6VfR5aZO4LK69BZsjV9SxUjt/MnXoypYW/bVlxz/mNIX5ChW+DYZameG+mYXZVRKI2OAWlmfMIWmWMkFmQiNfyvjiFQkFuebRkmUA1fktfAs+M98JPG28Yjiu/fQMlpvyJFaU8ct4XD1ALr4DsAQ== +qXz/P6tVzdUn0oeNwT5P5CBfc7zRrghQEZkirrMG/VD5bjub6gKXy0xN7fIi3LOsKQKnS9Qf7CrDFY0+ttuEZHx8sahK8uzOUc3DCsIplYYyLcI4AnEutTAl+8F7E5RcpnXz8SulK2F5gDSTpNm4SQ== +u9mvWPj2GQyeh4Qfg/3JkzkcrpDgLlOJEBoMNugmQBbjsaU645p55+WJepWfYREIRRqhHhEFaZZCKeNVMA2QlrrXgeBng+Bcbzlmn7XwzR6hJHZj4Co0BjvqS5uU+A5Roiuwg0iIv5z+VMxJtQkzHA== +u9mvWPj2GQyeh4Qfg/3Jky4Bd3kOU31w2yLKJ09o8yLdMoqd3DM5zFfSWAdNtP/vzt6T7rObb6lW6EeBkN8bp5TmV8lPBKh98EpJKOfwZZkGtzchQpj3PFSR2ywoN6+Zm7HboeIma6xn09c0RwvcCvTxx2gqs3SAMxpd00umwbY= +u9mvWPj2GQyeh4Qfg/3Jkx00sU2U1ZGvBeu8amCXI5AT6A+0k1+czFbLwnswlt0G4USXxxB0lO0yu44i4Soj3oKfiC5dukqrutKOqHpC0YkqriDz/pSmwbO39/zmqr5U2WilDZNGdnTpem8d6zawIsFeLCrduzJNIL5MAn6tQbA= +u9mvWPj2GQyeh4Qfg/3JkyRCRAJMAJvtbfvFd7l/SWLesPY3fxfQRvTP0PbmGFGBvLfR0mixfp1OL08EJVYQHg5FKd9TyEWsiXE6QdWE/nYBbWgw04CIRJ0wEZ/zX1kuPu04kBMAtMlT+x38RkBi+5usZSu0BfOcMIHHfYMsHro= +u9mvWPj2GQyeh4Qfg/3Jkz7SQQdqLoAFc94oYfp+FxhcQ1THud/CbM+LRR1Mh9+leHCqR3bQ7dlbjB/OIElegvtzEDT57QfBwIKwG7AN+rkh8u1vgZBwehhva29Uqkh8QiE5WyXwMt9rMtyXospcsBaJlIqhUgAEfPjEPA+qQnM= +u9mvWPj2GQyeh4Qfg/3Jk0UqyFHHTDzAsP0rxPanWXRqn0dyp1hUsDhOPtboJRV5YPJkf/+IvtSebxyPejd6oFVLTzjaAoXU94Ugej/RaGvwJIsZa8eoL3K2MvrtQrXy+iI6mzcOABKfM+rUhGmkWEaHw9oQIC7aiofE1D92qhQ= +u9mvWPj2GQyeh4Qfg/3Jk+BtFDWjnVVOUiwDkZi+vdCSaEajuMhXcFmZ54Yaw7W3Z/BRoKqb258rsNv9B8li06e8HLiTNWFvqZshxoWGx3L0e7J+YWebWzLrSAy1m5fzRTy0IRV+dUgFxLhpFmhuGiqMDCuS54wq8RLQVGG3ZjM= +u9mvWPj2GQyeh4Qfg/3Jk3KH/QIyfSGjQj4w9mmg0uM+RyBIvcnWiWkNDs19OWZ7fzY5Df+I4zW7zlCu5x1mt0clJ8FMzLiOnP/ADFURy8tRqvYhLLMeiMyuPg1oqzhtaeq5O2Acvg7mGAEfAPAdx3LMIurol3yJfH+h6tDAILk= +u9mvWPj2GQyeh4Qfg/3Jk5hXwW8yPsX+tYnOIyiAQDla5zz+xqOmKnNFldWmwyLssU2zBCuxpKJgUd7ZvQdL9jWrxZGhMwgtS8NFdO8nNW7uxU2w0ghg/U1S3UF6qfEcSrqsr+Kteoja/pRK552SiroDiOi7SzuemSjVLa1u1+4= +u9mvWPj2GQyeh4Qfg/3Jk6XzYErLQRL1wLbMINJRJVo9D6rVzmMVVVu+Y2Us6a09TUPTtdrA0BwopIii98/tizm/Jq52SMt43TPSXZFeypk+/e+GYxzOP7GEJq7Aw5x+7LNI5wpwXjzA2WicwIb01OQsm6hqECYMs/ScdfQlzBA= +u9mvWPj2GQyeh4Qfg/3Jk+yBwKwOgMlblIFRFdN+9HSlWsQfutZra6rWoV1g88c5dAmbhPuDrwUuHm1KKl1ZsxjOv/hpgP9pkAeRs8gesH+yKpx0/X9IhGnTU9RnALGra7lxIFjb6F4OAlmDfyQFEw== +u9mvWPj2GQyeh4Qfg/3JkxI3FsCFY/d+zw1RFtJNfsP8LidhsWpWqJH6CQlRkEFkqXeOd6MZqrJeVuNtJJMxi38In4Px2yktNZv0sUt19aN2W718QZXS5HiniVEy9RXmy5cBMFs//WiD8H3952J1HAwleoz6iYcA6uZ7GOg+eQ8= +u9mvWPj2GQyeh4Qfg/3Jk/4Xxo+6RU8qO11KZpuw8Bj3xXh+MswudQYVFrMlsZd68p7FCLLOgmC1XG7QHw5fWC2fj3deILkHBUoVleWQEMP5h6u7no6EYYHuAlQYzSIIZ29vDRne5V5MDrEhX8UQok1Tajr4EnyRx/Y3xUo35As= +k8mQATL2QGzdHVb/ZqU0sZYQAAFAkuwNe6+V49MS9RPaIQ3F6WYZtJsZbjOTF1riDcbumyOX8wAlKlFF85AnXHFdKbn1aqD7dIetJrBSawVMrWhgIH5qOFAZK4uu6mIaInDrsy/ST/URUpQfUaeP2w== +Optb+ZZvcgzfoopw/H9ohe13bm1+gjT8aNU6oPgQ11YxXN+7kG5tT4GzXI49TDTNTT+hoQmwsjUKxDT/OftW+FEN6qSzHt5qG2emcN18O3kqAxc+hnRDhEWsaCpSrvvGbP0gv1UlYhe0QZ8bA1qZCg== +O0H12djxOPpYv3DI+nktXXGbcH2D5gosOcBB6zW/shlRGVmX2/knoXxJa2kTe+JaMDzO3BsRyyycPbJj3sIZgtely0slh6zhqW4qRNSkYoRrdlmbftN41Y5Nqhu572K/1MLZ6sp3AEHpFNu5GYIYiw== +L2qllRaufT5w7PPs814S6j673I9K6BH5b9bZmq+H0757+HdQwFwuWEFTD1zph/WjKN5K8yzHGRPbbPYcUNI2tRhfDhg1wbb4W3G8z35kNWrxpLIlTJbOKd8znxTs0QqrLZaB5UYQczAi0WGkT8IIfg== +GCa+LjTuIcQFdoFSHacKrm5GObgftJ9pp1CxKUSydn8hatMoPQwE0Hu63+zpUiROg05teYLNfYmL37owPW9YUtFhfT9knTX8oVD1W7SJ37bJ2W0CIZ48pHEuwSDgMoRLc8XYqmh9LxVqh0BuZk7kAQ== +tp5g+osoOV/pmK+tBcXKV/4U33+OBFrmClQ/+8K0dCns8RvW18UJsmL+B6smD6679bAO/fP0MbAtz/Iy2MBYABfU5i2MaJjA3Ph9FRh2ivZbE4ZtINqBg09yhlIPOeZ+SFS27bDwsyzbSGNGyZfYGA== +tp5g+osoOV/pmK+tBcXKV9hLL8C8BEn9jkAQJ+zdPFChaHFUki3j5xsxl8sKLqiYUzpXeAfPel5132uwmxJxC8BXL5b3sjNfLJu8yhx9OptIQdG2uMCRlVpgQuJ5mMPW8ilGmvWeS0ch/V8vBMQHao/YtyKPk6m0yOz5sFS4vsc= +tp5g+osoOV/pmK+tBcXKV+sbhcjFMSWD+oNFiFkfpEHSXLRLVyJuomLYG1Lv9S5BMmH3K3wx2fnqxfnGYjTs9HeLa6T+1nAZ2b+1xEuUerZ/UnnkCdod8Uy1pqSziHgcFaYtB0QzHmcS2F78QtnBzg== +tp5g+osoOV/pmK+tBcXKV+3nkvNSPZsmRCiIYaYDGbqzEVPn581qjusIPt04xl6LS+ulR2NU4DOE8/1bRr9KuZfGhZeYIkOviody2D3ghuN2zd9npdlmlgh1f20VvTcnZ5j0DzIeFEMHfJYvF0HBxoptfGtdrbVZWYGfJGGvR9o= +tp5g+osoOV/pmK+tBcXKV88ia1NkpCFa6GRCpQ3znnPmN92aiE0EjpOOB/1xL0X+q5DCNXOEIOEljEdcGFbApgNnwEu+tY7Mespbm5PrmFiJ8rdDua0P8K7girdTT4/oAOCtt1Bm8uy5S1G2oM7+0g== +tp5g+osoOV/pmK+tBcXKV+0kNyfVosEvu1R5eIdu4mqNwZbA2Myj+QXP1pJYLAT3hdQg30L0Pi8F68dSEbu9WmAwBtGNzQTcKhvl2r0FL34UalbRMZSkmX+LUhX37IXbIzgY5Ro69oMmXoZcXoFK2CBGTZmQcrDxKT+DmHYlUVg= +tp5g+osoOV/pmK+tBcXKVzlUZowPFtY9tAm+swCbjYnF7nzEQOs33zWjZWpi9d1iPSLUMiHSyYkwI5r9oPUvXjd5m5Up71trw8e+GCpcPnIoVSWOz8gFH+5O8h3oHkQ8kzMUFXlHcHInWE7pg1fWXQ== +tp5g+osoOV/pmK+tBcXKV23o/6FCCKq253U3hcS90I1dOpB79LhRBSf/0Wk10bYWza7Qos8uGWB4XfjE/zmgXiQ5ObQhWlAg+zhSOSBb5uRnP0DirBpaCzXgAiZyjRhOHJXf5maKlz9K+8Pi6jSdHZQOkI9AqBupoL1mScSmi7U= +tp5g+osoOV/pmK+tBcXKV5NkfIfu6lyMg9b8khIrQtYNAfTz5p19iFjtaIUeA1NIikbXaN2hgAjtNLMFt9y3Ws6J5r8vjpZTb7VxmD3PzAlm2JLX9OIlV3A+FmBqHRd8E3oIT18TImcfuPK20d7JFsnLhCoALs/WCb+F9sQKV9E= +tp5g+osoOV/pmK+tBcXKVzTZueI/mphDci1n7i4FvjHlvQI1VrsSy9wDHiGpjfFo9unr71rfgyrIL2ez7eQrkDBd2Qo413HxAiJt8mq5TY1An+2L1U2ddAGupm7QejuyAXLoHLSgXY12yzlGKHF5NxJZlYsiw8uxZdekZnguLYg= +tp5g+osoOV/pmK+tBcXKV/R1y1G15U2L/+mO+1q9xsk260n9lGebHaNQenTlI/FxbbT6vE6j7yefH3SnPXh5laWuZmvEmktRP0R2PG6JW4e7Idk/jw5vUvR/uPvFVpxt2Wymhf/hzlasc0Bf0iM0OfJ5Efc4ePG0GzIaHDTffGA= +tp5g+osoOV/pmK+tBcXKV1nrdSo4U5sImCiOzub/Yfe/d7/fwPziiz0uwueeQTniPXOSPnLphjKmkJcy3YzHqmSBQpRNPKZ94JKi/AlGovn7b9NDKeyhSKBQjPANi0D5g+3evzNxPMsuwlNkHURSxrHGcvChHdLeKurc+wO7vR0= +tp5g+osoOV/pmK+tBcXKV2XIfCmcFG05EPSUV1i+BCyom3IMZBQlnenzGYFzF3sWKWrbE8ROh2V1Iivpl2bGHkaJhNxZsRPOeHljg4X8bul92Ny8zTnHnw+8X3nKQD2kxD5w2s/eEmfZ+1tVjGuwiSvAl8sUaT/VYIbj8cCYgjU= +iaAodRlbbDbdxCarNwkcQTqCYjlI9c7vyB2VjHoX4BtvOYQeR6oAevLh8MrGnKPdpqjcxh0ReuBsRkg97xhJ4EzzOvbsP9wkENEoY2VnalWnAEF32yQ875dxRN47Mz3w +phX6+xCiuQFZuok+RnQpZA8Lucvb/OL1xa5Zl7bP0Lb5lDvDMhNu7rkYB2dMQF7x42SLy8tJDZVX22dkQZJ3CC7S6wogMDikAYKe9+nSgYKHbkEmKqfnW2KRsALLogL5 +6dJZtsb8CUPLf6XAX0fHy+lrjHZ2bqlzn+j3jMx/QCY/CSi5r9d+czwrqHZw75k7rujD/975P0Wm5DaLvE2ob0kSCghmR5/YrkfJYZneMDo= +lpMeOmzCLPmsgqJkG7PE0nKGLpyiAbWjo0sL3Kk+iHI3+WEc1IqchO3EbJTjptq25EI1OAkinue4Gag9a1BCpvC7GS1EdalzqMRiXg92bk8npfK181LwtsC24rIPFkJv +lpMeOmzCLPmsgqJkG7PE0o9+6HkTIf0S9bTO4vvFFq+74JaIlJc2tPtgSS7iGR14iC2gi0PiIF9FuIdBAt0MSz4nPHtwJXL7wifnVna6CJLExFWhGC0c4guefAQVybl4 +dDQ2U1xB29TjkFiRc3OY98mCQxqgXj5Pa8LOpLMNGpKtGH/Y9WvmKvjMNrAugB3zUFFf049v3Fxk7dj2S/BnggH5zC3120GRsinmHOAz/+k= +phX6+xCiuQFZuok+RnQpZLmuul4XzYbAhN2ihACmOpH9oEXV/riZDE/rKTJZanB5SjZT2TuJgODgGwe+9gnt6c0s1tL8ZQt0PJ6+SES3xkE= +6dJZtsb8CUPLf6XAX0fHy+lrjHZ2bqlzn+j3jMx/QCY/CSi5r9d+czwrqHZw75k7rujD/975P0Wm5DaLvE2ob0kSCghmR5/YrkfJYZneMDo= +glsVHMdFb/IeJsxHuz5fO2qoCX0bHv8KxFpiL7f44o+dJgZ+is0hNCt35MXe2kOAeG6NfvzX/cS9no20qdmxXXA8ATkbLcu64D2fbuY/rDJ+JwoCj8zBQ6hhw2UDo61K +LllQdNg6CwTfXdYMyq0nDgK5m2oKs6JhLwycdJxfhZ5TatZraarlCjhXCQkI8RSLFnNqCvt58pAYJSDp3GTLwg== +u9mvWPj2GQyeh4Qfg/3Jk6L5W57kjQSIFjqhCMBcRr6fvhJMJe504t2H6yYaXt5eQbRRD1/TojtPZQrE2DuMvq2VpIvaiH5NCLo6OlDLtkH2ZT+6aGm8gYtnwdiq4RY51reiIB3jAPW34Y5sfPc17g== +u9mvWPj2GQyeh4Qfg/3Jk743lvh+RBZaS40NPQX0FlF4yKVTVZ+6x94ikzwHvd0gZXRB3p7eRD9lp7TGholSJGOEwk32QDQY9c0fnDsHDNxdRh1ZtuDpgI8oG/o5+JGwB82U7S3HMaIkhjxy+EJ+2Q== +u9mvWPj2GQyeh4Qfg/3Jk5Bfw3Qg1JNky6Qzkq0rIuCg3Iyvai0TbwAmlCFeQxBEFUXT1LEkCCObL+IrndH+gQjgOopuTIiobXBenC0PfR+YCpbRhkOlJQfDuIUgdYW6xPJoeCosnYbMIQHd7t9/xpSaZ+eEccy88+PwCisNkkY= +u9mvWPj2GQyeh4Qfg/3Jk0o90/9mCvvXcHLwVxWpPy0cJAeoNzdeB2jB/EXdnwE/8wtxTgk0zINsI72rK5paIU4vUhXdUsyKXTK8CeY8Fpp27SuNhQFpGO1iHcGOaNNfheYOwiZgxd/F4QoTZcHijz6uYOpCEDQlyMktlxQsRwk= +u9mvWPj2GQyeh4Qfg/3Jk0n0O4lJoUim6Eqj3aXcB98MZvs/9mRKQWv1kCE3nhpgclwTK32k6ioSKumlnMa12ODvGNxxsy3LNT6YqSyz8PrsGw2psYW4jgsvRbdY8gX6J6zT8J51chtKBnWmN+DTj9UofWnrp0nAXvHpmRSLnpQ= +u9mvWPj2GQyeh4Qfg/3Jk3KH/QIyfSGjQj4w9mmg0uM+RyBIvcnWiWkNDs19OWZ7fzY5Df+I4zW7zlCu5x1mt0clJ8FMzLiOnP/ADFURy8tRqvYhLLMeiMyuPg1oqzhtaeq5O2Acvg7mGAEfAPAdx3LMIurol3yJfH+h6tDAILk= +nrGCUtZXO8lhMUzpsw7fleyWAyaTSn5GqZHCyAMdMuYFD7AHDg1hwJ2ZDXL71mN57b/uFA8FC10reuhxDrkv9AzOOb31hT5a0sIALTFAjw9mNAqp0DporpQYtTDlSbdCjxLLMmAxCGEPfboOk1zWoF9C7KYTzSm4G/Lm2SnGAzpu1LcsIiH43R2T3lvNheDc +OlA3Ms276mZTcqwKAwXvu67yIrO388LYB3tNdtq9QYVpA00Z+fNE/hgXdKZxGqSxxnIq4oil8VVTZy2JtUajGGDLAuNJ1epSvb4JRS6qcZmLYxrmb86+UtbIU+u4VM2K +8p4c/a5VsUSqHSeB2usqZ4MBZpz9L4K8hI7w8X6nyloF46xYDUXS4IPdWeRJqIaYvTBJXgPGWBFdLXcew8GCZVjU8zy4Q6WPILiehvSJ0LMZSCXlEXZepZEthsZrCw1V +hSGDFTGoytwnZV5yzLtlFIgDq+RwfpSoAxtPD4bqS7DjggFbatzSViaAW1Wsr9DXM+WzUYYDH78XaMuELt2hiw== +AdPVIE5vJ65wZA9MH/IxkMQ1rs2aOsNZztJ1GLneXu6BJOshSdfTa2dtCDRWxYAanMOOv6tVRADVWzY+hJD6mg1QY6ysXo4huF2/Z1hdzJo= +2Poxxdy9o8AvAQ8T2zP50IWtw/1ESBKlEtSbdOmYYsS6yr8YAomiJQwVP+k7Expq8MgfVf7dzanhKgVF2RkcoR6z1Ml9MPr8vOBXyxYFyTmULZRrpE4MRdjPWrWlAcw7 +6I/H1Zpit1TSo4efV6bxh3HiYZRKS3NLkuX/aDowWJjxME1eCLXFobIc3OUdtYgGDJqtQTp1FIWNguFJEA02WpfLEdZ4PgbOlt4J1Pb3fv1+bvgLM95OYGqkFXPQDhZO7Xf16RJVkCl7dim+DIhdvg== +ztzuq6nAH2ogL/nP4kxvN8egJNo1keLW5SwXOe+qBCLc8CUP52RJWmAU95XS+5qLlPz9I+CW9NQ4MAg4XUsYx5yLKLoEpJqY5814h/7UXr+UkX2zZM3RLAyWJjHoOWYl 4bCaCPES2AXNnKU3FRtflw== 1u+XjG/2+GSQRv6EzCaWRQ== 9GxZpCRwMRDPejWR2Vvf+LKn0tNtFKp8Eh2tnr4Da9U= -wgR07xfoapmx6eEnFHXXYsrtutdMRxYffYBJpExAFLKvOOsdc0KV0E0yQAAQBZkqO2dMmc/KvncCFdasMp/nIQ== -NqhMbY8+EQI8zhTG6Zh2I9n9ZL/a0DhWUREDi0vuSmk/BBGIzgfE/zwz/+PpUEnm -ET0y6SUMPE2Ml4dS8viRTJixJpYvSUNaJEQ3wgnwmDR/Dl0Tv2W4MPgVxUJMaUl1 -/VraJuu2EmN1fJjV8ELbStoy+NvUd5C4U3l5SFxwBYqHlGghTAj+KvzQIxH+57GjdeVm46KwnUg95Vg08AS+OA== -2FZsmfvrIlaya7vy2+sJW88yP1VAikw28x/+NdM1QmN20rxHH2Otz0YftAcEhqUY -xqNkWRXtX9e6RRiV9vfsXA9iVWM3mvaHn9rgIJn1BG49SLTPQQBTTKok5G15ksiOdIjKd8r9S3mNXYXBl6TZmw== -Lzax8ZmAeSERlgYaqH59pNEOXo6zmxKJb0ycj+VARAM= -eV2S4UjiHsDr23JvNVNK3qnbFgIz/SjyIlu0VPUX/wyZB/X0ex78snhE4vu8fZjO +sJ14Y1jC4Ns9HB1mI3E2WrIAv/Ggj5iwPPYZ90T4zro= +p1d8iJn7c8zCjHXeIEcVH+rJ1dYPPJUjBoxLejpyJ/k3++SYE/6PAZUvwIfMqsMT +1u+XjG/2+GSQRv6EzCaWRQ== +Uy1P/QxW/sZHwckFjqrXhsF2JcqyO4nnKf0liX29/rd55zWfkrQrXTYY8dG7Okqq +b4OJVZe8QyIpjuTpKXDL9A== +p9oVsBgcyiBMjDb8CcPOqP2sLQ/zn5Dzo5lCtrgxqTQ= +vrLRJ2OHMreCr1auX30jLEVKmFh9xlupCTXGLwr03/Y0Pa4G+4oikCtrDPeglpMd +VmVrGQo2zRokW/ZuO9bN65sJx6884NC7j1MuBhZV/aYE4Y4zAhSRQXk12777YOREdrmxe9bIaPGZ/JM6bmnd2cVBBqTfmjiPPeZCkICwJDO8nYiqvfQ6cDmgopiTjQ0c +Ct0TSA1uLPmdnNBWEZSxj/PA7Um66ukUBrqPG8iyDr4= +ltIZHHUgft++nMUXBsBkiwUuTA5yPk3/NLw07lyZVgMC2zKllUdPyUq+SDiC1Y1FtOlZWlN68oAqTVX2OyXDWQ== +VmVrGQo2zRokW/ZuO9bN61MqA9WsfKOg/tExmVwPpl4SLgw+yW6zRhh+QKcXa1O01CdKCWdbejIF7BTeYKPCE1eGkvblUan9T63RduBf9d8JFzxy09EHEjTAoeH6HTHI +mfT8DrNbUmxQ2BnZ1bZFTLh9MEuZKOpmAfF70OnZ9TU= +s6ChnXH5zaR4nss2Jj7ULBibRmB/kmin0eYU9S2eTfU= 1u+XjG/2+GSQRv6EzCaWRQ== -XAhLrvlGbYlCdcattLgAK7Liy6t7Mxkh4kuP0qYZiAQ= -bH9iS7BmfKTTQ5e5cIHrV+NToa+Qu0Q6miLpIDPC7OQ= -oWeNhUoppWYT7RASkmIJJWBa7mXL5jpuhjt1Ca1go94= -WHkOzVx7seuLmxs5Hu+l/mrLDQ6BBXRseSNCn19UXP3hoocFrE+8Ryld4yV1KZfPLP8WjHXhqhwqVYteO5GihA== -xWoGNWjKGPfI4gq8aHoTfPPx7KOh8Ov6lvJzsiJpppHSyN5jaaqvfIJROrGDpaF+YERzbqNWi16xh8TX/rt8h1OcRWufQOYoSPtEsJA8GcdvXKxWGUhE5zEn4jigobUG -SAfJlmeeNJ+zov8ENFGT08Uz8It4opq7bRMIoKLQWOJUKgwNPXLIBR2/yj+BBqVO7FBUyXMhrYYDSbFcF1Ls7g== -xWoGNWjKGPfI4gq8aHoTfFART0hN4Gxx/dtPrYUmN63iF3mw3uLhCuGj/IgtqHJVFhW/5Dn9KsomuIiHDjFFMFEJSq/kJMPgKN2jg+paND92M/0zrUXr5qaOJvl/GiRN -l2FJPs4YkAmmok1ulDRuSA== -xWoGNWjKGPfI4gq8aHoTfEflFkw97L76bM/dN9HtOElY+tO/udT9pr9VMdcs8vGV9v5sc3tvPRbt0xQ68ZNzVbhtjfI3YSs375iMRtWAUrmH+vmuf4fETCq072W4CxRWpIOOh7SHxg30mIoZK5O1oQ== flULj/LdXe4ShFGOST+HfgiEQqJL0kKKn6iUffraNcUfW9gxdwW9wmntTAcmF7KVOzRDVCHXtZHOS4D78Zob1Q== Z8UsPk1Q7HtwjRd4g01ryw== v4wZTNeqSt7hKjjs5rimNMLgdpIKpbxvujNwNW9pnkHVQ8lv2VVqQHVVc0GPFdfP @@ -202,292 +171,121 @@ v4wZTNeqSt7hKjjs5rimNMLgdpIKpbxvujNwNW9pnkHVQ8lv2VVqQHVVc0GPFdfP Ys4bozvJBgtB7q16qcvtBxfJUhKmEI4H3T9j7f29CdE7rNQ1+w5tPWDUNgUfBW/n Z8UsPk1Q7HtwjRd4g01ryw== b4OJVZe8QyIpjuTpKXDL9A== -8eMNwOFVbk4AtLbMoBZ3WTJylC8gGuKXwsoa33uaVOilo+eTav4x4B/CBPvAjTgn -8eMNwOFVbk4AtLbMoBZ3WXGvCdkUE1lCv740F/AYpZTVXZWXz/0Lz1ev0SYqBf0gjG5iXFTmyoAlt7NDxvLnEA== -PV+X4fvCTN/6758fJ9HMv29tbB7O8rIYWMezR27hNavFPJ2Ycj6w0s2fyIPezxVu7xjb7HbbP069Lbz42fGYbg== -ajwXO+19f5mE2k+yWvJMuiZyUpxKU04yI0OuG4s8zNpqZTpRMGfgHQ5hHcdTx6rh8peLn6TF5/UaQ669kk5gaA== -jEPV0YXDCqWCap/VHplvwQ== -bjpI32qzKze0nfrRYYQXm47rkeYYZ9X+K8gA3uq13fQ= -VmVrGQo2zRokW/ZuO9bN67zLZiQVbo3RcQYl6c571ziqQyhgroqSx3gLauH91v+fFu+QAiRnaYq9E1VremwyiHQNgxowiLZvqJOjmX8oSehrQHybiy7vwg1hHHpsU74QN+VQ7upOre9cAdJI0sm7fCv6o+OcHXiE0M+D9Q/OO1C68jXt+dgqcW/XIVM+Oq4SNMnJ6bQVlZuo4m2jVD2I7KYC889jP/b9Muozz73cb6q6JEFuRmQO3t5Us55xVPsD6anKKmnION+bvukAj0IUOfxzKWFoRGzpBr3dOo7uPWTKMSe6PYqHDOo8SsaXIjK/moVXYmrU9qAsAIWUrXUUx6MqK5J2jzuOxNwAtvQjw0irPNvO74o2wLVALenBCx6Gx1zrJQNND8iW8Z3EF3A17kjBoqVWWP8CBft4xk5G5Pa9fh1PgjoTxIEtiPflF81bxIkXX92YUpPvO+NJ+BSoTTwn2UWrfgxFNkX395bF+Xtu8gGJhb8PcG368JiIVlPa -1u+XjG/2+GSQRv6EzCaWRQ== -VmVrGQo2zRokW/ZuO9bN65d6SIfZo75FloW0FIxk6EHEMEM5zu3rfeKGq68emUxdc1vtMX03Al6g4yk1YI4aHnCDd0S0QTT/RMg/s2I1Kvw= +32pdC9DD05OE2l0oXazDFDBMPyOQNhdb+NUOgbJSRpFEY9cVw3pIGR7qF+2v27zG iZaIsa48RXfE+uf/yF/rQHaH39lOhItuA9XlMsZGwHM= -PxQyEFNgEUrjep/ov+AWf+oM8xywLq7k8twOsAgmDnhwxbYPjvM1HR7ZmztlWsVP iZaIsa48RXfE+uf/yF/rQFDamMuGYoHcHvig6IR7L5g= iZaIsa48RXfE+uf/yF/rQBHzBiyCImLvDpqO+6hTyP3m9lHPXPQIIotfEF+lox/PQnwFku2M550Yae3EjKfdwSo2zaLVsBrXdy2HzGwErWc= iZaIsa48RXfE+uf/yF/rQH2dIzSy3gkyzLeqVCbm3eTH9zmgrK/v9VFjQHkrschdvsu31TnW9AJ98XajAcXV/xJabWM9DvIsHVJ0epK6pbw= vlw44yX3fCVt6eRmFa/S8+zcDVCNlbkZPwywv2/TkEdjzIX1a7+Qv5GdodWIWjhtmXWPTEcqpjmiAgwl6lc01A== e1fY1YJpbz170V5bcvidMMj8zZEMpvaxNEwOhd5zodzg9VC9MnufwNdaYU25e3Ap0TjTYIXJp3aftiAH9jPWNw== S1U+ozOPAZj3pbrAwiivwV+OvqAz1d1sZB0EPsOnolf+IN6OHYpFNOp6+2SjXYmV +PxQyEFNgEUrjep/ov+AWf+oM8xywLq7k8twOsAgmDnhwxbYPjvM1HR7ZmztlWsVP iZaIsa48RXfE+uf/yF/rQDuGVEzsmF3CtJPekR383wxEc8OumBnbu+FZpS1sbexmU4IRN0hBGAisopPlzdzamXnnzur1Wji8UNl30wxAtMET/A4MwljXqYiRMkHmVxJs iZaIsa48RXfE+uf/yF/rQBHEMyc95ROne+WTG39WCVaS+cXX9BOUlzXxE0w6ot+Oc3VNAQ+DhKgGIvQZHJ5c6g== iZaIsa48RXfE+uf/yF/rQO/ErLeTILJ36v76UKS54Jw2UX3OGfKAG7yS6qfIxugHyp2S/OL5tJKEWjUVuW4IUuzQc20IvoIJtKzwy4FpzeobJXfdFFF6CmRLQ8jKXRiVYQeTwTiaZHk9oJGEGYazRQ== iZaIsa48RXfE+uf/yF/rQFvnSgMMK7IUZnw+ay1bgOmW6qSuUZQTz2zXyezTI5+d7Fsrlel7B7kVccTcSm9Pfg== VmVrGQo2zRokW/ZuO9bN698MHz+PRq+TRlhzLxtWGMygpukHf5d24j778t/zhHGidh9OMwub9c9vsi9i+zZN4Dri9QnMhFeT7rUsrCUJo5TwdvrO6yF6zrAu1/LNEjX/ iZaIsa48RXfE+uf/yF/rQBogmq+jEWWC54y/H6MlNh4rp0+JMOgYT2mZY+TYp75FCm5W06pUVqWJPDAukRPl+ZRIueWws/l752pV//pYffU= -cdjMZGd+oj+E1aBgYuadXWtaC7aSClO5q/k5YLsaTcSQLEvmsyDwCAB+ds3GneYkbwwp8J4mMiR1G2+0Ax7KAw== -cdjMZGd+oj+E1aBgYuadXaukekpOTL5WA5BiDC9vCxPuawlZz6j7AAZlEbdZdLQ48OZE5ekQYbVCOAhL/BJpig== -2YIp4yADnjMGtY1lwBdIGuJOMZTFEHseAqpUotVOIPw0VLHXqqJAqDo1N2tbNar0q8n9HgTNNBagFvdjmshZDw== -iZaIsa48RXfE+uf/yF/rQANiUB6WFTzoHZ3OwjBwtM2/j5761QTS3AJCOB+qIm5mr/5/eVreUywu46shO608Fxk3JiSLg1QkYCinrxbBW8I= -iZaIsa48RXfE+uf/yF/rQKIqqcSbvyJ6nKs1nu85+fMRjwAg8Y6Nh993Kne9OE8bYXDQ+LuRcreEaUiZDN8aOyIbEKMTvERwYtJMKUES04k8EwtY/LwkeYK3mxxvwexvEDmRXbKbEGBLl52UPJVJfw== -iZaIsa48RXfE+uf/yF/rQJ2YbiBFucc3UQ/ZX8J50oEXgugXrduKe8SAiE/mA2k+T3N5ZO8BVpH8YAKvC4ZR0Q== -wlLHv6kT3Q/RmtMBN4nDAe8+imtRBuiJubS60XFrMJg= -VmVrGQo2zRokW/ZuO9bN63zFN5O/w1krXKBn8bzERXc= -VmVrGQo2zRokW/ZuO9bN6yl77/0MnObCK5XlSs9DWF8eqyYhe1FWHc8xaEa0H0urV7ygkURnv6BiALfKwfgNY7qBO4kuhmbf8nJ1oKsf+gyy3EG6rLIgfnG4sQZKYsDRT9AFAoDMtdIUBl7ovtqbuQ== -VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpEMPvuOg4yWJa5Si36Ytvw5bx4JTsUXc9GQD7jUveTF+h1GxK2r9hBJbi4mkX/JP2 -VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpEMPvuOg4yWJa5Si36Ytvw3p30izicGP0/3QQynjVV8QfCMdvBT/iicXrGxILnxT7Flbhb0PBJRFV0JDAAWvxHQ== -VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpEMPvuOg4yWJa5Si36Ytvw+sgN+NoknzWuDmsXkDIpaqQj2Lw0lrCOo1L/C3blJaAgKXMvFjXCS584QOcKTtHOfudZ11Mj38X+gn040NpusM= -VmVrGQo2zRokW/ZuO9bN6xoaa3pLsxXyLdB8GbtG2YY= -VmVrGQo2zRokW/ZuO9bN6/VW4n84N+xmKyiHoJANXzc= -i/p1vQ7ugXGBvwbjECApz6tQ3fYSsRgetdpGSwwJdY0= -wlLHv6kT3Q/RmtMBN4nDAfKuWKTPnQzOUo8b39dYynKTIm9yduqnJKjcYCIOYNl2Ve+9X84vGlhWQ4dv1oTdSWR22oAktUUFZmgLi+55bm4= -VmVrGQo2zRokW/ZuO9bN6+zshBZO9d61HkhcnvN87E/esTkTggViecgSKvZl2/jilsnJj15aKiHc7zivB4GiRjN+hiLn89qackKeknKgOAkBsBvnq+NL8RWD/NHkUD0E -VmVrGQo2zRokW/ZuO9bN67EO2w8TNG1LHiP/tGFb6V2Gt2yQRtjzazeNr74m0atzaPdvLFX7XyVVRswklh1k9b4jQHovg+TYl7Ff9JiJYPcw7bsPs4ffMxTkD62b1LTR -VmVrGQo2zRokW/ZuO9bN6x1lQigDbibIoTlVRYg/sjBbtNt2NXe9ly6pYDchoxSFm8eCigCwEbYkrmTqSpR66Px+l9G0RWse6wD1iaMwlGH17ZZODY6LHJwXbnnoehfY3dgu5gHZ1QEdRO3HBSEC/BmkcWwlcqCj5HLhmnA7jVY= -VmVrGQo2zRokW/ZuO9bN65ZXaaTN9OdZLZFqE1+KS6RnzprQpjuF686uW9l1a1Xa7mf8nAsb5dvwf2nXb6MyyeGLjC6K1kWHmAxqB0N5Lhqbqh8cjSw9EakEYrt1pQmzU6bWNZ792Zty9yar13+Cvp95ctSpW2nDI1vJq91wABs= -VmVrGQo2zRokW/ZuO9bN67sdU0BGc9v1NKjQ+sFJyyAVqCbBH9iZ1H+7Xb4dU4gwDiJcnbDr43Qq212mGJoiC2DMD5ackhh4eB3W7YaQThFl4no6PKCk63hukqrWGYjX -VmVrGQo2zRokW/ZuO9bN6yl77/0MnObCK5XlSs9DWF8eqyYhe1FWHc8xaEa0H0urV7ygkURnv6BiALfKwfgNYyI+kia9//G28k57ZB6qNEQ= -VmVrGQo2zRokW/ZuO9bN68m4dRJxwc9vmoYO9XfNu8JoAL0ANoHBA6wRLssRJG9d -iZaIsa48RXfE+uf/yF/rQJ2YbiBFucc3UQ/ZX8J50oEXgugXrduKe8SAiE/mA2k+ZzCTJlHCGGr+o1zyX0J7dQ== -iZaIsa48RXfE+uf/yF/rQEW/HnjzbDWg5QiOMKFgUs166OxnL4KP5EwHDMXQoCQJRRha1BVSLbU7v0IGpgEo3Ow9rETT+gtPN+XqbTD9O4VSY9LLGQrxzpdHx4ypB9/+ -PMWbmPRKnSEEQmuoINHGWsR4WdhOdaCB8ldWDbzQF20= -wlLHv6kT3Q/RmtMBN4nDAVAwwjXMi7bsf2Urn5Fa7BXRsDUkBXTBYPEpaEfSPA3CViaW+eHPpTOr1sqaxfsUEJXr0r8RinHLoMwf+yDuYSs= -VmVrGQo2zRokW/ZuO9bN64Jqehn36bioUDDk5ORDx1UfKJPWwYobkwrB7mW4yC0E/yspyDpCiSv62gKc5GAi9T+y34+JwM/Ix71XqqYfqk6wuSlZIytENGwwf/qssogjxCLORgiVriYpcnIi5PgXEg== -VmVrGQo2zRokW/ZuO9bN69lOsOGGAluHtoQsF4JTTD91qLyShUeY2zrHp66doa7mrqRGy6XrHMPUUlJQ9jQMJN0k5EJO95P+i0RrsO6IfE9KsdjGbXe06Ke4++h4/3UVjycijEWFMnGV6uvGaxuhCw== -VmVrGQo2zRokW/ZuO9bN66Bx+QcaotFFc25usOdeBnbTRU45vVMOgan2bt8crvVKWdMPA2l5zQM2ZMjHmie4Ostb2ZlRvEpt7614r2AV4HLy37BZMk+x2Nk/Kbj+WVTFsFKkwVRGLBsFJ6yqXmiY71otfHLUQGgM8V8B/4spf6Y= -VmVrGQo2zRokW/ZuO9bN67sdU0BGc9v1NKjQ+sFJyyCMLjq+xWwbZ8c+ddHAwB7BKoukMsMxYs2sswO22RXml2KSsLww/KZ/8G2d/WiAx/rgyHeWDCW9UJufFHa7xinD -VmVrGQo2zRokW/ZuO9bN62cg3MFjF3Xh1e0EF0hJpnU2g0qslcYflC7df6LH5ycv96oJb3iOdLAMnhFiSSXOjfbj/n1Y70ip284H5cNfF+k= -VmVrGQo2zRokW/ZuO9bN66RJ3wohQFXs+QBlSfWZpaf0OWtwRJ6BrDTWIqv5NVGm -iZaIsa48RXfE+uf/yF/rQEW/HnjzbDWg5QiOMKFgUs166OxnL4KP5EwHDMXQoCQJDHEHPrnpFeN1JnNSnouOcA== -L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmUTEOYWDoCep0UQjwSxVF0w9eBLN2NONNvbpF4CcDGkQA== -mfT8DrNbUmxQ2BnZ1bZFTLh9MEuZKOpmAfF70OnZ9TU= -xWoGNWjKGPfI4gq8aHoTfBVO0rtzJGwPNNCAKcvoQ7YGnBVlRRzBkPuuYdnd1drISaN/5vpFnf0ao1Hkw6ztew== -1u+XjG/2+GSQRv6EzCaWRQ== -piplqnZD2qKjxqq5BxcYpBpGRwKsiHJxwLqnhEe2D48YtmIu0TblS7JCQluznId9 -uCeQtkgRBtN0HiqPTvhZHeALjPy6nS+/Py9QQjy3Ju9z9JZP7KSWkptweIa2bYE2 -cgFNMoW/KsgkKsovM6n6KO+C6KjDPWoUE/hR0PgyXA7qIltJH6LvNkqkyka0kjkn -v4Cu02hZRDsW+85CLRBC581P6PmAWmaUk3n76dbnkVw= -NmkgFF4ZsyEHu9KVT53La4WGMwIVFvT8dzZ/QJmAvrfSZPlY+eRgJ/IGmWYM3DiSmAIvy2CFU0T3w56mhC3RAurFjyBbAOsoZluPEh0M/sY= -YoCN/YJ3FGpKuVn0NXtXTv3XCu2B9Ep5OJG8o8tyakhU5BRvAk6zZXlPRk9etr/0bAiCaTT4Xnp28zI72QYmocOZkM9EMjn4wi9DBmAb0g6ipSHN3dmHucQQZtxoUbEu -YoCN/YJ3FGpKuVn0NXtXTsWIqvly5o9YazCVgAEKZW0PTnKV1DWqLu0lRYHDz/YcsBnA7SOwZuYWWRON2HScNg== -1u+XjG/2+GSQRv6EzCaWRQ== -PyAFsma1q0hLhwE/7yEwvlLDizBd59bTOK0yaWmk5wKN2EpZqyKHG2wdBEZW3kAlb+ZRqbiaA2kRmKB/ClkTYA== -DB6Dm0fkcUc76J51zO5BsTwaw9bnJ1hMDPyvzSAiR99N1sM5KJNB3yakje8btu8/QBHP8RxgWzfFi8SXTQxdwc2MFwLBmPC8Kwdv5Qni9ns= -C3JSV38/w2nvM3I7TZ5+4epkOMkaWYvoOErk6ygROHs= -UaGDE9swb13AVV1HxfNyqi1KJFeHDs773v7JZyf+ME4= -mbg4a7OqVLuFyb4lBv/8ihC29C2cveBqDqu2E6PhaRE= -meZhlBQhcKhD0kZGoC7z20E7608oJ67KyHB8wGHG8NC8h5uepI5cSAMadUxFvf4DOtyfgKSQxnHoEYtzKQUcloe3K8rw3Gke2CQzL8DcGYs= -p6i8iK7HDbvmLpoFrhNyvxdkpuCzYcAgEgoD8gO9QRA= -rYd5Q6Wra4KSueZqSRRqN4gDfkYJFjFLoq8Y/uFOPjk= -0aOe1PRcA3iTQeyd7fu/UT3OH8TgnUZIetc0kIThlMY= -vQwaisdUFOt9b0SJYuH/nrHigrTUtycF35lf58xGUQo= -VmVrGQo2zRokW/ZuO9bN63igchzsu5zTaq9IXvBjrNVT0Ypem/6Ctem4lX8VHAu6 -M0ZySqkmhuHCw6olbCKv9zQJzSQJo4Zslq06bXS41SQ= -VmVrGQo2zRokW/ZuO9bN6/vHEEiMOBtCIlg1b8xVuig= -1hs1FfIPISXmd7TJ/r+Vl/cQigT5kdrpKyW4rHdGgtQ= -VmVrGQo2zRokW/ZuO9bN60XiiQBl5FEkQ6DHRSd+Tw111DT04Hh8GF8qhcK0KSh/ -VmVrGQo2zRokW/ZuO9bN65hNsUFyX6poB60L31EhX7HkJSxkQfY10wTx/PiHvRMW -VmVrGQo2zRokW/ZuO9bN65s61AIgyJ8ql62IoneEj2fAfjFSAde2JX230qlgjnH2vV81My82sV2kTGC+8zV2TQ== -VmVrGQo2zRokW/ZuO9bN60EOQAX3/UH5DkusEZxHTXPrNTCzuXya4iloKJBnudc0 -VmVrGQo2zRokW/ZuO9bN689+A3i/MUSda6G7q0qItIjO89bRKTthTU14pzjp1wZx/IYyafQwuUcVBEAoyeksHA== -VmVrGQo2zRokW/ZuO9bN65hAGaICagbU0z0X3nArVjY= -VmVrGQo2zRokW/ZuO9bN620zSkiHBXev6YTvy3qjpOw= -VmVrGQo2zRokW/ZuO9bN67Ta1/lbp6yqDJ2hGru87rzFFPN0VimnlC4upIFz9Ysl -VmVrGQo2zRokW/ZuO9bN69twiVqU/YruzaZ31Ozd8kyG92yD5lEmoQmdiZOEP8KmMgIvjkFJw9Dw8H1UfQ7mow== +7aT066WRx/cZGdWRKj2TgwEY0xoXleBnYEBVrdbOUOVb1MlqAhTjJFjqn/2sCtMMtMuyI8tlEuAv+2virR/ogQ== +cdjMZGd+oj+E1aBgYuadXRnDVSnRaNL298tY3UFpDxo= +q0HkBP1UfcaD3QuvseZg7U0AjrS1vxAzyym78d07u7PRd3RcHn1JhHWXRKXs+S+exyKcS57dErhP1ZOFuHljlw== +foUmDPBEqXaNNKWVoPdn5r23ALvvmFpsSgk5D2nUoSjVMng25k4cRFnF8eQPmn0ASenw18UI+ZvvkAnHqGFtzQ== +doFRuppv7LxfAq9RsqjAfU2M4tqBnd4xmV7sOAO37t5WC63L4GpMMVJO4QUGVYbE0PO739zvabJjega4t/ZDkvq7XVcElDKtS4j+OESUv64= +cdjMZGd+oj+E1aBgYuadXYvdn95pRqiHssxnPUq5z+oYWbh7TJFvJTH8IGyQnG0A +q0HkBP1UfcaD3QuvseZg7UK8sAj3bZDcSj4pTpkdY3kz/cw6UL8ty4jPodR3NeLbVEqlNCJoCqo5sR/W66HUYrHb88GS4Im23wAZxMFavoQLI0uwdIaIqX+Bh6oTzKqS +wlLHv6kT3Q/RmtMBN4nDAd80NN/x2zGsH9TiY4pRQR8mCXbYrjZWFtbvopsE/M8M +VmVrGQo2zRokW/ZuO9bN62nVoOGnmUp7QUiW/ZaOEYF7MHo20bQfM5s0PCUWqL6NuDE6ztiR5CDVfnIly2EU/g== +VmVrGQo2zRokW/ZuO9bN62PmDICAirRnO4Q9KRe0UCyV940DMecLF1q14Lu0w9cN +VmVrGQo2zRokW/ZuO9bN65ETlE/uz6nDll2tKT0mO/nyWiA4Z5wYnok6hkK3X+rS +VmVrGQo2zRokW/ZuO9bN6/uFD7UrF44DYeMNmYEBF/ld/Oek7NQZSL4sTnJ2SZ/rK8h67qcVWQS/yEoS7omAht4VyaUBRACQ566AkfmE9d8= +VmVrGQo2zRokW/ZuO9bN69twiVqU/YruzaZ31Ozd8kwFrmcC0XJSxyGjZPHTjljVjTRIrF4MtaVjDkwVq3loJMIR2YSh9qaQ3SPPDmhCnSA= VmVrGQo2zRokW/ZuO9bN6wMQRwD6rXhLUXMdURcL5Ag= VmVrGQo2zRokW/ZuO9bN640QMRIb+NfIAnqkUpUM0UyM1UW5nFbYvKPvqsQY7qs494aS/4n+dnRqG6/WBFmxDv9kb9uX+yopcF1JYP/VDIE= VmVrGQo2zRokW/ZuO9bN62xFfqul5F7aMWtovWOJ5tZP1bJgyqz4vpQ1vcu9ZeS7nO6J17Baoc3zlb7Qe8qElLM00WI2XDnSBgzQHmlHrIgvHTezk3aB1hm9hvb+Gv4T VmVrGQo2zRokW/ZuO9bN68PIFqUsDNaIp++rUmuGFKn4o7M3pUhaRcA1ks5Adan7jnrB7ZtcIC8KAwdazqXsJQnRsz/VyPAD6sC3mSzpwPRfi2ghVLotdjoha+woBHHlkbOiZCUrVfc7uglqYXgMF9aodbyDf26K3EEkt1cx5+Q= VmVrGQo2zRokW/ZuO9bN6wNy3dMSKzw1+znxXLOAZLh5FEFcOrAX3cntmkTItZyKKVGgHnm92b7h7ork2RuLWUmLbdVgqwxu7Wl8pXJk83I= -VmVrGQo2zRokW/ZuO9bN6wRTb++fBMmvLx2k6/MEJBys2MeDsfiTOU27PQGTtFwGzoxQQOeDpqoXCiSV9odxKw== -VmVrGQo2zRokW/ZuO9bN65OUJfJvgNPZipZ9GCOTw7gT/VBpBNqR6eHMzDCD+qxc -VmVrGQo2zRokW/ZuO9bN6/6DN1Rj8W+FylDHNZarY8GmZYJIJsOXkIFPArsJz88a -VmVrGQo2zRokW/ZuO9bN60b5Dlj8qSCLiYdFYQye1vxhQfzXLk5iO7kCBpmwj0d3 -VmVrGQo2zRokW/ZuO9bN66Vj2MTf6PwKatUHlMDNJnAflwnI/tv9py6bv+AQb/3Mh1ASIGKNXpINw5P13Fnriw== -VmVrGQo2zRokW/ZuO9bN6zJK7VoTu9IkzGKsOyFHUih3nKOsBegITZ98OzfLK1Ug -VmVrGQo2zRokW/ZuO9bN6wragKme4d+RqlA7wSuKiun6Xqgs7hKkILO2biA4qzho -VmVrGQo2zRokW/ZuO9bN6924SEXfGwykaPMoxSMlsEcQAwBCGiNnpl4AiLwthDY0ogr81kYcskyrJDT5/Q87vD/ybRw7C5VoTHeL2G9HfhQinJgPrUBEI1svbLGHdxDN1m3m+AH9xwXwqMSg3chqEg== -VmVrGQo2zRokW/ZuO9bN67yPtu0N927f4HIlE8Q/3KEjZKgRfvyBEFqTjZArZjS6wWjCk37Cjc7Be61nCtFfog== -VmVrGQo2zRokW/ZuO9bN67oV8rbNeQxyRr5iXWNRT7jCGot63P1U0aZqnfo9iER3g0jsNJ4bdPmlVkmSovfUKEE8j1q098bPnAUmTwYv2U4= -VmVrGQo2zRokW/ZuO9bN61XvIee7O+pzg0zO1do+jmn7+YnxEi9X2xYlEBv1SXfIIfgDFycnDEX3zYsNHvW2uWPjibLCY7dmVLtuDnx9lOI= -VmVrGQo2zRokW/ZuO9bN6y82k0/7L8OC4IRsil2RtO1tWsTIDg48NsS7LlukbCaWEQq1DKn4luZ24BCSmDqhgg== -kJxoTVctk+bGjMYgKxsjjUpPRSfC+WsPwpMn5FGcCWkNpbjYvwc8oT1ZalJ4jAtf -zxNKIz/Dwj9Harw3dUNEQET0V05gcgtC1p+K2Ihkd0Q= -ACEEdgL/kNbx7RaZcSRxZGgMaBrP/U1Wsj+kqixOX3U0XMejpRw/rYT5i4ihGDYP -pZu1Giln7AYpCOrLbI27dxkWuQIzVUpxHeSHCtkSzeY= -pZu1Giln7AYpCOrLbI27d9FNbDQGKqlmV3/n549EBNY= -IhuisKim47k91RVt8z8qtCsumyIVSOp8xbUu5duXman+sOE6qwlPIuSaUbeysSjj1/coIZqlKQRM13ITsP3JTZKUmxD+QBryE7TKwJbeYvU= -DMKsax7BkTxm29PYxP4a3tCEAD0O5XmbLDroN8+cKNkbya4muwQehRDf9xiCNtXi5mN/bz7SmZm6fjy6PG4iu68u9ENCgu/bVtrtkv80Tvw= -v4Cu02hZRDsW+85CLRBC52OF7Q2oFtJnu5QwKIMu0BP97gowulUFTCsZQKMleZfSYIjeGZBAO1CNNX4e5jvdjNKUV0vrbVg3URKLSmZQu9pDsE/+LHEfAr1t4b9ExGJ+ -lfQMhYa2PjTGY/59jLRb898KNkZ/P9VvrG4wbt0MN94SnvQg6MxkeddSbK4PThoOhH+CDexHx9A6J1shl1FHCjlWu2q0GlNlu+H1BQlcdUI= -JbnXIK/axHVmA2plDNFCpPYlXWvPB/7lIz9ynMkifTY= -aEZ3meBRg3VU8t9WienCaIcMPcHcv2YGqbGshoEf2+BjZfFHOMPLysvgDh5kRgilD8P3YgAMi/iJ67yNmlvr2w== -mbg4a7OqVLuFyb4lBv/8ijnDf2TRJk/x5VtAuD8Lei+9UFA+RJ6F6QToHUji16bw -XisXz5DCD82wMRFAyU2YnBIQChWrgJ4+9q/ztStU2Rc= -96orka/uERLyRst14azQwnND1LaAMeJ6hPF2g6RNEz6oNJYJ3oKHQnTz+Hw7wWSQ -1u+XjG/2+GSQRv6EzCaWRQ== -2STnKtQfadtZuOOXKAyG97fXc39ov+eVBLi4v0OMsFg= -RGF+I9YWwlm/IovqReh8KzDsktfMik+IEctOJHKJWNfLhJfd7lO0N+PqYXq68hXW -wa6Uqxieufh+16mIo2wUWZ1mtKb/vzs433ud/yv/qeNzIjpgHyPB2b9qHji9uppV6FpACIOY4mogpGhOh+bSYg== -kFmg/dBFMjlvuWIcUrXktJM3uaPpOUszNWRf97JB6UU= -JbnXIK/axHVmA2plDNFCpPYlXWvPB/7lIz9ynMkifTY= -c0BvLCajy/2XMKFpBZTl+Iu/SkO0dvuX1US9n740cfboKQmRZYgu55JFFv3bWRzs -xM38J/T7qHoyh2Dm7AS1PeofVv7nUvjVw8J08A7tPoHKI8AfdUEMMT36J2TuAkXa -DjJQKue4V6m4p8kNUg01bEfz/+OabzCmVKUlV+DraSJuEtoAE53HRREuE0nz/mi5 -96orka/uERLyRst14azQwnND1LaAMeJ6hPF2g6RNEz6oNJYJ3oKHQnTz+Hw7wWSQ -1u+XjG/2+GSQRv6EzCaWRQ== -8asfyBO1JetUFwe4WyYO6Y7zXLxXmxgBzDu5xRXkg3A= -JkzYefpr/Q8/FMT+PiabUnsjVaeV4SXIGL0ZfwaksKSkUz13n6Mkp8jdbSsukdJu -MzOj4ZiBOJDNVP8vi/lFQAuCz8rMEK3CmFN5hj1hief/YV0qN2FHlXxmdMK9Ec5W1rvUke3pinD34K770i83m5kkbUBBkOOiDPjIkJrEKow= -k92oDIqD3u/zM2W83z4PpVdM7SBGKtVUm1Jd80kknUc= -gyj0tuy4SMPFYgH4w+8wBY3IXPM0uWG/GrgGCA34VZw= -k92oDIqD3u/zM2W83z4Ppf0NYHDpAym7jFb0+rpC0vUFZlWzp5yZj+qpxxcuNbrk6Vcu1GyjgOQWSHm+7DcKEQ== -96orka/uERLyRst14azQwnND1LaAMeJ6hPF2g6RNEz4GANtbDXFyZG+JtrIqxTR5VPNmuw63EUywvzLoQm4kQQ== -1u+XjG/2+GSQRv6EzCaWRQ== -dq8ytOoyRUv/BeomAnpfcgN82WObFNw9OWpp+ashMco= -JkzYefpr/Q8/FMT+PiabUsLDCIfcYA9Gq0gv0IiQYerPKih0OKW4CHu8oewW1bF89ddkSdnMNn9sQNfx6cbWWA== -pTLYmNVSpbV89ewuJgN8s5DQJklspf+KlgaHmhcv0nA= -e1rLLbcLg7HKd8syQ0gecaIghAO5DHIkRtrdHrEdJec= -v4Cu02hZRDsW+85CLRBC56CB7hEAmjGZ+HomKkZKk+ti0sMqpAvIK7hwFc1+6mkIIxY3pr099j+UqOBi9ZahczUxI7FqRqgGWZSM6Xxqdbg= -uTEK8Ng11d3ix2pA+DD/aVQ101h9KjleSwZ0SYcRXd3eEzJzX3PloA8wBw8sN35krPKr/MyJpFx412GjefpG0Q== -uIsEpyb/BmTr4pwkQVVUf0RwjhiJQJf/hK04tdATmnh19x2HCfTqNvTq2rqHc5Gq -32pdC9DD05OE2l0oXazDFAdV2J9n5ffNkz5f36qCNytDp0iqq6ihW0KAr5+/dls1 -32pdC9DD05OE2l0oXazDFAdV2J9n5ffNkz5f36qCNyvubBPOn8LTVbiMDS+ibP+zvdPiwG7MZt2aBqQCUoiqByNRY4+XgGEEEtqLhpLRFzk= -L0eUthVnpkGsmKFAX6d+uOiK47GeV9U0IUhNuINx/fs= -e1rLLbcLg7HKd8syQ0gecfbZMbyjfRdQUOPnf5zIbTPr+V4LqLNiJCjGESBeFgYCEsvn7CupaoEzKXkwj2CZJsK7E0mq6ZE14nq0QU0PXcR3In/aUlH4AeU8sl7MkPKn -VmVrGQo2zRokW/ZuO9bN6/6UgeiotxsmEebrhxlDDLc8nC6Lwpn76wNAK3afDRnhMLV2RBSQaGynOLl28c/t+A== -YoCN/YJ3FGpKuVn0NXtXTgdEcSPVapklApkwW0i70PxTxKlglILzchhWiOPKZgOd -YoCN/YJ3FGpKuVn0NXtXToix6MqFL/QoVtdwEBkml6COQw8TpndvWpwBpvKNQMmTnxpUY/oF7+S3o40O72xFIA== -qxpZEz7yGh2snp/cK+0Ipk2Qv4TuHjOzatUb8F4u/nzLmmMsGUaOag81kxmq7Mlj -+jcV4UADuSsKDRH/jIi95dA2FW0TSUBn0rCfhGruLSE= -1u+XjG/2+GSQRv6EzCaWRQ== -glzTAHn8hffaBHtijzYL5UK18RwV0frcOEbqdQEdG+Pt92+be5zhscNFhL/eAiR9Tc711rcl7gLGuXJ+jzgMU+aJxXXBy1+OdZ5rcxvu5Fekj6TIakCimT7wMqEJ0BifU67RUtePcHtqliChztpO0A== -JkzYefpr/Q8/FMT+PiabUtwVJbCg1UHVw6o0ZG8VQbs= -MzOj4ZiBOJDNVP8vi/lFQAcd/8FSbCN3RDG7aQCgrl3NnBpIPZP1CuuiXlKwBhUw -wgR07xfoapmx6eEnFHXXYrIeMJaP3Lg2M3zaGXD/L9gIulSKHdQPn1rt3eTIMEsl38gs8lF57/xlhqgd9ITkeg== -HNr5/wGY+7coHgowTe94LlheFV7l4nvszHiASjC/wO5DiwIYi0sK4qdLmDmUfgwDgE7PElyE7dR0LMY6vNGFCg== -vxZRPtvgnx9GXrXB4G/UM0PDJAHnJfAH1EU1B/RGx3flsrprR4JXQdk2AZEllj6S -gEJ/mwYAYmzZtF+bOEtqdkC8SHP+P7fOYSe7UxEq8rmitn+SghIfUQayzs5YBbRY -vxZRPtvgnx9GXrXB4G/UM0PDJAHnJfAH1EU1B/RGx3flsrprR4JXQdk2AZEllj6S -YoCN/YJ3FGpKuVn0NXtXTnef+ICKXNxnrkPoLNoM6bkjgMdyZRztWKGvv67a690e -vUSdI+D7GGPa55xHnexsw+oNL/ikozXaKZGm51a6QXc= -guSZID0bFQuDFoWO2uxAJoOpitq6s6c9ladjgxAHqGE= -1u+XjG/2+GSQRv6EzCaWRQ== -dq8ytOoyRUv/BeomAnpfcvejXPvE7NiytOq8XOUMnvml0KjFGpiByzoIln/KufdW -uCeQtkgRBtN0HiqPTvhZHcPnx9uQcC8BFwZstE/shHLyfSjSJNhoIYesa6Py6Tvp -7V1Z5ICwJM9j1fYg0cpccfMkJlFKvknmjzfobvmEo2Q= -AJ6YSai03eOKVxBS+s+A+/x4xEbw8mjQ70I4HsvrlCiUwZbEJ9HrEH9cZywfcLSS -auZi0vV8Th1M5xUz1rxru4RteY+AtM3Jk2k0FxXVoO8= -1u+XjG/2+GSQRv6EzCaWRQ== -uCeQtkgRBtN0HiqPTvhZHRHF1iwllZSPFSMptoCh8TWuJckkTFe3/T7PShD60DdF -mOVDVEmzgX6HnqY4rlOl8Zf58jGyWJmgY+rfwoP7Nv05pvO42TLHLIh+VtAUs/DRVclc15+ZQbtHBFMvjOH4+w== -1u+XjG/2+GSQRv6EzCaWRQ== -bxxa5unxulFhVIdgYf2zPoytXjzesmqgb/je+IsUbJ6JAnsRAoeAvcznZO+AYYoOKvJU0MVF4EHkDTvwO3xckQ== -0TsdrJvJroIDiAiNTYLCm/OphXNS2tzCddUWOSuFG0kG0hMQku2PUAi1ctdkxSUc -99nPav/MjT1hGMzUpnNFmmALRQAqua4s0cHovmRI5xqw0Ofo7PqaOiLu3iG2GYZ1 -KbLSYqE/CR9TL3ZELtBVgxmWrwAXvlf+ZAt0WDpGZ0g= -TQRmC0vOvJ1P+lfyS3Os4RfKsX8MHWdsIncvcLq3grDmjzVmBg58wHqSjU0RBeX1+yZNUjYibbjDYJ/2Zs4yH0t3SG/MIh4xPFPDALQI6FtMsmZN2Yf7RHU7vBbfL59WZll21jpCE6/0Kt6DwAwufw/X34CHO+/JlrRfRgCU4B8= -L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmWop8iV2vWiZtvDe8S6SrMTHPpl7ux8//PVN3vOiURe8tpe/z5CSKE+sgBremGgAKEAj66Ap5p0aG7ZC4Px6gk5 -pELJ8LcOP2ZraBpCYNIkb8eOIUDwPFHElimW2Qtzqro= -wgR07xfoapmx6eEnFHXXYsOrmBevoT4x/SdtelHhA37YT1tkW9/tnSUFItD9GJe/y0FS28M8eHocxqXZFqa48g== -2zinJNDNj3eHwjxh2vOuZEGmSIe0J+MoJGW+BU5LSveUL0ZHAKqyQRTFOrcqvEtP3vd2ieLsSVrckvfL29Zl7GzGdc64O33qn3ol4InWv3JcYKxw2H5hnm4wCdpKsWMz -jEPV0YXDCqWCap/VHplvwQ== -ZPttXNTCGDK18VzoR8DzYKyka11GnDaWIOOQV28/TIXqzJRwd+oVPa9D5jLMJ3az8mUKvRlRSJMZkBfK19w0h+r4ZtAuH86gZfkH0Tx/+KydTvaOG7bIgsn7F2KqkC3cCZfprRednK2p0WuLxxKOyg== -HJa3BH4TkRX/a5B9uAn8vA== -zfLEQOz1g23nqtChgBMTbhyiGXGhWhAY2+qwZtKU2zs= -ypyfLFF6HqkDeg1sXel/og== -w3rdXVV9x6u3KSOstnEsm4PLlBhDTI+8FdH5E2Z7OE0= -IwoYJLA2ek7vWcssU2p6YbPP0gHTLA4HmzobpfTCWYhvHXK7lgr2+CDhRu7uMpje93SAESWlp6DbIzT7VQNW/w== -jKpcG7quCcerLli2mJ39vBolbg2notAcBVKYoG/EO8o= -pDPhWBk50HFfIdJ8iJZnPw== -cBMX/M+ODyL+hH/po9GjAA== -EL5E2qD00QeSF0FNMBo12pQWeIyq9cNwgIZqd4VEy2c= -ZVauRl8efRxWkkXsUWoKPg== -HfHZ0x6IhQ8gr8sh9V0YAAATEqIM95DuxsRArsnn8ys= -1u+XjG/2+GSQRv6EzCaWRQ== -ydM+flUAneoazE7ph9Hof3rbIj+sluwHYaxCWsNBFhE= -P5FSiL1+Pqt0jNjlHNtw3BfOokQdNQF4so/qFjceHA8= -YnAdY30Lg/9fjxdn+Sc57PQiaDoqlnlto13gLyGNa80GKHELy59vY3a8LF3ptTbE8YxP/ayjze84gz3UubVSlu+mhbshLGLgU0vN/KTSqU0= -h4lKXT0d0p8lHVvwNQMn+LKoo6D0qtuqywubpeGhgjP1wmiYwY0D/HtlehtN3aCW -4xkKxP0XIvHb1D4sJsHh2gZjH1Vo4xijw1ZC+9Rm+a0= -NzUVwIScy4hrAjo551BWpxLBVrqGQSD9yBLKdRgxYx0= -ft4O+SUgqJFurYX9lapEio+F4WkORg7Yc5dRgf0GAKI= -CDLUY0WWS1opA7rPYYGAHqCEWLmN7ESaQ3cddP6FtEs= -D3tDGThV5uK73D09MDbkHD3JqWj3V3TF8FWWecx67z6FQM8aWFJD78O2J9r7oGW+ -fFIb+ccq5lrZDdMOZKeSYxPj8RxEZloL9mf43eMdLFg= -DV35hS1I55lzc8Rx3j2gKq3qpS4DGEY60WsG/QAoTXw= -tbVOTg+NfLlTyWxlgN7BTrKZG0+dC3Pjrp6KzKvtS4A= -u/w7lYvOA4sXyLYt/Ceg+dy7vbWqHKAUinXlMI+xkz0= -8NeoLWUN/HbOvEj4zYku64g6MsBHB3pIxUY9k/g46pm3Nw8eblpWcMTKpfvJRflp -661hZf7vhUQ+50okfwfTXw== -o+/LpOe0noTt0q9uY7caTYSaVB9I1gwyK4s4NWQ7NUA= -96orka/uERLyRst14azQwhCOqhTfcgFhXNAQS0hmuOERHFyozmIaiEuQ9OSw/P9ibeuWsgQB5jJpgmHGw3QP0edIOQ6xmIdxVHsqECvnqwY= -1u+XjG/2+GSQRv6EzCaWRQ== -sDEbfywocoesN89hhGJfbn+Up/JgL1Qg2VHfdBaVSh8= -bdMrmpuFQ7yM1zhu+h/eLpcnNtalyd8b0N7ueBW8qxJW2cs9cWz74j8D2CGsBGSf -7ruGyOsuKMUu2VJjD7qOMeaAkd8lbFxmFgrVLxFs0oPIjIIPvkx0ZFyMjf6oRSyt -w4I7mVFZGDKiBbcb41eQkxM4nnk+e7mIaguT0WGkkVtz+XhNeocu4Dwlis2SGs+uEVlFlJ1TTROvWNVda6V51XiWTQVNeeq+mwE7orSeGPlP88A2APkdQ7WXcpGsRZSeQTuqKraUSJATMjQccjEKUw== -VmVrGQo2zRokW/ZuO9bN646KfasAt/rPZ4Mzei/x9X4PK6kawVkqvHaQdE9ItYIrN0R1SNQyDXs9q/cle8yTU7duHnPCfZk7g+UKQZaDYdoQ1egSYJLdZGNCNlpNm7lOjvo7TlphOadcZr0WUZLKDg== -a3jbUXPmyR9Vb7Xvsw0w8VcvNLwUIPucqyBxSewCjvpNGf4qVC9bC/Kq8Ub7+IjB541pebM9XViq+TAyzXBMtnoEC9wqaxeFrEhoP73Ucb8zxTbkd8fs/i4yUk10fuvtF4yZG4ou3qTgQ9i1iaCFJRjDi7GvIiufx6zM8N7OwL4= -96orka/uERLyRst14azQwnND1LaAMeJ6hPF2g6RNEz40OtKZG76yI8EPfLXQ/ptOrhgtHi/2LckZEebSz/acKg== -1u+XjG/2+GSQRv6EzCaWRQ== -dPf7g+b79gcCgal9DX4pOJHyAfVR/z7s6ET0GpBby7E= -0OsCC+YpIPphU/YpLoF2Kzv8rZ15USoyP9EDEDNoe4E= -lNoJsK2hWEGOaXNpZFMEKYAMKxXzTQglIlFqVZ/qv90ift2NxK3uK30zwQMR/g2E -vQwaisdUFOt9b0SJYuH/nrHigrTUtycF35lf58xGUQo= -VmVrGQo2zRokW/ZuO9bN68kG9x3f+w5aFN8e4/3SB7hYxvzV8Iokc8k375ZmlVH5 -VmVrGQo2zRokW/ZuO9bN69n2IH9Vunz7hXYmWIVxfwPXrXJCVKsHyYzEby8GZS9u0PX7VZIVelGtG52pT513uo3a3aGreyDkMtDppIaQp1w= -VmVrGQo2zRokW/ZuO9bN64wauWr3TvqFolPCIg7VtlOeTNs/abgaVrpCuUHCHrpv -VmVrGQo2zRokW/ZuO9bN6xoSQ3etHchjGzx9GgAoZUY1EPK486h/g4GcxqyTNCwQ -M0ZySqkmhuHCw6olbCKv97KlG7pHnkVH5PzxCv3SOm8hBQ62OlY+Ty/yX79KJJrdNu+CHQd3CPIkR67gsrZxGblpwz5ac1JVqyFJQsp3MvnS9K1ZYGSHoLMHlhFGV3zU -VmVrGQo2zRokW/ZuO9bN64/n5EL8V7CIqhp9FPzHEuQ= -0OsCC+YpIPphU/YpLoF2K6FQb9eutkS0W+twNd64F+O1GZYjvNnJ0aTvS0PBP4BFzU9cR9pgLcItJ3/8oa4lp9NS50ZiYATfufhv/OY4HvuGJ1DtfPl2w5Pl47TRv+1Q -nOflcriAnpFPxVtzU4aISA== -xUiJWUyMvL3eKTICfxM7FHlF8+ynsJSeQ8zvbn8P6ldzdd+1cSzmI5LPDCIBQ0j1BMY3iQTiHHXKXbMlTNzbIg== -4lm0ybc3aVxLaNQODc9aBanfiyaNlwa5Y83cl2wzTJM= -GJNoiDRZuv2t3D6WjWIl+qITVcmlxn4NEeTza92NOQJaBcd0iFalRE3MrJWhGMGx -VmVrGQo2zRokW/ZuO9bN63BJBJEXm+rc5N8L1OHvM55cAO+Ku+qj4muqvW20+pVMp1wYb7OOSX3teOhakn3wUJeQSJL3mZUL2AZMqu0/OdPAAjhra4OMDXmn6v6Poq55Oql860T4eKYpMhnUuGUa3A== -ACEEdgL/kNbx7RaZcSRxZL+LzF2dVZa5hwngNS0Drfw= -VmVrGQo2zRokW/ZuO9bN68iybrt8ScY6aQlDmfS7eSM= -lGY+HGJ/DlLufZHWWlj7U7tQubWSU1u4v7fNn+PU7V0= -1u+XjG/2+GSQRv6EzCaWRQ== -N2ewPkaF4vBztOl5yvdzXb12XWHEkfuTMQQ/S/IatrU= -DyDHCcahxG8x9eot9BhGGoaSx73c+e9U0Tp+L9OcbF/XbjTh88pSzp7kgiuYM1B2 -7ui7GKVu+hA1zn3iOmo+va7LW68AgDWItaWEVH6a7oq2MogBYQqB9a0ERfgAfeqp -+4NbF4lLQ35m5UiB1/0oM4hG33zvxiKsPHbFeRE//WI= -ErYWeNPhZeZLxfLfOGSlIroR342Y4yDE+5gd4kGeGi+Cxk34mAtGJIhUD+XL5o6JTvUKzpV2ggBzciaY2dSBkA== -VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkk0jB5v9uia9s/LvId4LpDPxheq4KAuxy30SMBaP0VoMyqtdF/x/wrhCqsqsW1LYHw= -xljVybfujf1U6lUBrfLztokiw0p3LjxCtcQVbdFJCh55nLdKbOwDf5U9mlEssvrw9UuksdylMWv6nUbn2eAV3902tdVMAzh0p972kCdgMT9YwNZR7uu+4w77+HGAahFEj9ce+vlHwr+dBIbvyCIAnQ== -p9oVsBgcyiBMjDb8CcPOqN8UTrGCDDQu68V59h0pkaI= -L5I5tdTeebwyRuKjqW19YSTNGjiTv77wwjwChdXruX5PCPlB01g/8mzPNbcCV4Ej -JXk5JLKM/1JqEbD+ffdNPhq/wJlzDLI+uOyyhRBAqdkc8glvKXYuquXWB3Up9JjK -rybirQdlAeHusp/N7GM0sKNwBki4q4kuOQGfi5/04eredJsBktFstkBd+UVmjZ93 -/VHZ8wcOZ8J40IbgQT8a2I6Oa7H1i8uh0gQGQdXA45vcac/EKnJbhl/dTCny6O14DZIAcyGMJrA3ITncE4RtoQ== -XUWmzg0XlHIPZ8hF18QkYN0Aztefgf1QQvjhvSQd5GE= -XUWmzg0XlHIPZ8hF18QkYAPejS/nuYQn78KM68umIdFJnVBP9H5IDJmlSsR5EqteYipZ+YiJplji/ek9bSPUaw== -XUWmzg0XlHIPZ8hF18QkYObeL8P52xvmTgwJHyUm/mfLNMDbo8CGOnJsVUQBIWQlfvvbM+AWxxqMYzuuII860l/8q20ZMBekthIoTIQYrDy1B8N0QDPw2xPUp8eNDncZ -XUWmzg0XlHIPZ8hF18QkYAIVEnTrHWvEYlMdWS6Jr8+JxDnush415VXf5xXFH5MfPlMYBwh5EK6N7tNxMd+x9rx7QHcf0/k2of4zBCX6BgG6dLOO3vmQ54XKDk9bQHsNX8oqmp8RafMghNfHp5m+hQ== -jU/UoCJH//JN+eJXlaFsvzU8G2xBEArehtnC0GEU3kba88wtG61nlrgiA1vZDQqQbOZZmS5jYHUfwpgNaCOdal4h0gBZdfVDpEG4TnwcSco= -LjE79g4isZOsOnkgBUQGVvXGCw/Wz+rnAp975tiAu3U= -1WJNrGwGz37apsG1QXCNVX6sT/6pveI0wT7pr1N/pmU= -0kmS0E/2gTphgwOZpwAE2yHpQG847xl/ajDfa5h5ju3vA+PsuXXfOQZPpYlHfc4h -4uuueBhid9aJeYpW9TknMTKFhi7c1ZuCDkAynCPWLEE4f5zCoL+aW6sgf4jEjnJZkRv4BgsIwv5h+Nn8Ll5k4uJ3HJUccyzNzNMSKu4HZ3E= +VmVrGQo2zRokW/ZuO9bN6+nO28v2yifpOVSBCOIScKjA/g7ZwiQ4vh5H1pX2c01e +VmVrGQo2zRokW/ZuO9bN63+q20PR0+FHpMQfUBt5plF9ESxljQoAM4jPldFKvwLV2J5uZGLqzz1fzbV4oY4NnA== +VmVrGQo2zRokW/ZuO9bN65uwa3I22l0PwfjmdhoEZvw= +VmVrGQo2zRokW/ZuO9bN63rvZ+qoLKHb/OdUhQc/5pMosK8SinZtCeVTYSBkyoq3x85XOiNqHKuzfCbupu+Acpp61JcXVxQnnti8viraFcgVUbpNVcbRFcrmYWZZNnn/ +VmVrGQo2zRokW/ZuO9bN6+qf2tJEEoA/LUlqwXZKVHvdsvRg7gN50uJ1jlUienHN8I0Hq8Z3ZhUzAJAqSVYU1QYoR/NwBcxEgXy907dI6mp5Hl02ni55iCwv+Hp9Cmgo +VmVrGQo2zRokW/ZuO9bN6/zJ6Zr9YGx3fr8LuP0wr2ukKkK2EcCWVuCGDcB9jzlr +VmVrGQo2zRokW/ZuO9bN6z6XSbbDDRSju3N+XYMkLY1WZgeZrhuFxyCI2D7DexBL +VmVrGQo2zRokW/ZuO9bN68PrqTZCypxr067XeXvaORGFMpU6x9Dm73dzJH4XiU9y +VmVrGQo2zRokW/ZuO9bN69lpLHQEQjJVCD0Jk3YyoAQWZ5Oh2p6xbuUpqDLH5MQOL10mo+juAXkb9/dB59qGpO5FSRNXk9Zq8+Zrf4Ic545JWbrBLaTInpopE0WMBddKl5W2Ge2llMGi9eMgZjtuDQ== +VmVrGQo2zRokW/ZuO9bN667FF9yjm2VAmi3UMAO3hVWd9LvdNy7E4wSOiENSUkum +VmVrGQo2zRokW/ZuO9bN648PngVnKTtx+x3sa9gCvVU= +VmVrGQo2zRokW/ZuO9bN61jcAX3kACZBGmCQy5130SQWrQ8OH9COHyiZT7tod8nFubieyp34e67jf3800iyy4A== +VmVrGQo2zRokW/ZuO9bN64SYvBSEaVz6emUFLHY9QrW1/dkUWSOfv4rordnW8uI2oh4zcaavdLIPmVF5Et84Eg== +VmVrGQo2zRokW/ZuO9bN65lD4t3qU8iRjN8L6k8bdDVpp2pvWqZM6MR/K2sHXR3M +VmVrGQo2zRokW/ZuO9bN66+4eRz08qO5ZdCtzi+OAFcoSrzz+9ixk6VkFC/2kgXEdXjkUawsKNi9KKcfzZCRPw== +VmVrGQo2zRokW/ZuO9bN68DF2QFJ8ljd5TDy2WZCRZYVaXZPL+Y2ywsejae2z2Ra+Bm2dhhXF5ummUANHV2SQA== +VmVrGQo2zRokW/ZuO9bN612OfVxbO73BVbwJuFSQGkYXIvcTYdpfRSQCHwgkFq+Tyff5eOkT4WcmrRwbW/OZEg== +VmVrGQo2zRokW/ZuO9bN6w56CeY0Pzg447pbm0AfLgq4VCu8JYPz+IdlSsfUgnF6 +VmVrGQo2zRokW/ZuO9bN637ObyEkKaeFGEakwsWUepFrcpUn86IrB1n/5i7v0g0x +VmVrGQo2zRokW/ZuO9bN64/r6z5ns9KsXEGPQVMUnyifnQsB71NB5xN4acUmqJad +VmVrGQo2zRokW/ZuO9bN60wOtIkAhTv6eGXhFB9MjZSb6RMPasqruk4fuHQX9FGm +VmVrGQo2zRokW/ZuO9bN68cDhwAKTM2Cy3z7y8RSN78= +VmVrGQo2zRokW/ZuO9bN66+yo8koaMFaeR72YfcN0MA= +q0HkBP1UfcaD3QuvseZg7fKhJDOhTS9MsyZs985srKk= +wlLHv6kT3Q/RmtMBN4nDAcwxg33YZpFP9ffUHd/5JIcwmMTqb0ihJ65oosIq0zet +VmVrGQo2zRokW/ZuO9bN62nVoOGnmUp7QUiW/ZaOEYF7MHo20bQfM5s0PCUWqL6NuDE6ztiR5CDVfnIly2EU/g== +VmVrGQo2zRokW/ZuO9bN62PmDICAirRnO4Q9KRe0UCyV940DMecLF1q14Lu0w9cN +VmVrGQo2zRokW/ZuO9bN65ETlE/uz6nDll2tKT0mO/nyWiA4Z5wYnok6hkK3X+rS +VmVrGQo2zRokW/ZuO9bN6yAcfa6ef3EXO0QkjvsFWd7+vCWVfpLDjX+KcqmVRa5gl+QZwwEooJBfV3G+V1GmTw== +VmVrGQo2zRokW/ZuO9bN69twiVqU/YruzaZ31Ozd8kwFrmcC0XJSxyGjZPHTjljVjTRIrF4MtaVjDkwVq3loJMIR2YSh9qaQ3SPPDmhCnSA= +VmVrGQo2zRokW/ZuO9bN6wMQRwD6rXhLUXMdURcL5Ag= +VmVrGQo2zRokW/ZuO9bN640QMRIb+NfIAnqkUpUM0UyM1UW5nFbYvKPvqsQY7qs494aS/4n+dnRqG6/WBFmxDv9kb9uX+yopcF1JYP/VDIE= +VmVrGQo2zRokW/ZuO9bN62xFfqul5F7aMWtovWOJ5tZP1bJgyqz4vpQ1vcu9ZeS7nO6J17Baoc3zlb7Qe8qElLM00WI2XDnSBgzQHmlHrIgvHTezk3aB1hm9hvb+Gv4T +VmVrGQo2zRokW/ZuO9bN68PIFqUsDNaIp++rUmuGFKn4o7M3pUhaRcA1ks5Adan7jnrB7ZtcIC8KAwdazqXsJQnRsz/VyPAD6sC3mSzpwPRfi2ghVLotdjoha+woBHHlkbOiZCUrVfc7uglqYXgMF9aodbyDf26K3EEkt1cx5+Q= +VmVrGQo2zRokW/ZuO9bN6wNy3dMSKzw1+znxXLOAZLh5FEFcOrAX3cntmkTItZyKKVGgHnm92b7h7ork2RuLWUmLbdVgqwxu7Wl8pXJk83I= +VmVrGQo2zRokW/ZuO9bN6+nO28v2yifpOVSBCOIScKjA/g7ZwiQ4vh5H1pX2c01e +VmVrGQo2zRokW/ZuO9bN63+q20PR0+FHpMQfUBt5plF9ESxljQoAM4jPldFKvwLV2J5uZGLqzz1fzbV4oY4NnA== +VmVrGQo2zRokW/ZuO9bN65uwa3I22l0PwfjmdhoEZvw= +VmVrGQo2zRokW/ZuO9bN63rvZ+qoLKHb/OdUhQc/5pMosK8SinZtCeVTYSBkyoq3x85XOiNqHKuzfCbupu+Acpp61JcXVxQnnti8viraFcgVUbpNVcbRFcrmYWZZNnn/ +VmVrGQo2zRokW/ZuO9bN6+qf2tJEEoA/LUlqwXZKVHvdsvRg7gN50uJ1jlUienHN8I0Hq8Z3ZhUzAJAqSVYU1QYoR/NwBcxEgXy907dI6mp5Hl02ni55iCwv+Hp9Cmgo +VmVrGQo2zRokW/ZuO9bN6/zJ6Zr9YGx3fr8LuP0wr2ukKkK2EcCWVuCGDcB9jzlr +VmVrGQo2zRokW/ZuO9bN6z6XSbbDDRSju3N+XYMkLY1WZgeZrhuFxyCI2D7DexBL +VmVrGQo2zRokW/ZuO9bN68PrqTZCypxr067XeXvaORGFMpU6x9Dm73dzJH4XiU9y +VmVrGQo2zRokW/ZuO9bN69lpLHQEQjJVCD0Jk3YyoAQWZ5Oh2p6xbuUpqDLH5MQOL10mo+juAXkb9/dB59qGpO5FSRNXk9Zq8+Zrf4Ic545JWbrBLaTInpopE0WMBddKl5W2Ge2llMGi9eMgZjtuDQ== +VmVrGQo2zRokW/ZuO9bN6zOrIC332xfGtfL69qLeHa7OTnnMz43afflZy1t45Fu0 +VmVrGQo2zRokW/ZuO9bN648PngVnKTtx+x3sa9gCvVU= +VmVrGQo2zRokW/ZuO9bN61jcAX3kACZBGmCQy5130SQWrQ8OH9COHyiZT7tod8nFubieyp34e67jf3800iyy4A== +VmVrGQo2zRokW/ZuO9bN64SYvBSEaVz6emUFLHY9QrW1/dkUWSOfv4rordnW8uI2oh4zcaavdLIPmVF5Et84Eg== +VmVrGQo2zRokW/ZuO9bN65lD4t3qU8iRjN8L6k8bdDVpp2pvWqZM6MR/K2sHXR3M +VmVrGQo2zRokW/ZuO9bN66+4eRz08qO5ZdCtzi+OAFcoSrzz+9ixk6VkFC/2kgXEdXjkUawsKNi9KKcfzZCRPw== +VmVrGQo2zRokW/ZuO9bN68DF2QFJ8ljd5TDy2WZCRZYVaXZPL+Y2ywsejae2z2Ra+Bm2dhhXF5ummUANHV2SQA== +VmVrGQo2zRokW/ZuO9bN612OfVxbO73BVbwJuFSQGkYXIvcTYdpfRSQCHwgkFq+Tyff5eOkT4WcmrRwbW/OZEg== +VmVrGQo2zRokW/ZuO9bN6w56CeY0Pzg447pbm0AfLgq4VCu8JYPz+IdlSsfUgnF6 +VmVrGQo2zRokW/ZuO9bN637ObyEkKaeFGEakwsWUepFrcpUn86IrB1n/5i7v0g0x +VmVrGQo2zRokW/ZuO9bN64/r6z5ns9KsXEGPQVMUnyifnQsB71NB5xN4acUmqJad +VmVrGQo2zRokW/ZuO9bN60wOtIkAhTv6eGXhFB9MjZSb6RMPasqruk4fuHQX9FGm +VmVrGQo2zRokW/ZuO9bN68cDhwAKTM2Cy3z7y8RSN78= +VmVrGQo2zRokW/ZuO9bN66+yo8koaMFaeR72YfcN0MA= +iZaIsa48RXfE+uf/yF/rQJ2YbiBFucc3UQ/ZX8J50oEXgugXrduKe8SAiE/mA2k+x9cSJXAmQU18SPdh7WbqWzX9z5/KwBv72d4DCmdub+k= +iZaIsa48RXfE+uf/yF/rQPbJiz3AmYViq4UV0pB4DK2JwG8WReav5QOi0wsr5LasNuL/gOtQLoL3KtlPPr3uXQXWBSAcMZDnjSSxDRdNa0g= +L0eUthVnpkGsmKFAX6d+uOd7/pFBSC5ZMTSOuUN8Mf6fts+kSBxyDqfSTD1r5upt +A50UO/kAI17YP7MCbTvBkFQ/jf5eMs11PzZj1m3IBsQ= +L0eUthVnpkGsmKFAX6d+uP8NsH1kIhWpvtY3Zh+7ohqvANtBrPfFL2yjk1Yi7vD2 1u+XjG/2+GSQRv6EzCaWRQ== 1zukBHMguVb5WvA8m8HQjPjAhqCqUt1LhX5PoNgDmCwZWDEDFPUr61tKw2fBGv8i R2NB8DN3pOWXcW6vM0ClmEMoF71ke+0fKsaH+rPi+7Q= Gbp0us/o/RYxNCpypte8wkDs+L9ibC0lB6ODeIGeBUNxo67ovf1PiljiTsXxss/E8KFqZsYxQ14/DuSzxbDpP1Rmn5k4vKbVVgHvN7DjfW1/aUYk/wiy7wcKI0ba7pqfA2xu5mMD7OzIgU8PEIJnzyDnryyym5TQAXR242Gkg9Y= -uIsEpyb/BmTr4pwkQVVUf4sU8Bq17UUXFXa/GD5UzvsLsnfQOtQoQPl3At3HFxd9QPRV9DEKp1t8SX0Bk3fmnko9Ia37X/4Q0DzoXRCchidJyqfP7Le9BvU4tn5EV56pE45cXY0sO5ucydWjFDvcGTyXWup4vl3wqBOljwhMi8s= +uIsEpyb/BmTr4pwkQVVUf4sU8Bq17UUXFXa/GD5UzvsLsnfQOtQoQPl3At3HFxd9QPRV9DEKp1t8SX0Bk3fmnvoykKrDi2HFUlOYEeL68zk= +VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpEMPvuOg4yWJa5Si36Ytvw2LLSYaCIeRk4A2orMyVrTl3kZF0IK+yW0P4X4FVMA/685LnHXrOBkv/6ansN6Bm+8xH1aLMTZ6T4aljNwJwoEg= 9AUqsxjSX9s1jg3GUS+NB5ufD2BIObuhk4izDv68g49BKR0/lv0Y5YYfBQ98x9ip -MzOj4ZiBOJDNVP8vi/lFQHphDQLizMa0vztkd1r5mDy3IP/1XcaniiKAbPj57C+Gp3AnBwYczoXDbvTbbHXTgEtqT7YQH3uz1lfgeCI/p1Q8ouWveAVY1oUcIhh/S65vZICxWEnneFzHiI45iNXu6uRVeIxdHpSeZaCZsu5ghWU= +MzOj4ZiBOJDNVP8vi/lFQHphDQLizMa0vztkd1r5mDy3IP/1XcaniiKAbPj57C+Gp3AnBwYczoXDbvTbbHXTgHefgXIH1gZPEyX+CfJICQk= +VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpEMPvuOg4yWJa5Si36Ytvw8Cdaw4c8upbBVu4cO/efz03xTeba4Bh7FSDqsCcckUce0IMgp0JtpYzXWUV8kLCaCXkKznBzU3qiLc2t4xjGjo= 4QQ/zTZZdnopElj3JQHNa9PygZa4ZCO9taMSrns8R7Q= CAhn8dRUItEbEErp4w+lX55YSYfu77vGi60UCUzYYfp8S9MgKw/toqSe6FMs2M1v 1u+XjG/2+GSQRv6EzCaWRQ== 1XSH7jd9+l3kxs8yJf4VMU+0Br69HiFgxoemVlEviZQ= 1zukBHMguVb5WvA8m8HQjOPEJCJ9+AzZ9DJkuqA/jaCsGXgslAqdvnFUngarGbeG Gbp0us/o/RYxNCpypte8wkDs+L9ibC0lB6ODeIGeBUNxo67ovf1PiljiTsXxss/EPxmHicn38UNouShGD6msyfGuIzNLsjiXu2Urgj+cgR5uCwMmPR1hMRELa7GHXMXTCA4wPfqOq4nE24RW2ABDmg== -MzOj4ZiBOJDNVP8vi/lFQHphDQLizMa0vztkd1r5mDy3IP/1XcaniiKAbPj57C+Gp3AnBwYczoXDbvTbbHXTgEtqT7YQH3uz1lfgeCI/p1Q8ouWveAVY1oUcIhh/S65vZICxWEnneFzHiI45iNXu6uRVeIxdHpSeZaCZsu5ghWU= +MzOj4ZiBOJDNVP8vi/lFQHphDQLizMa0vztkd1r5mDy3IP/1XcaniiKAbPj57C+Gp3AnBwYczoXDbvTbbHXTgHefgXIH1gZPEyX+CfJICQk= +VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpEMPvuOg4yWJa5Si36Ytvw8Cdaw4c8upbBVu4cO/efz03xTeba4Bh7FSDqsCcckUce0IMgp0JtpYzXWUV8kLCaCXkKznBzU3qiLc2t4xjGjo= b4OJVZe8QyIpjuTpKXDL9A== -n/Vg/an64od1JqfYD8zjtsZlIrtOVreSEto4JRdo972fXSPXC9glbleBdvuvJyBcLXUEa9mxHCFwIk/EcNAsxka2/PVgSn4sRDhJcwPf9ZuU+pcTYk7yL9iStuLBH6WcOxYcU535Ts8JW22TXuRUZg== +n/Vg/an64od1JqfYD8zjtsZlIrtOVreSEto4JRdo972fXSPXC9glbleBdvuvJyBcLXUEa9mxHCFwIk/EcNAsxsoncZrsKc/vpepx0QNg8Q6VwpRBZJg1WXa6HUaF/iqn4BTs2V4xMHqKb/LEARvR3A== iUEDlyYF71b358pIL4FKL4uQouNP3knkritXeMCFqD6RcAocvu7FrPVBCb4SQVlH JomK3KjQVhm7axi7Z5yMpzSzedclpQ0EPWf4a5slcp0= ynmt6S+38NUiCOOHWGlzRziAza4a5udNX5tgg2hzQ1k= @@ -531,43 +329,23 @@ VmVrGQo2zRokW/ZuO9bN6+Iz01H3FqtnAgb7mhzu25zjxGKQtsXlvqkagztbW1AG 4gO44pHRPczUcmpB4bg0pklZgQJXm0A2Am+4pJfHwxIxdfNIgu3xCJb1c+nvhf0I VMfVrQporTLzVAs+KagENs0jVofd/mPyGKFNcwoEK/8= 1u+XjG/2+GSQRv6EzCaWRQ== -SIVhMVja35cNhEoyyFHyU5ueFbyMySbyi9mnmmhpxVU8hpsEV8BTtrKQwQni3PGF -q4nc/jwATOMUyfSjLibfEW5DCAn6VBbRQRnaOjh7eA0= -WA9gm/QP+j5PVCbJRTSxYwp3kGb4cMqf+qwJUWVEEPnmqCBjvCtbmGcOopjB+jck -UBbQHMxDYmM54VXbqfW20S22f4jK6BUOrIYt632vyLE= -0OsCC+YpIPphU/YpLoF2K65mO2fOEgg9BDORJsJnsukfPkOuC1C9HL5KjkD4ozjN -v4Cu02hZRDsW+85CLRBC5+QhixIrX1sjRbc+k4FIGXQqvaBnxkvwl7N6zF1jmyIx+QaQW6LMymcXOKxyLELGjoDaY5dHZslh+zvOJ3nOF4o= -v4Cu02hZRDsW+85CLRBC55x7KgPFiTIBJuK7Bj8UUn6kT88eAAMKmh4eP+KGfruG -v4Cu02hZRDsW+85CLRBC52M44iq5ZlKYvAT50T1VVUxbP+lYYf2HLRnTkcnOv/7RLTiXmmYbKFrtds9nTvmC78/4+GyXpy//qMRxrz1Dp81yXvKLN7kSquN/lGm0CbyIuiiLCxeHe7ZblRuSW5w/ew== -tWSLqD1lvEP9Rpp6I27PpvXrraKAQUvuzpkWxLOkdYVAxT6x12Fs+vuA/HccQbq+SMpYqdMtX58R+H1Pdla69g== -kJxoTVctk+bGjMYgKxsjjSmeY05Z0U8C6JFZmjUMMCSxIzLqQNB1ftjf5Kn92nPV0SE/2kEHSEkvBISrHEOc8olUZRsKyiScIOXAVmL8+AnZI2OJatRCbEYuUHSOXcH0UrWCb9M0odIJbfpL0b/Lw0Y3ebqDZzALGgeESF0E1IJoiAc76H5FHNtYFugXFh9i -VmVrGQo2zRokW/ZuO9bN679dY2ryxqp4ouOaU1fOIumFLB70f/WoAZf/2w7Cl1Z8ZnqXwm8+/EGNKMaSd44zNA== -f58SBztD4UCgJ/6kPztVo29CIZDUF3sUhAF1SPuV/14= -lGY+HGJ/DlLufZHWWlj7U9tymVCSNLDh3vOFZaRUBuc= +GAnfE/s3bwTKW+q9t/IvXGSEEqcquFF+BSE+tVxZK4Mag4t1i4lz5FfEm4LWjmZ1 +0OsCC+YpIPphU/YpLoF2Kzv8rZ15USoyP9EDEDNoe4E= 1u+XjG/2+GSQRv6EzCaWRQ== -nfkJ3QMSmeMN6/r/kF1fGVfrMpks76Z9i1HsARq3TTrMiMLoOh4ZCWV7E4Vz9LdZ -b4OJVZe8QyIpjuTpKXDL9A== -HUxaWbdFNk9pZ+7x3i/kLN34rJMFESnZNqgFnOTtmncZ9MojyT4ik/ZLHKgOBvG5jYiwtWKmCbv5/tg2EykmXA== -NhnIR3Ilo4H2su9/cTNo/Ps3vYSOiOY6esn1xeoWmAlrdRFFnm+r4q+F9O7KjdciOkRcYwkz4orBueV5Pha+Cse7WK7UEu4tjn7yjq09/pc+cqG1kgwWKp3q5L/lI5vjJjeYoh0VOhmY1zWisiB2GA== -NhnIR3Ilo4H2su9/cTNo/IbXc6jmjXpdg3/b5Q0M//5RfYowE2A9IKSdANsXKONc -xWoGNWjKGPfI4gq8aHoTfDMe4+Xx9fgEfvyQdRt49XptGFFda7+W0fuqWp8j+ScVv1QIofgDM/c9givgAZheB/DaAF8Pow88H+SBfdPZZ4jcj49xI9n48vcxq/0T0GE740KKNSWuK4oLY4A7yJGVoQ== -L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmWop8iV2vWiZtvDe8S6SrMTMp7zITHQ/ThgwGhjPt6ytI02eK3bONKsBZ7oYZ/qQ1y3imd8XN6vZ5VOdGWJXb1B -mfT8DrNbUmxQ2BnZ1bZFTLh9MEuZKOpmAfF70OnZ9TU= -L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmWghjKa4Bx/9hwfBJOgnWLqfnifeKMrqIgIpv0mkoOEz+cnxRlxuQjDiUexbKFEdGXWmGE9nKup3echZTtpdLak +8QRWubxUZqaYwz8+eEsRmAl8259poPMgRVpgRTzRDlVKL/4pN4+J8jVBM3bkLEuGsA/xFPJuUTY7qKMguifyXw== +4lm0ybc3aVxLaNQODc9aBS7GFMEtlidkF+IRzEnX2oGy+mWmHDpr9oF4rr3K06mohCHV+zHmyAde8hFkmvnKIw== +vQwaisdUFOt9b0SJYuH/nrHigrTUtycF35lf58xGUQo= +VmVrGQo2zRokW/ZuO9bN61b6agPRTOAxq1kdMgWQW7+3ZPcjleQyLEx+tRFV1WniV7m9UIPSd02oQGWZVd1uog== +VmVrGQo2zRokW/ZuO9bN60uCo4BVhDn4xesCEcEyfnA= +VmVrGQo2zRokW/ZuO9bN6364uGeqpT26B6rBlt0QYwTjVPsLbM7YJDbt52pQCskR +VmVrGQo2zRokW/ZuO9bN65J+kvX6cQIIvhx9ssVFzZvz2jeGci0U8xZV0GJNvjJu +VmVrGQo2zRokW/ZuO9bN620zSkiHBXev6YTvy3qjpOw= +VmVrGQo2zRokW/ZuO9bN6+XJedfb5AhysJRZavxLKtaQdxYzIYp93oJl3E2O/N6W +VmVrGQo2zRokW/ZuO9bN6xoSQ3etHchjGzx9GgAoZUa8xdFg1e7kpqDs0wAwKQWTvaIH/BuWv2hD514M3SQf3IYdmFiGVL/KvXGPrygWLxLPl9ciVnxbE0N1Hg0o/Wvc +M0ZySqkmhuHCw6olbCKv97KlG7pHnkVH5PzxCv3SOm8hBQ62OlY+Ty/yX79KJJrdNu+CHQd3CPIkR67gsrZxGblpwz5ac1JVqyFJQsp3MvnS9K1ZYGSHoLMHlhFGV3zU +VmVrGQo2zRokW/ZuO9bN6/vHEEiMOBtCIlg1b8xVuig= 1u+XjG/2+GSQRv6EzCaWRQ== -KiWYwpJCvVh7pD2s6nbEY7wXqZOCFGVUVZew5Gnpwt8= -1FfqRJIaTv+Hy0UdnrEpXkay2ZR4P6JEneOylPoQjT4= -atQYUl7VDB6q1/U7wutSWDfOdKHc0LO3GBehPGzz84kB4HnSnaX9ecgsgds2p55j4iHYP6Wpw9G6UAP/36tXv7T/EbaSkearWbzt3B93hng= -UV6WV80R3POE+S2K3cNp7Be03g32NHcbHKk24qNdLtrAp0A+usTj+bCpNbB7iygz/7dklagArUizAxR8bSBENvVBo4ahdgX/vOCyrqfDp/su2Uuyp1mpLI0Vy7snmGERDLUpK2Zqa7AQksPVyiEWlCd+hBNkl2UKZKLhWirHqgeBi8iPaxCuOgmpX2Atifwd/P3t0vG3A9T2cS5OavVrTz03m7lAjGsSahK+zwnBj/ARP56LJ+x3wH4vD2XpZUmfigVWgJ0qHCOXBPqWJRUgQYjzxcILnrPL49EQ8j6sQR8nwgDL6+8eI80pIsF5ekz/E4h5peaKypVJdL3SarYHxLBkhz5E2Ve5eFOOoR5rPUfbKEqFWSj9zKXBEYDO1lrG -Z6/7wkt3BMqq5Y+jFo+XDlF3kOaR2IeYDNGUsl9T0uz/qKT0IazJpYRH+vtnDhQSFLfiJJ4mFRQHBu9lRaGLjjTzA37xPnZl2145pk0J6Ek7HdHe8JPU0ARBXIMrnfUMvb0t4UnusA7rXHOaFDWYu6KxxuAp8XO/o/n9p9fNFIM4oMXIVbBiDXhVKT8DWLz8 -OlFvTKqdeKF9w1tvvZyIDNVzahkzwo5OtwSBOHqpZq7rQrYcRl0GU4rDuB4C3t0SlpJc98Bf9owLulltlNj7xX+vOoRXJdkhyX94sA4Hc/qCP2bvIeB88DI58M/2k6W0Kb918bA1ebaRMTqIUaA5Kqb6WEP2JiD1O/E04FaExsDUW1TzKGwXHdYljEUHNCqr6OVoNDDqX2VRvXQN6Cw/4Bow8o+getBg3mMkopvqKac= -gIITPXcfsbW14W9koRVg64ubdAIQuwogVyN30riQP9qCEt14hC9y+w/0OL0gIB+uQpDB3L2npfDghCuu1ZHAnw3mh7q/syBZmcJyI8px/6s+C+gH9RIJN1dxRFC1OvA/87C4igNS3p6LA5Drq+eKLdx1kZpfIkEqFnzgcD72TyyqxJifu08CF019veuodsMQS4PaUKFU5lzWiAjKqTOusaJXA2XRxOT3j0VDDNr8sezyKQHdB97nFUoxcZXHJh1TbctlinXCIQIZtO5rF+MOpxv71Janh98MN/WB7ZYOSrsmBA6Wb3RKODvrTnlotkCvSikbwFecoLl/Nc0gRpJEw4jlSUQ4Lzf+Q9MC1BEWnEc= -AE2D69YCySZnqC/KuUyd6N45vDT3A9gQy23Jj38jy1qskqQxliSU/A8Brj6iQDXSs75PS8HPuR2HhguaRMk0i1m3IXtHktc0SKO/yoH9h2jLLKDmqoax0rksDE4PRuk5/QAaMXTwN884qBDxCUPYrqynQjdkcB1vQBAm+Rrglu89a3x/SP1IJ/AmLibCQ+1wOAEZu6E/GlBCpc6eKAEkrViYqG9iB6/K3QWNIVoPCEJDYlWO7YLhMAxGapLU5yhyyqW4/7gqaT+RUob7ggp2J2TQbMTjGy73viTlPPVoNz1pOo+mVPNweiMJlvtnpo/XTRxDP3pJRpVbdtXReiSrdQ== -q86vJ1Gk5zoQJkWiDC3EDCm6rrr04P0h5y/ifTvinR0mOl402S5t1jFDo8COuFsq8JhZQOn1a3UklBocfPKb43Gp1Wc8I9Wxp5gqNSmae+T2Np2j3Sgc/LVl/pJqt7AM/4quAs1e5xZTJANRTsYN7TpzCYuRvVXDbF3cbKYXcEpxiBkEDLdI3Ua3ffXh9scdAsiV8scPZpYR1YR4gjAwqfDYhwyJywPF4GvmpNBGMzxkCzMBHH0PEcbydn10mQpRkZBclHGE76Wp1zk54dcMVLCSoZCZZlNVOo2YKwqgwtD4kP6OQ8u5MxZP7jRZxY4e5nsY9Z8BZhDm+OMw3NrFCrfwkNrYJ/VmFauynaKJzFDuXgkMOxr/QUC7KzBqUK8bPjzfCEB5UxjZcnotUcQz0PffMJ9s/HiWprEfRrbnOXzY6lL9OY1Ici9rV7dsGNJR3JdmAA5nM52Yar4LjGhSxA== -atQYUl7VDB6q1/U7wutSWE+oQjmLkleKASuxcnC1RPu7SFl6slp5hJ+4H+5FMOCozi4z0ggrYDuirySFenOLoibqLBJHF35/C49Aaibv86euKItNzlPqR8c1tXjxlBu6Y9sgjFk84IgHZHBm4L3gy3a2AQiIZsw2w6GmtJeYkBIx3yt6ZBg6tviWnbqjyuGwH68UjvIexYJygtqYL8jdf0D8ZhK5oKe69wuZeDxCBWY= -VwBeeHn0i7Rn77yuYYaoYKOFCoYs6/U+KIfpnNtzvLgx4Esbh1ywIem8O9r9ZlZizISxhKnXrLS8Ln9AU9J97KkOb4piBBtDAUgLs1IrB4ju4FZ6/AD0DRQ5MqyUF+zHDSoGG3f5reENpJTP9fuhP3Ojx3Euwks3RYCQaLMkmyqhMa3omJwwPmLrZZD/gSD1rAl2im7Gaw8LxGXJhG/UTHFdjAqDasbmkUPee2norYYGvi0Ad/id5IEVSqbHAUq4PTK5EQTaKgT7X5QIwioHRlrE74UM5Q/Fqupd6Oo+G5KYvt/0qtDFbppT/fAe7NSPZZoXmt0BTk07LD+AQoNC2x0Jn1FKKGvar8S/cKcMpkx+3y+iH4HJyJd1cDOLPahVh12PUyF+3Iwg65LPvtZ/RUvtVlGxV1tOu5UqU3XVFLL1fsn+JzGSj+bJDWMFcxeHS4n6dacum3fMb14C3h/49SLDcz41r9h/fy8xHuIY0kY= -LDoWyYEVft11g2fMaUoWVvUoZyA7OvubcIVI08nXIPMuIiBls50NAqG6ooq9SM7y8WAkmw5NkFF/bWQNH8t5AT0MvZj8HLRIh9wKv82Yu3COzjzWJuFwlk4CcxuzUL68acfQfRNnfgabfFHsQ/koI1ZKHagjHsOARygeOaXNyi+ERd3BH1NwDld5D1zcssiRzMXVbsQWIINAtahNJCgMTLccxUwiENDaqFgK/L/pDFSdoYLmaK29/4IeWTwnCHXs6l7KUG4gjxXCZuTc1EI0Z1+H+SYp8ms5UoXE8vG1hPoeVsDg3JdTVH+2fCgUL88C -qzAWBJSCd8usbTDm9R1x/F+psG2bjKcJon/AVlQDaOcXjSg9GDAG/OUhpAnjjbv26MN0BWj0wOLQppGlmXv+hjlsQt8A2GrOZSowavDp7ZK4k4/C9x+D988/jEIjVmVwD6u+Ro+/yW68aaAxkA7FTv5Sif2Jxs6QkEjlZQjO+QR5YwxPeI8jbx7WvJK4h0hQV39xODIGnTfhoVcMBjOu3evTME084xGBqigLtOuWr2gSlbzsHXANuPSDE5Pw5kJoNiR82/ymHIcwe0SN//bdQlJuzzGc4KKB1nCOvbhZHCPcNR4vqSwzp4GCzS8yuC4MnZp88QgDIw+ZfUaOBzGpQo/Pu687irqNzBYlvR3eSgU/WaRHHPBb6ACgdZJ4uI2EHp3MpemhtqOykaHa2zR7gQ== -gDAZChPAe4zQXRH7y194sgFDrEiujt1haRqmInWTNIXXz8jwNwQY/Hf5uV579oNJmJYiEhEsByXbCyB3mulejdkdEqqS8tZo7U8d5tp8qdNxTvDR7N5PD08c9fn2ZyacZwggx6EB07vANwVmI1RlNr3To2op/iD3NI/Al5jJP9Dwe0dpqXxmpb6Rtl1rcU/2XkJnLIBG8DgrGwaGrxnX9c8Fa6aE1u3r+JUpy/oTOfOdLRm2rx3N/qzU/atlpJ41omtUqJmssT+9PE8Naks8An+SQGiyTIyyb3fgKQ9vNyag0aCP/FuEbx6GvZJUxIz0m8gj+Lx2dA8sZRPV7ktDgyt0R6jLNx5mEDd4QxkggMkPpt3hUnU9E2kcyErysl40pKKayz2U+7+Fg3m0qTmt1A== -661hZf7vhUQ+50okfwfTXw== -FEZSdYhAV26PfOeirhfda8qGB+2DE0ehPq4imkXwDHE= +1+v9ZB2xLn4qer0ECfTR4Xh4M/uxSdRpl9EnAr0N+lbdrSrmaJBFQ+LEGLQOdQIZ +0OsCC+YpIPphU/YpLoF2K5QrKhDk7kuQN2MmxYJTtslMBxd12MfxN2IefhLiAGx96TdBILGS1Z/pCt+w2L6bSzP4C+rvAWo1V3OSmAYu4hw= +1u+XjG/2+GSQRv6EzCaWRQ== +96orka/uERLyRst14azQwtYw3BHMB71bAOqvACrtjE1PJFBTHGiHSPBXgPg9mBdES/wy/Ew/9nRc3/LmwnnEMw== diff --git a/class_v2/one_key_wp_v2.py b/class_v2/one_key_wp_v2.py index 3f6ad15c..f72ee4c7 100644 --- a/class_v2/one_key_wp_v2.py +++ b/class_v2/one_key_wp_v2.py @@ -876,25 +876,35 @@ class one_key_wp: cache_conf = f''' # NGINX-CACHE-START proxy_cache {site['name'].replace(".", "_")}_cache; - proxy_cache_key "$host$request_uri$args"; - proxy_cache_valid 200 301 302 10m; - proxy_cache_valid 4041m; - proxy_cache_use_stale error timeout http_429 http_500 http_502 http_503 http_504; + proxy_cache_key "$scheme$host$request_uri"; + proxy_cache_valid 200 301 302 2m; + proxy_cache_valid 404 1m; + proxy_ignore_headers Cache-Control Expires Vary; + proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; proxy_cache_background_update on; + proxy_cache_lock on; proxy_cache_revalidate on; - proxy_cache_min_uses 1; - proxy_cache_lock off; - add_header X-Cache-Type "Dynamic"; - add_header X-Cache $upstream_cache_status; + + # You can configure your own website caching policy here set $skip_cache 0; - if ($http_cookie ~* "user_logged_in|admin_session") {{ - set $skip_cache 1; - }} - if ($request_uri ~* "/admin/|/wp-admin/|/dashboard/") {{ + if ($request_method = POST) {{ set $skip_cache 1; }} + if ($query_string != "") {{ set $skip_cache 1; }} + if ($request_uri ~* "/(cart|checkout|my-account|order|account|login|register|wp-admin|dashboard|xmlrpc.php|wp-login.php)") {{ set $skip_cache 1; }} + if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in|woocommerce_items_in_cart|woocommerce_cart_hash|wp_woocommerce_session_") {{ + set $skip_cache 1; + }} + proxy_no_cache $skip_cache; proxy_cache_bypass $skip_cache; + proxy_cache_bypass $http_upgrade; + proxy_buffer_size 256k; + proxy_buffers 4 128k; + proxy_busy_buffers_size 256k; + proxy_temp_file_write_size 256k; + add_header X-Cache "$upstream_cache_status"; + add_header X-Frame-Options SAMEORIGIN; # NGINX-CACHE-END ''' if conf.find('add_header Cache-Control no-cache;') != -1: @@ -1499,6 +1509,9 @@ class one_key_wp: get.get('whl_redirect_admin', '404')) self.write_logs('|-WP Plugin wps-hide-login installation succeeded') + # 清除本地回环 + self.remove_hosts_record(values['site_name']) + public.ServiceReload() self.write_logs("\n\n\n|-Deployment was successful!") @@ -1510,6 +1523,39 @@ class one_key_wp: public.print_log(format_exc()) return public.return_message(-1, 0, public.lang("Deployment failed: {}", e)) + # 删除指定的域名本地回环记录 + def remove_hosts_record(self, site_name): + """ + 从 /etc/hosts 中删除指定的域名本地回环记录 + """ + hosts_path = '/etc/hosts' + try: + if not os.path.exists(hosts_path): + return False + + # 读取原始文件 + content = public.readFile(hosts_path) + if not content: + return False + + # 构建正则表达式:匹配 127.0.0.1 后面跟着 site_name 的整行 + # \s+ 匹配空格或制表符 + # ^...$ 配合 re.M 确保只匹配独立的一行 + pattern = r'^127\.0\.0\.1\s+{}\s*$'.format(re.escape(site_name)) + + # 替换为空字符串(同时处理换行符) + new_content = re.sub(pattern, '', content, flags=re.M) + + # 清理可能产生的多余空行 + new_content = os.linesep.join([line for line in new_content.splitlines() if line.strip()]) + + # 写回文件 + public.writeFile(hosts_path, new_content) + return True + except Exception as e: + return False + + # 重新关联WP网站数据库 def reset_wp_db(self, args): """ diff --git a/class_v2/overviewV2/__init__.py b/class_v2/overviewV2/__init__.py new file mode 100644 index 00000000..b154fa85 --- /dev/null +++ b/class_v2/overviewV2/__init__.py @@ -0,0 +1,12 @@ +# coding: utf-8 +# ------------------------------------------------------------------- +# aaPanel +# ------------------------------------------------------------------- +# Copyright (c) 2014-2099 aaPanel(www.aapanel.com) All rights reserved. +# ------------------------------------------------------------------- +# Author: aapanel +# ------------------------------------------------------------------- + +# ------------------------------ +# xxx app +# ------------------------------ diff --git a/class_v2/overviewV2/api.py b/class_v2/overviewV2/api.py new file mode 100644 index 00000000..9a0e3802 --- /dev/null +++ b/class_v2/overviewV2/api.py @@ -0,0 +1,389 @@ +# coding: utf-8 +# ------------------------------------------------------------------- +# aaPanel +# ------------------------------------------------------------------- +# Copyright (c) 2014-2099 aaPanel(www.aapanel.com) All rights reserved. +# ------------------------------------------------------------------- +# Author: aapanel +# ------------------------------------------------------------------- + +# ------------------------------ +# overview app +# ------------------------------ +import json +import os +from typing import Callable + +import public +from overviewV2.base import OverViewBase, DISPLAY +from public.exceptions import HintException +from public.validate import Param + +public.sys_path_append("class_v2/") + +PANEL_PATH = public.get_panel_path() + + +class OverViewApi(OverViewBase): + PLUGIN_DIR = os.path.join(PANEL_PATH, "plugin") + TEMPLATE = os.path.join(PANEL_PATH, "config/overview_template.json") + SETTING = os.path.join(PANEL_PATH, "config/overview_setting.json") + + def __init__(self): + overview_setting = [] + if not os.path.isfile(self.SETTING): + try: + temp_data = json.loads(public.readFile(self.TEMPLATE)) + except Exception as e: + public.print_log(f"error read overview template: {e}") + temp_data = [] + id = 0 + for temp in temp_data: + for option in temp.get("option", []): + if option.get("name") in [ + "sites", "ftps", "databases", "security", + ]: + option["id"] = id + option["template"] = temp["template"] + option["params"] = [ + p["option"][0] for p in option.get("params", []) if p.get("option") + ] + id += 1 + overview_setting.append(option) + public.writeFile(self.SETTING, json.dumps(overview_setting)) + + def _check_plugin_install(self, overview: dict): + if overview.get("type") == "plugin": + if not overview.get("name"): + pass + if not os.path.exists(os.path.join(self.PLUGIN_DIR, overview["name"])): + raise HintException(f"[{overview.get('name')}] Plugin Not Installed!") + + def _dynamic_info(self, overview: dict, replace_title: bool = True) -> dict: + # icon desc + if DISPLAY.get(overview["name"]): + overview["icon"] = DISPLAY[overview["name"]]["icon"] + overview["desc"] = DISPLAY[overview["name"]]["desc"] + # route + router_inplace = ["sites", "databases"] + try: + if overview.get("name") in router_inplace and len(overview.get("params", [])) == 1: + point = overview["params"][0].get("source") + if not point: + return overview + if point == "mongodb": + point = "mongo" + + if point == "all": + if overview["name"] == "sites": + point = "php" + elif overview["name"] == "databases": + point = "mysql" + + overview["source"]["href"] = f'{overview["source"]["href"]}/{point}' + except Exception: + import traceback + public.print_log(traceback.format_exc()) + + # replace Title + try: + if replace_title and overview.get("name") == "monitor": + params = overview.get("params", []) + act = params[-1].get("name", "monitor") + overview["title"] = f"Monitor - {act}" + + if replace_title and overview.get("name") == "sites": + params = overview.get("params", []) + act = params[-1].get("name", "php") + overview["title"] = f"Site - {act}" + except Exception: + import traceback + public.print_log(traceback.format_exc()) + + return overview + + def overview_template(self, get): + """ + @name 获取概览模板 + """ + try: + temp_data = json.loads(public.readFile(self.TEMPLATE)) + except Exception as e: + raise HintException(e) + + select_option_dict = { + "site_all": public.M("sites").field("name").select() + } + for template in temp_data: + template_option = template.get("option", []) + for i in range(len(template_option) - 1, -1, -1): + option = template_option[i] + # display + option = self._dynamic_info(option, replace_title=False) + + if not option.get("status", False): + if option.get("type") == "plugin": # 插件 + plugin_path = os.path.join(self.PLUGIN_DIR, option["name"]) + option["status"] = os.path.exists(plugin_path) + + # 填充参数选项数据 + option_params = option.get("params", []) + for params in option_params: + # select_option 监控报表, 提供选择站点 + select_option = params.get("select_option") + if select_option is not None and select_option_dict.get(select_option) is not None: + params["option"] = select_option_dict.get(select_option) + for site in params["option"]: + site["source"] = site["name"] + + return public.success_v2(temp_data) + + def get_overview(self, get): + """ + @name 获取概览 + """ + try: + overview_setting = public.readFile(self.SETTING) or "[]" + overview_setting = json.loads(overview_setting) + if not isinstance(overview_setting, list): + raise Exception("overview_setting format error") + if len(overview_setting) == 0: + raise Exception("overview_setting is empty") + except Exception as ex: + public.print_log("get_overview error info: {}".format(ex)) + public.ExecShell("rm -f {}".format(self.SETTING)) + overview_setting = [] + + func_dict = { + "sites": self._base, + "ftps": self._base, + "databases": self._base, + "security": self._security, + "ssh_log": self._ssh_log, + "ssl": self._ssl, + "corn": self._corn, + "btwaf": self._btwaf, + "monitor": self._monitor, + "tamper_core": self._tamper_core, + "alarm_logs": self._alarm_logs, + } + + nlist = [] + for overview in overview_setting: + overview["value"] = [] + # display + overview = self._dynamic_info(overview) + params_list = overview.get("params", []) + + if overview.get("status", False): + func: Callable[[str, list], list] = func_dict.get(overview["name"]) + if func is not None: + overview["value"] = func(overview["name"], params_list) + + nlist.append(overview) + return public.success_v2(overview_setting) + + def get_overview_window(self, get): + """ + params = { + "model": "ssl", + "source": "all" + } + """ + try: + get.validate([ + Param("model").String().Require(), + Param("source").String().Require(), + ], [ + public.validate.trim_filter(), + ]) + + if get.model == "ssl" and get.source not in [ + "all", "normal", "renew_fail", "expirin_soon" + ]: + return public.fail_v2( + "[ssl] source value mustbe one of 'all', 'normal', 'renew_fail', 'expirin_soon'" + ) + + if get.model == "alarm_log" and get.source not in [ + "all", "handled", "unhandled" + ]: + return public.fail_v2( + "[alarm_log] source value mustbe one of 'all', 'handled', 'unhandled'" + ) + except Exception as ex: + public.print_log("get_overview_window error info: {}".format(ex)) + return public.fail_v2(str(ex)) + + data = [] + if get.model == "ssl": + if get.source != "all": + data = self._base_ssl(get.source) + else: + data = [] + for tag in ["expirin_soon", "renew_fail", "normal"]: + data.extend(self._base_ssl(tag)) + sorted(data, key=lambda x: x.get("id", 0)) + return public.success_v2(data) + + def add_overview(self, get): + try: + get.validate([ + Param("overview").String().Require(), + ], [ + public.validate.trim_filter(), + ]) + overview = json.loads(get.overview) + overview_setting = public.readFile(self.SETTING) or "[]" + except Exception as ex: + public.print_log("add_overview error info: {}".format(ex)) + return public.fail_v2(str(ex)) + self._check_plugin_install(overview) + try: + overview_setting = json.loads(overview_setting) + except json.JSONDecodeError: + overview_setting = [] + + if len(overview_setting) >= 6: + return public.fail_v2("Overview Full, Max 6 Items!") + + if overview.get("value") is not None: + del overview["value"] + + max_id = 0 + for over in overview_setting: + if over["name"] == overview["name"]: + return public.success_v2(public.lang("Overview Exist!")) + + if int(over["id"]) > max_id: + max_id = int(over["id"]) + + overview["id"] = max_id + 1 + overview_setting.append(overview) + + public.writeFile(self.SETTING, json.dumps(overview_setting)) + return public.success_v2(public.lang("Overview Add Successfully!")) + + def set_overview(self, get): + try: + get.validate([ + Param("overview").String().Require(), + ], [ + public.validate.trim_filter(), + ]) + overview = json.loads(get.overview) + except Exception as ex: + public.print_log("set_overview error info: {}".format(ex)) + return public.fail_v2(str(ex)) + self._check_plugin_install(overview) + overview_setting = [] + if isinstance(overview, list): + overview_setting = overview + elif isinstance(overview, dict): + try: + overview_setting = public.readFile(self.SETTING) + overview_setting = json.loads(overview_setting) + except Exception as err: + public.print_log("set_overview readFile error info: {}".format(err)) + overview_setting = [] + + if overview.get("value") is not None: + del overview["value"] + + for idx in range(len(overview_setting)): + over = overview_setting[idx] + if int(over["id"]) == int(overview["id"]): + overview_setting[idx] = overview + break + else: + return public.fail_v2("Overview Not Found!") + + public.writeFile(self.SETTING, json.dumps(overview_setting)) + return public.success_v2(public.lang("Overview Set Successfully!")) + + def del_overview(self, get): + try: + get.validate([ + Param("overview_id").Integer().Require(), + ], [ + public.validate.trim_filter(), + ]) + overview_setting = public.readFile(self.SETTING) + overview_setting = json.loads(overview_setting) + except Exception as ex: + public.print_log("del_overview error info: {}".format(ex)) + return public.fail_v2(str(ex)) + + if len(overview_setting) <= 1: + return public.fail_v2("Overview At Least One Item!") + + overview_id = int(get.overview_id) + for idx in range(len(overview_setting) - 1, -1, -1): + over = overview_setting[idx] + if int(over["id"]) == overview_id: + del overview_setting[idx] + break + + public.writeFile(self.SETTING, json.dumps(overview_setting)) + return public.success_v2(public.lang("Overview Delete Successfully!")) + + def sort_overview(self, get): + try: + get.validate([ + Param("sort_ids").String().Require(), + ], [ + public.validate.trim_filter(), + ]) + sort_ids = json.loads(get.sort_ids) + overview_setting = public.readFile(self.SETTING) + overview_setting = json.loads(overview_setting) + except Exception as ex: + public.print_log("sort_overview error info: {}".format(ex)) + return public.fail_v2(str(ex)) + + new_overview_setting = [] + for pk in sort_ids: + for over in overview_setting: + if int(over["id"]) == int(pk): + new_overview_setting.append(over) + break + + public.writeFile(self.SETTING, json.dumps(new_overview_setting)) + return public.success_v2(public.lang("Successfully!")) + + +def update_overview(): + # 同步模板中的更新, 同时移除不存在的项 + try: + api = OverViewApi() + template_data = json.loads(public.readFile(api.TEMPLATE)) + settings = json.loads(public.readFile(api.SETTING)) + new_settings = [] + for setting in settings: + for template in template_data: + for op in template.get("option", []): + if setting["name"] == op["name"]: + try: + new_settings.append( + { + "title": op["title"], + "name": setting["name"], + "status": setting.get("status", False), + "type": op["type"], + "source": op.get("source", {}), + "params": setting["params"], + "icon": op.get("icon", ""), + "desc": op.get("desc", ""), + "id": setting["id"], + "template": op.get("template", ""), + } + ) + except Exception as e: + public.print_log("update_overview item error:".format(str(e))) + continue + public.writeFile(OverViewApi.SETTING, json.dumps(new_settings)) + except: + pass + + +update_overview() diff --git a/class_v2/overviewV2/base.py b/class_v2/overviewV2/base.py new file mode 100644 index 00000000..482fd5db --- /dev/null +++ b/class_v2/overviewV2/base.py @@ -0,0 +1,506 @@ +# coding: utf-8 +# ------------------------------------------------------------------- +# aaPanel +# ------------------------------------------------------------------- +# Copyright (c) 2014-2099 aaPanel(www.aapanel.com) All rights reserved. +# ------------------------------------------------------------------- +# Author: aapanel +# ------------------------------------------------------------------- + +# ------------------------------ +# overview app base +# ------------------------------ +import json +import os +import time +from datetime import datetime, timedelta, date + +import public + +public.sys_path_append("class_v2/") + +COLORS = { + "red": "text-error", + "gray": "text-desc", + "green": "text-primary", + "orange": "text-warning", +} + +DISPLAY = { + "sites": { + "icon": "i-dashicons:admin-site-alt3", + "desc": public.lang("Manage and monitor the status of your website") + }, + "ftps": { + "icon": "i-carbon:ibm-cloud-direct-link-1-dedicated", + "desc": public.lang("Monitor FTP accounts and transfer status") + }, + "databases": { + "icon": "i-carbon:data-base", + "desc": public.lang("Monitor database operation and performance metrics") + }, + "security": { + "icon": "i-carbon:security", + "desc": public.lang("View the current security threats and risks of the system") + }, + "monitor": { + "icon": "i-carbon:meter", + "desc": public.lang("Comprehensive resource usage monitoring overview") + }, + "btwaf": { + "icon": " i-hugeicons:firewall", + "desc": public.lang("WAF firewall interception and protection details") + }, + "tamper_core": { + "icon": "i-carbon:locked", + "desc": public.lang("Prevent core operation and protection status") + }, + "ssh_log": { + "icon": "i-carbon:terminal", + "desc": public.lang("Monitor SSH login attempts and security status") + }, + "ssl": { + "icon": "i-carbon:certificate", + "desc": public.lang("SSL certificate status") + }, + "cron": { + "icon": "i-carbon:time", + "desc": public.lang("Scheduled task status") + }, + "alarm_logs": { + "icon": "i-carbon:reminder", + "desc": public.lang("Real-time monitoring and alarm tasks") + }, +} + + +# noinspection PyUnusedLocal +class OverViewBase: + __db_objs = {} + + def _base(self, name: str, params_list: list) -> list: + if not params_list: + params_list = [] + + value_list = [] + if name == "sites": + for params in params_list: + where = "" + if params["source"] != "all": + where = "LOWER(project_type)=LOWER('{}')".format(params["source"]) + if where: + start_num = public.M("sites").where(where + " and status='1'", ()).count() + stop_num = public.M("sites").where(where + " and status='0'", ()).count() + else: + start_num = public.M("sites").where("status='1'", ()).count() + stop_num = public.M("sites").where("status='0'", ()).count() + value_list = [ + { + "desc": public.lang("Running"), + "data": start_num, + "color": COLORS["green"] + }, + { + "desc": public.lang("Stopped"), + "data": stop_num, + "color": COLORS["red"] + }, + { + "desc": public.lang("ALL"), + "data": public.M("sites").where(where, ()).count(), + "color": COLORS["gray"] + } + ] + + elif name == "ftps": + data = public.M("ftps").count() + if not isinstance(data, int): + data = 0 + value_list = [{ + "desc": public.lang("Accounts"), + "data": data, + "color": COLORS["green"] + }] + + elif name == "databases": + for params in params_list: + if params["source"] != "redis": + if params["source"] == "all": + data = public.M("databases").count() + else: + data = public.M("databases").where( + "LOWER(type)=LOWER(?)", (params["source"],) + ).count() + else: + from databaseModelV2.redisModel import panelRedisDB + data = panelRedisDB().get_options(None).get("databases", 16) + value_list = [ + { + "desc": params["name"], + "data": data, + "color": COLORS["green"] + } + ] + + else: + value_list = [] + return value_list + + def _corn(self, name: str, params_list: list) -> list: + return [] + + def _security(self, name: str, params_list: list) -> list: + from projectModelV2.safecloudModel import main + cloud_safe_info = main().get_pending_alarm_trend(None) + if cloud_safe_info.get("status") != 0: + return [] + + trend_list = public.find_value_by_key( + cloud_safe_info, "trend_list", default=[] + ) + last_scan_ts = "" + if trend_list: + last_scan_ts = trend_list[-1].get("timestamp", "") + last_scan_time = time.strftime( + "%Y/%m/%d %H:%M:%S", time.localtime(last_scan_ts) + ) if last_scan_ts else public.lang("Never Scanned") + + try: + last_total = public.find_value_by_key(cloud_safe_info, "total", default=0) + except: + last_total = 0 + return [ + { + "desc": public.lang("Security Risk"), + "data": last_total, + "color": COLORS["gray"] if last_total == 0 else COLORS["red"] + }, + { + "desc": public.lang("Last Scan"), + "data": last_scan_time, + "color": COLORS["gray"] + } + ] + + def _btwaf(self, name: str, params_list: list) -> list: + default = [ + { + "desc": public.lang("Today Intercept"), + "data": 0, + "color": COLORS["orange"] + }, + {}, + { + "desc": public.lang("Yesterday Intercept"), + "data": 0, + "color": COLORS["orange"] + } + ] + waf_db_path = "/www/server/btwaf/totla_db/totla_db.db" + if not os.path.exists(waf_db_path): + return default + + today_time = int(datetime.now().replace(hour=0, minute=0, second=0, microsecond=0).timestamp()) + yesterday_time = today_time - 86400 + result = [] + try: + today_data = public.M("totla_log").dbfile(waf_db_path).field('time').where( + "time>=?", (today_time,) + ).order('id desc').count() + if not isinstance(today_data, int): + raise Exception + except Exception as e: + public.print_log("Failed to get WAF today intercept data") + today_data = 0 + + result.append({ + "desc": public.lang("Today Intercept"), + "data": 0, + "color": COLORS["orange"] + }) + result.append({}) + try: + yesterday_data = public.M("totla_log").dbfile(waf_db_path).field('time').where( + "time>=? and time<=?", (yesterday_time, today_time) + ).order('id desc').count() + if not isinstance(yesterday_data, int): + raise Exception + except Exception: + yesterday_data = 0 + + result.append({ + "desc": public.lang("Yesterday Intercept"), + "data": yesterday_data, + "color": COLORS["orange"] + }) + return result if result else default + + def _tamper_core(self, name: str, params_list: list) -> list: + tamper_core_dir = "/www/server/tamper/total" + default = [ + { + "desc": public.lang("Today Intercept"), + "data": 0, + "color": COLORS["gray"] + }, + {}, + { + "desc": public.lang("Yesterday Intercept"), + "data": 0, + "color": COLORS["gray"] + } + ] + if not os.path.exists(tamper_core_dir): + return default + result = [] + today_time = date.today() + yesterday_time = today_time - timedelta(days=1) + listdirs = os.listdir(tamper_core_dir) + + if not listdirs: + return default + + for p_name in os.listdir(tamper_core_dir): + dir_path = os.path.join(tamper_core_dir, str(p_name)) + today_path = os.path.join(dir_path, "{}.json".format(today_time)) + if os.path.isfile(today_path): + today_info = public.readFile(today_path) + today_info = json.loads(today_info) + for info in today_info.values(): + result.append({ + "desc": public.lang("Today Intercept"), + "data": sum(info.values()), + "color": COLORS["orange"] + }) + else: + result.append({ + "desc": public.lang("Today Intercept"), + "data": 0, + "color": COLORS["gray"] + }) + result.append({}) + yesterday_path = os.path.join(dir_path, "{}.json".format(yesterday_time)) + if os.path.isfile(yesterday_path): + yesterday_info = public.readFile(yesterday_path) + yesterday_info = json.loads(yesterday_info) + for info in yesterday_info.values(): + result.append({ + "desc": public.lang("Yesterday Intercept"), + "data": sum(info.values()), + "color": COLORS["orange"] + }) + else: + result.append({ + "desc": public.lang("Yesterday Intercept"), + "data": 0, + "color": COLORS["gray"] + }) + + for r in result: + if int(r.get("data", 0)) > 0: + r["color"] = COLORS["orange"] + elif int(r.get("data", 0)) == 0: + r["color"] = COLORS["gray"] + return result if result else default + + def _ssh_log(self, name: str, params_list: list) -> list: + try: + params_map = { + "all": "all", + "Accepted": "success", + "Failed": "error" + } + from mod.project.ssh.comMod import main + params = public.find_value_by_key(params_list, "source", default="all") + params = params_map.get(params, "all") + ssh_info = main().get_ssh_intrusion(None) + if ssh_info.get("status") != 0: + return [] + ssh = ssh_info.get("message", {}) + error = int(ssh.get("today_error", 0)) + success = int(ssh.get("today_success", 0)) + if params == "error": + return [ + { + "desc": public.lang("Failed"), + "data": error, + "color": COLORS["gray"] if error == 0 else COLORS["red"] + } + ] + elif params == "success": + return [ + { + "desc": public.lang("Success"), + "data": success, + "color": COLORS["green"] + } + ] + else: + return [ + { + "desc": public.lang("Success"), + "data": success, + "color": COLORS["green"] + }, + { + "desc": public.lang("Failed"), + "data": error, + "color": COLORS["gray"] if error == 0 else COLORS["red"] + }, + { + "desc": public.lang("ALL"), + "data": error + success, + "color": COLORS["gray"] + } + ] + except Exception: + public.print_log("Failed to get SSH log information") + return [] + + def _monitor(self, name: str, params_list: list) -> list: + try: + params_data = { + "pv": "SUM(pv_number) as pv", + "uv": "SUM(uv_number) as uv", + "ip": "SUM(ip_number) as ip", + "spider": "SUM(spider_count) as spider", + } + params_desc = { + "pv": public.lang("Page Views"), + "uv": public.lang("Visitors"), + "ip": public.lang("IPs"), + "spider": public.lang("Spiders"), + } + site_name = params_list[0]['source'] + param = params_list[1]['source'] + run_path = "{}/monitor".format(public.get_setup_path()) + db_file = "{}/data/dbs/{}/{}.db".format(run_path, site_name, "request_total") + if db_file not in self.__db_objs: + if not os.path.exists(db_file) or os.path.getsize(db_file) == 0: + return [ + { + "desc": site_name, + }, + {}, + { + "desc": f'{public.lang("Today")}', + "data": 0, + "color": COLORS["gray"] + }, + { + "desc": f'{public.lang("Yesterday")}', + "data": 0, + "color": COLORS["gray"] + } + ] + else: + import db + db_obj = db.Sql() + db_obj._Sql__DB_FILE = db_file + self.__db_objs[db_file] = db_obj + else: + db_obj = self.__db_objs[db_file] + + now_time = datetime.now().strftime('%Y%m%d') + last_time = (datetime.now() - timedelta(days=1)).strftime('%Y%m%d') + result = [ + { + "desc": site_name, + }, + {}, + ] + for i in [now_time, last_time]: + sql = f'select {params_data[param]} from request_total where date="{i}";' + data = db_obj.table("request_total").query(sql) + try: + data = data[0][0] + if data is None: + data = 0 + except: + data = 0 + + desc = public.lang("Today") if i == now_time else public.lang("Yesterday") + result.append( + { + "desc": f"{desc}", + "data": data, + "color": COLORS["gray"] + } + ) + return result + except Exception as e: + import traceback + public.print_log(traceback.format_exc()) + return [] + + def _alarm_logs(self, name: str, params_list: list) -> list: + today = datetime.now().strftime("%Y-%m-%d 00:00:00") + task_logs = public.M("logs").where( + "type=? AND addtime >=?", ("Alarm notification", today) + ).count() + return [ + { + "desc": public.lang("Today"), + "data": task_logs, + "color": COLORS["gray"] if task_logs == 0 else COLORS["orange"] + } + ] + + def _base_ssl(self, select: str) -> list: + from ssl_domainModelV2.model import DnsDomainSSL, Q + f_fields = ("hash", "subject", "not_after", "not_after_ts") + data = [] + now = round((time.time() + 86400 * 30) * 1000) + ip_ts = round((time.time() + 86400 * 3) * 1000) + ip = public.GetLocalIp() + if select == "normal": + # 上次续签为成功, 且证书未过期 + data = DnsDomainSSL.objects.filter( + Q(renew_status=1) & ( + Q(subject__ne=ip, not_after_ts__gt=now) | Q(subject=ip, not_after_ts__gt=ip_ts) + ) + ).fields(*f_fields).as_list() + + elif select == "expirin_soon": + # 上次续签为成功, 但证书即将过期 + data = DnsDomainSSL.objects.filter( + Q(renew_status=1) & ( + Q(subject__ne=ip, not_after_ts__lte=now) | Q(subject=ip, not_after_ts__lte=ip_ts) + ) + ).fields(*f_fields).as_list() + + elif select == "renew_fail": + # 上次续签为失败 + data = DnsDomainSSL.objects.filter( + renew_status=0 + ).fields(*f_fields).as_list() + + data = [{**d, "tag": select} for d in data] + return data + + def _ssl(self, name: str, params_list: list) -> list: + try: + from ssl_domainModelV2.model import DnsDomainSSL + expirin_soon = len(self._base_ssl("expirin_soon")) or 0 + renew_fail = len(self._base_ssl("renew_fail")) or 0 + return [ + { + "desc": public.lang("Expirin Soon"), + "data": expirin_soon, + "color": COLORS["orange"] if expirin_soon > 0 else COLORS["gray"] + }, + { + "desc": public.lang("Renew Fail"), + "data": renew_fail, + "color": COLORS["red"] if renew_fail > 0 else COLORS["gray"] + }, + { + "desc": public.lang("ALL"), + "data": DnsDomainSSL.objects.all().count() or 0, + "color": COLORS["gray"] + } + ] + except Exception: + import traceback + public.print_log("Failed to get SSL information: {}".format(traceback.format_exc())) + return [] diff --git a/class_v2/panelModelV2/publicModel.py b/class_v2/panelModelV2/publicModel.py index c373f29d..0f5b442c 100644 --- a/class_v2/panelModelV2/publicModel.py +++ b/class_v2/panelModelV2/publicModel.py @@ -60,7 +60,6 @@ NNh1PlSD8WUnUEbz+BU/P1pRy5BgEtwZGSitPy/206e7jU+bzvXY4QoexqnPPHfI Z8UsPk1Q7HtwjRd4g01ryw== j1PGlr9UbQk8SkkOcsDJJM21s4Fsvz8pEzKAXOxPJs+0B4WzyYpeMIjoyVPVv8vV 9NcWnEb+4jQwFG+5pzNfCI43uLdnvhXruxo8Xlha34Vd7eY5phSM+/m1RO8r1X0Z -1u+XjG/2+GSQRv6EzCaWRQ== b3Z2Io95Vj8xUxWOHgYNpNbAgZrDCjesnGgQzPvRuWi7zQjfB+Js3lSGYewauWyK2A+1mVpjDIYlCevO1APJdQ== b3Z2Io95Vj8xUxWOHgYNpOBTbsgGmSARj0BOOQs9xPvLSpZY/DN4fqN3su1Gfsl+Mzz2VZejG8iOkCW7qzo+Aup7B0IVtv7DD0anOHwDdW6qnuUzrgjp1Xr5q2IDfMzT TmSl0ltBTCdGTi+Yf5OqpZaYHd9/xyRoWNC5MQzVkDTlUos/5Ll2ssxfx8vM1oTc @@ -301,7 +300,8 @@ HvwyOf058sDx61QrLcmwqkDStwS9q5tRRJtsARMJ6Rk= 1u+XjG/2+GSQRv6EzCaWRQ== 1u+XjG/2+GSQRv6EzCaWRQ== zGE/mJ0JS89UwdICUeMECv78HK8gGY9ono/OcERAo2Q4OuWrC1bUM5rk1P7zCBAv -c0jePRxtTVZYop75Q5JCFqNj+MYB8+bdACIa+0jt5kRXiv1g2nbr4A108AK9uubo2+5t9MCTC9gimhO+2pLg8KRXdDY/bPBtI4Xl43bBPX/WKonbPKdrc3AyXULA74rmZTk/H7vtpB1u5vU5fvarpw== +c0jePRxtTVZYop75Q5JCFqNj+MYB8+bdACIa+0jt5kRKfOM7OBLFyGK3vQyoxhSW +L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmWghjKa4Bx/9hwfBJOgnWLq8nFuUWMFXzqqTEk0LFIVJ6w3DQi31DTQboYAhxOgzoBMerAWm4ytsBFC+tzMONGj jfS7SFS/n+ooTSGkR415iMsIYOW51trAniLvmWb/hak= 2qQ1+UjgiO2OZgsc3LuuhqXlScodgUPR+lMhOg8MAoY= xazJePAl7+EX8oijwnMNlad6UUrdvrfb1wygaYN8sFM= @@ -312,15 +312,18 @@ mOVDVEmzgX6HnqY4rlOl8e+YSMJxeguubSsFcgDE5Ok= kgVyqIIC9nAzezbKoMMO/m56GdPN+aTUfhi2Vk1Kgm0= mOVDVEmzgX6HnqY4rlOl8RtUosS8lWLqKhYPR9f9rMurwLEfJhnaoC0EVV5RiXYdqNHcZyjgIYCfQSTfsxPtMzkFeObAPyr5NCyVvDpRk1A= wI4EEWzdSnynhqFxMCzFmm5K3toX2pgze0TOVHzk2GXwCAQaMmit1fRz4Hb41UIxgnpp/+EKHbeQyR66NnNjZYK6By6mXqdxzIH6T6sqrFAIObPgjBHFG2Cry1RFfh7848ucYgBxoaBeeoutdOUCaw== -ltIZHHUgft++nMUXBsBkiwm59kUWFh+VHZhvrBz2KbUK6fc06Sx4xlSyfvVXyrgx +ltIZHHUgft++nMUXBsBki13s16IDpuk6xDsAh/iQbVU= +VmVrGQo2zRokW/ZuO9bN6+q3K+uFcvEWVPVEnu2W9j0= WHkOzVx7seuLmxs5Hu+l/q7o3Ubc1JswUjeTnfo0eq88+Ch8UMJiYPr8fV7eqyzGsvp4ZZv+ImiLhFcyzaA7WJJ9/I8zZ6zHv46GVCenDsUFA1ICyqncT4uNXpxGg7pMgv099Japf36EDdbhPUlFxXVBbAdxAkHWowTVc0YxtIA= 1V2v8QerKOmubvSxgB4eTIgAF5MYjjSQpDkNVO/gei/fuBGJSWH/5QnRYHNHx3ipgu1vmxmOkfdcTXRd/JDX/OyrHNSsGzVOyg+lhy8up+E= VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6HkkGfHdEP+p5BcxiIwnjxTRAwKtyoKEQoHutuZXTHdHqaWKIi5ulC0JIPqJ0dA2pB5IZ5s9UnnXFI8LT0ij7CsnrCxf4s7UTjESmgcjenypKUA== VmVrGQo2zRokW/ZuO9bN6+q3K+uFcvEWVPVEnu2W9j0= VmVrGQo2zRokW/ZuO9bN6z1UXbyEEgg7zH2u1vQdcd8= +1u+XjG/2+GSQRv6EzCaWRQ== mOVDVEmzgX6HnqY4rlOl8ZHiNv54JPXM8AQOsN/CalaJr5oLBC1R39Qtng8H5+3M kgVyqIIC9nAzezbKoMMO/rtNrwHELZG5KNloCh/c86RmGOEBUSPYA5TnXzsCPx7IGAnsUipMOz7hl2/qGaUkWS5rzfWzOIhoSBT6n6m94tE= MehrqbDHPhwXNY3FGnyrJ3ey7zCEN5u2A4+8gM2mAjo= +1u+XjG/2+GSQRv6EzCaWRQ== UkQQaGHg2Aow1Gtc9bKBau0euapoYTSumuYNb1Ly8sk= 9uZN8r0CKVAbfzGtFDuvLz3X3QJ1ItQYPzOkoV4LJdk= VmVrGQo2zRokW/ZuO9bN61kxtM/A/xhjpzjzORrZDswANqfD1M0BmFJ9MuqCmpyXuo2CVi/uqM30sy4I5Qm89Q== @@ -328,7 +331,7 @@ VmVrGQo2zRokW/ZuO9bN60YNhaukjprsWLBGKrymYjf7Wv7u4hApVayYdmyw7rq6WjgnZdea+wTUjXgr VmVrGQo2zRokW/ZuO9bN61Rfce0ef05dtvigqC2xgxuR4b2esZn2iYKRikpcNcZsKldYF2lSEz+UefVVZUEfLw== VmVrGQo2zRokW/ZuO9bN65zZuRWsym0pY8xkNRQw5e79VJtfnztvllmIKKDLBf0gy0nf02shjpvszvG8oc3yXw== VmVrGQo2zRokW/ZuO9bN635eTPn5A+YVMKu/UwSxKmJ8mtKXeUWK8OOS4SIalWx+oKNvgMU0WypxhxNtQTOpEA== -VmVrGQo2zRokW/ZuO9bN6zM5ilrJFwcLmUPDluWdGOC9Z/jDOOW7knUx3IV91SJUiiZ7NZvjoW52tR+HmM4vnIqcbsLmvHAuSqhsyekr7gM= +VmVrGQo2zRokW/ZuO9bN6zM5ilrJFwcLmUPDluWdGOC9Z/jDOOW7knUx3IV91SJUSaMYQDmMc31SLVC+GCVdX6OuYHaHXtzxEZN2KYLugi8= VmVrGQo2zRokW/ZuO9bN6yhEfLIEseEONmqrFcKxMLmRRTDPzaJRSdc0JhUeCv6A8fSTpEpOS6+iEMohIz1k4w== VmVrGQo2zRokW/ZuO9bN67sHm/N8+1gaHz7Fk8/8/gwTo4ZmE5RsUB1knd4N/on12SXi6w5jJkRmMmp7uU+boNXF9wSQR9oOgBAdIxZfWvM= YH231WTDnzQG3bFilBiqIg== @@ -340,6 +343,13 @@ VmVrGQo2zRokW/ZuO9bN6wW1ZfNo5VomBbQ/6wB1QMa+Pgli4MWQ/B0+8Qh2u7tiFAY9mj0u2WdmFeDc 1V2v8QerKOmubvSxgB4eTCW+rGjjDzQ+ugWFRLpc/UTDKZgr4nuXID5TDYHFRsqu VmVrGQo2zRokW/ZuO9bN6xF1SJaAm3VttartJvhccJnaK1khC+Fj4x9Fl+U3HPrBp5i1pBrDMZVvFz/p7/KXFQ== VmVrGQo2zRokW/ZuO9bN68adHg3IrLO0DrV2du52PkBiaWxeN9tJZ3J27IV7TOPjYWJqlCRIQpGiKmKEka9ORQ== +1u+XjG/2+GSQRv6EzCaWRQ== +VmVrGQo2zRokW/ZuO9bN62HWtxZ2I/oCwtyWP0WSTIg= +VmVrGQo2zRokW/ZuO9bN62acdOp/iTviipAlT/0p4SpM1nsEhyReeGYFmsSjBb9+ +VmVrGQo2zRokW/ZuO9bN6wxXzI8rhRIfgJucLq2OWkQQma9inLb+aXVHEivtABe8uKsNHpH5C5v7PXbIsr6Z0Q== +VmVrGQo2zRokW/ZuO9bN6zTwEIRXNDisRd1QRhA8x1E= +VmVrGQo2zRokW/ZuO9bN6/6TnYYUnVY4bZC18wJU6T0= +1u+XjG/2+GSQRv6EzCaWRQ== VmVrGQo2zRokW/ZuO9bN64zcYBv/sbVxAlw9o1J7QrA= VmVrGQo2zRokW/ZuO9bN63dmCpjIL5eXfo4Q6ki7uwQ= VmVrGQo2zRokW/ZuO9bN68Oct4uahUA/N5aQbQ7tGPCwhA6EqxnCWCuOWvoVC2RXkwXdLyEkmxxwqAQKHN3t3A== diff --git a/class_v2/panel_plugin_v2.py b/class_v2/panel_plugin_v2.py index 67ef82a5..37191a59 100644 --- a/class_v2/panel_plugin_v2.py +++ b/class_v2/panel_plugin_v2.py @@ -33,6 +33,7 @@ class panelPlugin: __link = 'config/link.json' __official_url = public.OfficialApiBase() + __sync_plugin = public.sync_plugin_OfficialApiBase() def __init__(self): self.__isTable = None @@ -50,6 +51,7 @@ class panelPlugin: self.__plugin_save_file = self.__panel_path + '/data/plugin_bin.pl' self.__api_root_url = self.__official_url + '/api' self.__api_url = self.__api_root_url + '/panel/get_plugin_list' + self.__download_sync_plugin = self.__sync_plugin + '/api' + '/panel/download_plugin' # 同步下载url self.__download_url = self.__api_root_url + '/panel/download_plugin' self.__download_d_main_url = self.__api_root_url + '/panel/download_plugin_main' self._check_url = self.__api_root_url + '/panel/get_soft_list_status' @@ -502,9 +504,10 @@ class panelPlugin: @param plugin_name 插件名称 @return dict ''' - result = self.__get_download_speed(get.plugin_name) - return result - + ok , result = self.__get_download_speed(get.plugin_name) + if not ok: + return public.return_message(-1, 0, result) + return public.return_message(0, 0, result) # 取消下载 def close_install(self, get): @@ -728,7 +731,12 @@ class panelPlugin: if get.sName == 'clamav': self.clear_clamav() - if os.path.exists(pluginPath): public.ExecShell('rm -rf ' + pluginPath) + # 兼容pg卸载 + if get.sName == 'pgsql_manager': + pluginPath = '/www/server/pgsql' + + if os.path.exists(pluginPath): + public.ExecShell('rm -rf ' + pluginPath) public.write_log_gettext('Installer','Successfully uninstalled software [{}]',(pluginInfo['title'],)) return public.return_message(0, 0, public.lang("Uninstallaton succeeded")) else: @@ -1162,6 +1170,33 @@ class panelPlugin: if public.readFile(check_version_path).find('2.2') == 0: softList['apache22'] = True softList['apache24'] = False + + # 添加模块列表 + query = get.get('query', '').strip().lower() + softList['m_list'] = [] + if query and (query in 'docker' or query in 'module'): + softList['m_list'].append( + { + 'name': 'docker', + "title": "Docker Module", + "sort": 1, + "route": "/docker/app", + "tab": "", + "ps": "Docker It is an open-source application container engine
>>Go", + } + ) + if query and (query in 'wp toolkit' or query in 'module' or query in 'wordpress'): + softList['m_list'].append( + { + 'name': 'wptools', + "title": "WP Toolkit", + "sort": 1, + "route": "/wp/toolkit", + "tab": "", + "ps": "The toolkit specifically designed for Wordpress management provided by aaPanel >>Go", + } + ) + return public.return_message(0, 0, softList) #取首页软件列表 @@ -1461,6 +1496,10 @@ class panelPlugin: is_start = conf.find('allow 127.0.0.1;') == -1 elif webserver == 'apache': is_start = conf.find('Allow from 127.0.0.1 ::1 localhost') == -1 + # 补充OLS + else: + if conf.find('accessControl {\n') != -1: + is_start = False return is_start @@ -2373,6 +2412,16 @@ class panelPlugin: except Exception as ex: tmp['status'] = False tmp['error'] = str(ex) + finally: + try: + if tmp['run']: + php_info = self.get_soft_find( + public.to_dict_obj({'sName': 'php-' + '.'.join(tmp['phpversion'])}) + ) + if php_info.get("status") == 0 and not php_info["message"].get("status"): + public.ExecShell("/etc/init.d/php-fpm-" + tmp['phpversion'] + " start") + except: + pass return tmp def _get_ols_myphpadmin_info(self): @@ -3285,8 +3334,9 @@ class panelPlugin: elif _ip_type == 'ipv6': urllib3_conn.allowed_gai_family = lambda: socket.AF_INET6 try: + cache.set(pkey, '0/0/0', 3600) download_res = requests.post( - self.__download_url, + self.__download_sync_plugin, pdata, headers=public.get_requests_headers(), timeout=(60, 1800), @@ -3325,7 +3375,18 @@ class panelPlugin: raise public.PanelError(download_res.text) res_down_size = 0 - res_chunk_size = 8192 + try: + # 动态设置分块大小 + if headers_total_size < 10 * 1024 * 1024: # 小于10mb 分块64k + res_chunk_size = 1024 * 64 + elif headers_total_size < 100 * 1024 * 1024:# 小于100mb 分块128k + res_chunk_size = 1024 * 128 + else: + res_chunk_size = 1024 * 256 # 大于100mb 分块256k + except: + # 默认使用 8k + res_chunk_size = 8192 + last_time = time.time() with open(filename, 'wb+') as with_res_f: try: @@ -3343,6 +3404,9 @@ class panelPlugin: res_sec_speed) cache.set(pkey, pre_text, 3600) + # 下载完成 + cache.set(pkey, '1/1/1', 3600) + time.sleep(1) except Exception as ex: ex_str = str(ex) if "Read timed out" in ex_str: @@ -3373,18 +3437,25 @@ class panelPlugin: pkey = '{}_pre'.format(upgrade_plugin_name) pre_text = cache.get(pkey) if not pre_text: - return public.returnMsg(False, public.lang('Cannot get progress bar for this plugin.')) - result = {"status": True} + return False, public.lang('Cannot get progress bar for this plugin.') + result = {} + pre_tmp = pre_text.split('/') + result['down_size'], result['total_size'] = (int(pre_tmp[0]), int(pre_tmp[1])) + + if result['down_size'] == 0 and result['total_size'] == 0: + result['down_pre'] = 0 + result['need_time'] = 0 + return True, result + result['down_pre'] = round( result['down_size'] / result['total_size'] * 100, 1) result['sec_speed'] = int(float(pre_tmp[2])) result['need_time'] = int( (result['total_size'] - result['down_size']) / result['sec_speed']) - return result - + return True, result # 获取插件与授权信息 def __ensure_plugin_list_obtained(self, force: bool = False): diff --git a/class_v2/panel_site_v2.py b/class_v2/panel_site_v2.py index a3a303b1..00e0ca74 100644 --- a/class_v2/panel_site_v2.py +++ b/class_v2/panel_site_v2.py @@ -371,12 +371,13 @@ scripthandler { extprocessor BTSITENAME { type lsapi address UDS://tmp/lshttpd/BT_EXTP_NAME.sock - maxConns 20 - env LSAPI_CHILDREN=20 + maxConns 300 + env LSAPI_CHILDREN=300 + env LSAPI_AVOID_FORK=1 initTimeout 600 - retryTimeout 0 + retryTimeout 5 persistConn 1 - pcKeepAliveTimeout 1 + pcKeepAliveTimeout 30 respBuffer 0 autoStart 1 path /usr/local/lsws/lsphpBTPHPV/bin/lsphp @@ -384,8 +385,8 @@ extprocessor BTSITENAME { extGroup www memSoftLimit 2047M memHardLimit 2047M - procSoftLimit 400 - procHardLimit 500 + procSoftLimit 1000 + procHardLimit 1100 } phpIniOverride { @@ -1744,15 +1745,39 @@ include /www/server/panel/vhost/openlitespeed/proxy/BTSITENAME/*.conf if not multiple: public.serviceReload() - # 从数据库删除 - public.M('sites').where("id=?", (id,)).delete() - public.M('binding').where("pid=?", (id,)).delete() - public.M('domain').where("pid=?", (id,)).delete() - public.M('wordpress_onekey').where("s_id=?", (id,)).delete() - # 删除git数据 - from git_tools import GitTools - GitTools().del_site_git(public.to_dict_obj({'site_id': id})) - public.write_log_gettext('Site manager', 'Successfully deleted site {}!', (siteName,)) + try: + # 从数据库删除 + public.M('sites').where("id=?", (id,)).delete() + public.M('binding').where("pid=?", (id,)).delete() + public.M('domain').where("pid=?", (id,)).delete() + public.M('wordpress_onekey').where("s_id=?", (id,)).delete() + # 删除git数据 + from git_tools import GitTools + GitTools().del_site_git(public.to_dict_obj({'site_id': id})) + public.write_log_gettext('Site manager', 'Successfully deleted site {}!', (siteName,)) + + # 尝试删除免费网站监控数据 + free_monitor_path = '/www/server/site_total/data/total' + site_path = os.path.join(free_monitor_path, siteName) + if os.path.exists(site_path) and os.path.isdir(site_path): + shutil.rmtree(site_path) + + # 尝试删除监控报表插件数据 + conf_file = '/www/server/panel/plugin/monitor/monitor_data/config/config.json' + if os.path.exists(conf_file): + conf_str = public.readFile(conf_file) + conf_data = json.loads(conf_str) if conf_str else None + + db_path = None + if isinstance(conf_data, dict): + db_path = conf_data.get('data_save_path') + + if db_path and os.path.exists(db_path): + monitor_path = os.path.join(db_path, siteName) + if os.path.exists(monitor_path) and os.path.isdir(monitor_path): + shutil.rmtree(monitor_path) + except: + pass # 是否删除关联数据库 if hasattr(get, 'database'): @@ -2844,7 +2869,7 @@ listener SSL443 {{ public.serviceReload() return public.return_message(0, 0, public.lang("SSL turned on!")) else: - return True + return public.returnMsg(True,"") if ng_conf.find('#error_page 404/404.html;') == -1: return public.returnMsg(False, "can found【#error_page 404/404.html;】," @@ -3011,46 +3036,10 @@ listener SSL443 {{ shutil.copyfile(file, self.apache_conf_bak) public.writeFile(file, ap_conf) if other_project == "node": # 兼容Nodejs项目 - from projectModel.nodejsModel import main + from projectModelV2.nodejsModel import main m = main() project_find = m.get_project_find(siteName) m.set_apache_config(project_find) - # if other_project == "java": # 兼容Java项目 - # try: - # from mod.project.java.java_web_conf import JavaApacheTool - # from mod.project.java.projectMod import main - # JavaApacheTool().set_apache_config_for_ssl(main().get_project_find(siteName)) - # except: - # from projectModel.javaModel import main - # m = main() - # project_find = m.get_project_find(siteName) - # m.set_apache_config(project_find) - # if other_project == "go": # 兼容Go项目 - # from projectModel.goModel import main - # m = main() - # project_find = m.get_project_find(siteName) - # m.set_apache_config(project_find) - # if other_project == "other": # 兼容其他项目 - # from projectModel.otherModel import main - # m = main() - # project_find = m.get_project_find(siteName) - # m.set_apache_config(project_find) - # if other_project == "python": # 兼容python项目 - # from projectModel.pythonModel import main - # m = main() - # project_find = m.get_project_find(siteName) - # m.set_apache_config(project_find) - # if other_project == "net": - # from projectModel.netModel import main - # m = main() - # project_find = m.get_project_find(siteName) - # m.set_apache_config(project_find) - # - # if other_project == "html": - # from projectModel.htmlModel import main - # m = main() - # project_find = m.get_project_find(siteName) - # m.set_apache_config(project_find) if not have_nginx_conf and not have_apache_conf: return public.returnMsg(False, 'No server configuration file. ' @@ -3090,7 +3079,7 @@ listener SSL443 {{ if 'isBatch' not in get: return result else: - return True + return public.returnMsg(True, "") def save_cert(self, get): # try: @@ -3450,11 +3439,9 @@ listener SSL443 {{ try: from ssl_domainModelV2.service import CertHandler from ssl_domainModelV2.model import DnsDomainSSL - ssl = None - for s in DnsDomainSSL.objects.filter(user_for__like=f"%{siteName}%").fields("auto_renew"): - if siteName in s.sites_uf: - ssl = s - break + ssl = DnsDomainSSL.objects.filter(hash=CertHandler.get_hash(csr)).first() + if not ssl: + ssl = None res = { 'status': status, 'oid': oid, @@ -6590,7 +6577,7 @@ location %s if conf: regex_obj = re.compile(r'(?:# *)?(access_log +(?:{}|off; # Disable with aapanel))(?: *;)?'.format(rep.replace('.', r'\.'))) - if conf.find('access_log {}'.format(rep)) > -1: + if conf.find('access_log {}'.format(rep)) > -1 or conf.find('access_log {}'.format(rep)) > -1: # 禁用Access日志 conf = regex_obj.sub('access_log off; # Disable with aapanel'.format(rep), conf) else: @@ -11698,23 +11685,18 @@ RewriteRule \.(BTPFILE)$ /404.html [R,NC] for path in site_path_list: if os.path.exists(path): content = public.readFile(path) + + # 关闭时,关闭获取代理ip + if status == 'disable': + remove_pat = re.compile(r'#Obtain the reverse proxy ip start[\s\S]*?#Obtain the reverse proxy ip end\n?',re.DOTALL) + content = remove_pat.sub('', content) + content = content.replace(f'*:{port_80}', f'*:{new_port_80}') content = content.replace(f'*:{port_443}', f'*:{new_port_443}') content = content.replace(f'[::]:{port_80}', f'[::]:{new_port_80}') content = content.replace(f'[::]:{port_443}', f'[::]:{new_port_443}') public.writeFile(path, content) - # 处理node - site_name = public.M('sites').where('project_type = ?','Node').field('name').select() - for name in site_name: - self.check_node_project(name, status) - - # path = os.path.join(public.get_panel_path(), 'vhost', 'apache', name['name'] + '.conf') - # if os.path.exists(path): - # content = public.readFile(path) - # content = content.replace(f'*:{port_80}', f'*:{new_port_80}') - # content = content.replace(f'*:{port_443}', f'*:{new_port_443}') - # public.writeFile(path, content) if os.path.exists(main_config): content = public.readFile(main_config) @@ -11889,11 +11871,12 @@ RewriteRule \.(BTPFILE)$ /404.html [R,NC] if service_type == 'apache': ssl_port = '8290' listen_port = '8288' - elif service_type == 'openlitespeed': - ssl_port = '8190' - listen_port = '8188' - new_block = r"""server + new_block = r"""upstream {site_name} {{ + server 127.0.0.1:{listen_port}; + keepalive 64; +}} +server {{ {listen} {server_name} @@ -11918,22 +11901,29 @@ RewriteRule \.(BTPFILE)$ /404.html [R,NC] #error_page 502 /502.html; #ERROR-PAGE-END {begin_deny} - + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|bmp|webp|woff|woff2|svg)$ {{ + root {site_path}; + expires 30d; + access_log off; + add_header Cache-Control "public, no-transform"; + try_files $uri =404; + }} + + location / {{ - proxy_pass http://127.0.0.1:{listen_port}; - + proxy_pass http://{site_name}; + proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header REMOTE-HOST $remote_addr; - proxy_set_header SERVER_PROTOCOL $server_protocol; - proxy_set_header HTTPS $https; - proxy_http_version 1.1; - proxy_set_header Upgrade $connection_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header REMOTE_ADDR $remote_addr; - proxy_set_header REMOTE_PORT $remote_port; + set $connection_conf ""; + if ($http_upgrade = "websocket") {{ + set $connection_conf "upgrade"; + }} + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_conf; add_header Cache-Control no-cache; }} @@ -11958,10 +11948,120 @@ RewriteRule \.(BTPFILE)$ /404.html [R,NC] error_log {_log}.error.log; {Monitor} -}} """.format(server_name=res['server_name'], include_php=res['include_php'],rert_apply_check=res['rert_apply_check'], - listen_port=listen_port, ssl_port=ssl_port, ssl=res['ssl'],Monitor=res['Monitor'],begin_deny=res['begin_deny'], - site_name=site_name, site_path=site_path,listen=res['listen'],_log=log_path,default_document=res['default_document'], - referenced_redirect=res['referenced_redirect']) +}} """.format(server_name=res['server_name'], include_php=res['include_php'], + rert_apply_check=res['rert_apply_check'], + listen_port=listen_port, ssl_port=ssl_port, ssl=res['ssl'], Monitor=res['Monitor'], + begin_deny=res['begin_deny'], + site_name=site_name, site_path=site_path, listen=res['listen'], _log=log_path, + default_document=res['default_document'], + referenced_redirect=res['referenced_redirect']) + + elif service_type == 'openlitespeed': + ssl_port = '8190' + listen_port = '8188' + + new_block = r"""upstream {site_name} {{ + server 127.0.0.1:{listen_port}; + keepalive 64; +}} + +server + {{ +{listen} + {server_name} +{default_document} + root {site_path}; + {rert_apply_check} + + #PHP-INFO-START\s+PHP reference configuration, allowed to be commented, deleted or modified + {include_php} + #PHP-INFO-END + + #SSL-START SSL related configuration, do NOT delete or modify the next line of commented-out 404 rules + {ssl} + #SSL-END + {referenced_redirect} + #REWRITE-START URL rewrite rule reference, any modification will invalidate the rewrite rules set by the panel + # include /www/server/panel/vhost/rewrite/{site_name}.conf; + #REWRITE-END + + #ERROR-PAGE-START Error page configuration, allowed to be commented, deleted or modified + #error_page 404 /404.html; + #error_page 502 /502.html; + #ERROR-PAGE-END + {begin_deny} + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|bmp|webp|woff|woff2|svg)$ {{ + root {site_path}; + expires 30d; + access_log off; + add_header Cache-Control "public, no-transform"; + try_files $uri =404; + }} + + location / {{ + proxy_pass http://{site_name}; + + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # The following configuration can be adjusted according to your actual needs + set $conn_header ""; + if ($http_upgrade = "websocket") {{ + set $conn_header "upgrade"; + }} + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $conn_header; + + proxy_cache_bypass $http_upgrade; + proxy_pass_header Set-Cookie; + proxy_pass_header Cookie; + proxy_pass_header X-LSCACHE; + + proxy_buffer_size 256k; + proxy_buffers 4 128k; + proxy_busy_buffers_size 256k; + proxy_temp_file_write_size 256k; + + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + }} + + gzip on; + gzip_vary on; + gzip_proxied any; + gzip_comp_level 6; + gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml; + + # Forbidden files or directories + location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) + {{ + return 404; + }} + + location ~ \.well-known{{ + allow all; + root {site_path}; + try_files $uri =404; + }} + + #Prohibit putting sensitive files in certificate verification directory + if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {{ + return 403; + }} + + access_log {_log}.log; + error_log {_log}.error.log; + + {Monitor} + }} """.format(server_name=res['server_name'], include_php=res['include_php'],rert_apply_check=res['rert_apply_check'], + listen_port=listen_port, ssl_port=ssl_port, ssl=res['ssl'],Monitor=res['Monitor'],begin_deny=res['begin_deny'], + site_name=site_name, site_path=site_path,listen=res['listen'],_log=log_path,default_document=res['default_document'], + referenced_redirect=res['referenced_redirect']) public.writeFile(config_path, new_block) # 处理apache配置ssl后,强制重定向 @@ -11995,22 +12095,52 @@ RewriteRule \.(BTPFILE)$ /404.html [R,NC] insert_marker = re.compile(r'/\* That\'s all, stop editing! Happy publishing\. \*/', re.IGNORECASE) match = insert_marker.search(content) - if match: - code_to_add = """ -/** Make WordPress correctly recognize HTTPS. start */ + code_to_add = """/** Make WordPress correctly recognize HTTPS. start */ if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https') { $_SERVER['HTTPS'] = 'on'; $_SERVER['SERVER_PORT'] = 443; } /** Make WordPress correctly recognize HTTPS. end */ """ - new_content = content[:match.start()] + code_to_add + content[match.start():] - public.writeFile(file_path,new_content) + if match: + new_content = content[:match.start()] + code_to_add + content[match.start():] + else: + new_content = content + '\n' + code_to_add + + public.writeFile(file_path, new_content) + return True except: return False + # 设置 apache 日志IP + def set_apache_logs_ip(self,file_path, action='add'): + try: + content = public.readFile(file_path) + if not content: + return + + ip_config = """ + #Obtain the reverse proxy ip start + RemoteIPTrustedProxy 127.0.0.1 + RemoteIPHeader X-Real-IP + #Obtain the reverse proxy ip end + """ + ip_pat = re.compile(r'#Obtain the reverse proxy ip start[\s\S]*?#Obtain the reverse proxy ip end\n?', + re.DOTALL) + pattern = re.compile(r'()(.*?)(?=)', re.DOTALL) + if action == 'add': + if ip_pat.search(content): + return + content = pattern.sub(lambda m: f"{m.group(1)}{m.group(2)}{ip_config}", content) + else: + content = ip_pat.sub('', content) + + public.writeFile(file_path, content) + except: + pass + # 切换网站服务 def switch_webservice(self, args: public.dict_obj): try: @@ -12049,14 +12179,10 @@ if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FOR if not ok: return public.return_message(-1, 0, public.lang('{}',msg)) - # 切换服务,apache需同步修改虚拟主机端口 + # 切换服务,apache需添加反向代理IP + path = os.path.join(public.get_panel_path(), 'vhost', 'apache', site['name'] + '.conf') if service_type == 'apache': - path = os.path.join(public.get_panel_path(), 'vhost', 'apache', site['name'] + '.conf') - if os.path.exists(path): - content = public.readFile(path) - content = content.replace(f'*:80', f'*:8288') - content = content.replace(f'*:443', f'*:443') - public.writeFile(path, content) + self.set_apache_logs_ip(path) # 修改nginx代理, 若是回滚操作则不修改配置,直接恢复备份 if not args.get('website_rollback', False): @@ -12153,17 +12279,10 @@ if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FOR res.append({site['name'] : msg }) continue - # 切换服务,apache需同步修改虚拟主机端口 + # 切换服务,apache需添加获取反向代理IP + path = os.path.join(public.get_panel_path(), 'vhost', 'apache', site['name'] + '.conf') if service_type == 'apache': - path = os.path.join(public.get_panel_path(), 'vhost', 'apache', site['name'] + '.conf') - if os.path.exists(path): - content = public.readFile(path) - content = content.replace(f'*:80', f'*:8288') - content = content.replace(f'*:443', f'*:443') - public.writeFile(path, content) - else: - res.append({site['name']: public.lang('Theconfiguration file does not exist')}) - continue + self.set_apache_logs_ip(path) ok = self.nginx_update_config(service_type, config_path, old_type, site['name'], site['path'], site['id']) if not ok: @@ -12192,8 +12311,6 @@ if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FOR for proxy in proxy_list: if proxy['proxydir'] in ['/', '/*']: - # dict_obj = public.to_dict_obj({'sitename': name,'proxyname': proxy['proxyname']}) - # self.RemoveProxy(dict_obj) return False return True @@ -12214,18 +12331,6 @@ if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FOR except Exception as e: return - # 检测node项目,多服务下默认走nginx - def check_node_project(self, site_name, is_ = 'enable'): - conf = os.path.join(public.get_panel_path(),'vhost', 'apache', f'node_{site_name}.conf') - - # 使多服务下apache文件不生效 - if is_ == 'enable': - if os.path.exists(conf): - shutil.move(conf, conf + '.barduo') - else: - if os.path.exists(conf + '.barduo'): - shutil.move(conf + '.barduo', conf ) - return True # 网站回滚 def website_rollback(self, get): @@ -12457,9 +12562,9 @@ if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FOR if white_ips: status['white_ips'] = white_ips.strip("\n") except: - return public.return_message(-1, 0, public.lang("An error occurred when parsing the {} configuration file. Please check if the format is normal.",cdn_ip_conf_file)) - - # === + return public.return_message(-1, 0, + public.lang("An error occurred when parsing the {} configuration file. Please check if the format is normal.", + cdn_ip_conf_file)) return public.return_message(0, 0,status) diff --git a/class_v2/panel_ssl_v2.py b/class_v2/panel_ssl_v2.py index 2fbc1ba0..ab5c50e4 100644 --- a/class_v2/panel_ssl_v2.py +++ b/class_v2/panel_ssl_v2.py @@ -1205,7 +1205,9 @@ class panelSSL: public.writeFile(keypath, result['privkey']) public.writeFile(csrpath, result['fullchain']) import panel_site_v2 as panelSite - panelSite.panelSite().SetSSLConf(get) + res = panelSite.panelSite().SetSSLConf(get) + if not res['status']: + return public.return_message(-1, 0, res['msg']) return public.return_message(0, 0, public.lang("Setup successfully!")) except Exception as ex: import traceback @@ -1804,4 +1806,4 @@ class panelSSL: return public.return_message(-1, 0, result['res']) except Exception as e: - return public.return_message(-1, 0, "err:" + str(e)) \ No newline at end of file + return public.return_message(-1, 0, "err:" + str(e)) diff --git a/class_v2/projectModelV2/monitorModel.py b/class_v2/projectModelV2/monitorModel.py new file mode 100644 index 00000000..4c4cc713 --- /dev/null +++ b/class_v2/projectModelV2/monitorModel.py @@ -0,0 +1,742 @@ +# coding: utf-8 +# ------------------------------------------------------------------- +# 宝塔Linux面板-基础网站数据统计模块 +# 该模块用于统计基础网站数据,包括IP数量、流量、访问量、PV、UV等数据。 +# ------------------------------------------------------------------- +# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved. +# ------------------------------------------------------------------- +# Author: wpl +# ------------------------------------------------------------------- +import json +import os +import re +import sys + +from datetime import datetime, timedelta +from safeModel.base import safeBase +os.chdir("/www/server/panel") +sys.path.append("class_v2/") +import db +import public + +class main(safeBase): + # ------------------------ 常量设置 ------------------------ + TOTAL_DIR = '/www/server/site_total/data/total' + SUMMARY_DIR = '/www/server/site_total/data/summary' + def __init__(self): + pass + + # ------------------------ 对外接口 ------------------------ + def get_overview(self, get=None): + """ + @name 总概览接口(全站三日总览 + 网站排名TOP5 + 全站近7天趋势) + @return public.return_data(True, data) + 安全与约束: + - Top5站点,固定按pv升序排序(用户确认:默认升序,指标需传参,支持traffic/req_count/ip_count/uv/pv) + - 日期以服务器本地时间为准:今日/昨日/前日 + - 近7天包含今日在内的连续7个自然日 + """ + public.set_module_logs('site_total', 'get_overview', 1) + today, yesterday, day_before = self._get_three_days() + # 三日总览(全站) + today_total = self._get_all_sites_total_for_date(today) + yesterday_total = self._get_all_sites_total_for_date(yesterday) + day_before_total = self._get_all_sites_total_for_date(day_before) + compare = self._compute_compare(today_total, yesterday_total) + overview_three_days = { + 'today': self._format_daily_stat(today_total, include_compare=compare), + 'yesterday': self._format_daily_stat(yesterday_total), + 'day_before': self._format_daily_stat(day_before_total) + } + # Top5排序参数(支持传递,默认 pv/asc) + metric = 'pv' + order = 'asc' + if get: + try: + gm = getattr(get, 'metric', None) + go = getattr(get, 'order', None) + if gm is None and isinstance(get, dict): + gm = get.get('metric') + if go is None and isinstance(get, dict): + go = get.get('order') + if gm: + metric = str(gm) + if go: + order = str(go) + except Exception: + pass + + valid_metrics = ['traffic', 'req_count', 'ip_count', 'uv', 'pv'] + valid_orders = ['asc', 'desc'] + if metric not in valid_metrics: + metric = 'pv' + if order not in valid_orders: + order = 'asc' + + # Top5 当天(支持传递 metric/order,默认 pv/asc) + top5 = self._get_top_sites_for_date(today, metric=metric, order=order, limit=5) + + # 近7天趋势(全站) + trend_points = self._build_trend_7days_all() + rec_status, detail_id = self._get_rec_status_detail() + data = { + 'date_range': { + 'today': today, + 'yesterday': yesterday, + 'day_before': day_before + }, + 'overview_three_days': overview_three_days, + 'top5_sites': { + 'metric': metric, + 'order': order, + 'timeframe': 'today', + # 'range': {'date': today}, + 'items': top5 + }, + 'trend_7days': { + 'timeframe': 'last_7_days', + 'points': trend_points + }, + 'rec_status': rec_status, + 'detail_id': detail_id + } + return public.return_message(0, 0, data) + + def get_site_overview(self, get): + """ + @name 指定站点数据概览接口(单站三日总览 + 单站近7天趋势) + @param get.site_name 站点名(必填,校验:仅允许字母、数字、点、短横线、下划线) + @return public.return_data(True, data) + """ + # 监控报表获取数据(确保数据一致) + public.set_module_logs('site_total', 'get_site_overview', 1) + site_name = getattr(get, 'site_name', None) + if not site_name: + return public.return_message(-1, 0, 'The site name is illegal or missing!') + today, yesterday, day_before = self._get_three_days() + # 三日总览(单站) + today_total = self._get_site_total_for_date(site_name, today) + yesterday_total = self._get_site_total_for_date(site_name, yesterday) + day_before_total = self._get_site_total_for_date(site_name, day_before) + compare = self._compute_compare(today_total, yesterday_total) + overview_three_days = { + 'today': self._format_daily_stat(today_total, include_compare=compare), + 'yesterday': self._format_daily_stat(yesterday_total), + 'day_before': self._format_daily_stat(day_before_total) + } + # 近7天趋势(单站) + trend_points = self._build_trend_7days_site(site_name) + + # 检查config配置是否需要更新 + self._check_config() + + data = { + 'site': site_name, + 'date_range': { + 'today': today, + 'yesterday': yesterday, + 'day_before': day_before + }, + 'overview_three_days': overview_three_days, + 'trend_7days': { + 'site': site_name, + 'timeframe': 'last_7_days', + 'points': trend_points + } + } + return public.return_message(0, 0, data) + + # def receive_products(self, get): + # """ + # @name 领取产品接口 + # @param get.detail_id 活动详情ID(必填) + # @return public.return_data(True, data) + # """ + # try: + # u = public.get_user_info() + # if not isinstance(u, dict): + # return public.return_message(-1, 0, 'User information acquisition failed!') + # serverid = u.get('serverid') + # access_key = u.get('access_key') + # uid = u.get('uid') + # if not serverid or not access_key or uid is None: + # return public.return_message(-1, 0, 'Missing parameters') + # detail_id = None + # try: + # detail_id = getattr(get, 'detail_id', None) + # except Exception: + # detail_id = None + # if detail_id is None and isinstance(get, dict): + # detail_id = get.get('detail_id') + # if detail_id is None: + # return public.return_message(-1, 0, '缺少detail_id') + # mac = public.get_mac_address() + # payload = { + # 'serverid': serverid, + # 'access_key': access_key, + # 'uid': uid, + # 'detail_id': detail_id, + # 'mac': mac + # } + # url = 'https://www.bt.cn/newapi/activity/panelapi/receive_products' + # res = public.httpPost(url, payload) + # if not res: + # return public.return_message(-1, 0, '接口请求失败') + # try: + # obj = json.loads(res) + # except Exception: + # return public.return_message(-1, 0, '响应解析失败') + # status = obj.get('status') + # success = bool(status) + # # 刷新软件列表状态,确保最新软件列表信息获取 + # public.flush_plugin_list() + # return public.return_message(0, 0, obj) + # except Exception: + # return public.return_message(-1, 0, '领取失败') + + # ------------------------ 内部工具方法 ------------------------ + def _get_three_days(self): + """返回今日、昨日、前日的日期字符串(YYYY-MM-DD)""" + now = datetime.now() + today = now.strftime('%Y-%m-%d') + yesterday = (now - timedelta(days=1)).strftime('%Y-%m-%d') + day_before = (now - timedelta(days=2)).strftime('%Y-%m-%d') + return today, yesterday, day_before + + def _get_7day_dates(self): + """返回近7天日期列表(包含今日), 每项格式YYYY-MM-DD""" + base = datetime.now() + dates = [] + for i in range(6, -1, -1): + dates.append((base - timedelta(days=i)).strftime('%Y-%m-%d')) + return dates + + def _get_7day_range(self): + """返回近7天范围的字典: {start_date, end_date}""" + base = datetime.now() + start_date = (base - timedelta(days=6)).strftime('%Y-%m-%d') + end_date = base.strftime('%Y-%m-%d') + return {'start_date': start_date, 'end_date': end_date} + + def _validate_site_name(self, site): + """校验站点名,仅允许字母、数字、点、短横线、下划线,长度<=128""" + if not isinstance(site, str): + return False + if len(site) == 0 or len(site) > 128: + return False + return re.match(r'^[A-Za-z0-9._-]+$', site) is not None + + def _safe_read_json(self, path): + """安全读取JSON文件,失败返回None""" + try: + if not os.path.exists(path): + return None + body = public.readFile(path) + if not body: + return None + return json.loads(body) + except Exception: + return None + + def _ensure_metrics(self, data): + """规范化指标字典,缺失字段按0处理,类型转为int""" + keys = ['traffic', 'requests', 'ip', 'uv', 'pv'] + result = {} + for k in keys: + try: + v = int((data or {}).get(k, 0)) if isinstance(data, dict) else 0 + except Exception: + v = 0 + result[k] = v + return result + + def _humanize_bytes(self, n): + """按1024换算返回人类可读格式""" + try: + n = int(n) + except Exception: + n = 0 + units = ['B', 'KB', 'MB', 'GB', 'TB'] + size = float(n) + idx = 0 + while size >= 1024 and idx < len(units) - 1: + size /= 1024.0 + idx += 1 + # 保留两位小数 + if idx == 0: + return f"{int(size)} {units[idx]}" + return f"{round(size, 2)} {units[idx]}" + + def _format_daily_stat(self, metrics, include_compare=None): + """将指标格式化为返回结构,include_compare用于today对比昨日""" + m = self._ensure_metrics(metrics or {}) + formatted = { + 'traffic_bytes': m['traffic'], + 'traffic_human': self._humanize_bytes(m['traffic']), + 'req_count': m['requests'], + 'ip_count': m['ip'], + 'uv': m['uv'], + 'pv': m['pv'] + } + if include_compare is not None: + formatted['compare_vs_yesterday'] = include_compare + return formatted + + def _compute_compare(self, today_metrics, yesterday_metrics): + """计算与昨日的对比,返回各指标的abs/pct/trend,pct保留两位小数""" + t = self._ensure_metrics(today_metrics or {}) + y = self._ensure_metrics(yesterday_metrics or {}) + result = {} + for src_k, out_k in [('traffic','traffic'), ('requests','req_count'), ('ip','ip_count'), ('uv','uv'), ('pv','pv')]: + abs_change = t[src_k] - y[src_k] + pct = 0.0 + if y[src_k] > 0: + pct = round((abs_change / y[src_k]) * 100.0, 2) + else: + # 昨日为0,无法计算百分比,按规则返回0 + pct = 0.0 + trend = 'flat' + if abs_change > 0: + trend = 'up' + elif abs_change < 0: + trend = 'down' + result[out_k] = {'abs': abs_change, 'pct': pct, 'trend': trend} + return result + + def _monitor_enabled(self): + """检测是否启用监控报表数据源。存在 /www/server/panel/plugin/monitor 且配置中的 data_save_path 可用时返回 True""" + try: + if not os.path.exists('/www/server/panel/plugin/monitor'): + return False + db_path = self._get_monitor_db_path() + return bool(db_path and os.path.isdir(db_path)) + except Exception as e: + return False + + def _get_monitor_db_path(self): + """读取监控报表配置,获取 data_save_path。结果缓存到实例属性以减少IO""" + try: + if hasattr(self, '_monitor_db_path') and self._monitor_db_path: + return self._monitor_db_path + conf_file = '/www/server/panel/plugin/monitor/monitor_data/config/config.json' + conf_data = None + try: + conf_str = public.readFile(conf_file) + conf_data = json.loads(conf_str) if conf_str else None + except Exception: + conf_data = None + db_path = None + if isinstance(conf_data, dict): + db_path = conf_data.get('data_save_path') + self._monitor_db_path = db_path + return db_path + except Exception: + return None + + def _list_sites_monitor(self): + """从监控报表数据目录枚举站点子目录(仅合法站点名且存在 request_total.db)""" + sites = [] + try: + base = self._get_monitor_db_path() + if not base or not os.path.isdir(base): + return sites + for name in os.listdir(base): + full = os.path.join(base, name) + db_file = os.path.join(full, 'request_total.db') + if os.path.isdir(full) and self._validate_site_name(name) and os.path.isfile(db_file): + sites.append(name) + except Exception: + pass + return sites + + def _read_site_day_from_monitor(self, site, date_str): + """从监控报表 request_total.db 读取单站某日指标,异常或缺失返回0集""" + result = {'traffic': 0, 'requests': 0, 'ip': 0, 'uv': 0, 'pv': 0} + try: + base = self._get_monitor_db_path() + if not base: + return result + db_file = os.path.join(base, site, 'request_total.db') + if not os.path.isfile(db_file): + return result + # 日期转换为YYYYMMDD + ymd = date_str.replace('-', '') + ts = db.Sql() + ts._Sql__DB_FILE = db_file + fields = 'SUM(sent_bytes) as traffic, SUM(uv_number) as uv, SUM(ip_number) as ip, SUM(pv_number) as pv, SUM(request) as requests' + row = ts.table('request_total').where("date=?", (ymd,)).field(fields).find() + ts.close() + if isinstance(row, dict) and row: + for k in result.keys(): + try: + result[k] = int(row.get(k, 0) or 0) + except Exception: + result[k] = 0 + except Exception: + pass + return result + + def _ensure_summary_dir(self): + """确保SUMMARY_DIR存在""" + try: + if not os.path.isdir(self.SUMMARY_DIR): + os.makedirs(self.SUMMARY_DIR, exist_ok=True) + except Exception: + pass + + def _safe_write_json_atomic(self, path, data): + """原子写入JSON:先写临时文件,再替换为目标文件""" + try: + dir_name = os.path.dirname(path) + try: + os.makedirs(dir_name, exist_ok=True) + except Exception: + pass + base_name = os.path.basename(path) + tmp_path = os.path.join(dir_name, '.' + base_name + '.tmp') + with open(tmp_path, 'w', encoding='utf-8') as f: + json.dump(data, f, ensure_ascii=False) + os.replace(tmp_path, path) + return True + except Exception: + try: + # 回滚临时文件 + if 'tmp_path' in locals() and os.path.exists(tmp_path): + os.remove(tmp_path) + except Exception: + pass + return False + + def _list_sites(self): + """枚举站点列表:优先使用监控报表数据源,否则遍历TOTAL_DIR下的目录""" + try: + if self._monitor_enabled(): + return self._list_sites_monitor() + except Exception: + # 监控数据源异常时回退旧方式 + pass + sites = [] + base = self.TOTAL_DIR + try: + if not os.path.exists(base): + return sites + for name in os.listdir(base): + full = os.path.join(base, name) + if os.path.isdir(full) and self._validate_site_name(name): + sites.append(name) + except Exception: + pass + return sites + + def _site_day_path(self, site, date_str): + """拼接单站点某日JSON路径:/total/{site}/{YYYY-MM-DD}.json""" + return os.path.join(self.TOTAL_DIR, site, f"{date_str}.json") + + def _load_summary_for_date(self, date_str): + """读取全站汇总持久文件 /summary/{YYYY-MM-DD}.json,返回指标或None""" + path = os.path.join(self.SUMMARY_DIR, f"{date_str}.json") + data = self._safe_read_json(path) + if data is None: + return None + return self._ensure_metrics(data) + + def _aggregate_all_sites_for_date(self, date_str): + """聚合全站在某日的指标(遍历站点逐一读取),缺失文件按0处理""" + total = {'traffic': 0, 'requests': 0, 'ip': 0, 'uv': 0, 'pv': 0} + for site in self._list_sites(): + m = self._aggregate_site_for_date(site, date_str) + for k in total.keys(): + total[k] += m.get(k, 0) + return total + + def _aggregate_site_for_date(self, site, date_str): + """读取单站点某日指标(优先监控报表DB,失败回退旧文件),缺失或异常返回全部0""" + # 优先从监控报表数据源读取 + try: + if self._monitor_enabled(): + return self._ensure_metrics(self._read_site_day_from_monitor(site, date_str)) + except: + # 数据源异常时回退旧方式 + pass + # 旧文件方式 + path = self._site_day_path(site, date_str) + data = self._safe_read_json(path) + m = self._ensure_metrics(data or {}) + return m + + def _get_all_sites_total_for_date(self, date_str): + """优先读取summary;不存在则回退聚合原始站点文件""" + summary = self._load_summary_for_date(date_str) + if summary is not None: + return summary + return self._aggregate_all_sites_for_date(date_str) + + def _get_site_total_for_date(self, site, date_str): + """读取单站某日指标(直接读取原始文件)""" + return self._aggregate_site_for_date(site, date_str) + + def _build_trend_7days_all(self): + """构建全站近7天趋势points数组(历史6天缺失则计算并写入缓存,今日实时不写缓存)""" + points = [] + today = datetime.now().strftime('%Y-%m-%d') + for d in self._get_7day_dates(): + if d == today: + # 今日实时统计,跳过summary缓存 + m = self._aggregate_all_sites_for_date(d) + else: + # 历史天优先读取summary,缺失则实时计算并写入缓存 + summary = self._load_summary_for_date(d) + if summary is None: + m = self._aggregate_all_sites_for_date(d) + # 写入SUMMARY_DIR/{YYYY-MM-DD}.json + try: + self._safe_write_json_atomic(os.path.join(self.SUMMARY_DIR, f"{d}.json"), self._ensure_metrics(m)) + except Exception: + pass + else: + m = summary + points.append({ + 'date': d, + 'traffic_bytes': m['traffic'], + 'traffic_human': self._humanize_bytes(m['traffic']), + 'req_count': m['requests'], + 'ip_count': m['ip'], + 'uv': m['uv'], + 'pv': m['pv'] + }) + return points + + def _build_trend_7days_site(self, site): + """构建单站近7天趋势points数组(历史天缺失则计算并写入 /total/{site}/{YYYY-MM-DD}.json;今日实时不写缓存)""" + points = [] + today = datetime.now().strftime('%Y-%m-%d') + for d in self._get_7day_dates(): + if d == today: + m = self._aggregate_site_for_date(site, d) + else: + path = self._site_day_path(site, d) + data = self._safe_read_json(path) + if data is None: + m = self._aggregate_site_for_date(site, d) + try: + self._safe_write_json_atomic(path, self._ensure_metrics(m)) + except Exception: + pass + else: + m = self._ensure_metrics(data) + points.append({ + 'date': d, + 'traffic_bytes': m['traffic'], + 'traffic_human': self._humanize_bytes(m['traffic']), + 'req_count': m['requests'], + 'ip_count': m['ip'], + 'uv': m['uv'], + 'pv': m['pv'] + }) + return points + + def _get_top_sites_for_date(self, date_str, metric='pv', order='asc', limit=5): + """计算指定日期的站点当天排行""" + if metric not in ['traffic', 'req_count', 'ip_count', 'uv', 'pv']: + metric = 'pv' + if order not in ['asc', 'desc']: + order = 'asc' + result = [] + for site in self._list_sites(): + m = self._aggregate_site_for_date(site, date_str) + result.append({ + 'site': site, + 'traffic_bytes': m['traffic'], + 'traffic_human': self._humanize_bytes(m['traffic']), + 'req_count': m['requests'], + 'ip_count': m['ip'], + 'uv': m['uv'], + 'pv': m['pv'] + }) + # 映射排序字段 + metric_alias = {'traffic': 'traffic_bytes', 'req_count': 'req_count', 'ip_count': 'ip_count', 'uv': 'uv', 'pv': 'pv'} + sort_key = metric_alias.get(metric, 'pv') + reverse = (order == 'desc') + result.sort(key=lambda x: int(x.get(sort_key, 0)), reverse=reverse) + if isinstance(limit, int): + if limit <= 0: + limit = 5 + if limit > 50: + limit = 50 + else: + limit = 5 + return result[:limit] + + def _get_top_sites_last_7_days(self, metric='pv', order='asc', limit=5): + """计算近7天累计的站点排行(固定metric=pv,order=asc)""" + if metric not in ['traffic', 'req_count', 'ip_count', 'uv', 'pv']: + metric = 'pv' + if order not in ['asc', 'desc']: + order = 'asc' + dates = self._get_7day_dates() + result = [] + for site in self._list_sites(): + agg = {'traffic': 0, 'requests': 0, 'ip': 0, 'uv': 0, 'pv': 0} + for d in dates: + m = self._aggregate_site_for_date(site, d) + for k in agg.keys(): + agg[k] += m.get(k, 0) + result.append({ + 'site': site, + 'traffic_bytes': agg['traffic'], + 'traffic_human': self._humanize_bytes(agg['traffic']), + 'req_count': agg['requests'], + 'ip_count': agg['ip'], + 'uv': agg['uv'], + 'pv': agg['pv'] + }) + # 排序字段映射 + metric_alias = {'traffic': 'traffic_bytes', 'req_count': 'req_count', 'ip_count': 'ip_count', 'uv': 'uv', 'pv': 'pv'} + sort_key = metric_alias.get(metric, 'pv') + reverse = (order == 'desc') + result.sort(key=lambda x: int(x.get(sort_key, 0)), reverse=reverse) + if isinstance(limit, int): + if limit <= 0: + limit = 5 + if limit > 50: + limit = 50 + else: + limit = 5 + return result[:limit] + + def _get_rec_status(self): + try: + u = public.get_user_info() + if not isinstance(u, dict): + return False + serverid = u.get('serverid') + access_key = u.get('access_key') + uid = u.get('uid') + if not serverid or not access_key or uid is None: + return False + payload = { + 'serverid': serverid, + 'access_key': access_key, + 'uid': uid, + 'activity_id': 44 + } + url = 'https://www.bt.cn/newapi/activity/panelapi/get_free_activity_info' + res = public.httpPost(url, payload) + if not res: + return False + try: + obj = json.loads(res) + except Exception: + return False + data = obj.get('data') + if isinstance(data, dict): + s = data.get('status') + detail = data.get('detail') + buy_status = None + if isinstance(detail, list) and len(detail) > 0: + buy_status = detail[0].get('buy_status') + elif isinstance(detail, dict): + buy_status = detail.get('buy_status') + return (s == 1 or str(s) == '1') and (buy_status == 1 or str(buy_status) == '1') + if isinstance(data, list) and len(data) > 0: + item = data[0] + s = item.get('status') + detail = item.get('detail') + buy_status = None + if isinstance(detail, list) and len(detail) > 0: + buy_status = detail[0].get('buy_status') + elif isinstance(detail, dict): + buy_status = detail.get('buy_status') + return (s == 1 or str(s) == '1') and (buy_status == 1 or str(buy_status) == '1') + return False + except Exception: + return False + + def _get_rec_status_detail(self): + try: + u = public.get_user_info() + if not isinstance(u, dict): + return False, None + serverid = u.get('serverid') + access_key = u.get('access_key') + uid = u.get('uid') + if not serverid or not access_key or uid is None: + return False, None + payload = { + 'serverid': serverid, + 'access_key': access_key, + 'uid': uid, + 'activity_id': 44 + } + url = 'https://www.bt.cn/newapi/activity/panelapi/get_free_activity_info' + res = public.httpPost(url, payload) + if not res: + return False, None + try: + obj = json.loads(res) + except Exception: + return False, None + data = obj.get('data') + detail_id = None + if isinstance(data, dict): + s = data.get('status') + detail = data.get('detail') + buy_status = None + if isinstance(detail, list) and len(detail) > 0: + buy_status = detail[0].get('buy_status') + detail_id = detail[0].get('id') + elif isinstance(detail, dict): + buy_status = detail.get('buy_status') + detail_id = detail.get('id') + return (s == 1 or str(s) == '1') and (buy_status == 1 or str(buy_status) == '1'), detail_id + if isinstance(data, list) and len(data) > 0: + item = data[0] + s = item.get('status') + detail = item.get('detail') + buy_status = None + if isinstance(detail, list) and len(detail) > 0: + buy_status = detail[0].get('buy_status') + detail_id = detail[0].get('id') + elif isinstance(detail, dict): + buy_status = detail.get('buy_status') + detail_id = detail.get('id') + return (s == 1 or str(s) == '1') and (buy_status == 1 or str(buy_status) == '1'), detail_id + return False, None + except Exception: + return False, None + + def _check_config(self): + """ + @description 检查config配置是否需要更新,修复统计数量不显示问题 + @return None + """ + header_file = "{}/data/table_header_conf.json".format(public.get_panel_path()) + try: + if os.path.exists(header_file): + raw = public.readFile(header_file) + file_data = json.loads(raw) + if isinstance(file_data, dict): + updated = False + val = file_data.get("phpTableColumn", '') + if val: + try: + cols = json.loads(val) or [] + has_day = False + for c in cols: + if c.get("label") == "daily flow": + has_day = True + if c.get("isCustom") is not True: + c["isCustom"] = True + if c.get("isLtd") is not True: + c["isLtd"] = True + break + if not has_day: + cols.append({"label": "daily flow", "width": 80, "isCustom": True, "isLtd": True}) + file_data["phpTableColumn"] = json.dumps(cols) + updated = True + except Exception: + pass + if updated: + public.writeFile(header_file, json.dumps(file_data)) + except Exception: + pass \ No newline at end of file diff --git a/class_v2/projectModelV2/nodejsModel.py b/class_v2/projectModelV2/nodejsModel.py index e03de0a5..a0e22f8c 100644 --- a/class_v2/projectModelV2/nodejsModel.py +++ b/class_v2/projectModelV2/nodejsModel.py @@ -1023,6 +1023,14 @@ export PATH if get.domain+":80" in project_find['project_config']['domains']: project_find['project_config']['domains'].remove(get.domain + ":80") + # 处理端口残留 + domains = [] + for domain in project_find['project_config']['domains']: + if get.domain == domain.split(':')[0]: + continue + domains.append(domain) + project_find['project_config']['domains'] = domains + public.M('sites').where('id=?',(project_id,)).save('project_config',json.dumps(project_find['project_config'])) public.WriteLog(self._log_name,'From project: [{}], delete domain name [{}]'.format(get.project_name,get.domain)) self.set_config(get.project_name) @@ -1088,8 +1096,7 @@ export PATH if not project_find['project_config']['bind_extranet']: return False if not project_find['project_config']['domains']: return False self.set_nginx_config(project_find) - if not public.get_multi_webservice_status(): - self.set_apache_config(project_find) + self.set_apache_config(project_find) public.serviceReload() return True @@ -1340,6 +1347,13 @@ export PATH #HTTP_TO_HTTPS_END''' + # 多服务下切换端口 + if public.get_multi_webservice_status() and str(p) in ['80','443']: + if str(p) == '80': + p = 8288 + else: + p = 8290 + # 生成vhost主体配置 apache_config_body += config_body.format( site_path = project_find['path'], @@ -1355,7 +1369,7 @@ export PATH apache_config_body += "\n" # 添加端口到主配置文件 - if not p in [80]: + if not p in [80] and not public.get_multi_webservice_status(): s.apacheAddPort(p) # 写.htaccess @@ -1364,12 +1378,6 @@ export PATH # 写配置文件 public.writeFile(config_file,apache_config_body) - - # 多服务下使apache配置文件失效 - if public.get_multi_webservice_status(): - if os.path.exists(config_file): - shutil.move(config_file, config_file + '.barduo') - return True diff --git a/class_v2/projectModelV2/webbasicscanningModel.py b/class_v2/projectModelV2/webbasicscanningModel.py new file mode 100644 index 00000000..6556a291 --- /dev/null +++ b/class_v2/projectModelV2/webbasicscanningModel.py @@ -0,0 +1,1664 @@ +#!/usr/bin/python +# coding: utf-8 +# Date 2025/11/04 +# ------------------------------------------------------------------- +# 宝塔Linux面板 +# ------------------------------------------------------------------- +# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved. +# ------------------------------------------------------------------- +# Author: wpl +# 网站安全基础扫描模块 +# ------------------------------------------------------------------- +import re +import sys, json, os, public, hashlib, requests, time +import urllib.parse +from BTPanel import cache +import PluginLoader + + +class main: + __count = 0 + __shell = "/www/server/panel/data/webbasic_shell_check.txt" + session = requests.Session() + send_time = "" # 记录上一次发送ws时间 + web_name = "" # 当前检测的网站名 + scan_type = "basicvulscan" + web_scan_num = 0 + bar = 0 + # 新增:全局进度属性,按站点×模块综合计算 + _total_units = 0 + _done_units = 0 + _module_count_per_site = 0 + # 新增:标记是否处于全站扫描上下文,避免跨次扫描累加 + _in_all_scan = False + # 添加计数器 + risk_count = { + "warning": 0, # 告警(0) + "low": 0, # 低危 (1) + "middle": 0, # 中危 (2) + "high": 0 # 高危 (3) + } + web_count_list = [] + + def GetWebInfo(self, get): + ''' + @name 获取网站信息 + @author wpl<2025-11-4> + @param name 网站名称 + @return dict 网站信息 + ''' + webinfo = public.M('sites').where('project_type=? and name=?', ('PHP', get.name)).count() + if not webinfo: return False + webinfo = public.M('sites').where('project_type=? and name=?', ('PHP', get.name)).select() + return webinfo[0] + + def GetAllSite(self, get): + ''' + @name 获取所有网站信息 + @author wpl<2025-11-4> + @return list 所有网站信息 + ''' + webinfo = public.M('sites').where('project_type=?', ('PHP',)).select() + return webinfo + + def WebConfigSecurity(self, webinfo, get): + ''' + @name 网站配置安全性检测 + @author wpl<2025-11-4> + @param webinfo 网站信息 + @param get 请求参数 + @return list 检测结果 + ''' + if '_ws' in get: + get._ws.send(public.getJson({ + "end": False, "ws_callback": get.ws_callback, + "info": "Scanning website configuration security for %s" % get.name, + "type": "webscan", + "bar": self.bar + })) + + result = [] + + # Nginx版本泄露检测 + if public.get_webserver() == 'nginx': + nginx_path = '/www/server/nginx/conf/nginx.conf' + if os.path.exists(nginx_path): + nginx_info = public.ReadFile(nginx_path) + if not 'server_tokens off' in nginx_info: + result.append({ + "name": public.lang("{} website has Nginx version disclosure",get.name) , + "info": public.lang("Nginx version disclosure may expose sensitive server information and pose security risks"), + "repair": public.lang("Open the nginx.conf file for {} website and add 'server_tokens off;' inside the http { } block;", get.name), + "dangerous": 1, + "type": "webscan" + }) + + # PHP版本泄露检测 + phpversion = public.get_site_php_version(get.name) + phpini = '/www/server/php/%s/etc/php.ini' % phpversion + if os.path.exists(phpini): + php_info = public.ReadFile(phpini) + if not 'expose_php = Off' in php_info: + result.append({ + "name": public.lang("{} website has PHP version disclosure",get.name), + "info": public.lang("PHP version disclosure may expose sensitive server information and pose security risks"), + "repair": public.lang("Open the php.ini file for {} website and set 'expose_php = Off'",get.name), + "dangerous": 1, "type": "webscan" + }) + + # 防火墙检测 + # 跳过ols + if public.get_webserver() != 'openlitespeed': + if not os.path.exists("/www/server/btwaf/"): + result.append({ + "name": public.lang("Firewall not installed for {} website",get.name), + "info": public.lang("Not having a firewall installed may expose sensitive server information and pose security risks"), + "repair": public.lang("Install or enable the Nginx WAF"), + "dangerous": 0, "type": "webscan" + }) + + # 防跨站攻击检测 + web_infos = public.M('sites').where("name=?", (get.name, )).select() + for web in web_infos: + run_path = self.GetSiteRunPath(web["name"], web["path"]) + if not run_path: + continue + path = web["path"] + run_path + user_ini_file = path + '/.user.ini' + + if not os.path.exists(user_ini_file): + continue + user_ini_conf = public.readFile(user_ini_file) + if "open_basedir" not in user_ini_conf: + result.append({ + "name": public.lang("Cross-site attack protection not enabled for {} website",get.name), + "info": public.lang("Without cross-site attack protection, sensitive server data may be exposed via directory traversal"), + "repair": public.lang("Enable open_basedir protection in the website directory to prevent attackers from reading sensitive files across directories"), + "dangerous": 0, "type": "webscan" + }) + + # SSL证书安全性检测 + self.WebSSLSecurity(webinfo, get, result) + + if '_ws' in get: + get._ws.send(public.getJson({ + "end": False, "ws_callback": get.ws_callback, + "info": "Completed scanning website configuration security for %s" % get.name, + "type": "webscan", + "results": result, + "bar": self.bar + })) + + return result + + def _read_recent_logs(self, log_path, lines=10000): + """ + 读取最近N行日志并进行初步过滤 + @param log_path 日志文件路径 + @param lines 读取行数 + @return 过滤后的日志内容 + """ + try: + # 只读取状态码为200,301,302,403,404,500的请求,过滤掉静态资源请求 + cmd = f"tail -n {lines} '{log_path}' | grep -E ' (200|301|302|403|404|500) ' | grep -v -E '\\.(css|js|png|jpg|jpeg|gif|ico|woff|woff2|ttf|svg)( |\\?|$)'" + result = public.ExecShell(cmd)[0] + # 过滤掉空行 + result = [line for line in result.split('\n') if line.strip()] + return result + except Exception as e: + # 如果grep失败,直接读取原始日志 + cmd = f"tail -n {lines} '{log_path}'" + return public.ExecShell(cmd)[0] + + def _analyze_attack_distribution(self, log_content, security_patterns): + """ + 分析各类攻击的数量和分布 + @param log_content 日志内容 + @param security_patterns 安全检测规则 + @return 攻击统计信息 + """ + attack_stats = {} + + for attack_type, pattern_info in security_patterns.items(): + attack_stats[attack_type] = { + 'count': 0, + 'sample_ips': [], + 'sample_urls': [] + } + + for line in log_content.split('\n'): + if line.strip(): + ip = None + req_url = None + ref_url = None + try: + parts = line.split() + if parts: + ip = parts[0] + except: + pass + try: + m_req = re.search(r"\"?(GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH)\s+(.*?)\s+HTTP\/[0-9.]+\"?", line) + if m_req: + req_url = m_req.group(2) + except: + pass + try: + qs = re.findall(r'"([^\"]*)"', line) + if len(qs) >= 2: + ref_full = qs[1] + if ref_full and ref_full != '-': + try: + parsed = urllib.parse.urlparse(ref_full) + ref_url = (parsed.path or '/') + (('?' + parsed.query) if parsed.query else '') + except: + ref_url = ref_full + except: + pass + def field_matches(s): + if not s: + return False + s_low = s.lower() + try: + dec = urllib.parse.unquote(s_low) + except: + dec = s_low + for p in pattern_info['patterns']: + pl = p.lower() + if pl in s_low or (dec and pl in dec): + return True + return False + matched = False + if field_matches(req_url): + matched = True + url = req_url + elif field_matches(ref_url): + matched = True + url = ref_url + if matched: + attack_stats[attack_type]['count'] += 1 + try: + if ip and ip not in attack_stats[attack_type]['sample_ips']: + attack_stats[attack_type]['sample_ips'].append(ip) + except: + pass + try: + if url and url not in attack_stats[attack_type]['sample_urls']: + attack_stats[attack_type]['sample_urls'].append(url) + except: + pass + + return attack_stats + + def _analyze_ip_frequency(self, log_content): + """ + 分析IP访问频率,返回访问次数统计 + @param log_content 日志内容 + @return IP访问频率统计 + """ + ip_stats = {} + + for line in log_content.split('\n'): + if line.strip(): + try: + ip = line.split()[0] + ip_stats[ip] = ip_stats.get(ip, 0) + 1 + except: + continue + + # 返回访问次数排序的结果 + return sorted(ip_stats.items(), key=lambda x: x[1], reverse=True) + + def _analyze_url_attacks(self, log_content, security_patterns): + """ + 分析被攻击的URL统计 + @param log_content 日志内容 + @param security_patterns 安全检测规则 + @return 被攻击URL统计 + """ + url_attacks = {} + + # 收集所有攻击模式 + all_patterns = [] + for pattern_info in security_patterns.values(): + all_patterns.extend(pattern_info['patterns']) + + for line in log_content.split('\n'): + if line.strip(): + try: + parts = line.split() + if len(parts) >= 7: + url = parts[6] + line_lower = line.lower() + + # 检查是否包含攻击模式 + for pattern in all_patterns: + if pattern.lower() in line_lower: + url_attacks[url] = url_attacks.get(url, 0) + 1 + break + except: + continue + + # 返回攻击次数排序的结果 + return sorted(url_attacks.items(), key=lambda x: x[1], reverse=True) + + def WebSSLSecurity(self, webinfo, get, result): + ''' + @name SSL证书安全性检测 + @author wpl<2025-11-4> + @param webinfo 网站信息 + @param get 请求参数 + @param result 结果列表 + ''' + if public.get_webserver() == 'nginx': + conf_file = '/www/server/panel/vhost/nginx/{}.conf'.format(webinfo['name']) + if os.path.exists(conf_file): + conf_info = public.ReadFile(conf_file) + keyText = 'ssl_certificate' + + if conf_info.find(keyText) == -1: + result.append({ + "name": public.lang("{} website has SSL disabled",webinfo['name']), + "info": public.lang("SSL is not deployed may expose sensitive server information and pose security risks"), + "repair": public.lang("Deploy SSL in Website → SSL"), + "dangerous": 0, + "type": "webscan" + }) + # 暂未实现 TLSv1 检测 + # if 'TLSv1 ' in conf_info: + # result.append({ + # "name": "%s website has insecure TLSv1 protocol enabled" % webinfo['name'], + # "info": "Enabling the insecure TLSv1 protocol may expose sensitive server information and pose security risks", + # "repair": "In Website Settings, go to Advanced Settings → TLS Settings and disable TLSv1", + # "dangerous": 2, + # "type": "webscan" + # }) + + def WebFileLeakDetection(self, webinfo, get): + ''' + @name 文件泄露检测 + @author wpl<2025-11-4> + @param webinfo 网站信息 + @param get 请求参数 + @return list 检测结果 + ''' + if '_ws' in get: + get._ws.send(public.getJson({ + "end": False, "ws_callback": get.ws_callback, + "info": "Scanning %s for file leaks" % get.name, + "type": "fileleak", + "bar": self.bar + })) + + result = [] + site_path = webinfo['path'] + + # 检测敏感文件 + sensitive_files = ['.env', '.git', '.svn', '.DS_Store'] + + for filename in sensitive_files: + file_path = os.path.join(site_path, filename) + if os.path.exists(file_path): + result.append({ + "name": public.lang("Sensitive file detected on {} website",webinfo['name']), + "info": public.lang("Sensitive file 【{}】exposed — may leak server-sensitive information and pose security risks",filename), + "repair": public.lang("Delete or move the sensitive file outside the website root directory"), + "dangerous": 2, + "type": "fileleak", + "file_path": file_path + }) + + # 检测SQL文件 只检测网站根目录下的SQL文件 + # 只检测网站根目录下的SQL文件 + try: + files = os.listdir(site_path) + for file in files: + if file.endswith('.sql'): + file_path = os.path.join(site_path, file) + result.append({ + "name": public.lang("SQL database file detected on {} website",webinfo['name']), + "info": public.lang("SQL database file 【{}】exposed — may leak server-sensitive information and pose security risks",file), + "repair": public.lang("Delete or move the SQL file outside the website root directory"), + "dangerous": 3, + "type": "fileleak", + "file_path": file_path + }) + except Exception as e: + # 如果无法访问目录,记录错误但不中断扫描 + pass + + if '_ws' in get: + get._ws.send(public.getJson({ + "end": False, "ws_callback": get.ws_callback, + "info": "File leak scan for %s completed, found %d issues" % (get.name, len(result)), + "results": result, + "type": "fileleak", + "bar": self.bar + })) + + return result + + def WebRootTrojanDetection(self, webinfo, get): + ''' + @name 木马检测 + @author wpl<2025-11-5> + @param webinfo 网站信息 + @param get 请求参数 + @return list 检测结果 + ''' + if '_ws' in get: + get._ws.send(public.getJson({ + "end": False, "ws_callback": get.ws_callback, + "info": "Scanning %s root directory for trojan files" % get.name, + "type": "webshell", + "bar": self.bar + })) + + result = [] + self.__count = 0 + + # 仅列出网站根目录中的文件 + base_path = webinfo.get('path') if isinstance(webinfo, dict) else None + if not base_path or not os.path.isdir(base_path): + return result + try: + entries = os.listdir(base_path) + except Exception: + entries = [] + + file_list = [] + for name in entries: + fp = os.path.join(base_path, name) + # 仅扫描php文件 + if os.path.isfile(fp) and name.lower().endswith('.php'): + file_list.append(fp) + + if not file_list: + if '_ws' in get: + get._ws.send(public.getJson({ + "end": False, "ws_callback": get.ws_callback, + "info": "No files to scan found in %s root directory" % get.name, + "type": "webshell", + "bar": self.bar + })) + return result + + self.__count = len(file_list) + # 本地正则匹配检测 + rules = [ + "@\\$\\_=", "eval\\(('|\")\\?>", "php_valueauto_append_file", "eval\\(gzinflate\\(", + "eval\\(str_rot13\\(", + "base64\\_decode\\(\\$\\_", "eval\\(gzuncompress\\(", "phpjm\\.net", "assert\\(('|\"|\\s*)\\$", + "require_once\\(('|\"|\\s*)\\$_(POST|GET|REQUEST|COOKIE)", "gzinflate\\(base64_decode\\(", + "echo\\(file_get_contents\\(('|\")\\$_(POST|GET|REQUEST|COOKIE)", "c99shell", "cmd\\.php", + "call_user_func\\(('|\"|\\s*)\\$_(POST|GET|REQUEST|COOKIE)", "str_rot13", "webshell", "EgY_SpIdEr", + "tools88\\.com", "SECFORCE", "eval\\(base64_decode\\(", + "include\\(('|\"|\\s*)\\$_(POST|GET|REQUEST|COOKIE)", + "array_map[\\s]{0,20}\\(.{1,5}(eval|assert|ass\\\\x65rt).{1,20}\\$_(GET|POST|REQUEST).{0,15}", + "call_user_func[\\s]{0,25}\\(.{0,25}\\$_(GET|POST|REQUEST).{0,15}", + "gzdeflate|gzcompress|gzencode", + "require_once\\(('|\"|\\s*)\\$_(POST|GET|REQUEST|COOKIE)", + "include_once\\(('|\"|\\s*)\\$_(POST|GET|REQUEST|COOKIE)", + "call_user_func\\((\"|')assert(\"|')", + "php_valueauto_prepend_file", "SetHandlerapplication\\/x-httpd-php", + "fputs\\(fopen\\((.+),('|'\")w('|'\")\\),('|'\"|\\s*)\\$_(POST|GET|REQUEST|COOKIE)\\[", + "file_put_contents\\(('|'\"|\\s*)\\$_(POST|GET|REQUEST|COOKIE)\\[([^\\]]+)\\],('|'\"|\\s*)\\$_(POST|GET|REQUEST|COOKIE)", + "\\$_(POST|GET|REQUEST|COOKIE)\\[([^\\]]+)\\]\\(('|'\"|\\s*)\\$_(POST|GET|REQUEST|COOKIE)\\[", + "require\\(('|'\"|\\s*)\\$_(POST|GET|REQUEST|COOKIE)", "assert\\(('|'\"|\\s*)\\$_(POST|GET|REQUEST|COOKIE)", + "eval\\(('|'\"|\\s*)\\$_(POST|GET|REQUEST|COOKIE)", "base64_decode\\(gzuncompress\\(", + "gzuncompress\\(base64_decode\\(", "ies\",gzuncompress\\(\\$", "eval\\(gzdecode\\(", + "preg_replace\\(\"\\/\\.\\*\\/e\"", "Scanners", "phpspy", "cha88\\.cn", + "chr\\((\\d)+\\)\\.chr\\((\\d)+\\)", + "\\$\\_=\\$\\_", "\\$(\\w)+\\(\\${", "\\(array\\)\\$_(POST|GET|REQUEST|COOKIE)", + "\\$(\\w)+\\(\"\\/(\\S)+\\/e", + "\"e\"\\.\"v\"\\.\"a\"\\.\"l\"", "\"e\"\\.\"v\"\\.\"a\"\\.\"l\"", "'e'\\.'v'\\.'a'\\.'l'", + "@preg\\_replace\\((\")*\\/(\\S)*\\/e(\")*,\\$_POST\\[\\S*\\]", "\\${'\\_'", "@\\$\\_\\(\\$\\_", + "\\$\\_=\"\"" + ] + patterns = [re.compile(p, re.IGNORECASE) for p in rules] + + shell_files = [] + for fp in file_list: + try: + with open(fp, 'rb') as f: + data = f.read() + try: + text = data.decode('utf-8', errors='ignore') + except Exception: + text = data.decode('latin-1', errors='ignore') + for pat in patterns: + if pat.search(text): + shell_files.append(fp) + break + except Exception: + continue + + for shell_file in shell_files: + result.append({ + "name": public.lang("Trojan file detected in {} website root directory",webinfo.get('name', get.name)), + "info": public.lang("Trojan file 【{}】detected — may expose sensitive server information and pose security risks",shell_file), + "repair": public.lang("Delete the trojan file or perform a security audit"), + "dangerous": 3, "type": "webshell", + "file_path": shell_file + }) + + if '_ws' in get: + get._ws.send(public.getJson({ + "end": False, "ws_callback": get.ws_callback, + "info": "Trojan scan for %s root directory completed, found %d trojans" % (get.name, len(result)), + "results": result, + "type": "webshell", + "bar": self.bar + })) + + return result + + + def WebBackupFileDetection(self, webinfo, get): + ''' + @name 备份文件检测 + @author wpl<2025-11-4> + @param webinfo 网站信息 + @param get 请求参数 + @return list 检测结果 + ''' + if '_ws' in get: + get._ws.send(public.getJson({ + "end": False, "ws_callback": get.ws_callback, + "info": "Scanning %s for backup files" % get.name, + "type": "backup", + "bar": self.bar + })) + + result = [] + site_path = webinfo['path'] + + # 备份文件扩展名 + backup_extensions = ['.bak', '.backup', '.zip', '.rar', '.tar', '.gz', '.7z'] + + # 只扫描站点根目录是否存在备份文件(不遍历子目录) + if os.path.exists(site_path): + try: + files = os.listdir(site_path) + for file in files: + file_path = os.path.join(site_path, file) + # 只检查文件,跳过目录 + if os.path.isfile(file_path): + file_lower = file.lower() + for ext in backup_extensions: + if file_lower.endswith(ext): + result.append({ + "name": public.lang("Backup file detected on {} website", webinfo['name']), + "info": public.lang("Backup file 【{}】exposed — may leak sensitive server information and pose security risks",file), + "repair": public.lang("Delete the backup file or move it to a secure location"), + "dangerous": 2, "type": "backup", + "file_path": file_path + }) + break + except Exception as e: + # 如果无法访问目录,记录错误但不中断扫描 + pass + + if '_ws' in get: + get._ws.send(public.getJson({ + "end": False, "ws_callback": get.ws_callback, + "info": "Backup file scan for %s completed, found %d backup files" % (get.name, len(result)), + "results": result, + "type": "backup", + "bar": self.bar + })) + + return result + + def WebWeakPasswordDetection(self, webinfo, get): + ''' + @name 弱口令检测(数据库与FTP) + @author wpl<2025-11-4> + @param webinfo 网站信息 + @param get 请求参数 + @return list 检测结果 + ''' + if '_ws' in get: + get._ws.send(public.getJson({ + "end": False, "ws_callback": get.ws_callback, + "info": "Scanning %s for weak passwords" % get.name, + "type": "weakpass", + "bar": self.bar + })) + + result = [] + + # 读取弱口令字典 + weekpassfile = "/www/server/panel/config/weak_pass.txt" + pass_list = [] + if os.path.exists(weekpassfile): + try: + pass_info = public.ReadFile(weekpassfile) + pass_list = [p.strip() for p in pass_info.split('\n') if p.strip()] + except: + pass + + # 获取站点ID + web_id = None + try: + if isinstance(webinfo, dict): + web_id = webinfo.get('id') + + except: + web_id = None + + # 数据库弱口令检测 + if pass_list and web_id: + try: + database = public.M('databases').where("pid=?", (web_id,)).select() + if isinstance(database, list): + for dbinfo in database: + pwd = dbinfo.get('password') + if not pwd: + continue + if pwd in pass_list: + dbname = dbinfo.get('name', '') + # 密码脱敏 + if hasattr(self, 'short_passwd'): + masked = self.short_passwd(pwd) + else: + plen = len(pwd) + masked = (pwd[:2] + "**" + pwd[-2:]) if plen > 4 else ((pwd[:1] + "****" + pwd[-1]) if 1 < plen <= 4 else "******") + result.append({ + "name": public.lang("{} website database uses a weak password",webinfo.get('name', '')), + "info": public.lang("Website %s database 【{}】uses a weak password: {}",webinfo.get('name', ''), dbname, masked), + "repair": public.lang("It is recommended to change the database user password in the panel to prevent brute-force attacks and data theft"), + "dangerous": 1, "type": "weakpass" + }) + except: + pass + + # FTP弱口令检测 + if pass_list and web_id: + try: + ftps = public.M('ftps').where("pid=?", (web_id,)).select() + if isinstance(ftps, list): + for ftpinfo in ftps: + pwd = ftpinfo.get('password') + if not pwd: + continue + if pwd in pass_list: + ftpname = ftpinfo.get('name', '') + if hasattr(self, 'short_passwd'): + masked = self.short_passwd(pwd) + else: + plen = len(pwd) + masked = (pwd[:2] + "**" + pwd[-2:]) if plen > 4 else ((pwd[:1] + "****" + pwd[-1]) if 1 < plen <= 4 else "******") + result.append({ + "name": public.lang("{} website FTP account uses a weak password",webinfo.get('name', '')), + "info": public.lang("Website {} FTP account 【{}】uses a weak password: {}",webinfo.get('name', ''), ftpname, masked), + "repair": public.lang("Change the weak password immediately to prevent attackers from brute-forcing FTP credentials and tampering with website files"), + "dangerous": 2, "type": "weakpass" + }) + except: + pass + + if '_ws' in get: + get._ws.send(public.getJson({ + "end": False, "ws_callback": get.ws_callback, + "info": "Weak password scan for %s completed, found %d issues" % (get.name, len(result)), + "results": result, + "type": "weakpass", + "bar": self.bar + })) + + return result + + def WebLogDetection(self, webinfo, get): + ''' + @name 网站日志检测 + @author wpl<2025-11-4> + @param webinfo 网站信息 + @param get 请求参数 + @return list 检测结果 + ''' + if '_ws' in get: + get._ws.send(public.getJson({ + "end": False, "ws_callback": get.ws_callback, + "info": "Scanning %s website logs" % get.name, + "type": "weblog", + "bar": self.bar + })) + + result = [] + + # 安全检测规则定义 + security_patterns = { + 'xss': { + 'patterns': ['javascript:', 'data:', 'alert(', 'onerror=', 'onload=', 'onclick=', + '%3Cscript', '%3Csvg/', '%3Ciframe/', '