From c86a5c246644a51065fed244d58da07c68a2ff72 Mon Sep 17 00:00:00 2001 From: jose <627622230@qq.com> Date: Wed, 14 Aug 2019 15:32:00 +0800 Subject: [PATCH 01/21] update 6.2.0 --- BTPanel/__init__.py | 147 ++-- BTPanel/static/css/site.css | 395 ++++++++- BTPanel/static/img/iconfont_code.png | Bin 0 -> 364 bytes BTPanel/static/js/config.js | 21 +- BTPanel/static/js/files.js | 6 +- BTPanel/static/js/index.js | 19 +- BTPanel/static/js/public.js | 844 +++++++++++++++++++- BTPanel/static/js/site.js | 2 +- BTPanel/static/js/soft.js | 2 +- BTPanel/templates/default/config.html | 7 + BTPanel/templates/default/files.html | 110 +++ BTPanel/templates/default/firewall_new.html | 351 ++++++++ class/common.py | 53 +- class/config.py | 15 +- class/crontab.py | 2 +- class/database.py | 8 +- class/files.py | 48 +- class/firewall_new.py | 11 + class/firewalls.py | 3 +- class/jobs.py | 37 +- class/panelAuth.py | 28 +- class/panelLets.py | 6 +- class/panelPlugin.py | 8 +- class/panelSSL.py | 12 +- class/panelSite.py | 38 +- class/panelTask.py | 8 +- class/public.py | 113 ++- class/system.py | 5 +- script/logsBackup | 11 +- script/logsBackup.py | 11 +- task.py | 24 +- 31 files changed, 2138 insertions(+), 207 deletions(-) create mode 100644 BTPanel/static/img/iconfont_code.png create mode 100644 BTPanel/templates/default/firewall_new.html diff --git a/BTPanel/__init__.py b/BTPanel/__init__.py index af8c98db..dde1b6e3 100644 --- a/BTPanel/__init__.py +++ b/BTPanel/__init__.py @@ -64,7 +64,7 @@ app.config['SESSION_USE_SIGNER'] = True app.config['SESSION_KEY_PREFIX'] = 'BT_:' app.config['SESSION_COOKIE_NAME'] = "BT_PANEL_6" -app.config['PERMANENT_SESSION_LIFETIME'] = 86400 * 7 +app.config['PERMANENT_SESSION_LIFETIME'] = 86400 Session(app) if s_sqlite: sdb.create_all() @@ -81,7 +81,7 @@ admin_path_file = 'data/admin_path.pl' admin_path = '/' if os.path.exists(admin_path_file): admin_path = public.readFile(admin_path_file).strip() -admin_path_checks = ['/','/san','/monitor','/abnormal','/close','/task','/login','/config','/site','/sites','ftp','/public','/database','/data','/download_file','/control','/crontab','/firewall','/files','config','/soft','/ajax','/system','/panel_data','/code','/ssl','/plugin','/wxapp','/hook','/safe','/yield','/downloadApi','/pluginApi','/auth','/download','/cloud','/webssh','/connect_event','/panel'] +admin_path_checks = ['/','/san','/bak','/monitor','/abnormal','/close','/task','/login','/config','/site','/sites','ftp','/public','/database','/data','/download_file','/control','/crontab','/firewall','/files','config','/soft','/ajax','/system','/panel_data','/code','/ssl','/plugin','/wxapp','/hook','/safe','/yield','/downloadApi','/pluginApi','/auth','/download','/cloud','/webssh','/connect_event','/panel'] if admin_path in admin_path_checks: admin_path = '/bt' @app.route('/service_status',methods = method_get) @@ -90,7 +90,17 @@ def service_status(): @app.before_request -def basic_auth_check(): +def request_check(): + if not request.path in ['/safe','/hook','/public']: + ip_check = public.check_ip_panel() + if ip_check: return ip_check + domain_check = public.check_domain_panel() + if domain_check: return domain_check + if public.is_local(): + not_networks = ['uninstall_plugin','install_plugin','UpdatePanel'] + if request.args.get('action') in not_networks: + return public.returnJson(False,'This feature is not available in offline mode!'),json_header + if app.config['BASIC_AUTH_OPEN']: if request.path in ['/public','/download']: return; auth = request.authorization @@ -101,10 +111,16 @@ def basic_auth_check(): return send_authenticated() +@app.teardown_request +def request_end(reques = None): + not_acts = ['GetTaskSpeed','GetNetWork','check_pay_status','get_re_order_status','get_order_stat'] + key = request.args.get('action') + if not key in not_acts and request.full_path.find('/static/') == -1: public.write_request_log() + def send_authenticated(): global local_ip if not local_ip: local_ip = public.GetLocalIp() - return Response('', 401,{'WWW-Authenticate': 'Basic realm="%s"' % local_ip}) + return Response('', 401,{'WWW-Authenticate': 'Basic realm="%s"' % local_ip.strip()}) @app.route('/',methods=method_all) def home(): @@ -117,6 +133,7 @@ def home(): data['databaseCount'] = public.M('databases').count() data['lan'] = public.GetLan('index') data['724'] = public.format_date("%m%d") == '0724' + public.auto_backup_panel() return render_template( 'index.html',data = data) @app.route('/close',methods=method_get) @@ -303,14 +320,14 @@ def firewall(pdata = None): defs = ('GetList','AddDropAddress','DelDropAddress','FirewallReload','SetFirewallStatus','AddAcceptPort','DelAcceptPort','SetSshStatus','SetPing','SetSshPort','GetSshInfo') return publicObject(firewallObject,defs,None,pdata); -#@app.route('/firewall_new',methods=method_all) +@app.route('/firewall_new',methods=method_all) def firewall_new(pdata = None): comReturn = comm.local() if comReturn: return comReturn if request.method == method_get[0] and not pdata: data = {} data['lan'] = public.GetLan('firewall') - return render_template( 'firewall.html',data=data) + return render_template( 'firewall_new.html',data=data) import firewall_new firewallObject = firewall_new.firewalls() defs = ('GetList','AddDropAddress','DelDropAddress','FirewallReload','SetFirewallStatus','AddAcceptPort','DelAcceptPort','SetSshStatus','SetPing','SetSshPort','GetSshInfo','AddSpecifiesIp','DelSpecifiesIp') @@ -337,6 +354,18 @@ def san_baseline(pdata=None): return publicObject(dataObject, defs, None, pdata) +@app.route('/bak', methods=method_all) +def backup_bak(pdata=None): + comReturn = comm.local() + if comReturn: return comReturn + import backup_bak + dataObject = backup_bak.backup_bak() + defs = ('get_sites', 'get_databases', 'backup_database', 'backup_site', 'backup_path', 'get_database_progress', + 'get_site_progress', 'down','get_down_progress','download_path','backup_site_all','get_all_site_progress','backup_date_all','get_all_date_progress') + return publicObject(dataObject, defs, None, pdata) + + + @app.route('/abnormal', methods=method_all) def abnormal(pdata=None): comReturn = comm.local() @@ -357,7 +386,7 @@ def files(pdata = None): import files filesObject = files.files() defs = ('CheckExistsFiles','GetExecLog','GetSearch','ExecShell','GetExecShellMsg','UploadFile','GetDir','CreateFile','CreateDir','DeleteDir','DeleteFile', - 'CopyFile','CopyDir','MvFile','GetFileBody','SaveFileBody','Zip','UnZip','SearchFiles','upload', + 'CopyFile','CopyDir','MvFile','GetFileBody','SaveFileBody','Zip','UnZip','SearchFiles','upload','read_history', 'GetFileAccess','SetFileAccess','GetDirSize','SetBatchData','BatchPaste','install_rar','get_path_size', 'DownloadFile','GetTaskSpeed','CloseLogs','InstallSoft','UninstallSoft','SaveTmpFile','GetTmpFile', 'RemoveTask','ActionTask','Re_Recycle_bin','Get_Recycle_bin','Del_Recycle_bin','Close_Recycle_bin','Recycle_bin') @@ -416,9 +445,11 @@ def config(pdata = None): if data['basic_auth']['open']: data['basic_auth']['value'] = public.GetMsg("OPEN") data['debug'] = '' if app.config['DEBUG']: data['debug'] = 'checked' + data['is_local'] = '' + if public.is_local(): data['is_local'] = 'checked' return render_template( 'config.html',data=data) import config - defs = ('get_cert_source','set_debug','get_panel_error_logs','clean_panel_error_logs','get_basic_auth_stat','set_basic_auth','get_cli_php_version','get_tmp_token','set_cli_php_version','DelOldSession', 'GetSessionCount', 'SetSessionConf', 'GetSessionConf','get_ipv6_listen','set_ipv6_status','GetApacheValue','SetApacheValue','GetNginxValue','SetNginxValue','get_token','set_token','set_admin_path','is_pro','get_php_config','get_config','SavePanelSSL','GetPanelSSL','GetPHPConf','SetPHPConf','GetPanelList','AddPanelInfo','SetPanelInfo','DelPanelInfo','ClickPanelInfo','SetPanelSSL','SetTemplates','Set502','setPassword','setUsername','setPanel','setPathInfo','setPHPMaxSize','getFpmConfig','setFpmConfig','setPHPMaxTime','syncDate','setPHPDisable','SetControl','ClosePanel','AutoUpdatePanel','SetPanelLock') + defs = ('get_cert_source','set_local','set_debug','get_panel_error_logs','clean_panel_error_logs','get_basic_auth_stat','set_basic_auth','get_cli_php_version','get_tmp_token','set_cli_php_version','DelOldSession', 'GetSessionCount', 'SetSessionConf', 'GetSessionConf','get_ipv6_listen','set_ipv6_status','GetApacheValue','SetApacheValue','GetNginxValue','SetNginxValue','get_token','set_token','set_admin_path','is_pro','get_php_config','get_config','SavePanelSSL','GetPanelSSL','GetPHPConf','SetPHPConf','GetPanelList','AddPanelInfo','SetPanelInfo','DelPanelInfo','ClickPanelInfo','SetPanelSSL','SetTemplates','Set502','setPassword','setUsername','setPanel','setPathInfo','setPHPMaxSize','getFpmConfig','setFpmConfig','setPHPMaxTime','syncDate','setPHPDisable','SetControl','ClosePanel','AutoUpdatePanel','SetPanelLock') return publicObject(config.config(),defs,None,pdata); @app.route('/ajax',methods=method_all) @@ -517,8 +548,16 @@ def plugin(pdata = None): def panel_public(): get = get_input(); get.client_ip = public.GetClientIp(); + if not hasattr(get,'name'): get.name = '' if not public.path_safe_check("%s/%s" % (get.name,get.fun)): return abort(404) - if get.fun in ['scan_login','login_qrcode','set_login','is_scan_ok','blind']: + if get.fun in ['scan_login', 'login_qrcode', 'set_login', 'is_scan_ok', 'blind','static']: + if get.fun == 'static': + if not public.path_safe_check("%s" % (get.filename)): return abort(404) + s_file = '/www/server/panel/BTPanel/static/' + get.filename + if s_file.find('..') != -1 or s_file.find('./') != -1: return abort(404) + if not os.path.exists(s_file): return abort(404) + return send_file(s_file, conditional=True, add_etags=True) + #检查是否验证过安全入口 if get.fun in ['login_qrcode','is_scan_ok']: global admin_check_auth,admin_path,route_path,admin_path_file @@ -555,28 +594,9 @@ def send_favicon(): @app.route('//',methods=method_all) @app.route('///',methods=method_all) def panel_other(name=None,fun = None,stype=None): - #插件公共动态路由 访问方式:http://面板地址:端口/插件名称/插件方法.响应类型(html|json) - ''' - 插件静态文件存储目录: static (允许多级目录,请不要将重要文件放在静态目录),访问方式:http://面板地址:端口/插件名称/static/相对于static的文件路径 如:http://demo.cn:8888/demo/static/js/test.js - 插件模板文件存储目录: templates (请不要在里面创建二级目录) 使用模板方法: http://demo.cn:8888/demo/get_logs.html - 插件模板文件格式:方法名.html (支持jinja2语法,但无法使用extends语句),请在被访问的方法中返回一个dict,它将被当作data参数传入到模板变量 - 响应JSON数据: 示例: http://demo.cn:8888/demo/get_logs.json 注意:此处会将插件方法中返回的数据自动转换成JSON字符串响应 - 直接响应: 示例:http://demo.cn:8888/demo/get_logs ,此时直接响应插件方法返回的数据,注意: 支持 int、float、string、list、redirect对象 - ''' - - #前置准备 - if not name: name = 'coll' if not public.path_safe_check("%s/%s/%s" % (name,fun,stype)): return abort(404) - - #是否响应面板默认静态文件 - if name == 'static': - s_file = '/www/server/panel/BTPanel/static/' + fun + '/' + stype - if s_file.find('..') != -1 or s_file.find('./') != -1: return abort(404) - if not os.path.exists(s_file): return abort(404) - return send_file(s_file,conditional=True,add_etags=True) - - if name.find('./') != -1 or not re.match("^[\w-]+$",name): return public.returnJson(False,public.GetMsg("REQUEST_ERR")),json_header + if name.find('./') != -1 or not re.match("^[\w-]+$",name): return abort(404) if not name: return public.returnJson(False,public.GetMsg("PLUGIN_INPUT_A")),json_header p_path = '/www/server/panel/plugin/' + name if not os.path.exists(p_path): return abort(404) @@ -584,10 +604,12 @@ def panel_other(name=None,fun = None,stype=None): #是否响插件应静态文件 if fun == 'static': - if stype.find('./') != -1 or not os.path.exists(p_path + '/static'): return public.returnJson(False,public.GetMsg("REQUEST_ERR")),json_header + if stype.find('./') != -1 or not os.path.exists(p_path + '/static'): return abort(404) s_file = p_path + '/static/' + stype if s_file.find('..') != -1: return abort(404) - if not os.path.exists(s_file): return public.returnJson(False,'The specified file does not exist ['+stype+']'),json_header + if not re.match("^[\w\./-]+$",s_file): return abort(404) + if not public.path_safe_check(s_file): return abort(404) + if not os.path.exists(s_file): return abort(404) return send_file(s_file,conditional=True,add_etags=True) #准备参数 @@ -603,26 +625,29 @@ def panel_other(name=None,fun = None,stype=None): #初始化插件对象 try: - sys.path.append(p_path); - plugin_main = __import__(name+'_main') - try: - if sys.version_info[0] == 2: - reload(plugin_main) - else: - from imp import reload - reload(plugin_main) - except:pass - plu = eval('plugin_main.' + name + '_main()') - if not hasattr(plu, fun): return public.returnJson(False, public.GetMsg("SPECIFY_METHOD")), json_header + is_php = os.path.exists(p_path + '/index.php') + if not is_php: + sys.path.append(p_path); + plugin_main = __import__(name+'_main') + try: + if sys.version_info[0] == 2: + reload(plugin_main) + else: + from imp import reload + reload(plugin_main) + except:pass + plu = eval('plugin_main.' + name + '_main()') + if not hasattr(plu,fun): return public.returnJson(False,'SPECIFY_METHOD'),json_header #检查访问权限 comReturn = comm.local() if comReturn: - if not hasattr(plu, '_check'): return public.returnJson(False, public.GetMsg("SPECIFY_PLUG_ERR")), json_header - checks = plu._check(args) - r_type = type(checks) - if r_type == Response: return checks - if r_type != bool or not checks: return public.getJson(checks),json_header + if not is_php: + if not hasattr(plu,'_check'): return public.returnJson(False,'SPECIFY_PLUG_ERR'),json_header + checks = plu._check(args) + r_type = type(checks) + if r_type == Response: return checks + if r_type != bool or not checks: return public.getJson(checks),json_header #初始化面板数据 comm.setSession() @@ -637,7 +662,14 @@ def panel_other(name=None,fun = None,stype=None): return public.returnMsg(False,public.to_string([24744, 26410, 36141, 20080, 91, 37, 115, 93, 25110, 25480, 26435, 24050, 21040, 26399, 33]) % (plugins.get_title_byname(args),)) #执行插件方法 - data = eval('plu.'+fun+'(args)') + if not is_php: + data = eval('plu.'+fun+'(args)') + else: + import panelPHP + args.s = fun + args.name = name + data = panelPHP.panelPHP(name).exec_php_script(args) + r_type = type(data) if r_type == Response: return data @@ -785,6 +817,7 @@ def download(): filename = request.args.get('filename') if not filename: return public.ReturnJson(False,"INIT_ARGS_ERR"),json_header if filename in ['alioss','qiniu','upyun','txcos','ftp']: return panel_cloud() + if filename in ['gdrive','gcloud_storage']: return "Google storage products do not currently support downloads" if not os.path.exists(filename): return public.ReturnJson(False,"FILE_NOT_EXISTS"),json_header mimetype = "application/octet-stream" extName = filename.split('.')[-1] @@ -943,11 +976,10 @@ def publicObject(toObject,defs,action=None,get = None): if get.path.find('..') != -1: return public.ReturnJson(False,public.GetMsg("UNSAFE_PATH")),json_header if get.path.find('->') != -1: get.path = get.path.split('->')[0].strip(); - not_acts = ['GetTaskSpeed','GetNetWork','check_pay_status','get_re_order_status','get_order_stat'] + for key in defs: if key == get.action: fun = 'toObject.'+key+'(get)' - if not key in not_acts: public.write_request_log() if hasattr(get,'html') or hasattr(get,'s_module'): return eval(fun) else: @@ -967,10 +999,11 @@ def check_login(http_token=None): def get_pd(): tmp = -1 - #tmp1 = cache.get(public.to_string([112, 108, 117, 103, 105, 110, 95, 115, 111, 102, 116, 95, 108, 105, 115, 116])) - #if not tmp1: - import panelPlugin - tmp1 = panelPlugin.panelPlugin().get_cloud_list() + try: + import panelPlugin + tmp1 = panelPlugin.panelPlugin().get_cloud_list() + except: + tmp1 = None if tmp1: tmp = tmp1[public.to_string([112,114,111])] else: @@ -1018,9 +1051,13 @@ def notfound(e): @app.errorhandler(500) def internalerror(e): + #if str(e).find('Permanent Redirect') != -1: return e errorStr = public.ReadFile('./BTPanel/templates/' + public.GetConfigValue('template') + '/error.html') try: - errorStr = errorStr.format(public.getMsg('PAGE_ERR_500_TITLE'),public.getMsg('PAGE_ERR_500_H1'),public.getMsg('PAGE_ERR_500_P1'),public.getMsg('NAME'),public.getMsg('PAGE_ERR_HELP')) + if not app.config['DEBUG']: + errorStr = errorStr.format(public.getMsg('PAGE_ERR_500_TITLE'),public.getMsg('PAGE_ERR_500_H1'),public.getMsg('PAGE_ERR_500_P1'),public.getMsg('NAME'),public.getMsg('PAGE_ERR_HELP')) + else: + errorStr = errorStr.format(public.getMsg('PAGE_ERR_500_TITLE'),str(e),'
'+public.get_error_info() + '
','The above debugging information is only displayed in developer mode','Version: ' + public.version()) except IndexError:pass return errorStr,500 diff --git a/BTPanel/static/css/site.css b/BTPanel/static/css/site.css index 7e26395b..9d061b40 100644 --- a/BTPanel/static/css/site.css +++ b/BTPanel/static/css/site.css @@ -1368,27 +1368,25 @@ html .menu .menu_exit:hover { left: 0 } -.left, -.right { - width: 100px; - height: 100px; - background: #ccc; - border-radius: 50%; - position: absolute; - top: 0; - left: 0 -} +/*.left,*/ +/*.right {*/ +/* width: 100px;*/ +/* height: 100px;*/ +/* background: #ccc;*/ +/* border-radius: 50%;*/ +/* position: absolute;*/ +/* top: 0;*/ +/* left: 0*/ +/*}*/ -.pie_right, -.right { +.pie_right { clip: rect(0, auto, auto, 50px); transition: transform 1s ease-in 0s; -webkit-transition: -webkit-transform 1s ease-in 0s; -moz-transition: -moz-transform 1s ease-in 0s } -.pie_left, -.left { +.pie_left { clip: rect(0, 50px, auto, 0); transition: transform .4s ease-in 1s; -webkit-transition: -webkit-transform .4s ease-in 1s; @@ -2308,6 +2306,11 @@ html .menu .menu_exit:hover { .setting-con .btn_tips{ display: inline-block; position: relative; + z-index: 10 +} + +.setting-con p .set-info { + margin-left: 20px } .set-submit { @@ -5223,3 +5226,367 @@ select[disabled]{ .ssl_cert_from>.line .line .info-r{ margin-bottom:0; } + +#ace_conter{ + background: #444; + height: 100%; + overflow: hidden; + /*background: url('/static/img/resize_corner.png') no-repeat;*/ +} +.ace_overall { + width: 100%; + display: inline-block; + position: relative; +} +.ace_catalogue { + display: none; + float: left; + width: 250px; + position: absolute; + z-index: 99; + height: 45px; + background: #333; +} +.ace_catalogue_sidebar { + display: none; + height: 100%; + width: 10px; + background: #444; + cursor: col-resize; + position: absolute; + left: 240px; + top: 90px; +} +.ace_catalogue_sidebar img { + position: absolute; + top: 50%; + width: 10px; + margin-top: -20px; +} +.ace_catalogue_title { + height: 45px; + line-height: 45px; + padding-left: 20px; + color: #fff; +} +.ace_conter_menu { + height: 40px; + position: relative; + background: #292929; + overflow: auto; +} +.ace_editor { + font-size: 15px; +} +.ace_editors { + position: absolute; + top: 40px; + right: 0; + bottom: 35px; + left: 0px; + font-size: 13px; + display: none; +} +.ace_editors.active { + display: block; +} +.ace_header { + position: relative; + height: 35px; + background: #565656; + /* transition: all 500ms; */ +} +.ace_header span { + float: left; + height: 35px; + line-height: 35px; + padding: 0 15px; + font-size: 13px; + text-align: center; + color: #fff; + border-right: 1px solid #4c4c4c; + cursor: pointer; +} +.ace_header span .glyphicon { + margin-right: 5px; + vertical-align: text-top; +} +.ace_header span:hover { + background: #2f2f2f; +} +.ace_header .pull-down{ + display: inline-block; + position: absolute; + z-index: 999; + right: 0; + height: 35px; + line-height: 35px; + padding: 0 14px; + font-size: 15px; + color: #fff; + background: #292929; + cursor: pointer; +} +.ace_editor_main { + position: relative; + background: #444; +} + +.ace_editor_main_storey { + position: absolute; + z-index: 999; + width: 100%; + height: 5px; + background: linear-gradient(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0)); +} +.ace_conter_menu .item { + display: inline-block; + float: left; + font-size: 15px; + max-width: 350px; + padding: 0 35px 0 10px; + height: 40px; + box-sizing: border-box; + position: relative; + color: #ececec; + cursor: pointer; + border-right: 1px solid #191919; +} +.ace_conter_menu .item:hover { + background: #313131; +} +.ace_conter_menu .item:hover .icon-tool { + display: block; +} +.ace_conter_menu .item.active { + color: #fff; + background: #404040; + border-bottom: 2px solid #20a53a; +} +.ace_conter_menu .item.active .icon-tool { + display: block; +} +.ace_conter_menu .item span { + display: inline-block; + line-height: 40px; + height: 40px; + margin: 0 10px 0 0; +} +.ace_conter_menu .item .icon_file { + color: #ff9800; + font-weight: 500; + margin-left: 10px; +} +.ace_conter_menu .item .icon-tool.fa-circle { + display: block; +} +.ace_conter_menu .item .icon-tool { + display: none; + position: absolute; + right: 15px; + top: 13px; + transition: all 1000ms; + font-size: 14px; +} +.ace_editor_add { + float: left; + height: 40px; + padding: 9px 15px; + font-size: 17px; + color: #ddd; + cursor: pointer; + transition: all 500ms; +} +.ace_editor_add:hover { + background-color: #505050 +} +/* 关闭视图-开始 */ +.ace-clear-form { + padding-top: 25px; +} +.ace-clear-form .line { + margin-left: 20px; +} +.clear-title { + font-size: 15px; + color: #333; +} +.clear-tips { + font-size: 13px; + color: #666; +} +.clear-tips, +.clear-title { + padding-left: 80px; +} +.clear-icon { + width: 30px; + height: 30px; + background-image: url(/static/layer/skin/default/icon.png); + background-position: 0 0; + position: absolute; + left: 30px; + top: 28px; +} +/* 取消按钮组 */ +.ace-clear-btn { + padding: 8px 20px 15px; + text-align: right; + position: absolute; + bottom: 0; + width: 100%; +} +.ace-clear-btn .btn-default:hover { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +/* 关闭视图-结束 */ +.ace_conter_toolbar { + height: 35px; + line-height: 35px; + bottom: 0; + text-align: right; + margin-right: 15px; + position: relative; + z-index: 999; + background: #444; + font-size: 0; + overflow: hidden; +} + +.ace_conter_toolbar .pull-left, +.ace_conter_toolbar .pull-right{ + height: 35px; +} +.ace_conter_toolbar .pull-left span , +.ace_conter_toolbar .pull-right span { + color: #fff; + display: inline-block; + border-right: 1px solid #505050; + padding: 0 15px; + cursor: pointer; + transition: all 500ms; + font-size: 13px; +} +.ace_conter_toolbar .pull-left span{ + border-right:0; + cursor: default; +} +.ace_conter_toolbar .pull-left span i, +.ace_conter_toolbar .pull-right span i { + font-style: normal; +} +.ace_conter_toolbar .pull-right span:hover { + background: #717171; +} +.ace_toolbar_menu { + position: absolute; + z-index: 9999; + top: 40px; + left: 50%; + margin-left: -200px; + background: #444444; + width: 400px; + padding: 15px 0; + box-shadow: 0px 0px 2px 0px #000; +} +.ace_toolbar_menu .menu-conter { + margin: 0 15px 15px; + position: relative; +} +.ace_toolbar_menu .menu-conter .fa { + display: none; + position: absolute; + right: 10px; + top: 7px; + font-size: 18px; + color: #fff; + cursor: pointer; +} +.ace_toolbar_menu input { + width: 100%; + height: 35px; + background: #444; + border: 1px solid #7d7d7d; + color: #fff; + padding: 0px 10px; + outline: none; +} +.ace_toolbar_menu input:focus{ + border: 1px solid #fff; +} + +.ace_toolbar_menu .menu-item ul { + overflow: auto; + max-height: 300px; +} +.ace_toolbar_menu .menu-item li { + padding: 0 20px; + height: 35px; + line-height: 35px; + color: #fff; + cursor: pointer; + transition: all 500ms; + position: relative; +} +.ace_toolbar_menu .menu-item li.active, +.ace_toolbar_menu .menu-item li.active:hover { + background: #666; +} +.ace_toolbar_menu .menu-item li:hover { + background: #505050; +} +.ace_toolbar_menu .icon-link { + margin-left: 15px; + color: #20a53a; +} +.ace_toolbar_menu .menu-item .icon { + position: absolute; + right: 25px; +} +.ace_toolbar_menu .menu-title { + padding: 0 0 5px 20px; + border-bottom: 1px solid #666666; + color: #9e9e9e; +} + +.make_transist { + -webkit-transition: all .2s ease-in-out; + -moz-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + -ms-transition: all .2s ease-in-out; + transition: all .2s ease-in-out +} +.ace_conter_search{ + display: none; +} +.helps_conter{ + padding: 25px; + overflow: hidden; +} +.helps_conter .helps_item{ + margin-bottom: 10px; + display: inline-block; + border-left: 3px solid #20a53a; + padding-left: 5px; + font-size: 15px; +} +.helps_conter .helps_box{ + margin-bottom: 20px; + font-size: 14px; + padding-left: 10px; + line-height: 25px; +} + + + +.helps_left{ + width: 50%; + float: left; + padding:15px; +} + +.cursor-row,.cursor-line{ + margin:5px; +} \ No newline at end of file diff --git a/BTPanel/static/img/iconfont_code.png b/BTPanel/static/img/iconfont_code.png new file mode 100644 index 0000000000000000000000000000000000000000..b77619b0e0065b8d1ccbe3e795cb17677567e3d8 GIT binary patch literal 364 zcmV-y0h9iTP)0q!7l03DDk7nZRnHi|4q@=SD< z_U&Ko-xbb$n_lX$=RKpD6oeS<{!ACSu4RgsU-2h!tpd^wr9eUGK zsD={Z!KXqEUqHnr1;6ZoQZiCI@e#0tDXFVa4O4_qgnL=Ctra3{TxbV81*;V_%}}1X z=B90k5841ju;$H*Ey_f4W_F1#RAOKUpdviUlA_lvyZjiSu1QedhV0U*R9>S>w(T;g zu7>5zqngs%r4I1^-vL(N1#RQnr3D_9X(b98yS0mC|H<`*+s4?IvNn--mhG`pLxr%H zjKnS1H=ZY#gKn7c!}pL~qL)MO"+lan.files.file_menu_unzip+" | "; } if(isText(fmp[0])){ - bodyZip = ""+lan.files.file_menu_edit+" | "; + bodyZip = ""+lan.files.file_menu_edit+" | "; } if(isImage(fmp[0])){ download = ""+lan.files.file_menu_img+" | "; @@ -895,7 +895,7 @@ function CreateFile(type, path) { }); if(rdata.status){ GetFiles($("#DirPathPlace input").val()); - OnlineEditFile(0,path + '/' + fileName); + openEditorView(0,path + '/' + fileName); } }); return; @@ -1571,7 +1571,7 @@ function RClick(type,path,name){ // options.items.push({ text: '播放', onclick: function () { GetPlay(path) } }, { text: lan.files.file_menu_down, onclick: function () { GetFileBytes(path) } }, { text: lan.files.file_menu_del, onclick: function () { DeleteFile(path) } }); //} else if(isText(type)){ - options.items.push({text: lan.files.file_menu_edit, onclick: function() {OnlineEditFile(0,path)}},{text: lan.files.file_menu_down, onclick: function() {GetFileBytes(path)}},{text: lan.files.file_menu_del, onclick: function() {DeleteFile(path)}}); + options.items.push({text: lan.files.file_menu_edit, onclick: function() {openEditorView(0,path)}},{text: lan.files.file_menu_down, onclick: function() {GetFileBytes(path)}},{text: lan.files.file_menu_del, onclick: function() {DeleteFile(path)}}); } else if(displayZip != -1){ options.items.push({text: lan.files.file_menu_unzip, onclick: function() {UnZip(path,displayZip)}},{text: lan.files.file_menu_down, onclick: function() {GetFileBytes(path)}},{text: lan.files.file_menu_del, onclick: function() {DeleteFile(path)}}); diff --git a/BTPanel/static/js/index.js b/BTPanel/static/js/index.js index de723b20..157b6538 100644 --- a/BTPanel/static/js/index.js +++ b/BTPanel/static/js/index.js @@ -135,6 +135,21 @@ var index = { layer.closeAll('tips'); }) + $('.cpubox').hover(function () { + var _this = $(this); + var d = _this.parents('ul').data('data').cpu; + var crs = ''; + var n1 = 0; + for (var i = 0; i < d[2].length; i++) { + n1++; + crs += 'CPU-' + i + ": " + d[2][i] + '%' + (n1 % 2 == 0?'
':' | '); + + } + layer.tips(d[3] +"
"+ crs, _this.find('.cicle'), { time: 0, tips: [1, '#999'] }); + }, function () { + layer.closeAll('tips'); + }); + $(".mem-release").hover(function () { $(this).addClass("shine_green"); if (!($(this).hasClass("mem-action"))) { @@ -446,7 +461,7 @@ var index = { closeBtn: 2, content: '
\
'+lan.index.last_version_now+'
\ -
'+lan.index.this_version+''+lan.index.bt_linux+ (rdata.msg.is_beta == 1 ? lan.index.test_version+' ' + rdata.msg.beta.version : lan.index.final_version+' ' + rdata.msg.version) + ' &n'+ lan.index.release_time + (rdata.msg.is_beta == 1 ? rdata.msg.beta.uptime : rdata.msg.uptime) + '
\ +
'+lan.index.this_version+''+lan.index.bt_linux+ (rdata.msg.is_beta == 1 ? lan.index.test_version+' ' + rdata.msg.beta.version : lan.index.final_version+' ' + rdata.msg.version) + ' &n'+ lan.index.release_time + (rdata.msg.is_beta == 1 ? rdata.msg.beta.uptime : rdata.msg.uptime) + '
\
\ \ \ @@ -484,7 +499,7 @@ var index = { content: '
\
'+lan.index.have_new_version+'
\
\ -
'+lan.index.last_version+''+lan.index.bt_linux+ (is_beta === 1 ? lan.index.test_version : lan.index.final_version) + rdata.version + '  '+lan.index.update_date + (result.msg.is_beta == 1 ? result.msg.beta.uptime : result.msg.uptime) + '
\ +
'+lan.index.last_version+''+lan.index.bt_linux+ (is_beta === 1 ? lan.index.test_version : lan.index.final_version) + rdata.version + '  '+lan.index.update_date + (result.msg.is_beta == 1 ? result.msg.beta.uptime : result.msg.uptime) + '
\
'+ rdata.updateMsg + '
\
\ + + + +{% endblock %} diff --git a/class/common.py b/class/common.py index abb7ef80..ba754e64 100644 --- a/class/common.py +++ b/class/common.py @@ -27,7 +27,7 @@ def init(self): if ua: ua = ua.lower(); if ua.find('spider') != -1 or ua.find('bot') != -1: return redirect('https://www.baidu.com'); - g.version = '6.1.5' + g.version = '6.2.0' g.title = public.GetConfigValue('title') g.uri = request.path session['version'] = g.version; @@ -42,36 +42,18 @@ class panelAdmin(panelSetup): def local(self): result = panelSetup().init() if result: return result - result = self.checkLimitIp() - if result: return result result = self.setSession(); if result: return result result = self.checkClose(); if result: return result result = self.checkWebType(); if result: return result - result = self.checkDomain(); + result = self.check_login(); if result: return result result = self.checkConfig(); - #self.checkSafe(); self.GetOS(); - - - #检查IP白名单 - def checkAddressWhite(self): - token = self.GetToken(); - if not token: return redirect('/login'); - if not request.remote_addr in token['address']: return redirect('/login'); - - - #检查IP限制 - def checkLimitIp(self): - if os.path.exists('data/limitip.conf'): - iplist = public.ReadFile('data/limitip.conf') - if iplist: - iplist = iplist.strip(); - if not request.remote_addr in iplist.split(','): return redirect('/login') - + + #设置基础Session def setSession(self): session['menus'] = sorted(json.loads(public.ReadFile('config/menu.json')),key=lambda x:x['sort']) @@ -114,8 +96,8 @@ def checkClose(self): if os.path.exists('data/close.pl'): return redirect('/close'); - #检查域名绑定 - def checkDomain(self): + #检查登录 + def check_login(self): try: api_check = True if not 'login' in session: @@ -123,10 +105,6 @@ def checkDomain(self): if api_check: return api_check else: if session['login'] == False: return redirect('/login') - tmp = public.GetHost() - domain = public.ReadFile('data/domain.conf') - if domain: - if(tmp.strip().lower() != domain.strip().lower()): return redirect('/login') if api_check: try: sess_out_path = 'data/session_timeout.pl' @@ -176,24 +154,7 @@ def checkConfig(self): session['config']['email'] = public.M('users').where("id=?",('1',)).getField('email'); if not 'address' in session: session['address'] = public.GetLocalIp() - - def checkSafe(self): - mods = ['/','/site','/ftp','/database','/plugin','/soft','/public']; - if not os.path.exists('/www/server/panel/data/userInfo.json'): - if 'vip' in session: del(session.vip); - if not request.path in mods: return True - if 'vip' in session: return True - - import panelAuth - data = panelAuth.panelAuth().get_order_status(None); - try: - if data['status'] == True: - session.vip = data - return True - return redirect('/vpro'); - except:pass - return False - + #获取操作系统类型 def GetOS(self): if not 'server_os' in session: diff --git a/class/config.py b/class/config.py index b3813924..1c5e5a1e 100644 --- a/class/config.py +++ b/class/config.py @@ -939,6 +939,19 @@ def set_debug(self,get): else: t_str = 'Open' public.writeFile(debug_path,'True') - public.WriteLog('TYPE_PANEL','%sDeveloper mode(debug)' % t_str) + public.WriteLog('TYPE_PANEL','%s Developer mode(debug)' % t_str) public.restart_panel() + return public.returnMsg(True,'Successful setup!') + + + #设置离线模式 + def set_local(self,get): + d_path = 'data/not_network.pl' + if os.path.exists(d_path): + t_str = 'Close' + os.remove(d_path) + else: + t_str = 'Open' + public.writeFile(d_path,'True') + public.WriteLog('TYPE_PANEL','%s Offline mode' % t_str) return public.returnMsg(True,'Successful setup!') \ No newline at end of file diff --git a/class/crontab.py b/class/crontab.py index 61a002f4..7c533164 100644 --- a/class/crontab.py +++ b/class/crontab.py @@ -363,7 +363,7 @@ def GetShell(self,param): shell=wheres[type] except: if type == 'toUrl': - shell = head + "curl -sS --connect-timeout 10 -m 60 '" + param['urladdress']+"'"; + shell = head + "curl -sS --connect-timeout 10 -m 3600 '" + param['urladdress']+"'"; else: shell=head+param['sBody'].replace("\r\n","\n") diff --git a/class/database.py b/class/database.py index 41405c79..9298c861 100644 --- a/class/database.py +++ b/class/database.py @@ -102,7 +102,7 @@ def IsSqlError(self,mysqlMsg): if "libmysqlclient" in mysqlMsg: result = self.rep_lnk() os.system("pip uninstall mysql-python -y") - os.system("pip install mysql-python") + os.system("pip install pymysql") public.writeFile('data/restart.pl','True') return public.returnMsg(False,"MYSQL_FIX_WITH_AUTO_ERR") return None @@ -299,7 +299,7 @@ def RecycleDB(self,filename): def SetupPassword(self,get): password = get['password'].strip() try: - rep = "^[\w@\.]+$" + rep = "^[\w@\.\?\-\_\>\<\~\!\#\$\%\^\&\*\(\)]+$" if not re.match(rep, password): return public.returnMsg(False, 'DATABASE_NAME_ERR_T') mysql_root = public.M('config').where("id=?",(1,)).getField('mysql_root') #修改MYSQL @@ -343,7 +343,7 @@ def ResDatabasePassword(self,get): id = get['id'] name = public.M('databases').where('id=?',(id,)).getField('name'); - rep = "^[\w@\.]+$" + rep = "^[\w@\.\?\-\_\>\<\~\!\#\$\%\^\&\*\(\)]+$" if len(re.search(rep, newpassword).groups()) > 0: return public.returnMsg(False, 'DATABASE_NAME_ERR_T') #修改MYSQL @@ -447,7 +447,7 @@ def InputSql(self,get): tmpFile = tmpFile.replace('.' + ext, '.sql') tmpFile = tmpFile.replace('tar.', '') backupPath = session['config']['backup_path'] + '/database' - + if ext == 'zip': public.ExecShell("cd " + backupPath + " && unzip " + file) else: diff --git a/class/files.py b/class/files.py index 118f06f9..0c7aece6 100644 --- a/class/files.py +++ b/class/files.py @@ -707,7 +707,8 @@ def GetFileBody(self,get) : else: data['data'] = srcBody.decode('utf-8') data['encoding'] = u'utf-8'; - + if hasattr(get,'filename'): get.path = get.filename + data['historys'] = self.get_history(get.path) return data; except Exception as ex: return public.returnMsg(False,'INCOMPATIBLE_FILECODE',(str(ex)),) @@ -744,12 +745,14 @@ def SaveFileBody(self,get): pass if get.encoding == 'ascii':get.encoding = 'utf-8'; + self.save_history(get.path) if sys.version_info[0] == 2: data = data.encode(get.encoding,errors='ignore'); fp = open(get.path,'w+') else: data = data.encode(get.encoding,errors='ignore').decode(get.encoding); fp = open(get.path,'w+',encoding=get.encoding) + fp.write(data) fp.close() @@ -767,7 +770,39 @@ def SaveFileBody(self,get): except Exception as ex: return public.returnMsg(False,'FILE_SAVE_ERR' + str(ex)); - + #保存历史副本 + def save_history(self,filename): + try: + save_path = ('/www/backup/file_history/' + filename).replace('//','/') + if not os.path.exists(save_path): os.makedirs(save_path,384) + public.writeFile(save_path + '/' + str(int(time.time())),public.readFile(filename,'rb'),'wb') + his_list = sorted(os.listdir(save_path)) + num = public.readFile('data/history_num.pl') + if not num: + num = 10 + else: + num = int(num) + d_num = len(his_list) + for i in range(d_num): + if d_num <= num: break; + rm_file = save_path + '/' + his_list[i] + if os.path.exists(rm_file): os.remove(rm_file) + except:pass + + #取历史副本 + def get_history(self,filename): + try: + save_path = ('/www/backup/file_history/' + filename).replace('//','/') + if not os.path.exists(save_path): return [] + return sorted(os.listdir(save_path)) + except: return [] + + #读取指定历史副本 + def read_history(self,args): + save_path = ('/www/backup/file_history/' + args.filename).replace('//','/') + args.path = save_path + '/' + args.history + return self.GetFileBody(args) + #文件压缩 def Zip(self,get) : if not 'z_type' in get: get.z_type = 'rar' @@ -821,10 +856,11 @@ def SetFileAccess(self,get,all = '-R'): def SetFileAccept(self,filename): os.system('chown -R www:www ' + filename) - os.system('chmod -R 644 ' + filename) - - - + if os.path.isfile(filename): + os.system('chmod -R 644 ' + filename) + else: + os.system('chmod -R 755 ' + filename) + #取目录大小 def GetDirSize(self,get): if sys.version_info[0] == 2: get.path = get.path.encode('utf-8'); diff --git a/class/firewall_new.py b/class/firewall_new.py index 861f1bbc..c127efc8 100644 --- a/class/firewall_new.py +++ b/class/firewall_new.py @@ -89,6 +89,17 @@ def GetList(self,get = None): data['accept'][i]['address'],addtime)) except: return public.get_error_info() + count = public.M('firewall').count(); + data = {} + data['page'] = public.get_page(count,int(get.p),12,get.collback) + data['data'] = public.M('firewall').limit(data['page']['shift'] + ',' + data['page']['row']).order('id desc').select() + 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: + data['data'][i]['status'] = -1; + else: + data['data'][i]['status'] = public.check_port_stat(int(data['data'][i]['port'])); + + data['page'] = data['page']['page'] return data except Exception as ex: return public.get_error_info() diff --git a/class/firewalls.py b/class/firewalls.py index 645541b7..00428c35 100644 --- a/class/firewalls.py +++ b/class/firewalls.py @@ -110,13 +110,14 @@ def DelDropAddress(self,get): #添加放行端口 def AddAcceptPort(self,get): import re + src_port = get.port get.port = get.port.replace('-',':') rep = "^\d{1,5}(:\d{1,5})?$" if not re.search(rep,get.port): return public.returnMsg(False,'PORT_CHECK_RANGE'); import time port = get.port ps = get.ps - if public.M('firewall').where("port=?",(port,)).count() > 0: return public.returnMsg(False,'FIREWALL_PORT_EXISTS') + if public.M('firewall').where("port=? or port=?",(port,src_port)).count() > 0: return public.returnMsg(False,'FIREWALL_PORT_EXISTS') notudps = ['80','443','8888','888','39000:40000','21','22'] if self.__isUfw: public.ExecShell('ufw allow ' + port + '/tcp'); diff --git a/class/jobs.py b/class/jobs.py index c6fbce96..51277210 100644 --- a/class/jobs.py +++ b/class/jobs.py @@ -49,6 +49,9 @@ def control_init(): if md51 != md52: import shutil shutil.copyfile(src_file,init_file) + if os.path.getsize(init_file) < 10: + os.system("chattr -i " + init_file) + os.system("\cp -arf %s %s" % (src_file,init_file)) except:pass public.writeFile('/var/bt_setupPath.conf','/www') public.ExecShell(c) @@ -63,7 +66,39 @@ def control_init(): public.ExecShell("chown -R root:root /www/server/panel/config") #disable_putenv('putenv') clean_session() - set_crond() + #set_crond() + clean_max_log('/www/server/panel/plugin/rsync/lsyncd.log') + remove_tty1() + clean_hook_log() + +#清理webhook日志 +def clean_hook_log(): + path = '/www/server/panel/plugin/webhook/script' + if not os.path.exists(path): return False + for name in os.listdir(path): + if name[-4:] != ".log": continue; + clean_max_log(path+'/' + name,524288) + +#清理大日志 +def clean_max_log(log_file,max_size = 104857600,old_line = 100): + if not os.path.exists(log_file): return False + if os.path.getsize(log_file) > max_size: + try: + old_body = public.GetNumLines(log_file,old_line) + public.writeFile(log_file,old_body) + except: + print(public.get_error_info()) + +#删除tty1 +def remove_tty1(): + file_path = '/etc/systemd/system/getty@tty1.service' + if not os.path.exists(file_path): return False + if not os.path.islink(file_path): return False + if os.readlink(file_path) != '/dev/null': return False + try: + os.remove(file_path) + except:pass + #默认禁用指定PHP函数 def disable_putenv(fun_name): diff --git a/class/panelAuth.py b/class/panelAuth.py index 565620ed..9abb1f8d 100644 --- a/class/panelAuth.py +++ b/class/panelAuth.py @@ -20,19 +20,21 @@ class panelAuth: __product_id = '100000011'; def create_serverid(self,get): - userPath = 'data/userInfo.json'; - if not os.path.exists(userPath): return public.returnMsg(False,'LOGIN_FIRST'); - tmp = public.readFile(userPath); - if len(tmp) < 2: tmp = '{}' - data = json.loads(tmp); - if not data: return public.returnMsg(False,'LOGIN_FIRST'); - if not hasattr(data,'serverid'): - s1 = self.get_mac_address() + self.get_hostname() - s2 = self.get_cpuname(); - serverid = public.md5(s1) + public.md5(s2); - data['serverid'] = serverid; - public.writeFile(userPath,json.dumps(data)); - return data; + try: + userPath = 'data/userInfo.json'; + if not os.path.exists(userPath): return public.returnMsg(False,'LOGIN_FIRST'); + tmp = public.readFile(userPath); + if len(tmp) < 2: tmp = '{}' + data = json.loads(tmp); + if not data: return public.returnMsg(False,'LOGIN_FIRST'); + if not hasattr(data,'serverid'): + s1 = self.get_mac_address() + self.get_hostname() + s2 = self.get_cpuname(); + serverid = public.md5(s1) + public.md5(s2); + data['serverid'] = serverid; + public.writeFile(userPath,json.dumps(data)); + return data; + except: return public.returnMsg(False,'LOGIN_FIRST'); def create_plugin_other_order(self,get): diff --git a/class/panelLets.py b/class/panelLets.py index 6c0d8f06..fdc9e381 100644 --- a/class/panelLets.py +++ b/class/panelLets.py @@ -83,15 +83,15 @@ def get_acme_name(self,domain_name): def get_error(self,error): if error.find("Max checks allowed") >= 0 : - return "CA server verification timed out, please wait 5-10 minutes and try again." + return "CA can't verify your domain name, please check if the domain name resolution is correct, or wait 5-10 minutes and try again." elif error.find("Max retries exceeded with") >= 0: - return "The CA server connection timed out, please make sure the server network is unobstructed." + return "The CA server connection timed out, please try again later." elif error.find("The domain name belongs") >= 0: return "The domain name does not belong to this DNS service provider. Please ensure that the domain name is filled in correctly." elif error.find('login token ID is invalid') >=0: return 'The DNS server connection failed. Please check if the key is correct.' elif "too many certificates already issued for exact set of domains" in error or "Error creating new account :: too many registrations for this IP" in error: - return '

The signing failed, and the number of attempts to apply for a certificate today has reached the limit!

' + return '

You have failed more than 5 verifications in 1 hour. Please wait 1 hour and try again.

' elif "DNS problem: NXDOMAIN looking up A for" in error or "No valid IP addresses found for" in error or "Invalid response from" in error: return '

The signing failed, the domain name resolution error, or the resolution is not valid, or the domain name is not filed!

' elif error.find('TLS Web Server Authentication') != -1: diff --git a/class/panelPlugin.py b/class/panelPlugin.py index 94ce27a2..18d70bc9 100644 --- a/class/panelPlugin.py +++ b/class/panelPlugin.py @@ -260,7 +260,7 @@ def get_cloud_list(self,get=None): import panelAuth pdata = panelAuth.panelAuth().create_serverid(None) listTmp = public.httpPost(cloudUrl,pdata,10) - if len(listTmp) < 200: + if not listTmp or len(listTmp) < 200: listTmp = public.readFile(lcoalTmp) try: softList = json.loads(listTmp) @@ -1554,7 +1554,11 @@ def a(self,get): try: if not public.path_safe_check("%s/%s" % (get.name,get.s)): return public.returnMsg(False,'PLUGIN_INPUT_C'); path = self.__install_path + '/' + get.name - if not os.path.exists(path + '/'+get.name+'_main.py'): return public.returnMsg(False,'PLUGIN_INPUT_B'); + if not os.path.exists(path + '/'+get.name+'_main.py'): + if os.path.exists(path+'/index.php'): + import panelPHP + return panelPHP.panelPHP(get.name).exec_php_script(get) + return public.returnMsg(False,'PLUGIN_INPUT_B'); if not self.check_accept(get):return public.returnMsg(False,public.to_string([24744, 26410, 36141, 20080, 91, 37, 115, 93, 25110, 25480, 26435, 24050, 21040, 26399, 33]) % (self.get_title_byname(get),)) sys.path.append(path); plugin_main = __import__(get.name+'_main'); diff --git a/class/panelSSL.py b/class/panelSSL.py index ac0fdd5b..74212ccc 100644 --- a/class/panelSSL.py +++ b/class/panelSSL.py @@ -31,10 +31,14 @@ def __init__(self): self.__userInfo = {} else: self.__userInfo = {} - - if self.__userInfo: - pdata['access_key'] = self.__userInfo['access_key']; - data['secret_key'] = self.__userInfo['secret_key']; + try: + if self.__userInfo: + pdata['access_key'] = self.__userInfo['access_key']; + data['secret_key'] = self.__userInfo['secret_key']; + except: + self.__userInfo = {} + pdata['access_key'] = 'test'; + data['secret_key'] = '123456'; else: pdata['access_key'] = 'test'; data['secret_key'] = '123456'; diff --git a/class/panelSite.py b/class/panelSite.py index 4b9c023e..a909f83a 100644 --- a/class/panelSite.py +++ b/class/panelSite.py @@ -759,7 +759,7 @@ def DelDomain(self,get): sql.table('domain').where("id=?",(find['id'],)).delete(); public.WriteLog('TYPE_SITE', 'DOMAIN_DEL_SUCCESS',(get.webname,get.domain)); - public.serviceReload(); + public.serviceReload() return public.returnMsg(True,'DEL_SUCCESS'); #检查域名是否解析 @@ -856,7 +856,7 @@ def CreateLet(self,get): for domain in domains: if public.checkIp(domain): continue; - if domain.find('*.') >=0 and not file_auth: + if domain.find('*.') >= 0 and file_auth: return public.returnMsg(False, 'A generic domain name cannot be used to apply for a certificate using [File Validation]!'); if file_auth: @@ -901,7 +901,7 @@ def CreateLet(self,get): return result def get_site_info(self,siteName): - data = public.M("sites").where('name=?',siteName).field('path,name').find() + data = public.M("sites").where('name=?',siteName).field('id,path,name').find() return data @@ -2439,6 +2439,11 @@ def SaveProxyFile(self,get): return f.SaveFileBody(get) # return public.returnMsg(True, '保存成功') + # 检查是否存在#Set Nginx Cache + def check_annotate(self,data): + rep = "\n\s*#Set\s*Nginx\s*Cache" + if re.search(rep,data): + return True # 修改反向代理 def ModifyProxy(self, get): @@ -2477,17 +2482,26 @@ def ModifyProxy(self, get): proxy_cache cache_one; proxy_cache_key $host$uri$is_args$args; proxy_cache_valid 200 304 301 302 %sm;""" % (get.cachetime) - cache_rep = '#proxy_set_header\s+Connection\s+"upgrade";' - ng_conf = re.sub(cache_rep,'#proxy_set_header Connection "upgrade";\n'+ng_cache,ng_conf) + if self.check_annotate(ng_conf): + cache_rep = '\n\s*#Set\s*Nginx\s*Cache(.|\n)*no-cache;' + ng_conf = re.sub(cache_rep,'\n\t#Set Nginx Cache\n'+ng_cache,ng_conf) + else: + cache_rep = '#proxy_set_header\s+Connection\s+"upgrade";' + ng_conf = re.sub(cache_rep, '\n\t#proxy_set_header Connection "upgrade";\n\t#Set Nginx Cache' + ng_cache, + ng_conf) else: - rep = '\s+proxy_cache\s+cache_one.*[\n\s\w\_\";\$]+m;' - ng_conf = re.sub(rep, "", ng_conf) + if self.check_annotate(ng_conf): + rep = '\n\s*#Set\s*Nginx\s*Cache(.|\n)*1m;' + ng_conf = re.sub(rep, "\n\t#Set Nginx Cache\n\tadd_header Cache-Control no-cache;", ng_conf) + else: + rep = '\s+proxy_cache\s+cache_one.*[\n\s\w\_\";\$]+m;' + ng_conf = re.sub(rep, '\n\t#Set Nginx Cache\n\tadd_header Cache-Control no-cache;', ng_conf) sub_rep = "sub_filter" subfilter = json.loads(get.subfilter) if str(proxyUrl[i]["subfilter"]) != str(subfilter): if re.search(sub_rep, ng_conf): - sub_rep = "\s+proxy_set_header\s+Accept-Encoding.*[\n\s\w\_\";]+off;" + sub_rep = "\s+proxy_set_header\s+Accept-Encoding(.|\n)+off;" ng_conf = re.sub(sub_rep,"",ng_conf) # 构造替换字符串 @@ -2582,8 +2596,9 @@ def SetProxy(self,get): #proxy_http_version 1.1; #proxy_set_header Upgrade $http_upgrade; #proxy_set_header Connection "upgrade"; - add_header X-Cache $upstream_cache_status; + + #Set Nginx Cache %s %s } @@ -2617,14 +2632,14 @@ def SetProxy(self,get): get.proxydir, get.proxydir,get.proxysite, get.todomain, public.GetMsg("NGINX_PERSISTENCE") ,ng_sub_filter, ng_cache ,get.proxydir) if type == 1 and cache == 0: ng_proxy_cache += ng_proxy % ( - get.proxydir, get.proxydir, get.proxysite, get.todomain, public.GetMsg("NGINX_PERSISTENCE") ,ng_sub_filter,'' ,get.proxydir) + get.proxydir, get.proxydir, get.proxysite, get.todomain, public.GetMsg("NGINX_PERSISTENCE") ,ng_sub_filter,'\tadd_header Cache-Control no-cache;' ,get.proxydir) else: if type == 1 and cache == 1: ng_proxy_cache += ng_proxy % ( get.proxydir, get.proxydir, get.proxysite, get.todomain, public.GetMsg("NGINX_PERSISTENCE") ,ng_sub_filter, ng_cache, get.proxydir) if type == 1 and cache == 0: ng_proxy_cache += ng_proxy % ( - get.proxydir, get.proxydir, get.proxysite, get.todomain, public.GetMsg("NGINX_PERSISTENCE") ,ng_sub_filter, '', get.proxydir) + get.proxydir, get.proxydir, get.proxysite, get.todomain, public.GetMsg("NGINX_PERSISTENCE") ,ng_sub_filter, '\tadd_header Cache-Control no-cache;', get.proxydir) public.writeFile(ng_proxyfile, ng_proxy_cache) @@ -3348,6 +3363,7 @@ def GetSecurity(self,get): #设置防盗链 def SetSecurity(self,get): if len(get.fix) < 2: return public.returnMsg(False,'URL_SUFFIX_NOT_EMPTY!'); + if len(get.domains) < 3: return public.returnMsg(False,'Anti-theft chain domain name cannot be empty!'); file = '/www/server/panel/vhost/nginx/' + get.name + '.conf'; if os.path.exists(file): conf = public.readFile(file); diff --git a/class/panelTask.py b/class/panelTask.py index 9e4bfdde..6c356e98 100644 --- a/class/panelTask.py +++ b/class/panelTask.py @@ -133,6 +133,7 @@ def execute_task(self,id,task_type,task_shell,other=''): down_file = downloadFile.downloadFile() down_file.logPath = log_file print(down_file.DownloadFile(task_shell,other)) + os.system("chown www.www {}".format(other)) elif task_type == 2: #解压文件 zip_info = json.loads(other) self._unzip(task_shell,zip_info['dfile'],zip_info['password'],log_file) @@ -379,7 +380,12 @@ def mypass(self,act,root): #设置权限 def set_file_accept(self,filename): os.system('chown -R www:www ' + filename) - os.system('chmod -R 755 ' + filename) + # os.system('chmod -R 755 ' + filename) + a = 'find {filename} -type d |xargs chmod 0755'.format(filename=filename) + public.writeFile("/tmp/2",str(a)) + os.system(a) + os.system('find {filename} -type f |xargs chmod 0644'.format(filename=filename)) + #检查敏感目录 def check_dir(self,path): diff --git a/class/public.py b/class/public.py index 800d37b7..b302c1bf 100644 --- a/class/public.py +++ b/class/public.py @@ -29,6 +29,8 @@ def HttpGet(url,timeout = 6,headers = {}): @timeout 超时时间默认60秒 return string """ + + if is_local(): return False home = 'www.bt.cn' host_home = 'data/home_host.pl' old_url = url @@ -104,6 +106,7 @@ def HttpPost(url,data,timeout = 6,headers = {}): @timeout 超时时间默认60秒 return string """ + if is_local(): return False home = 'www.bt.cn' host_home = 'data/home_host.pl' old_url = url @@ -1289,25 +1292,22 @@ def get_path_size(path): size_total += os.path.getsize(filename) return size_total - -# 写关键请求日志 -def write_request_log(): +#写关键请求日志 +def write_request_log(reques = None): try: log_path = '/www/server/panel/logs/request' log_file = getDate(format='%Y-%m-%d') + '.json' if not os.path.exists(log_path): os.makedirs(log_path) from flask import request - log_data = {} - log_data['date'] = getDate() - log_data['ip'] = GetClientIp() - log_data['method'] = request.method - log_data['uri'] = request.full_path - log_data['user-agent'] = request.headers.get('User-Agent') - WriteFile(log_path + '/' + log_file, json.dumps(log_data) + "\n", 'a+') - except: - pass - + log_data = [] + log_data.append(getDate()) + log_data.append(GetClientIp()) + log_data.append(request.method) + log_data.append(request.full_path) + log_data.append(request.headers.get('User-Agent')) + WriteFile(log_path + '/' + log_file,json.dumps(log_data) + "\n",'a+') + except: pass # 重载模块 def mod_reload(mode): @@ -1337,9 +1337,11 @@ def set_own(filename, user, group=None): from pwd import getpwnam try: user_info = getpwnam(user) + # user_info = getpwnam('www') user = user_info.pw_uid if group: user_info = getpwnam(group) + # user_info = getpwnam('www') group = user_info.pw_gid except: # 如果指定用户或组不存在,则使用www @@ -1433,18 +1435,85 @@ def de_crypt(key,strings): return strings -# 取通用对象 -class dict_obj: - def __contains__(self, key): - return getattr(self, key, None) - - def __setitem__(self, key, value): setattr(self, key, value) +#检查IP白名单 +def check_ip_panel(): + ip_file = 'data/limitip.conf' + if os.path.exists(ip_file): + iplist = ReadFile(ip_file) + if iplist: + iplist = iplist.strip(); + if not GetClientIp() in iplist.split(','): + errorStr = ReadFile('./BTPanel/templates/' + GetConfigValue('template') + '/error2.html') + try: + errorStr = errorStr.format(getMsg('PAGE_ERR_TITLE'),getMsg('PAGE_ERR_IP_H1'),getMsg('PAGE_ERR_IP_P1',(GetClientIp(),)),getMsg('PAGE_ERR_IP_P2'),getMsg('PAGE_ERR_IP_P3'),getMsg('NAME'),getMsg('PAGE_ERR_HELP')) + except IndexError:pass + return errorStr + return False - def __getitem__(self, key): return getattr(self, key, None) +#检查面板域名 +def check_domain_panel(): + tmp = GetHost() + domain = ReadFile('data/domain.conf') + if domain: + if tmp.strip().lower() != domain.strip().lower(): + errorStr = ReadFile('./BTPanel/templates/' + GetConfigValue('template') + '/error2.html') + try: + errorStr = errorStr.format(getMsg('PAGE_ERR_TITLE'),getMsg('PAGE_ERR_DOMAIN_H1'),getMsg('PAGE_ERR_DOMAIN_P1'),getMsg('PAGE_ERR_DOMAIN_P2'),getMsg('PAGE_ERR_DOMAIN_P3'),getMsg('NAME'),getMsg('PAGE_ERR_HELP')) + except IndexError:pass + return errorStr + return False - def __delitem__(self, key): delattr(self, key) +#是否离线模式 +def is_local(): + s_file = '/www/server/panel/data/not_network.pl' + return os.path.exists(s_file) + + +#自动备份面板数据 +def auto_backup_panel(): + b_path = '/www/backup/panel' + backup_path = b_path + '/' + format_date('%Y-%m-%d') + panel_paeh = '/www/server/panel' + if os.path.exists(backup_path): return True + os.makedirs(backup_path,384) + import shutil + shutil.copytree(panel_paeh + '/data',backup_path + '/data') + shutil.copytree(panel_paeh + '/config',backup_path + '/config') + time_now = time.time() - (86400 * 15) + for f in os.listdir(b_path): + try: + if time.mktime(time.strptime(f, "%Y-%m-%d")) < time_now: + path = b_path + '/' + f + if os.path.exists(path): shutil.rmtree(path) + except: continue + + +#检查端口状态 +def check_port_stat(port): + import socket + localIP = '127.0.0.1'; + temp = {} + temp['port'] = port; + temp['local'] = True; + try: + s = socket.socket() + s.settimeout(0.15) + s.connect((localIP,port)) + s.close() + except: + temp['local'] = False; - def __delattr__(self, key): delattr(self, key) + result = 0; + if temp['local']: result +=2; + return result; +#取通用对象 +class dict_obj: + def __contains__(self, key): + return getattr(self,key,None) + def __setitem__(self, key, value): setattr(self,key,value) + def __getitem__(self, key): return getattr(self,key,None) + def __delitem__(self,key): delattr(self,key) + def __delattr__(self, key): delattr(self,key) def get_items(self): return self diff --git a/class/system.py b/class/system.py index 91760688..498489a1 100644 --- a/class/system.py +++ b/class/system.py @@ -273,7 +273,10 @@ def GetCpuInfo(self,interval = 1): #取CPU信息 cpuCount = psutil.cpu_count() used = self.get_cpu_percent() - return used,cpuCount + used_all = psutil.cpu_percent(percpu=True) + cpu_name = public.getCpuType() + return used,cpuCount,used_all,cpu_name + def GetCpuInfo_new(self): cpuCount = psutil.cpu_count() diff --git a/script/logsBackup b/script/logsBackup index a5160791..d0ae72c7 100644 --- a/script/logsBackup +++ b/script/logsBackup @@ -12,9 +12,9 @@ os.chdir("/www/server/panel") sys.path.append('class/') import public print ('==================================================================') -print( '★['+time.strftime("%Y/%m/%d %H:%M:%S")+'],切割日志') +print( '★['+time.strftime("%Y/%m/%d %H:%M:%S")+'],Cutting log') print ('==================================================================') -print ('|--当前保留最新的['+sys.argv[2]+']份') +print ('|--Currently retaining the latest ['+sys.argv[2]+'] copies') logsPath = '/www/wwwlogs/' is_nginx = False if os.path.exists('/www/server/nginx/logs/nginx.pid'): is_nginx = True @@ -24,7 +24,7 @@ if not is_nginx: px = '-access_log' def split_logs(oldFileName,num): global logsPath if not os.path.exists(oldFileName): - print('|---'+oldFileName+'文件不存在!') + print('|---'+oldFileName+'file does not exist!') return logs=sorted(glob.glob(oldFileName+"_*")) @@ -34,11 +34,12 @@ def split_logs(oldFileName,num): for i in range(count): if i>num: break; os.remove(logs[i]) - print('|---多余日志['+logs[i]+']已删除!') + print('|---Extra log ['+logs[i]+'] has been deleted!') newFileName=oldFileName+'_'+time.strftime("%Y-%m-%d_%H%M%S")+'.log' shutil.move(oldFileName,newFileName) - print('|---已切割日志到:'+newFileName) + os.system("gzip %s" % newFileName) + print('|---The log has been cut to: '+newFileName+'.gz') def split_all(save): sites = public.M('sites').field('name').select() diff --git a/script/logsBackup.py b/script/logsBackup.py index a5160791..6d19f136 100644 --- a/script/logsBackup.py +++ b/script/logsBackup.py @@ -12,9 +12,9 @@ sys.path.append('class/') import public print ('==================================================================') -print( '★['+time.strftime("%Y/%m/%d %H:%M:%S")+'],切割日志') +print( '★['+time.strftime("%Y/%m/%d %H:%M:%S")+'],Cutting log') print ('==================================================================') -print ('|--当前保留最新的['+sys.argv[2]+']份') +print ('|--Currently retaining the latest ['+sys.argv[2]+'] copies') logsPath = '/www/wwwlogs/' is_nginx = False if os.path.exists('/www/server/nginx/logs/nginx.pid'): is_nginx = True @@ -24,7 +24,7 @@ def split_logs(oldFileName,num): global logsPath if not os.path.exists(oldFileName): - print('|---'+oldFileName+'文件不存在!') + print('|---'+oldFileName+'file does not exist!') return logs=sorted(glob.glob(oldFileName+"_*")) @@ -34,11 +34,12 @@ def split_logs(oldFileName,num): for i in range(count): if i>num: break; os.remove(logs[i]) - print('|---多余日志['+logs[i]+']已删除!') + print('|---The extra log ['+logs[i]+'] has been deleted!') newFileName=oldFileName+'_'+time.strftime("%Y-%m-%d_%H%M%S")+'.log' shutil.move(oldFileName,newFileName) - print('|---已切割日志到:'+newFileName) + os.system("gzip %s" % newFileName) + print('|---The log has been cut to:'+newFileName+'.gz') def split_all(save): sites = public.M('sites').field('name').select() diff --git a/task.py b/task.py index 6d2d3096..e2bce845 100644 --- a/task.py +++ b/task.py @@ -1,3 +1,4 @@ +#!/bin/python #coding: utf-8 # +------------------------------------------------------------------- # | 宝塔Linux面板 @@ -438,6 +439,8 @@ def panel_status(): panel_url = pool + '127.0.0.1:' + port + '/service_status' panel_pid = get_panel_pid() n = 0 + s = 0 + v = 0 while True: time.sleep(1) if not panel_pid: panel_pid = get_panel_pid() @@ -455,6 +458,25 @@ def panel_status(): continue n += 1 + v += 1 + + if v > 10: + v = 0 + log_path = panel_path + '/logs/error.log' + if os.path.exists(log_path): + e_body = public.GetNumLines(log_path,10) + if e_body: + if e_body.find('PyWSGIServer.do_close') != -1 or e_body.find('Expected GET method:')!=-1 or e_body.find('Invalid HTTP method:') != -1 or e_body.find('table session') != -1: + result = public.httpGet(panel_url) + if result != 'True': + if e_body.find('table session') != -1: + sess_file = '/dev/shm/session.db' + if os.path.exists(sess_file): os.remove(sess_file) + os.system("/etc/init.d/bt reload &") + time.sleep(10) + result = public.httpGet(panel_url) + if result == 'True': + public.WriteLog('TYPE_SOFE','Checked to panel service exception, has been automatically restored!') if n > 18000: n = 0 @@ -465,7 +487,7 @@ def panel_status(): os.system("/etc/init.d/bt reload &") result = public.httpGet(panel_url) if result == 'True': - public.WriteLog('守护程序','检查到面板服务异常,已自动恢复!') + public.WriteLog('TYPE_SOFE','Checked to panel service exception, has been automatically restored!') time.sleep(10) continue From 5663522d80da585e62cb0e5b388937c80c7a0dff Mon Sep 17 00:00:00 2001 From: jose <627622230@qq.com> Date: Sat, 7 Sep 2019 16:25:23 +0800 Subject: [PATCH 02/21] update 6.2.4 --- BTPanel/__init__.py | 68 +- BTPanel/static/ace/ace.js | 17 + BTPanel/static/ace/editor.config.json | 1 + BTPanel/static/ace/ext-beautify.js | 8 + .../static/ace/ext-elastic_tabstops_lite.js | 8 + BTPanel/static/ace/ext-emmet.js | 8 + BTPanel/static/ace/ext-error_marker.js | 8 + BTPanel/static/ace/ext-language_tools.js | 8 + BTPanel/static/ace/ext-linking.js | 8 + BTPanel/static/ace/ext-modelist.js | 8 + BTPanel/static/ace/ext-options.js | 8 + BTPanel/static/ace/ext-prompt.js | 8 + BTPanel/static/ace/ext-rtl.js | 8 + BTPanel/static/ace/ext-searchbox.js | 8 + BTPanel/static/ace/ext-spellcheck.js | 8 + BTPanel/static/ace/ext-split.js | 8 + BTPanel/static/ace/ext-static_highlight.js | 8 + BTPanel/static/ace/ext-statusbar.js | 8 + BTPanel/static/ace/ext-textarea.js | 8 + BTPanel/static/ace/ext-whitespace.js | 8 + BTPanel/static/ace/icons/devopicons.woff2 | Bin 0 -> 52080 bytes BTPanel/static/ace/icons/file-icons.woff2 | Bin 0 -> 160072 bytes BTPanel/static/ace/icons/fontawesome.woff2 | Bin 0 -> 77160 bytes BTPanel/static/ace/icons/mfixx.woff2 | Bin 0 -> 25824 bytes BTPanel/static/ace/icons/octicons.woff2 | Bin 0 -> 17492 bytes BTPanel/static/ace/keybinding-sublime.js | 8 + BTPanel/static/ace/mode-apache_conf.js | 8 + BTPanel/static/ace/mode-batchfile.js | 8 + BTPanel/static/ace/mode-c_cpp.js | 8 + BTPanel/static/ace/mode-csharp.js | 8 + BTPanel/static/ace/mode-css.js | 8 + BTPanel/static/ace/mode-django.js | 8 + BTPanel/static/ace/mode-dockerfile.js | 8 + BTPanel/static/ace/mode-golang.js | 8 + BTPanel/static/ace/mode-html.js | 8 + BTPanel/static/ace/mode-ini.js | 8 + BTPanel/static/ace/mode-java.js | 8 + BTPanel/static/ace/mode-javascript.js | 8 + BTPanel/static/ace/mode-json.js | 8 + BTPanel/static/ace/mode-jsp.js | 8 + BTPanel/static/ace/mode-less.js | 8 + BTPanel/static/ace/mode-lua.js | 8 + BTPanel/static/ace/mode-makefile.js | 8 + BTPanel/static/ace/mode-markdown.js | 8 + BTPanel/static/ace/mode-mysql.js | 8 + BTPanel/static/ace/mode-nginx.js | 8 + BTPanel/static/ace/mode-objectivec.js | 8 + BTPanel/static/ace/mode-perl.js | 8 + BTPanel/static/ace/mode-perl6.js | 8 + BTPanel/static/ace/mode-pgsql.js | 8 + BTPanel/static/ace/mode-php.js | 8 + BTPanel/static/ace/mode-php_laravel_blade.js | 8 + BTPanel/static/ace/mode-powershell.js | 8 + BTPanel/static/ace/mode-python.js | 8 + BTPanel/static/ace/mode-r.js | 8 + BTPanel/static/ace/mode-ruby.js | 8 + BTPanel/static/ace/mode-rust.js | 8 + BTPanel/static/ace/mode-sass.js | 8 + BTPanel/static/ace/mode-scss.js | 8 + BTPanel/static/ace/mode-sh.js | 8 + BTPanel/static/ace/mode-sql.js | 8 + BTPanel/static/ace/mode-sqlserver.js | 8 + BTPanel/static/ace/mode-swift.js | 8 + BTPanel/static/ace/mode-text.js | 8 + BTPanel/static/ace/mode-typescript.js | 8 + BTPanel/static/ace/mode-vbscript.js | 8 + BTPanel/static/ace/mode-verilog.js | 8 + BTPanel/static/ace/mode-xml.js | 8 + BTPanel/static/ace/mode-yaml.js | 8 + BTPanel/static/ace/snippets/apache_conf.js | 8 + BTPanel/static/ace/snippets/batchfile.js | 8 + BTPanel/static/ace/snippets/c_cpp.js | 8 + BTPanel/static/ace/snippets/csharp.js | 8 + BTPanel/static/ace/snippets/css.js | 8 + BTPanel/static/ace/snippets/django.js | 8 + BTPanel/static/ace/snippets/dockerfile.js | 8 + BTPanel/static/ace/snippets/golang.js | 8 + BTPanel/static/ace/snippets/html.js | 8 + BTPanel/static/ace/snippets/ini.js | 8 + BTPanel/static/ace/snippets/java.js | 8 + BTPanel/static/ace/snippets/javascript.js | 8 + BTPanel/static/ace/snippets/json.js | 8 + BTPanel/static/ace/snippets/jsp.js | 8 + BTPanel/static/ace/snippets/less.js | 8 + BTPanel/static/ace/snippets/lua.js | 8 + BTPanel/static/ace/snippets/makefile.js | 8 + BTPanel/static/ace/snippets/markdown.js | 8 + BTPanel/static/ace/snippets/mysql.js | 8 + BTPanel/static/ace/snippets/nginx.js | 8 + BTPanel/static/ace/snippets/objectivec.js | 8 + BTPanel/static/ace/snippets/perl.js | 8 + BTPanel/static/ace/snippets/perl6.js | 8 + BTPanel/static/ace/snippets/pgsql.js | 8 + BTPanel/static/ace/snippets/php.js | 8 + .../static/ace/snippets/php_laravel_blade.js | 8 + BTPanel/static/ace/snippets/powershell.js | 8 + BTPanel/static/ace/snippets/python.js | 8 + BTPanel/static/ace/snippets/r.js | 8 + BTPanel/static/ace/snippets/ruby.js | 8 + BTPanel/static/ace/snippets/rust.js | 8 + BTPanel/static/ace/snippets/sass.js | 8 + BTPanel/static/ace/snippets/scss.js | 8 + BTPanel/static/ace/snippets/sh.js | 8 + BTPanel/static/ace/snippets/sql.js | 8 + BTPanel/static/ace/snippets/sqlserver.js | 8 + BTPanel/static/ace/snippets/swift.js | 8 + BTPanel/static/ace/snippets/text.js | 8 + BTPanel/static/ace/snippets/typescript.js | 8 + BTPanel/static/ace/snippets/vbscript.js | 8 + BTPanel/static/ace/snippets/verilog.js | 8 + BTPanel/static/ace/snippets/xml.js | 8 + BTPanel/static/ace/snippets/yaml.js | 8 + BTPanel/static/ace/styles/icons.css | 4913 +++++++++++++++++ BTPanel/static/ace/theme-chrome.js | 8 + BTPanel/static/ace/theme-monokai.js | 8 + BTPanel/static/ace/worker-css.js | 1 + BTPanel/static/ace/worker-html.js | 1 + BTPanel/static/ace/worker-javascript.js | 1 + BTPanel/static/ace/worker-json.js | 1 + BTPanel/static/ace/worker-lua.js | 1 + BTPanel/static/ace/worker-php.js | 1 + BTPanel/static/ace/worker-xml.js | 1 + BTPanel/static/css/site.css | 266 +- .../img/dep_ico/Centcount_Analytics.png | Bin 0 -> 2533 bytes BTPanel/static/img/dep_ico/DBShop.png | Bin 0 -> 21056 bytes BTPanel/static/img/dep_ico/JTBC.png | 562 ++ BTPanel/static/img/dep_ico/Temmoku_MVC.png | Bin 0 -> 9297 bytes BTPanel/static/img/dep_ico/ThinkPHP-5.0.png | Bin 0 -> 7222 bytes BTPanel/static/img/dep_ico/URLshorting.png | Bin 0 -> 70907 bytes BTPanel/static/img/dep_ico/YoungxjTools.png | Bin 0 -> 165662 bytes BTPanel/static/img/dep_ico/ZFAKA.png | 562 ++ BTPanel/static/img/dep_ico/bfz.png | 561 ++ BTPanel/static/img/dep_ico/bty.png | Bin 0 -> 67646 bytes BTPanel/static/img/dep_ico/chengxuxia.png | Bin 0 -> 6047 bytes BTPanel/static/img/dep_ico/codeigniter.png | Bin 0 -> 7760 bytes BTPanel/static/img/dep_ico/crmeb.png | Bin 0 -> 2009 bytes BTPanel/static/img/dep_ico/doxcx.png | 563 ++ BTPanel/static/img/dep_ico/ecshop.png | Bin 0 -> 3327 bytes BTPanel/static/img/dep_ico/emlog.png | Bin 0 -> 10800 bytes BTPanel/static/img/dep_ico/empirecms.png | Bin 0 -> 12629 bytes BTPanel/static/img/dep_ico/jtbc3.png | Bin 0 -> 1486 bytes BTPanel/static/img/dep_ico/lovewall.png | Bin 0 -> 1609 bytes BTPanel/static/img/dep_ico/phpcms.png | Bin 0 -> 15091 bytes BTPanel/static/img/dep_ico/qrpay.png | Bin 0 -> 1935 bytes BTPanel/static/img/dep_ico/sentcms.png | Bin 0 -> 14500 bytes BTPanel/static/img/dep_ico/skm.png | 563 ++ BTPanel/static/img/dep_ico/test.png | 562 ++ BTPanel/static/img/dep_ico/test2.png | 562 ++ BTPanel/static/img/dep_ico/tipask.png | Bin 0 -> 1186 bytes BTPanel/static/img/dep_ico/ttttt.png | 562 ++ BTPanel/static/img/dep_ico/wdja.png | 563 ++ BTPanel/static/img/dep_ico/wee7.png | Bin 0 -> 555 bytes BTPanel/static/img/dep_ico/wordpress.png | Bin 0 -> 23042 bytes BTPanel/static/img/dep_ico/wp.png | 562 ++ BTPanel/static/img/dep_ico/z-blog.png | 561 ++ BTPanel/static/img/dep_ico/zfaka-zlkb.png | Bin 0 -> 1578 bytes .../dep_ico/\345\270\235\345\233\275CMS.png" | Bin 0 -> 12629 bytes .../img/dep_ico/\345\276\256\346\223\216.png" | Bin 0 -> 555 bytes BTPanel/static/js/bt_upload.js | 2 +- BTPanel/static/js/config.js | 56 +- BTPanel/static/js/crontab.js | 2 +- BTPanel/static/js/database.js | 2 +- BTPanel/static/js/files.js | 407 +- BTPanel/static/js/public.js | 440 +- BTPanel/static/js/public_backup.js | 36 +- BTPanel/static/js/site.js | 241 +- BTPanel/static/js/soft.js | 90 +- BTPanel/static/language/English/public.json | 2 +- BTPanel/static/language/English/template.json | 2 +- BTPanel/templates/default/files.html | 35 +- class/ajax.py | 284 +- class/apache.py | 70 +- class/common.py | 2 +- class/config.py | 121 +- class/database.py | 34 +- class/datatool.py | 1 + class/db.py | 46 +- class/files.py | 209 +- class/firewalls.py | 16 +- class/ftp.py | 1 + class/jobs.py | 1 + class/nginx.py | 24 +- class/panelDnsapi.py | 8 +- class/panelLets.py | 108 +- class/panelPlugin.py | 7 +- class/panelRedirect.py | 77 +- class/panelSSL.py | 16 +- class/panelSite.py | 147 +- class/panelTask.py | 5 +- class/plugin_deployment.py | 30 +- class/public.py | 78 +- class/sewer/client.py | 32 +- class/site_dir_auth.py | 263 + class/system.py | 30 +- data/libList.conf | 16 +- data/softList.conf | 8 +- runconfig.py | 8 +- task.py | 24 +- tools.py | 22 +- 199 files changed, 14588 insertions(+), 718 deletions(-) create mode 100644 BTPanel/static/ace/ace.js create mode 100644 BTPanel/static/ace/editor.config.json create mode 100644 BTPanel/static/ace/ext-beautify.js create mode 100644 BTPanel/static/ace/ext-elastic_tabstops_lite.js create mode 100644 BTPanel/static/ace/ext-emmet.js create mode 100644 BTPanel/static/ace/ext-error_marker.js create mode 100644 BTPanel/static/ace/ext-language_tools.js create mode 100644 BTPanel/static/ace/ext-linking.js create mode 100644 BTPanel/static/ace/ext-modelist.js create mode 100644 BTPanel/static/ace/ext-options.js create mode 100644 BTPanel/static/ace/ext-prompt.js create mode 100644 BTPanel/static/ace/ext-rtl.js create mode 100644 BTPanel/static/ace/ext-searchbox.js create mode 100644 BTPanel/static/ace/ext-spellcheck.js create mode 100644 BTPanel/static/ace/ext-split.js create mode 100644 BTPanel/static/ace/ext-static_highlight.js create mode 100644 BTPanel/static/ace/ext-statusbar.js create mode 100644 BTPanel/static/ace/ext-textarea.js create mode 100644 BTPanel/static/ace/ext-whitespace.js create mode 100644 BTPanel/static/ace/icons/devopicons.woff2 create mode 100644 BTPanel/static/ace/icons/file-icons.woff2 create mode 100644 BTPanel/static/ace/icons/fontawesome.woff2 create mode 100644 BTPanel/static/ace/icons/mfixx.woff2 create mode 100644 BTPanel/static/ace/icons/octicons.woff2 create mode 100644 BTPanel/static/ace/keybinding-sublime.js create mode 100644 BTPanel/static/ace/mode-apache_conf.js create mode 100644 BTPanel/static/ace/mode-batchfile.js create mode 100644 BTPanel/static/ace/mode-c_cpp.js create mode 100644 BTPanel/static/ace/mode-csharp.js create mode 100644 BTPanel/static/ace/mode-css.js create mode 100644 BTPanel/static/ace/mode-django.js create mode 100644 BTPanel/static/ace/mode-dockerfile.js create mode 100644 BTPanel/static/ace/mode-golang.js create mode 100644 BTPanel/static/ace/mode-html.js create mode 100644 BTPanel/static/ace/mode-ini.js create mode 100644 BTPanel/static/ace/mode-java.js create mode 100644 BTPanel/static/ace/mode-javascript.js create mode 100644 BTPanel/static/ace/mode-json.js create mode 100644 BTPanel/static/ace/mode-jsp.js create mode 100644 BTPanel/static/ace/mode-less.js create mode 100644 BTPanel/static/ace/mode-lua.js create mode 100644 BTPanel/static/ace/mode-makefile.js create mode 100644 BTPanel/static/ace/mode-markdown.js create mode 100644 BTPanel/static/ace/mode-mysql.js create mode 100644 BTPanel/static/ace/mode-nginx.js create mode 100644 BTPanel/static/ace/mode-objectivec.js create mode 100644 BTPanel/static/ace/mode-perl.js create mode 100644 BTPanel/static/ace/mode-perl6.js create mode 100644 BTPanel/static/ace/mode-pgsql.js create mode 100644 BTPanel/static/ace/mode-php.js create mode 100644 BTPanel/static/ace/mode-php_laravel_blade.js create mode 100644 BTPanel/static/ace/mode-powershell.js create mode 100644 BTPanel/static/ace/mode-python.js create mode 100644 BTPanel/static/ace/mode-r.js create mode 100644 BTPanel/static/ace/mode-ruby.js create mode 100644 BTPanel/static/ace/mode-rust.js create mode 100644 BTPanel/static/ace/mode-sass.js create mode 100644 BTPanel/static/ace/mode-scss.js create mode 100644 BTPanel/static/ace/mode-sh.js create mode 100644 BTPanel/static/ace/mode-sql.js create mode 100644 BTPanel/static/ace/mode-sqlserver.js create mode 100644 BTPanel/static/ace/mode-swift.js create mode 100644 BTPanel/static/ace/mode-text.js create mode 100644 BTPanel/static/ace/mode-typescript.js create mode 100644 BTPanel/static/ace/mode-vbscript.js create mode 100644 BTPanel/static/ace/mode-verilog.js create mode 100644 BTPanel/static/ace/mode-xml.js create mode 100644 BTPanel/static/ace/mode-yaml.js create mode 100644 BTPanel/static/ace/snippets/apache_conf.js create mode 100644 BTPanel/static/ace/snippets/batchfile.js create mode 100644 BTPanel/static/ace/snippets/c_cpp.js create mode 100644 BTPanel/static/ace/snippets/csharp.js create mode 100644 BTPanel/static/ace/snippets/css.js create mode 100644 BTPanel/static/ace/snippets/django.js create mode 100644 BTPanel/static/ace/snippets/dockerfile.js create mode 100644 BTPanel/static/ace/snippets/golang.js create mode 100644 BTPanel/static/ace/snippets/html.js create mode 100644 BTPanel/static/ace/snippets/ini.js create mode 100644 BTPanel/static/ace/snippets/java.js create mode 100644 BTPanel/static/ace/snippets/javascript.js create mode 100644 BTPanel/static/ace/snippets/json.js create mode 100644 BTPanel/static/ace/snippets/jsp.js create mode 100644 BTPanel/static/ace/snippets/less.js create mode 100644 BTPanel/static/ace/snippets/lua.js create mode 100644 BTPanel/static/ace/snippets/makefile.js create mode 100644 BTPanel/static/ace/snippets/markdown.js create mode 100644 BTPanel/static/ace/snippets/mysql.js create mode 100644 BTPanel/static/ace/snippets/nginx.js create mode 100644 BTPanel/static/ace/snippets/objectivec.js create mode 100644 BTPanel/static/ace/snippets/perl.js create mode 100644 BTPanel/static/ace/snippets/perl6.js create mode 100644 BTPanel/static/ace/snippets/pgsql.js create mode 100644 BTPanel/static/ace/snippets/php.js create mode 100644 BTPanel/static/ace/snippets/php_laravel_blade.js create mode 100644 BTPanel/static/ace/snippets/powershell.js create mode 100644 BTPanel/static/ace/snippets/python.js create mode 100644 BTPanel/static/ace/snippets/r.js create mode 100644 BTPanel/static/ace/snippets/ruby.js create mode 100644 BTPanel/static/ace/snippets/rust.js create mode 100644 BTPanel/static/ace/snippets/sass.js create mode 100644 BTPanel/static/ace/snippets/scss.js create mode 100644 BTPanel/static/ace/snippets/sh.js create mode 100644 BTPanel/static/ace/snippets/sql.js create mode 100644 BTPanel/static/ace/snippets/sqlserver.js create mode 100644 BTPanel/static/ace/snippets/swift.js create mode 100644 BTPanel/static/ace/snippets/text.js create mode 100644 BTPanel/static/ace/snippets/typescript.js create mode 100644 BTPanel/static/ace/snippets/vbscript.js create mode 100644 BTPanel/static/ace/snippets/verilog.js create mode 100644 BTPanel/static/ace/snippets/xml.js create mode 100644 BTPanel/static/ace/snippets/yaml.js create mode 100644 BTPanel/static/ace/styles/icons.css create mode 100644 BTPanel/static/ace/theme-chrome.js create mode 100644 BTPanel/static/ace/theme-monokai.js create mode 100644 BTPanel/static/ace/worker-css.js create mode 100644 BTPanel/static/ace/worker-html.js create mode 100644 BTPanel/static/ace/worker-javascript.js create mode 100644 BTPanel/static/ace/worker-json.js create mode 100644 BTPanel/static/ace/worker-lua.js create mode 100644 BTPanel/static/ace/worker-php.js create mode 100644 BTPanel/static/ace/worker-xml.js create mode 100644 BTPanel/static/img/dep_ico/Centcount_Analytics.png create mode 100644 BTPanel/static/img/dep_ico/DBShop.png create mode 100644 BTPanel/static/img/dep_ico/JTBC.png create mode 100644 BTPanel/static/img/dep_ico/Temmoku_MVC.png create mode 100644 BTPanel/static/img/dep_ico/ThinkPHP-5.0.png create mode 100644 BTPanel/static/img/dep_ico/URLshorting.png create mode 100644 BTPanel/static/img/dep_ico/YoungxjTools.png create mode 100644 BTPanel/static/img/dep_ico/ZFAKA.png create mode 100644 BTPanel/static/img/dep_ico/bfz.png create mode 100644 BTPanel/static/img/dep_ico/bty.png create mode 100644 BTPanel/static/img/dep_ico/chengxuxia.png create mode 100644 BTPanel/static/img/dep_ico/codeigniter.png create mode 100644 BTPanel/static/img/dep_ico/crmeb.png create mode 100644 BTPanel/static/img/dep_ico/doxcx.png create mode 100644 BTPanel/static/img/dep_ico/ecshop.png create mode 100644 BTPanel/static/img/dep_ico/emlog.png create mode 100644 BTPanel/static/img/dep_ico/empirecms.png create mode 100644 BTPanel/static/img/dep_ico/jtbc3.png create mode 100644 BTPanel/static/img/dep_ico/lovewall.png create mode 100644 BTPanel/static/img/dep_ico/phpcms.png create mode 100644 BTPanel/static/img/dep_ico/qrpay.png create mode 100644 BTPanel/static/img/dep_ico/sentcms.png create mode 100644 BTPanel/static/img/dep_ico/skm.png create mode 100644 BTPanel/static/img/dep_ico/test.png create mode 100644 BTPanel/static/img/dep_ico/test2.png create mode 100644 BTPanel/static/img/dep_ico/tipask.png create mode 100644 BTPanel/static/img/dep_ico/ttttt.png create mode 100644 BTPanel/static/img/dep_ico/wdja.png create mode 100644 BTPanel/static/img/dep_ico/wee7.png create mode 100644 BTPanel/static/img/dep_ico/wordpress.png create mode 100644 BTPanel/static/img/dep_ico/wp.png create mode 100644 BTPanel/static/img/dep_ico/z-blog.png create mode 100644 BTPanel/static/img/dep_ico/zfaka-zlkb.png create mode 100644 "BTPanel/static/img/dep_ico/\345\270\235\345\233\275CMS.png" create mode 100644 "BTPanel/static/img/dep_ico/\345\276\256\346\223\216.png" create mode 100644 class/site_dir_auth.py diff --git a/BTPanel/__init__.py b/BTPanel/__init__.py index dde1b6e3..bfac2365 100644 --- a/BTPanel/__init__.py +++ b/BTPanel/__init__.py @@ -98,7 +98,7 @@ def request_check(): if domain_check: return domain_check if public.is_local(): not_networks = ['uninstall_plugin','install_plugin','UpdatePanel'] - if request.args.get('action') in not_networks: + if request.args.get('action') in not_networks: return public.returnJson(False,'This feature is not available in offline mode!'),json_header if app.config['BASIC_AUTH_OPEN']: @@ -109,7 +109,7 @@ def request_check(): tips = '_bt.cn' if public.md5(auth.username.strip() + tips) != app.config['BASIC_AUTH_USERNAME'] or public.md5(auth.password.strip() + tips) != app.config['BASIC_AUTH_PASSWORD']: return send_authenticated() - + @app.teardown_request def request_end(reques = None): @@ -162,6 +162,7 @@ def login(): if hasattr(get,'dologin'): login_path = '/login' + if not 'login' in session: return redirect(login_path) if os.path.exists(admin_path_file): login_path = route_path if session['login'] != False: session['login'] = False; @@ -216,7 +217,7 @@ def site(pdata = None): import panelSite siteObject = panelSite.panelSite() - defs = ('GetRedirectFile','SaveRedirectFile','DeleteRedirect','GetRedirectList','CreateRedirect','ModifyRedirect','GetSiteLogs','GetSiteDomains','GetSecurity','SetSecurity','ProxyCache','CloseToHttps','HttpToHttps','SetEdate','SetRewriteTel','GetCheckSafe','CheckSafe','GetDefaultSite','SetDefaultSite','CloseTomcat','SetTomcat','apacheAddPort','AddSite','GetPHPVersion','SetPHPVersion','DeleteSite','AddDomain','DelDomain','GetDirBinding','AddDirBinding','GetDirRewrite','DelDirBinding','get_site_types','add_site_type','remove_site_type','modify_site_type_name','set_site_type','UpdateRulelist','SetSiteRunPath','GetSiteRunPath','SetPath','SetIndex','GetIndex','GetDirUserINI','SetDirUserINI','GetRewriteList','SetSSL','SetSSLConf','CreateLet','CloseSSLConf','GetSSL','SiteStart','SiteStop','Set301Status','Get301Status','CloseLimitNet','SetLimitNet','GetLimitNet','RemoveProxy','GetProxyList','GetProxyDetals','CreateProxy','ModifyProxy','GetProxyFile','SaveProxyFile','ToBackup','DelBackup','GetSitePHPVersion','logsOpen','GetLogsStatus','CloseHasPwd','SetHasPwd','GetHasPwd','GetDnsApi','SetDnsApi') + defs = ('modify_dir_auth_pass','get_dir_auth','delete_dir_auth','set_dir_auth','GetRedirectFile','SaveRedirectFile','DeleteRedirect','GetRedirectList','CreateRedirect','ModifyRedirect','GetSiteLogs','GetSiteDomains','GetSecurity','SetSecurity','ProxyCache','CloseToHttps','HttpToHttps','SetEdate','SetRewriteTel','GetCheckSafe','CheckSafe','GetDefaultSite','SetDefaultSite','CloseTomcat','SetTomcat','apacheAddPort','AddSite','GetPHPVersion','SetPHPVersion','DeleteSite','AddDomain','DelDomain','GetDirBinding','AddDirBinding','GetDirRewrite','DelDirBinding','get_site_types','add_site_type','remove_site_type','modify_site_type_name','set_site_type','UpdateRulelist','SetSiteRunPath','GetSiteRunPath','SetPath','SetIndex','GetIndex','GetDirUserINI','SetDirUserINI','GetRewriteList','SetSSL','SetSSLConf','CreateLet','CloseSSLConf','GetSSL','SiteStart','SiteStop','Set301Status','Get301Status','CloseLimitNet','SetLimitNet','GetLimitNet','RemoveProxy','GetProxyList','GetProxyDetals','CreateProxy','ModifyProxy','GetProxyFile','SaveProxyFile','ToBackup','DelBackup','GetSitePHPVersion','logsOpen','GetLogsStatus','CloseHasPwd','SetHasPwd','GetHasPwd','GetDnsApi','SetDnsApi') return publicObject(siteObject,defs,None,pdata); @app.route('/ftp',methods=method_all) @@ -250,13 +251,15 @@ def FtpPort(): @app.route('/database',methods=method_all) def database(pdata = None): + import ajax comReturn = comm.local() if comReturn: return comReturn if request.method == method_get[0] and not pdata: pmd = get_phpmyadmin_dir(); session['phpmyadminDir'] = False if pmd: - session['phpmyadminDir'] = 'http://' + public.GetHost() + ':'+ pmd[1] + '/' + pmd[0]; + session['phpmyadminDir'] = 'http://' + public.GetHost() + ':'+ pmd[1] + '/' + pmd[0] + ajax.ajax().set_phpmyadmin_session() data = {} data['isSetup'] = os.path.exists(public.GetConfigValue('setup_path') + '/mysql/bin'); data['mysql_root'] = public.M('config').where('id=?',(1,)).getField('mysql_root'); @@ -353,6 +356,15 @@ def san_baseline(pdata=None): defs = ('start', 'get_api_log', 'get_resut', 'get_ssh_errorlogin','repair','repair_all') return publicObject(dataObject, defs, None, pdata) +@app.route('/password', methods=method_all) +def panel_password(pdata=None): + comReturn = comm.local() + if comReturn: return comReturn + import password + dataObject = password.password() + defs = ('set_root_password', 'get_mysql_root', 'set_mysql_password', 'set_panel_password', 'SetPassword', 'SetSshKey','StopKey','GetConfig','StopPassword','GetKey','get_databses','rem_mysql_pass','set_mysql_access',"get_panel_username") + return publicObject(dataObject, defs, None, pdata) + @app.route('/bak', methods=method_all) def backup_bak(pdata=None): @@ -365,7 +377,6 @@ def backup_bak(pdata=None): return publicObject(dataObject, defs, None, pdata) - @app.route('/abnormal', methods=method_all) def abnormal(pdata=None): comReturn = comm.local() @@ -388,7 +399,7 @@ def files(pdata = None): defs = ('CheckExistsFiles','GetExecLog','GetSearch','ExecShell','GetExecShellMsg','UploadFile','GetDir','CreateFile','CreateDir','DeleteDir','DeleteFile', 'CopyFile','CopyDir','MvFile','GetFileBody','SaveFileBody','Zip','UnZip','SearchFiles','upload','read_history', 'GetFileAccess','SetFileAccess','GetDirSize','SetBatchData','BatchPaste','install_rar','get_path_size', - 'DownloadFile','GetTaskSpeed','CloseLogs','InstallSoft','UninstallSoft','SaveTmpFile','GetTmpFile', + 'DownloadFile','GetTaskSpeed','CloseLogs','InstallSoft','UninstallSoft','SaveTmpFile','GetTmpFile','del_files_store','add_files_store','get_files_store','del_files_store_types','add_files_store_types', 'RemoveTask','ActionTask','Re_Recycle_bin','Get_Recycle_bin','Del_Recycle_bin','Close_Recycle_bin','Recycle_bin') return publicObject(filesObject,defs,None,pdata); @@ -449,7 +460,7 @@ def config(pdata = None): if public.is_local(): data['is_local'] = 'checked' return render_template( 'config.html',data=data) import config - defs = ('get_cert_source','set_local','set_debug','get_panel_error_logs','clean_panel_error_logs','get_basic_auth_stat','set_basic_auth','get_cli_php_version','get_tmp_token','set_cli_php_version','DelOldSession', 'GetSessionCount', 'SetSessionConf', 'GetSessionConf','get_ipv6_listen','set_ipv6_status','GetApacheValue','SetApacheValue','GetNginxValue','SetNginxValue','get_token','set_token','set_admin_path','is_pro','get_php_config','get_config','SavePanelSSL','GetPanelSSL','GetPHPConf','SetPHPConf','GetPanelList','AddPanelInfo','SetPanelInfo','DelPanelInfo','ClickPanelInfo','SetPanelSSL','SetTemplates','Set502','setPassword','setUsername','setPanel','setPathInfo','setPHPMaxSize','getFpmConfig','setFpmConfig','setPHPMaxTime','syncDate','setPHPDisable','SetControl','ClosePanel','AutoUpdatePanel','SetPanelLock') + defs = ('get_php_session_path','set_php_session_path','get_cert_source','set_local','set_debug','get_panel_error_logs','clean_panel_error_logs','get_basic_auth_stat','set_basic_auth','get_cli_php_version','get_tmp_token','set_cli_php_version','DelOldSession', 'GetSessionCount', 'SetSessionConf', 'GetSessionConf','get_ipv6_listen','set_ipv6_status','GetApacheValue','SetApacheValue','GetNginxValue','SetNginxValue','get_token','set_token','set_admin_path','is_pro','get_php_config','get_config','SavePanelSSL','GetPanelSSL','GetPHPConf','SetPHPConf','GetPanelList','AddPanelInfo','SetPanelInfo','DelPanelInfo','ClickPanelInfo','SetPanelSSL','SetTemplates','Set502','setPassword','setUsername','setPanel','setPathInfo','setPHPMaxSize','getFpmConfig','setFpmConfig','setPHPMaxTime','syncDate','setPHPDisable','SetControl','ClosePanel','AutoUpdatePanel','SetPanelLock') return publicObject(config.config(),defs,None,pdata); @app.route('/ajax',methods=method_all) @@ -458,7 +469,7 @@ def ajax(pdata = None): if comReturn: return comReturn import ajax ajaxObject = ajax.ajax() - defs = ('set_phpmyadmin_ssl','get_phpmyadmin_ssl','check_user_auth','to_not_beta','get_beta_logs','apple_beta','GetApacheStatus','GetCloudHtml','get_load_average','GetOpeLogs','GetFpmLogs','GetFpmSlowLogs','SetMemcachedCache','GetMemcachedStatus','GetRedisStatus','GetWarning','SetWarning','CheckLogin','GetSpeed','GetAd','phpSort','ToPunycode','GetBetaStatus','SetBeta','setPHPMyAdmin','delClose','KillProcess','GetPHPInfo','GetQiniuFileList','UninstallLib','InstallLib','SetQiniuAS','GetQiniuAS','GetLibList','GetProcessList','GetNetWorkList','GetNginxStatus','GetPHPStatus','GetTaskCount','GetSoftList','GetNetWorkIo','GetDiskIo','GetCpuIo','CheckInstalled','UpdatePanel','GetInstalled','GetPHPConfig','SetPHPConfig') + defs = ('change_phpmyadmin_ssl_port','set_phpmyadmin_ssl','get_phpmyadmin_ssl','check_user_auth','to_not_beta','get_beta_logs','apple_beta','GetApacheStatus','GetCloudHtml','get_load_average','GetOpeLogs','GetFpmLogs','GetFpmSlowLogs','SetMemcachedCache','GetMemcachedStatus','GetRedisStatus','GetWarning','SetWarning','CheckLogin','GetSpeed','GetAd','phpSort','ToPunycode','GetBetaStatus','SetBeta','setPHPMyAdmin','delClose','KillProcess','GetPHPInfo','GetQiniuFileList','UninstallLib','InstallLib','SetQiniuAS','GetQiniuAS','GetLibList','GetProcessList','GetNetWorkList','GetNginxStatus','GetPHPStatus','GetTaskCount','GetSoftList','GetNetWorkIo','GetDiskIo','GetCpuIo','CheckInstalled','UpdatePanel','GetInstalled','GetPHPConfig','SetPHPConfig') return publicObject(ajaxObject,defs,None,pdata); @app.route('/system',methods=method_all) @@ -549,6 +560,7 @@ def panel_public(): get = get_input(); get.client_ip = public.GetClientIp(); if not hasattr(get,'name'): get.name = '' + if not hasattr(get,'fun'): return abort(404) if not public.path_safe_check("%s/%s" % (get.name,get.fun)): return abort(404) if get.fun in ['scan_login', 'login_qrcode', 'set_login', 'is_scan_ok', 'blind','static']: if get.fun == 'static': @@ -622,7 +634,7 @@ def panel_other(name=None,fun = None,stype=None): if len(tmp) == 1: tmp.append('') stype = tmp[1] args.fun = fun - + #初始化插件对象 try: is_php = os.path.exists(p_path + '/index.php') @@ -854,7 +866,8 @@ def panel_cloud(): @socketio.on('connect') def socket_connect(msg=None): if not check_login(): - raise emit('server_response',{'data':public.getMsg('INIT_WEBSSH_LOGOUT')}) + emit('server_response',{'data':public.getMsg('111')}) + return False @socketio.on('webssh') def webssh(msg): @@ -907,14 +920,19 @@ def connect_ssh(user=None,passwd=None): import firewalls fw = firewalls.firewalls() get = common.dict_obj() - get.status = '0'; - fw.SetSshStatus(get) + ssh_status = fw.GetSshInfo(get)['status'] + if not ssh_status: + get.status = '0'; + fw.SetSshStatus(get) + if not user: ssh.connect('127.0.0.1', public.GetSSHPort(),pkey=key) else: ssh.connect('127.0.0.1', public.GetSSHPort(),username=user,password=passwd) - get.status = '1'; - fw.SetSshStatus(get); + + if not ssh_status: + get.status = '1'; + fw.SetSshStatus(get); shell = ssh.invoke_shell(term='xterm', width=100, height=29) shell.setblocking(0) return True @@ -1065,13 +1083,21 @@ def internalerror(e): #获取输入数据 def get_input(): data = common.dict_obj() - post = request.form.to_dict() - get = request.args.to_dict() - data.args = get - for key in get.keys(): - data[key] = str(get[key]) - for key in post.keys(): - data[key] = str(post[key]) + exludes = ['blob'] + for key in request.args.keys(): + data[key] = str(request.args.get(key,'')) + try: + for key in request.form.keys(): + if key in exludes: continue + data[key] = str(request.form.get(key,'')) + except: + try: + post = request.form.to_dict() + for key in post.keys(): + if key in exludes: continue + data[key] = str(post[key]) + except: + pass if not hasattr(data,'data'): data.data = [] return data diff --git a/BTPanel/static/ace/ace.js b/BTPanel/static/ace/ace.js new file mode 100644 index 00000000..bc021c62 --- /dev/null +++ b/BTPanel/static/ace/ace.js @@ -0,0 +1,17 @@ +(function(){function o(n){var i=e;n&&(e[n]||(e[n]={}),i=e[n]);if(!i.define||!i.define.packaged)t.original=i.define,i.define=t,i.define.packaged=!0;if(!i.require||!i.require.packaged)r.original=i.require,i.require=r,i.require.packaged=!0}var ACE_NAMESPACE="",e=function(){return this}();!e&&typeof window!="undefined"&&(e=window);if(!ACE_NAMESPACE&&typeof requirejs!="undefined")return;var t=function(e,n,r){if(typeof e!="string"){t.original?t.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace());return}arguments.length==2&&(r=n),t.modules[e]||(t.payloads[e]=r,t.modules[e]=null)};t.modules={},t.payloads={};var n=function(e,t,n){if(typeof t=="string"){var i=s(e,t);if(i!=undefined)return n&&n(),i}else if(Object.prototype.toString.call(t)==="[object Array]"){var o=[];for(var u=0,a=t.length;u1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;et.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t==="undefined"||t==="boolean"||t==="number"||t==="string"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n=="function"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r=="function"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError("Function.prototype.bind called on incompatible "+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,"__defineGetter__"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,"XXX"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h>>0;if(a(t)!="[object Function]")throw new TypeError;while(++s>>0,s=Array(i),o=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var u=0;u>>0,s=[],o,u=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var f=0;f>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduce of empty array with no initial value");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(!0);for(;s>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduceRight of empty array with no initial value");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)=="[object String]"?this.split(""):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document=="undefined"||w(document.createElement("div"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T="Property description must be an object: ",N="Object.defineProperty called on non-object: ",C="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(N+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,"value"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,"get")&&l(t,n,r.get),f(r,"set")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(f(t,n))n+="?";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n=0?parseFloat((i.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=i.match(/ Gecko\/\d+/),t.isOpera=window.opera&&Object.prototype.toString.call(window.opera)=="[object Opera]",t.isWebKit=parseFloat(i.split("WebKit/")[1])||undefined,t.isChrome=parseFloat(i.split(" Chrome/")[1])||undefined,t.isEdge=parseFloat(i.split(" Edge/")[1])||undefined,t.isAIR=i.indexOf("AdobeAIR")>=0,t.isIPad=i.indexOf("iPad")>=0,t.isAndroid=i.indexOf("Android")>=0,t.isChromeOS=i.indexOf(" CrOS ")>=0,t.isIOS=/iPad|iPhone|iPod/.test(i)&&!window.MSStream,t.isIOS&&(t.isMac=!0),t.isMobile=t.isIPad||t.isAndroid}),define("ace/lib/dom",["require","exports","module","ace/lib/useragent"],function(e,t,n){"use strict";var r=e("./useragent"),i="http://www.w3.org/1999/xhtml";t.buildDom=function o(e,t,n){if(typeof e=="string"&&e){var r=document.createTextNode(e);return t&&t.appendChild(r),r}if(!Array.isArray(e))return e;if(typeof e[0]!="string"||!e[0]){var i=[];for(var s=0;s=1.5:!0;if(typeof document!="undefined"){var s=document.createElement("div");t.HI_DPI&&s.style.transform!==undefined&&(t.HAS_CSS_TRANSFORMS=!0),!r.isEdge&&typeof s.style.animationName!="undefined"&&(t.HAS_CSS_ANIMATION=!0),s=null}t.HAS_CSS_TRANSFORMS?t.translate=function(e,t,n){e.style.transform="translate("+Math.round(t)+"px, "+Math.round(n)+"px)"}:t.translate=function(e,t,n){e.style.top=Math.round(n)+"px",e.style.left=Math.round(t)+"px"}}),define("ace/lib/oop",["require","exports","module"],function(e,t,n){"use strict";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define("ace/lib/keys",["require","exports","module","ace/lib/oop"],function(e,t,n){"use strict";var r=e("./oop"),i=function(){var e={MODIFIER_KEYS:{16:"Shift",17:"Ctrl",18:"Alt",224:"Meta"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,"super":8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9","-13":"NumpadEnter",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock"},PRINTABLE_KEYS:{32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",111:"/",106:"*"}},t,n;for(n in e.FUNCTION_KEYS)t=e.FUNCTION_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);for(n in e.PRINTABLE_KEYS)t=e.PRINTABLE_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);return r.mixin(e,e.MODIFIER_KEYS),r.mixin(e,e.PRINTABLE_KEYS),r.mixin(e,e.FUNCTION_KEYS),e.enter=e["return"],e.escape=e.esc,e.del=e["delete"],e[173]="-",function(){var t=["cmd","ctrl","alt","shift"];for(var n=Math.pow(2,t.length);n--;)e.KEY_MODS[n]=t.filter(function(t){return n&e.KEY_MODS[t]}).join("-")+"-"}(),e.KEY_MODS[0]="",e.KEY_MODS[-1]="input-",e}();r.mixin(t,i),t.keyCodeToString=function(e){var t=i[e];return typeof t!="string"&&(t=String.fromCharCode(e)),t.toLowerCase()}}),define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,n){"use strict";function a(e,t,n){var a=u(t);if(!i.isMac&&s){t.getModifierState&&(t.getModifierState("OS")||t.getModifierState("Win"))&&(a|=8);if(s.altGr){if((3&a)==3)return;s.altGr=0}if(n===18||n===17){var f="location"in t?t.location:t.keyLocation;if(n===17&&f===1)s[n]==1&&(o=t.timeStamp);else if(n===18&&a===3&&f===2){var l=t.timeStamp-o;l<50&&(s.altGr=!0)}}}n in r.MODIFIER_KEYS&&(n=-1),a&8&&n>=91&&n<=93&&(n=-1);if(!a&&n===13){var f="location"in t?t.location:t.keyLocation;if(f===3){e(t,a,-n);if(t.defaultPrevented)return}}if(i.isChromeOS&&a&8){e(t,a,n);if(t.defaultPrevented)return;a&=-9}return!!a||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS?e(t,a,n):!1}function f(){s=Object.create(null)}var r=e("./keys"),i=e("./useragent"),s=null,o=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n.call(e,window.event)};n._wrapper=r,e.attachEvent("on"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return e.type=="dblclick"?0:e.type=="contextmenu"||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,r){function i(e){n&&n(e),r&&r(e),t.removeListener(document,"mousemove",n,!0),t.removeListener(document,"mouseup",i,!0),t.removeListener(document,"dragstart",i,!0)}return t.addListener(document,"mousemove",n,!0),t.addListener(document,"mouseup",i,!0),t.addListener(document,"dragstart",i,!0),i},t.addTouchMoveListener=function(e,n){var r,i;t.addListener(e,"touchstart",function(e){var t=e.touches,n=t[0];r=n.clientX,i=n.clientY}),t.addListener(e,"touchmove",function(e){var t=e.touches;if(t.length>1)return;var s=t[0];e.wheelX=r-s.clientX,e.wheelY=i-s.clientY,r=s.clientX,i=s.clientY,n(e)})},t.addMouseWheelListener=function(e,n){"onmousewheel"in e?t.addListener(e,"mousewheel",function(e){var t=8;e.wheelDeltaX!==undefined?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)}):"onwheel"in e?t.addListener(e,"wheel",function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=(e.deltaX||0)*5,e.wheelY=(e.deltaY||0)*5}n(e)}):t.addListener(e,"DOMMouseScroll",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=(e.detail||0)*5,e.wheelY=0):(e.wheelX=0,e.wheelY=(e.detail||0)*5),n(e)})},t.addMultiMouseDownListener=function(e,n,r,s){function c(e){t.getButton(e)!==0?o=0:e.detail>1?(o++,o>4&&(o=1)):o=1;if(i.isIE){var c=Math.abs(e.clientX-u)>5||Math.abs(e.clientY-a)>5;if(!f||c)o=1;f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),o==1&&(u=e.clientX,a=e.clientY)}e._clicks=o,r[s]("mousedown",e);if(o>4)o=0;else if(o>1)return r[s](l[o],e)}function h(e){o=2,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),r[s]("mousedown",e),r[s](l[o],e)}var o=0,u,a,f,l={2:"dblclick",3:"tripleclick",4:"quadclick"};Array.isArray(e)||(e=[e]),e.forEach(function(e){t.addListener(e,"mousedown",c),i.isOldIE&&t.addListener(e,"dblclick",h)})};var u=!i.isMac||!i.isOpera||"KeyboardEvent"in window?function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}:function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)};t.getModifierString=function(e){return r.KEY_MODS[u(e)]},t.addCommandKeyListener=function(e,n){var r=t.addListener;if(i.isOldGecko||i.isOpera&&!("KeyboardEvent"in window)){var o=null;r(e,"keydown",function(e){o=e.keyCode}),r(e,"keypress",function(e){return a(n,e,o)})}else{var u=null;r(e,"keydown",function(e){s[e.keyCode]=(s[e.keyCode]||0)+1;var t=a(n,e,e.keyCode);return u=e.defaultPrevented,t}),r(e,"keypress",function(e){u&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),u=null)}),r(e,"keyup",function(e){s[e.keyCode]=null}),s||(f(),r(window,"focus",f))}};if(typeof window=="object"&&window.postMessage&&!i.isOldIE){var l=1;t.nextTick=function(e,n){n=n||window;var r="zero-timeout-message-"+l++,i=function(s){s.data==r&&(t.stopPropagation(s),t.removeListener(n,"message",i),e())};t.addListener(n,"message",i),n.postMessage(r,"*")}}t.$idleBlocked=!1,t.onIdle=function(e,n){return setTimeout(function r(){t.$idleBlocked?setTimeout(r,100):e()},n)},t.$idleBlockId=null,t.blockIdle=function(e){t.$idleBlockId&&clearTimeout(t.$idleBlockId),t.$idleBlocked=!0,t.$idleBlockId=setTimeout(function(){t.$idleBlocked=!1},e||100)},t.nextFrame=typeof window=="object"&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),define("ace/range",["require","exports","module"],function(e,t,n){"use strict";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?tthis.end.column?1:0:ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var r={row:t+1,column:0};else if(this.start.row0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n63,l=400,c=e("../lib/keys"),h=c.KEY_MODS,p=i.isIOS,d=p?/\s/:/\n/,v=function(e,t){function W(){x=!0,n.blur(),n.focus(),x=!1}function V(e){e.keyCode==27&&n.value.lengthC&&T[s]=="\n")o=c.end;else if(rC&&T.slice(0,s).split("\n").length>2)o=c.down;else if(s>C&&T[s-1]==" ")o=c.right,u=h.option;else if(s>C||s==C&&C!=N&&r==s)o=c.right;r!==s&&(u|=h.shift),o&&(t.onCommandKey(null,u,o),N=r,C=s,A(""))};document.addEventListener("selectionchange",s),t.on("destroy",function(){document.removeEventListener("selectionchange",s)})}var n=s.createElement("textarea");n.className="ace_text-input",n.setAttribute("wrap","off"),n.setAttribute("autocorrect","off"),n.setAttribute("autocapitalize","off"),n.setAttribute("spellcheck",!1),n.style.opacity="0",e.insertBefore(n,e.firstChild);var v=!1,m=!1,g=!1,y=!1,b="",w=!0,E=!1;i.isMobile||(n.style.fontSize="1px");var S=!1,x=!1,T="",N=0,C=0;try{var k=document.activeElement===n}catch(L){}r.addListener(n,"blur",function(e){if(x)return;t.onBlur(e),k=!1}),r.addListener(n,"focus",function(e){if(x)return;k=!0;if(i.isEdge)try{if(!document.hasFocus())return}catch(e){}t.onFocus(e),i.isEdge?setTimeout(A):A()}),this.$focusScroll=!1,this.focus=function(){if(b||f||this.$focusScroll=="browser")return n.focus({preventScroll:!0});var e=n.style.top;n.style.position="fixed",n.style.top="0px";try{var t=n.getBoundingClientRect().top!=0}catch(r){return}var i=[];if(t){var s=n.parentElement;while(s&&s.nodeType==1)i.push(s),s.setAttribute("ace_nocontext",!0),!s.parentElement&&s.getRootNode?s=s.getRootNode().host:s=s.parentElement}n.focus({preventScroll:!0}),t&&i.forEach(function(e){e.removeAttribute("ace_nocontext")}),setTimeout(function(){n.style.position="",n.style.top=="0px"&&(n.style.top=e)},0)},this.blur=function(){n.blur()},this.isFocused=function(){return k},t.on("beforeEndOperation",function(){if(t.curOp&&t.curOp.command.name=="insertstring")return;g&&(T=n.value="",z()),A()});var A=p?function(e){if(!k||v&&!e||y)return;e||(e="");var r="\n ab"+e+"cde fg\n";r!=n.value&&(n.value=T=r);var i=4,s=4+(e.length||(t.selection.isEmpty()?0:1));(N!=i||C!=s)&&n.setSelectionRange(i,s),N=i,C=s}:function(){if(g||y)return;if(!k&&!D)return;g=!0;var e=t.selection,r=e.getRange(),i=e.cursor.row,s=r.start.column,o=r.end.column,u=t.session.getLine(i);if(r.start.row!=i){var a=t.session.getLine(i-1);s=r.start.rowi+1?f.length:o,o+=u.length+1,u=u+"\n"+f}u.length>l&&(s=T.length&&e.value===T&&T&&e.selectionEnd!==C},M=function(e){if(g)return;v?v=!1:O(n)&&(t.selectAll(),A())},_=null;this.setInputHandler=function(e){_=e},this.getInputHandler=function(){return _};var D=!1,P=function(e,r){D&&(D=!1);if(m)return A(),e&&t.onPaste(e),m=!1,"";var i=n.selectionStart,s=n.selectionEnd,o=N,u=T.length-C,a=e,f=e.length-i,l=e.length-s,c=0;while(o>0&&T[c]==e[c])c++,o--;a=a.slice(c),c=1;while(u>0&&T.length-c>N-1&&T[T.length-c]==e[e.length-c])c++,u--;return f-=c-1,l-=c-1,a=a.slice(0,a.length-c+1),!r&&f==a.length&&!o&&!u&&!l?"":(y=!0,a&&!o&&!u&&!f&&!l||S?t.onTextInput(a):t.onTextInput(a,{extendLeft:o,extendRight:u,restoreStart:f,restoreEnd:l}),y=!1,T=e,N=i,C=s,a)},H=function(e){if(g)return U();var t=n.value,r=P(t,!0);(t.length>l+100||d.test(r))&&A()},B=function(e,t,n){var r=e.clipboardData||window.clipboardData;if(!r||u)return;var i=a||n?"Text":"text/plain";try{return t?r.setData(i,t)!==!1:r.getData(i)}catch(e){if(!n)return B(e,t,!0)}},j=function(e,i){var s=t.getCopyText();if(!s)return r.preventDefault(e);B(e,s)?(p&&(A(s),v=s,setTimeout(function(){v=!1},10)),i?t.onCut():t.onCopy(),r.preventDefault(e)):(v=!0,n.value=s,n.select(),setTimeout(function(){v=!1,A(),i?t.onCut():t.onCopy()}))},F=function(e){j(e,!0)},I=function(e){j(e,!1)},q=function(e){var s=B(e);typeof s=="string"?(s&&t.onPaste(s,e),i.isIE&&setTimeout(A),r.preventDefault(e)):(n.value="",m=!0)};r.addCommandKeyListener(n,t.onCommandKey.bind(t)),r.addListener(n,"select",M),r.addListener(n,"input",H),r.addListener(n,"cut",F),r.addListener(n,"copy",I),r.addListener(n,"paste",q),(!("oncut"in n)||!("oncopy"in n)||!("onpaste"in n))&&r.addListener(e,"keydown",function(e){if(i.isMac&&!e.metaKey||!e.ctrlKey)return;switch(e.keyCode){case 67:I(e);break;case 86:q(e);break;case 88:F(e)}});var R=function(e){if(g||!t.onCompositionStart||t.$readOnly)return;g={};if(S)return;setTimeout(U,0),t.on("mousedown",W);var r=t.getSelectionRange();r.end.row=r.start.row,r.end.column=r.start.column,g.markerRange=r,g.selectionStart=N,t.onCompositionStart(g),g.useTextareaForIME?(n.value="",T="",N=0,C=0):(n.msGetInputContext&&(g.context=n.msGetInputContext()),n.getInputContext&&(g.context=n.getInputContext()))},U=function(){if(!g||!t.onCompositionUpdate||t.$readOnly)return;if(S)return W();if(g.useTextareaForIME)t.onCompositionUpdate(n.value);else{var e=n.value;P(e),g.markerRange&&(g.context&&(g.markerRange.start.column=g.selectionStart=g.context.compositionStartOffset),g.markerRange.end.column=g.markerRange.start.column+C-g.selectionStart)}},z=function(e){if(!t.onCompositionEnd||t.$readOnly)return;g=!1,t.onCompositionEnd(),t.off("mousedown",W),e&&H()},X=o.delayedCall(U,50).schedule.bind(null,null);r.addListener(n,"compositionstart",R),r.addListener(n,"compositionupdate",U),r.addListener(n,"keyup",V),r.addListener(n,"keydown",X),r.addListener(n,"compositionend",z),this.getElement=function(){return n},this.setCommandMode=function(e){S=e,n.readOnly=!1},this.setReadOnly=function(e){S||(n.readOnly=e)},this.setCopyWithEmptySelection=function(e){E=e},this.onContextMenu=function(e){D=!0,A(),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,o){b||(b=n.style.cssText),n.style.cssText=(o?"z-index:100000;":"")+(i.isIE?"opacity:0.1;":"")+"text-indent: -"+(N+C)*t.renderer.characterWidth*.5+"px;";var u=t.container.getBoundingClientRect(),a=s.computedStyle(t.container),f=u.top+(parseInt(a.borderTopWidth)||0),l=u.left+(parseInt(u.borderLeftWidth)||0),c=u.bottom-f-n.clientHeight-2,h=function(e){n.style.left=e.clientX-l-2+"px",n.style.top=Math.min(e.clientY-f-2,c)+"px"};h(e);if(e.type!="mousedown")return;t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout($),i.isWin&&r.capture(t.container,h,J)},this.onContextMenuClose=J;var $,K=function(e){t.textInput.onContextMenu(e),J()};r.addListener(n,"mouseup",K),r.addListener(n,"mousedown",function(e){e.preventDefault(),J()}),r.addListener(t.renderer.scroller,"contextmenu",K),r.addListener(n,"contextmenu",K),p&&Q(e,t,n)};t.TextInput=v}),define("ace/mouse/default_handlers",["require","exports","module","ace/lib/useragent"],function(e,t,n){"use strict";function o(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler("mousedown",this.onMouseDown.bind(e)),t.setDefaultHandler("dblclick",this.onDoubleClick.bind(e)),t.setDefaultHandler("tripleclick",this.onTripleClick.bind(e)),t.setDefaultHandler("quadclick",this.onQuadClick.bind(e)),t.setDefaultHandler("mousewheel",this.onMouseWheel.bind(e)),t.setDefaultHandler("touchmove",this.onTouchMove.bind(e));var n=["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"];n.forEach(function(t){e[t]=this[t]},this),e.selectByLines=this.extendSelectionBy.bind(e,"getLineRange"),e.selectByWords=this.extendSelectionBy.bind(e,"getWordRange")}function u(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}function a(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row==e.end.row-1&&!e.start.column&&!e.end.column)var n=t.column-4;else var n=2*t.row-e.start.row-e.end.row;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}var r=e("../lib/useragent"),i=0,s=550;(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var i=this.editor,s=e.getButton();if(s!==0){var o=i.getSelectionRange(),u=o.isEmpty();(u||s==1)&&i.selection.moveToPosition(n),s==2&&(i.textInput.onContextMenu(e.domEvent),r.isMozilla||e.preventDefault());return}this.mousedownEvent.time=Date.now();if(t&&!i.isFocused()){i.focus();if(this.$focusTimeout&&!this.$clickSelection&&!i.inMultiSelectMode){this.setState("focusWait"),this.captureMouse(e);return}}return this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;if(!this.mousedownEvent)return;this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle("ace_selecting"),this.setState("select")},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var r=this.$clickSelection.comparePoint(n);if(r==-1)e=this.$clickSelection.end;else if(r==1)e=this.$clickSelection.start;else{var i=a(this.$clickSelection,n);n=i.cursor,e=i.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y),i=n.selection[e](r.row,r.column);if(this.$clickSelection){var s=this.$clickSelection.comparePoint(i.start),o=this.$clickSelection.comparePoint(i.end);if(s==-1&&o<=0){t=this.$clickSelection.end;if(i.end.row!=r.row||i.end.column!=r.column)r=i.start}else if(o==1&&s>=0){t=this.$clickSelection.start;if(i.start.row!=r.row||i.start.column!=r.column)r=i.end}else if(s==-1&&o==1)r=i.end,t=i.start;else{var u=a(this.$clickSelection,r);r=u.cursor,t=u.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=u(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>i||t-this.mousedownEvent.time>this.$focusTimeout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session,i=r.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState("select")):(i=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines");var r=n.getSelectionRange();r.isMultiLine()&&r.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(r.start.row),this.$clickSelection.end=n.selection.getLineRange(r.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(e.getAccelKey())return;e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,r=e.domEvent.timeStamp,i=r-n.t,o=i?e.wheelX/i:n.vx,u=i?e.wheelY/i:n.vy;i=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(f=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(f=!0);if(f)n.allowed=r;else if(r-n.allowedt.session.documentToScreenRow(l.row,l.column))return c()}if(f==s)return;f=s.text.join("
"),i.setHtml(f),i.show(),t._signal("showGutterTooltip",i),t.on("mousewheel",c);if(e.$tooltipFollowsMouse)h(u);else{var p=u.domEvent.target,d=p.getBoundingClientRect(),v=i.getElement().style;v.left=d.right+"px",v.top=d.bottom+"px"}}function c(){o&&(o=clearTimeout(o)),f&&(i.hide(),f=null,t._signal("hideGutterTooltip",i),t.removeEventListener("mousewheel",c))}function h(e){i.setPosition(e.x,e.y)}var t=e.editor,n=t.renderer.$gutterLayer,i=new a(t.container);e.editor.setDefaultHandler("guttermousedown",function(r){if(!t.isFocused()||r.getButton()!=0)return;var i=n.getRegion(r);if(i=="foldWidgets")return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.setState("selectByLines"),e.captureMouse(r),r.preventDefault()});var o,u,f;e.editor.setDefaultHandler("guttermousemove",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,"ace_fold-widget"))return c();f&&e.$tooltipFollowsMouse&&h(t),u=t;if(o)return;o=setTimeout(function(){o=null,u&&!e.isMousePressed?l():c()},50)}),s.addListener(t.renderer.$gutter,"mouseout",function(e){u=null;if(!f||o)return;o=setTimeout(function(){o=null,c()},50)}),t.on("changeSession",c)}function a(e){o.call(this,e)}var r=e("../lib/dom"),i=e("../lib/oop"),s=e("../lib/event"),o=e("../tooltip").Tooltip;i.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+i>n&&(e-=e+i-n),t+s>r&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=u}),define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!S||i||s)t.moveCursorToPosition(e),S=r,x={x:p,y:d};else{var o=l(x.x,x.y,p,d);o>a?S=null:r-S>=u&&(t.renderer.scrollCursorIntoView(),S=null)}}function N(e,n){var r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,u=t.renderer.scroller.getBoundingClientRect(),a={x:{left:p-u.left,right:u.right-p},y:{top:d-u.top,bottom:u.bottom-d}},f=Math.min(a.x.left,a.x.right),l=Math.min(a.y.top,a.y.bottom),c={row:e.row,column:e.column};f/s<=2&&(c.column+=a.x.left=o&&t.renderer.scrollCursorIntoView(c):E=r:E=null}function C(){var e=g;g=t.renderer.screenToTextCoordinates(p,d),T(g,e),N(g,e)}function k(){m=t.selection.toOrientedRange(),h=t.session.addMarker(m,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(v),C(),v=setInterval(C,20),y=0,i.addListener(document,"mousemove",O)}function L(){clearInterval(v),t.session.removeMarker(h),h=null,t.selection.fromOrientedRange(m),t.isFocused()&&!w&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),m=null,g=null,y=0,E=null,S=null,i.removeListener(document,"mousemove",O)}function O(){A==null&&(A=setTimeout(function(){A!=null&&h&&L()},20))}function M(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return e=="text/plain"||e=="Text"})}function _(e){var t=["copy","copymove","all","uninitialized"],n=["move","copymove","linkmove","all","uninitialized"],r=s.isMac?e.altKey:e.ctrlKey,i="uninitialized";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o="none";return r&&t.indexOf(i)>=0?o="copy":n.indexOf(i)>=0?o="move":t.indexOf(i)>=0&&(o="copy"),o}var t=e.editor,n=r.createElement("img");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",s.isOpera&&(n.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;");var f=["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"];f.forEach(function(t){e[t]=this[t]},this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var c=t.container,h,p,d,v,m,g,y=0,b,w,E,S,x;this.onDragStart=function(e){if(this.cancelDrag||!c.draggable){var r=this;return setTimeout(function(){r.startSelect(),r.captureMouse(e)},0),e.preventDefault()}m=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?"copy":"copyMove",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),i.setDragImage&&i.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),i.clearData(),i.setData("Text",t.session.getTextRange()),w=!0,this.setState("drag")},this.onDragEnd=function(e){c.draggable=!1,w=!1,this.setState(null);if(!t.getReadOnly()){var n=e.dataTransfer.dropEffect;!b&&n=="move"&&t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||k(),y++,e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragOver=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||(k(),y++),A!==null&&(A=null),e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragLeave=function(e){y--;if(y<=0&&h)return L(),b=null,i.preventDefault(e)},this.onDrop=function(e){if(!g)return;var n=e.dataTransfer;if(w)switch(b){case"move":m.contains(g.row,g.column)?m={start:g,end:g}:m=t.moveText(m,g);break;case"copy":m=t.moveText(m,g,!0)}else{var r=n.getData("Text");m={start:g,end:t.session.insert(g,r)},t.focus(),b=null}return L(),i.preventDefault(e)},i.addListener(c,"dragstart",this.onDragStart.bind(e)),i.addListener(c,"dragend",this.onDragEnd.bind(e)),i.addListener(c,"dragenter",this.onDragEnter.bind(e)),i.addListener(c,"dragover",this.onDragOver.bind(e)),i.addListener(c,"dragleave",this.onDragLeave.bind(e)),i.addListener(c,"drop",this.onDrop.bind(e));var A=null}function l(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}var r=e("../lib/dom"),i=e("../lib/event"),s=e("../lib/useragent"),o=200,u=200,a=5;(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var n=s.isWin?"default":"move";e.renderer.setCursorStyle(n),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&this.state=="dragReady"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if(this.state==="dragWait"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(!this.$dragEnabled)return;this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),r=e.getButton(),i=e.domEvent.detail||1;if(i===1&&r===0&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;"unselectable"in o&&(o.unselectable="on");if(t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var u=t.container;u.draggable=!0}this.setState("dragWait")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}).call(f.prototype),t.DragdropHandler=f}),define("ace/lib/net",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("./dom");t.get=function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.onreadystatechange=function(){n.readyState===4&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),i=document.createElement("script");i.src=e,n.appendChild(i),i.onload=i.onreadystatechange=function(e,n){if(n||!i.readyState||i.readyState=="loaded"||i.readyState=="complete")i=i.onload=i.onreadystatechange=null,n||t()}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}}),define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){"use strict";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o1&&(i=n[n.length-2]);var o=a[t+"Path"];return o==null?o=a.basePath:r=="/"&&(t=r=""),o&&o.slice(-1)!="/"&&(o+="/"),o+t+r+i+this.get("suffix")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var i,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{i=e(n)}catch(u){}if(i&&!t.$loading[n])return r&&r(i);t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r);if(t.$loading[n].length>1)return;var a=function(){e([n],function(e){t._emit("load.module",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach(function(t){t&&t(e)})})};if(!t.get("packaged"))return a();s.loadScript(t.moduleUrl(n,o),a),f()};var f=function(){!a.basePath&&!a.workerPath&&!a.modePath&&!a.themePath&&!Object.keys(a.$moduleUrls).length&&(console.error("Unable to infer path to ace from script src,","use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes","or with webpack use ace/webpack-resolver"),f=function(){})};t.init=l}),define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=e("./default_handlers").DefaultHandlers,o=e("./default_gutter_handler").GutterHandler,u=e("./mouse_event").MouseEvent,a=e("./dragdrop_handler").DragdropHandler,f=e("../config"),l=function(e){var t=this;this.editor=e,new s(this),new o(this),new a(this);var n=function(t){var n=!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement());n&&window.focus(),e.focus()},u=e.renderer.getMouseEventTarget();r.addListener(u,"click",this.onMouseEvent.bind(this,"click")),r.addListener(u,"mousemove",this.onMouseMove.bind(this,"mousemove")),r.addMultiMouseDownListener([u,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel")),r.addTouchMoveListener(e.container,this.onTouchMove.bind(this,"touchmove"));var f=e.renderer.$gutter;r.addListener(f,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),r.addListener(f,"click",this.onMouseEvent.bind(this,"gutterclick")),r.addListener(f,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),r.addListener(f,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),r.addListener(u,"mousedown",n),r.addListener(f,"mousedown",n),i.isIE&&e.renderer.scrollBarV&&(r.addListener(e.renderer.scrollBarV.element,"mousedown",n),r.addListener(e.renderer.scrollBarH.element,"mousedown",n)),e.on("mousemove",function(n){if(t.state||t.$dragDelay||!t.$dragEnabled)return;var r=e.renderer.screenToTextCoordinates(n.x,n.y),i=e.session.selection.getRange(),s=e.renderer;!i.isEmpty()&&i.insideStart(r.row,r.column)?s.setCursorStyle("default"):s.setCursorStyle("")})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new u(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!n||!n.length)return;this.editor._emit(e,new u(t,this.editor))},this.onMouseWheel=function(e,t){var n=new u(t,this.editor);n.speed=this.$scrollSpeed*2,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new u(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor,s=this.editor.renderer;s.$keepTextAreaAtCursor&&(s.$keepTextAreaAtCursor=null);var o=this,a=function(e){if(!e)return;if(i.isWebKit&&!e.which&&o.releaseMouse)return o.releaseMouse();o.x=e.clientX,o.y=e.clientY,t&&t(e),o.mouseEvent=new u(e,o.editor),o.$mouseMoved=!0},f=function(e){n.off("beforeEndOperation",c),clearInterval(h),l(),o[o.state+"End"]&&o[o.state+"End"](e),o.state="",s.$keepTextAreaAtCursor==null&&(s.$keepTextAreaAtCursor=!0,s.$moveTextAreaToCursor()),o.isMousePressed=!1,o.$onCaptureMouseMove=o.releaseMouse=null,e&&o.onMouseEvent("mouseup",e),n.endOperation()},l=function(){o[o.state]&&o[o.state](),o.$mouseMoved=!1};if(i.isOldIE&&e.domEvent.type=="dblclick")return setTimeout(function(){f(e)});var c=function(e){if(!o.releaseMouse)return;n.curOp.command.name&&n.curOp.selectionChanged&&(o[o.state+"End"]&&o[o.state+"End"](),o.state="",o.releaseMouse())};n.on("beforeEndOperation",c),n.startOperation({command:{name:"mouse"}}),o.$onCaptureMouseMove=a,o.releaseMouse=r.capture(this.editor.container,a,f);var h=setInterval(l,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){if(t&&t.domEvent&&t.domEvent.type!="contextmenu")return;this.editor.off("nativecontextmenu",e),t&&t.domEvent&&r.stopEvent(t.domEvent)}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(l.prototype),f.defineOptions(l.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimeout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=l}),define("ace/mouse/fold_handler",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";function i(e){e.on("click",function(t){var n=t.getDocumentPosition(),i=e.session,s=i.getFoldAt(n.row,n.column,1);s&&(t.getAccelKey()?i.removeFold(s):i.expandFold(s),t.stop());var o=t.domEvent&&t.domEvent.target;o&&r.hasCssClass(o,"ace_inline_button")&&r.hasCssClass(o,"ace_toggle_wrap")&&(i.setOption("wrap",!0),e.renderer.scrollCursorIntoView())}),e.on("gutterclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on("gutterdblclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session,s=i.getParentFoldRangeData(r,!0),o=s.range||s.firstRange;if(o){r=o.start.row;var u=i.getFoldAt(r,i.getLine(r).length,1);u?i.removeFold(u):(i.addFold("...",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}var r=e("../lib/dom");t.FoldHandler=i}),define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],function(e,t,n){"use strict";var r=e("../lib/keys"),i=e("../lib/event"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]==e)return;while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)},this.addKeyboardHandler=function(e,t){if(!e)return;typeof e=="function"&&!e.handleKeyboard&&(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);n!=-1&&this.$handlers.splice(n,1),t==undefined?this.$handlers.push(e):this.$handlers.splice(t,0,e),n==-1&&e.attach&&e.attach(this.$editor)},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return t==-1?!1:(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map(function(n){return n.getStatusText&&n.getStatusText(t,e)||""}).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(e,t,n,r){var s,o=!1,u=this.$editor.commands;for(var a=this.$handlers.length;a--;){s=this.$handlers[a].handleKeyboard(this.$data,e,t,n,r);if(!s||!s.command)continue;s.command=="null"?o=!0:o=u.exec(s.command,this.$editor,s.args,r),o&&r&&e!=-1&&s.passEvent!=1&&s.command.passEvent!=1&&i.stopEvent(r);if(o)break}return!o&&e==-1&&(s={command:"insertstring"},o=u.exec("insertstring",this.$editor,t)),o&&this.$editor._signal&&this.$editor._signal("keyboardActivity",s),o},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(s.prototype),t.KeyBinding=s}),define("ace/lib/bidiutil",["require","exports","module"],function(e,t,n){"use strict";function F(e,t,n,r){var i=s?d:p,c=null,h=null,v=null,m=0,g=null,y=null,b=-1,w=null,E=null,T=[];if(!r)for(w=0,r=[];w0)if(g==16){for(w=b;w-1){for(w=b;w=0;C--){if(r[C]!=N)break;t[C]=s}}}function I(e,t,n){if(o=e){u=i+1;while(u=e)u++;for(a=i,l=u-1;a=t.length||(o=n[r-1])!=b&&o!=w||(c=t[r+1])!=b&&c!=w)return E;return u&&(c=w),c==o?c:E;case k:o=r>0?n[r-1]:S;if(o==b&&r+10&&n[r-1]==b)return b;if(u)return E;p=r+1,h=t.length;while(p=1425&&d<=2303||d==64286;o=t[p];if(v&&(o==y||o==T))return y}if(r<1||(o=t[r-1])==S)return E;return n[r-1];case S:return u=!1,f=!0,s;case x:return l=!0,E;case O:case M:case D:case P:case _:u=!1;case H:return E}}function R(e){var t=e.charCodeAt(0),n=t>>8;return n==0?t>191?g:B[t]:n==5?/[\u0591-\u05f4]/.test(e)?y:g:n==6?/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(e)?A:/[\u0660-\u0669\u066b-\u066c]/.test(e)?w:t==1642?L:/[\u06f0-\u06f9]/.test(e)?b:T:n==32&&t<=8287?j[t&255]:n==254?t>=65136?T:E:E}function U(e){return e>="\u064b"&&e<="\u0655"}var r=["\u0621","\u0641"],i=["\u063a","\u064a"],s=0,o=0,u=!1,a=!1,f=!1,l=!1,c=!1,h=!1,p=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],d=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],v=0,m=1,g=0,y=1,b=2,w=3,E=4,S=5,x=6,T=7,N=8,C=9,k=10,L=11,A=12,O=13,M=14,_=15,D=16,P=17,H=18,B=[H,H,H,H,H,H,H,H,H,x,S,x,N,S,H,H,H,H,H,H,H,H,H,H,H,H,H,H,S,S,S,x,N,E,E,L,L,L,E,E,E,E,E,k,C,k,C,C,b,b,b,b,b,b,b,b,b,b,C,E,E,E,E,E,E,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,E,E,E,E,E,E,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,E,E,E,E,H,H,H,H,H,H,S,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,C,E,L,L,L,L,E,E,E,E,g,E,E,H,E,E,L,L,b,b,E,g,E,E,E,b,g,E,E,E,E,E],j=[N,N,N,N,N,N,N,N,N,N,N,H,H,H,g,y,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,N,S,O,M,_,D,P,C,L,L,L,L,L,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,C,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,N];t.L=g,t.R=y,t.EN=b,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.RLE=7,t.DOT="\u00b7",t.doBidiReorder=function(e,n,r){if(e.length<2)return{};var i=e.split(""),o=new Array(i.length),u=new Array(i.length),a=[];s=r?m:v,F(i,a,i.length,n);for(var f=0;fT&&n[f]0&&i[f-1]==="\u0644"&&/\u0622|\u0623|\u0625|\u0627/.test(i[f])&&(a[f-1]=a[f]=t.R_H,f++);i[i.length-1]===t.DOT&&(a[i.length-1]=t.B),i[0]==="\u202b"&&(a[0]=t.RLE);for(var f=0;f=0&&(e=this.session.$docRowCache[n])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length){var n,r=this.session.$getRowCacheIndex(t,this.currentRow);while(this.currentRow-e>0){n=this.session.$getRowCacheIndex(t,this.currentRow-e-1);if(n!==r)break;r=n,e++}}else e=this.currentRow;return e},this.updateRowLine=function(e,t){e===undefined&&(e=this.getDocumentRow());var n=e===this.session.getLength()-1,s=n?this.EOF:this.EOL;this.wrapIndent=0,this.line=this.session.getLine(e),this.isRtlDir=this.$isRtl||this.line.charAt(0)===this.RLE;if(this.session.$useWrapMode){var o=this.session.$wrapData[e];o&&(t===undefined&&(t=this.getSplitIndex()),t>0&&o.length?(this.wrapIndent=o.indent,this.wrapOffset=this.wrapIndent*this.charWidths[r.L],this.line=tt?this.session.getOverwrite()?e:e-1:t,i=r.getVisualFromLogicalIdx(n,this.bidiMap),s=this.bidiMap.bidiLevels,o=0;!this.session.getOverwrite()&&e<=t&&s[i]%2!==0&&i++;for(var u=0;ut&&s[i]%2===0&&(o+=this.charWidths[s[i]]),this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset),this.isRtlDir&&(o+=this.rtlLineOffset),o},this.getSelections=function(e,t){var n=this.bidiMap,r=n.bidiLevels,i,s=[],o=0,u=Math.min(e,t)-this.wrapIndent,a=Math.max(e,t)-this.wrapIndent,f=!1,l=!1,c=0;this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);for(var h,p=0;p=u&&hn+s/2){n+=s;if(r===i.length-1){s=0;break}s=this.charWidths[i[++r]]}return r>0&&i[r-1]%2!==0&&i[r]%2===0?(e0&&i[r-1]%2===0&&i[r]%2!==0?t=1+(e>n?this.bidiMap.logicalFromVisual[r]:this.bidiMap.logicalFromVisual[r-1]):this.isRtlDir&&r===i.length-1&&s===0&&i[r-1]%2===0||!this.isRtlDir&&r===0&&i[r]%2!==0?t=1+this.bidiMap.logicalFromVisual[r]:(r>0&&i[r-1]%2!==0&&s!==0&&r--,t=this.bidiMap.logicalFromVisual[r]),t===0&&this.isRtlDir&&t++,t+this.wrapIndent}}).call(o.prototype),t.BidiHandler=o}),define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/lang"),s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,u=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.cursor=this.lead=this.doc.createAnchor(0,0),this.anchor=this.doc.createAnchor(0,0),this.$silent=!1;var t=this;this.cursor.on("change",function(e){t.$cursorChanged=!0,t.$silent||t._emit("changeCursor"),!t.$isEmpty&&!t.$silent&&t._emit("changeSelection"),!t.$keepDesiredColumnOnChange&&e.old.column!=e.value.column&&(t.$desiredColumn=null)}),this.anchor.on("change",function(){t.$anchorChanged=!0,!t.$isEmpty&&!t.$silent&&t._emit("changeSelection")})};(function(){r.implement(this,s),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.$isEmpty&&this.anchor.row!=this.cursor.row},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.$isEmpty=!1,this.anchor.setPosition(e,t)},this.getAnchor=this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.$isEmpty?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){this.$setSelection(0,0,Number.MAX_VALUE,Number.MAX_VALUE)},this.setRange=this.setSelectionRange=function(e,t){var n=t?e.end:e.start,r=t?e.start:e.end;this.$setSelection(n.row,n.column,r.row,r.column)},this.$setSelection=function(e,t,n,r){var i=this.$isEmpty,s=this.inMultiSelectMode;this.$silent=!0,this.$cursorChanged=this.$anchorChanged=!1,this.anchor.setPosition(e,t),this.cursor.setPosition(n,r),this.$isEmpty=!o.comparePoints(this.anchor,this.cursor),this.$silent=!1,this.$cursorChanged&&this._emit("changeCursor"),(this.$cursorChanged||this.$anchorChanged||i!=this.$isEmpty||s)&&this._emit("changeSelection")},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(typeof t=="undefined"){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n=typeof e=="number"?e:this.lead.row,r,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,t===!0?new o(n,0,r,this.session.getLine(r).length):new o(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var r=e.column,i=e.column+t;return n<0&&(r=e.column-t,i=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(r,i).split(" ").length-1==t},this.moveCursorLeft=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(e.column===0)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var n=this.session.getTabSize();this.wouldMoveIntoSoftTab(e,n,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var i=this.session.getFoldAt(e,t,1);if(i){this.moveCursorTo(i.end.row,i.end.column);return}this.session.nonTokenRe.exec(r)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t));if(t>=n.length){this.moveCursorTo(e,n.length),this.moveCursorRight(),e0&&this.moveCursorWordLeft();return}this.session.tokenRe.exec(s)&&(t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)},this.$shortWordEndIndex=function(e){var t=0,n,r=/\s/,i=this.session.tokenRe;i.lastIndex=0;if(this.session.tokenRe.exec(e))t=this.session.tokenRe.lastIndex;else{while((n=e[t])&&r.test(n))t++;if(t<1){i.lastIndex=0;while((n=e[t])&&!i.test(n)){i.lastIndex=0,t++;if(r.test(n)){if(t>2){t--;break}while((n=e[t])&&r.test(n))t++;if(t>2)break}}}}return i.lastIndex=0,t},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){var s=this.doc.getLength();do e++,r=this.doc.getLine(e);while(e0&&/^\s*$/.test(r));t=r.length,/\s+$/.test(r)||(r="")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column),r;t===0&&(e!==0&&(this.session.$bidiHandler.isBidiRow(n.row,this.lead.row)?(r=this.session.$bidiHandler.getPosLeft(n.column),n.column=Math.round(r/this.session.$bidiHandler.charWidths[0])):r=n.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var i=this.session.screenToDocumentPosition(n.row+e,n.column,r);e!==0&&t===0&&i.row===this.lead.row&&i.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[i.row]&&(i.row>0||e>0)&&i.row++,this.moveCursorTo(i.row,i.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0;var i=this.session.getLine(e);/[\uDC00-\uDFFF]/.test(i.charAt(t))&&i.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return o.fromPoints(t,n)}catch(r){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else{var e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(e.start==undefined){if(this.rangeList&&e.length>1){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(u.prototype),t.Selection=u}),define("ace/tokenizer",["require","exports","module","ace/config"],function(e,t,n){"use strict";var r=e("./config"),i=2e3,s=function(e){this.states=e,this.regExps={},this.matchMappings={};for(var t in this.states){var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:"text"},o="g",u=[];for(var a=0;a1?f.onMatch=this.$applyToken:f.onMatch=f.token),c>1&&(/\\\d/.test(f.regex)?l=f.regex.replace(/\\([0-9]+)/g,function(e,t){return"\\"+(parseInt(t,10)+i+1)}):(c=1,l=this.removeCapturingGroups(f.regex)),!f.splitRegex&&typeof f.token!="string"&&u.push(f)),s[i]=a,i+=c,r.push(l),f.onMatch||(f.onMatch=null)}r.length||(s[0]=0,r.push("$")),u.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)},this),this.regExps[t]=new RegExp("("+r.join(")|(")+")|($)",o)}};(function(){this.$setMaxTokenCount=function(e){i=e|0},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(typeof n=="string")return[{type:n,value:e}];var r=[];for(var i=0,s=n.length;il){var g=e.substring(l,m-v.length);h.type==p?h.value+=g:(h.type&&f.push(h),h={type:p,value:g})}for(var y=0;yi){c>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});while(l1&&n[0]!==r&&n.unshift("#tmp",r),{tokens:f,state:n.length?n:r}},this.reportError=r.reportError}).call(s.prototype),t.Tokenizer=s}),define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../lib/lang"),i=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(!t){for(var n in e)this.$rules[n]=e[n];return}for(var n in e){var r=e[n];for(var i=0;i=this.$rowTokens.length){this.$row+=1,e||(e=this.$session.getLength());if(this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(n!==undefined)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new r(this.$row,t,this.$row,t+e.value.length)}}).call(i.prototype),t.TokenIterator=i}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c={'"':'"',"'":"'"},h=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},p=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},d=function(e){this.add("braces","insertion",function(t,n,r,i,s){var u=r.getCursorPosition(),a=i.doc.getLine(u.row);if(s=="{"){h(r);var l=r.getSelectionRange(),c=i.doc.getTextRange(l);if(c!==""&&c!=="{"&&r.getWrapBehavioursEnabled())return p(l,c,"{","}");if(d.isSaneInsertion(r,i))return/[\]\}\)]/.test(a[u.column])||r.inMultiSelectMode||e&&e.braces?(d.recordAutoInsert(r,i,"}"),{text:"{}",selection:[1,1]}):(d.recordMaybeInsert(r,i,"{"),{text:"{",selection:[1,1]})}else if(s=="}"){h(r);var v=a.substring(u.column,u.column+1);if(v=="}"){var m=i.$findOpeningBracket("}",{column:u.column+1,row:u.row});if(m!==null&&d.isAutoInsertedClosing(u,a,s))return d.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(s=="\n"||s=="\r\n"){h(r);var g="";d.isMaybeInsertedClosing(u,a)&&(g=o.stringRepeat("}",f.maybeInsertedBrackets),d.clearMaybeInsertedClosing());var v=a.substring(u.column,u.column+1);if(v==="}"){var y=i.findMatchingBracket({row:u.row,column:u.column+1},"}");if(!y)return null;var b=this.$getIndent(i.getLine(y.row))}else{if(!g){d.clearMaybeInsertedClosing();return}var b=this.$getIndent(a)}var w=b+i.getTabString();return{text:"\n"+w+"\n"+b+g,selection:[1,w.length,1,w.length]}}d.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){h(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return p(s,o,"(",")");if(d.isSaneInsertion(n,r))return d.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){h(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&d.isAutoInsertedClosing(u,a,i))return d.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){h(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return p(s,o,"[","]");if(d.isSaneInsertion(n,r))return d.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){h(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&d.isAutoInsertedClosing(u,a,i))return d.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){var s=r.$mode.$quotes||c;if(i.length==1&&s[i]){if(this.lineCommentStart&&this.lineCommentStart.indexOf(i)!=-1)return;h(n);var o=i,u=n.getSelectionRange(),a=r.doc.getTextRange(u);if(a!==""&&(a.length!=1||!s[a])&&n.getWrapBehavioursEnabled())return p(u,a,o,o);if(!a){var f=n.getCursorPosition(),l=r.doc.getLine(f.row),d=l.substring(f.column-1,f.column),v=l.substring(f.column,f.column+1),m=r.getTokenAt(f.row,f.column),g=r.getTokenAt(f.row,f.column+1);if(d=="\\"&&m&&/escape/.test(m.type))return null;var y=m&&/string|escape/.test(m.type),b=!g||/string|escape/.test(g.type),w;if(v==o)w=y!==b,w&&/string\.end/.test(g.type)&&(w=!1);else{if(y&&!b)return null;if(y&&b)return null;var E=r.$mode.tokenRe;E.lastIndex=0;var S=E.test(d);E.lastIndex=0;var x=E.test(d);if(S||x)return null;if(v&&!/[\s;,.})\]\\]/.test(v))return null;w=!0}return{text:w?o+o:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.$mode.$quotes||c,o=r.doc.getTextRange(i);if(!i.isMultiLine()&&s.hasOwnProperty(o)){h(n);var u=r.doc.getLine(i.start.row),a=u.substring(i.start.column+1,i.start.column+2);if(a==o)return i.end.column++,i}})};d.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},d.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},d.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},d.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},d.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},d.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},d.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},d.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(d,i),t.CstyleBehaviour=d}),define("ace/unicode",["require","exports","module"],function(e,t,n){"use strict";var r=[48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2],i=0,s=[];for(var o=0;o2?r%f!=f-1:r%f==0}}var E=Infinity;w(function(e,t){var n=e.search(/\S/);n!==-1?(ne.length&&(E=e.length)}),u==Infinity&&(u=E,s=!1,o=!1),l&&u%f!=0&&(u=Math.floor(u/f)*f),w(o?m:v)},this.toggleBlockComment=function(e,t,n,r){var i=this.blockComment;if(!i)return;!i.start&&i[0]&&(i=i[0]);var s=new f(t,r.row,r.column),o=s.getCurrentToken(),u=t.selection,a=t.selection.toOrientedRange(),c,h;if(o&&/comment/.test(o.type)){var p,d;while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.start);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;p=new l(m,g,m,g+i.start.length);break}o=s.stepBackward()}var s=new f(t,r.row,r.column),o=s.getCurrentToken();while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.end);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;d=new l(m,g,m,g+i.end.length);break}o=s.stepForward()}d&&t.remove(d),p&&(t.remove(p),c=p.start.row,h=-i.start.length)}else h=i.start.length,c=n.start.row,t.insert(n.end,i.end),t.insert(n.start,i.start);a.start.row==c&&(a.start.column+=h),a.end.row==c&&(a.end.column+=h),t.selection.fromOrientedRange(a)},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){this.$embeds=[],this.$modes={};for(var t in e)if(e[t]){var n=e[t],i=n.prototype.$id,s=r.$modes[i];s||(r.$modes[i]=s=new n),r.$modes[t]||(r.$modes[t]=s),this.$embeds.push(t),this.$modes[t]=s}var o=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(var t=0;t=0&&t.row=0&&t.column<=e[t.row].length}function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.action must be 'insert' or 'remove'"),t.lines instanceof Array||r(t,"delta.lines must be an Array"),(!t.start||!t.end)&&r(t,"delta.start/end must be an present");var n=t.start;i(e,t.start)||r(t,"delta.start must be contained in document");var s=t.end;t.action=="remove"&&!i(e,s)&&r(t,"delta.end must contained in document for 'remove' actions");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,"delta.range must match delta lines")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||"";switch(t.action){case"insert":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case"remove":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n=="undefined"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.columnthis.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./apply_delta").applyDelta,s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,u=e("./anchor").Anchor,a=function(e){this.$lines=[""],e.length===0?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},"aaa".split(/a/).length===0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal("changeNewLineMode")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:"insert",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e0,r=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action=="insert";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal("change",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,r==-1&&(r=t),s<=r&&n.fireUpdateEvent(s,r)}};(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.lines[t]=null;else if(e.action=="remove")this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.lines.splice.apply(this.lines,r),this.states.splice.apply(this.states,r)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],r=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+""!=r.state+""?(this.states[e]=r.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=r.tokens}}).call(s.prototype),t.BackgroundTokenizer=s}),define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){"use strict";var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){if(this.regExp+""==e+"")return;this.regExp=e,this.cache=[]},this.update=function(e,t,n,i){if(!this.regExp)return;var o=i.firstRow,u=i.lastRow;for(var a=o;a<=u;a++){var f=this.cache[a];f==null&&(f=r.getMatchOffsets(n.getLine(a),this.regExp),f.length>this.MAX_RANGES&&(f=f.slice(0,this.MAX_RANGES)),f=f.map(function(e){return new s(a,e.offset,a,e.offset+e.length)}),this.cache[a]=f.length?f:"");for(var l=f.length;l--;)t.drawSingleLineMarker(e,f[l].toScreenRange(n),this.clazz,i)}}}).call(o.prototype),t.SearchHighlight=o}),define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(e,t,n){"use strict";function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var r=e("../range").Range;(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r=0,i=this.folds,s,o,u,a=!0;t==null&&(t=this.end.row,n=this.end.column);for(var f=0;f0)continue;var a=i(e,o.start);return u===0?t&&a!==0?-s-2:s:a>0||a===0&&!t?s:-s-1}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var r=this.pointIndex(e.end,t,n);return r<0?r=-r-1:r++,this.ranges.splice(n,r-n,e)},this.addList=function(e){var t=[];for(var n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort(function(e,t){return i(e.start,t.start)});var n=t[0],r;for(var s=1;s=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row=r)break}if(e.action=="insert"){var f=i-r,l=-t.column+n.column;for(;or)break;a.start.row==r&&a.start.column>=t.column&&(a.start.column!=t.column||!this.$insertRight)&&(a.start.column+=l,a.start.row+=f);if(a.end.row==r&&a.end.column>=t.column){if(a.end.column==t.column&&this.$insertRight)continue;a.end.column==t.column&&l>0&&oa.start.column&&a.end.column==s[o+1].start.column&&(a.end.column-=l),a.end.column+=l,a.end.row+=f}}}else{var f=r-i,l=t.column-n.column;for(;oi)break;if(a.end.rowt.column)a.end.column=t.column,a.end.row=t.row}else a.end.column+=l,a.end.row+=f;else a.end.row>i&&(a.end.row+=f);if(a.start.rowt.column)a.start.column=t.column,a.start.row=t.row}else a.start.column+=l,a.start.row+=f;else a.start.row>i&&(a.start.row+=f)}}if(f!=0&&o=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r=e)return i}return null},this.getFoldedRowCount=function(e,t){var n=this.$foldData,r=t-e+1;for(var i=0;i=t){u=e?r-=t-u:r=0);break}o>=e&&(u>=e?r-=o-u:r-=o-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var n=this.$foldData,r=!1,o;e instanceof s?o=e:(o=new s(t,e),o.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(o.range);var u=o.start.row,a=o.start.column,f=o.end.row,l=o.end.column;if(u0&&(this.removeFolds(p),p.forEach(function(e){o.addSubFold(e)}));for(var d=0;d0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var n,i;e==null?(n=new r(0,0,this.getLength(),0),t=!0):typeof e=="number"?n=new r(e,0,e,this.getLine(e).length):"row"in e?n=r.fromPoints(e,e):n=e,i=this.getFoldsInRangeList(n);if(t)this.removeFolds(i);else{var s=i;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){r==null&&(r=e.start.row),i==null&&(i=0),t==null&&(t=e.end.row),n==null&&(n=this.getLine(t).length);var s=this.doc,o="";return e.walk(function(e,t,n,u){if(tl)break}while(s&&a.test(s.type));s=i.stepBackward()}else s=i.getCurrentToken();return f.end.row=i.getCurrentTokenRow(),f.end.column=i.getCurrentTokenColumn()+s.value.length-2,f}},this.foldAll=function(e,t,n){n==undefined&&(n=1e5);var r=this.foldWidgets;if(!r)return;t=t||this.getLength(),e=e||0;for(var i=e;i=e){i=s.end.row;try{var o=this.addFold("...",s);o&&(o.collapseChildren=n)}catch(u){}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle==e)return;this.$foldStyle=e,e=="manual"&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)},this.$setFolding=function(e){if(this.$foldMode==e)return;this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation");if(!e||this.$foldStyle=="manual"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var r=e-1,i;while(r>=0){var s=n[r];s==null&&(s=n[r]=this.getFoldWidget(r));if(s=="start"){var o=this.getFoldWidgetRange(r);i||(i=o);if(o&&o.end.row>=e)break}r--}return{range:r!==-1&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},r=this.$toggleFoldWidget(e,n);if(!r){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(!this.getFoldWidget)return;var n=this.getFoldWidget(e),r=this.getLine(e),i=n==="end"?-1:1,s=this.getFoldAt(e,i===-1?0:r.length,i);if(s)return t.children||t.all?this.removeFold(s):this.expandFold(s),s;var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()){s=this.getFoldAt(o.start.row,o.start.column,1);if(s&&o.isEqual(s.range))return this.removeFold(s),s}if(t.siblings){var u=this.getParentFoldRangeData(e);if(u.range)var a=u.range.start.row+1,f=u.range.end.row;this.foldAll(a,f,t.all?1e4:0)}else t.children?(f=o?o.end.row:this.getLength(),this.foldAll(e+1,f,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold("...",o));return o},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(n)return;var r=this.getParentFoldRangeData(t,!0);n=r.range||r.firstRange;if(n){t=n.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold("...",n)}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.foldWidgets[t]=null;else if(e.action=="remove")this.foldWidgets.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,r)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}var r=e("../range").Range,i=e("./fold_line").FoldLine,s=e("./fold").Fold,o=e("../token_iterator").TokenIterator;t.Folding=u}),define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],function(e,t,n){"use strict";function s(){this.findMatchingBracket=function(e,t){if(e.column==0)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(n=="")return null;var r=n.match(/([\(\[\{])|([\)\]\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t=this.getLine(e.row),n=!0,r,s=t.charAt(e.column-1),o=s&&s.match(/([\(\[\{])|([\)\]\}])/);o||(s=t.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\(\[\{])|([\)\]\}])/),n=!1);if(!o)return null;if(o[1]){var u=this.$findClosingBracket(o[1],e);if(!u)return null;r=i.fromPoints(e,u),n||(r.end.column++,r.start.column--),r.cursor=r.end}else{var u=this.$findOpeningBracket(o[2],e);if(!u)return null;r=i.fromPoints(u,e),n||(r.start.column++,r.end.column--),r.cursor=r.start}return r},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{","<":">",">":"<"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));var a=t.column-o.getCurrentTokenColumn()-2,f=u.value;for(;;){while(a>=0){var l=f.charAt(a);if(l==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else l==e&&(s+=1);a-=1}do u=o.stepBackward();while(u&&!n.test(u.type));if(u==null)break;f=u.value,a=f.length-1}return null},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));var a=t.column-o.getCurrentTokenColumn();for(;;){var f=u.value,l=f.length;while(a=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510}r.implement(this,u),this.setDocument=function(e){this.doc&&this.doc.removeListener("change",this.$onChange),this.doc=e,e.on("change",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e){this.$docRowCache=[],this.$screenRowCache=[];return}var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,r=e.length-1;while(n<=r){var i=n+r>>1,s=e[i];if(t>s)n=i+1;else{if(!(t=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;e.addSession(this),this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.mergeUndoDeltas=!1},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}else this.$syncInformUndoManager=function(){}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){},add:function(){},addSelection:function(){},startNewGroup:function(){},addSession:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(" ",this.getTabSize()):" "},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.setNavigateWithinSoftTabs=function(e){this.setOption("navigateWithinSoftTabs",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe));if(r)var i=this.tokenRe;else if(/^\s+$/.test(n.slice(t-1,t+1)))var i=/\s/;else var i=this.nonTokenRe;var s=t;if(s>0){do s--;while(s>=0&&n.charAt(s).match(i));s++}var o=t;while(oe&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){this.$modified=!1;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:Infinity,u=t.length;for(var a=0;ao){a=s.end.row+1;if(a>=u)break;s=this.$foldData[i++],o=s?s.start.row:Infinity}n[a]==null&&(n[a]=this.$getStringScreenWidth(t[a])[0]),n[a]>r&&(r=n[a])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;for(var n=e.length-1;n!=-1;n--){var r=e[n];r.action=="insert"||r.action=="remove"?this.doc.revertDelta(r):r.folds&&this.addFolds(r.folds)}!t&&this.$undoSelect&&(e.selectionBefore?this.selection.fromJSON(e.selectionBefore):this.selection.setRange(this.$getUndoSelection(e,!0))),this.$fromUndo=!1},this.redoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;for(var n=0;ne.end.column&&(s.start.column+=u),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=u)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}s.end=this.insert(s.start,r);if(i.length){var a=e.start,f=s.start,o=f.row-a.row,u=f.column-a.column;this.addFolds(i.map(function(e){return e=e.clone(),e.start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=o,e.end.row+=o,e}))}return s},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var r=e;r<=t;r++)this.doc.insertInLine({row:r,column:0},n)},this.outdentRows=function(e){var t=e.collapseRows(),n=new l(0,0,0,0),r=this.getTabSize();for(var i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o0){var r=this.getRowFoldEnd(t+n);if(r>this.doc.getLength()-1)return 0;var i=r-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);var i=t-e+1}var s=new l(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map(function(e){return e=e.clone(),e.start.row+=i,e.end.row+=i,e}),u=n==0?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+i,u),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){t=Math.max(0,t);if(e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0);if(e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){if(this.$wrapLimitRange.min!==e||this.$wrapLimitRange.max!==t)this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal("changeWrapMode")},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var r=this.$constrainWrapLimit(e,n.min,n.max);return r!=this.$wrapLimit&&r>1?(this.$wrapLimit=r,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0):!1},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=null;this.$updating=!0;if(u!=0)if(n==="remove"){this[t?"$wrapData":"$rowLengthCache"].splice(s,u);var f=this.$foldData;a=this.getFoldsInRange(e),this.removeFolds(a);var l=this.getFoldLine(i.row),c=0;if(l){l.addRemoveChars(i.row,i.column,r.column-i.column),l.shiftRow(-u);var h=this.getFoldLine(s);h&&h!==l&&(h.merge(l),l=h),c=f.indexOf(l)+1}for(c;c=i.row&&l.shiftRow(-u)}o=s}else{var p=Array(u);p.unshift(s,0);var d=t?this.$wrapData:this.$rowLengthCache;d.splice.apply(d,p);var f=this.$foldData,l=this.getFoldLine(s),c=0;if(l){var v=l.range.compareInside(r.row,r.column);v==0?(l=l.split(r.row,r.column),l&&(l.shiftRow(u),l.addRemoveChars(o,0,i.column-r.column))):v==-1&&(l.addRemoveChars(s,0,i.column-r.column),l.shiftRow(u)),c=f.indexOf(l)+1}for(c;c=s&&l.shiftRow(u)}}else{u=Math.abs(e.start.column-e.end.column),n==="remove"&&(a=this.getFoldsInRange(e),this.removeFolds(a),u=-u);var l=this.getFoldLine(s);l&&l.addRemoveChars(s,r.column,u)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(s,o):this.$updateRowLengthCache(s,o),a},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var r=this.doc.getAllLines(),i=this.getTabSize(),o=this.$wrapData,u=this.$wrapLimit,a,f,l=e;t=Math.min(t,r.length-1);while(l<=t)f=this.getFoldLine(l,f),f?(a=[],f.walk(function(e,t,i,o){var u;if(e!=null){u=this.$getDisplayTokens(e,a.length),u[0]=n;for(var f=1;fr-b){var w=f+r-b;if(e[w-1]>=c&&e[w]>=c){y(w);continue}if(e[w]==n||e[w]==s){for(w;w!=f-1;w--)if(e[w]==n)break;if(w>f){y(w);continue}w=f+r;for(w;w>2)),f-1);while(w>E&&e[w]E&&e[w]E&&e[w]==a)w--}else while(w>E&&e[w]E){y(++w);continue}w=f+r,e[w]==t&&w--,y(w-b)}return o},this.$getDisplayTokens=function(n,r){var i=[],s;r=r||0;for(var o=0;o39&&u<48||u>57&&u<64?i.push(a):u>=4352&&m(u)?i.push(e,t):i.push(e)}return i},this.$getStringScreenWidth=function(e,t,n){if(t==0)return[0,0];t==null&&(t=Infinity),n=n||0;var r,i;for(i=0;i=4352&&m(r)?n+=2:n+=1;if(n>t)break}return[n,i]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.getRowLineCount=function(e){return!this.$useWrapMode||!this.$wrapData[e]?1:this.$wrapData[e].length+1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]=0)var u=f[l],i=this.$docRowCache[l],h=e>f[c-1];else var h=!c;var p=this.getLength()-1,d=this.getNextFoldLine(i),v=d?d.start.row:Infinity;while(u<=e){a=this.getRowLength(i);if(u+a>e||i>=p)break;u+=a,i++,i>v&&(i=d.end.row+1,d=this.getNextFoldLine(i,d),v=d?d.start.row:Infinity),h&&(this.$docRowCache.push(i),this.$screenRowCache.push(u))}if(d&&d.start.row<=i)r=this.getFoldDisplayLine(d),i=d.start.row;else{if(u+a<=e||i>p)return{row:p,column:this.getLine(p).length};r=this.getLine(i),d=null}var m=0,g=Math.floor(e-u);if(this.$useWrapMode){var y=this.$wrapData[i];y&&(o=y[g],g>0&&y.length&&(m=y.indent,s=y[g-1]||y[y.length-1],r=r.substring(s)))}return n!==undefined&&this.$bidiHandler.isBidiRow(u+g,i,g)&&(t=this.$bidiHandler.offsetToCol(n)),s+=this.$getStringScreenWidth(r,t-m)[1],this.$useWrapMode&&s>=o&&(s=o-1),d?d.idxToPosition(s):{row:i,column:s}},this.documentToScreenPosition=function(e,t){if(typeof t=="undefined")var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r=0,i=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,u=0,a=this.$docRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var u=a[f],r=this.$screenRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getNextFoldLine(u),p=h?h.start.row:Infinity;while(u=p){o=h.end.row+1;if(o>e)break;h=this.getNextFoldLine(o,h),p=h?h.start.row:Infinity}else o=u+1;r+=this.getRowLength(u),u=o,c&&(this.$docRowCache.push(u),this.$screenRowCache.push(r))}var d="";h&&u>=p?(d=this.getFoldDisplayLine(h,e,t),i=h.start.row):(d=this.getLine(e).substring(0,t),i=e);var v=0;if(this.$useWrapMode){var m=this.$wrapData[i];if(m){var g=0;while(d.length>=m[g])r++,g++;d=d.substring(m[g-1]||0,d.length),v=g>0?m.indent:0}}return{row:r,column:v+this.$getStringScreenWidth(d)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(!this.$useWrapMode){e=this.getLength();var n=this.$foldData;for(var r=0;ro&&(s=t.end.row+1,t=this.$foldData[r++],o=t?t.start.row:Infinity)}}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){if(!this.$enableVarChar)return;this.$getStringScreenWidth=function(t,n,r){if(n===0)return[0,0];n||(n=Infinity),r=r||0;var i,s;for(s=0;sn)break}return[r,s]}},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=m}.call(d.prototype),e("./edit_session/folding").Folding.call(d.prototype),e("./edit_session/bracket_match").BracketMatch.call(d.prototype),o.defineOptions(d.prototype,"session",{wrap:{set:function(e){!e||e=="off"?e=!1:e=="free"?e=!0:e=="printMargin"?e=-1:typeof e=="string"&&(e=parseInt(e,10)||!1);if(this.$wrap==e)return;this.$wrap=e;if(!e)this.setUseWrapMode(!1);else{var t=typeof e=="number"?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}},get:function(){return this.getUseWrapMode()?this.$wrap==-1?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){e=e=="auto"?this.$mode.type!="text":e!="text",e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0)))},initialValue:"auto"},indentedSoftWrap:{set:function(){this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0))},initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){e=parseInt(e);if(isNaN(e)||this.$tabSize===e)return;this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize")},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},foldStyle:{set:function(e){this.setFoldStyle(e)},handlesSet:!0},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId},handlesSet:!0}}),t.EditSession=d}),define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){"use strict";function u(e,t){function n(e){return/\w/.test(e)||t.regExp?"\\b":""}return n(e[0])+e+n(e[e.length-1])}var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var r=null;return n.forEach(function(e,n,i,o){return r=new s(e,n,i,o),n==o&&t.start&&t.start.start&&t.skipCurrent!=0&&r.isEqual(t.start)?(r=null,!1):!0}),r},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],u=t.re;if(t.$isMultiLine){var a=u.length,f=i.length-a,l;e:for(var c=u.offset||0;c<=f;c++){for(var h=0;hv)continue;o.push(l=new s(c,v,c+a-1,m)),a>2&&(c=c+a-2)}}else for(var g=0;gE&&o[h].end.row==n.end.row)h--;o=o.slice(g,h+1);for(g=0,h=o.length;g=u;n--)if(c(n,Number.MAX_VALUE,e))return;if(t.wrap==0)return;for(n=a,u=o.row;n>=u;n--)if(c(n,Number.MAX_VALUE,e))return};else var f=function(e){var n=o.row;if(c(n,o.column,e))return;for(n+=1;n<=a;n++)if(c(n,0,e))return;if(t.wrap==0)return;for(n=u,a=o.row;n<=a;n++)if(c(n,0,e))return};if(t.$isMultiLine)var l=n.length,c=function(t,i,s){var o=r?t-l+1:t;if(o<0)return;var u=e.getLine(o),a=u.search(n[0]);if(!r&&ai)return;if(s(o,a,o+l-1,c))return!0};else if(r)var c=function(t,r,i){var s=e.getLine(t),o=[],u,a=0;n.lastIndex=0;while(u=n.exec(s)){var f=u[0].length;a=u.index;if(!f){if(a>=s.length)break;n.lastIndex=a+=1}if(u.index+f>r)break;o.push(u.index,f)}for(var l=o.length-1;l>=0;l-=2){var c=o[l-1],f=o[l];if(i(t,c,t,c+f))return!0}};else var c=function(t,r,i){var s=e.getLine(t),o,u;n.lastIndex=r;while(u=n.exec(s)){var a=u[0].length;o=u.index;if(i(t,o,t,o+a))return!0;if(!a){n.lastIndex=o+=1;if(o>=s.length)return!1}}};return{forEach:f}}}).call(o.prototype),t.Search=o}),define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,n){"use strict";function o(e,t){this.platform=t||(i.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function u(e,t){o.call(this,e,t),this.$singleCommand=!1}var r=e("../lib/keys"),i=e("../lib/useragent"),s=r.KEY_MODS;u.prototype=o.prototype,function(){function e(e){return typeof e=="object"&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(typeof e=="string"?e:e.name);e=this.commands[n],t||delete this.commands[n];var r=this.commandKeyBinding;for(var i in r){var s=r[i];if(s==e)delete r[i];else if(Array.isArray(s)){var o=s.indexOf(e);o!=-1&&(s.splice(o,1),s.length==1&&(r[i]=s[0]))}}},this.bindKey=function(e,t,n){typeof e=="object"&&e&&(n==undefined&&(n=e.position),e=e[this.platform]);if(!e)return;if(typeof t=="function")return this.addCommand({exec:t,bindKey:e,name:t.name||e});e.split("|").forEach(function(e){var r="";if(e.indexOf(" ")!=-1){var i=e.split(/\s+/);e=i.pop(),i.forEach(function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;r+=(r?" ":"")+n,this._addCommandToBinding(r,"chainKeys")},this),r+=" "}var o=this.parseKeys(e),u=s[o.hashId]+o.key;this._addCommandToBinding(r+u,t,n)},this)},this._addCommandToBinding=function(t,n,r){var i=this.commandKeyBinding,s;if(!n)delete i[t];else if(!i[t]||this.$singleCommand)i[t]=n;else{Array.isArray(i[t])?(s=i[t].indexOf(n))!=-1&&i[t].splice(s,1):i[t]=[i[t]],typeof r!="number"&&(r=e(n));var o=i[t];for(s=0;sr)break}o.splice(s,0,n)}},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var n=e[t];if(!n)return;if(typeof n=="string")return this.bindKey(n,t);typeof n=="function"&&(n={exec:n});if(typeof n!="object")return;n.name||(n.name=t),this.addCommand(n)},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(e){return e}),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(t.length==1&&t[0]=="shift")return{key:n.toUpperCase(),hashId:-1}}var s=0;for(var o=t.length;o--;){var u=r.KEY_MODS[t[o]];if(u==null)return typeof console!="undefined"&&console.error("invalid modifier "+t[o]+" in "+e),!1;s|=u}return{key:n,hashId:s}},this.findKeyCommand=function(t,n){var r=s[t]+n;return this.commandKeyBinding[r]},this.handleKeyboard=function(e,t,n,r){if(r<0)return;var i=s[t]+n,o=this.commandKeyBinding[i];e.$keyChain&&(e.$keyChain+=" "+i,o=this.commandKeyBinding[e.$keyChain]||o);if(o)if(o=="chainKeys"||o[o.length-1]=="chainKeys")return e.$keyChain=e.$keyChain||i,{command:"null"};if(e.$keyChain)if(!!t&&t!=4||n.length!=1){if(t==-1||r>0)e.$keyChain=""}else e.$keyChain=e.$keyChain.slice(0,-i.length-1);return{command:o}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=u}),define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../keyboard/hash_handler").MultiHashHandler,s=e("../lib/event_emitter").EventEmitter,o=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",function(e){return e.command.exec(e.editor,e.args||{})})};r.inherits(o,i),function(){r.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var r=e.length;r--;)if(this.exec(e[r],t,n))return!0;return!1}typeof e=="string"&&(e=this.commands[e]);if(!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(this.$checkCommandState!=0&&e.isAvailable&&!e.isAvailable(t))return!1;var i={editor:t,command:e,args:n};return i.returnValue=this._emit("exec",i),this._signal("afterExec",i),i.returnValue===!1?!1:!0},this.toggleRecording=function(e){if(this.$inReplay)return;return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){typeof t=="string"?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(e){return e.map(function(e){return typeof e[0]!="string"&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(o.prototype),t.CommandManager=o}),define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],function(e,t,n){"use strict";function o(e,t){return{win:e,mac:t}}var r=e("../lib/lang"),i=e("../config"),s=e("../range").Range;t.commands=[{name:"showSettingsMenu",bindKey:o("Ctrl-,","Command-,"),exec:function(e){i.loadModule("ace/ext/settings_menu",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:"goToNextError",bindKey:o("Alt-E","F4"),exec:function(e){i.loadModule("./ext/error_marker",function(t){t.showErrorMarker(e,1)})},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:o("Alt-Shift-E","Shift-F4"),exec:function(e){i.loadModule("./ext/error_marker",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:"animate",readOnly:!0},{name:"selectall",description:"Select all",bindKey:o("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",description:"Center selection",bindKey:o(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",description:"Go to line...",bindKey:o("Ctrl-L","Command-L"),exec:function(e,t){typeof t=="number"&&!isNaN(t)&&e.gotoLine(t),e.prompt({$type:"gotoLine"})},readOnly:!0},{name:"fold",bindKey:o("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:o("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:o("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:o("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",description:"Fold all",bindKey:o(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",description:"Fold other",bindKey:o("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",description:"Unfold all",bindKey:o("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",description:"Find next",bindKey:o("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",description:"Find previous",bindKey:o("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",description:"Select or find next",bindKey:o("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",description:"Select or find previous",bindKey:o("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",description:"Find",bindKey:o("Ctrl-F","Command-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e)})},readOnly:!0},{name:"overwrite",description:"Overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",description:"Select to start",bindKey:o("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",description:"Go to start",bindKey:o("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",description:"Select up",bindKey:o("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",description:"Go line up",bindKey:o("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",description:"Select to end",bindKey:o("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",description:"Go to end",bindKey:o("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",description:"Select down",bindKey:o("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",description:"Go line down",bindKey:o("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",description:"Select word left",bindKey:o("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",description:"Go to word left",bindKey:o("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",description:"Select to line start",bindKey:o("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",description:"Go to line start",bindKey:o("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",description:"Select left",bindKey:o("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",description:"Go to left",bindKey:o("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",description:"Select word right",bindKey:o("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",description:"Go to word right",bindKey:o("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",description:"Select to line end",bindKey:o("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",description:"Go to line end",bindKey:o("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",description:"Select right",bindKey:o("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",description:"Go to right",bindKey:o("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",description:"Select page down",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",description:"Page down",bindKey:o(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",description:"Go to page down",bindKey:o("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",description:"Select page up",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",description:"Page up",bindKey:o(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",description:"Go to page up",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",description:"Scroll up",bindKey:o("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",description:"Scroll down",bindKey:o("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",description:"Select line start",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",description:"Select line end",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",description:"Toggle recording",bindKey:o("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",description:"Replay macro",bindKey:o("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",description:"Jump to matching",bindKey:o("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",description:"Select to matching",bindKey:o("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",description:"Expand to matching",bindKey:o("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",description:"Pass keys to browser",bindKey:o(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",description:"Copy",exec:function(e){},readOnly:!0},{name:"cut",description:"Cut",exec:function(e){var t=e.$copyWithEmptySelection&&e.selection.isEmpty(),n=t?e.selection.getLineRange():e.selection.getRange();e._emit("cut",n),n.isEmpty()||e.session.remove(n),e.clearSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",description:"Paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",description:"Remove line",bindKey:o("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",description:"Duplicate selection",bindKey:o("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",description:"Sort lines",bindKey:o("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",description:"Toggle comment",bindKey:o("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",description:"Toggle block comment",bindKey:o("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",description:"Modify number up",bindKey:o("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",description:"Modify number down",bindKey:o("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",description:"Replace",bindKey:o("Ctrl-H","Command-Option-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e,!0)})}},{name:"undo",description:"Undo",bindKey:o("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",description:"Redo",bindKey:o("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",description:"Copy lines up",bindKey:o("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",description:"Move lines up",bindKey:o("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",description:"Copy lines down",bindKey:o("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",description:"Move lines down",bindKey:o("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",description:"Delete",bindKey:o("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",description:"Backspace",bindKey:o("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",description:"Cut or delete",bindKey:o("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",description:"Remove to line start",bindKey:o("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",description:"Remove to line end",bindKey:o("Alt-Delete","Ctrl-K|Command-Delete"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestarthard",description:"Remove to line start hard",bindKey:o("Ctrl-Shift-Backspace",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineendhard",description:"Remove to line end hard",bindKey:o("Ctrl-Shift-Delete",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",description:"Remove word left",bindKey:o("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",description:"Remove word right",bindKey:o("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",description:"Outdent",bindKey:o("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",description:"Indent",bindKey:o("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",description:"Block outdent",bindKey:o("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",description:"Block indent",bindKey:o("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",description:"Insert string",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",description:"Insert text",exec:function(e,t){e.insert(r.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",description:"Split line",bindKey:o(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",description:"Transpose letters",bindKey:o("Alt-Shift-X","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",description:"To uppercase",bindKey:o("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",description:"To lowercase",bindKey:o("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",description:"Expand to line",bindKey:o("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",description:"Join lines",bindKey:o(null,null),exec:function(e){var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,u=e.session.doc.getTextRange(e.selection.getRange()),a=u.replace(/\n\s*/," ").length,f=e.session.doc.getLine(n.row);for(var l=n.row+1;l<=i.row+1;l++){var c=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(l)));c.length!==0&&(c=" "+c),f+=c}i.row+10?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",description:"Invert selection",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,i=[];r.length<1&&(r=[e.selection.getRange()]);for(var o=0;o=i.lastRow||r.end.row<=i.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:}n=="animate"&&this.renderer.animateScrolling(this.curOp.scrollTop)}var s=this.selection.toJSON();this.curOp.selectionAfter=s,this.$lastSel=this.selection.toJSON(),this.session.getUndoManager().addSelection(s),this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(!this.$mergeUndoDeltas)return;var t=this.prevOp,n=this.$mergeableCommands,r=t.command&&e.command.name==t.command.name;if(e.command.name=="insertstring"){var i=e.args;this.mergeNextCommand===undefined&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\s/.test(i)||/\s/.test(t.args)),this.mergeNextCommand=!0}else r=r&&n.indexOf(e.command.name)!==-1;this.$mergeUndoDeltas!="always"&&Date.now()-this.sequenceStartTime>2e3&&(r=!1),r?this.session.mergeUndoDeltas=!0:n.indexOf(e.command.name)!==-1&&(this.sequenceStartTime=Date.now())},this.setKeyboardHandler=function(e,t){if(e&&typeof e=="string"&&e!="ace"){this.$keybindingId=e;var n=this;g.loadModule(["keybinding",e],function(r){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(r&&r.handler),t&&t()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session==e)return;this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var n=this.session.getSelection();n.off("changeCursor",this.$onCursorChange),n.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.onCursorChange(),this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?t==1?this.navigateFileEnd():t==-1&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||i.computedStyle(this.container).fontSize},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=t.findMatchingBracket(e.getCursorPosition());if(n)var r=new p(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)var r=t.$mode.getMatching(e.session);r&&(t.$bracketHighlight=t.addMarker(r,"ace_bracket","text"))},50)},this.$highlightTags=function(){if(this.$highlightTagPending)return;var e=this;this.$highlightTagPending=!0,setTimeout(function(){e.$highlightTagPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=e.getCursorPosition(),r=new y(e.session,n.row,n.column),i=r.getCurrentToken();if(!i||!/\b(?:tag-open|tag-name)/.test(i.type)){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}if(i.type.indexOf("tag-open")!=-1){i=r.stepForward();if(!i)return}var s=i.value,o=0,u=r.stepBackward();if(u.value=="<"){do u=i,i=r.stepForward(),i&&i.value===s&&i.type.indexOf("tag-name")!==-1&&(u.value==="<"?o++:u.value==="=0)}else{do i=u,u=r.stepBackward(),i&&i.value===s&&i.type.indexOf("tag-name")!==-1&&(u.value==="<"?o++:u.value==="1)&&(t=!1)}if(e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var n=new p(t.row,t.column,t.row,Infinity);n.id=e.addMarker(n,"ace_active-line","screenLine"),e.$highlightLineMarker=n}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null;if(!this.selection.isEmpty()){var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",r)}else this.$updateHighlightActiveLine();var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(t.isEmpty()||t.isMultiLine())return;var n=t.start.column,r=t.end.column,i=e.getLine(t.start.row),s=i.substring(n,r);if(s.length>5e3||!/[\w\d]/.test(s))return;var o=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:s}),u=i.substring(n-1,r+1);if(!o.test(u))return;return o},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText(),t=this.session.doc.getNewLineCharacter(),n=!1;if(!e&&this.$copyWithEmptySelection){n=!0;var r=this.selection.getAllRanges();for(var i=0;is.length||i.length<2||!i[1])return this.commands.exec("insertstring",this,t);for(var o=s.length;o--;){var u=s[o];u.isEmpty()||r.remove(u),r.insert(u.start,i[o])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,r=n.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=r.transformAction(n.getState(i.row),"insertion",this,n,e);s&&(e!==s.text&&(this.inVirtualSelectionMode||(this.session.mergeUndoDeltas=!1,this.mergeNextCommand=!1)),e=s.text)}e==" "&&(e=this.session.getTabString());if(!this.selection.isEmpty()){var o=this.getSelectionRange();i=this.session.remove(o),this.clearSelection()}else if(this.session.getOverwrite()&&e.indexOf("\n")==-1){var o=new p.fromPoints(i,i);o.end.column+=e.length,this.session.remove(o)}if(e=="\n"||e=="\r\n"){var u=n.getLine(i.row);if(i.column>u.search(/\S|$/)){var a=u.substr(i.column).search(/\S|$/);n.doc.removeInLine(i.row,i.column,i.column+a)}}this.clearSelection();var f=i.column,l=n.getState(i.row),u=n.getLine(i.row),c=r.checkOutdent(l,u,e),h=n.insert(i,e);s&&s.selection&&(s.selection.length==2?this.selection.setSelectionRange(new p(i.row,f+s.selection[0],i.row,f+s.selection[1])):this.selection.setSelectionRange(new p(i.row+s.selection[0],s.selection[1],i.row+s.selection[2],s.selection[3])));if(n.getDocument().isNewLine(e)){var d=r.getNextLineIndent(l,u.slice(0,i.column),n.getTabString());n.insert({row:i.row+1,column:0},d)}c&&r.autoOutdent(l,n,i.row)},this.onTextInput=function(e,t){if(!t)return this.keyBinding.onTextInput(e);this.startOperation({command:{name:"insertstring"}});var n=this.applyComposition.bind(this,e,t);this.selection.rangeCount?this.forEachSelection(n):n(),this.endOperation()},this.applyComposition=function(e,t){if(t.extendLeft||t.extendRight){var n=this.selection.getRange();n.start.column-=t.extendLeft,n.end.column+=t.extendRight,this.selection.setRange(n),!e&&!n.isEmpty()&&this.remove()}(e||!this.selection.isEmpty())&&this.insert(e,!0);if(t.restoreStart||t.restoreEnd){var n=this.selection.getRange();n.start.column-=t.restoreStart,n.end.column-=t.restoreEnd,this.selection.setRange(n)}},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&(e=="left"?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),i=n.getMode().transformAction(r,"deletion",this,n,t);if(t.end.column===0){var s=n.getTextRange(t);if(s[s.length-1]=="\n"){var o=n.getLine(t.end.row);/^\s+$/.test(o)&&(t.end.column=o.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.selection.isEmpty()&&this.selection.selectLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var e=this.getCursorPosition(),t=e.column;if(t===0)return;var n=this.session.getLine(e.row),r,i;tt.toLowerCase()?1:0});var i=new p(0,0,0,0);for(var r=e.first;r<=e.last;r++){var s=t.getLine(r);i.start.row=r,i.end.row=r,i.end.column=s.length,t.replace(i,n[r-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;var r=this.session.getLine(e);while(n.lastIndex=t){var s={value:i[0],start:i.index,end:i.index+i[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new p(t,n-1,t,n),i=this.session.getTextRange(r);if(!isNaN(parseFloat(i))&&isFinite(i)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(".")>=0?s.start+s.value.indexOf(".")+1:s.end,u=s.start+s.value.length-o,a=parseFloat(s.value);a*=Math.pow(10,u),o!==s.end&&n=u&&o<=a&&(n=t,f.selection.clearSelection(),f.moveCursorTo(e,u+r),f.selection.selectTo(e,a+r)),u=a});var l=this.$toggleWordPairs,c;for(var h=0;hp+1)break;p=d.last}l--,u=this.session.$moveLines(h,p,t?0:e),t&&e==-1&&(c=l+1);while(c<=l)o[c].moveBy(u,0),c++;t||(u=0),a+=u}i.fromOrientedRange(i.ranges[0]),i.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(e)},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);t===!0?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):t===!1&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection());var s=n.scrollTop;n.scrollBy(0,i*r.lineHeight),t!=null&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.selection.selectAll()},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),r=new y(this.session,n.row,n.column),i=r.getCurrentToken(),s=i||r.stepForward();if(!s)return;var o,u=!1,a={},f=n.column-s.start,l,c={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(s.value.match(/[{}()\[\]]/g))for(;f=0;--s)this.$tryReplace(n[s],e)&&r++;return this.selection.setSelectionRange(i),r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),t!==null?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),typeof e=="string"||e instanceof RegExp?t.needle=e:typeof e=="object"&&r.mixin(t,e);var i=this.selection.getRange();t.needle==null&&(e=this.session.getTextRange(i)||this.$search.$options.needle,e||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var s=this.$search.find(this.session);if(t.preventScroll)return s;if(s)return this.revealRange(s,n),s;t.backwards?i.start=i.end:i.end=i.start,this.selection.setRange(i)},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.session.unfold(e),this.selection.setSelectionRange(e);var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),t!==!1&&this.renderer.animateScrolling(n)},this.undo=function(){this.session.getUndoManager().undo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.session.getUndoManager().redo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(!e)return;var t,n=this,r=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var i=this.$scrollAnchor;i.style.cssText="position:absolute",this.container.insertBefore(i,this.container.firstChild);var s=this.on("changeSelection",function(){r=!0}),o=this.renderer.on("beforeRender",function(){r&&(t=n.renderer.container.getBoundingClientRect())}),u=this.renderer.on("afterRender",function(){if(r&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,u=s.top-o.offset;s.top>=0&&u+t.top<0?r=!0:s.topwindow.innerHeight?r=!1:r=null,r!=null&&(i.style.top=u+"px",i.style.left=s.left+"px",i.style.height=o.lineHeight+"px",i.scrollIntoView(r)),r=t=null}});this.setAutoScrollEditorIntoView=function(e){if(e)return;delete this.setAutoScrollEditorIntoView,this.off("changeSelection",s),this.renderer.off("afterRender",u),this.renderer.off("beforeRender",o)}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;if(!t)return;t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&e!="wide",i.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e))},this.prompt=function(e,t,n){var r=this;g.loadModule("./ext/prompt",function(i){i.prompt(r,e,t,n)})}}.call(w.prototype),g.defineOptions(w.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.textInput.setReadOnly(e),this.$resetCursorStyle()},initialValue:!1},copyWithEmptySelection:{set:function(e){this.textInput.setCopyWithEmptySelection(e)},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.$keybindingId},handlesSet:!0},value:{set:function(e){this.session.setValue(e)},get:function(){return this.getValue()},handlesSet:!0,hidden:!0},session:{set:function(e){this.setSession(e)},get:function(){return this.session},handlesSet:!0,hidden:!0},showLineNumbers:{set:function(e){this.renderer.$gutterLayer.setShowLineNumbers(e),this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER),e&&this.$relativeLineNumbers?E.attach(this):E.detach(this)},initialValue:!0},relativeLineNumbers:{set:function(e){this.$showLineNumbers&&e?E.attach(this):E.detach(this)}},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",displayIndentGuides:"renderer",showGutter:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",hasCssTransforms:"renderer",maxPixelHeight:"renderer",useTextareaForIME:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimeout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",navigateWithinSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"});var E={getText:function(e,t){return(Math.abs(e.selection.lead.row-t)||t+1+(t<9?"\u00b7":""))+""},getWidth:function(e,t,n){return Math.max(t.toString().length,(n.lastRow+1).toString().length,2)*n.characterWidth},update:function(e,t){t.renderer.$loop.schedule(t.renderer.CHANGE_GUTTER)},attach:function(e){e.renderer.$gutterLayer.$renderer=this,e.on("changeSelection",this.update),this.update(null,e)},detach:function(e){e.renderer.$gutterLayer.$renderer==this&&(e.renderer.$gutterLayer.$renderer=null),e.off("changeSelection",this.update),this.update(null,e)}};t.Editor=w}),define("ace/undomanager",["require","exports","module","ace/range"],function(e,t,n){"use strict";function i(e,t){for(var n=t;n--;){var r=e[n];if(r&&!r[0].ignore){while(n0){a.row+=i,a.column+=a.row==r.row?s:0;continue}!t&&l<=0&&(a.row=n.row,a.column=n.column,l===0&&(a.bias=1))}}function f(e){return{row:e.row,column:e.column}}function l(e){return{start:f(e.start),end:f(e.end),action:e.action,lines:e.lines.slice()}}function c(e){e=e||this;if(Array.isArray(e))return e.map(c).join("\n");var t="";e.action?(t=e.action=="insert"?"+":"-",t+="["+e.lines+"]"):e.value&&(Array.isArray(e.value)?t=e.value.map(h).join("\n"):t=h(e.value)),e.start&&(t+=h(e));if(e.id||e.rev)t+=" ("+(e.id||e.rev)+")";return t}function h(e){return e.start.row+":"+e.start.column+"=>"+e.end.row+":"+e.end.column}function p(e,t){var n=e.action=="insert",r=t.action=="insert";if(n&&r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.start,e.start)<=0))return null;m(e,t,1)}else if(n&&!r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.end,e.start)<=0))return null;m(e,t,-1)}else if(!n&&r)if(o(t.start,e.start)>=0)m(t,e,1);else{if(!(o(t.start,e.start)<=0))return null;m(e,t,1)}else if(!n&&!r)if(o(t.start,e.start)>=0)m(t,e,1);else{if(!(o(t.end,e.start)<=0))return null;m(e,t,-1)}return[t,e]}function d(e,t){for(var n=e.length;n--;)for(var r=0;r=0?m(e,t,-1):o(e.start,t.start)<=0?m(t,e,1):(m(e,s.fromPoints(t.start,e.start),-1),m(t,e,1));else if(!n&&r)o(t.start,e.end)>=0?m(t,e,-1):o(t.start,e.start)<=0?m(e,t,1):(m(t,s.fromPoints(e.start,t.start),-1),m(e,t,1));else if(!n&&!r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.end,e.start)<=0)){var i,u;return o(e.start,t.start)<0&&(i=e,e=y(e,t.start)),o(e.end,t.end)>0&&(u=y(e,t.end)),g(t.end,e.start,e.end,-1),u&&!i&&(e.lines=u.lines,e.start=u.start,e.end=u.end,u=e),[t,i,u].filter(Boolean)}m(e,t,-1)}return[t,e]}function m(e,t,n){g(e.start,t.start,t.end,n),g(e.end,t.start,t.end,n)}function g(e,t,n,r){e.row==(r==1?t:n).row&&(e.column+=r*(n.column-t.column)),e.row+=r*(n.row-t.row)}function y(e,t){var n=e.lines,r=e.end;e.end=f(t);var i=e.end.row-e.start.row,s=n.splice(i,n.length),o=i?t.column:t.column-e.start.column;n.push(s[0].substring(0,o)),s[0]=s[0].substr(o);var u={start:f(t),end:r,lines:s,action:e.action};return u}function b(e,t){t=l(t);for(var n=e.length;n--;){var r=e[n];for(var i=0;i0},this.canRedo=function(){return this.$redoStack.length>0},this.bookmark=function(e){e==undefined&&(e=this.$rev),this.mark=e},this.isAtBookmark=function(){return this.$rev===this.mark},this.toJSON=function(){},this.fromJSON=function(){},this.hasUndo=this.canUndo,this.hasRedo=this.canRedo,this.isClean=this.isAtBookmark,this.markClean=this.bookmark,this.$prettyPrint=function(e){return e?c(e):c(this.$undoStack)+"\n---\n"+c(this.$redoStack)}}).call(r.prototype);var s=e("./range").Range,o=s.comparePoints,u=s.comparePoints;t.UndoManager=r}),define("ace/layer/lines",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../lib/dom"),i=function(e,t){this.element=e,this.canvasHeight=t||5e5,this.element.style.height=this.canvasHeight*2+"px",this.cells=[],this.cellCache=[],this.$offsetCoefficient=0};(function(){this.moveContainer=function(e){r.translate(this.element,0,-(e.firstRowScreen*e.lineHeight%this.canvasHeight)-e.offset*this.$offsetCoefficient)},this.pageChanged=function(e,t){return Math.floor(e.firstRowScreen*e.lineHeight/this.canvasHeight)!==Math.floor(t.firstRowScreen*t.lineHeight/this.canvasHeight)},this.computeLineTop=function(e,t,n){var r=t.firstRowScreen*t.lineHeight,i=Math.floor(r/this.canvasHeight),s=n.documentToScreenRow(e,0)*t.lineHeight;return s-i*this.canvasHeight},this.computeLineHeight=function(e,t,n){return t.lineHeight*n.getRowLength(e)},this.getLength=function(){return this.cells.length},this.get=function(e){return this.cells[e]},this.shift=function(){this.$cacheCell(this.cells.shift())},this.pop=function(){this.$cacheCell(this.cells.pop())},this.push=function(e){if(Array.isArray(e)){this.cells.push.apply(this.cells,e);var t=r.createFragment(this.element);for(var n=0;ns&&(a=i.end.row+1,i=t.getNextFoldLine(a,i),s=i?i.start.row:Infinity);if(a>r){while(this.$lines.getLength()>u+1)this.$lines.pop();break}o=this.$lines.get(++u),o?o.row=a:(o=this.$lines.createCell(a,e,this.session,f),this.$lines.push(o)),this.$renderCell(o,e,i,a),a++}this._signal("afterRender"),this.$updateGutterWidth(e)},this.$updateGutterWidth=function(e){var t=this.session,n=t.gutterRenderer||this.$renderer,r=t.$firstLineNumber,i=this.$lines.last()?this.$lines.last().text:"";if(this.$fixedWidth||t.$useWrapMode)i=t.getLength()+r-1;var s=n?n.getWidth(t,i,e):i.toString().length*e.characterWidth,o=this.$padding||this.$computePadding();s+=o.left+o.right,s!==this.gutterWidth&&!isNaN(s)&&(this.gutterWidth=s,this.element.parentNode.style.width=this.element.style.width=Math.ceil(this.gutterWidth)+"px",this._signal("changeGutterWidth",s))},this.$updateCursorRow=function(){if(!this.$highlightGutterLine)return;var e=this.session.selection.getCursor();if(this.$cursorRow===e.row)return;this.$cursorRow=e.row},this.updateLineHighlight=function(){if(!this.$highlightGutterLine)return;var e=this.session.selection.cursor.row;this.$cursorRow=e;if(this.$cursorCell&&this.$cursorCell.row==e)return;this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ",""));var t=this.$lines.cells;this.$cursorCell=null;for(var n=0;n=this.$cursorRow){if(r.row>this.$cursorRow){var i=this.session.getFoldLine(this.$cursorRow);if(!(n>0&&i&&i.start.row==t[n-1].row))break;r=t[n-1]}r.element.className="ace_gutter-active-line "+r.element.className,this.$cursorCell=r;break}}},this.scrollLines=function(e){var t=this.config;this.config=e,this.$updateCursorRow();if(this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=Math.min(e.lastRow+e.gutterOffset,this.session.getLength()-1),r=this.oldLastRow;this.oldLastRow=n;if(!t||r0;i--)this.$lines.shift();if(r>n)for(var i=this.session.getFoldedRowCount(n+1,r);i>0;i--)this.$lines.pop();e.firstRowr&&this.$lines.push(this.$renderLines(e,r+1,n)),this.updateLineHighlight(),this._signal("afterRender"),this.$updateGutterWidth(e)},this.$renderLines=function(e,t,n){var r=[],i=t,s=this.session.getNextFoldLine(i),o=s?s.start.row:Infinity;for(;;){i>o&&(i=s.end.row+1,s=this.session.getNextFoldLine(i,s),o=s?s.start.row:Infinity);if(i>n)break;var u=this.$lines.createCell(i,e,this.session,f);this.$renderCell(u,e,s,i),r.push(u),i++}return r},this.$renderCell=function(e,t,n,i){var s=e.element,o=this.session,u=s.childNodes[0],a=s.childNodes[1],f=o.$firstLineNumber,l=o.$breakpoints,c=o.$decorations,h=o.gutterRenderer||this.$renderer,p=this.$showFoldWidgets&&o.foldWidgets,d=n?n.start.row:Number.MAX_VALUE,v="ace_gutter-cell ";this.$highlightGutterLine&&(i==this.$cursorRow||n&&i=d&&this.$cursorRow<=n.end.row)&&(v+="ace_gutter-active-line ",this.$cursorCell!=e&&(this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ","")),this.$cursorCell=e)),l[i]&&(v+=l[i]),c[i]&&(v+=c[i]),this.$annotations[i]&&(v+=this.$annotations[i].className),s.className!=v&&(s.className=v);if(p){var m=p[i];m==null&&(m=p[i]=o.getFoldWidget(i))}if(m){var v="ace_fold-widget ace_"+m;m=="start"&&i==d&&in.right-t.right)return"foldWidgets"}}).call(a.prototype),t.Gutter=a}),define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../range").Range,i=e("../lib/dom"),s=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){function e(e,t,n,r){return(e?1:0)|(t?2:0)|(n?4:0)|(r?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.elt=function(e,t){var n=this.i!=-1&&this.element.childNodes[this.i];n?this.i++:(n=document.createElement("div"),this.element.appendChild(n),this.i=-1),n.style.cssText=t,n.className=e},this.update=function(e){if(!e)return;this.config=e,this.i=0;var t;for(var n in this.markers){var r=this.markers[n];if(!r.range){r.update(t,this,this.session,e);continue}var i=r.range.clipRows(e.firstRow,e.lastRow);if(i.isEmpty())continue;i=i.toScreenRange(this.session);if(r.renderer){var s=this.$getTop(i.start.row,e),o=this.$padding+i.start.column*e.characterWidth;r.renderer(t,i,o,s,e)}else r.type=="fullLine"?this.drawFullLineMarker(t,i,r.clazz,e):r.type=="screenLine"?this.drawScreenLineMarker(t,i,r.clazz,e):i.isMultiLine()?r.type=="text"?this.drawTextMarker(t,i,r.clazz,e):this.drawMultiLineMarker(t,i,r.clazz,e):this.drawSingleLineMarker(t,i,r.clazz+" ace_start"+" ace_br15",e)}if(this.i!=-1)while(this.ip,l==f),s,l==f?0:1,o)},this.drawMultiLineMarker=function(e,t,n,r,i){var s=this.$padding,o=r.lineHeight,u=this.$getTop(t.start.row,r),a=s+t.start.column*r.characterWidth;i=i||"";if(this.session.$bidiHandler.isBidiRow(t.start.row)){var f=t.clone();f.end.row=f.start.row,f.end.column=this.session.getLine(f.start.row).length,this.drawBidiSingleLineMarker(e,f,n+" ace_br1 ace_start",r,null,i)}else this.elt(n+" ace_br1 ace_start","height:"+o+"px;"+"right:0;"+"top:"+u+"px;left:"+a+"px;"+(i||""));if(this.session.$bidiHandler.isBidiRow(t.end.row)){var f=t.clone();f.start.row=f.end.row,f.start.column=0,this.drawBidiSingleLineMarker(e,f,n+" ace_br12",r,null,i)}else{u=this.$getTop(t.end.row,r);var l=t.end.column*r.characterWidth;this.elt(n+" ace_br12","height:"+o+"px;"+"width:"+l+"px;"+"top:"+u+"px;"+"left:"+s+"px;"+(i||""))}o=(t.end.row-t.start.row-1)*r.lineHeight;if(o<=0)return;u=this.$getTop(t.start.row+1,r);var c=(t.start.column?1:0)|(t.end.column?0:8);this.elt(n+(c?" ace_br"+c:""),"height:"+o+"px;"+"right:0;"+"top:"+u+"px;"+"left:"+s+"px;"+(i||""))},this.drawSingleLineMarker=function(e,t,n,r,i,s){if(this.session.$bidiHandler.isBidiRow(t.start.row))return this.drawBidiSingleLineMarker(e,t,n,r,i,s);var o=r.lineHeight,u=(t.end.column+(i||0)-t.start.column)*r.characterWidth,a=this.$getTop(t.start.row,r),f=this.$padding+t.start.column*r.characterWidth;this.elt(n,"height:"+o+"px;"+"width:"+u+"px;"+"top:"+a+"px;"+"left:"+f+"px;"+(s||""))},this.drawBidiSingleLineMarker=function(e,t,n,r,i,s){var o=r.lineHeight,u=this.$getTop(t.start.row,r),a=this.$padding,f=this.session.$bidiHandler.getSelections(t.start.column,t.end.column);f.forEach(function(e){this.elt(n,"height:"+o+"px;"+"width:"+e.width+(i||0)+"px;"+"top:"+u+"px;"+"left:"+(a+e.left)+"px;"+(s||""))},this)},this.drawFullLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,r)-s),this.elt(n,"height:"+o+"px;"+"top:"+s+"px;"+"left:0;right:0;"+(i||""))},this.drawScreenLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;this.elt(n,"height:"+o+"px;"+"top:"+s+"px;"+"left:0;right:0;"+(i||""))}}).call(s.prototype),t.Marker=s}),define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/layer/lines","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("./lines").Lines,u=e("../lib/event_emitter").EventEmitter,a=function(e){this.dom=i,this.element=this.dom.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this),this.$lines=new o(this.element)};(function(){r.implement(this,u),this.EOF_CHAR="\u00b6",this.EOL_CHAR_LF="\u00ac",this.EOL_CHAR_CRLF="\u00a4",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="\u2014",this.SPACE_CHAR="\u00b7",this.$padding=0,this.MAX_LINE_LENGTH=1e4,this.$updateEolChar=function(){var e=this.session.doc,t=e.getNewLineCharacter()=="\n"&&e.getNewLineMode()!="windows",n=t?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=n)return this.EOL_CHAR=n,!0},this.setPadding=function(e){this.$padding=e,this.element.style.margin="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles==e?!1:(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides==e?!1:(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;var t=this.$tabStrings=[0];for(var n=1;nl&&(u=a.end.row+1,a=this.session.getNextFoldLine(u,a),l=a?a.start.row:Infinity);if(u>i)break;var c=s[o++];if(c){this.dom.removeChildren(c),this.$renderLine(c,u,u==l?a:!1);var h=e.lineHeight*this.session.getRowLength(u)+"px";c.style.height!=h&&(f=!0,c.style.height=h)}u++}if(f)while(o0;i--)this.$lines.shift();if(t.lastRow>e.lastRow)for(var i=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);i>0;i--)this.$lines.pop();e.firstRowt.lastRow&&this.$lines.push(this.$renderLinesFragment(e,t.lastRow+1,e.lastRow))},this.$renderLinesFragment=function(e,t,n){var r=[],s=t,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>n)break;var a=this.$lines.createCell(s,e,this.session),f=a.element;this.dom.removeChildren(f),i.setStyle(f.style,"height",this.$lines.computeLineHeight(s,e,this.session)+"px"),i.setStyle(f.style,"top",this.$lines.computeLineTop(s,e,this.session)+"px"),this.$renderLine(f,s,s==u?o:!1),this.$useLineGroups()?f.className="ace_line_group":f.className="ace_line",r.push(a),s++}return r},this.update=function(e){this.$lines.moveContainer(e),this.config=e;var t=e.firstRow,n=e.lastRow,r=this.$lines;while(r.getLength())r.pop();r.push(this.$renderLinesFragment(e,t,n))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var i=this,o=/(\t)|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\uFEFF\uFFF9-\uFFFC]+)|(\u3000)|([\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF])/g,u=this.dom.createFragment(this.element),a,f=0;while(a=o.exec(r)){var l=a[1],c=a[2],h=a[3],p=a[4],d=a[5];if(!i.showInvisibles&&c)continue;var v=f!=a.index?r.slice(f,a.index):"";f=a.index+a[0].length,v&&u.appendChild(this.dom.createTextNode(v,this.element));if(l){var m=i.session.getScreenTabSize(t+a.index);u.appendChild(i.$tabStrings[m].cloneNode(!0)),t+=m-1}else if(c)if(i.showInvisibles){var g=this.dom.createElement("span");g.className="ace_invisible ace_invisible_space",g.textContent=s.stringRepeat(i.SPACE_CHAR,c.length),u.appendChild(g)}else u.appendChild(this.com.createTextNode(c,this.element));else if(h){var g=this.dom.createElement("span");g.className="ace_invisible ace_invisible_space ace_invalid",g.textContent=s.stringRepeat(i.SPACE_CHAR,h.length),u.appendChild(g)}else if(p){var y=i.showInvisibles?i.SPACE_CHAR:"";t+=1;var g=this.dom.createElement("span");g.style.width=i.config.characterWidth*2+"px",g.className=i.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",g.textContent=i.showInvisibles?i.SPACE_CHAR:"",u.appendChild(g)}else if(d){t+=1;var g=this.dom.createElement("span");g.style.width=i.config.characterWidth*2+"px",g.className="ace_cjk",g.textContent=d,u.appendChild(g)}}u.appendChild(this.dom.createTextNode(f?r.slice(f):r,this.element));if(!this.$textToken[n.type]){var b="ace_"+n.type.replace(/\./g," ace_"),g=this.dom.createElement("span");n.type=="fold"&&(g.style.width=n.value.length*this.config.characterWidth+"px"),g.className=b,g.appendChild(u),e.appendChild(g)}else e.appendChild(u);return t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);if(r<=0||r>=n)return t;if(t[0]==" "){r-=r%this.tabSize;var i=r/this.tabSize;for(var s=0;s=o)u=this.$renderToken(a,u,l,c.substring(0,o-r)),c=c.substring(o-r),r=o,a=this.$createLineElement(),e.appendChild(a),a.appendChild(this.dom.createTextNode(s.stringRepeat("\u00a0",n.indent),this.element)),i++,u=0,o=n[i]||Number.MAX_VALUE;c.length!=0&&(r+=c.length,u=this.$renderToken(a,u,l,c))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;sthis.MAX_LINE_LENGTH)return this.$renderOverflowMessage(e,n,r,i);n=this.$renderToken(e,n,r,i)}},this.$renderOverflowMessage=function(e,t,n,r){this.$renderToken(e,t,n,r.slice(0,this.MAX_LINE_LENGTH-t));var i=this.dom.createElement("span");i.className="ace_inline_button ace_keyword ace_toggle_wrap",i.style.position="absolute",i.style.right="0",i.textContent="",e.appendChild(i)},this.$renderLine=function(e,t,n){!n&&n!=0&&(n=this.session.getFoldLine(t));if(n)var r=this.$getFoldLineTokens(t,n);else var r=this.session.getTokens(t);var i=e;if(r.length){var s=this.session.getRowSplitData(t);if(s&&s.length){this.$renderWrappedLine(e,r,s);var i=e.lastChild}else{var i=e;this.$useLineGroups()&&(i=this.$createLineElement(),e.appendChild(i)),this.$renderSimpleLine(i,r)}}else this.$useLineGroups()&&(i=this.$createLineElement(),e.appendChild(i));if(this.showInvisibles&&i){n&&(t=n.end.row);var o=this.dom.createElement("span");o.className="ace_invisible ace_invisible_eol",o.textContent=t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,i.appendChild(o)}},this.$getFoldLineTokens=function(e,t){function i(e,t,n){var i=0,s=0;while(s+e[i].value.lengthn-t&&(o=o.substring(0,n-t)),r.push({type:e[i].type,value:o}),s=t+o.length,i+=1}while(sn?r.push({type:e[i].type,value:o.substring(0,n-s)}):r.push(e[i]),s+=o.length,i+=1}}var n=this.session,r=[],s=n.getTokens(e);return t.walk(function(e,t,o,u,a){e!=null?r.push({type:"fold",value:e}):(a&&(s=n.getTokens(t)),s.length&&i(s,u,o))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){}}).call(a.prototype),t.Text=a}),define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../lib/dom"),i=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=this.$updateOpacity.bind(this)};(function(){this.$updateOpacity=function(e){var t=this.cursors;for(var n=t.length;n--;)r.setStyle(t[n].style,"opacity",e?"":"0")},this.$startCssAnimation=function(){var e=this.cursors;for(var t=e.length;t--;)e[t].style.animationDuration=this.blinkInterval+"ms";setTimeout(function(){r.addCssClass(this.element,"ace_animate-blinking")}.bind(this))},this.$stopCssAnimation=function(){r.removeCssClass(this.element,"ace_animate-blinking")},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&(this.smoothBlinking=e,r.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.restartTimer())},this.addCursor=function(){var e=r.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.$stopCssAnimation(),this.smoothBlinking&&r.removeCssClass(this.element,"ace_smooth-blinking"),e(!0);if(!this.isBlinking||!this.blinkInterval||!this.isVisible){this.$stopCssAnimation();return}this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));if(r.HAS_CSS_ANIMATION)this.$startCssAnimation();else{var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),r=this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),i=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:r,top:i}},this.isCursorInView=function(e,t){return e.top>=0&&e.tope.height+e.offset||o.top<0)&&n>1)continue;var u=this.cursors[i++]||this.addCursor(),a=u.style;this.drawCursor?this.drawCursor(u,o,e,t[n],this.session):this.isCursorInView(o,e)?(r.setStyle(a,"display","block"),r.translate(u,o.left,o.top),r.setStyle(a,"width",Math.round(e.characterWidth)+"px"),r.setStyle(a,"height",e.lineHeight+"px")):r.setStyle(a,"display","none")}while(this.cursors.length>i)this.removeCursor();var f=this.session.getOverwrite();this.$setOverwrite(f),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,"ace_overwrite-cursors"):r.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(i.prototype),t.Cursor=i}),define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./lib/event"),o=e("./lib/event_emitter").EventEmitter,u=32768,a=function(e){this.element=i.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=i.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,"scroll",this.onScroll.bind(this)),s.addListener(this.element,"mousedown",s.preventDefault)};(function(){r.implement(this,o),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e,this.coeff=1}}).call(a.prototype);var f=function(e,t){a.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px",this.$minWidth=0};r.inherits(f,a),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){this.scrollTop=this.element.scrollTop;if(this.coeff!=1){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>u?(this.coeff=u/e,e=u):this.coeff!=1&&(this.coeff=1),this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(f.prototype);var l=function(e,t){a.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};r.inherits(l,a),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(l.prototype),t.ScrollBar=f,t.ScrollBarV=f,t.ScrollBarH=l,t.VScrollBar=f,t.HScrollBar=l}),define("ace/renderloop",["require","exports","module","ace/lib/event"],function(e,t,n){"use strict";var r=e("./lib/event"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.$recursionLimit=2,this.window=t||window;var n=this;this._flush=function(e){n.pending=!1;var t=n.changes;t&&(r.blockIdle(100),n.changes=0,n.onRender(t));if(n.changes){if(n.$recursionLimit--<0)return;n.schedule()}else n.$recursionLimit=2}};(function(){this.schedule=function(e){this.changes=this.changes|e,this.changes&&!this.pending&&(r.nextFrame(this._flush),this.pending=!0)},this.clear=function(e){var t=this.changes;return this.changes=0,t}}).call(i.prototype),t.RenderLoop=i}),define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/event"),u=e("../lib/useragent"),a=e("../lib/event_emitter").EventEmitter,f=256,l=typeof ResizeObserver=="function",c=200,h=t.FontMetrics=function(e){this.el=i.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),this.$measureNode.innerHTML=s.stringRepeat("X",f),this.$characterSize={width:0,height:0},l?this.$addObserver():this.checkForSizeChanges()};(function(){r.implement(this,a),this.$characterSize={width:0,height:0},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",u.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(e){e===undefined&&(e=this.$measureSizes());if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$addObserver=function(){var e=this;this.$observer=new window.ResizeObserver(function(t){var n=t[0].contentRect;e.checkForSizeChanges({height:n.height,width:n.width/f})}),this.$observer.observe(this.$measureNode)},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer||this.$observer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=o.onIdle(function t(){e.checkForSizeChanges(),o.onIdle(t,500)},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(e){var t={height:(e||this.$measureNode).clientHeight,width:(e||this.$measureNode).clientWidth/f};return t.width===0||t.height===0?null:t},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,f);var t=this.$main.getBoundingClientRect();return t.width/f},this.getCharacterWidth=function(e){var t=this.charSizes[e];return t===undefined&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$observer&&this.$observer.disconnect(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)},this.$getZoom=function e(t){return t?(window.getComputedStyle(t).zoom||1)*e(t.parentElement):1},this.$initTransformMeasureNodes=function(){var e=function(e,t){return["div",{style:"position: absolute;top:"+e+"px;left:"+t+"px;"}]};this.els=i.buildDom([e(0,0),e(c,0),e(0,c),e(c,c)],this.el)},this.transformCoordinates=function(e,t){function r(e,t,n){var r=e[1]*t[0]-e[0]*t[1];return[(-t[1]*n[0]+t[0]*n[1])/r,(+e[1]*n[0]-e[0]*n[1])/r]}function i(e,t){return[e[0]-t[0],e[1]-t[1]]}function s(e,t){return[e[0]+t[0],e[1]+t[1]]}function o(e,t){return[e*t[0],e*t[1]]}function u(e){var t=e.getBoundingClientRect();return[t.left,t.top]}if(e){var n=this.$getZoom(this.el);e=o(1/n,e)}this.els||this.$initTransformMeasureNodes();var a=u(this.els[0]),f=u(this.els[1]),l=u(this.els[2]),h=u(this.els[3]),p=r(i(h,f),i(h,l),i(s(f,l),s(h,a))),d=o(1+p[0],i(f,a)),v=o(1+p[1],i(l,a));if(t){var m=t,g=p[0]*m[0]/c+p[1]*m[1]/c+1,y=s(o(m[0],d),o(m[1],v));return s(o(1/g/c,y),a)}var b=i(e,a),w=r(i(d,o(p[0],b)),i(v,o(p[1],b)),b);return o(c,w)}}).call(h.prototype)}),define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter","ace/lib/useragent"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./config"),o=e("./layer/gutter").Gutter,u=e("./layer/marker").Marker,a=e("./layer/text").Text,f=e("./layer/cursor").Cursor,l=e("./scrollbar").HScrollBar,c=e("./scrollbar").VScrollBar,h=e("./renderloop").RenderLoop,p=e("./layer/font_metrics").FontMetrics,d=e("./lib/event_emitter").EventEmitter,v='.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;box-sizing: border-box;min-width: 100%;contain: style size layout;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;contain: style size layout;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {position: absolute;top: 0;left: 0;right: 0;padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {contain: strict;position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;contain: strict;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: transparent;color: inherit;z-index: 1000;opacity: 1;}.ace_composition_placeholder { color: transparent }.ace_composition_marker { border-bottom: 1px solid;position: absolute;border-radius: 0;margin-top: 1px;}[ace_nocontext=true] {transform: none!important;filter: none!important;perspective: none!important;clip-path: none!important;mask : none!important;contain: none!important;perspective: none!important;mix-blend-mode: initial!important;z-index: auto;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;height: 1000000px;contain: style size layout;}.ace_text-layer {font: inherit !important;position: absolute;height: 1000000px;width: 1000000px;contain: style size layout;}.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {contain: style size layout;position: absolute;top: 0;left: 0;right: 0;}.ace_hidpi .ace_text-layer,.ace_hidpi .ace_gutter-layer,.ace_hidpi .ace_content,.ace_hidpi .ace_gutter {contain: strict;will-change: transform;}.ace_hidpi .ace_text-layer > .ace_line, .ace_hidpi .ace_text-layer > .ace_line_group {contain: strict;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {transition: opacity 0.18s;}.ace_animate-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: step-end;animation-name: blink-ace-animate;animation-iteration-count: infinite;}.ace_animate-blinking.ace_smooth-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: ease-in-out;animation-name: blink-ace-animate-smooth;}@keyframes blink-ace-animate {from, to { opacity: 1; }60% { opacity: 0; }}@keyframes blink-ace-animate-smooth {from, to { opacity: 1; }45% { opacity: 1; }60% { opacity: 0; }85% { opacity: 0; }}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;box-sizing: border-box;}.ace_line .ace_fold {box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_inline_button {border: 1px solid lightgray;display: inline-block;margin: -1px 8px;padding: 0 5px;pointer-events: auto;cursor: pointer;}.ace_inline_button:hover {border-color: gray;background: rgba(200,200,200,0.2);display: inline-block;pointer-events: auto;}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}',m=e("./lib/useragent"),g=m.isIE;i.importCssString(v,"ace_editor.css");var y=function(e,t){var n=this;this.container=e||i.createElement("div"),i.addCssClass(this.container,"ace_editor"),i.HI_DPI&&i.addCssClass(this.container,"ace_hidpi"),this.setTheme(t),this.$gutter=i.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.$gutter.setAttribute("aria-hidden",!0),this.scroller=i.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=i.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new o(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new u(this.content);var r=this.$textLayer=new a(this.content);this.canvas=r.element,this.$markerFront=new u(this.content),this.$cursorLayer=new f(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new c(this.container,this),this.scrollBarH=new l(this.container,this),this.scrollBarV.addEventListener("scroll",function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)}),this.scrollBarH.addEventListener("scroll",function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new p(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal("changeCharacterSize",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.margin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$keepTextAreaAtCursor=!m.isIOS,this.$loop=new h(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,d),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e);if(!e)return;this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode)},this.updateLines=function(e,t,n){t===undefined&&(t=Infinity),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow)return;this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,r){if(this.resizing>2)return;this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;r||(r=i.clientHeight||i.scrollHeight),n||(n=i.clientWidth||i.scrollWidth);var s=this.$updateCachedSize(e,t,n,r);if(!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null},this.$updateCachedSize=function(e,t,n,r){r-=this.$extraHeight||0;var s=0,o=this.$size,u={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};r&&(e||o.height!=r)&&(o.height=r,s|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",s|=this.CHANGE_SCROLL);if(n&&(e||o.width!=n)){s|=this.CHANGE_SIZE,o.width=n,t==null&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,i.setStyle(this.scrollBarH.element.style,"left",t+"px"),i.setStyle(this.scroller.style,"left",t+this.margin.left+"px"),o.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()-this.margin.h),i.setStyle(this.$gutter.style,"left",this.margin.left+"px");var a=this.scrollBarV.getWidth()+"px";i.setStyle(this.scrollBarH.element.style,"right",a),i.setStyle(this.scroller.style,"right",a),i.setStyle(this.scroller.style,"bottom",this.scrollBarH.getHeight());if(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)s|=this.CHANGE_FULL}return o.$dirty=!n||!r,s&&this._signal("resize",u),s},this.onGutterResize=function(e){var t=this.$showGutter?e:0;t!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,t,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()?this.$loop.schedule(this.CHANGE_FULL):this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):this.$computeLayerConfig()},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-this.$padding*2,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var e=i.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=i.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=Math.round(this.characterWidth*this.$printMarginColumn+this.$padding)+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&this.session.$wrap==-1&&this.adjustWrapLimit()},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){var e=this.textarea.style;if(!this.$keepTextAreaAtCursor){i.translate(this.textarea,-100,0);return}var t=this.$cursorLayer.$pixelPos;if(!t)return;var n=this.$composition;n&&n.markerRange&&(t=this.$cursorLayer.getPixelPosition(n.markerRange.start,!0));var r=this.layerConfig,s=t.top,o=t.left;s-=r.offset;var u=n&&n.useTextareaForIME?this.lineHeight:g?0:1;if(s<0||s>r.height-u){i.translate(this.textarea,0,0);return}var a=1;if(!n)s+=this.lineHeight;else if(n.useTextareaForIME){var f=this.textarea.value;a=this.characterWidth*this.session.$getStringScreenWidth(f)[0],u+=2}else s+=this.lineHeight+2;o-=this.scrollLeft,o>this.$size.scrollerWidth-a&&(o=this.$size.scrollerWidth-a),o+=this.gutterWidth+this.margin.left,i.setStyle(e,"height",u+"px"),i.setStyle(e,"width",a+"px"),i.translate(this.textarea,Math.min(o,this.$size.scrollerWidth-a),Math.min(s,this.$size.height-u))},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow,n=this.session.documentToScreenRow(t,0)*e.lineHeight;return n-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var i=this.scrollMargin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.setMargin=function(e,t,n,r){var i=this.margin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,this.$updateCachedSize(!0,this.gutterWidth,this.$size.width,this.$size.height),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){this.$changes&&(e|=this.$changes,this.$changes=0);if(!this.session||!this.container.offsetWidth||this.$frozen||!e&&!t){this.$changes|=e;return}if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){e|=this.$computeLayerConfig()|this.$loop.clear();if(n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var r=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;r>0&&(this.scrollTop=r,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig()|this.$loop.clear())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),i.translate(this.content,-this.scrollLeft,-n.offset);var s=n.width+2*this.$padding+"px",o=n.minHeight+"px";i.setStyle(this.content.style,"width",s),i.setStyle(this.content.style,"height",o)}e&this.CHANGE_H_SCROLL&&(i.translate(this.content,-this.scrollLeft,-n.offset),this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left");if(e&this.CHANGE_FULL){this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this._signal("afterRender");return}if(e&this.CHANGE_SCROLL){e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&(e&this.CHANGE_GUTTER||e&this.CHANGE_LINES?this.$gutterLayer.update(n):this.$gutterLayer.scrollLines(n)),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this._signal("afterRender");return}e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER?this.$showGutter&&this.$gutterLayer.update(n):e&this.CHANGE_CURSOR&&this.$highlightGutterLine&&this.$gutterLayer.updateLineHighlight(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal("afterRender")},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var r=n<=2*this.lineHeight,i=!r&&e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var s=this.container.clientWidth;this.container.style.height=n+"px",this.$updateCachedSize(!0,this.$gutterWidth,s,n),this.desiredHeight=n,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength(),i=r*this.lineHeight,s=this.$getLongestLine(),o=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-s-2*this.$padding<0),u=this.$horizScroll!==o;u&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var f=t.scrollerHeight+this.lineHeight,l=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=l;var c=this.scrollMargin;this.session.setScrollTop(Math.max(-c.top,Math.min(this.scrollTop,i-t.scrollerHeight+c.bottom))),this.session.setScrollLeft(Math.max(-c.left,Math.min(this.scrollLeft,s+2*this.$padding-t.scrollerWidth+c.right)));var h=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+l<0||this.scrollTop>c.top),p=a!==h;p&&(this.$vScroll=h,this.scrollBarV.setVisible(h));var d=this.scrollTop%this.lineHeight,v=Math.ceil(f/this.lineHeight)-1,m=Math.max(0,Math.round((this.scrollTop-d)/this.lineHeight)),g=m+v,y,b,w=this.lineHeight;m=e.screenToDocumentRow(m,0);var E=e.getFoldLine(m);E&&(m=E.start.row),y=e.documentToScreenRow(m,0),b=e.getRowLength(m)*w,g=Math.min(e.screenToDocumentRow(g,0),e.getLength()-1),f=t.scrollerHeight+e.getRowLength(g)*w+b,d=this.scrollTop-y*w;var S=0;if(this.layerConfig.width!=s||u)S=this.CHANGE_H_SCROLL;if(u||p)S|=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),p&&(s=this.$getLongestLine());return this.layerConfig={width:s,padding:this.$padding,firstRow:m,firstRowScreen:y,lastRow:g,lineHeight:w,characterWidth:this.characterWidth,minHeight:f,maxHeight:i,offset:d,gutterOffset:w?Math.max(0,Math.ceil((d+t.height-t.scrollerHeight)/w)):0,height:this.$size.scrollerHeight},this.session.$bidiHandler&&this.session.$bidiHandler.setContentWidth(s-this.$padding),S},this.$updateLines=function(){if(!this.$changedLines)return;var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(e>n.lastRow+1)return;if(tthis.$textLayer.MAX_LINE_LENGTH&&(e=this.$textLayer.MAX_LINE_LENGTH+30),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){if(this.$size.scrollerHeight===0)return;var r=this.$cursorLayer.getPixelPosition(e),i=r.left,s=r.top,o=n&&n.top||0,u=n&&n.bottom||0,a=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;a+o>s?(t&&a+o>s+this.lineHeight&&(s-=t*this.$size.scrollerHeight),s===0&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):a+this.$size.scrollerHeight-ui?(i=1-this.scrollMargin.top)return!0;if(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom)return!0;if(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left)return!0;if(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return!0},this.pixelToScreenCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var r=this.$fontMetrics.transformCoordinates([e,t]);e=r[1]-this.gutterWidth-this.margin.left,t=r[0]}else n=this.scroller.getBoundingClientRect();var i=e+this.scrollLeft-n.left-this.$padding,s=i/this.characterWidth,o=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),u=this.$blockCursor?Math.floor(s):Math.round(s);return{row:o,column:u,side:s-u>0?1:-1,offsetX:i}},this.screenToTextCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var r=this.$fontMetrics.transformCoordinates([e,t]);e=r[1]-this.gutterWidth-this.margin.left,t=r[0]}else n=this.scroller.getBoundingClientRect();var i=e+this.scrollLeft-n.left-this.$padding,s=i/this.characterWidth,o=this.$blockCursor?Math.floor(s):Math.round(s),u=Math.floor((t+this.scrollTop-n.top)/this.lineHeight);return this.session.screenToDocumentPosition(u,Math.max(o,0),i)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),i=this.$padding+(this.session.$bidiHandler.isBidiRow(r.row,e)?this.session.$bidiHandler.getPosLeft(r.column):Math.round(r.column*this.characterWidth)),s=r.row*this.lineHeight;return{pageX:n.left+i-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){i.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition=e,e.cssText||(e.cssText=this.textarea.style.cssText,e.keepTextAreaAtCursor=this.$keepTextAreaAtCursor),e.useTextareaForIME=this.$useTextareaForIME,this.$useTextareaForIME?(this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor(),this.$cursorLayer.element.style.display="none"):e.markerId=this.session.addMarker(e.markerRange,"ace_composition_marker","text")},this.setCompositionText=function(e){var t=this.session.selection.cursor;this.addToken(e,"composition_placeholder",t.row,t.column),this.$moveTextAreaToCursor()},this.hideComposition=function(){if(!this.$composition)return;this.$composition.markerId&&this.session.removeMarker(this.$composition.markerId),i.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null,this.$cursorLayer.element.style.display=""},this.addToken=function(e,t,n,r){var i=this.session;i.bgTokenizer.lines[n]=null;var s={type:t,value:e},o=i.getTokens(n);if(r==null)o.push(s);else{var u=0;for(var a=0;a50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e})}}).call(f.prototype);var l=function(e,t,n){var r=null,i=!1,u=Object.create(s),a=[],l=new f({messageBuffer:a,terminate:function(){},postMessage:function(e){a.push(e);if(!r)return;i?setTimeout(c):c()}});l.setEmitSync=function(e){i=e};var c=function(){var e=a.shift();e.command?r[e.command].apply(r,e.args):e.event&&u._signal(e.event,e.data)};return u.postMessage=function(e){l.onMessage({data:e})},u.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},u.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},o.loadModule(["worker",t],function(e){r=new e[n](u);while(a.length)c()}),l};t.UIWorkerClient=l,t.WorkerClient=f,t.createWorker=a}),define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(e,t,n){"use strict";var r=e("./range").Range,i=e("./lib/event_emitter").EventEmitter,s=e("./lib/oop"),o=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout(function(){o.onCursorChange()})},this.$pos=n;var u=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=u.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var i=this.pos;i.$insertRight=!0,i.detach(),i.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach(function(n){var r=t.createAnchor(n.row,n.column);r.$insertRight=!0,r.detach(),e.others.push(r)}),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;this.updateAnchors(e),i&&(this.length+=n);if(i&&!this.session.$fromUndo)if(e.action==="insert")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.insertMergedLines(a,e.lines)}else if(e.action==="remove")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.remove(new r(a.row,a.column,a.row,a.column-n))}this.$updating=!1,this.updateMarkers()},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(this.$updating)return;var e=this,t=this.session,n=function(n,i){t.removeMarker(n.markerId),n.markerId=t.addMarker(new r(n.row,n.column,n.row,n.column+e.length),i,null,!1)};n(this.pos,this.mainClass);for(var i=this.others.length;i--;)n(this.others[i],this.othersClass)},this.onCursorChange=function(e){if(this.$updating||!this.session)return;var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(this.$undoStackDepth===-1)return;var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth;for(var n=0;n1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length&&this.$onRemoveRange(e)},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal("removeRange",{ranges:e}),this.rangeCount===0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new r,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var n=this.getRange(),r=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(r)var u=n.end,a=n.start;else var u=n.start,a=n.end;this.addRange(i.fromPoints(a,a)),this.addRange(i.fromPoints(u,u));return}var f=[],l=this.getLineRange(s,!0);l.start.column=n.start.column,f.push(l);for(var c=s+1;c1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.cursor),s=this.session.documentToScreenPosition(this.anchor),o=this.rectangularRangeBlock(r,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],s=e.column0)g--;if(g>0){var y=0;while(r[y].isEmpty())y++}for(var b=g;b>=y;b--)r[b].isEmpty()&&r.splice(b,1)}return r}}.call(s.prototype);var d=e("./editor").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(!e.marker)return;this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);t!=-1&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(e){var t=this.session.$selectionMarkers;for(var n=e.length;n--;){var r=e[n];if(!r.marker)continue;this.session.removeMarker(r.marker);var i=t.indexOf(r);i!=-1&&t.splice(i,1)}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(f.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(f.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection")},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(!n.multiSelect)return;if(!t.multiSelectAction){var r=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}else t.multiSelectAction=="forEach"?r=n.forEachSelection(t,e.args):t.multiSelectAction=="forEachLine"?r=n.forEachSelection(t,e.args,!0):t.multiSelectAction=="single"?(n.exitMultiSelectMode(),r=t.exec(n,e.args||{})):r=t.multiSelectAction(n,e.args||{});return r},this.forEachSelection=function(e,t,n){if(this.inVirtualSelectionMode)return;var r=n&&n.keepOrder,i=n==1||n&&n.$byLines,o=this.session,u=this.selection,a=u.rangeList,f=(r?u:a).ranges,l;if(!f.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var c=u._eventRegistry;u._eventRegistry={};var h=new s(o);this.inVirtualSelectionMode=!0;for(var p=f.length;p--;){if(i)while(p>0&&f[p].start.row==f[p-1].end.row)p--;h.fromOrientedRange(f[p]),h.index=p,this.selection=o.selection=h;var d=e.exec?e.exec(this,t||{}):e(this,t||{});!l&&d!==undefined&&(l=d),h.toOrientedRange(f[p])}h.detach(),this.selection=o.selection=u,this.inVirtualSelectionMode=!1,u._eventRegistry=c,u.mergeOverlappingRanges(),u.ranges[0]&&u.fromOrientedRange(u.ranges[0]);var v=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),v&&v.from==v.to&&this.renderer.animateScrolling(v.from),l},this.exitMultiSelectMode=function(){if(!this.inMultiSelectMode||this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var t=this.multiSelect.rangeList.ranges,n=[];for(var r=0;r0);u<0&&(u=0),f>=c&&(f=c-1)}var p=this.session.removeFullLines(u,f);p=this.$reAlignText(p,l),this.session.insert({row:u,column:0},p.join("\n")+"\n"),l||(o.start.column=0,o.end.column=p[p.length-1].length),this.selection.setRange(o)}else{s.forEach(function(e){t.substractPoint(e.cursor)});var d=0,v=Infinity,m=n.map(function(t){var n=t.cursor,r=e.getLine(n.row),i=r.substr(n.column).search(/\S/g);return i==-1&&(i=0),n.column>d&&(d=n.column),io?e.insert(r,a.stringRepeat(" ",s-o)):e.remove(new i(r.row,r.column,r.row,r.column-s+o)),t.start.column=t.end.column=d,t.start.row=t.end.row=r.row,t.cursor=t.end}),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(e,t){function u(e){return a.stringRepeat(" ",e)}function f(e){return e[2]?u(i)+e[2]+u(s-e[2].length+o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function l(e){return e[2]?u(i+s-e[2].length)+e[2]+u(o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function c(e){return e[2]?u(i)+e[2]+u(o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}var n=!0,r=!0,i,s,o;return e.map(function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?i==null?(i=t[1].length,s=t[2].length,o=t[3].length,t):(i+s+o!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(n=!1),i>t[1].length&&(i=t[1].length),st[3].length&&(o=t[3].length),t):[e]}).map(t?f:n?r?l:f:c)}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off("addRange",this.$onAddRange),n.multiSelect.off("removeRange",this.$onRemoveRange),n.multiSelect.off("multiSelect",this.$onMultiSelect),n.multiSelect.off("singleSelect",this.$onSingleSelect),n.multiSelect.lead.off("change",this.$checkMultiselectChange),n.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e("./config").defineOptions(d.prototype,"editor",{enableMultiselect:{set:function(e){m(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",o)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../../range").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?"start":t=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\S/,s=e.getLine(t),o=s.search(i);if(o==-1)return;var u=n||s.length,a=e.getLength(),f=t,l=t;while(++tf){var h=e.getLine(l).length;return new r(f,u,l,h)}},this.openingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i+1},u=e.$findClosingBracket(t,o,s);if(!u)return;var a=e.foldWidgets[u.row];return a==null&&(a=e.getFoldWidget(u.row)),a=="start"&&u.row>o.row&&(u.row--,u.column=e.getLine(u.row).length),r.fromPoints(o,u)},this.closingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i},u=e.$findOpeningBracket(t,o);if(!u)return;return u.column++,o.column--,r.fromPoints(u,o)}}).call(i.prototype)}),define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',t.$id="ace/theme/textmate";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}),define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./range").Range;(function(){this.getRowLength=function(e){var t;return this.lineWidgets?t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0:t=0,!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)}),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach();if(this.editor==e)return;this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets))},this.detach=function(e){var t=this.editor;if(!t)return;this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(!n||!e.action)return;var r=e.data,i=r.start.row,s=r.end.row,o=e.action=="add";for(var u=i+1;u0&&!r[i])i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var u=r[o];if(!u||!u.el)continue;if(u.hidden){u.el.style.top=-100-(u.pixelHeight||0)+"px";continue}u._inDocument||(u._inDocument=!0,t.container.appendChild(u.el));var a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;u.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=a-n.offset+"px";var f=u.coverGutter?0:t.gutterWidth;u.fixedWidth||(f-=t.scrollLeft),u.el.style.left=f+"px",u.fullWidth&&u.screenWidth&&(u.el.style.minWidth=n.width+2*n.padding+"px"),u.fixedWidth?u.el.style.right=t.scrollBar.getWidth()+"px":u.el.style.right=""}}}).call(o.prototype),t.LineWidgets=o}),define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[s]);if(o>0)r=s+1;else{if(!(o<0))return s;i=s-1}}return-(r+1)}function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.length)return;var i=o(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length?i=n>0?0:r.length-1:i===0&&n<0&&(i=r.length-1);var u=r[i];if(!u||!n)return;if(u.row===t){do u=r[i+=n];while(u&&u.row===t);if(!u)return r.slice()}var a=[];t=u.row;do a[n<0?"unshift":"push"](u),u=r[i+=n];while(u&&u.row==t);return a.length&&a}var r=e("../line_widgets").LineWidgets,i=e("../lib/dom"),s=e("../range").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,a=n.widgetManager.getWidgetsAtRow(o).filter(function(e){return e.type=="errorMarker"})[0];a?a.destroy():o-=t;var f=u(n,o,t),l;if(f){var c=f[0];s.column=(c.pos&&typeof c.column!="number"?c.pos.sc:c.column)||0,s.row=c.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(a)return;l={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement("div"),type:"errorMarker"},p=h.el.appendChild(i.createElement("div")),d=h.el.appendChild(i.createElement("div"));d.className="error_widget_arrow "+l.className;var v=e.renderer.$cursorLayer.getPixelPosition(s).left;d.style.left=v+e.renderer.gutterWidth-5+"px",h.el.className="error_widget_wrapper",p.className="error_widget "+l.className,p.innerHTML=l.text.join("
"),p.appendChild(i.createElement("div"));var m=function(e,t,n){if(t===0&&(n==="esc"||n==="return"))return h.destroy(),{command:"null"}};h.destroy=function(){if(e.$mouseHandler.isMousePressed)return;e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off("changeSelection",h.destroy),e.off("changeSession",h.destroy),e.off("mouseup",h.destroy),e.off("change",h.destroy)},e.keyBinding.addKeyboardHandler(m),e.on("changeSelection",h.destroy),e.on("changeSession",h.destroy),e.on("mouseup",h.destroy),e.on("change",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")}),define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/range","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],function(e,t,n){"use strict";e("./lib/fixoldbrowsers");var r=e("./lib/dom"),i=e("./lib/event"),s=e("./range").Range,o=e("./editor").Editor,u=e("./edit_session").EditSession,a=e("./undomanager").UndoManager,f=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.require=e,typeof define=="function"&&(t.define=define),t.edit=function(e,n){if(typeof e=="string"){var s=e;e=document.getElementById(s);if(!e)throw new Error("ace.edit can't find div #"+s)}if(e&&e.env&&e.env.editor instanceof o)return e.env.editor;var u="";if(e&&/input|textarea/i.test(e.tagName)){var a=e;u=a.value,e=r.createElement("pre"),a.parentNode.replaceChild(e,a)}else e&&(u=e.textContent,e.innerHTML="");var l=t.createEditSession(u),c=new o(new f(e),l,n),h={document:l,editor:c,onResize:c.resize.bind(c,null)};return a&&(h.textarea=a),i.addListener(window,"resize",h.onResize),c.on("destroy",function(){i.removeListener(window,"resize",h.onResize),h.editor.container.env=null}),c.container.env=c.env=h,c},t.createEditSession=function(e,t){var n=new u(e,t);return n.setUndoManager(new a),n},t.Range=s,t.Editor=o,t.EditSession=u,t.UndoManager=a,t.VirtualRenderer=f,t.version="1.4.4"}); (function() { + window.require(["ace/ace"], function(a) { + if (a) { + a.config.init(true); + a.define = window.define; + } + if (!window.ace) + window.ace = a; + for (var key in a) if (a.hasOwnProperty(key)) + window.ace[key] = a[key]; + window.ace["default"] = window.ace; + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = window.ace; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/editor.config.json b/BTPanel/static/ace/editor.config.json new file mode 100644 index 00000000..af033a68 --- /dev/null +++ b/BTPanel/static/ace/editor.config.json @@ -0,0 +1 @@ +{"fontSize":"12px","theme":"monokai"} \ No newline at end of file diff --git a/BTPanel/static/ace/ext-beautify.js b/BTPanel/static/ace/ext-beautify.js new file mode 100644 index 00000000..36be054f --- /dev/null +++ b/BTPanel/static/ace/ext-beautify.js @@ -0,0 +1,8 @@ +define("ace/ext/beautify",["require","exports","module","ace/token_iterator"],function(e,t,n){"use strict";function i(e,t){return e.type.lastIndexOf(t+".xml")>-1}var r=e("../token_iterator").TokenIterator;t.singletonTags=["area","base","br","col","command","embed","hr","html","img","input","keygen","link","meta","param","source","track","wbr"],t.blockTags=["article","aside","blockquote","body","div","dl","fieldset","footer","form","head","header","html","nav","ol","p","script","section","style","table","tbody","tfoot","thead","ul"],t.beautify=function(e){var n=new r(e,0,0),s=n.getCurrentToken(),o=e.getTabString(),u=t.singletonTags,a=t.blockTags,f,l=!1,c=!1,h=!1,p="",d="",v="",m=0,g=0,y=0,b=0,w=0,E=0,S=0,x,T=0,N=0,C=[],k=!1,L,A=!1,O=!1,M=!1,_=!1,D={0:0},P=[],H=function(){f&&f.value&&f.type!=="string.regexp"&&(f.value=f.value.trim())},B=function(){p=p.replace(/ +$/,"")},j=function(){p=p.trimRight(),l=!1};while(s!==null){T=n.getCurrentTokenRow(),C=n.$rowTokens,f=n.stepForward();if(typeof s!="undefined"){d=s.value,w=0,M=v==="style"||e.$modeId==="ace/mode/css",i(s,"tag-open")?(O=!0,f&&(_=a.indexOf(f.value)!==-1),d==="0;N--)p+="\n";l=!0,!i(s,"comment")&&!s.type.match(/^(comment|string)$/)&&(d=d.trimLeft())}if(d){s.type==="keyword"&&d.match(/^(if|else|elseif|for|foreach|while|switch)$/)?(P[m]=d,H(),h=!0,d.match(/^(else|elseif)$/)&&p.match(/\}[\s]*$/)&&(j(),c=!0)):s.type==="paren.lparen"?(H(),d.substr(-1)==="{"&&(h=!0,A=!1,O||(N=1)),d.substr(0,1)==="{"&&(c=!0,p.substr(-1)!=="["&&p.trimRight().substr(-1)==="["?(j(),c=!1):p.trimRight().substr(-1)===")"?j():B())):s.type==="paren.rparen"?(w=1,d.substr(0,1)==="}"&&(P[m-1]==="case"&&w++,p.trimRight().substr(-1)==="{"?j():(c=!0,M&&(N+=2))),d.substr(0,1)==="]"&&p.substr(-1)!=="}"&&p.trimRight().substr(-1)==="}"&&(c=!1,b++,j()),d.substr(0,1)===")"&&p.substr(-1)!=="("&&p.trimRight().substr(-1)==="("&&(c=!1,b++,j()),B()):s.type!=="keyword.operator"&&s.type!=="keyword"||!d.match(/^(=|==|===|!=|!==|&&|\|\||and|or|xor|\+=|.=|>|>=|<|<=|=>)$/)?s.type==="punctuation.operator"&&d===";"?(j(),H(),h=!0,M&&N++):s.type==="punctuation.operator"&&d.match(/^(:|,)$/)?(j(),H(),d.match(/^(,)$/)&&S>0&&E===0?N++:(h=!0,l=!1)):s.type==="support.php_tag"&&d==="?>"&&!l?(j(),c=!0):i(s,"attribute-name")&&p.substr(-1).match(/^\s$/)?c=!0:i(s,"attribute-equals")?(B(),H()):i(s,"tag-close")&&(B(),d==="/>"&&(c=!0)):(j(),H(),c=!0,h=!0);if(l&&(!s.type.match(/^(comment)$/)||!!d.substr(0,1).match(/^[/#]$/))&&(!s.type.match(/^(string)$/)||!!d.substr(0,1).match(/^['"]$/))){b=y;if(m>g){b++;for(L=m;L>g;L--)D[L]=b}else m")_&&f&&f.value===""&&u.indexOf(v)===-1&&m--,x=T}}s=f}p=p.trim(),e.doc.setValue(p)},t.commands=[{name:"beautify",description:"Format selection (Beautify)",exec:function(e){t.beautify(e.session)},bindKey:"Ctrl-Shift-B"}]}); (function() { + window.require(["ace/ext/beautify"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/ext-elastic_tabstops_lite.js b/BTPanel/static/ace/ext-elastic_tabstops_lite.js new file mode 100644 index 00000000..0604fdeb --- /dev/null +++ b/BTPanel/static/ace/ext-elastic_tabstops_lite.js @@ -0,0 +1,8 @@ +define("ace/ext/elastic_tabstops_lite",["require","exports","module","ace/editor","ace/config"],function(e,t,n){"use strict";var r=function(e){this.$editor=e;var t=this,n=[],r=!1;this.onAfterExec=function(){r=!1,t.processRows(n),n=[]},this.onExec=function(){r=!0},this.onChange=function(e){r&&(n.indexOf(e.start.row)==-1&&n.push(e.start.row),e.end.row!=e.start.row&&n.push(e.end.row))}};(function(){this.processRows=function(e){this.$inChange=!0;var t=[];for(var n=0,r=e.length;n-1)continue;var s=this.$findCellWidthsForBlock(i),o=this.$setBlockCellWidthsToMax(s.cellWidths),u=s.firstRow;for(var a=0,f=o.length;a=0){n=this.$cellWidthsForRow(r);if(n.length==0)break;t.unshift(n),r--}var i=r+1;r=e;var s=this.$editor.session.getLength();while(r0&&(this.$editor.session.getDocument().insertInLine({row:e,column:f+1},Array(l+1).join(" ")+" "),this.$editor.session.getDocument().removeInLine(e,f,f+1),r+=l),l<0&&p>=-l&&(this.$editor.session.getDocument().removeInLine(e,f+l,f),r+=l)}},this.$izip_longest=function(e){if(!e[0])return[];var t=e[0].length,n=e.length;for(var r=1;rt&&(t=i)}var s=[];for(var o=0;o=t.length?t.length:e.length,r=[];for(var i=0;i"a"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\$(?:\d+|\w+)/,onMatch:e},{regex:/\$\{[\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1),n,r);return r.unshift(i[0]),i},next:"snippetVar"},{regex:/\n/,token:"newline",merge:!1}],snippetVar:[{regex:"\\|"+t("\\|")+"*\\|",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(",")},next:"start"},{regex:"/("+t("/")+"+)/(?:("+t("/")+"*)/)(\\w*):?",onMatch:function(e,t,n){var r=n[0];return r.fmtString=e,e=this.splitRegex.exec(e),r.guard=e[1],r.fmt=e[2],r.flag=e[3],""},next:"start"},{regex:"`"+t("`")+"*`",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),""},next:"start"},{regex:"\\?",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:"start"},{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"start"}],formatString:[{regex:"/("+t("/")+"+)/",token:"regex"},{regex:"",onMatch:function(e,t,n){n.inFormatString=!0},next:"start"}]}),c.prototype.getTokenizer=function(){return c.$tokenizer},c.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+"__"]||{})[n]}if(/^\d+$/.test(t))return(this.variables.__||{})[t];t=t.replace(/^TM_/,"");if(!e)return;var r=e.session;switch(t){case"CURRENT_WORD":var i=r.getWordRange();case"SELECTION":case"SELECTED_TEXT":return r.getTextRange(i);case"CURRENT_LINE":return r.getLine(e.getCursorPosition().row);case"PREV_LINE":return r.getLine(e.getCursorPosition().row-1);case"LINE_INDEX":return e.getCursorPosition().column;case"LINE_NUMBER":return e.getCursorPosition().row+1;case"SOFT_TABS":return r.getUseSoftTabs()?"YES":"NO";case"TAB_SIZE":return r.getTabSize();case"FILENAME":case"FILEPATH":return"";case"FULLNAME":return"Ace"}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||"":this.$getDefaultValue(e,t)||""},this.tmStrFormat=function(e,t,n){var r=t.flag||"",i=t.guard;i=new RegExp(i,r.replace(/[^gi]/,""));var s=this.tokenizeTmSnippet(t.fmt,"formatString"),o=this,u=e.replace(i,function(){o.variables.__=arguments;var e=o.resolveVariables(s,n),t="E";for(var r=0;r1?(y=t[t.length-1].length,g+=t.length-1):y+=e.length,b+=e}else e.start?e.end={row:g,column:y}:e.start={row:g,column:y}});var w=e.getSelectionRange(),E=e.session.replace(w,b),S=new h(e),x=e.inVirtualSelectionMode&&e.selection.index;S.addTabstops(u,w.start,E,x)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection(function(){n.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||"";t=t.split("/").pop();if(t==="html"||t==="php"){t==="php"&&!e.session.$mode.inlinePhp&&(t="html");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r=="object"&&(r=r[0]),r.substring&&(r.substring(0,3)=="js-"?t="javascript":r.substring(0,4)=="css-"?t="css":r.substring(0,4)=="php-"&&(t="php"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push("_"),n},this.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},this.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},this.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[""],i.matchAfter=i.endRe?i.endRe.exec(n):[""],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:"",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:"",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){function o(e){return e&&!/^\^?\(.*\)\$?$|^\\b$/.test(e)&&(e="(?:"+e+")"),e||""}function u(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&e[e.length-1]!="$"&&(e+="$")):(e+=t,e&&e[0]!="^"&&(e="^"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||"_"),t=e.scope,n[t]||(n[t]=[],r[t]={});var o=r[t];if(e.name){var a=o[e.name];a&&i.unregister(a),o[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\w/.test(e.tabTrigger)&&(e.guard="\\b"),e.trigger=s.escapeRegExp(e.tabTrigger));if(!e.trigger&&!e.guard&&!e.endTrigger&&!e.endGuard)return;e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),e&&e.content?a(e):Array.isArray(e)&&e.forEach(a),this._signal("registerSnippets",{scope:t})},this.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\r/g,"");var t=[],n={},r=/^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\t/gm,""),t.push(n),n={};else{var o=i[2],u=i[3];if(o=="regex"){var a=/\/((?:[^\/\\]|\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o=="snippet"?(n.tabTrigger=u.match(/^\S*/)[0],n.name||(n.name=u)):n[o]=u}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(c.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on("change",this.$onChange),this.editor.on("changeSelection",this.$onChangeSelection),this.editor.on("changeSession",this.$onChangeSession),this.editor.commands.on("afterExec",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener("change",this.$onChange),this.editor.removeListener("changeSelection",this.$onChangeSelection),this.editor.removeListener("changeSession",this.$onChangeSession),this.editor.commands.removeListener("afterExec",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e,n=e.action[0]=="r",r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=i.column-r.column;n&&(u=-u,a=-a);if(!this.$inChange&&n){var f=this.selectedTabstop,c=f&&!f.some(function(e){return l(e.start,r)<=0&&l(e.end,i)>=0});if(c)return this.detach()}var h=this.ranges;for(var p=0;p0){this.removeRange(d),p--;continue}d.start.row==s&&d.start.column>r.column&&(d.start.column+=a),d.end.row==s&&d.end.column>=r.column&&(d.end.column+=a),d.start.row>=s&&(d.start.row+=u),d.end.row>=s&&(d.end.row+=u),l(d.start,d.end)>0&&this.removeRange(d)}h.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=e.length;i--;){var s=e[i];if(!s.linked)continue;var o=t.snippetManager.tmStrFormat(r,s.original);n.replace(s,o)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=this.ranges.length;r--;){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;if(!this.editor.inVirtualSelectionMode){var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var r=t.length;r--;){if(t.hasLinkedRanges&&t[r].linked)continue;n.addRange(t[r].clone(),!0)}n.ranges[0]&&n.addRange(n.ranges[0].clone())}else this.editor.selection.setRange(t.firstNonLinked);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.addTabstops=function(e,t,n){this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var r=o.fromPoints(n,n);v(r.start,t),v(r.end,t),e[0]=[r],e[0].index=0}var i=this.index,s=[i+1,0],u=this.ranges;e.forEach(function(e,n){var r=this.$openTabstops[n]||e;for(var i=e.length;i--;){var a=e[i],f=o.fromPoints(a.start,a.end||a.start);d(f.start,t),d(f.end,t),f.original=a,f.tabstop=r,u.push(f),r!=e?r.unshift(f):r[i]=f,a.fmtString?(f.linked=!0,r.hasLinkedRanges=!0):r.firstNonLinked||(r.firstNonLinked=f)}r.firstNonLinked||(r.hasLinkedRanges=!1),r===e&&(s.push(r),this.$openTabstops[n]=r),this.addTabstopMarkers(r)},this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,"ace_snippet-marker","text"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new a,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1)},"Shift-Tab":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var p={};p.onChange=u.prototype.onChange,p.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},p.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var d=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},v=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e("./lib/dom").importCssString(".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}"),t.snippetManager=new c;var m=e("./editor").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)}),define("ace/ext/emmet",["require","exports","module","ace/keyboard/hash_handler","ace/editor","ace/snippets","ace/range","resources","resources","tabStops","resources","utils","actions","ace/config","ace/config"],function(e,t,n){"use strict";function f(){}var r=e("ace/keyboard/hash_handler").HashHandler,i=e("ace/editor").Editor,s=e("ace/snippets").snippetManager,o=e("ace/range").Range,u,a;f.prototype={setupContext:function(e){this.ace=e,this.indentation=e.session.getTabString(),u||(u=window.emmet);var t=u.resources||u.require("resources");t.setVariable("indentation",this.indentation),this.$syntax=null,this.$syntax=this.getSyntax()},getSelectionRange:function(){var e=this.ace.getSelectionRange(),t=this.ace.session.doc;return{start:t.positionToIndex(e.start),end:t.positionToIndex(e.end)}},createSelection:function(e,t){var n=this.ace.session.doc;this.ace.selection.setRange({start:n.indexToPosition(e),end:n.indexToPosition(t)})},getCurrentLineRange:function(){var e=this.ace,t=e.getCursorPosition().row,n=e.session.getLine(t).length,r=e.session.doc.positionToIndex({row:t,column:0});return{start:r,end:r+n}},getCaretPos:function(){var e=this.ace.getCursorPosition();return this.ace.session.doc.positionToIndex(e)},setCaretPos:function(e){var t=this.ace.session.doc.indexToPosition(e);this.ace.selection.moveToPosition(t)},getCurrentLine:function(){var e=this.ace.getCursorPosition().row;return this.ace.session.getLine(e)},replaceContent:function(e,t,n,r){n==null&&(n=t==null?this.getContent().length:t),t==null&&(t=0);var i=this.ace,u=i.session.doc,a=o.fromPoints(u.indexToPosition(t),u.indexToPosition(n));i.session.remove(a),a.end=a.start,e=this.$updateTabstops(e),s.insertSnippet(i,e)},getContent:function(){return this.ace.getValue()},getSyntax:function(){if(this.$syntax)return this.$syntax;var e=this.ace.session.$modeId.split("/").pop();if(e=="html"||e=="php"){var t=this.ace.getCursorPosition(),n=this.ace.session.getState(t.row);typeof n!="string"&&(n=n[0]),n&&(n=n.split("-"),n.length>1?e=n[0]:e=="php"&&(e="html"))}return e},getProfileName:function(){var e=u.resources||u.require("resources");switch(this.getSyntax()){case"css":return"css";case"xml":case"xsl":return"xml";case"html":var t=e.getVariable("profile");return t||(t=this.ace.session.getLines(0,2).join("").search(/]+XHTML/i)!=-1?"xhtml":"html"),t;default:var n=this.ace.session.$mode;return n.emmetConfig&&n.emmetConfig.profile||"xhtml"}},prompt:function(e){return prompt(e)},getSelection:function(){return this.ace.session.getTextRange()},getFilePath:function(){return""},$updateTabstops:function(e){var t=1e3,n=0,r=null,i=u.tabStops||u.require("tabStops"),s=u.resources||u.require("resources"),o=s.getVocabulary("user"),a={tabstop:function(e){var s=parseInt(e.group,10),o=s===0;o?s=++n:s+=t;var u=e.placeholder;u&&(u=i.processText(u,a));var f="${"+s+(u?":"+u:"")+"}";return o&&(r=[e.start,f]),f},escape:function(e){return e=="$"?"\\$":e=="\\"?"\\\\":e}};e=i.processText(e,a);if(o.variables.insert_final_tabstop&&!/\$\{0\}$/.test(e))e+="${0}";else if(r){var f=u.utils?u.utils.common:u.require("utils");e=f.replaceSubstring(e,"${0}",r[0],r[1])}return e}};var l={expand_abbreviation:{mac:"ctrl+alt+e",win:"alt+e"},match_pair_outward:{mac:"ctrl+d",win:"ctrl+,"},match_pair_inward:{mac:"ctrl+j",win:"ctrl+shift+0"},matching_pair:{mac:"ctrl+alt+j",win:"alt+j"},next_edit_point:"alt+right",prev_edit_point:"alt+left",toggle_comment:{mac:"command+/",win:"ctrl+/"},split_join_tag:{mac:"shift+command+'",win:"shift+ctrl+`"},remove_tag:{mac:"command+'",win:"shift+ctrl+;"},evaluate_math_expression:{mac:"shift+command+y",win:"shift+ctrl+y"},increment_number_by_1:"ctrl+up",decrement_number_by_1:"ctrl+down",increment_number_by_01:"alt+up",decrement_number_by_01:"alt+down",increment_number_by_10:{mac:"alt+command+up",win:"shift+alt+up"},decrement_number_by_10:{mac:"alt+command+down",win:"shift+alt+down"},select_next_item:{mac:"shift+command+.",win:"shift+ctrl+."},select_previous_item:{mac:"shift+command+,",win:"shift+ctrl+,"},reflect_css_value:{mac:"shift+command+r",win:"shift+ctrl+r"},encode_decode_data_url:{mac:"shift+ctrl+d",win:"ctrl+'"},expand_abbreviation_with_tab:"Tab",wrap_with_abbreviation:{mac:"shift+ctrl+a",win:"shift+ctrl+a"}},c=new f;t.commands=new r,t.runEmmetCommand=function d(e){try{c.setupContext(e);var n=u.actions||u.require("actions");if(this.action=="expand_abbreviation_with_tab"){if(!e.selection.isEmpty())return!1;var r=e.selection.lead,i=e.session.getTokenAt(r.row,r.column);if(i&&/\btag\b/.test(i.type))return!1}if(this.action=="wrap_with_abbreviation")return setTimeout(function(){n.run("wrap_with_abbreviation",c)},0);var s=n.run(this.action,c)}catch(o){if(!u)return t.load(d.bind(this,e)),!0;e._signal("changeStatus",typeof o=="string"?o:o.message),console.log(o),s=!1}return s};for(var h in l)t.commands.addCommand({name:"emmet:"+h,action:h,bindKey:l[h],exec:t.runEmmetCommand,multiSelectAction:"forEach"});t.updateCommands=function(e,n){n?e.keyBinding.addKeyboardHandler(t.commands):e.keyBinding.removeKeyboardHandler(t.commands)},t.isSupportedMode=function(e){if(!e)return!1;if(e.emmetConfig)return!0;var t=e.$id||e;return/css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(t)},t.isAvailable=function(e,n){if(/(evaluate_math_expression|expand_abbreviation)$/.test(n))return!0;var r=e.session.$mode,i=t.isSupportedMode(r);if(i&&r.$modes)try{c.setupContext(e),/js|php/.test(c.getSyntax())&&(i=!1)}catch(s){}return i};var p=function(e,n){var r=n;if(!r)return;var i=t.isSupportedMode(r.session.$mode);e.enableEmmet===!1&&(i=!1),i&&t.load(),t.updateCommands(r,i)};t.load=function(t){typeof a=="string"&&e("ace/config").loadModule(a,function(){a=null,t&&t()})},t.AceEmmetEditor=f,e("ace/config").defineOptions(i.prototype,"editor",{enableEmmet:{set:function(e){this[e?"on":"removeListener"]("changeMode",p),p({enableEmmet:!!e},this)},value:!0}}),t.setCore=function(e){typeof e=="string"?a=e:u=e}}); (function() { + window.require(["ace/ext/emmet"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/ext-error_marker.js b/BTPanel/static/ace/ext-error_marker.js new file mode 100644 index 00000000..066ec874 --- /dev/null +++ b/BTPanel/static/ace/ext-error_marker.js @@ -0,0 +1,8 @@ +; (function() { + window.require(["ace/ext/error_marker"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/ext-language_tools.js b/BTPanel/static/ace/ext-language_tools.js new file mode 100644 index 00000000..258b93de --- /dev/null +++ b/BTPanel/static/ace/ext-language_tools.js @@ -0,0 +1,8 @@ +define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./lib/lang"),o=e("./range").Range,u=e("./anchor").Anchor,a=e("./keyboard/hash_handler").HashHandler,f=e("./tokenizer").Tokenizer,l=o.comparePoints,c=function(){this.snippetMap={},this.snippetNameMap={}};(function(){r.implement(this,i),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return"(?:[^\\\\"+e+"]|\\\\.)"}return c.$tokenizer=new f({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):":"}},{regex:/\\./,onMatch:function(e,t,n){var r=e[1];return r=="}"&&n.length?e=r:"`$\\".indexOf(r)!=-1?e=r:n.inFormatString&&(r=="n"?e="\n":r=="t"?e="\n":"ulULE".indexOf(r)!=-1&&(e={changeCase:r,local:r>"a"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\$(?:\d+|\w+)/,onMatch:e},{regex:/\$\{[\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1),n,r);return r.unshift(i[0]),i},next:"snippetVar"},{regex:/\n/,token:"newline",merge:!1}],snippetVar:[{regex:"\\|"+t("\\|")+"*\\|",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(",")},next:"start"},{regex:"/("+t("/")+"+)/(?:("+t("/")+"*)/)(\\w*):?",onMatch:function(e,t,n){var r=n[0];return r.fmtString=e,e=this.splitRegex.exec(e),r.guard=e[1],r.fmt=e[2],r.flag=e[3],""},next:"start"},{regex:"`"+t("`")+"*`",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),""},next:"start"},{regex:"\\?",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:"start"},{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"start"}],formatString:[{regex:"/("+t("/")+"+)/",token:"regex"},{regex:"",onMatch:function(e,t,n){n.inFormatString=!0},next:"start"}]}),c.prototype.getTokenizer=function(){return c.$tokenizer},c.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+"__"]||{})[n]}if(/^\d+$/.test(t))return(this.variables.__||{})[t];t=t.replace(/^TM_/,"");if(!e)return;var r=e.session;switch(t){case"CURRENT_WORD":var i=r.getWordRange();case"SELECTION":case"SELECTED_TEXT":return r.getTextRange(i);case"CURRENT_LINE":return r.getLine(e.getCursorPosition().row);case"PREV_LINE":return r.getLine(e.getCursorPosition().row-1);case"LINE_INDEX":return e.getCursorPosition().column;case"LINE_NUMBER":return e.getCursorPosition().row+1;case"SOFT_TABS":return r.getUseSoftTabs()?"YES":"NO";case"TAB_SIZE":return r.getTabSize();case"FILENAME":case"FILEPATH":return"";case"FULLNAME":return"Ace"}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||"":this.$getDefaultValue(e,t)||""},this.tmStrFormat=function(e,t,n){var r=t.flag||"",i=t.guard;i=new RegExp(i,r.replace(/[^gi]/,""));var s=this.tokenizeTmSnippet(t.fmt,"formatString"),o=this,u=e.replace(i,function(){o.variables.__=arguments;var e=o.resolveVariables(s,n),t="E";for(var r=0;r1?(y=t[t.length-1].length,g+=t.length-1):y+=e.length,b+=e}else e.start?e.end={row:g,column:y}:e.start={row:g,column:y}});var w=e.getSelectionRange(),E=e.session.replace(w,b),S=new h(e),x=e.inVirtualSelectionMode&&e.selection.index;S.addTabstops(u,w.start,E,x)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection(function(){n.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||"";t=t.split("/").pop();if(t==="html"||t==="php"){t==="php"&&!e.session.$mode.inlinePhp&&(t="html");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r=="object"&&(r=r[0]),r.substring&&(r.substring(0,3)=="js-"?t="javascript":r.substring(0,4)=="css-"?t="css":r.substring(0,4)=="php-"&&(t="php"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push("_"),n},this.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},this.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},this.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[""],i.matchAfter=i.endRe?i.endRe.exec(n):[""],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:"",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:"",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){function o(e){return e&&!/^\^?\(.*\)\$?$|^\\b$/.test(e)&&(e="(?:"+e+")"),e||""}function u(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&e[e.length-1]!="$"&&(e+="$")):(e+=t,e&&e[0]!="^"&&(e="^"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||"_"),t=e.scope,n[t]||(n[t]=[],r[t]={});var o=r[t];if(e.name){var a=o[e.name];a&&i.unregister(a),o[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\w/.test(e.tabTrigger)&&(e.guard="\\b"),e.trigger=s.escapeRegExp(e.tabTrigger));if(!e.trigger&&!e.guard&&!e.endTrigger&&!e.endGuard)return;e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),e&&e.content?a(e):Array.isArray(e)&&e.forEach(a),this._signal("registerSnippets",{scope:t})},this.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\r/g,"");var t=[],n={},r=/^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\t/gm,""),t.push(n),n={};else{var o=i[2],u=i[3];if(o=="regex"){var a=/\/((?:[^\/\\]|\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o=="snippet"?(n.tabTrigger=u.match(/^\S*/)[0],n.name||(n.name=u)):n[o]=u}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(c.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on("change",this.$onChange),this.editor.on("changeSelection",this.$onChangeSelection),this.editor.on("changeSession",this.$onChangeSession),this.editor.commands.on("afterExec",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener("change",this.$onChange),this.editor.removeListener("changeSelection",this.$onChangeSelection),this.editor.removeListener("changeSession",this.$onChangeSession),this.editor.commands.removeListener("afterExec",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e,n=e.action[0]=="r",r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=i.column-r.column;n&&(u=-u,a=-a);if(!this.$inChange&&n){var f=this.selectedTabstop,c=f&&!f.some(function(e){return l(e.start,r)<=0&&l(e.end,i)>=0});if(c)return this.detach()}var h=this.ranges;for(var p=0;p0){this.removeRange(d),p--;continue}d.start.row==s&&d.start.column>r.column&&(d.start.column+=a),d.end.row==s&&d.end.column>=r.column&&(d.end.column+=a),d.start.row>=s&&(d.start.row+=u),d.end.row>=s&&(d.end.row+=u),l(d.start,d.end)>0&&this.removeRange(d)}h.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=e.length;i--;){var s=e[i];if(!s.linked)continue;var o=t.snippetManager.tmStrFormat(r,s.original);n.replace(s,o)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=this.ranges.length;r--;){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;if(!this.editor.inVirtualSelectionMode){var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var r=t.length;r--;){if(t.hasLinkedRanges&&t[r].linked)continue;n.addRange(t[r].clone(),!0)}n.ranges[0]&&n.addRange(n.ranges[0].clone())}else this.editor.selection.setRange(t.firstNonLinked);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.addTabstops=function(e,t,n){this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var r=o.fromPoints(n,n);v(r.start,t),v(r.end,t),e[0]=[r],e[0].index=0}var i=this.index,s=[i+1,0],u=this.ranges;e.forEach(function(e,n){var r=this.$openTabstops[n]||e;for(var i=e.length;i--;){var a=e[i],f=o.fromPoints(a.start,a.end||a.start);d(f.start,t),d(f.end,t),f.original=a,f.tabstop=r,u.push(f),r!=e?r.unshift(f):r[i]=f,a.fmtString?(f.linked=!0,r.hasLinkedRanges=!0):r.firstNonLinked||(r.firstNonLinked=f)}r.firstNonLinked||(r.hasLinkedRanges=!1),r===e&&(s.push(r),this.$openTabstops[n]=r),this.addTabstopMarkers(r)},this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,"ace_snippet-marker","text"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new a,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1)},"Shift-Tab":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var p={};p.onChange=u.prototype.onChange,p.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},p.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var d=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},v=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e("./lib/dom").importCssString(".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}"),t.snippetManager=new c;var m=e("./editor").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)}),define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../virtual_renderer").VirtualRenderer,i=e("../editor").Editor,s=e("../range").Range,o=e("../lib/event"),u=e("../lib/lang"),a=e("../lib/dom"),f=function(e){var t=new r(e);t.$maxLines=4;var n=new i(t);return n.setHighlightActiveLine(!1),n.setShowPrintMargin(!1),n.renderer.setShowGutter(!1),n.renderer.setHighlightGutterLine(!1),n.$mouseHandler.$focusTimeout=0,n.$highlightTagPending=!0,n},l=function(e){var t=a.createElement("div"),n=new f(t);e&&e.appendChild(t),t.style.display="none",n.renderer.content.style.cursor="default",n.renderer.setStyle("ace_autocomplete"),n.setOption("displayIndentGuides",!1),n.setOption("dragDelay",150);var r=function(){};n.focus=r,n.$isFocused=!0,n.renderer.$cursorLayer.restartTimer=r,n.renderer.$cursorLayer.element.style.opacity=0,n.renderer.$maxLines=8,n.renderer.$keepTextAreaAtCursor=!1,n.setHighlightActiveLine(!1),n.session.highlight(""),n.session.$searchHighlight.clazz="ace_highlight-marker",n.on("mousedown",function(e){var t=e.getDocumentPosition();n.selection.moveToPosition(t),c.start.row=c.end.row=t.row,e.stop()});var i,l=new s(-1,0,-1,Infinity),c=new s(-1,0,-1,Infinity);c.id=n.session.addMarker(c,"ace_active-line","fullLine"),n.setSelectOnHover=function(e){e?l.id&&(n.session.removeMarker(l.id),l.id=null):l.id=n.session.addMarker(l,"ace_line-hover","fullLine")},n.setSelectOnHover(!1),n.on("mousemove",function(e){if(!i){i=e;return}if(i.x==e.x&&i.y==e.y)return;i=e,i.scrollTop=n.renderer.scrollTop;var t=i.getDocumentPosition().row;l.start.row!=t&&(l.id||n.setRow(t),p(t))}),n.renderer.on("beforeRender",function(){if(i&&l.start.row!=-1){i.$pos=null;var e=i.getDocumentPosition().row;l.id||n.setRow(e),p(e,!0)}}),n.renderer.on("afterRender",function(){var e=n.getRow(),t=n.renderer.$textLayer,r=t.element.childNodes[e-t.config.firstRow];r!==t.selectedNode&&t.selectedNode&&a.removeCssClass(t.selectedNode,"ace_selected"),t.selectedNode=r,r&&a.addCssClass(r,"ace_selected")});var h=function(){p(-1)},p=function(e,t){e!==l.start.row&&(l.start.row=l.end.row=e,t||n.session._emit("changeBackMarker"),n._emit("changeHoverMarker"))};n.getHoveredRow=function(){return l.start.row},o.addListener(n.container,"mouseout",h),n.on("hide",h),n.on("changeSelection",h),n.session.doc.getLength=function(){return n.data.length},n.session.doc.getLine=function(e){var t=n.data[e];return typeof t=="string"?t:t&&t.value||""};var d=n.session.bgTokenizer;return d.$tokenizeRow=function(e){function s(e,n){e&&r.push({type:(t.className||"")+(n||""),value:e})}var t=n.data[e],r=[];if(!t)return r;typeof t=="string"&&(t={value:t});var i=t.caption||t.value||t.name,o=i.toLowerCase(),u=(n.filterText||"").toLowerCase(),a=0,f=0;for(var l=0;l<=u.length;l++)if(l!=f&&(t.matchMask&1<o/2&&!r;c&&l+t+f>o?(a.$maxPixelHeight=l-2*this.$borderSize,s.style.top="",s.style.bottom=o-l+"px",n.isTopdown=!1):(l+=t,a.$maxPixelHeight=o-l-.2*t,s.style.top=l+"px",s.style.bottom="",n.isTopdown=!0),s.style.display="";var h=e.left;h+s.offsetWidth>u&&(h=u-s.offsetWidth),s.style.left=h+"px",this._signal("show"),i=null,n.isOpen=!0},n.goTo=function(e){var t=this.getRow(),n=this.session.getLength()-1;switch(e){case"up":t=t<0?n:t-1;break;case"down":t=t>=n?-1:t+1;break;case"start":t=0;break;case"end":t=n}this.setRow(t)},n.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},n.$imageSize=0,n.$borderSize=1,n};a.importCssString(".ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { background-color: #CAD6FA; z-index: 1;}.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { background-color: #3a674e;}.ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid #abbffe; margin-top: -1px; background: rgba(233,233,253,0.4); position: absolute; z-index: 2;}.ace_dark.ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid rgba(109, 150, 13, 0.8); background: rgba(58, 103, 78, 0.62);}.ace_completion-meta { opacity: 0.5; margin: 0.9em;}.ace_completion-message { color: blue;}.ace_editor.ace_autocomplete .ace_completion-highlight{ color: #2d69c7;}.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{ color: #93ca12;}.ace_editor.ace_autocomplete { width: 300px; z-index: 200000; border: 1px lightgray solid; position: fixed; box-shadow: 2px 3px 5px rgba(0,0,0,.2); line-height: 1.4; background: #fefefe; color: #111;}.ace_dark.ace_editor.ace_autocomplete { border: 1px #484747 solid; box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); line-height: 1.4; background: #25282c; color: #c1c1c1;}","autocompletion.css"),t.AcePopup=l,t.$singleLineEditor=f}),define("ace/autocomplete/util",["require","exports","module"],function(e,t,n){"use strict";t.parForEach=function(e,t,n){var r=0,i=e.length;i===0&&n();for(var s=0;s=0;s--){if(!n.test(e[s]))break;i.push(e[s])}return i.reverse().join("")},t.retrieveFollowingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t;sthis.filterText&&e.lastIndexOf(this.filterText,0)===0)var t=this.filtered;else var t=this.all;this.filterText=e,t=this.filterCompletions(t,this.filterText),t=t.sort(function(e,t){return t.exactMatch-e.exactMatch||t.$score-e.$score||(e.caption||e.value)<(t.caption||t.value)});var n=null;t=t.filter(function(e){var t=e.snippet||e.caption||e.value;return t===n?!1:(n=t,!0)}),this.filtered=t},this.filterCompletions=function(e,t){var n=[],r=t.toUpperCase(),i=t.toLowerCase();e:for(var s=0,o;o=e[s];s++){var u=o.caption||o.value||o.snippet;if(!u)continue;var a=-1,f=0,l=0,c,h;if(this.exactMatch){if(t!==u.substr(0,t.length))continue e}else{var p=u.toLowerCase().indexOf(i);if(p>-1)l=p;else for(var d=0;d=0?m<0||v0&&(a===-1&&(l+=10),l+=h,f|=1<",o.escapeHTML(e.caption),"","
",o.escapeHTML(e.snippet)].join(""))}},c=[l,a,f];t.setCompleters=function(e){c.length=0,e&&c.push.apply(c,e)},t.addCompleter=function(e){c.push(e)},t.textCompleter=a,t.keyWordCompleter=f,t.snippetCompleter=l;var h={name:"expandSnippet",exec:function(e){return r.expandWithTab(e)},bindKey:"Tab"},p=function(e,t){d(t.session.$mode)},d=function(e){var t=e.$id;r.files||(r.files={}),v(t),e.modes&&e.modes.forEach(d)},v=function(e){if(!e||r.files[e])return;var t=e.replace("mode","snippets");r.files[e]={},s.loadModule(t,function(t){t&&(r.files[e]=t,!t.snippets&&t.snippetText&&(t.snippets=r.parseSnippetFile(t.snippetText)),r.register(t.snippets||[],t.scope),t.includeScopes&&(r.snippetMap[t.scope].includeScopes=t.includeScopes,t.includeScopes.forEach(function(e){v("ace/mode/"+e)})))})},m=function(e){var t=e.editor,n=t.completer&&t.completer.activated;if(e.command.name==="backspace")n&&!u.getCompletionPrefix(t)&&t.completer.detach();else if(e.command.name==="insertstring"){var r=u.getCompletionPrefix(t);r&&!n&&(t.completer||(t.completer=new i),t.completer.autoInsert=!1,t.completer.showPopup(t))}},g=e("../editor").Editor;e("../config").defineOptions(g.prototype,"editor",{enableBasicAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:c),this.commands.addCommand(i.startCommand)):this.commands.removeCommand(i.startCommand)},value:!1},enableLiveAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:c),this.commands.on("afterExec",m)):this.commands.removeListener("afterExec",m)},value:!1},enableSnippets:{set:function(e){e?(this.commands.addCommand(h),this.on("changeMode",p),p(null,this)):(this.commands.removeCommand(h),this.off("changeMode",p))},value:!1}})}); (function() { + window.require(["ace/ext/language_tools"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/ext-linking.js b/BTPanel/static/ace/ext-linking.js new file mode 100644 index 00000000..1979c987 --- /dev/null +++ b/BTPanel/static/ace/ext-linking.js @@ -0,0 +1,8 @@ +define("ace/ext/linking",["require","exports","module","ace/editor","ace/config"],function(e,t,n){function i(e){var n=e.editor,r=e.getAccelKey();if(r){var n=e.editor,i=e.getDocumentPosition(),s=n.session,o=s.getTokenAt(i.row,i.column);t.previousLinkingHover&&t.previousLinkingHover!=o&&n._emit("linkHoverOut"),n._emit("linkHover",{position:i,token:o}),t.previousLinkingHover=o}else t.previousLinkingHover&&(n._emit("linkHoverOut"),t.previousLinkingHover=!1)}function s(e){var t=e.getAccelKey(),n=e.getButton();if(n==0&&t){var r=e.editor,i=e.getDocumentPosition(),s=r.session,o=s.getTokenAt(i.row,i.column);r._emit("linkClick",{position:i,token:o})}}var r=e("ace/editor").Editor;e("../config").defineOptions(r.prototype,"editor",{enableLinking:{set:function(e){e?(this.on("click",s),this.on("mousemove",i)):(this.off("click",s),this.off("mousemove",i))},value:!1}}),t.previousLinkingHover=!1}); (function() { + window.require(["ace/ext/linking"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/ext-modelist.js b/BTPanel/static/ace/ext-modelist.js new file mode 100644 index 00000000..6e416374 --- /dev/null +++ b/BTPanel/static/ace/ext-modelist.js @@ -0,0 +1,8 @@ +define("ace/ext/modelist",["require","exports","module"],function(e,t,n){"use strict";function i(e){var t=a.text,n=e.split(/[\/\\]/).pop();for(var i=0;io/2&&!r;c&&l+t+f>o?(a.$maxPixelHeight=l-2*this.$borderSize,s.style.top="",s.style.bottom=o-l+"px",n.isTopdown=!1):(l+=t,a.$maxPixelHeight=o-l-.2*t,s.style.top=l+"px",s.style.bottom="",n.isTopdown=!0),s.style.display="";var h=e.left;h+s.offsetWidth>u&&(h=u-s.offsetWidth),s.style.left=h+"px",this._signal("show"),i=null,n.isOpen=!0},n.goTo=function(e){var t=this.getRow(),n=this.session.getLength()-1;switch(e){case"up":t=t<0?n:t-1;break;case"down":t=t>=n?-1:t+1;break;case"start":t=0;break;case"end":t=n}this.setRow(t)},n.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},n.$imageSize=0,n.$borderSize=1,n};a.importCssString(".ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { background-color: #CAD6FA; z-index: 1;}.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { background-color: #3a674e;}.ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid #abbffe; margin-top: -1px; background: rgba(233,233,253,0.4); position: absolute; z-index: 2;}.ace_dark.ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid rgba(109, 150, 13, 0.8); background: rgba(58, 103, 78, 0.62);}.ace_completion-meta { opacity: 0.5; margin: 0.9em;}.ace_completion-message { color: blue;}.ace_editor.ace_autocomplete .ace_completion-highlight{ color: #2d69c7;}.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{ color: #93ca12;}.ace_editor.ace_autocomplete { width: 300px; z-index: 200000; border: 1px lightgray solid; position: fixed; box-shadow: 2px 3px 5px rgba(0,0,0,.2); line-height: 1.4; background: #fefefe; color: #111;}.ace_dark.ace_editor.ace_autocomplete { border: 1px #484747 solid; box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); line-height: 1.4; background: #25282c; color: #c1c1c1;}","autocompletion.css"),t.AcePopup=l,t.$singleLineEditor=f}),define("ace/autocomplete/util",["require","exports","module"],function(e,t,n){"use strict";t.parForEach=function(e,t,n){var r=0,i=e.length;i===0&&n();for(var s=0;s=0;s--){if(!n.test(e[s]))break;i.push(e[s])}return i.reverse().join("")},t.retrieveFollowingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t;s"a"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\$(?:\d+|\w+)/,onMatch:e},{regex:/\$\{[\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1),n,r);return r.unshift(i[0]),i},next:"snippetVar"},{regex:/\n/,token:"newline",merge:!1}],snippetVar:[{regex:"\\|"+t("\\|")+"*\\|",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(",")},next:"start"},{regex:"/("+t("/")+"+)/(?:("+t("/")+"*)/)(\\w*):?",onMatch:function(e,t,n){var r=n[0];return r.fmtString=e,e=this.splitRegex.exec(e),r.guard=e[1],r.fmt=e[2],r.flag=e[3],""},next:"start"},{regex:"`"+t("`")+"*`",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),""},next:"start"},{regex:"\\?",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:"start"},{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"start"}],formatString:[{regex:"/("+t("/")+"+)/",token:"regex"},{regex:"",onMatch:function(e,t,n){n.inFormatString=!0},next:"start"}]}),c.prototype.getTokenizer=function(){return c.$tokenizer},c.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+"__"]||{})[n]}if(/^\d+$/.test(t))return(this.variables.__||{})[t];t=t.replace(/^TM_/,"");if(!e)return;var r=e.session;switch(t){case"CURRENT_WORD":var i=r.getWordRange();case"SELECTION":case"SELECTED_TEXT":return r.getTextRange(i);case"CURRENT_LINE":return r.getLine(e.getCursorPosition().row);case"PREV_LINE":return r.getLine(e.getCursorPosition().row-1);case"LINE_INDEX":return e.getCursorPosition().column;case"LINE_NUMBER":return e.getCursorPosition().row+1;case"SOFT_TABS":return r.getUseSoftTabs()?"YES":"NO";case"TAB_SIZE":return r.getTabSize();case"FILENAME":case"FILEPATH":return"";case"FULLNAME":return"Ace"}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||"":this.$getDefaultValue(e,t)||""},this.tmStrFormat=function(e,t,n){var r=t.flag||"",i=t.guard;i=new RegExp(i,r.replace(/[^gi]/,""));var s=this.tokenizeTmSnippet(t.fmt,"formatString"),o=this,u=e.replace(i,function(){o.variables.__=arguments;var e=o.resolveVariables(s,n),t="E";for(var r=0;r1?(y=t[t.length-1].length,g+=t.length-1):y+=e.length,b+=e}else e.start?e.end={row:g,column:y}:e.start={row:g,column:y}});var w=e.getSelectionRange(),E=e.session.replace(w,b),S=new h(e),x=e.inVirtualSelectionMode&&e.selection.index;S.addTabstops(u,w.start,E,x)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection(function(){n.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||"";t=t.split("/").pop();if(t==="html"||t==="php"){t==="php"&&!e.session.$mode.inlinePhp&&(t="html");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r=="object"&&(r=r[0]),r.substring&&(r.substring(0,3)=="js-"?t="javascript":r.substring(0,4)=="css-"?t="css":r.substring(0,4)=="php-"&&(t="php"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push("_"),n},this.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},this.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},this.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[""],i.matchAfter=i.endRe?i.endRe.exec(n):[""],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:"",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:"",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){function o(e){return e&&!/^\^?\(.*\)\$?$|^\\b$/.test(e)&&(e="(?:"+e+")"),e||""}function u(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&e[e.length-1]!="$"&&(e+="$")):(e+=t,e&&e[0]!="^"&&(e="^"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||"_"),t=e.scope,n[t]||(n[t]=[],r[t]={});var o=r[t];if(e.name){var a=o[e.name];a&&i.unregister(a),o[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\w/.test(e.tabTrigger)&&(e.guard="\\b"),e.trigger=s.escapeRegExp(e.tabTrigger));if(!e.trigger&&!e.guard&&!e.endTrigger&&!e.endGuard)return;e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),e&&e.content?a(e):Array.isArray(e)&&e.forEach(a),this._signal("registerSnippets",{scope:t})},this.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\r/g,"");var t=[],n={},r=/^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\t/gm,""),t.push(n),n={};else{var o=i[2],u=i[3];if(o=="regex"){var a=/\/((?:[^\/\\]|\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o=="snippet"?(n.tabTrigger=u.match(/^\S*/)[0],n.name||(n.name=u)):n[o]=u}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(c.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on("change",this.$onChange),this.editor.on("changeSelection",this.$onChangeSelection),this.editor.on("changeSession",this.$onChangeSession),this.editor.commands.on("afterExec",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener("change",this.$onChange),this.editor.removeListener("changeSelection",this.$onChangeSelection),this.editor.removeListener("changeSession",this.$onChangeSession),this.editor.commands.removeListener("afterExec",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e,n=e.action[0]=="r",r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=i.column-r.column;n&&(u=-u,a=-a);if(!this.$inChange&&n){var f=this.selectedTabstop,c=f&&!f.some(function(e){return l(e.start,r)<=0&&l(e.end,i)>=0});if(c)return this.detach()}var h=this.ranges;for(var p=0;p0){this.removeRange(d),p--;continue}d.start.row==s&&d.start.column>r.column&&(d.start.column+=a),d.end.row==s&&d.end.column>=r.column&&(d.end.column+=a),d.start.row>=s&&(d.start.row+=u),d.end.row>=s&&(d.end.row+=u),l(d.start,d.end)>0&&this.removeRange(d)}h.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=e.length;i--;){var s=e[i];if(!s.linked)continue;var o=t.snippetManager.tmStrFormat(r,s.original);n.replace(s,o)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=this.ranges.length;r--;){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;if(!this.editor.inVirtualSelectionMode){var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var r=t.length;r--;){if(t.hasLinkedRanges&&t[r].linked)continue;n.addRange(t[r].clone(),!0)}n.ranges[0]&&n.addRange(n.ranges[0].clone())}else this.editor.selection.setRange(t.firstNonLinked);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.addTabstops=function(e,t,n){this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var r=o.fromPoints(n,n);v(r.start,t),v(r.end,t),e[0]=[r],e[0].index=0}var i=this.index,s=[i+1,0],u=this.ranges;e.forEach(function(e,n){var r=this.$openTabstops[n]||e;for(var i=e.length;i--;){var a=e[i],f=o.fromPoints(a.start,a.end||a.start);d(f.start,t),d(f.end,t),f.original=a,f.tabstop=r,u.push(f),r!=e?r.unshift(f):r[i]=f,a.fmtString?(f.linked=!0,r.hasLinkedRanges=!0):r.firstNonLinked||(r.firstNonLinked=f)}r.firstNonLinked||(r.hasLinkedRanges=!1),r===e&&(s.push(r),this.$openTabstops[n]=r),this.addTabstopMarkers(r)},this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,"ace_snippet-marker","text"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new a,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1)},"Shift-Tab":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var p={};p.onChange=u.prototype.onChange,p.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},p.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var d=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},v=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e("./lib/dom").importCssString(".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}"),t.snippetManager=new c;var m=e("./editor").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)}),define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/snippets"],function(e,t,n){"use strict";var r=e("./keyboard/hash_handler").HashHandler,i=e("./autocomplete/popup").AcePopup,s=e("./autocomplete/util"),o=e("./lib/event"),u=e("./lib/lang"),a=e("./lib/dom"),f=e("./snippets").snippetManager,l=function(){this.autoInsert=!1,this.autoSelect=!0,this.exactMatch=!1,this.gatherCompletionsId=0,this.keyboardHandler=new r,this.keyboardHandler.bindKeys(this.commands),this.blurListener=this.blurListener.bind(this),this.changeListener=this.changeListener.bind(this),this.mousedownListener=this.mousedownListener.bind(this),this.mousewheelListener=this.mousewheelListener.bind(this),this.changeTimer=u.delayedCall(function(){this.updateCompletions(!0)}.bind(this)),this.tooltipTimer=u.delayedCall(this.updateDocTooltip.bind(this),50)};(function(){this.$init=function(){return this.popup=new i(document.body||document.documentElement),this.popup.on("click",function(e){this.insertMatch(),e.stop()}.bind(this)),this.popup.focus=this.editor.focus.bind(this.editor),this.popup.on("show",this.tooltipTimer.bind(null,null)),this.popup.on("select",this.tooltipTimer.bind(null,null)),this.popup.on("changeHoverMarker",this.tooltipTimer.bind(null,null)),this.popup},this.getPopup=function(){return this.popup||this.$init()},this.openPopup=function(e,t,n){this.popup||this.$init(),this.popup.autoSelect=this.autoSelect,this.popup.setData(this.completions.filtered,this.completions.filterText),e.keyBinding.addKeyboardHandler(this.keyboardHandler);var r=e.renderer;this.popup.setRow(this.autoSelect?0:-1);if(!n){this.popup.setTheme(e.getTheme()),this.popup.setFontSize(e.getFontSize());var i=r.layerConfig.lineHeight,s=r.$cursorLayer.getPixelPosition(this.base,!0);s.left-=this.popup.getTextLeftOffset();var o=e.container.getBoundingClientRect();s.top+=o.top-r.layerConfig.offset,s.left+=o.left-e.renderer.scrollLeft,s.left+=r.gutterWidth,this.popup.show(s,i)}else n&&!t&&this.detach()},this.detach=function(){this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.off("changeSelection",this.changeListener),this.editor.off("blur",this.blurListener),this.editor.off("mousedown",this.mousedownListener),this.editor.off("mousewheel",this.mousewheelListener),this.changeTimer.cancel(),this.hideDocTooltip(),this.gatherCompletionsId+=1,this.popup&&this.popup.isOpen&&this.popup.hide(),this.base&&this.base.detach(),this.activated=!1,this.completions=this.base=null},this.changeListener=function(e){var t=this.editor.selection.lead;(t.row!=this.base.row||t.columnthis.filterText&&e.lastIndexOf(this.filterText,0)===0)var t=this.filtered;else var t=this.all;this.filterText=e,t=this.filterCompletions(t,this.filterText),t=t.sort(function(e,t){return t.exactMatch-e.exactMatch||t.$score-e.$score||(e.caption||e.value)<(t.caption||t.value)});var n=null;t=t.filter(function(e){var t=e.snippet||e.caption||e.value;return t===n?!1:(n=t,!0)}),this.filtered=t},this.filterCompletions=function(e,t){var n=[],r=t.toUpperCase(),i=t.toLowerCase();e:for(var s=0,o;o=e[s];s++){var u=o.caption||o.value||o.snippet;if(!u)continue;var a=-1,f=0,l=0,c,h;if(this.exactMatch){if(t!==u.substr(0,t.length))continue e}else{var p=u.toLowerCase().indexOf(i);if(p>-1)l=p;else for(var d=0;d=0?m<0||v0&&(a===-1&&(l+=10),l+=h,f|=1<0?e=E():e=o.getValue();var t=m.getData(m.getRow());t&&!t.error&&(b(),n.onAccept&&n.onAccept({value:e,item:t},o))}function b(){v.close(),r&&r(),p=null}function w(){if(n.getCompletions){var e;n.getPrefix&&(e=n.getPrefix(o));var t=n.getCompletions(o);m.setData(t,e),m.resize(!0)}}function E(){var e=m.getData(m.getRow());if(e&&!e.error)return e.value||e.caption||e}if(typeof t=="object")return d(e,"",t,n);if(p){var s=p;e=s.editor,s.close();if(s.name&&s.name==n.name)return}if(n.$type)return d[n.$type](e,r);var o=a();o.session.setUndoManager(new f),o.setOption("fontSize",e.getOption("fontSize"));var h=i.buildDom(["div",{"class":"ace_prompt_container"}]),v=c(e,h,b);h.appendChild(o.container),e.cmdLine=o,o.setValue(t,1),n.selection&&o.selection.setRange({start:o.session.doc.indexToPosition(n.selection[0]),end:o.session.doc.indexToPosition(n.selection[1])});if(n.getCompletions){var m=new u;m.renderer.setStyle("ace_autocomplete_inline"),m.container.style.display="block",m.container.style.maxWidth="600px",m.container.style.width="100%",m.container.style.marginTop="3px",m.renderer.setScrollMargin(2,2,0,0),m.autoSelect=!1,m.renderer.$maxLines=15,m.setRow(-1),m.on("click",function(e){var t=m.getData(m.getRow());t.error||(o.setValue(t.value||t.name||t),y(),e.stop())}),h.appendChild(m.container),w()}if(n.$rules){var g=new l(n.$rules);o.session.bgTokenizer.setTokenizer(g)}o.commands.bindKeys({Enter:y,"Esc|Shift-Esc":function(){n.onCancel&&n.onCancel(o.getValue(),o),b()},Up:function(e){m.goTo("up"),E()},Down:function(e){m.goTo("down"),E()},"Ctrl-Up|Ctrl-Home":function(e){m.goTo("start"),E()},"Ctrl-Down|Ctrl-End":function(e){m.goTo("end"),E()},Tab:function(e){m.goTo("down"),E()},PageUp:function(e){m.gotoPageUp(),E()},PageDown:function(e){m.gotoPageDown(),E()}}),o.on("input",function(){n.onInput&&n.onInput(),w()}),o.resize(!0),m.resize(!0),o.focus(),p={close:b,name:n.name,editor:e}}var r=e("../range").Range,i=e("../lib/dom"),s=e("../ext/menu_tools/get_editor_keyboard_shortcuts"),o=e("../autocomplete").FilteredList,u=e("../autocomplete/popup").AcePopup,a=e("../autocomplete/popup").$singleLineEditor,f=e("../undomanager").UndoManager,l=e("ace/tokenizer").Tokenizer,c=e("./menu_tools/overlay_page").overlayPage,h=e("ace/ext/modelist"),p;d.gotoLine=function(e,t){function n(e){return Array.isArray(e)||(e=[e]),e.map(function(e){var t=e.isBackwards?e.start:e.end,n=e.isBackwards?e.end:e.start,r=n.row,i=r+1+":"+n.column;return n.row==t.row?n.column!=t.column&&(i+=">:"+t.column):i+=">"+(t.row+1)+":"+t.column,i}).reverse().join(", ")}d(e,":"+n(e.selection.toJSON()),{name:"gotoLine",selection:[1,Number.MAX_VALUE],onAccept:function(t){var n=t.value,i=d.gotoLine._history;i||(d.gotoLine._history=i=[]),i.indexOf(n)!=-1&&i.splice(i.indexOf(n),1),i.unshift(n),i.length>20&&(i.length=20);var s=e.getCursorPosition(),o=[];n.replace(/^:/,"").split(/,/).map(function(t){function u(){var t=n[i++];if(!t)return;if(t[0]=="c"){var r=parseInt(t.slice(1))||0;return e.session.doc.indexToPosition(r)}var o=s.row,u=0;return/\d/.test(t)&&(o=parseInt(t)-1,t=n[i++]),t==":"&&(t=n[i++],/\d/.test(t)&&(u=parseInt(t)||0)),{row:o,column:u}}var n=t.split(/([<>:+-]|c?\d+)|[^c\d<>:+-]+/).filter(Boolean),i=0;s=u();var a=r.fromPoints(s,s);n[i]==">"?(i++,a.end=u()):n[i]=="<"&&(i++,a.start=u()),o.unshift(a)}),e.selection.fromJSON(o);var u=e.renderer.scrollTop;e.renderer.scrollSelectionIntoView(e.selection.anchor,e.selection.cursor,.5),e.renderer.animateScrolling(u)},history:function(){var t=e.session.getUndoManager();return d.gotoLine._history?d.gotoLine._history:[]},getCompletions:function(t){var n=t.getValue(),r=n.replace(/^:/,"").split(":"),i=Math.min(parseInt(r[0])||1,e.session.getLength())-1,s=e.session.getLine(i),o=n+" "+s;return[o].concat(this.history())},$rules:{start:[{regex:/\d+/,token:"string"},{regex:/[:,><+\-c]/,token:"keyword"}]}})},d.commands=function(e,t){function n(e){return(e||"").replace(/^./,function(e){return e.toUpperCase(e)}).replace(/[a-z][A-Z]/g,function(e){return e[0]+" "+e[1].toLowerCase(e)})}function r(t){var r=[],i={};return e.keyBinding.$handlers.forEach(function(e){var s=e.platform,o=e.byName;for(var u in o){var a;o[u].bindKey&&o[u].bindKey[s]!==null?a=o[u].bindKey.win:a="";var f=o[u],l=f.description||n(f.name);Array.isArray(f)||(f=[f]),f.forEach(function(e){typeof e!="string"&&(e=e.name);var n=t.find(function(t){return t===e});n||(i[e]?i[e].key+="|"+a:(i[e]={key:a,command:e,description:l},r.push(i[e])))})}}),r}var i=["insertstring","inserttext","setIndentation","paste"],s=r(i);s=s.map(function(e){return{value:e.description,meta:e.key,command:e.command}}),d(e,"",{name:"commands",selection:[0,Number.MAX_VALUE],maxHistoryCount:5,onAccept:function(t){if(t.item){var n=t.item.command;this.addToHistory(t.item),e.execCommand(n)}},addToHistory:function(e){var t=this.history();t.unshift(e),delete e.message;for(var n=1;n0&&t.length>this.maxHistoryCount&&t.splice(t.length-1,1),d.commands.history=t},history:function(){return d.commands.history||[]},getPrefix:function(e){var t=e.getCursorPosition(),n=e.getValue();return n.substring(0,t.column)},getCompletions:function(e){function t(e,t){var n=JSON.parse(JSON.stringify(e)),r=new o(n);return r.filterCompletions(n,t)}function n(e,t){if(!t||!t.length)return e;var n=[];t.forEach(function(e){n.push(e.command)});var r=[];return e.forEach(function(e){n.indexOf(e.command)===-1&&r.push(e)}),r}var r=this.getPrefix(e),i=t(this.history(),r),u=n(s,i);u=t(u,r),i.length&&u.length&&(i[0].message=" Recently used",u[0].message=" Other commands");var a=i.concat(u);return a.length>0?a:[{value:"No matching commands",error:1}]}})},d.modes=function(e,t){var n=h.modes;n=n.map(function(e){return{value:e.caption,mode:e.name}}),d(e,"",{name:"modes",selection:[0,Number.MAX_VALUE],onAccept:function(t){if(t.item){var n="ace/mode/"+t.item.mode;e.session.setMode(n)}},getPrefix:function(e){var t=e.getCursorPosition(),n=e.getValue();return n.substring(0,t.column)},getCompletions:function(e){function t(e,t){var n=JSON.parse(JSON.stringify(e)),r=new o(n);return r.filterCompletions(n,t)}var r=this.getPrefix(e),i=t(n,r);return i.length>0?i:[{caption:"No mode matching",value:"No mode matching",error:1}]}})},i.importCssString(".ace_prompt_container { max-width: 600px; width: 100%; margin: 20px auto; padding: 3px; background: white; border-radius: 2px; box-shadow: 0px 2px 3px 0px #555;}"),t.prompt=d}); (function() { + window.require(["ace/ext/prompt"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/ext-rtl.js b/BTPanel/static/ace/ext-rtl.js new file mode 100644 index 00000000..0ab4a566 --- /dev/null +++ b/BTPanel/static/ace/ext-rtl.js @@ -0,0 +1,8 @@ +define("ace/ext/rtl",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/editor","ace/config"],function(e,t,n){"use strict";function u(e,t){var n=t.getSelection().lead;t.session.$bidiHandler.isRtlLine(n.row)&&n.column===0&&(t.session.$bidiHandler.isMoveLeftOperation&&n.row>0?t.getSelection().moveCursorTo(n.row-1,t.session.getLine(n.row-1).length):t.getSelection().isEmpty()?n.column+=1:n.setPosition(n.row,n.column+1))}function a(e){e.editor.session.$bidiHandler.isMoveLeftOperation=/gotoleft|selectleft|backspace|removewordleft/.test(e.command.name)}function f(e,t){var n=t.session;n.$bidiHandler.currentRow=null;if(n.$bidiHandler.isRtlLine(e.start.row)&&e.action==="insert"&&e.lines.length>1)for(var r=e.start.row;rf)break;if(!u[0]){t.lastIndex=o+=1;if(o>=i.length)break}}}this.searchCounter.textContent=r+" of "+(n>f?f+"+":n)},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,"ace_nomatch",t),this.editor._emit("findSearchBox",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off("changeSession",this.setSession),this.element.style.display="none",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.active=!0,this.editor.on("changeSession",this.setSession),this.element.style.display="",this.replaceOption.checked=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){var n=e.searchBox||new l(e);n.show(e.session.getTextRange(),t)}}); (function() { + window.require(["ace/ext/searchbox"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/ext-spellcheck.js b/BTPanel/static/ace/ext-spellcheck.js new file mode 100644 index 00000000..b0caaf97 --- /dev/null +++ b/BTPanel/static/ace/ext-spellcheck.js @@ -0,0 +1,8 @@ +define("ace/ext/spellcheck",["require","exports","module","ace/lib/event","ace/editor","ace/config"],function(e,t,n){"use strict";var r=e("../lib/event");t.contextMenuHandler=function(e){var t=e.target,n=t.textInput.getElement();if(!t.selection.isEmpty())return;var i=t.getCursorPosition(),s=t.session.getWordRange(i.row,i.column),o=t.session.getTextRange(s);t.session.tokenRe.lastIndex=0;if(!t.session.tokenRe.test(o))return;var u="\x01\x01",a=o+" "+u;n.value=a,n.setSelectionRange(o.length,o.length+1),n.setSelectionRange(0,0),n.setSelectionRange(0,o.length);var f=!1;r.addListener(n,"keydown",function l(){r.removeListener(n,"keydown",l),f=!0}),t.textInput.setInputHandler(function(e){console.log(e,a,n.selectionStart,n.selectionEnd);if(e==a)return"";if(e.lastIndexOf(a,0)===0)return e.slice(a.length);if(e.substr(n.selectionEnd)==a)return e.slice(0,-a.length);if(e.slice(-2)==u){var r=e.slice(0,-2);if(r.slice(-1)==" ")return f?r.substring(0,n.selectionEnd):(r=r.slice(0,-1),t.session.replace(s,r),"")}return e})};var i=e("../editor").Editor;e("../config").defineOptions(i.prototype,"editor",{spellcheck:{set:function(e){var n=this.textInput.getElement();n.spellcheck=!!e,e?this.on("nativecontextmenu",t.contextMenuHandler):this.removeListener("nativecontextmenu",t.contextMenuHandler)},value:!0}})}); (function() { + window.require(["ace/ext/spellcheck"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/ext-split.js b/BTPanel/static/ace/ext-split.js new file mode 100644 index 00000000..2af5896b --- /dev/null +++ b/BTPanel/static/ace/ext-split.js @@ -0,0 +1,8 @@ +define("ace/split",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/editor","ace/virtual_renderer","ace/edit_session"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/lang"),s=e("./lib/event_emitter").EventEmitter,o=e("./editor").Editor,u=e("./virtual_renderer").VirtualRenderer,a=e("./edit_session").EditSession,f=function(e,t,n){this.BELOW=1,this.BESIDE=0,this.$container=e,this.$theme=t,this.$splits=0,this.$editorCSS="",this.$editors=[],this.$orientation=this.BESIDE,this.setSplits(n||1),this.$cEditor=this.$editors[0],this.on("focus",function(e){this.$cEditor=e}.bind(this))};(function(){r.implement(this,s),this.$createEditor=function(){var e=document.createElement("div");e.className=this.$editorCSS,e.style.cssText="position: absolute; top:0px; bottom:0px",this.$container.appendChild(e);var t=new o(new u(e,this.$theme));return t.on("focus",function(){this._emit("focus",t)}.bind(this)),this.$editors.push(t),t.setFontSize(this.$fontSize),t},this.setSplits=function(e){var t;if(e<1)throw"The number of splits have to be > 0!";if(e==this.$splits)return;if(e>this.$splits){while(this.$splitse)t=this.$editors[this.$splits-1],this.$container.removeChild(t.container),this.$splits--;this.resize()},this.getSplits=function(){return this.$splits},this.getEditor=function(e){return this.$editors[e]},this.getCurrentEditor=function(){return this.$cEditor},this.focus=function(){this.$cEditor.focus()},this.blur=function(){this.$cEditor.blur()},this.setTheme=function(e){this.$editors.forEach(function(t){t.setTheme(e)})},this.setKeyboardHandler=function(e){this.$editors.forEach(function(t){t.setKeyboardHandler(e)})},this.forEach=function(e,t){this.$editors.forEach(e,t)},this.$fontSize="",this.setFontSize=function(e){this.$fontSize=e,this.forEach(function(t){t.setFontSize(e)})},this.$cloneSession=function(e){var t=new a(e.getDocument(),e.getMode()),n=e.getUndoManager();return t.setUndoManager(n),t.setTabSize(e.getTabSize()),t.setUseSoftTabs(e.getUseSoftTabs()),t.setOverwrite(e.getOverwrite()),t.setBreakpoints(e.getBreakpoints()),t.setUseWrapMode(e.getUseWrapMode()),t.setUseWorker(e.getUseWorker()),t.setWrapLimitRange(e.$wrapLimitRange.min,e.$wrapLimitRange.max),t.$foldData=e.$cloneFoldData(),t},this.setSession=function(e,t){var n;t==null?n=this.$cEditor:n=this.$editors[t];var r=this.$editors.some(function(t){return t.session===e});return r&&(e=this.$cloneSession(e)),n.setSession(e),e},this.getOrientation=function(){return this.$orientation},this.setOrientation=function(e){if(this.$orientation==e)return;this.$orientation=e,this.resize()},this.resize=function(){var e=this.$container.clientWidth,t=this.$container.clientHeight,n;if(this.$orientation==this.BESIDE){var r=e/this.$splits;for(var i=0;i")}return this.textContent&&e.push(this.textContent),this.type!="fragment"&&e.push(""),e.join("")};var l={createTextNode:function(e,t){return a(e)},createElement:function(e){return new f(e)},createFragment:function(){return new f("fragment")}},c=function(){this.config={},this.dom=l};c.prototype=i.prototype;var h=function(e,t,n){var r=e.className.match(/lang-(\w+)/),i=t.mode||r&&"ace/mode/"+r[1];if(!i)return!1;var s=t.theme||"ace/theme/textmate",o="",a=[];if(e.firstElementChild){var f=0;for(var l=0;l");return}e.push("")}var s=null,o={mode:"Mode:",wrap:"Soft Wrap:",theme:"Theme:",fontSize:"Font Size:",showGutter:"Display Gutter:",keybindings:"Keyboard",showPrintMargin:"Show Print Margin:",useSoftTabs:"Use Soft Tabs:",showInvisibles:"Show Invisibles"},u={mode:{text:"Plain",javascript:"JavaScript",xml:"XML",html:"HTML",css:"CSS",scss:"SCSS",python:"Python",php:"PHP",java:"Java",ruby:"Ruby",c_cpp:"C/C++",coffee:"CoffeeScript",json:"json",perl:"Perl",clojure:"Clojure",ocaml:"OCaml",csharp:"C#",haxe:"haXe",svg:"SVG",textile:"Textile",groovy:"Groovy",liquid:"Liquid",Scala:"Scala"},theme:{clouds:"Clouds",clouds_midnight:"Clouds Midnight",cobalt:"Cobalt",crimson_editor:"Crimson Editor",dawn:"Dawn",gob:"Green on Black",eclipse:"Eclipse",idle_fingers:"Idle Fingers",kr_theme:"Kr Theme",merbivore:"Merbivore",merbivore_soft:"Merbivore Soft",mono_industrial:"Mono Industrial",monokai:"Monokai",pastel_on_dark:"Pastel On Dark",solarized_dark:"Solarized Dark",solarized_light:"Solarized Light",textmate:"Textmate",twilight:"Twilight",vibrant_ink:"Vibrant Ink"},showGutter:s,fontSize:{"10px":"10px","11px":"11px","12px":"12px","14px":"14px","16px":"16px"},wrap:{off:"Off",40:"40",80:"80",free:"Free"},keybindings:{ace:"ace",vim:"vim",emacs:"emacs"},showPrintMargin:s,useSoftTabs:s,showInvisibles:s},a=[];a.push("");for(var l in t.defaultOptions)a.push(""),a.push("");a.push("
SettingValue
",o[l],""),f(a,l,u[l],i.getOption(l)),a.push("
"),e.innerHTML=a.join("");var c=function(e){var t=e.currentTarget;i.setOption(t.title,t.value)},h=function(e){var t=e.currentTarget;i.setOption(t.title,t.checked)},p=e.getElementsByTagName("select");for(var d=0;d0&&!(s%l)&&!(f%l)&&(r[l]=(r[l]||0)+1),n[f]=(n[f]||0)+1}s=f}while(up.score&&(p={score:v,length:u})}if(p.score&&p.score>1.4)var m=p.length;if(i>d+1){if(m==1||di+1)return{ch:" ",length:m}},t.detectIndentation=function(e){var n=e.getLines(0,1e3),r=t.$detectIndentation(n)||{};return r.ch&&e.setUseSoftTabs(r.ch==" "),r.length&&e.setTabSize(r.length),r},t.trimTrailingSpace=function(e,t){var n=e.getDocument(),r=n.getAllLines(),i=t&&t.trimEmpty?-1:0,s=[],o=-1;t&&t.keepCursorPosition&&(e.selection.rangeCount?e.selection.rangeList.ranges.forEach(function(e,t,n){var r=n[t+1];if(r&&r.cursor.row==e.cursor.row)return;s.push(e.cursor)}):s.push(e.selection.getCursor()),o=0);var u=s[o]&&s[o].row;for(var a=0,f=r.length;ai&&(c=s[o].column),o++,u=s[o]?s[o].row:-1),c>i&&n.removeInLine(a,c,l.length)}},t.convertIndentation=function(e,t,n){var i=e.getTabString()[0],s=e.getTabSize();n||(n=s),t||(t=i);var o=t==" "?t:r.stringRepeat(t,n),u=e.doc,a=u.getAllLines(),f={},l={};for(var c=0,h=a.length;cPS0i1Vx9wLN8iAJqaHEP(c9-dYwPFO_0s?9&b6CZ( zmI^S$TVP0AZ0L%O0oy3UtW1=@F=h^f%|AM^48h#GMKWM(V8n{(1tW6N3|JDmQ6W(x zASH^5N(eTBh=GYw^;W%#k#F_?JOA%yec5$b7l~BHS~~5h=ZE_XzY!x?gd|uYidK+{ z?QCSv`+NLDE$-d^I~a3gx~vs3D@iG0R4P&0!FfZ;;R3UaDjREV6#w_C>t`gJz>H)k z;Ka0+gi=~yYq>MyLb0p_15VjpTEIWL=lzX-WjTe?Y*Xu&Qsdi_>u zQ%%BB%aR;ohvBQpGa6^Ni6}tu?&;rqr+*g)1h#iT;I$S+_HG>RLV*N@<7=*`$%@U@ zgb@X1_=0~CWB#n1*Uu*1*X}(&X-$xpBpo9p4g~WcRj>TM{a)?P|Ln*G!ML=mnN$E2LFLFF7mbVBMdd2?uKN%v=UBOQ zQS`B>H1_FLGusa;Q96e`#|ybyXSpatF5Oih?|&?T|3MP?;L2Qpk|2;euRzHLvD6I1 zDym;31?qcVnA)!6bikGq^5-Q~)mXnfU;%e(4|#zj?md>rflzcEo#y6LtZ zgqY*~eLcq3e+#-NV$iW;%a#n=4*(%omO%^v z-af7Y*tn^Kev*J>3s;9B(H8;R#5=E$u}MA~L5`kp!+q2R(&AVWDrNVKL+L6$-FEJJe!gHieH3iW@jB+;Kdak#}<_@nFErk&OY zjxk_z*CKvA2Bkufr+StGY-#n_^QJ~@GWbv+RwZc4cxYynyC|RMk%xX{l1@{vpc|-2|IW zeWfYYpJI+5)rCiVu{!1Xa@mZ{Lm~y9C=fD6_R3#p{gqZeba{DlIIOQvEaVKgbN|G= zd};BJk?3m*p=?4tex~;iY86Vf+@HRj=kw{Y(wNQ=Vj!~Ab)zTGk(aOgpnaSv(_hh% zrmKJsko><)xwSbta`_jOvST>fs^?lgc(O>BHwrQIa1neTucF75en_GFr($T*Xo$hlDX(ZCQIjWWnFD_5u%E}6TK zP@9G+O=zAuRau22Leyu~Qga^vuTx~p;H*1;9{bx^)O2SS#?2}SpTF&Hr~KOX-K?C~ zoc&+lzfVe;pyurQc*ewnc!KLd{+8h?3nwz5IQmeX--#j|)!iS`H%Pu@K zbl+%*N&uZP6@~anMdc)Moc13YMhYe!=;$k(x%@gd-)ptiAf#XS3bP=1SC_=8hk4}) zsTUt~Fjg=BAjT>N3g&g+$j}Ee)r<8t&h0OS0|iaUu?Ss1(O(WNkW*n`J}1mVKWO`E6dXmIia68M-)W)XK{FZb z=V4ld*u11h4G_n|#HX(+`peZE+_mGlEVbvQBk5rpE6#nSqRuRu>OVt+o%=`AGv%C*F*}uxEmx>PFm~zv% zRBdZ$OiemKyhQ&VSkp{V=jr-cZeuqPm8O-4Y5r@UaQE*V;yXub2Hlv)l7rCsge~*Q zNzv0@ZZPY}ujsxFeSV8eyw(DaHx)}>Ec>V*Q&hJ8&{26P=7cNzM1#|FZVn*CaVZ?S zK)V5HXxub1chjgdS7HtCgS4KE&-+WmusjHX@o@EFpV}6|$o#P~ZmGDE^ov4Tnn_^o zq9kjHB@R^OXkjry-$V?>f_?vg#1lwsU2=i*7&Exr!KY0;S%+^Fa^g4`G-ilRX9>~)kSQ`)a>#I3`SK{@ipgB?eWx(u@Z}&LYYZC6_;d{U=$D zPC13JG!d=)9n|{XDOqcvmKpwXfS`{ECcU5@E3HgJ>76Licv(`(RH`9t*_N721G>7 zzVb}jXAG}sj(DF_Ob^yVhM61tW^6zomjE;FrGjO;AIHpr6PDo|j~RU=ZbC{FF+C^g|2T zqys5`*S&7t2}k>%6+>1F2LX^;ATGZIk$|NP_qgPg;g(|^Ae>3EP;Cu!3?pGQD8}sL zFBD25Pa-u!m`SGHZm0?6%(q2(8MCY#snwIGCN$!Q%PEd03|CgCN~m216?mzu;<$Z>D>qZaBI41`5@5PdAB1E{QW~Sb~mO0fp!#4%>|3uy0frZ}zOxc0U9&b^w_c zCIJFi=nYSl4cXjypj(WsB(kJ6@yABg9vcDSLs*x@mJY45BU9oaIN-e+*H6KCOk&L? zLm8ZDgQeY)*rqy#-8UwWN#kL zp?r)LFPcq~45wAoEs|!)WY3D@zvO_Ap>4mQIG(IJl(gjp%FV*81z(k5AWJNkjK?*H zx5LikckP$VXd@3-gg?9eYFj0}D|okw%Y!%lw-4|1)h-#3m_2k+huh)&vG>Pcr?E3R$_Bq}ee0|`os6HdhqfS<6896SImk8%El?{o+|fn~ z%i$MG$;&|iP{z43T?AW9D*>rheJZFk$y@-Oiy6JzMp1W#B*!=&Z6>|A%%lO9;npTo z{Il2^1cgG}3F;;Q&+SO8iD@l;hlcyUXd^+US-q)kQY#*$VN6wCe)kDB_!zeG8Ok5s z*K@x7H5J#F^t=^hNP;s*OUK7bu4C`BOLe%|*`_MCC7etio~3=$Aysvq3Z%eH)!mE~ z5E$?{I$~o}`*Yudeu6CN4xrm+e2L2|k~Da-8(oNAX>y>vBy$WgR-yA8o|JaVxWxxV7yd z6`;iMSWSH?Y_FA4c+nP3O)(0*uKGH{zEv-9+L7)llzlLy)&Q*#C~Z$P(#%AWC#8Zy@ zck1M6XyG4#6`mrDX1KUg8yV|33VW{~h5$Qz0qn*O_~Ncz*NU6cT(<55ganm#*U0L~ z;38)VUT5Uf%KriqX^mx}Fe`+-z zypppd<>b95bCji2PE9$&3`%!jRm<6@IUJCHC?z#Me0u-=@6CHjZ!WyrR>gR7I=rR5 zcyMZGVnW&A4Pyh}7<*oSb0#CTfKg>jSIWG2H~eK3T?5g*l#6K@H%D2z)B-P)vhl*H zuW?-&wJW=In`aVexM&RltklhLS`RIgL#4D-SB;yImRopza|*=T*DFV-wI8rwxsp2}ivg2XCvyoVkgHe?+ zk*(RNl7s4uiH`FTv30Z|7c4`Tvtuu3Wan8p1tG5{puS(`IO*>D|1`hKIM`FHd3}lB zqni;&v3@}YS~K1>MpglJTOLhCiM;`juB zaOu9S9=S0Qb8JF;x#eV%UX;*82!_kCW67)zH-hZ!=;CEh-R6uN5U5Pn+@a?kFypQ* z=-XYz)0<7uyw}m|e4(1+lInP+*wop8>K#nCpm}(x)PV2=1p?8%R2tVslVQF+_BT5S z)l{vVPZ0D74f-)*>f)_Hne8Wkh5u(&&R-YQspzcSReBSqh(JK3mTHXA0NLPPk^VwkH9DA6K+t>DTM{71%P#XZLdqa`I}C~z99QwV z?S(iLn_m~*m2xS!i^X`Zzi_sV_L`Gsh2vC}gB^AG_QaNxEUWC@9+~*{oW;AtE$vm1 zZ{1^mu!Cs_lHUBOPb4a?=~mddM_D3c`Ns}on+7_YvXeARmNEgg!`{jVN;HX9KPz$Da^xw)fQUw2N1b zy@)5|NBh(=YIyGW@5*#j<;L(LuVVXf6zDk^bkqe7WX1Y|`v9G1OB>?og*v32!Whp6a+<6 zeT2_tlH}E5+gLxRzg@Ru_Z^*_@{ymz@|0^TbA(#EUHgRsF64LcezU4YYWh@RNTc+l zZ>7IJ#Xr{clP;lbJ2{LHG?K2u{ESwCo!eMnl^H@Lap6{i-p|Ah&oF>-p`;3D-V)+nh8OGGH2$l2b6MZEUuH;>+g z#;%50K=g@F%R%qkYVv=Exb7F|-`FhRb#2N;oq3CXEW$7h7zrfpEIl(J#c1L-f6^lk z+K(z&5O2UXi4;zsf!0_OYAHQH%~x~0t6TgE+3Fl-D5S?N*|vzS%x_I%oQ3vgNVmPC zy9?ADbx*94pf^^1@782pcQovCTHHL-uBr|(65|)xe%-BsT+VOoCg{Qny2&Tbf`jSV z`h2DQvmdPQDc%s*brdg{&2vM+GIzL6;Ff31z=gREdmxTo$j`>iOv>|7jVvoG?_|#j zK9B%~Qz0)*SI#XZ8cwJ_TLECelGSr8AufWiicwJrl;^yal~Rz@K*`v;b&)aWeW8t$ zA^gsQaNSs^15NW)%)c-*ZW2|zl+c+Qb3RkgTtGZtHsfJlu_-!nUOTv!En~3>tQX>L z0tGLH-s3w&<+L2Xfqa8I4!8%5Ay0vsb1EE&-0&3hR9JkakY!3iu z8U*(zLAx-r_Z+~ztVyJP8u#r9F#G8df$c5xASVWa+uP$e>9(qa@>)UG09Ca>E;xk? zpAq$e02Kr%s5Q%HHC`4{@odbsk6A}EnIq|9i2+wRwS_*8nK_YZQD&T$J|z=Y#8$$N zS}9;=++ZbcN)TyF?iPIHs3|RB3zC1zhyW2U<@$_V-gMl4h&Th$eA5}nEj1s=#G&U> zSCCu?rL3m5Jd_f~WxRpk6F2tWL^1o>fa@SP`Z=4yeuZG+Ge0VPgMI;k^tdcpzh1?< z_P4-(G-f=opj{?aF%gbRYwl_E7rqW5b9xRu7F)!}OyVb41xzEWu-*&x)6jC9HSE^b zl#BcJ%=JL~0FvEY9%J=pU{6)h(|dR+o$5vbc)tGq(LRP@JJ|p4WOrYwJ76|}4VHNT zYN;M@NWVb(5G4aeLPiHFTx{B6Dqw^_(a`Zi{&+5({m97xAPBwwosq`C7@URl>5!v^ zL_g*pHzFMgi9vbGOV-+|c^uuR@{{$HC=d|s75OZ6Z}K!sp&Bj>wl{j%@-*Ywcj^qd zrN3RE7M`g68q`$tgY0Xu30B{BK7DI{1ZQE7x*gcD1{)C0|-#3_>0Lm9Pw z+BFo*E0GZoM5aL?-fMrEhpA)6kI&D`&)G+#DX#br0z4leevu}^^`kt_*tgKPGo*j% z;>K`mlEPi4huxu<EClpUhPC4OF3YEg$Ns!f!p?+Y}3zLsU zFc`We(JkpXNp2}rGB4D1ow>@Gi~4Ru$OeB$t&(_}KZfs65q>cj(@9 zccNejWy(nDic$=QxQ2&7NYiVY4ro`Ap~zsT%n)m92DVFES0UJjP4Z`X#RI#gB61 zER!l}b6?{KnnIk2F^7Sg(w0j37|X?2+GkA5s*op(P&umq9g<6}K-`{kk7M;&iX?wg z6hy`B+&^(~qZMy z*G22PZ)KoIp_2Msk`=>ImD~<&_n5+`l^Bh#FY0mY+^O8V{i&t#XK zlon8vMd{hWr~Ow@319Talp}Ax5|qhZZ;l!;%l!}(=cyd^O=|PF4w~Nkx3Ce&;5jhO z&Ul>V?k*rT4-vPt3u9QAe7J{S%SFfs`C2hmPSC<_hDvit?L+ysPvUJ#uHvgvn6dho zYH#FcyRC=d8xI#+RBw6z3-LPP+b6WR{)%G9#xT9E!7*+{@$wJsQ&)Z3J}Q$;|MTW9 z)Q>|ct2+`qA|r&{4m8)u(uITp^Kv7hNzs?lkf}tod@Yc|DHm6aXMR`KBQl^o|6iVW zz&Fb#cD-NWeCOuAynKv);Sci1LTQiwq^IYat3=wr6MH5Q@%*^GzR+~O{HJvfmYF~H zo_l@~p5#kkgQ5whDsFuCIwd0_d~Wyrh$RZ%Z-WU_S(TbI9lswDz_a+}Pb{j6Xc6Rp z_&ldhXG}fBztI10%K!4!mA0B4-+w3$F^F?gF<|{mVIICzNrkuS5H?>hH|Vv_8C?zk z{zzsEIF1H-tKF$pXtY<#gj&RYrXC}YF%bq;ZnQs$B&xJy{6a87 zMSIyaXGL&Jt#yiP@_~3LeUozPMw@x8GtUKU@Rq$h#*$ken{I|&UCRJ)t3pZ!`@k5B zHPA?MsfZ!YN4^1F*l)heIBE%-u&^tNZ?Q35$ux7AN`hE^!bNcB12BbtG}Xg3V}cdk zp99Pjkdo^}82e;f2%-6euMqLCu?H+yb=is9kyTx=_~DIX9d{x!9f$idCFZ{PvS7yk zs$oND#Rh_$(Zz=50n3;)xtTx(5(8-x;`)g2SdjIL+z(s4Z^W>tHA&2(3tdofg}9LC zmPhu~z`8*-SAeq|$}RzGdotaOLf*EBV9mxE1FZeqRv$|+m+_WpIYwG?sTS|>Si7&W zXU94!y<2#dh<=XZl7;)6d1mCi^BOID_+izHfuurvHO0n(Tdb0k&{(<6;dO1Ua^C1) zjnohNL`aqXoocG@zYsZx%Ze1i3%%#*R{siUi?t4vkwcvvPa2QO#~dwakmbhAkP(;z zCqrDcwwJ$~rhz5jAYB%~?>FSL7o%#^t_%db`Q^}zESCh#h(BHPWpWE2$fE{C#XDr= z>@D`ZY5s+V_adaF_9_m#^ldj{(TIIj+D2v{>X}L^Lq*di(!I`BionTQPH^lK^KvPjqr90mu-jOh+R{mr-p zU5XHu#9(YdY)*T8YkVm1nS_V96K`GAqk@5(iIW63Ph#G?PVW6a>R8P1-l~zEs0dK0 zZl2^OLUEJ{)%$=a#wur|O4c?)49SY7js#Z6u_x|jwXTw&{QM6)5PS-=wqVxo>#>%F z`olc!8ov=;#L9g)!Nce+?xORO;@6X_V8J{kOIbB_d$6Lo*Ra+a9Y3z#xLbbpxMA>T6M!K zuSyo3_m2gh-CN90cAY7?loEhYF0nF0ni`%3;3$$Y5?)t3z2r}F35O3j?xB3{q_lt) zkFrv;o(V?JpSX8s32;CA}zv8py2P*2PcN&4NlS~sNu|Z-c(x~LN6e>CcPq;?32IycLZC%(Ag) zw~(E^*5qgygHpr{+#bBn<%Xr>0613SFj?4*Tg6{_Bc-Q*YvB^t zxlG8zBYnA!wab!51LA90{M<5S4^DFH3y`N4VR4Y=6uFsN0|C)w9YNlt$}|{4Cu~&1 z?qX0Pr7Xj<#}x{bIE^y{LrLO$ny7!M3^K8=YumZpaJ}M)o9j}=ID{g}*A}@0s^elI z+p;c{QnV~NCv~k6(ai=)xpqY}oN{w=YV3p* z6?)hn(`YsIpti4Tt;U6Pm*G4PeoUD(FM`>yI08NLdfss%)4W2*Y_fE^g-fk|L>~`7 z3thb2tb1s}zP9*XndEi;6h%&!Mu~W&wlBXn-|sfQ`2ST&|MTQ3nl$^iJ}nn)Yif;j z;JfJ*IjneBrz%yM^;E}hT=Yl|rz@b{4UD}gwS+11os z@kvHhl@Of8airsvv>U?Ld8cBtJ_kzGLrN^;6jpZqsqPEVJ@nz^sSqjse}czZ9R9by z%dS%sk7;KW4@+T=@o0 zqM|m`K4j@gEsy!;&;RWH*_)eB_WkaAX(u;Lh~*ySaF)J7gXW#SN_OV$A#vB_TPj!5 z$0fzKUQv>0Ze!rB7rfQF-zl;QBjrRQ^c$|K|PO3R7+j#RMY{Pi?Xk%k? zXKpH1r>7`sxHYcB{2~)X)Ea4Gb`Uyq7n&U=ixvy2po)e=6KwQg-lZ85 z7ayY%&sUJc_e~tr+eg%VLj9cj(D>X9<{{GjxdN=S4RMgAAnhVqSdp@E)uR|^!3{%F zTS#!KfF*%Az@nLR8BW6vyO8CeoDq)$){imegfO)p*AO(LR)b#4O6>!Uq}^&dq|weQ z=&pAH)|`d?vUF2Eb-~(r$4EWnajub)gG31{v$;4fJ*$+5bnl%b z9j5;gf3A$MOy%{ZR3+7l(Nn5+30Gr2CFE>)^w9zJM)KE%z4nYZp-@(*Y+= zKY1{rOmdyfhB(5#2}2bE?e1yj!D_x!M^GnR+)PKVceNmLmbd7(@w{>g<-+!KX5(o! zWw2}ui^9^&RSK0}p_(-%Nu>BmE7Wk?~vRAz#AT#~Yg;wtx$kWTN- zE;mjAE)aj&C8cHh3cYrpikWp8PEw$i`pd;ro!2eQgNi7FcN)`gbv9jvd%~Z`K+-X? zvR?=Z55JDn7^_q6*|K~$cRvgJ_Sf?^0?EP{Y!l0|%4WvG{9oSagL!rXXAD~nNK5xm zpNBU9AWgq4W2`pPE9|%r>D8?u$Ws+BsGRG8d&ig#|5*J~rP*5d=`IcM#7bc$?ca zvs2W<`&pPzY3*L8AqD~O@BnifKbuYankkNt3f4|w78~bMJj;Rnr0Il~J=^}Er)u?) zjQ&z(nv5KdG{m3$y3@fFOo_b;@Y>Z1nFojvNjUX?<{6ofP+i z0FDRMONkh~_mM(bu2pdTnp!GBK=Z7tE_lvXF+)ZI z0~fA!ufL}D$Z-ES;x1D^C*4q*nq(-tq{q(mGqee7Hn0`1*j(QLKkb@rHm@|X%Pa_`lC-W zmvV?E@c}v_10EQ5Wz;u4)iC1vt}m#jt2*N-DuESpmPU)OY*Iy;*`EDy^nMXa?G;}J z_EkmAg&}ypry))e{7)%)bumsY90Vf&y%ESp7qj1h==d3^MhgwtAisk2 z$p7Hz%`0*39C-J!dB-7IyMjpP)p3?`6wRjW^fn)Vtj1>)^UJg9QPq z#FnG4H97Mf_rCIKDMBZ+bf5plfU#P=dRqDmoi`}+nWu%3%TsCe6rz$?Pa+sH|3mmp z?}y5N!QanrVqF9J!EI%(w86RVsIg}8FJN8RRM4iK(5Tjx%YXGTB?aXuXL8!Lgy!2z z;;`%0(g|%{8;l$T3RB=Xt;3O@4isThNNFQ)`DbLekl?uBYOdi0~0j`Wfqran5q|f6}cfq3Qn*#?l zQ@g-1i)1t6Q=eo=)*? z#8D=J4M>~h#fTykg_mARN>0L?;4vgE-=!ktsp3_p5Zm_#YEeh1_%>#H@$a9L(us^-Ij{y4rdHB{5( z7q(`%&BYfF?qg}%v%Ae6b0cHrbsCtt3clJ&mj}I5e^-j@BhD!$%VUHF65wtStw*axK=IIRV|ZTu5@0@2&C6o5$pp-mFqjX{Ineu|ywCrw$s z(M3U~frPjyu7hlSvxsG<%7)z~EMik}fI{ik8j&Iasb$MAsNwXqqx!43KPt*;VX`ym z3=~Vy{G^eXb*i4S<*|U06xO5gp>#air6KAhGP%LzS+q0clSJuUUOZng(Jj9V zA~Vut^;a|7ek}cIL$OjSJ32T6wJF(kjxjR@IV*FmpEn9-|H7PG&!5oN_ z_Z|n$O9Ao|c)0t$1qxSkFwI1ZVp-g;>S=QU7M)F0c3K3FKhTW6S85nova$WU7cAxRjXDdr$djQwv+Fp{S+7nkj*%RjW-Ubl)w? z%KMXwgW#mVtxeNRdg##WYjWvLflYLnJhWn@`<3&)+}%Qd!$JzuVyoXL0cyztkObXf zxNY)|0#}r?ib`}2`$J3K4Wy}&j-EB%ZJ?tz$anViFESV7}fD>P($ly7JUf_fc_6KjGwyDAh-C`KRpau|@Y1q^OGr z51mfg0dA>D?IG@YC|%i;dDnY4b>+~b9_Mk)( zr0BeErF(y0#lUqq+~GSJC9xGhg(uY+-y=>DKS(-$&}u_*p7Z_DGwoR_0u zyEQoR^ONrrIqu)|87x)obkOd=v1`F|#_#1jJnY+(8Yh3fzM_O1R(qjRR{eC@zW8et z*6s)H%QBqXGru>XCsW`aV(sMbH%^{5h0>JuA9Sl5Dv(PR9l5V#vr!5t$4kB@>P{N8 zI6vt?VGWXwqfC34hYqWbO?9I5#huUgV}ct*=7p+d8H8rj{zsefbCe~kR{}} zly#vJ{C{NY`dGb(>xT$}W2+L1ObVc|7jvP}_r64jBK9w&R_;ky(i2$G7-=qWz0g zAggj|a+LO>lzk58K!lO4Ehh`KWrX4D?OuRL5h+!_C<;VQ_iB#${(1;ablVU_o!ppI6o4ig$jv*olf zA}JAcG2Oo&*MSqV9g}U(v8(a6@6QoIpiRx2GnTf)<(wo0E%O7(um(d!9CuGlVe!)s)M*03J>q=JnQFsI1Q=8dw&KNmOLaV3>Xy4PvyD&}?inB9srhBXqU8Uk|*~&`l z_VC;|%AP%Q$DC9=k$ zXkR`>s}@6qa?2@};!NeZ$ryb*vO{dd=9Enu>JKU9(cY~f5!L5rJ64_+Tj3gHyti`n zHbGihX^~3CtcN3?Wc@<(QZng1kRn_S@uZkR_)+Grmg0dcacG@FPEJf|j%rYvWRP{t z>Yo1itX%DESN+?&W5=80Eidwt0}U6MgX*AZW=d|jQ4FYIW*|>>Yb%(AfwvWj?#M~9 z!Ra7-R??C88^gfq!)}f@ih@qu!fM6&{!;?zI|-JDINAwR`qaVVDK3X=Uaw#uNSd&D zW)gI7dL}!0lzt~gq{aTbpX)XMD||GYx1cyd&gKWr+_jt!fi{ae-z0v^qXYTb#;nl% zY~s5DwGCEp&@^M(z<#J!!TbjwqQBt77y1sb_8H@1?xeK2c18pXIjJtg>etZ*f2|a! zA?nN)k{-Av1kLSDB`uImRSnOT{V`JxaU9xoP211$m7boWU$!<98{#y^Ru{Zy4OuN- z$#Nc7Sd=7^syX~Gv?V(UR3`(5M%eAdsklv}3 z=ks2L7|bZ!BNdEWZ=Qto!r}N>HM@hSu;jE;&O}DCTI2R`DUSW7DBvXylXx(QH49zD zY!$Gx*L?IP4i-LED=#;GxUj{QHw^OM`bm83&yn79bb|)@;Kcc9l6nnS3_q#EqvaO8 zqH)Qi#*{cFRNpv;{B9|(nH=Q97NV%fW7>=<*h-rji#&E6m)+&@|5!D!$TlgB$t7;+wFC?@nxp+?whjX5?1L`R5Iio3-e2rL7SZW8J> z7D)znWO%|nu!drEWaLm}Jb>4g7p(k*4apmME?#i)J3b%s-;5&>@W;&NhV*tU!KhJ@UXK@1VKN*a-dj3I;u@bw`)+3_Ha$ML{~~ zm~;ULLlS#(Uk8_Ay%~)Tq5C2vLtiwB}mU%k8?f9X^%KMe=SAG<(CCiI2Ya7o(m&YbrDBG{WqsUe>v317Imp zFRl|b_)V2274Oqu>bKW#J9GcMmQc4hF}vVtNP5tRXb0r|9#BIT*a_VOz^D%zewoY^8U3v zwIgYCpk%PT(fKkBQhs!X7q-aqnil3$BA=vTkpS0 z)S_MF@qr)_TmNvq>eXN7hvu|uYDK4fk{Q6?W}D(xF@xWrp>jUIM|hg3ZG9wftmetQ zZ-Ul|la2KEIku~~*y=TWXsY=l0Bbjui2oD@N=FB#dHOmv1ZNhI~Vpi}UofvT$r!kiuNLvgwxDBo|LnRmISDditm}-V|%oT78hRwzr(= zY%gvla&6!CUMxe02P`2T@Qlf@(E-~O@!EFbfTt(fmnyccM;ZMg|ENH_#%I-mjB1+W zDzP*-cmbSCwrphI-wWmkV>Fs?(A8YkaK`~qk0YrSuk3%(2uEcYr_TaS~SkQ z?Zl7g!iORh(zDJGH5cv)$`NkO>Mfhtn_ukWd79vi_lJ1NxUoDf zfOrSILyOL&a5vOZD04sUlbbnVxMuFDVgT%;x{24dF+!n;i(Px&4$f#pNB0K8^J-4Y z2-~I7Zm7HG()74*6dP*I;qg2>mhrTc&N#AAn@ae{`n{421ludR(NqPQC3f!g_#rjcc=yXzi~qB=t$&DqI*1KN zGxI%UFYIh=-8`s7LAJpev$}AmvyiDXco=4y#Z`J|P?Zkm+D|kmHHF%5l~uxkVTT2* zn?_JG&nt=xQJgJV$22B0aiR8O?X8RU^1_%;tdp7`kGGd-BNUlpr@&u>W`0x+bo25E zS+U4{Y$(sm7sne1O)|#V1rk0fa!&XI%!7gh|-Gf98&xUz^ZzmwG2%<^Ru@`SZza20^WN zZE85qfPhoJ#x-mAdWK!ErD8>N*VUvqAcxe>-5&h>_p!_Gl=e$up09j-J zK0v|0yf*Fq-MPOuvi(^|r;Gq5f~SJS`Ugt6EesNP*(t}DfkLJGNIa`V#6HvZ?15>o zRC#T1%Cv{H>r!bd@p!xVmeg%jrjmKrXr#hn<{9TyAVX47Cw=~HZ6|8OtCp#PibOAG z;kb(Uw$s64fAws7Q;-~A_nztD8L}?L%3a+Ik5OV z>!Gx72fZPHhD8(JTQY@VY2Bns6Bdhbp|CtqoSzO0<+NL=3_B5KB)`RIExjQ7>OvT? zQ^*iXz3qq~{2uS*wyI#23Ax^jW?!M1$sw)1(X4!d8HAUQ<-&C4(u!F|oc-`u(;rWE z+biv^QdCJ$T||ayR>Ta4$s@!3Wh|6ji)NOx@AMz}+*tf>E!purEao4t)pll2egUwAXgT2NSga@3Z!OB8ss3Iw#c+@D2(Px5I#FnP)TP>C~ z7p+z&5>Mez#(ZL+H%kQILWo_c@+{b8pUhNA&Lv{4n~nNaerldUB3-tN7RZGRN8HJ)FRn&2H59~_OWk&yhvb-K3VGPuv$Cl@G$;3EeN`E zdUL#~L_Hc7VF4o9uWvLvt;G!;Sx?Ppk^r=m(&=}SZQOfGy%%-N{4372E)big?Yec9 z5uIF0q_fBvr~0pDy+q1RC+%C@3sW)M7$AlU83xXxN{7(qy&u~gcgYF!!^RU!;IEUr*1e9Is z5Rg*6FvygUYFnhw=zB4!&!`@GWc*$w^%?rg&{?EOQ~gf%Z?UxTd*K}@P0gU6_n#hyeYcaE=DNv zQ0Qs{EXUVoY7j}dD6Hsyi>wgVw{`8id&i!=%MpF(}jK5X3) za9ZK}wlu!KcYeXgtqaQKE6ZVgUf+z@lRL|jw)&nf^{0|A7rd5ym7?wR*+tzyIv&Jg z-SkNRl>l$)t&R0&#Yo3))6r%;`pXBd@@BUb!aJ_TEJh#rS!2_tOg;Md(m#as{t$b{ z=Kkah+|sQ_)Gbl_)OSyba%VgVL1trj)Y5@b&2pK^{>iVee~2R69CZovvb>DXSC1%U z&IT_e3W#PUT#;90C;<2XhZrj0^z&4INa%I?{yZ!z1Hk4KH+5aF>ilUzQ8$jO*mXo1 zaY+T?iUJWr??Y~S`%#>abXQojv+B2r5vf1b{C3@l7XTdYMd91xq|?0KHZ03iRCmeM zT|D+sX*|8tGz8}sh|mC?dI+eV{}rA6Y(g@t`BQ5Sz)h0|(ziQ|f;Dc10I8lFeP#d@ zyTQY8k`v~v_!FT1(+3xlTV04-O)WcqRgtKnd@nz8-nK2%JCj=c3y9+RPr_gq5#xtT zu#Je0*FMVdOj1Ha=rsR5=4q+d7rJYK@A&#lK4}CBKEV7zJy0~>?$=m+TEUac>uMq- z+iQ@gvc^44ORVQD4BWBTySTC(`-rE@d3tvrDxy8|K&Y*}f$dPpbpY}pd~I1eP3A=T zI|U9f6~1F^@XbPFNNF(_;!|X zFVVPL4efl|*0Osh@UL*S%S0U1%1o(JUV9W|gB+EJ?pptl*_ zkUkows|t`cW~Dzwf{V*b#*pni&v!RunN!(tZN3TKu)$VRT_y#$TjK(}Gm{Vl@UdF* z_5rc7^hiaDU*{+Jx{$nZd-3Qi-1ylb$oIt<$t~jggu=bFi!da({bN5{r9@gynG}bh z078K=)kZKyk#ZViUTs+wVQ{C4(KegIBh)Z!9%ww7Cmgj=V=JHtmb|Lzn9- z`9<%t2)B;(9Un zjC7J!Yvpm;FB42#?P|A8aeAGjLTNMQTb|3~%7^kqv@c$q3WqE#Sw>A&xNACoX@bxQ zumAd}hlA~({Yg&rHsm57185AIlsZu|j&)$dkV&c&b+cPeOKqd)5DWk8ZJzFQYwnn| zZYMxXV5ks0R4!LOZTzJVHEK4&rU^?U6+mYd$8MRdARC050me|-|G6Q^9vXwXkdJZi1s2{K*Fi^)Vg_Mjz=5%GRP;c?Qbf|}z$ zn{E_H-6Hl&8fWn(EJYF!p9u&;nNiMmBJ^OEp^=yQike9u9@9KD>=%?xx07tiAtF~$ z1Vj#cJai2IQ{SJ0^SDGc^@OQ+hAhIl)i;hWP*~6d5Am=)G8_=oO@HAW4v)Z zQ3zN63u5mIjl&l{Jl0F~vgN0T3M5Na+71!9F}X}*7R#j4Ty!O~=^8KNvIMDNTq6^%=&<8^^X6B}Rf&|WFjX(d|MiP=BHKTLoAc_Sk zu0;lTf#~?SIe<8`xTP!k%_?GbJ@$-yI5_fWf_p6GV_PwHpN&$c9)vcdCa@7KpP3Uz zYQ1hmz@(<2cNrKbKJ zkz{K~7nk(*iZ_GmEn9>_c*W`|g?4H;JP89UHx9k=ejAvhT>q*1n)csXV`yVAK_&B_ z2QN%OCbvn=UDZZdjAB;!a>WI~S2o ziKZGW$Jh0J!%LP0t;U+2o|5)`cX5Ln`syVi!@t24+!qA6shdi`S;y*=>Tr;4Pi}au z#+U?HFW};0Um#*ZgkG>&Xl=^OVoGY)MW;^d`2D>QQx`AF5!WTSp_os#@BrN%hWqCE54*5GON>||l%7!ENB4y+1+51tX+0v;y<6>X ztOqU?gSXfYTtXb738u7U;H@&0RCJlOgp}UTwdkO-Q-?#19Jr92C#iqVZia@1X5_ocv>oHP=l1J(DTvf#g2v9-YO9N?z=;W_`&?N^qN}5I^c18Dk~Iw zKIDt@yUT<5Gm46+hC!Jdq2A4>vmLX~m|i!$`oMvU4d@$>Wa@1U@@e4_ z;SBV^Oj<8)^3rZ`(C*zItIpzI;2&~bU7MLlmGfjDnoi@kGLq2kqNgYX13fe<9n>Au8py?tW1pY^&R01wu( zM+q2HR$cw#Ek5|I)8X=zBtb?nqEm2m^!OXoWrS3^GfPyt?DT~KBzxwao2Tn8u8jJ= zdH>vLZ21=xx&Uu`{d%*#&kwJ~97l%>7o#oQ?64YX#EK4`4ZLcv5=s2isN`Q(dSSng zno{-)4nNONF2$lUix0pbHCQG5LO)A*;%tq&QZB|A9cRDi+WrAe{6Bue;N~!sy-Ccr zn(R&L=2W53FVjybY!01{vo;Xi(n7>~koTc<)c!FH!}sGTHHOXeUR*}KkH$tV#oi`h zXOj`fsU7)pOl9un;!)@OSbl~dd(l};*@D|xvFGdxXAulH4BLvmNI2#wEx zt@@%Qu^y#Au68ezq(zLOd*0KEz8b72=4x;{CN04xL8uG&c5>~pT;%3G%elDu%+()yJvMgG)`TA%HD*@^S668A_s6^U5eg z2qoi%YTE6vXJVLvSVner@>UZkVaGS`M<}DncQbP+3tC$UaUeb$(@QoR*kwzW5F;*N zt>1~OTLSn0wZ@O&cYGs(`#f^>_yr6A62KrMhqn6>?`=*Am-z4S+aWpnI4EAYhBjah zY7Wx~q_%T_TOo^?9@#bC(Sda-akG%fZI`XenXpeOQ^<>K++W<**4MssDp97DYXc7w zGl`k?8^Y4NDbJn-rphs^LT?7R7@!n7u?Qw6BAn@S;y5bT<)8BWMmHt>dShgDWTYxA zEL;^DaUn5G85*H+#K0I1_Hv8a@v#Z9rjuYcRHT$h+iPTt1hIL1{9AW?qr4PTC#%iB zt~VI;RV?;LEQT?(Q^f{=TLhjhK;H$NY7r?Bgmnv-FB6AEN2`74(rIBf*-jwAYU||| zAeK}-2^2Wxs_}E^QXfrRv^ZqhveozEIRcQY#NK0p$Uviw=1AWgHB}CTUjJ_&#}!Ni z(E2WybUt5BSv+>uokGi+KmYu7dVm5ut)q!;Te*CnCYNgM!!+7c3^m7UjUM@MIMX*A$IVU6~B)Pg;g9Zyegpjg3o!qai zR#rV~odsVamgG!V$J8gGb9jM^2oQ%Sc&7S+K~WnkQZ1WTybUy>>`3e7cy6c|u13z51T^0t9`0->^x_AO#$=W0{%}-d}D7u)XGObD)nI1p@LeGwpGpt z)gOTlf$R`=!!ZTtt?|>$kvshzNl+kHM9v~G!)oqB@K(A1X%N#z41p4Kz&HS&$>r6Z zM`r%R5~hk-d<|91C!Z7@{W}`Ho$5kHSB60 z6RnLEVXb!!Krz6>h-5~x$J_SeqO3wr(90WZy9kKb@gs>OLKBcb89i#bN6r= zbs7onu@A^~`|274(({6xz|hUUl-@8?pW9N`coWre1)?466e#3liUQl(s_vz6OG(J! zB41SQRzGx}@6NeJB=xjh_07~fo}!dHUZOphUg%!G(C?FL`ZTtq8V8AnD|>l-Z148< zFa5+d%+{SnL9TAe{=f#6PK*=dV&%TwTbx98|HqpMkTVexYZ;zd2~kNI8I9N9wdI(? zMd+W}fb5(Q@!eNo|0$RODAt;QnP9*TrXc8;?FKXu%n3{=%k_zfN*|PoA()yZ84M(x zl9eZK)X*4ZmED^zPUJcD@k9hzSSIud?H`2u|Y{?k1mehOeM3EUYq0RdrEhlk`b1oc4XbVpM z`|dpWwgxEt)@w0!utfy>prcFg?slCwy8oz!;X1=!X|isnb*EYo-pX6AVp+Ec4-au{ zSl??Wp5Kizf3IZyaXb13f(ytj-n6X?7xIf-{%d?6C&MhBgpc{ zOt1cMi795S&cdMuXUGf$)8zDsL2-l-nVbvGQtrX>uY2z4J_r6TR2pio)^L=VBSKn27mwdl>Yl0q#nK2aS|ic z$_8o^gtfLcpQRh-O!HGyY1L!x?d;UJsQvqwE(@L3vY=x^#(xR+uUf^+C@B1P_q19u zgSk+etVx#5STMt6t8BK5h?e3F02lBXfdPKE9`F(lT+sJ-r!4@ z0PkGS_77t1{y2swBYjy$70`bgSmmO}>Z9ukOu~BC_&l4=_?|ZVuG)|^0OE^xw&8~S zqKW~esm{Iv<$`j-+|^XRhqu2WP(bkx$PU=W)OrOhqPsQt`Zc(gK~eKq^i~wpk6{N; z#%rRr=rp#Z0;V%0({gzb2D1amBdB;su+TSH6fOKN;GGY>!15J_6u7$E#U~fKRYEG& zl|h-Vm3S+{#@k=$M78ni!UvA7r1ZeR#1{s(G1t-;?O^>zCK&Yo6-ur$aB1G|-M~Ls zJ0SK&hUJA)KdJwjS7s_bx%0#MsHOQ0zs&G)KG1SmlAZyBAx=2~#fdUi-~Q5G;xB%Ef=Qb0B3K(0)W}?VF^d^Y8jK@xTsx_I{u=ccWIGm z!cRgV282fEBvn-w#YLM}0AN^2>Mj>%SmxYmdDE~FS*4=~60sGT(9ArT0dUV~kSA0r zPXP&5hiBG!5>2(_@J&-jya@i-l~0&4bs*Y9Z&+oZF9PsGNW{Teknupj>%X z!2|}v!wtPLXTpSkb;ONhFQ5=U961snY`h_P0OqJ_$H^UnH7KIgcZdZ^*oqN~hb;&s zWI!h5pBwd_PNqX5LMBxu3Y=N?!~Mt0k3`bPmtap&v-*}`TPBO{_Mdnz48xte@OgW-jb*jJR zTj?DU$b*%VPX93RXFR1n32T-cW1^z0(v-&7v_M1|!(~dT=}~Ni){QtV4Xx#pW23@S zV)Uu0F$f1uqP-Z%`z|{|)Zy90Djt%|IFV>1e*-c2i)NCDwbCKcN@io7=#G#q;_Grh zk?GAyQHx8{XoW0hFyrgP42KL>G7D)WG7SK&Ul6PkKp^C7K!7$F(_G+NGwO&L+z}u{ zC?Ty`5#5JC#Pq!E2!xRTP+5owss)5}D0VS{!~f>7XU(Jpn`2a2@bt$eq;T1ZbOwOI zVw@De3X&P7TOog9W;jBpWWLmb?p|gJ0wi1ArU*yRq_9zD4I>34%u3dcyb-4+lYE+d zu8NJdrZ&ky1a{R$QBFwrz3K-S^rH85p1TaDf0wU3kR~*CR0w}xMY){FG4n$o10({1 zkI<19O-MU2J+bcy{i{Ts{U#G=BO|Tdw`qO<&QmkSI>tt07Pox~_kVZe{RzA@4fxkS zz5q{OJ^C^Xcz;(35PbT~AOOpE=FcJ6l~?Op2*j@zPQHRH7?_tK|Lbe{)KIBRf`USC z2S9U5`R+A%$$f2Vl>mj!eSHA0z5Mb+@?xQS8TY$4lGc8a1Q-;B8Iy(q9zC%JAi$LD z8!7^@%LH?8xfJWcImfCO0c3x8I{=K;1lIM}`2lQKDDHuqcc}!RSpM<{sBJQU)<-)S z?ybwGFxK6DA3%AePMgI$OU^BY$^hElgOCQLJPx3!_wyOM-Veb5p{~kGYt~$OdAlcTPJ`6BvPv`PA*aAP#t<5sYB^|EnS*Tn_bnI{-rz{?CHi93U; zFlR19D*FOIbarnSLIV74{ry0yT@^N6?RJyN0LTZx8W{F8>`xLT>BGXtL&s~MKBqq^ z53hB725$9)kB5zikB5v`KTUf2f2goh2rg$$e(`L~Wz{gVX_C$mUW88sS5$mV9?v%d zh+NC1nEp7z8vy7za~MMCjf6)+@HjF7p7_q3j)rZOBA$s4B8*;62-nSs4+(|L!fpnW z$(&bOU%>Su3h_*K{p?I<#}7NIt`L0xxZ*a9bqJ0eVF8g6?f|3p(gF@v;FOqHi`r}z zT^}ygu?A**PO^==6`}1Yw!t!GW%}VG-$Oh9D{|=Dk@O;G#8zS>!eUJP9`05#!*%nT zdrV?ccU%gj`4N!)eoVK!>DoV3l&EbQUgquToplMmNFSskl4Xm@FWsrBRr<@@w;Q~@ z5XM6}UnyY(QqVf_lov&s6&Is#A%^`XX9U#<%*xtp1r^JH$aBG=FHZs5(;yU*)K z|9L}tlb_;|?B3bwp6rp5|Ia_*FVA@e6-&ZO!b=+GEzF51Zua%@^=;()YMy-f1vYOM zm9N+gS`f&YyjiMD&zaPb=jf?PC25F#`<$$6*8rC%@e?*nn2hyybK*lIhK9oPr*^^c zuy#s4`2DNW`OR+tG+Kj+M24Wcx*4G%0InPsR}By2ftvlxPIuENMoSB~av~&t^OiIz zgi_h6(14(=4$>-oXRq&4gX$13sRy@why_o4b#k#~^ls?r*V|P@n|Z1&r$nMtTkKZ< zCbpkJ++i=?u3P-^R1nOxr|;hdD)FIE!&2Y20eqFzVJjyzMfo4?(~V0|BZM`s z^{o|zdN;LxSmNP3MRx=eJ*co_p$pf>R!Is?Th0BlbuyNBjkz%BI<8NvPz}6Q+6m=SJG2|PNjSR8ugsx8j0Q+Kxd!Iz6ToCGem z;GMt54n*jQ_(F*4pJs{M(Rp}Ng5X_<&D1ycr8)+OV5gp&19S>GlR2Rf;&8DagQ2Dn z?A^)Ub-(B%7@D7k-zcbf;%S>^fBWI-{X%T10;MSd%36;<(fxC%0$l0RzX5HE; z9(5Fu!$&P2evB_#R~i7nH`5QYTFVD7y??nIBja1HGD`l270B3wnf8GV+oAa1C4|n_ zqd=}adH$a-zu(x@X<%mPahxI+Bx;?oF|M}l5I`;jYBDxK3C=P^&rJ4yrCK^?8hrjx zYNtLY-YK#E-D{2C}5Av z(2P7rlW@21hLy2ay12wy4Lx$oC-_CzhDeP3pV>K(Vq8jES_=SQS@P~t6?H-5w1w!F zt7%R*w~5WO71ID1wm!MK^Af~0DqRRtx_lanC_Wy#et@dW=jK=}`k(?_L2Gy(4?fG~ z6?f~J{f(U6UmwzF0}=}aXbe^rJBYdVHpSkHA@60+vC+&PJUf{e1huY`67U9=gbPi( z8|*%eu|B;AghyJ_JqiINGTAc%;CcqR?ZDLg3~Si>^V~C6AlAb{2X=^YwLd@WHxMbr zR5m*pB7NiGsiXN}B47JBgV^7c8$V+TwtVsVuT;pL?oJ#8POdP2e<8azu5(B*BqU+( ztZ9jK5)l#-+?Ld}U&eUNzAB*nYE=i|@vf>^3n9ktODaAr=YqUnX3@~gAG->5#z)g6v?taKd&Xz(6Vts9JBdRU9DVB%@bgN z6a3=D@Vsu$XZvZ*_sRBJ{yDw22iD7<6UO)aS!PV2wdec zqjcc_DS^lzFo?hRzP6EZoe?ILrpW^QIcMqG4U6{eQ;?F9{*jVmDbGjd$9z@z);!&&@iQuYRpQ(oBS%{_Qg0f0^x=bI=NRT9nQp`TpY8=%kJmrz0|9!Crw7fgTrboI?}8R2Cxkc^qw$ncVYnSF z+!;uYP(~nX2n1P>#qveO_3`0~zE~|mAYs{|R9}U!e0ID6x(IPGSr3(mdT5SZhyZaE zN(ZNE>0)PbPWI<`iL+Ka28#kj8`~=M6bO4UT?=}P(>*gh=gjupGwDS|HdrNt-Kv;Y z13ds<`*!5~#p#R0Tkm?=@%dSec?aRUGE{?<=VrEg^TQs^a^Z)-HWbUPd z$&ig3<<7u{L<)n8m_qglf@6ooh8J7&AdqBDvPU^QlK9TUV9Vr4ZKSxQ2J{eICiwyc z8|UiJdS|xT9hbE&Q4{`UxTFPZ8s+=Ad#c zBC#R#4$9bRt(uEwyb;Ja_56_vJ{)U7M3BkQBW!h&H=OYnA!fu4onmI=K?o+HA`2F- z1A_lyJ1HZV(aGdp*7YibXc)!b1?Z5@1-Vznk>R6A`Xzj?&Ec9O=2;UBik+?c1yHC+ zsHdXjeG24NW`}<+{}G{LMy=G57J!<xwFat7JUQnJZYeedTxFn1ZZ~q6I=HEtpD7 zgpe(GvK!6|W0hd$Q;8o@hH^F=7qUfgmhxCoZ(_Qi2!?b5Zi!UCZhRbDqG2 z0&YON_`r%=KajGwlVjI_DDzt8V&nk0&d=>`Bv?kxeA}%;8F?uv)vgUm?QA5hrF3qc zzekcnl6Ego1)Ve5j$Wffr`$_8YFP;{?)Sf}!2os(7@i8zghwJNI00aw4J`&1IEC8E120ZJty=b}kX!t1b^0k-8plJjS zaM+6b#DmstI{uOK8~`{#jMqVOkyh&>L4YEjn&$eqtv-tlptrfqe(l=Y1PrkeK=!ME zp$!c>(jAFr0N6%0NBtXF!&a*k=G)U@iX7rr-vui72?rWT3v}EJzDUkR$FkrRGR)T( zJ~z-6!2WN?IiZ9~TSt2l>QRNW=CKJ0oU(8)I~7_9(*j(Re(bZtyFfW-bRr2;06^0q zle~w_KqYdBtqKLYmGBWzPZuI~4EE%*+YUHF6c)zWUc+4{qJMdF!DvoxW9f&l|i{e{*^^`_jdQ`%mp(2rP#G zTX^&5r=%1WO^?_wSuZ3e?bteTVPfl!q{IvN?(d&I9hF`?YgTKjTAJ?ND|v%t!TfT- zIv56@8j@2TlVQoY(rfiX5&7alHBSt{ ztkR8BLGsfUz_sMaq%!4M@Y&xR^{7RffEKVvI+%4-ME?XM!jH4+--$(2mpF7nRzglQ zk`$F2g2B^kK8LAKnr1^>%tDJDfd5`8h#Bw$-h9C)I|E+%Wy|5j%|Bcq)=BE0d6*)Jx%V0RhF z*I=N2(D?4fYrhwAY`6Yi`iS zgDWY)5r}l*BTZoOmSWqJfu@s>Kk58;pO#sGSDe+1er8y^Ha_6{wxR)UT1hz}e# zi@L$f0zgAD5CroYn=*N#U=|X`MW>r6)Eq5JKM~Z!;G)!^0+O-Gy6|nI|jZ2pGB?FLM)&o z0N3OV-^Zh8=_%A}xP=qSwA!$wf;5mbd0Fe%x5+O5#51B49GE@kbq<`JZ3Hu}d=V&A zf>(T{jCN<*UajqUVa69XozN70A1?=mlIm2nEZ9^Ym694=)(%^yT*#ApdVwBEeIi65 zOfQQ`OO5)%SE>asRk18Bdv`25mZj>yR3;RjKn{P%q zv<;39pFu<;C=DKW`)5r&T5A8aj%7_7BaXDTwq~_hS`V!pdT8newt2|~Rbb~Xsr{)_3=0E-gB=X9c92#T7%x(N2NN*=?5xmHzi*0{1vVG4%k#{mII8P-i@FzMGqOsF5Qf&DTWn!x9q0 z1X3;amP^$>7(Gid>%Icjom|@$iRtwx&qb)Y3=TYX#HQvdm;H|)H$gq_l6Tbsl@dfg zfEG-4R!s>PZIMj4WR!fknOdaFa+SL&va&e3#kHwc&(t$gQgp5ft__v!ghtBFc2$0! z8fVdj?M8enn5eGGg4;UvEPf6gE{bpPfm{*!jVTuf<(MxvT-)7(JspO83ErBJG&gyC-O?<7$+y(l( zs_y5h^VIdW`1LRQR>OOpHPZHL*oE?@m}1Mrf;wAWZ+@`(O=FX#sqxJ(0@Dz( ze7%9oAOKTIvr+A=cB#qtPUY$dT~pVJE8#>hg;0gF3j5 zr?P26wU{cQmKhe$rb<5zrG(Xoq{ zoMnlL-m#9#th(n;8cwGTpVwKa)s`2cwGcIFVRSTTY3`O!$+eI5J5rEUYL(DIaQBLU zMErsoTQ{HU3DgO&vdYlLX%Kdc^rDxSfn)PmTj5Lw?`y#l@T3HT4gcRkH69uF7^Spas8oYvdp(*9C+Y?!SCltTCH6`A2}? zz+xbc0qh7=Hd1kuCZN7dCk9^xcK=uiIH&^5rfRwU`gLow?7*|PU;fiK@}SOlid!k} zKcXMJJW&@2)CCuT*Ayiu4g9T8GVmo#kQW_W4D#B5^%H{uUJv6)0L~rhLx=^Wp8%+C zeta(Cg#)-TGOt%8i2?8zjfREHTY&EB5GN=F@CQ)U?iJsY0t4MN!^0_x;KHKd*l&pP z@8~ac!F`h1g}e$Z`uNU2?;BI0^Z0>=ONU`OR86|On{Ih4#UjviKI`bL*;qT3QYo4- zefl@Mz?U0v2p0|xJ9+e{onEDF-#BOb|Q2xeoPWpBbdhR)tn7!>xWfL#$=_~xu#L65d)Y{EJKQkTvKqY*kKM(U15s}tkfl@5FN zQ0oF+Iqe1ze!T5gzpI0t@9!L$XnFRo6reSGrShFQuQ0dk!6Tr_>>@T%pe%7~&)!Y0 zc2GJf60+DvNH;gj3_Hs*R-2jwU=dcEny`P1-Na>RsHUJD8{QM*_+6I#qI1PhJIsk; zox(-oT3G0+44vLZ&eg&q3|4MKE=5Hlxn37i6cq;QvRZ`HMO#qzw!9K!v~ZA<(B4WB z<0_bK6w9CDT;T#^kp!$ncrU_94^rCecG}q{7aQsBx%3l_~kUE&o(6u%u8P|Y-qd3`QkbrUL_m4I>i=1tosi~k1 z3Oxzf_|!+YlJ3<&I)my^N34sz9(qo3yv@4(;xd77`F>Tb$g8xlw}bWbjAokg&(B3K zM0cuzo_ryetBbpFGNWI;6Oy>)<6etadEa07XU(6k)v~kk zR{YkChwoDu&bR~WWS{1^;9JjI)<>2S`?>?m=+Xs%=+K*}yeV@(tzQ@YHfBC^t8{+8 zpT#J@*~USdlO@5sdW>@32)|hN?D}rmnN@>C8~NWO*GqzYy!ES2-=@>)#|S)#L@BeG zS0V09g*Zh{`!U3K(9_`I%Z5d(td1U;9x_wuFxh5aG%2`ka?~hE&lu;|9myf-HfX!g z+BnLgXMjm8?Q?1pg~4~N5eL@!xZ5nn-eOL1IK2wVTYS5d_qU%7xsATO{E*v%E)P76 zvB&+Bjad&CWRqCnO7IpCuT>y7oFvhT?IKi1!nJJH+Tn(+PKHvH-Dx0XgxVi?xIylC zmgEJ?SPtL~D%gStpLRb=iuz-DDSPw?ZFt7|%HPgWA{1Y%^@w6b*sgIPo!qe4X;C{p z`6ofTjO|$6}oLA_J+KMKRsW#4$Tj2Z0n;*7xEq_xPVE`%LJlT z7D}v5aNovmDqPVfFg3Gm%Kwj2Ge2xUrhz59BbgoIivfYwCsPL)AZb-kgNtQWtHm>Y*ar-_SQ>hG(>=JI9>K6` z2AVmO=0g4OIgQii_i1J-B1kNUDKd{l0Mbkc+?JDedXk*EWhDzsitq`CB$eZ{8B`Rwp6a z&(<%^3Ogv(JL_J-lJMDe#iZn-8skc|^C3Kg&u#z{r*9XKUcP*?U>NB$@6RG99nDqZ z2BJnNXPquwDRTO4&7zB)MR9t%oG#1C{Z~X+851(60^0}S;}3K+54p_Fb&{(bGmAKz zvfDBEZ4!u`yj>FuqMZ0#m*9vC9;}s8Y6i2a#Ka8^Q%8tJ5^)B_&AlsC=MWs4=E4#C zsOdSJ%u;=zleZ?Oy**x3>+*p$clc8BRMD)nZ)%|U(T>-*n_e_7`q1CbS$drEu?kbO z6bXjdP!&l<>`f7=VpN_*!6_-!+F!4WJateV(ZwzDmjp<*%OWy38Jv@-T2lr~YV^+~9Q&hK3#-q-k_5I9lW4HtabeNF|nJPqvAeotsIUAP9C~uj`n_@pj)zAfsRVB*V zfp7m-x*b@vdpaW-oy=!IW(6i$HqBI6AE#QFNQ^!Ha?fAQWGR90eQf6i%F*-3ogs6E z;Tf6l_bGKvd&Yjr->Jw-@-WoprJydBzaE<*Pz<^RcH?r5+smX|2*7tX4t_3q@lp9yjb@X8F z)ugLk#@M=n2a6}A$ERy1*Kd-D25ly6E%zP}3>1LSTkXz)5^VJ|3&qdi#um z@LRKiJJpgJAPN*wbY49!^8j?sWtkjI00b4AZQ|q=O$%WouYUB46QUBLH6?;|i!wda zG&}0h%47h3{tM>m(sXH2*)LVW>X5D+=tn|$l-AlD7ziLcT@|^bKRzlU@^aeA9bmqX zfo7281Di!LQc>%HRNJBW@my3u^@l43xzkp>kNx5y_C6Ss=UQ)WZd~bWF*yD=x?RF9 zP1hH*6rm}E8tSJ9-f@>o{pn5fZL?oLYYLpQiSp>PASh_7pA1L6bn$?D_Jd28kyNe7CJq5Tj1C~1 zGOi80+cy%g^^J5h0h@?97m9D6IeEu9ZtR~8ld>NMxo~$#PT*MYJ z$r{qEZE0M--*{>HtGduRefx;URHD_rD!wND1J3ZFWP=^7raX$k2)A@xgY$_<&-PJ# zisdre2BHMC+DA30_4l7jKm7`>E{Phr3@;WiU)e&j=l~PsmO5~?ILD_7$9^Nok!XOy ze*+n8wBP@siex=9xe)?EVN$J!6P|&$(fNniyioBGO$sN2$bchjTd$7pXgEd1jgWgs zw%VakEgHDsA5O#4&rpeMB3*KM%aG^Sj@+Ad#gHJ;M+WnEzpXtAGQZBUIJGZZ5*A>u zey-fd<%nYi(WzqMN8n`!1ZzTxXyAi>zrCOvEh4p#$$}2F7_q-D5#iAct6(x7!w29K zqA56*iSi zqie1X**rjwy`}gE9|%NaRBr!H!9%EKl%ilAz3YJ9xMSzP$V19#_vq2%);(4QwF=BW zGGQG?pF{c9<}||xz(HHCp#~x$=C7@yGY+Jq9hJ)Hwq$rHTU<;KLJm7kE#%)fXQ1sa zSrx&7QF4e~4(?&M=`L*7+v--NZA;!vz0o_4yH4P_i|i&JO(kZ&IC%(VFhd_1fX6tJ z3Z2-^6u^qUI7*>s&@+lIi49_X5Aa`f8rU(#1#VM#;;44Ailm0f^kL^pm_g8hho3HU z`dy@qlGLF1tJm!E-RTHzD4qvRaKbRHS>}kDLker5v|h_u5H2`!8r8i&_@q#!(kNHFQ6SPj$MI`lx@ox7@X?z;<-rt{6$j_4i01# zQD0wp|FFeVg!v%?v6(h9d2{s8kV5$AGH$xvEH*D%5~GQUMW(Rh=-$rtSe)frfJ^ja z{XJ){CU;1e&L=TuYFXYaxdm!x3|`! z$B}*y?y6$gkJZb{8E@&{VVg0?ac`@|!<+s#2$aEXKlFLb68Ulrai#Z3OhI(M{n%fM z+}hj{jN3_PDe1X&5oJqsl*@xl@AC0=?=C%Xj*i|!UTl3XCHY@_gyv_uGgTSuwkXU> z6EbZQu?4da6X5e-idgVu-lcp=NRv;kH|8SN@+SH`x?-F%SB_82<;Su;ducLL-T;du zM2ClmCo3S{k0Qnsp_v1~{b8R)QQg6~_x6<5*~R%t{r8?t?{!WYgMgJ$4+BR*UhYzy zT*=D6?&hC>PU4f|Mum!Cd4iwLFA3!uqyBOs!01Vkj%;CCLO!rkm?=Q`bDwfRy->MG z%^O^{SOYnuK?D4OQEkL76%2sQoTjhihBbz->+}sH7=i}sIX^Iv5*~HW#RV)~nYf?_ z3>pXX=bhu;s+dgip-pC(zRoi|#blI4o;u~q4w5GF?!7J=84(zrDZ7UYFW1!;JIwco z&YU^f(GG96GB%|oUqW=X?oY7IjEwh*udh_NDcuwR0x&RZ^_(TC*)DO;TBweSR5OU8 z>39wvufpRwY@PmEbd0xmOw3iijt$28XTO)D2ir93OokOJJj$a^1=e{dv?trTJKeSG zDz3@NNf!lY%`nO1EuGpJ`i#@uK)>>ROA-=KrA5DF_=S)Zh{%xy+L_=pAvYJXQkiLx zEOw*0#9aE$*zVZon3*LO2UG`CheK2gl}*T8`W=0ri@wlR>(9G|3RXExQzDdp9`n+p=);V+;T$g@HGn<<2gA=#XVRTm>F1uku=YbBNET*Ga$WoB zUPq_*;T~_zStli^E~d)!>{J2xD)*|#xR zVN@tK1%8G{L{IVd0?=2o4=o$pp8Qu49Q9y_QlA~a0zsNFe4rz(3e=3djMxIlWXr9u zw&+X$uQQVMn}6g=oTltX4)>MTxN87=85~DXi50<-5@kPu5M~;%Dv%xoZilnwO^< z;Ymywv4q^Tv9L74Qws>AHk8*s_g{MuT8D-7hy*C4sqDY;4km;sRO=xxy9+a6%5uc0 z7y!Sw4#hT4bto-qlQu6;i}RS*%rUjKCEAgvqQ$(}9<2-!3xjwrImY-b*X7s0g3b*a zOi>k9{6thSxwPoDqpjU1shV=&yf{F@PycD#Xl>-lYRqO0W%t9v0G&;1x z7RM?J@@`}o<`mT+K_^tyKbksvG9cZ->|jRE`S5{t=+vpoBuSz;QL(^7PtlUKwpp$9 z`jCTB*lPRr>j5>yd{Vxm-87pgg^2cBx6iseo7r~ci1e=`ZA=i|%|{Hu;{d`DWQpgr-RKXQ zGwZT~bjBAM4c#|Az0Tf^%(HdPiVqV}3^D0kX=p*>)~(^{9Vg4dlT`MdTscY2|1(;7 zD9Z+xs9uXx-rIss9*L}Uu87nxM7{$7Q4?*m4femcLU&Zz(}RBn^VhQqoYKdCQ$j^) znBI~JI3Ll7)>iuxzUS_^_OueR*(%5bgitXwJ3+R3R$@m$ylcQ57_=U6MbGnsS}dre z?!f5iQi09f7}-wWhn)vlaf}SX zrW4*UvK7)8vC2soSKqy(y6)sMd)K`th-*^>#0rB`upJ}ZS4-%$y42IfXfLjW&ek}Z z(>HbcIXGFb^h%>V0fN0VKuAsdXB0(HjXXmdyC~R~0U%motxU`pKtn_N(}^Si1aq-z zL^2>tD{Ii^%5YK|@HbIl?^-5CpqSCPIz~h$rofR*5D?vF^Ts0JX*zhwTv;xiW3F0Y8^JwB{ zG4wQWL+gn%BnE>4MSOmp*SwL@x%g_FDZ4SxX{C96JymMgcY^EU9 zebZU+LmbI-Slp`9!SZQ-%c?AQwq@%BPtAqSc}MIg@?Yv>M4DJrWU_BWd_aX%8yprH!6>wz%*D2gguVe+NCn7rG7r-_#WEXd4tH zcXf+uwvC*~$%7+|&6poclU%c5K&b#iB!yD4W1)8v6FD%7%F0g=rBOHJ`*_8*)XLQZ36&nX^@;FL185K1Wyc@|NTaZZ+xb<_0$8D=Mxu&;AXga>_c6HU~!+t^X z!!B1TuWjCzWXJ=3z-+SSc?{`5*4)gwo^@+DYdMXpH@0C){Tjo{-OJsZCt$s#ZhD^6 zix*n%nbXgf;VlW+EWuK}#O#&mnZp1X)vlEr>{Ma-$tn6Ma3ZoiAS)s)C+ESYP4I=U zp2izF&WRMCt=8d`6j&v#=-giHUF6dtl=>`%e#ld(cuM|wKn5yA$6{@q4F<<1WriS)p@; zaYA{N$+`*Z(%ebc&vKmg50|I5*}tF5>Yg0_IH5*v25X0IW^f>J4B7kI&F9BVducMO z_*~!P$M&u_&IUTq%@dL5t#;S;aOolN5jz zQ|v=~5FWnDQ;U^>XFl+7`TIpBqLsWdSTj-zUcFBE^$Hj{xcQkq?a5<+Za(2BiaKr-1_3)^z<_T51uxA-Of)wt}}>uNsy(O-L_{V1-$d^qRu@e`#1=g#hX zclC{!u5eK}Hwm6Ram?PASX@wcQyRKTrYv~P3Y*pVeQe3SyOrGQ*H#!8%RwQ^*gT^_ zpmI^U${1B*JnE;n079SfQ3u&J7w{xWVLNz5d!72d|58`r>IgSqsrkjQZ|l8 z4L~nzV^{3oU-HD{#`fz1)%WpJ%LwQ^v;TTrzkrcDujtEFYlBCl$6mTx9_8c$ zDG#6XKt*}{DaGHEgGz2*HR59NcPUwt?ud7wln86jdK+$5wt(Un_gV-c^P_)q(L#?8 zKiRhJJOz3e{zQy;X#8TVgQFQU8fLO?8BL9bU5D*X4lnX^HI$iVRjuO65dOdHu}in- z^!yv5)gCK%sUvUG>~Ko)7rABPp3Xv+3|M~a-49TpIkcsFp{v!juG3)&s5u6zq83i< zKj4>VDSr*V_Hc1>b&~on5Mk9USoJ#^l3(yKFY;5m_f$A=tUV`@m}^iM#1~LKWfI9b zaLC3cB_}5)6+%2=F*Jks0?+^```Y+eF7lT95y_DwZA@mX^Q9w_zqa-;nLUReJp4=g z*OA_req>5{B6PTi0Wf~6MIO8SFThePHOp;-bi)oJG48lr7<96h&3QSkbs{whCZMuwm2P`h@MTDUDPD*ilQOe!3A3w(XFX{>k z>RQ}X^x@-KkS_G5spyw3B{k7B4jNuPW+ zzkNm`1843yOj+EebORR4|Eu^oYl=EVm37K3*DWv1hjee(+qV@SXLgsY7FF}v zJ81R7LOCZo-I|oYE0>ou`*n4()D;WvMn?9^7`>nYrFI~@E=cHy}GE2 zJXj4WDy`X(yRK-fm}k1QGK7#QaEl}UO3hYihU439CM?LOUxv z%h~&w4Fy*e`Y%pWH*#gc`wOenqbHAhQ+4oGtsJYKjK2o^AY=1gnBVg_xMNpJ8zK(x<+mZKFodAHn>}-6@A9|Uc`wH&fHRb}vKd=j zGcd699aG_qmFrkC4ncwimbZI`RcXd)G5?qIAiu?a+0Moh}X5yJW>>|0_KmtoD=RuZhv z+zVfIv`x5YRfWjKY5I(@qCB&L*FJ+v^;J)UlGB4hQ6jrg!6yT4C&Zk@Kt`{TAB9<( z3>9|Bg#0lk(`sWA$ZriHEtbgy;7S0r1Hv+}dk||HE4^<E^dBlQz<7t@GjxSP_-<^^%jpTum62Y;wj`kX=A9dXB==zS1=k<@N-`y}h zw7MyxD59i|ncxr2jq_8S3$}V$kHm)ihr@?H9$62bT;JYaP4lO%x7)Q(M1N)P{LudY z^Byme%ijO_&x2hYA-g+vQ)4rz{-EM+;gZ}rPenfan!K`e@X^4do$@OQQym*bJ9Ja~ z8o;CnFb?D`f=vG4re(tg{=D9wCxbt6C|~MdSh~ZZingqUNs!Mj2 z00RK>J0blDm94OYnNu&!HDDls5n*uh!5-u}6dM)~!HDU!0B;5ueY_xB6kg$l$A+|t zd1y(58w?XXaUziz1jQ^dm{bZ%T#AN9RM7TC*Y8wO*sw5;+!>Hoz+N?3* z;aIGLhAeZZ!jr-#lE^9w#f?mchg5e(;017cfCu-HSV-yifRgz5@IRP8E-|Zkg&j7H z-F`jXc0ML=?*0!Sj?~)WeyqN=xJlXW?dXmX#`(IQlDi+-@~hFeL0g# zl~Q%fM545^UAs@)Da+*aCI(aLR9&4u-18P>zK50Fz{s{-b`@bEaEM53cJyu@9w{4u zs4revSUT43g#ECy7U->yJ(N2|Xpr;g&rn5DSGer`BZy5-dJRu4+5d+H+D|fgdr7_pG~0E%52%EJhWL ziK;j#rX*f)Qy>U|>tvL4XyKG-=d(p^ItxKBiHCbj*iFcG6PnNv6LFBm;y|~!<(ZZ4 z6c;3)prc5bEF+9t%th?wia1257bQHUWB=T2K24K3SiSSaQ5;fA6H3XCT` z`|!-T{AP%5X1*Il^``xISO1x8a{NgWDcd0!?8Bn!eCn%X=@%cg@DwNk~M`2+*EWA*dZkuEwaZg?fnyN+82x>AB zU1!(yFK+sn*#MnE0U~^yRBWI>ZeHO@Yr->je|U7-v8UR>;i=6?9}`|4za5brb{yKB z1&TrB?-9&4*m17`_$S*q3JzqJuI<;iap8>??hKAQ;JAR$pxM%(TBGrMcJ{Swtl=sv zn8jL1Bq24S3LUt7Ehw3f!o|$Yc>%Hww__4QUghwHMZ8`COA(^HkSz2$GxpW?@{h|` zu3m8@hC>;^W(p$%AfWvsKEn_iFEI13HN2|#eB$D-} zDzA{FTyulTtVSXigi1O&>@YYZXDtm9$sS>lGm_5JiD!t0u^bkdgbKdogoj5wR&JSE zuVItD5R^5C%r;1D_4XNT5?V`}D2%sThxt55B2ma=9`o>^P^qmR9;PrKxL_mSyF8yL z#?HpF;4JkqpvMB#=>WXmP<8xE7oiiyb0w<0*7}Md_ozjK?rz7t^>%xO*ZXJ;MZ@Rz zBe23hvaQ1+zx1_hS*yi$Fw}|)6C}5o#b+7`@?<`%mfzD;38fOBKw09ThD3wuD%fxt z<-e_lV==a2qBo2bVPr`rIgbI8QC%pDAcjMe3=EWU&ODkoT*mm*>;0?J78fSpGsLx! z6ePX~8RU(6j95hm3q;tc6fYPRXv)%Hb@g4Nv0p;fQkill zyw1WfF_>r@;z+PMqU%GzI1Mp~cn(CQfMrDMWDxLpej=HS^$I^PV|&ABx22L*jSPBT zu_-h(NUeIRRLpdD$8*BJ=xPooMu7N&_QpK`vNn%aZd~>;vH}$nQ2_iPI?Yr9z{%dn za%QzSiOj>=nVX2^c?6d`D>2tDJ+W)A(iJ7WGY)3wtgo6eVzJy1ceY~LC>>|202)dN zCCG}A7E@WVqe9FO;3@SM-LQ-xB+@kITmiZeORQ%l{MEdinI_g6F1LcgLt9HP43@GC zOlBLL{l=Z_!x!}GnFxe62r-5g??c@qDF_wg`&8miOoA^0>;R#tjEBZIwv#XnrU=;( z43jV{Wio&fdWRtfWa(mqeK)F|3uM40lp<2BAE#JxHE95Tc^ekLbM?^fp&eu4@qfPs z(357xA9A~rH=1~yYZm4j5 zTjpdB_!sBlw)-FAkiZ@5AL|9LuTR=!_Cz>^reDV=d**JJu;W`+coleq;$R@|SXpH| zJ7YPIqq+&Tqk}qwzt%Cl39+5r8ESp|aZkkxmnw*6mW ze}kohu-rRke{X@$oO0qjb!dPasXHV-G`=_~+YmC<66p5kUY7mn=XE3w&upZ~^4PjJXl(hG(9HN3dzjicN1 zIK!P{{g2KSd_@RZ0&mtm_#G4P(mZ1)BNZhXe{sqdd`4Nl%~IV->8*vXJx>H>Wh|*a zT2V6;H!;bp4whdb_Ei*xjJW4@&}$Q7H4gQcT|Xu;A2dlLd#aQ{G9zvcI4%jVhX{dg zwcRV~vCTnZQ_&i_!}Q?kTJIjITO75<0ngnxZrKJpP4q^ZnH}x>zzAA&YxjL zh0>`DqhWw&`QzfTILshba{bNN0ZP-VDtmNB0e`hYvg!4&v^<+035xDp zU)+cPQc-m)&$!dbE1LQ?%j>PfWkq|mv~w-T&;mu1Q_VXoY@kdn5QBt zdxwAYyiW1_Z~AM@z?`0Ss>_#8V^WiY}rD@)<18nEWLla5BU~Uf9y2W z(o!o4l$mh|1DX_T80|>1z5C_5UiWgZ@AjG4;_=DFd=|v!(`L8u$Bpo+LeFb!FQ3#Z#`2GSKvzEY;n6l`3HZy!y$T67q1TCvR)zu%(K& z@pbhc1bVZ4Qv`a#I1qPn=--H>H&)Hhb(*+Exr+rr<54QA3^394c$h5o};XLjs zR!Lc6o?DtJr_h2Gg^D=|*(9>3qEy;|z3MlkBP7Rxrlp98*>r-^u~K!Gw|$34!AP&o zSAW0l4$y*F(CC3I_WKEuj8FasgC*Fx*U{a%ti*cNOMAmSd5N&}1CCwNGd0nMN?p;J zM|kj19iPESO3QSNqDBB1vdRlsAR3c~&MO3xyb^T59{8e3TZu6&!0Ws_nQS)0;Nn%w z=Qtu`!1v5=12(HLfA=96L6*;mNg}nU79!WoM?m5Fd@rdR1_a`huSXMfY5W zERn&rgw%^XD5?E~FdUG$+dk`?+-qxY4WsF^cNhNyz=CaAUOJrBR$aHmE!SB20^Fhs zTT2#HQhoLQKUR=9OIg#i`y2j|)dJu{^tmF$4H&6QZR4_vwI~=pzW63)odzT$Cnl%-9wZL33Ag^bcF~mg)o{#@^4(qZhox~12X8nzD z90?3U`m!65J{uiTM{YC;n3zLhCTPRVH}-|mVN7A-$D?e1)t6UR=FD{}EWn7VB**gC z&nt24*O!YXsK++ z4#?78itgF2PwkV(N-tmoTvwKjAk$o3CvbGd@-4CZ^HxXRac3G9R<;Lod+;fpqmqh_ z&_7)4C3K=n#d{C)UMJ=+hRk}BzcxUR=Y={L`W&jw182S5`pnQouUH#XS*Tf%Xv*6O zEW^+So&Hg5)uwb3>!RZL&6I_Nn=S&movf7~OoWxJ@|P>wy{$;?V#`gbs8zJ1 zWVKL>PUN{g;#Fd>d}B4Sy5=QD_I=G9oa~R99AZw*4@~q^Mw?Z=yWx5H*4Pcz@2!sC z;@a-?2|xS~n15U)`8;_2_iLZg3MPkW*xQmh9J_7Qe?LxsE*&ehM|uJHODr#~)Nzd%{PJGICeR;P(FW%!Miem?m_k?PCirTQvB zaF?SPS-wS*$QF3sKXJiCcDd!2p{szV@2Xoei4bgiv&VWNvvq#YKakpjLhWvX5G`Yc zf2v=qMVqDdPxVh_tRQi~O}o^@HqxVS&Sc2!p`FD0*xnDY zK~X%q^=fN2yccf#3Y}{MsX4ZL$fqlNvVz~A6lxA#`fIBqW@dR0;$-<#s+s;nIp#1n z5R1d*4kDgEm&Rh_>WS^XC)SD}5?GX|O#|m1FWJAoB8&z5BZjyzx`6HGvvIHTdFP%v zpO}-~v)p}LX8V75_9X9lZb-A8%4-qBM# zqR&$+nSMJtc3a%FP3G!=Bk7$+TJ>5;$qZ~|&iUi3`r?UP?)R(HSnkVvTh`xr%}Mi! ziOa+B!-*W|lqyFI`R{K}Ye>uE+m<_N1h&_slXAs;Khp5di@>#+azT@5`u`)^EZcDTeP8yZwH z<7dx5oKqw2F4vw1it}wA-CkubZj6E1Uzl}{}Zof~- z|Lf<&Xm1a?ES)3vGTsay@4co6;7ls}082;Z$N4fa)K-rC_X%U`B|pF%yRYbL4^RD{ z1lyQO3J+F$`F2Oe%0=;hrx711MaDM0_f+>H)9YONu)39V?z|}Y2c`$icWF>)n>Y2g z61{_YsC&6p7w7D1`$z%ecGbV;^&q*9Or$FQADxXZp^%SAiBGvqY~_)#)ILufL@;u} zTQ}Qaig0FD<2Ljw9;?N+-v}t8^GAdX%w&y0H5e}HL%nKoXAaoe?llXEh}V5jhl2E zLsePWBUfU<<=&d=(T_(}WPkleG6`#+gCAG_BlRl#-p08a7Ltq4B|L;qlQIeOf}Nc~ zW}tK8>?&J)#%-M*sbj~WZkbZX_^1$PzoKg`+=*&N?B`C9Le$ zSGw>FFjkl>kpA$&mGgJIz@OwKIny^L(HN^W8Ki!4U+JI4_bF^xc-VCh?6`AM_G9*5 zH*DCq9-goe-KWKWq%L1ynaQAyO*F>%Dws+sd-KwQ$RMl0dQFh6Ed>#U5mR75?Jf+@ z49}R_&;h8sivo}ub-Czc78)OdP+EYC=A!{p(^2zRuWKS!hpdJx264(`Hr$qwu(UEe z>S0HRePp|i8L4U(?VN+-SsLxEqrN{j8t=N%l^Q|)F} zhldQHvs?_c-ihnZsmZ!~Y zNcMH?-Uufs#gOEMRt2e~J=HyEriVc_anAG&tZuq}5F_ZmT!P&*x zPNPbY4-pZ9!5hM0n#ph_Vvp6u>T-_iLY0)bFf6WkDPHQvuq^SRN}OnOohWl?_|m4d zki^?FsEIC)%8YM}&n%7tBcFRMVfawIr8goX zIy^c$JOWIFt|3uxXIz%-KUroRw3tSr3jpYXDE-)yKl{Fh0Afj<4fYjWDii_Zo>&`k^=6H{ZNbEQpF@2h-vm;$21~ zVn3e-?PO@`7umOKnump9@iXEarvQ+>Fd#sJ5AavJa5zOt@Iyd0{j>0N<$8K4^9luc z9_+Y*qq4F=@OEZ=a#7VbkXh=PQC2D?y11z^EtfN>&D`Ng-3MyPJ;T?hE?gw1I{Vqar|jdT;`7N zmqXHDnMJ=>P0J$^Y2~tm;U6YHtrVE}%T1dFjdOa#^DjGPFW=0Y<_>rg5SUIQ+RESY zE`B!quJLsyx((&vRsIVw*_Dsp>(J_)VvJel8sq0sTTqxc;6!J|x%!{C+RB>KC>}Y9 zQ=AV&AGi)h4Q-Bdb&cN)64tX6{JrCN`|ab15T=&jhcY^?4SR9t_#>V}(Cg`jV@O3+ zTVWVZ{ZuJ{B#8U=*^4{IiE<)K&f)^z{`5zmT{*gJa41=0dHi9UZk1;@=`@J{)QkI-ZG_zz|md>_Qy)nK-9sTN!J@@7t?GeZGEWGiE9fEuG0@zZrA^bD>P20FnPk_*1ZzB%JdN%5_% zau0%?=YNZ*fviY7Z67qt4zkls$x~u;YBHrh^x7mOG=9vM*C4Utyu~KTAm{%2af9>JPo7m(t zYbspDHe&goU{T&{@#&~+YY98R|6~z?)$u>9qFj;hjAZ{GL@AH1tQ1wZRaC%gdmB&> z9+P4S5T4ZA^(%V@cIv&>b57IAR^>%~8iu^NTODrO@`{TT;??8IzTVz?*^OvTuVIb9NWSw z8xevxGKg}9Nd=iGlg%DObhF4F7D7<`YF@DSvr)26Y4}R76CN+9A+q*+FqeBU_j)ik zaPGvI_8M}o$YnV96_B?{iK?I6vuf*gX5_PWzp6`;h&uqF%tw^`&(=o!d@WZ+~~Qz54tk z!aPThqvN*9C+t*j+N#bSE#dgz!l|BU@Y%`S>3m5!a&#*es%*3M>Gq@Y<2GxzVou_O zsY>iCxQC}&O&F(SAIENm;(&wfIr8e;0PL4^-h1FTlOS%b=#^qs-M$VsH0Q2;5@npT z^dg&#nC4~XcDk)zt^UuEyCRoj1P}K*poS(kQ@KI*L=Oo+JMBoz&$dsJJMNm)A<%xX`Wp( zjBItTr#X7Je8O4wTX%SR&E0>^r+N~*kh2ZA+UkU?Pv5hj(k5fWn=HvK@VSV=U~V;h zYw%X|H&v8WBAD`b0)!B3N9GY&vC=i_c$BercW#@m)DnSq zAL$Qq(*MQ+vH$hcmTuBlKy%W{X)@|BVv~OE@^p6kc*eC}JFr2ki13c!9O{C9hnI9n zY!8hx#0-S;qwZVXfj^$HH8ARqtlqln!zqVS9!3q&1_mN*6lt3~(`_&-XHf9jFv4|b z)Io#9R#H61)v+mTNpioHHI$kej##)2gLhyohKBkv^yZD#GawiNil0-?!*gL@tV{H9 zLw#}H_P&7Vq@`3}_F)0mlusgaYn8-0j>@ zs>)Fni*0=eU*IZ+c+W1FvPv~s&`P^S56h8Ev3L9CNV&l!H0}1pjV~7sOS(TCcxuU9 zy}aCEO5nBYm#=J(YJh0I_~YOg?11F#O+`lA+znKfO~}ULpdt(5nqM)=c1B#!GnK;ISVATzMWV?`OUTFwILILxxIjcE!6)|Y9DqR*CFSpIy_#Xrs(4M8al(3!4_Q|+9EoBbcDw*Ta30O6*o-AH2tDijzUrg~xfsQi zTaar})Wu9?kS#2t%z|uX5sA!R0s`y&+2mxFX*(6>O;{z%&+9~NKVV~d_YiYS16>2KteDTXxzD@3Qjj?gyM;1#jIMLc~0(3Xz|LM zgJ)or@S==zlvA-XogdObeLt)*?xO_W)dDCcjMWxIghgn*+VWWj5swPv3_K1KnKCG( zIfR@iLOKwy0E+uIBU4T!2#ARAgr(o(B0~MVuIKR*iDV5T#vTYIaBFfVPEh=| z@7l)eVp#<&4<;***FkLi>8Hk{;=;T>=VUX2=i?Sn7TVCtB3(ZxD9s~VNy3iS85g3M zNsO)`2&8RtY+rIue}Bzrl@g7~;))s%-^;PdIeXiXkA~t3oJ99Sr=U0$-gNKDH;iCY z_7;N*h5o)_G+T)VKhXq5D=OykD!9qBphjH3Tij*<>oe^hqI(_rTfW*fth6jUDZzm; z0KkyvGg32n6?YNd+!ixz-7MQ z!XFhO;b44c3CN4|n}FF#0Gml;WBduZjDBK%KUAl2PV)2FL6(X*IvJe*H3Uhq&tZwS zFr6>LS?Gf-@#0>G!ualfAMYr&c}Huw$kWF&T-17T<80UW^-tX9yFIB7h@~^RStg9U!A1H%iDszAM~p{!lw7wem7Cxc55io(wy@Qt=t)5ZCjO+mYN zC+ z{Z7%Hv#A1M&}yFDq|YUirhkEveP4|>)3_jO&{^Q=!O|twV)K7kB{m=F1G7T!-NhuF zxjzNmyVv)BcJ~Glk<)r|kWnSk**b1MF;cT?AW5a}2jJaE>jE4yLD5NlJTmc0Uc7&< ze;(w9Pl0cNR)22pBk5dfas{J`QR#R^m@G^&i9qmm3Ydh^Wsufg8bR`M&gT84OaD5y zf8I~kV9tR9o#3x4SHG2wxSFTFdgWW@J8;r$4g=p^yY}?uiP1{lxpws_NT^Q+?Sdc= zaO>ucC$_L6NZ<*MuNvL*pIv%%)v7HaI$$udC}2TX<+NnP!X|@-T~*UeQvpMSAm|RS zn<4~|cFl^Awdid|aM9ff0h!_U{+0$`KR`t(2t@9jTJ54^$X(=aI@jt&s|Q{E8(0ng zt`3W;NOaZFMXapl-B~P6&mUretFK;v{jxwiBKJ?$(`NBzC1i;L4sMdNb()&hGM8is&R)vR zo{YFH%&MTJ#(B)Iz)u~f?YBD3f^gqwUmvSPeKpS8?&|r;Og^$Sm>9hD2w4vG4B9@= z_!U)o@Ot)36dJ&GU7!t5#iQ4I#HG?IvV^xICbPLFF>ZYhF=su_UKXSJEJmpNE3rd7 zV6G9EKYN6otox}W!&b~cI>zhmWd|MCXdHG0@A+;n_D(5{s*<~*5^|y|w)z>UES3~R zU5A{vd|2ReJbXd>wyl2Z4bc5!&!o|SJa1yaYtE8&-sT8PxK^v?1x9ZH#Al-ew6>&* zclq|q*lZs`Xet`y9*;-4hgG_QKjzGdpKpw|v?oHw>Yyt-3}M!}#<|8Y%WNZbxNc~A zT%>jOW|q4WUH$w<%ntO9!$-zR|N;8A@^ zty8VzhnT{ILS1Ol0<)s3PcRri&wjoA-XZu>*pl_VvZy%sIL-iFjFNB{BtC8;h6uUD z)8J`{jR(}&>Hhns`y8aT`0s1+IoS2Jl~d_3gT84JK&5kkyV#sb`xG5Mn;eh`JTBgI>(g%dzw%=QNZ_DRFRQVT?_ zCA9!{qIWM2{zi>gTnA0i&MNtaYfNY?{o&~N6ZmxmLkY$hr6NKgUA0xi-6n7ts!hev zt%l!)vEl%M;!YBWTmEc6PBGA6ubdw_l?KB;)|byJ6#3`z5li2#l-5=NxVuIY&dAX_ zFboJ%>3AQGGh%MR8D^y@&pX46QoqBT^Oc_R8K=|qtM@whKtM1em_k**TT!U~@G zsTpzd=%SjR1Wez4 z*}{d5*bN&VR}#>H@*rv z#`o)jwr|x8BFWYDuaHgVob@LA+7!4Q?@C<2gc9AD1$R2!t2flnP5A~ffSah35*Y`E z#8tB!k`^(S4|5XPlS!G>m4lbgbzzD~T0B)w&eN)B5zz^PptaNdUN-*W0^0X}01xTAvG6+JHBN6>>CPr|tob9@AoW%k?-&ZA{rb%E-BKHe`N`!|wBf$f}Xku4Edi47k zqAtU!U3P;Ge27LfRXIWy5UGRC1O_wrYa5qGoPIwm0}E>=MyDvsktB8ZM~ITRFCPuB zmGj2(+G<#X3!2uT;8EBY7j&#~w4)3jXd44RwtpH~sqSAm$W*!mV1~@gH_!);HPjl` z2pPTxzl{;%ZUX!X_!C_t4{P$=Obez51r!%MX<7W{&$H$Ph=P`Ay~OqThR8*Wf{bVO zNKAGpz*EB74Kusi;P+zvH{Ui`NkE%>ca_L@iI@T$B@)h=J8sW2}S;wi*C)N zuiCo2_eS+#aNEVa|JIT>SkCodDLxf&%2&Up%+_|s!8J~6#%$r~G3%B7o%Ee+N@qNi zDW%C+_@vd~Abp%)-r(LaJH+z6eAqZiT8i6_(KuiMYzSSGct|B9-K5$r6V7te)~(6IR`3N$<3Kq6{Lj~*!r#8y|MBW`g~XGUqDboD3< z`Za0hG&5tekx`j3^H8N2QKmNmVmgOn9VqGaiYVS^eI75PNFBK{!ql$xL*WZ>BWJPeBTlS+;q7m$Rpn&8GE zR!AyL_e}Hb>SBy(MbZ`-ix5j>%7m2`5r-%8@fC697PeLdf%^v*1C0}*QI~Do=A7Z+ z3iV##zF4{v7P{PV?qJU_Ni#UmJ49ktId(g+9E&j6ZMQtMD{Y)k!lFp7!(7KW!1p3& zjgTI&mgSSPnb4=G`YmM0yeXOy^Abu)zpYze{S;P+L0?V`$bLf7Ps%wAB^W5;^o-o@ zpL>-AZOu{7A@&S_B>6)y${z?ddLBf|NXG!Y{y!Q)Op+`M6*#~?+}Xz4;))MidZ`kh z)e*7EB-@2r5+RfcrKogtMP104mf46;>-SjbnKS!)KEW90By@BPf4mar!Y_~NKEoeUBQ=T0=wUVU(4}BUijys%=k?4 z8qatL*qzh~w4?D&P0*5#5(5l!9jo9r0w1LtBi5@R8pYmB8(fTrL>y4uTtN?&hWXO# z->;+L6tUhE{%JY-olXo9r}?tVHUslZhfQ#ekD6MM#ga2+a5G~uW-+pwM-n5F!gC!J zgf{3hcwXQjDye3kZCn$ATp95F$x??0mB?l&NJOLk4o$_oHg1lHLA!CF|mk=+ZvYWX!PK7+6q?UnaU>g?9 z&7?Y4+R0V2${N!_?4VHt5j$Q+lCNE6xCQl9`Oc*!Fw2zaa)#CY>eh$vw_d&6+IvZu zy-Q~NIb-*cAIU7!uIwL2_6+{<|uj%&=JbS`nB=pMFt?wUBTuIJTtd3(zG2eZ*PmiC~@q4?GmMH@sZBh++X!@h~ z3+8?QCdIPScPM5wx5xM%xS02<^!42gVX!bm2s(EYB2=VAzD)KiH+#4umf|75W%RD+ z$>k6TO0w!F(Mtnul)>Kk`jY@5Vj*2&NE&quO7ZMK(zaooA~BJWk@2G!bX}~UwoSAc z&ONRT-hb15LCOZB;i(OCf=p3mukKbS;|YX`T|omX_Q%i4!#dr0{MK8#2|wGxLYz$j zwYh}y^7HXQYj?jdYc1v|_KtTs3^=@BdrybhQ{vMd_levg&vdUrUKyV6;l8#-uX0T9 z)1E@L*2e!LMRp3?y!PRq7MD0!JW24G?w%Hs8m!0xAL>#4f9=cc^KEP0Go$vV#A({n zMw&Alh;E)}M*`ta{4obPPF60cd9rZz3-JHqf}2lnKvaQL6SUXS>yGT{8tX<(^XsdzqN9gS>toN{WW|^ zyn`ajP0W7wY^PD0KcpJU+go&`dysFOdEFO-mi|5qlCNG8<5?n=bHT;tgXAaApFUHR zr>_IB-#+*T^!{(5!nF{ejYm)V@l_^Lx!c?~2a~@+)qnKpJnXERFWcQy1QnDv2bSXK zmG_Cxs`+?b2t_WGSA2B1m7A-EgXQ_NIZME+`CWkvm3y}{xb7)rutauR zcJJOLNzz|U;!cUD=i3Tquwrtj#IFkS5RYw{;QMBNtf3kjz3NJRaucW+gUvIAr?}@r z@Si=_IiAKnHCFw4%y#xpOs?F8v4KWwd&J4R$`N;Xf~G`kOhEOZk@)dZP-$pLdmARf zBH#J(4M7dKS+|Qsqz{xbvK!{{pK_e@>}J~ar{k2piaL|*9nZ)&B%NdwG7D^zb)xKW z0BO0!^&;Xy(3B!pF(oXCM{7t(wIPkU8DxzI4(yBL;V2%8&Oxa(0BqP3S*4#47`z5$ zO*=N`Fa*$2qOcIc*TEy~%rv-6Daw_v4r%HC z1gVF#vmCBhe$-uvMOo^&En8}9p-cl$3m4-o5^TZ4kbgPL+p86xXys{OVoe4)mwz34G`T94~%$f_1GBL zdNMmZGUVQiO`AtYp(YXLqXiDEqEf99=3%u>+&-;w&3eFYEbvE}Zu~nK9r|CZ{m65? zm6kIbBY!zcy9)q-Jagw-PwR2~(sR@v{eT?8gO>bVCt#0pKo)_`LmrSZ$m8+gt%!%o zLM{UjshM0srj&^z=LsH3D>SC0rkXv#kN?-1GR3-1KLuGR;6mWxKP+F0!Uu8`JzwHM z)gVFer|KZmQ}##aU=P{bRJv1U+(Q8J!Sx|*T^xX4Q2N!J?a2* z4u#w7-P=`r0;8P;9?Idapw=E>HcRjG@wC40GzQwpKLw4Z{@Y&E!}?zBI=K)fIxn3Iqb1PJ>Lo`hpL(2*}LBwv}WD^bTiGt@@L3ABevjP zj+`mtr&>bJQhPLaJBBA@XbTL@Pe$)ykFaZ9q4LPL|I!dZ*%WXp1bXP^QKlO`Y+rO# zqK=%drxTCqpDv*u(Y>QSz$gX$E+&}xB)KQ|QCA>OgfsA7Ngi5BR$bN_fXc|9BRZE? zp|w+~KE}qL#L?DBAcdY0gp@*NUGAkz1XfKh7p;2@4T3ZZB&+D2X&l){1-|6J+Dwh| z^u(boXvJx0=!2TPnss)l2~51(bCAbhdrCu;QNbo=e}%o?6#z+Sb3s<6xNMsHu*zCc zmft!i!bH~Vouu|Ol!?1pU@7@;Tn9=pIUuKA9qbZch-}0GYx}z?Q})+Q1kNM)vvaf_ z%U_+x0LndiCSVZAH%$jQ9Kb04oc5f3iuVwYK4_ro>Bfqp;ifjw0)*UXL5lw7RYed7 zIOU#)oZssmZjui6O+Wz0XZAj@+p_E@KH}vRX4ia}{3Cko^bpOap9c&8c6^x~1Fh#> z(Zb#Sm+69Vgd~=cix9P1vO&nG$$=TO96l0Hm~4dF0B1y6^71_+lQ{g|HW28G;UzPh*gs#OY2nqt+;q?ei+m?e5{XdgX*P^ z$#2o*n7Oh8n^)u0fd6oEG+?CC_LJA?N8U#D&smr*t6TY78n^E`$YhghFsfH3QxdDJ%qApCLdZyzXr7E9m^AJ^WlZIH4K( zpa43d9U5Ua%!2Me?T2TLvq1TinFHN|ClA5^R)_-&?+Uh=zbR-d6tjoX3cWA`>R}Fh zK1*-t`D2mfbISOClu2DhD82r#Vw2i-23ued>k?=Vza5 z*P0}1qzj50rURMxI>%am9~Qt-=o+?7sow3Np!xq_k^TRt9rzzZ7N7Qzbjqx*>TU-M z0Su?*y=lYxJ#1v2sR1%=^}5=0_v1uIv{m_7&#T6(vby!&pLW`{``(wWlJ?br8{CBOdlFhKA8NW}mh znoIs07RQVu24hHAfWC*ELr&$OFr42gydcnxG@oN}7*7k%jG&-2UKAG!CvH6@7tJ`x2=Cl0i*5wuhi#M*5UtNd;7 z)`6NrMgJ~c(VFaf%~qB9e|6UD8kllrr<_On%xq8DR$6XxNwND(AYtY)yAbrF`z!xS z-8N0`U=m^*6Vn2w^c2bd-r;dM|4EXQT9T6rElqNFHCjkcYQV@z9XYE(f$LSEEo@gY zV52Q2tI;wq_+WzQw!fi+?X&;!$>07MjEOTQ%!lXK=KKF53N9LsD~>q&BB77Sl8_Kk z6m1YIuwquvX-{2PbDJyexiE4%H~;TlS}*Ogl$m`XH5w+_w%ZVx-E}-b%TSVRhuZEW z9tg~EX8K3>SNg46C1~53q)KYA<3NL9@N6=KhT-|S^%hMm*oYcY>0c*HHmXNN2nGUT z6js$)eW$0MeP`r(F$i-T=RZIB6DR6KO0~p)_^GHjHpon^eOTf{J#I0Roq#QJo^`rAgS!$ga?KJRjHtx?I9G{?xE^l zW}}KTosTHKexSMiyB*OR8x<=@)HWi=ZX07nje#H)q7o@lB3MD$C`f33K^udK6(2JQ zqX`26IoJkk%?aDGHX%uI`O|C8-kaI=!i;9urqrYZDfN2gu2ZI{U|U-4t}t#8Cvnk_ z=2!Z)J2uV6(9^(4t~9{8aM$hikZ%3|pKbqZubEW;dujErx=B0JY9-~+ybRrXh5ECQ;PXgI8lrt+US+tYIz$^j_8g?e#9H8C4yMRBgul+4m ziA@sQEK9a!Xrgon1P9Oa;o~eP*W|jaIYxxVM+Ics+vZ-14;B7*no@nqvM-me!CJHi zpxL+skkSI?=!RnXBxQ|_a&h{e?Q`dPyhUrVHP9fagcgt@NQ-GR0R$QVnGUqzN~nhq9#&~(njfKL)KQB&an@<=`N?<|EE*e`_5B})~+8(X%<>2$;T1z>&&Cx8T? zo6t)Da6>*Ezl1dUV1CsOVBX~Jz5W9osLan{r`kA2$#9hOxUh_%{psN7Hj)$317}`MugfMx!+>|&xQriyLEBHn>VzrEKU$W^#vPAiw`^nd{VOebNI3tl26ty_>a?v z*DreL@sD}*BP=b_UQQN(>wR>q~A%rXLHZwp58spdy4mX?ox*7Zl~Uk zyjj1gbXDO})`e(8k(-jw;ivOMcrOi~aNgzItFT^Sjl6|pvMF5-^pp2QY8+?0Mr;Z~)Mx(G#RC1Q^oJ08Htd zfH^V@0G14Mz(PhKU@2o2VAagx)6d5&1=z?u3E0X!2iVEH2G}=q;Pn479|G9UX#hCI zLV^HrWl;eqSxmsWSPsDkTx9V9H(CCGyR1aOqgb0_GvFy}H^7s19`KfRF*d~Aw z9d7}l?fCMHT(`6yf9Jdf} zP6HDB2tXpAfG-*gNv@VKfsoy!%%7G!mDsSUa=``F?AcqgK(-WWG;3C?T}SGMF))t7 zEvHZ4I>wBx=gip#Ns_Yhng%f;)C1(v(ku-&Uh;Iqv(KA+zfY@ zL{7FPwtUJ2a`L701`M#r#q28l^9jL6%}_bIkv^vrEh5kmZ)%~2C>`WBP>>Zlxdj|C~hj@^&YxK zh+z;Yn+t?SVp&Z{EPH%KQ=kZcZ6QQiQ>c)f9Q<7fmJG#^jHhXbK@49xtStx(c~^1u zmKvo*hDCo&Ssa4S!DW#BG66|z-n92)2*`ve)6n9@!MW`!^l>zM+3 zw+3|q=@xy7neXIFpHWX;bdp^L+RD_EW$qCTWrwsgtBdQ)~EU!B^tmWKJ|MAlj(=IOcd(?PWeT4MBk6g{zd02gCa&&4sjC zSx#APgsyeXAQE2(O2Nf>r>nE|FqLiz(qXd0RP4}V5vMurV_6m?+qRfhuBl)RbOXkn zN5>rktU?;^yl&OcmZCes)xT~M`rRuro-|?fuJq8dv+q*j<05zL@-dNno1E3|(Y+g1 zr|tULlT)4I>(?Gyr0uC0m6@ajEWp&KRaJbwRE1I(DtRc^O~D;Nu3a8=O$;2Ej3e&eLL;MvC}@A|-{FmeO8UGQL`0gjGO zAjyFVKnVD0C9foxE;oJQbN=Gqvatw{qAjH4@J5Exs{V88h%`sv7D1pJAlxTwf)YZ> z_T$6YayJ2(@ul11=T?w^eZp?89j_L%1qyAO<{a~h0DWUsgB3y!O9ji+93!~4X-fcJ z4&UVW^-eP@Uk#Mb=7$#~jFS46#Fbhx-&CHC#nS;^SX(vqwDx%(d202tVf{K^@RQRK z05~np-4DJRsvkPMc{Qq=(0AM0z1IJeQmHgkLXj#Y2fA>Ot#$x~Kk{KclQM@Id1A4a z-2e1qw2I!2LvNpmd?KDKxdC~Yu1*4n(}x%_jXOM?qLe6PtMhQ7dyp4{n+NCbKs?y1 zw}-QPQ_Gyav8DY~74!baqc5+R*j>AJr3Gs;!G4T6zTGzk0e;CeW@ty_c4%hXb1@x zJQ*MI;G9R|j83NzxQs57sw2izHf78uZ#8Cu{ajB0^Vd&D%SO9mK zWa*4i9s-L8!wa|H;9^>T9sl+6h61Ey(Cs{jR?2ma-iyC$XH9d|bV67$R~4teq$qnJ z**?DR(tz8R85BAqx)(rd??hoAO*OqT8ghO|c1)r<%Z7WS$z!7#nIt`wpxrYO(9 zFm~ma%*{!XZ1kC}E`7)))58~cyn?&mwRYC8xr1E^cBXmyN6Xa>EAKZsCt(2_bMDz^ zZa7?8M5#rRSZ3?koGtFzq=u+e-R|JpceP5F>q-Kn&Zc^&EXR|@?V{UFxM{ugLKLI9 zQY(~0?Az$4MA4_XTLRee(^;&_B&Fyx)H)5FnHpR2Q7e2TLHYJgOEiKj7VNYNEOfG& zidrDHn0x2-YO}Una5TonZYwUD9W3h22&t*oc?`p+DUAc?DH>}e`186c1W5<>ZGHd# z@}6+KKDzBN;x8DUgcw3TcU`jMM96Klzc zZR{BByzwl{9J&iL^s3_AZP0wS5oKwJjmEd`+O>-9S)HDC0oEB(^68MNdplmdBZt%y{?&ipuYm5nFcyP~QrLwm_dKRiN4489~1Dnb1%!Wiyj9kbb z(b{(PbR=e;+>l&2XNhD~qlBUWe~YX0O{i|#h2OrmD$4>#O{~pF7$>;B$*t4W=jVw2 z48|z6@+Ai~t=AJBLcYX#=oUPD$^9Autsa^y0z3?IT}*xg@>cjp(>qxWxjX`dIZ;?b!xt+i4tpW~|@!woqa zK`fL|y{n>hZZxW3cBGVyrAiVl`Hf0Kel~3{NJL3%Qj~!tK2heAw{!Fnn*iuuK$lZd zXm82vI^4q=RvgwQOIvR?Sw9D9C8dxkN~v;9OCyT{VS!CU+;sJF6|2MD?syaL+;2i- z8+kcCnC!E+DRXL>CHscd9>!pA4{Vx01d!~ME>Ial?6x;@d+ay{rbj|f>|T*nl!wfc zkM>e*lTp9-(4}UTPEWy9l5RvhK0GZ>q-0t19{arqAxV^rgtpLxIba9O0;`v7trb0P zzwtq3vUM{^Q%}tIC6>L4MK{x(cCf~-zpcz0Tui`jBg%2pZ3A4TEY+jvT=g~OU2ri) zp+G6u5f9PhdpBxWkz)F4BR}NEB$CV<)P!OmQ}BC#UHB{-Mgq%%3*18!v$l3Mqw3>v%$O8_|0#N-wMh3E)c)Zz2e|vxhFF zYoflDoVcgIbQuZ2vA80DRUl;*i7{s0Gh#1il$oIS(=OsvQ zX`@qN#h}tTJ1^W+&=asPT^L=eRo<`+7NtotpQQF74x>!Af6I@H?K_K!99 zUGwp~!78m^3FhXeD34yXmG{jS}|8e!j!x#j2LUD($f@4WmS2vCj<{7&U$I zjtOYlfo0=CRDGqGFpi~?@vPFGPIYB27>)dU&8@@vEI4Yph^vq0s&_0bhqM+)icDRz zQH)r;%uL0Wnspu4F+FY`tMkmsXyvwW=W3wu)(_G2my(=-CujRJfb&4vtYm@Ror4i3J&HFm-7p3nZP&gzOh2*(?(dY9)?VEskGZfykb&*x{^aNt*RDJKe7-ILx$)_C2adFM4Z zBtcS}+Ej+TrJCZR`KUT!!<&Y_Gd`$p=U8d>y#rgGmS<#TsSkzwY;$?Dl$$C(u1?Y% z#)5e)i)?O@LYpL}#bJeR$7#R3i>AK@W}8ft*jwmfJ9xRZZyA!>3mOnBiR~blW)PeZ z-h!hTO(nO$c4Cnm7B9ZhBQ0a%y(ZJV^P|g{l|}91K<1wtoOkv3{-^NsLFWh|9ubB& zS6*Pd5fI6Kc7*3i>SG(Ln>uXekEkg4G`vCTBa3Wji3Hb2Eul}Deho=WC?gt8$9F5d zneZ`|^mn&{zKJEvvvEFX{(nli_K`DR<)>V>~^P-nAStmte4}c z)VglULSW8c{L-0Cs03Q>)l)q0?!2&3-_w3G^=f=BTUdvWz8m4r*$0esZw?R>QO&JDM1=7)i0IBTT<$=G?b5p+VSvP@w`2% zM~`d?l}uSo>#y9YZ>&vEf6~nhlU1($Pl_z9w;QO!F^)GCEM>}YcR}#D+&2JC-z=~= zcji$lWwFpz7#NzAMGldi^Sr4ZAj6r6OH*?#=Ya!*%vL2Fib&J?mAeM+5IyREbvm-; z!m8LQhR~f6E?LS9Ck#0zk7kDi zmp?rF>5%QwNPBb&n!{@74ni4Js4r7>-MP2gX0td$S-IL`%U2*7;X@n2A?5T#;q4$? z*lO$t^oLB7>W_Jt&q@Bxo3C(6}Y-u8(iiT?z30TLEpcW6?b9K33y zRr)!rXt3Gjyg5?znEQ4UOzoH3&4xYkA(4mxm62?VhlmH5V$B;wW<^o7g&x=bbHAq` z-KdINxJ&QHU1&WtV3Kb-BQ^z7-M zzecJZwogH_Us{{#EKT;l7C2Wv!oa7NdG-_2*)sY*WfPjC?S(S9O^%r!=J=L`xS z3^f0AkGdE*;W4YYNp#5+A)XE1OQYYtZO6O+35K8~(DU;K^9CN{c;HmAKo-g@6(i>( z(VzHINLPv&{1Qusq9n%rL5hd!d$6AH-ADa0;K0$7MP&`JxZEWe);{Fb7%naumpFzD zM#QOFx9RswE5qBYA+XtIuMh5|mj^d#{m=FqN1V0CGF<{XA*JF1XQW1KklC4q%=pw? z3oeJ{6vsQ0bYrJ^ta)cV%`NLD(y;BmqxeKU(=!GWFj_sMB_j!4ZLmB*{iH8zl{_!D zs-CEHZq4wEcmAbf;y4fu~H*kk( zD6*-emU#A>$umH$6xq5Dv*dE^C2HQ|D(jR60!Auge~h4K&5*CFRqWRpGn$(U{%umd#ZV3M&aq_wTcp<-|gA$?pE{rF- z;Hq9LTs$Q|G4BZMP4`(|Kt(Ha6~`mVahSxA(Lk5rxfa3j{Q|u}F2pXNyZMiIBLsKD z>29ceHhj0+q<6#RZZXL5AF+S#ksl01|0%<_ZrBC?@uL?1pgz>__Huk~6rU}2d<3>a zJ>w)N^jg)*7Pp(>9qo+?ExJG5o0FPc`2Tm6-BbUd@K~ea=Wq`(?ZcHJ74Cdd?Oz?2 zca0LZJw(Wl7jc7=Lqez_;*f4vO^#F>K>PNmL@U5lcy+0WxHQR?RK|*{a$=S@$YFD!zIZ^CW2~fK7jDKBSo9f3+sByHt~6@QD{Jrj zFk4&DAyQ~*sSmf~)e&fNVh>M@Tx*e~%u5!2)D zndWgJm9CLkWvLFA*fJE+zy<r8P7c}YB;Sn`ljkn*qwK?UivDF+_ZY%GLqFGj$Td2%7 z`Fv2>(L4EI+Lr7wt&bj!w3Ut?hUl)JjCQ2U{N;JVf3`IwzHPy<+nr^vw{_ZYv4>k? z>u1}~pVbb0=n7};`_74Si=Bdy9g<)<`tl4w)ub}|giUruSp9k=QS2sB_dIz!>hI~G zS)GhI7Cdgheb6nn$EHA(5>h|JDw09S9#H$q|Gmf751y>6^8@9 zFc1xgqQ23m!({Cot%hSi&4%)H9arP873Zn(B8TnfKC0S|^X6=KHR#07LuIBx-O#K& z9=9?>>ztqDWo0wDn(_v#(g$Z(&%BBuRaOfVu2|Kk0MTV*x`i!Ne7Z@(H#*sv(7G~G zIa)_(Qkk+BW|tW+OdXI;u;^nSTfSYhC+u5n%YRMG9wfD~6%(SrGhUA>H|>#M z>+W2@c4dRy)ugJU=70ANtf5K01)hy0si>Og(pP4i09K_Q;tN@Bq@3pfX7PKT<>k`H z5Y1uCy|geZJU=ld0!Hm*^oKS-YHR|n+pXKY;E<|rpB7yuQy+AWwVFzVM3epdpRDNdxiZ1@fr6uX*Qn zF*Bux3?;eI8~u#(tig!K;$A4pe$~b`SGkN1_*Tg*PCAP|hL$M{h>WU6GZsc3fKm%3 zr2tJiSx8zR)&aauqrjrZ(-a9&YHL30x>8v>@n%Q`usmucXnJW7;zPw}igF5FD?_}W zuH-Lx<66N{h9Y?~`6k@KE3tz(uOc#VBebJRok zMePOks!=$27epI51kf7<`xkf*)&G|TnnP6Iwbt28R|9Sb)8eGV*Q5Bt5sGU1gmHPQ z2B-aI40Nby$aQej+%dn0I_>Xod3%jN!m)f_)8uNHO5a`O)A@G!Uq2VerN9H4y-B)+s(UE9(@~i>c z=RhzeS3x>1o3Otxo>gl5s-wG}&VcgPS2sp+X*its-EBQmmX9jjZI5iZJH-BZkpX0N z|I@emu!a|$pR6W)TTKRp;z4UZAX@J%VYnwnyYhqowl$ zfUA5D6j;CUXuvotkwLOZDS6763&_K)BT6Bn0wgKHgxlxg$Z3NG)h>DPT9AT}2NsYE zARjdN=YY(^GFfhsIC$f ze;@TW(Z)4nrpXvY4pOXM(p6|YZlSEW2Q5Pt zP4MjWZ5}?N~VbAc`f)ds5ZLa%zMX;V)_8O6z>LJb1Z&wYImMteeaN zUN@jIM#vGSK<2)m)ZGbSI5+3$9ioeI#&tKQp3DyX#9JRD@s1=GQFSl2{m8hJD@1sW z`$O$6Nl|D)h-f?vBCNt4Q$dubt}@&YsVgBdYigkj6SZ&L?3XaPJRr<0C`;gLYk%e3 zLKUZkSg_4{aU1rut#APee%H?CGYfAQC6BfiqM!f+caXU%dG+=p)kc*AU`pm(F8sRj zd3TIFo%P1k@eK?&HhA^77(G&I;&&ARAz;F=8pfaad<>1V*b^A4us*^c7>C0<4ZnlU zq72y5xE~sysX%2os#gEv&qih`pn62L>~iLl;IFfmG57bC-xT>+r-Csy-C+7sFu}xe zWv^D1F+k#t`C>fql|haKjzZqI8bDlye9j6YPm4jXURt~IWSFH8#0pX&t{nzeFooA# zuv!VcQ~c!TQ9&|Y!=qJ^8Gw5?JWQO9u?I5rhDCG>e<=wr)U;L0%U&$bW#g_Fa}?7E z7o#66UtDH^bA2$W>qFQ&PYLHTe=R#4JMfgvpLili0s@mNxlU4kbnD9q>Yr#x{S!f?k*h(iTgwhK}_UTBTHf)o$NQTc1S!4YBY;Rm6WkKr#+#b zRbhS5v{2cP3X^R%3uZn8fhXxR=|x3_J2eZZAGMpCiX#F(Pw*z_ zn`Gv?bf$0$yTOv~Xfjgy>*mAjE1Vd#r+1ao%DBy~RR<=bciz45uDmR6+OTUcv>M+T zR#y3u3f*|mesHk5n=3sdM!vaCV;J#_|h1$kvc_SoT&KpETTr#Ut#P zcFYb*bBW}}vfl~m3gMBa2y{g#bIRtC<_3?5J3UjM^BvoOY+{jaL$gP0eSQ}~6fS6z zsSL$Ol|A22mS|t|Z4v4H7$=V+q`A{rjmkKQdt8mjWMndsXz1G=cd7EsdOZu7Tp6!$ z@Dl~BPBS>}6&NYI$})2saiwwD^F^&%6*Gb6Em&(>uCWqc6&|WifK*e2q+`g0ObqbT zL!%V>nuJ!JxnAX?F%L6>_mC~ON+y|SA z;d5nD71(%%vc`X{$QF)Ds?7n(*ReH3(u&Tq@?S4VqOP)92&pQBMPi#*45K9C2B!Rw z1VlXPXU$_3?vulJ(zf!vzUX&iM{p=>kjGsdmj&D-K8kAxT#W@DB(d`5=PGO{Gb5R2g)YQN%z#coP?4WCznA+0tR2qQl!}kz|+2|Y7NAC91 zl0s@&BeA4x?0>I-uz&-fSU%XFx9_mMAE#cN_akk}prMV(_?!jelOSykd(&G76AWjG zUPIEbV3w4PB_<7n?!1s+&`wL4Z)?RzA+%4sSc;W5ojUl~D))CGmmth+lq2nN<{CyC zdQ?w^F3yo}ocZ0QO%4_o3li!?*;kRH6?&HHK3bIcvNVF}QSM|(N^89`P`4$ZTZkgv z8D`@Go^vvuF^_LeZb+I{M3t`V?b4tD6A*XFF5n`s;t%J zm2aBOn#wI8>Op`ByA1u%?ZsdNXdtEInyJ?m=vL3SOo8w)v4!K%3M{qiB+n40uOIJ;He1iA&hnjuogvnGJ>PYPnC5bRf&^l!)n$}q1awNSwz;w@e!3CD1+Y$D58Dk4+2ql;xwPZ`W|ElW z1+i>nd4sF1C^&yOWU{iW<@>d|sU&)_o}~wkN4T?bD*Zf?IS63jGHEAL3e*~5#fa?U zQ&-~~E5<*=35n=5t73tiB)C&Eb!0A?fE^rp(SfopGs7;z?3BWCo+7+p!k1WE2$Jla z<50!XLd4SF+oKF%|MCsE%-pjkgGGkp0IN?x?iBFt0l$IZ3SmuyZ~=PC$&!bo_C!H> zOw=`I8e~@Ugqb|RUh~^mXw(eX3RRC3hjQDO0Zbd96lUZZD;@ZqcyaUDnh)!Q#Dy^4*UH4`B=~<)HotA6Maoc{-iwWq& z;F(UHHvx4FGC+OyjdVt;Edy|Xl0-%yI262i4swU2b>i;IEr8@9?lcoSBZ=bOT@X`D za(F0$^jbSreR9fwPJ9Hi_4tpD4g$dclpHaxe{o z&d^-&bkCh+)Oq*)+0siMA|4L%d)VfCbxf_~-fc(ri5KJDgaiVodM6X*I_h%xde3KY zi+flatd6&*C#R9^3Y#Ef?}s#Wn{hBClytNS1O(jOf66*og<&m~&^&=+(YJJ!G+od> z0-G$LsRU(Ql^RtCg%?-ZC3V1UYhgc)f}B}WE8JLPFq0Kx!3t`=^)|=J)py20iKpv- zeOJ}cF9pk~kBu@KqY)>zh<;bvBL9Yg;km4f$8Hx@qI4xss`YauxLn;SdGyp0>f;Kd zmaA}tIz(zQs%~4Q-(GTAkRbiO9twUv{MqQ6T2r+^HESQ8+LIosrXEd6&4$ekdjW}V(IQ{>eeUv26;b^)H61e)}LCTfXPr13gk z314Z6Jh3vrT3UbX1KEVNq`>YYwmY&u%=SHk>h8S9byV*7WFO>w-va%W<-I(ZdhWV z`g_qRXIwn;LXm9PREAw`=}6XN&vo_5Oq&-8J>7NJCBV{Mk}GXSUB^Ss#y=`k0BgJ% zP@LipXOydv_%)0w`s%iZ$5OcX2d2y8Jyl)^@kU+EZhg7S8Z4x5uW0+)S5Cb@^W$hm ze^GZ%c;i;ZCyi^Z{)SW`cS`JA`dCf0Xh%WmNuFsZR8sd!a6gw0Vk;@;bVCclo!YzE zQKaWP4JFT&2*Q?)2Zf6) zb^XT%`^IGK8nH6vVy9vCm*6TnA;uwB7W}Y}Av>-m?dYteJGSji&nQvgs*X$s+Ds_Y zTJhcJg{1czwhk+}>wcGmeZ5GxgJN1WH9W2-&^dVxj_i8K;Mg@NBT-pqrDLg%z>E^? zO3AcE(5L=z%tK$oQbWHfNY4!db-0m=1WPSnfKxw29|UQwfta)&hY_i#5K;q>W{Fdx zQNb_Pc?=9BF@Z+3PU4SE!}?V@N(m8*rML2W2jId+PFXZkb3qVVh{G zEG0Mrjl!SUk_&`}6%1D)T5Kp6*7b#Tv|>-IDn4mENmkzols;;Q00_vg0z8e^lz$H) zP#@v7Nbk41u~krq-nNt`OIeA9)xPIqQunive{DbH@5=or7P0T|sFhvqn7)d8;=gy} z!D%cGi+>%9oK#ugp;aXLfOiV&TY-qO=6dB&RlrwX>VXIF2XZvg;$AG!2y*}P_H)#q zt8dVqckx|NJ zggbr;BQ3Jna_7<3G80y+8OL{5{u|}z+=7%sFP$!CG1Fphbn)@Y37YlY0~gj+`8^&R&*vdrnbHnx1=RaV5`Zj#f}Z)(@Ube%Kj5B&*~HZxWOfUak(a ztOER{RdFB%q14Fs1I(vieDwmHJB!}N?TJU>ZvfUnNHVtyumM}!j)StV%7g5iCVIfv zZYED+%!1KnHF7+0S<+K04B7gvny9;oC!xS~%!M3!oL6q$?La;+8i9-1M|K+pq^!(n zXJKBx;q^UQuGnr-66_@b9O~0umihz;@|^2Coch#I(@PBU3T}|~QuSnu{p+nu04enI zvJZRSBBn`1!2@6mh;@_*)y+m}_0@wb1|eLhz%1~l{rpSk007w@j|J#UkxIxIv9T@S zgwR?M!- z2Uu4m8QTQNjr?OS_6ZrchQy8mZJy+aaCctLK&5LqpYrAdutjQ7qemtHmg)jnzrKMsa-h6^|q<|6j&{# zgS$Pw`Nd+u6VIB+ZXFbq2&WHZQtrrKEKpXRHA8CryW9G^m)^5CxbKDifM59XGtcdR!PnMGySz- z)=MFueZ%g+(fI4JS={+Q)hLEq%~Q-nPSWf`z!{j1RI6Um)H1xC9skiA%otJ&I$EPW zGNpmC9VLKzt!h(HkbNYjVO@G>_=HGSK^wpqX<)lqlPRZJ=8BO`A|h7}(%VWAYsd$oO$O6hj8H$#;^WaZnH!N2 zWSclM(+_|ruU%dkAjrtE*7}7P3DC`o-ZbD7rO^e)>`EMr!~PP8au$IhB7Dv1Y`DB3 z>rcFm6HS)QP65Pd5GEK^T~8?T$1Q=6e8R=M8+e}Su;aI9+^*1$)@PcKAoIa;u;_Ey zTOLf;QIn=-^5i|LL(``WskU&Tt51z*guCUe*O9qHYJORL7dQ`0nAAOQP^d%2$i)uf>4>T+qiZg)gQ9pJ{~nI z8XZHS$^&pwU_Se4iB-Nq}tm{$X=Sa1lIE0`v|^H^_gpKnbtnWz2f@FD})-Q#7Cr67lQ z^FZTvHzDG@VMP=RSMkwDU&GQA-K}(tT&GVVuoKpvk(0bqfJg~5oUgk-0ICm7; z<|e?V&7rB~!SSVTsy+)-_GS6H>@Dv4>hj~2Ki~Mv8j%zyjJCGz+&BOzTq2N60Xno?qmP1tJ5m<(vq57)*twT5Y>cdN?pCXA;@GUEuzTf=$ZA zETGr|Q!t~|3Yi7}gkt3%p)G|7IkG_>;{Q_mEBG~@@>~3kl%PPN#u!9oa9q`)+sNUU zrXFaU!?JM^W#n&{DH;3!epYAXDIO?hhV3oenRl5|hFn+CgNa&ks0*Qds;bW3LhCQl z2z0jeJ7-cK`+Vw2asetcrwhBWM*Gc8w%(gnq#U2_Nk>&$vlVd;GO-Lxs@n67uqw%I z90!Z2w~?!1CG0C?C@EW`3*Oc<4za}nbfiC;>sEoU*ADa2j*%V9XAPDyM&v-*o2cBH z2VJtzI_Ki)oaN3ovGQi+GPy>P-nK*w<1Stf=pXwG)*jP4} z&uu5Fomi=^wU2%bg~{H1(6~<2Z@`G7C|IJcx*y{sEagdSns^aahWUG%LB?}#(Nv;W zi~T3Q&z7HP)IrIb5BSPmy#6>y$)5>9FWh}Xt`kV<#*@S@1^^)sj+&d4q%!`jjeS!& zc|j16sPjT*pjr69VI7)eS!&?7v9&RUPBHqD@VK!a-#DQebKZ7-m^Jj#u9hJ9=k{Ab=LmLdP}|q~<(`z(SONls})_!D53ZMZUK`?=r2= z>1RBb3I{G_B%=um zEi;+?IyY*xHIfwORqbD}hit&6Zo;f^&`#X}UKr|Sa9sRtQv8M8XH)$B$Bw$;aBgIh z&$|tEIeU}}i7wt>hP}-U{v*XW61aG)dYnao6mgdtax)FRp`Hoao1U)NMn@agt*gr5 zt#lKVSSAU#Q#Vrl6Jn@@u{19r3Li4PB?~bd$>k!E`r`r5i?cO_ddXDM+6)`(Rek|U zHa$Y0y0j6y*zpz#f?_S3&N3*CGodZs z3PVMKP2lX8V#nWADH83-1cCbYd)%DOXY@cA-IGNNsZmkJQZ)RAu!Q@=ZxEFW*wdex z{6-4WD6$r;!X9X-wz-W1x0upNo-Hw~Ch&DmRJxsC!>EGW15A%Mk%wee0^L+~r-iPc zz%LAsoTA9^6airH+i)jA+PHTXV9?Qu#*vDm<^{E3Q%Pikxsd2Bta*4H>9bWaA-Ac_E-iu1pAU847#3fO18eYyk+JVo^z4N+jbyV`&Q?g>Aq;Er?!eSX^bv zJwMHTwo@~+4rpHxmmWcwySWpGnA!Xb??3`ak>+409ESbn(Z0~eNmhBP2pbFSDdz^l zLBjlio1#X`BnQzx$tZ1Tcq2lx;fykS2@}cbqf`%OdmeHJ02n=+E7tfePm-W{1u3@s zK199~eX{M4n2@60SF^p~V*{Vs_7kDiUSD|Q%1d)ss%QWA#YOM=J}Ov1g$+coaCF!}geL`;VRfmecSestnuC$bU3zgqJDWZtpk6AGqk zVWTj!5qKZi+(BiIz7P1EfP`#H0({zh>JAa?m#73jf-lz;;uVA{XwsdODIomzmJ&Fo z@D^OA5UHA-hR~8U#~esDOiuZ)QKDqImATr1(k?!0-71k1_8BZ$2ViLFD6kcVjUeo( zd1ZDp^b$RHWE7{G9rgknM+ji#8a0<=d-4GxVVi+%a^eN%1`*Gl`C|EuPS&U%oiG=_G zwP?_(f#+Gx55wWU=C;a>QH|?OPI>XZZe%2FmBgL}k+sGolxHf0B1a4tTb5dxsU1u}RagI&8y%1?|rAki}*)d51^CG{8CTn=Ov_RO=U z{>&Z=njcI3^wR`uv*)?8%5cwtvU+5X_Oijd4&}5b6_ro1gL`$WG^OAdA4}27u#?Ss z>PTT4+xgTX(?2h@JL{&s+HUL6wSQ;t?g7KF2Ib(F4{KSr%1!^2{IH#ygZA&V z`KdBW9mO9HfjNNBYy2cUd6cl=@Gj@#-i*3uFS*Qi^IhiBx3bznIS9LMG*tbmribCz z3N@&@GG9Rr=6f0(k=XpUpR5T6WsiiP8@w_HfTW2Ua0GTq4BtSbwcHK6zjt0fuK>=W z1U+Ye1@5ujq=)sD1TnH|v;vt6DabF5eG}61T7JXi1BFen=}wkIMnoYJ;p4kMhPo zFeP~S(50qHQx^-7^+gjx>(Jq-LWOxP$gYcN;<1&BO$=Ydw#30Q3EYJcjTM1=SpG)$ zsPW?NEBT41o!?_>x0;Fa4yVrj(2-yGLgE+2IDtbJ;4b;@wGuS2jZ_Q^9Fiw804@SD zw-nm{fHK4+BeJY9c^$c=UwwFt9F%wAsGidc!lp|ZA+`SP%i=EJpKk5Iu_G+Tgm)4A zQ1PomU?Nz)I_MfzAjOmcPDWi+o|M+R=Ppwq-w1{Xr{c^Or%m8C;sUTOPfQJXTaF`` zV6fmrET$=vIlJoFZetwbTpkN5j8j)@y;Z#XGdet#Q?AkOxeK%6gYodRL5^iB>}lEs zRTquR*zjbH`9vV!g+<)u{Im7y(IQg=YFejUJmu0YRXh>(6G~^rmmqE7U&8S4!Kxf| zwW>`Ay^eFE@+gw8#q~;zvwBJ7-r&%t(z4-q#)Os2I@={g|RsH z5GeUm%5*HrJvgri4awhcpv{5U&Yj~J{LM^ zo#-6ogVLQTRIyB1r_lz$&|y^!SRR_yL%r6K(b_P6?^NOKQX29P0Y!a~xIHa!{{~_q zWnBIC?9hJk*4~)V?RfG(SrEOq(dWy0Sq3UjFeQ$qE48h%}AZX%_a{K(uEd;=*LtF5ln!I9=Wl}?8#+` zXE4fyk;6Eg?SM1LWxSVNX#Yfd|x4q#klZf7ucM{pv21bNa+$Z!We)p zOq{?Gv4g-lSt7QDRo#Fg00qI>{-XfgYRtbaD4tLNwXjeHWlHq?!njVt6~nC_8Vh+m zyFo0oI=yV&DoXkF1}FT4ye9E3W!c30ow59|F4(^|RkEO@SH(S0lbR=w9%(s6XMCn` zRV?G5R5nExExc%PRaI6a-ybr%>PGxYtS(gYI8EZapBwl> z%<{h55F|aN)5=vP7*v>Jsd&=i&2%;~$Pk^wEItS@&8)LviQl9?h<_N(hlIcOjiB*~ zJ%LoPbO!>PSCOrwB@NZ!av0pL{mfm31QrL$_nv^og9jZ?H500`WG3Mcad%8 z?atnZYoGaZYw`Yx_tmZe%6h-_82Mbn_D%TllL~cLwkq(&bJtcypv^v*{jvS25~z_} z4~7UbfG5Al==3wOj-jXNZa@CP4b`cesB45JH2;5(v)`w(EJXhN{02zs9@pdU3$KM{ zua-anbYIK;OpDm07_>%r9M5mmdvT9|K2f&5_|UI?9_BHjwE19#_Vg}lv zH{A$uS%8C2BX`GjLdG-BvlUA6hi&gsg{+T(-c4b~=M1Iut}~sW?u> z`S5(B4S#NSsIp9@61xKwW=C(T3OhTN4;5?)?rn;q z!vV042t;#gXb4b2wPS3AyBWGo=_7$7vtbNT zMk`w3T57^kIq*8T^|9oeViX+Yv$!xWg*8M;Gq!-ujS(b6!6zeLc;Pah?;f(!ij~m9 z##e2sOg_xuBQ=QQ74puHvxJFj3q*3pHO6|xwvcT!*d0@dFYV`gG@zKY#;UcCO$X*Qr!o&X zBmOoI+`j=TizBuZa$uKMvu$mPNEc8O;?pn){XF9m4Z!6pu$?M=1YJWHAWc!nDd@xi ztKg8VGb6dB%J4FeZpM)hRBJNQvzvdut;TPDas9j75=&aVB8KVnwJZ9m{&Ul6N!r%q z(@d%>=&&ZX+>`?YUD)XKVp4(J4R_op+EsZNVEJKruM1F+*oke5d6|b=niAiLjJZNA zn;nm)>$-`v`8(#Eflz978I+BZ3+^&JF@YQLTU}Z?nNBRinrgW(=#K4Y&%8m_&~ zGt+UqkeD7#JLfUL#XwU47RJf_p8+-v!QS;^U-OOsddqMsX}ob&=}Rx-$0=*Mv?IOK zm{yS^D!N80c@o6qr>8o+IP@nH?4p+N5y)C${qv*jRU6e31CjN2o%d8c!Cht)`C=sbYW!w*@cY(+>?76Bm<0Lzz+L}h_9|Vmnpu@y za$aC`|H&(mZLGX4ov)kLCz^r!VLO1y0vF|*Dxs<9kUo7gLpH}{lXH#U%&Zb^-NgN& zbf$W16%bROR0AUJfH?mV>ik{k&RIWygU!dgWxqA7sBSl0s8d96c(+-1Kwt4Cs!9Bj z$c33Oz3f{|2Aa=^L?D{FP={L*e+=5{RoU0jE4W_DfNEX>CIQDfq#WXXZ>|8;YABTO z>Jt2|dw=3p`YJSSXq;9M3QmXJIS40}n-9l4ug}{R@xs3x3Z_q0(h{WvP4yB4h{ zujiMS@w_`1aMZcbGBEAcO&_+hfSm52 zJJ0N-tR>mJ2hF026C|+Vt1IZ0D~!Tlt5!S9`9)-Bye6aC>jUPH&vH2+k)dm=*-(%=}( zz#1A`5(DTL-?{3vf*FwJPFuVaUpy?=Z<)$#cYWyQv46mjttDe9)0#MX^_imz%ULP8 zDC;-H4yPq@(xXl+Q8%owJfBYU?dEtkb^L6PjT925iRwA1nZa;2Wvsf(rC=>dF-eoL zGg7?0o6lMSNw%XN{itziX8S!pWCfTacqVR0gV^pw3SLr7f4|hS+&|y=@7hdFdbzL({jR_#oxC$mKKL zP=Cd}v^qJ=_VN-g2w#Q5j!GG;hIz=c7R_MigO=r7C%fIDxN)vj;>bSTUe5g=@4}Ra zF^>@@?Ay+c`l@qhl9Pf}IR(~YssjRZr;3m=_ZB3ca9|Co65jX>fC zx7aen=lgY+I=>f+=_`>{!^lp?1H@oc8ql&6Y9(?@K1aDZ`Dp#HHi--^d8gaBTl2F9l(T0$pM^N z+|wIbyJl(>5%#-Mx9O`$NLTC9&(5PY6^~O&9C$jJ#mhwzJ8o&=mnn~dIbkZYX*ojo z2uHPKY@Il&zK;%8?gsa`E)-I|nlryKVQ1lCM>+1T?3l)#A&AwqnMe`5pE$^yuwth; zytnD3AF1MHxkqHIUnMr&%!R%<#n{`v&D(Vv>jNGq&Q&#)Z1TKyB8*`Jcz^x@BckRJ z6wrVx*|^kzGl@RB^k6L(t*d94A0wJ)$#n#HGz0d>Faud$`yL)yzb<=EBLgV_F%>mN z0OMKZ`PZF$=W%tyrpkL*;q))U$`G3VsB}~AQIi1V=#-^Zm6-%dmV`vaIM#L6X`MVO ze(^;G+UN%Um&ZHhuRxh3`bMy*QRXa2{vy@OvAN5NONOp^V1Tcb9=WiPB$e#-UZjFR z3Fov9M^05sCN1-&;F?e!(vs^q){}R-dt%gs0yfu^{HXx}VeU!qvbT5C9haM)?Tg}t zD&8+K4|v1tqS^%} zctd)%5=6XNTf`;KO zgR8tNyF^03HVst79>Dc&Z+RB>HyoA{?IH-pCD1g?sATm*Qy-0o!x%13lv@KdFEJzm z5@Eg~s~5;-Ti>}~k`|~{W@f7=<{G6doQftVPW{Ad?aVxva3BlEGf^;1BjZ&hoUCcx z!O)AcL&iTSiT$E!n3#(M6B&emGMZW@L33(0?|=+{t{izso-V=H<`xIlOqK_U19aN;FIRTS8y<;50E{|K8~V60l5 zZccl#^FVZDp}xFiA?zP!THPRoAa9UV*DExSCEQjOr_8KRu;?yr_X1NVB zVZsDcfD|PjCd}wrI`Zt3;h9=!J==SE%I;keQP#Cc>r#ikUB2l4IP|IF^?3s+Ir85r z$RiICQ72VWKbArGR1w~a7I7>bWRe;4&A`8zn{P(Oer_Zh;pM;$(SiJpVzHVMB`#Ym zse1gjV%MAJQhFxhk5t{LW>pNe>^1{nj3YyZ()Ysy*P5N4PI`n#&sN*kmKWfvMmmO? z;e;%r)@rdIod?MT0A}>3EeJO9(YdK~026XXlr0)I$BcS0vgPso$-=hgi#Fo$k{T(B zd_VG@v9?Lpd}xtKL9>69+13hHQ<3nvcgl~!vnS-w<83QQfqM(2lcqb!&H*nGBgUAR zOwdKO!KECo$<7XBbAPnMH1?sOKEt2nnr%I)ie4~_EV&~s;PH&ZSe`@-%2 zhIw7U`wn%{L1lV11?I1JUYvMCn-WfK`8*L4r0g?m>~b_m{K zbx2K&jL&mxgZLk15ji$w)LJpF0@Nxm^G_Di;8Qf+3+u97W5SrqTCm;_nz|Tql=7`Yv~&B%91`8vnaS zp;i!pHA1lw;gawS7d=RC1~_svvry?aqGtzkaJK20D=+h{+laO`oTT*Xywkc|pvaTW z8<`hwYd>%-6WI!_owWP1x=QXr2II-W1IYFo_xGzC6P7g9N;V$a6o-YuIL)veNo zRX?@7LZ3(IaZ4<5^bkzvCtB@-kfGXdH818kC}Lk(;EF@x5Riq8Az8>n1ed6~eKlM( z-PYMnNqX@KDWLt3VsQ+PLk=(s+q!AYAY8a9__#2CE4?f9t_x&Wa0SIZmA~kCTm&kxx)vZ=*^m5Od5&~=6W;0O z#k|)p9=z71+@Cx$AYM~f3m`~aG03DPHhI|(*-bGqwT9Q83*Nwr{SjD{NPy>fe(ro%1IkcR9Krms` zxjl3|^=wpGh_XHO_zEK;Ja?N7rrmhSznqxG&hapQ#+jd&PD2wD+B}Zi;c>3*3sd!g zJZ8sixIkqH!EZ0xYJv6lLgqBs z5gp~-U@_D5v_Aw9(k10KN8t``!1Vz@XhGUo9FC`fH%hLYezJ`h+DE?oQwUIrR&W*v z9CH2H$j`vRvCvC$kC%|gV;UFs+CL#y&XUr1aA5IvbpGP5Lu*AZ9%ifEz+T4V5ITG< zCXnrkYhNUbe9%q}-?*0rW-T5Z(HnEcHt<>WlybK2@TQpj%qiCu+*eye48} zwL$jR>w-ux{P7ddHo)9OtFxx`-ARp5sgw+tF^qAJ7PWwJ6udQgGQij{w{e*)17`GL zn33KUvqkwjbpnF5Ux6kA&i9}IX3d7=W(8h{9l?y{g1ySDkj`He#cB}6q90I`{y$Bl zaIpt1;iLnIgu=s!k)A<#2CMC?^OMxUQaB2Q-RO>85=$DYfT~}5!b0SU4^@SbMS3@c ztjT22hvd*T;@vHhZ#NHVV}k})0%|+i;6L?-9MP_F@1JC-wJUOcQ|^g|u*kk$7*<_h zS$#uW_=f-P-CxX7o?B7pOJ67TFD;q}4TG;u4K zv`v%qAUik@{pSYUdKZ|mMNIr0<#PW^(~f#j&igEkrl$*M8RVr~=`=e&38%b%rmAeP z{3l50rMU~IF55P*&x04i=xRN(00V)ep93>3`5>4HjGL#1wV&+hTToqtD<;>!2goc0 z?;QKKkGlCz7W2@X{kBg z0doKDr6wu#ICe>iV$jHp=Nz6y^bzWDEI3cbx|&togV`^;gn6?EEJ&$ac1s_>U&yOF zx_l##&Mt-jY+1gU0Q~I&3^+u81YM_d?M!VidiS(3D(km^>N& zZ6*W%0RxrA@)D5J%IssSLk+afaPM2gre_#&QmPV03z)TOS+<+LK?sW~DLIljPJtC7 zD>9|sX*xJjcA4Z!Vs+Lef-esoueLDSb~%oo<*asvvW72FSTJeZl*yati-v+iE7pGL z3)KX6jU^4Hr0`*^FRxQ92M+AZ00WuIUIVt6K|v&52lWJP5ZVw$jn6R17Tb}bNO%gpz%(ooyCNGK1mlG#j(!6S5`Yb zn83be7wo#!8U{YaMKv4$)(XmU*Nw{&@OD)vH=Oc31=|>HZrPZ~S>-p)`4Xpm%N^{+ zOtsogHYX9q%O@_C+$d>OPAKO*%-xI`cT^1u@Cgq^;Hz90Ja`|Q(9`l z&?%Pfg!ttmFdl$YAXjyDwGE%GKDBsIxNSo@uKjEM4LhFwVTeB&v1CN++k`BYNsBid ztgA(Jz#C0A9-q}0(Hc7SUgQtBeCqe!hWK=#dl?MV59snSNgsQjRqT?f%4;Co4V`;F zcJ?4!zm1R7WC&`kwEeObaeCaf`}`sCf{!zUg+lKIcj#?~ZR|jMv$a3!42kPrYFR;4 zRZme!UEMKi(@p@c*t^Jis9e0F+$-p9qofOq{?uwi^8Ks{!<``VIsX|%>`x-sSrToK&rl+VRNd zJ=qLoyXjpC&Z`NU z9xE?lMH!8*j8{Z#-GtAmmB<)lE3xlLQamPlx;JfZEQ78O7CtzfY zPPKpOPkIHcT(@}_dw+8({qV-Qd`LdWBSA5(+h-S;eowvcmPK(NEz76kI(5IA5%Et` z`ER<|r2dW{$WV$N7=qJN|@em;4f(oU(tS z+hj}={VJ!xzb3yz8!h}7bh)$h+a~2$2Pm##Lmv}iQSHcHgEADy)FG3Qof={>I_R7p z3UPVHHyruRQ=kNT_QqvA<&D!A#(8Mnv_dN1SI?Xwbtk@C*CCgf7`q)gjTIM0(95Nv zy!C73lt+#5U>;e#C>GPkR{O6`-i2cFTBP17<|oFwDxS zU~PY5bOf0#{hG#!bCJE6$4kSwKF{}k0Un1aa5jM6d7XjuWV47Obl;&Js~fZ!+9*3! zi*uj2@CX4ck$6ROu-NYNcCKAi%L2?p88UNQ2{3+JPDE_EZ&w7TkGU)uE5o$47085Y zxmI;bq9Lf$tkG%6pPh(Sr9R}e_(?d^YFDi2J zhsgl9UFj#XX)H&1Nh5<*T0j~Mn-D2TVvq>rVp;8EGW4W7Qdu?zYXn>vPQeeCN6G5j zANS-j#w@_kbp1KhAld#=zbD1v(F%*9D@q(1c_FxxkOsz{IjG#FP|T~qqr$!&y`+O< zx4R&zMbHm0- zL1GztQcL#5;+lz_Dg7m`xbgz(viicC+V#|TPGi`#qjUJfB0x?0)W@;&AizjDFvU(~ zd@M*bDo_eF)KSBTeOahMHDUE#47yb?Vgi4ijK2I_AjpN>_1C{-JYzsN)ud68M>y@; z?0f1*mKT^UMxbM_zG??2u57L^mX=tJ`!b2p3JMxjh&(bK(<`nhoM`MP6>ae z?yWS{lCG~F{o~vHeQ4827ousv+ADClQFKVe05dh!H0ANBLRWXuDvnnL6shrbl`Tt$ z7sX>Ea<)}fX*`;V`rdRXS%C@yw}e9S=|f@{#A9Dy2ap4ky{a?y!Z%s4Mve57__SNp z;SGh=Cqsc^mX&G-MN{+{q=6ef$QdQXLrNq~2BrCwk%^<|n0!>JCV^LVEWPtlpd~VL zX+R-+r0G%Ma!&v{D(#9j!JEZ=%b{&;UG{dp_rNhrBn9qJk>N8XFJ@a*Q__n$UBLQ0 zq)^5a^^?uPOsldUn<~^!FS9LOrL$(Isx6UHyI}4$9aipm`{L?bdh!6*`rO}bO@?t zWcVhjO8FXT;Z9Hz^J?A=jy14-TISBVv9tRQq7ju#9kn4phn%86Bf)YyF#l?GIx=Wa zOZ({4R%KjRPPv<&>F2p9<55T_y88DlH?Khw4rc1$d2Az>_*3CZMhg1QId=7!GTl)o$jm69Nxn;K-m`j1#6;@2^$6={x zN#A@CRwd{P@GLSFK@4sHaEUd>A__4ogk&^{V9b_Y4a2bN z&wn@ynHoj83MlbFh1L4ibKs={Mfo@WI?r?qz-NZ5n4^OAVyEGc3d3c`z$I-Z5%1mz znj((?^UerhYGiANX7Y#N{-x_E%PzLd_rpB0eg)y-W5^>avG01iP&&sfH{OJ6KKu5| z5%vu(dmnU0p-aTR4ZnTDL4^XLyQ$c9krbufLmSKB90WYFAB`}BZqKjc@$j9|&j9r{ zl%RiWQRQDXdH;+HUyySNHcWGLXA6 zmE~u(!{v&s?#H zV51=74zmZ5t`rl^sCuDj?HHlukG3Tw57KcrKj8x5&<=p6R;=ZX95Zr5n;_(}|Nrc+ zC+nUcS1~*yDtehlB}|(}P0A$SoDN+Y(mup4d!GK5t~6lwHHi6h0bD;1rXEH;Fa7x1 zly-Lu!tFCr=%`vTtg96HrAP%Y?Z`Mr3?l+|F#?k^g|Ww$sZqyB#`;S|3hg5$Z#BD2 zMPG=+PssD((iL@yr<>eCJ<&k--s5COGfa<4Vis5wDfBOfl*u=|c9WKc&tz7}AD@W( zUVPKG0^Mz~$5ma3CgE_$(k<142@RChLDo2siz|<3D{eS5PMRDf7Mn!AiVzXGGd)&R zU&4Xa1vnTy4zi>E-=Hu5nS;RNi!>=$)DsW;fZJIng*l?cUMP%ms4$|}fHJ5ctmELH zc@m-+bqhX{ox|~3Yl{b*5cGkLEokMs{ViGmFPOWv=yD?69uT^RzbL_bEh!ue7St5a zmJt?`!E))KO3_80s=P=mjIYIbRku}Vl9tq8_@y#<52bPedf6U<+=NGryEAvljV>@k zZJ^jMK0T{oRp6L*DnbEAUF{IM-;vEk4;Y~ut(cKSn?KI14U2Ji)a#T9@8D8N%Q%)J z((CznBiXuyGaj4lpxkS}a*3}!agRLA!`C@|^W*~C!@n%w{9Jy;v``L}!Z`OA93{dN zIrTT*)@E2AQ}TE&{-Kef>gmzj>+^fk)%KkvuZjFBRwOuK-jUyviPEjUli*J35Ilo-uDcOKa|Sj)~pN^Em=p zh1-Fyhj~AoGx$o7v(?_Vm1B@Dfcww0dNC6}R7IXDNsrHFgDUC?cYa;_tJQG%B^R$x zJkk5Qc4#Us>cZ?KHk)Z(FdP`^<`^qFmP5JxkQVNS@sHKH!5>BH5s%KBWa z%5W`mV_2hYkAKeV5zoslGK1a^cXgwi|8>tJZ3Zohwe0`?KIK^D*GjAm(Jtx!!thf1 zhPAhb8mtN`d2U%0*WMRf62t&kQJ|^1tmxHOVrOB470(y#tPucK_p>Y5K1It8qKUi@ z2r0D&;z!C3#MCg)D?n6se2J{hR`h_na08U00vI4}=~nQWze`NX;d;@5=gZVNiy{A5 zBxaYbt$VT-K`8~-Q?cg{y1Adk;}Umo#&jOEmuz^N(l`LG(prZ;i=R0&z$iL3B9^GO>IPhbPa5}l_yU#e z^{hBy3{VqHBE9NlE`O&0aAz~XQ$R|Hi10jZ#rs(hP4ej)K+1T|*0_n=k4Kd`xLCk9 z2mHr7^4a3$;#jiK;UKU-)8z>?*iw!b9DY6FM${~{{P0&FBd%+{pjO+ z4t86l=iYA%eND3lFlX5GQHYN3k-wt)pZ_(Y-{#9;$?8fcV#AMt{?{aa3(Ka$Jd zhxkH0QJ2V`ksXDl7bPCOe7kvsvh)Kg1d3~iINEnY2@=d>)NY@G$;rDB^laMEgjs+$ zEAOSDcMCeQSTEB%pnz0W#;FxRg3C#2r)WKy*sJWZ6Nkblpyw;MNiqGtGjsmbU^rj1 zvg8vzAeR>z!IT6Qll<;o?yHse#);n=NgmE(XJ~tD{nKHfVjK4-7V8vcHlOpwp19L(t z=z1xdjC_Y2#I=rCijz1;F*%GmJX9pa2~d7`%$XN0mA3UN?129~tST-D^D6P+Wu<6# zyd$(^4mtAqy1AGwKxfp76J%yj5Tb8J@l+p7U=bbb1uSbCL#_{JR1646W}z}ZK5$dIzdrM%NP#i0e!Mg_d4q+s4yaT0JE_(V;l(vjZ`Je`g-vi$<;{HWjm zLIqYQm84SxVt`y*{j>>jh)=)*);IK7Jj3~&k%To`tl8j6llOA3!7%VKW)S%xM_Yr) zT$M~uAi?94XO-t9Zv`?FK6^nrLHL9!AI$&?@p&6282o(R>ti;foLc+_!f?JdzD zkZD%Mo3F~2Pxo5hT&23I=DajyX1aF)U6SY7tXsX2Mj3p{GXFu@$`<0hDIVH=W3isH z(JW!aoY_+I4p>Jv$MP4hPJ4B5LPvHqLGgXNBn^VugtH*2`gJZ)_5*kTY%@>@F;Oi9 z*Es9YlD3X2?@C*!8M-Wvfse86Q_`IKy9C6yF`v>2h12m)=u~d>9jnhwg%zVa)ciT7 ztSE>K(iHZ3lFG`Q#fr5!SxpzJQLF+5Z{ZRDcv`n$;A^TJAxw33Rqsl4trW+(W(6SS zVJwq*YWy`B1K6OP&hhAXjS#MSf)@F?CeP@D%a&beSPx4=GOePCtefL_J=wprd^T^J zkGaBVeMr5ulkInMNK8l^ct;eBALDv)Dn7gFea>g+6*nZd>hxJ}Z#Gm8D%5eUf5vBg zZm=`gd1Jh-+vw6&xJ_#<>{Wm@Xtv%r9Bb(-nG$Dsc(x8nOjsF6& zt1>;V3PtaR)3Kr61#M6}q^b|5V2Pz0{WDi4mb(_iJcj6&{SD5>)E~es4`Sd%7uVY$ zZGV!1pSBex7;|(!)eUzXop-%;^^MR*a_X}WLqAajugi-paFj2x0IcWb0$p5oKaV1d zn^F6MC8QwD)a94w1&o%)!^#sZt0A4yxF^GMtZ|R{Ojs$jVs4}##y=ZaHOvIbBU8vv zrHAUwl1C4i+DPr_N;~T|uq>!ss11`kd`$U|Y8*A{@8-U>lF8V;ZPENM^Qej!onGIW z+!N<2OLRJygY}k6$aSszDJJ&kl6Zc5!5E&qCnQk=Q}8>(X&igokjOC zl9KMPj!H!4rWH2+g`)#gFO+S@7PKKT%JxvKR<3}Q^Eaprw|RZH5_H{;Dfy8Yu4KR# z>J>1!x&+nEw}qxiQHpW-JI>{}`&se7ZvpU@-T$Jp?ag#YUz?sUUaFo#)&sfshQ8GB zZ}fth{)g}~(c^oMJRaXXHXT=bIf3PAs6MEbD+~*`Nx0@tDhkz;X&=e7O{PUBH#C_F z)RM1WEoq%`w>NhAm$gXY-N*g^qktKh_lNykjI`gtJY8O6TG5Fu-+<& zGh#G405!4&aLN*S-X+~(7|6`_lL`m3Y#X8W`?s0F#b|1EY+Ak9J@x=r8``PAX}P(H znaMZL_^@?&AJ7zsIWQFvow6$tQK}9_#^P(>Ek-iAo`Rj;W@aGI<_m)~^ZIJTYv&Kq z&yRb4Z29l4Ig(uXSZ%HU`sI@+g3hpV_W0L}CxoCfV9?d!-Z5B(VN)9%P1qyX8Dlek z4~K`WCf;y{)M)h_KZ?Of)@7?9)CQ{)#PGgV13oe6&W8Pw;1%}+c3^OYgX;xwQ=qFF9U$zFv;J z@=Vh_gHXLC%DP%@pysoRIgWkVfzu~?=HjcT9Dg5PY?+1_NyFF87p%ivey{IKDBZS{ zh5q3?G@omSYuzcZ{ZXvMeP_(mmPDGV@?AwqJ!FUAwJ9p^2~FsmLtneoruF|i{j_9! zjiZT>>$1r zUkL1Kl-w@gjMp5RD?%hQngB0A(7!7f_sy@c@mGVg$MUY^`y+*@ABiMWYgndXt)x31 z`UJ-kgcMHf2M@`p@*QZRt^vc=C=0uV(<6AmO`TG0NyuFq;g0zmo9gt2ELdQ>pj*8O z51`I!uKWJA&oE?Bzg%|y958K-^0S8Km(6qZ!g2il)q@~&s=^fnmO3z=?%g8Jmy%wrbxLjx$ir;;UM!&ouX?qE-X)ay&_in zy~Ydf_IdJjzf%cuYBXHZi2{nKW&ImF3lEIJ!meh;vwMMGLoMsQex4CCQU(^{_2cSc z=X7w-RP68*2L*1oYyi*yDsjMO8h?zUbmk$)>H2C;4KeE3Y6i;HTqqWOD(CAA*(I>h zJ@Pg3=roS2JTVGmL)*vb5!i6WJ&~k0e>pQ;r_E40|Nf*AhU60|IcIsCvzk8nx ziu|a3Ok=d7YFXhN{RP}YDiSU+-}0F%Q>vP)`O`_8P=*1uj^!n!ODRPM^O!1wMbZ0kPHdHQ1c`m0)0d~i z(5Ai52mXAu=5I%wiaj`4d0~udzl|<^BP>M8@~>u76pqUacCT*WGLP%xK?9YuQ1uw1 zFojmRK&BkoX;#R0x<=X5e050Gehw=6Y&z6Cg;YDXZM$4)EWxo*NYgLTk#5ER-Ur^w z4Il0ydKSA}VKn}#j1Qwy-6&sv#MdJoE(krb@(YdYLRc3vIs<6K!f$?$Sui;Cj2lsG z-`BaIv!qxJQ2YVeJnkzQvB}djc<^FnA-X4wRz1Y%3?EY+(f@j9=ewW6GVgPoT^uR) zYX1|#?MI|46q=Biodc4BWz!=g`r>j<=0dh!fV8s$bB3^jX>m)UP0S{b{Z)DR^%5K- zgzo$Vv%Pb#W|?z|FZZPzwYZT=&F`5+mmVM2`7CrBg`>5e#>zkc`1ZY*dOm47nfBPR z^L%FS$1(NY&j-c&K4)%`x{rL$S$E+YSu^Y7Bl=Y|9|%>0J0VrX(sWhs_hZa>KeHjE z1ZT}F#!Y@^4N*h|gNJ>c9@KCndOKcLCP_eOd!r=4~I+G*_OoxjcBS<(@ zP-R?aY4eOVZUU;Wr6xnkSuQxL=mysm6w~|E7 z6H_e91Gdq<{+TcvSM46*GLL%`O9tl`?!V~!%vQh?7@b1NvyKh)GpPknaU;J4Y9x17(m-V4qQu5-Q_f1P7bCJ$S3>jGv} z{3QOb=x08$fxgkum2|Y#mxm;~q*`Dqn!1#;rW-92FZoivZ~<(THMQcjJls*AuU^_v zeiN@8Q!l>u(@AA7t9@eFZ8F{U*SChRYAJD8U% zN(4QIv|3s$!gj%kK~a&bK#QOnM3-Pr-IX}O6;}EbcK5(ABr~Fg!d69K4l9`~2xbMv zIIJ3Jwjgxwv{e$G8MaRe+YHqfLStXnNd0cLq2-hDa`mTbJ>? zST1`Hh5Pk~ITZyRQWs<=7IrOAP(~nG7yYba~)Dq#`fRc1tM(w_ID`N7egi}*)nbgjTi?`)^*030v7Fx!uSW zyU-zddFxR0WH#!{@T3ZgL1?YhKgy&+6|yjj@_|a3PI1HNNaw_iNC(NN8<<={R28c( zqU@q4v~2RYQQ?dmI2#O8u8{AG6Z%5hC(-)21wFdnZ&G@YF!Pxa2hFCJ#hRDZi<11t zO15@`Jc0Ez$|K+Mm+p7-_*RwuIa>SpXLL1{OvIBZocq=Dq5u;}56Zd7t_)2dTA|U2 z3S;P+Jp(z!j%T@lz-KyD-jfg_Vjm;kqx-kFem|-GEYypPh}+s``eV3pPLG;XJ@;uu zjl`^q^&8abs_dE9`>-?#~SdQ{1mXKch2^4 z#a6^R-#L1DB@0baa1MhmhhG)DmQm4%z=}2b2}U?gmpPC)|EZ1wuRHV1PAb338^f=Y6%GMa z9#@lh%A2$10VwhBy9I4lkn{S8m8}w(TWXL%->E((qm+{?>FQ?B(rMg<;iic-D`)6s z7Y*b{x}cJRmT*;5%CN$H@S`5Smi;FX`ge!Xu&_3K<%+5VCs+iWWK4qwiVM|W+9W~X z71gU}LG}$Dym-}^P^jEg1XHPoz%n0if5+KRJ7t6E#|wrD$G9CF%I#eR3vA-U=n6ob z)?phljL@ix>=Kz!tU->1uBOKK=pTT%MFYag;wg`?}TJ~&g#VmnYwrWtny6)cUiR+N%D@WuwG8Nh1M^P+J} zAV;XsbKo*T|!X-^LV5PoZar+ z7d@F8gPIxAezHB04;;p)M853RfL7uMH^rHhO|-Dpn{A2@-$0U+PuKyo(tA1ev)_j) zDEwPV3O}G&kw139Z>HLJ=?6Rv^7ox<#%n(&W~!QjWggW1@h5IVD}j7_wSP-)O5XP! zAbsmOsSx8+RIVw?#YhWmNmz@2IpB&7NqUkv3*~QRU7YG5LD^`}_e`^r4uPs?6$UP9 zuThKrT-WVPA~MDU=DX%6A9cZJnpb>xT1xtZ9t_oQhgf^SZ@-;Z0#$YSVTE;7>uAbI zCk>a^Z4pP(H(f;y$J=Wc^C;WrnZD?kQ`3F|jFD8YM~#l3Wb#`rtqk zxhT}sXY820XurkJo_m6Un*zown}^_9n?=EKQ*Rj$Nmr4*GZzur{9&%|2Gwj6zO`=V-IO~MMhGR@pZF{n`p~_zyV&%Ut7d#Dt7zbM_29}Faf_*50eov`!=hy`Q zGJ$Emuo_%1#6knyP$*@6dUmVX%Xsa=Y96$O{!pkycm4$Is=uCz--z^H?xMKs`nIpj z=jR7Y`+v`8vkO}th|{i!xJ}o?r4+yI?@3k^=kWo(lCqzwuiKWe`=v}Rij<6NH+{v z?2&HE3kheA`jLVS50t*JWc5!KuhFmr2g`KdTSVv5CBl53bpm~4RJhX0vIJhCn-j$F zxxzUNrwQeqq3s$Ic0qGqum%zK+6ajKf*b2#fn}d?b1hX-IuRWh!LN#(E6%}hl(U%n zo0f~xT6B*i1yhPjy|fSTpLWk|-oneoYs@-yumi7 zyYx&WSt2aQV{MpnffcOx-%QWoNOAw;bW@?Bf<2b%*oA|Ct-#rU#91bCV&eA^+fny> zHo7k#F>U8_HMpd~G*VfV=B|-#3y=Ou!Eo@mIGwG(&Ie5CGn?;jq85Xd7TKj@ES)(p zUsaD~`7=HH(}^eB`nhyVkVklNj{W>3Cj%Tc7M$H#mz>|1H?=E;uDdu+F$TLPs0;sF zA|J|fvLO$;d@rI-fm@F`c<7YheVvlJ%w&hlU+Yl%w?|qxF7Ir@n2oV%Eyz2d7JBY{ zPc?>-4ZisVy$LPVkK>%56npzML`SfQxkuy2)iP~L` z)=Z4I>u%v3*k1fFEX&Tslfgvl5hFCkC;!4Fg5oKkR)6;-4aC}3w4?PRPveLudoLMq+~|p!S*sh)T&^1H zJ6t^WCKK3CCwEzkUc6cMhB+@r+g8FsOc{sjZjy?wkVg5`c)E^EcC^5>fRte1{{vhN z{nJwWxZQ6&Um*@t>yl5J{2t5_+6G##?q4xt+C?%L5t_b#=Ce&GK0g

CBb)bK`mWSNPlS^GqNWPlAuvwo>u3f_4Et zFaDu4?yS+gy+`U?dwJ4!W5YY+_2&|e3e}vz?N)4~d(`)tv_Cn*VcgKE zCqtjhOBXQeD^hG@$J@Tk{+UD3@R?t@ zB`2{Mv+$9Q?HzC63-|(E02RNIPwEzR{V1ohX~&pfkS-zn&4;A+ch%0xSCn=}afU~_ z>uJedL1KTI5xop~|H% zvn=FojX=BM&MMMa_qM62??QU<#mT{F$Y6B0Et)vB#SgJcBl8F2Vydq$X0w+{_I2El zl_RA=8XJ|+^7b<+B?3;gkP6y?QI#`KOOia4ec9FImhE`Tuzjr4gWbmof{S=jP)%T;l_Yj#1p zO-RM*{qD1n#Sq#Al@}{Xg^P&4aiQL=uuGuFDONW$t8*>DQAhGOja9aS=W<}0_Z*k^ zw8}cb7&BC7n@}o406q&gB5wEFv2Mld%1enhZ4xd%RflNAk&sKX?fj5BHV^#|T>r!{ zS}%5I;c8*R^xSMcc?`WSNl|wyoYE>%cqxPBg$XrgyR8-eBD;Tps@&a+xDqY3f1CR_ZfCYNlUeWEcivRFT#=+~>W;CmZ`(Hgjf{cl;;JFB zS=SonaIyCH>g#0)F~uv)%CmYEd^q2V#IdxE-LvdwG^$FQ#dFMTnm#R zKHD^*S!Y(WP;h3+(*T2Y+(~3M3W?~yrxRlXA}3_t)JHIsonc$;Vj84xZ|mAF3G>~n z--^+$u|DnvWt?=T;ZhWr>!-WKI;a?A>uSFl(0blUIyC2~}0j3xEZm<<^k%2x(JI?F}24mVeHH&>F#93E=CG zPx|bsD#q>8K0~6}s{qDrzyKow2Nn>9oaXs%b>iScR7=9-(U6wnx+cdcI)fmJi0aX` zq{O zrQIaT?0CoYDsar`EXEnbdOS70DAq(Ocj`uR%<U9EWi43ImTG;q{v!l z(QF9dD{c~(gOe1Kfdo9G%`}1c<~uAiYl6U&8&fiM;KC;&Ti?OX?Mz5K))mX?JlkEZ zYmD41D6Sfey*Wb&vjP~D$^>5Hr>V7?Bi=n?19tS+39xiZx#h+*u^po-QOeUbcOTH) z0ujUsB}{avTv2p;aJL+#*_fr?W|nNw_4oEga4qC=k`7NrH|ZWxTv``+O>v3TzVg1K zZMG)Dt(}o1mf?&6`RM6LbqeI>s1r&@mrJ|%v_o-~0!s>$oBU|S%CbOr;9EN^KXp+^ z)ysq_tn{?a)Z)$};9NfvQ(KQ%q*0SC`6Qxjl{X~r*xPjhD~FOOE?vKcC~}~$pN1ND zvsdT}a~H=~JPK+Tv4YqO1Lc^JH4oZSR%(iuEg;C93Z>1&56sDsq zPK`oq_>9l4`)M}@E{2>po+OAcaG9trWx*sUo-Np$+$dq1Ugl)N8|OUnsaBZN}C2kkz4np z*bRf0`9?`J8+uCC#q`o|OeFPoTJ4Cpdqo9}vx&W`)Kf7Io96-iqnpGCJ$cEjP}aft z%@#3gHW6bn?XIBP8Plt$<&_pUJKrRVyTSjK3(N(sLT}zvC_8Mt3w$JpbnMj|I{!!* z!r6Ow7qvW~{s8N>iZoK|xU3<|6Dzdg{#&%htJShN#Zy1K1Ib6RmNBEgwbnCjLX;tJ zHE%y{o|p6AGy(B}OSeCoq3ngCWQ|We&ataq`5nv6Fj%E zx$@1ADdQy^p-f>2r=8j3Rqcp>Y8%ydOemV&a@x{P4S3zEJvc3XYhYrskKZ1*6 z)711U{j`s=Jxp-WzVVyxL2oE}{Ig&MI7*(uoAu4B81Be?0G12mbvUo3LiXe`5At~y zyM;&B3{YH46SChu>X1pn#2+1s?~LuqApk19gwY6E6rbCB@T8?;w3|G69%lDUM2dkq zZ;Qo}uJ!id+gO%^w01PC8}p;s+MK~ID68;I9~<*2JQx zBNmEXxMQx8OOzEr1%xj?XfL4gZ^4Sm_l-66Hcpqe`$?Az;gMAFYPg(sK6(BxJuSaQd5M&%=Z%1~-%r)&S( zH7bAWMqvy=^{s}Rh#fr9U-Uec8bZ6j*X{?>T(e-kXP@qT(l|@ur<+08hYMM<#2^Ey zhg7lFTYj-5S4=f{qH7=}H!(7K{3HuPL~>QUGvx*u-_xLa>47)0yKE!!r=rk&N_Up=xP5u>`L zZ(ONOqK06o4&u$YSO3AUe)!w&s;g5q#<}&pTNS0O7HUYU0cWo$+d4CZrA!_paK?aT zy;8!Tmk;Jwn}Vlg=_@AEbd1OA^M1KdQO)BhTja-_1gNl)&nu@yz|~>w0mQZkATs+y zV$@i<`-)3I1~NNcdgrRkM4Gj25R;`|2d7De;2K)2$CWd3>fp?jz+|ek*o-=d8)Z$mY*s16c_8iHf#@ zwkxe-aMlylyx@<}jv)G>~1S!}T>70A!m?}zOZ?iM7+Z_l3;KOSPIxtpq#m;D=6 z{L@OkAjs`Dyy@KySkJ;EyMLAD=6?2le2|cV>xaT6G2`6zUGU`E8ca7=k>E_2n3Ukh97?MMXT`~s}8&bZ>2zD4pjV%lROHoK%lD-?3yphn(Q?@ZRhD`AoQ5 zzKJf~O<*<)Rx8e@JPc6*x5A}b1T$_ea*v&;dmZHw2q!~92U8M9bm-xtFq)4#$X3Xf z!Mp669JDXEtvYr-p$jhy1^v<1cWSuFC8i@AEf^}6{uu`K>70!qAiJqAm$E9?oq(Zm zIhaM%I2SQw>~5EhDzUlES0V%-&Q62{mjR8eVU9-_*_Gj3S?VyY!QjL`(q{EVya;>D zxG7m21Ajy53h~BxL=?&{FjvGe2a=n5nl=;#(+$mzcq^Ff3;n7H1)saV<5~_)5!FT; zef>oN^%BYRVh~9`7lQy(h=jFJ@7n#qV``5)BJ#%$5N0<#>}1k5|;)znx5V4b! z>T3|OCx7Z{9@tJnOE(RFjIyZ9-vb5v7_S%t2{cY|9OFH^L;}ur8J_EfOh@ubsGBY; zdmUO1V*v4xe{%|aL~Edrsqj~0-)j|1z8!1WJvROApKGZ?iNy!}f!jdVUJ6dXrN*;b ztSKFolt=(3FOH436O{?kuUvqk~&nWd*JAKTUW#o%-5)F=9swfQ&A{+e@Y zqHe3=WE=^4_OFJ;eV)3lJ6d5O{Rx9g=V8vOT@Uc?pX~JD{)Zd!Y6Aj??eRG3h(^u@ggOBSI}Bs)jd1a&G)9(6c6_6 zl1AdD<1ey$P^1ILyYtIo%3%}Dq2|ndZWO&4)45n{Tp9v(L)tidoyoy8s==6Veu4~5 zyuki57TGfde37{#SdG<~4S%qK@y9NcN>q8%v5;2k%*+`dE^i>Mzg)!;z7UC}o@Qci zVJc-kxmBN4$g0P45|X3S`Dux!~1gBXBG%nuntGI$xty4NP9^GC{mXrH~D7 zFDq^`C_%Z=+}oC$LLJ!kKy>K4SGZVuPBubQo$F0ezbscV07&U0%vZat##oL!A+ z8<%9FmV7Nvm!h=^>UnEovMt?AWgOc#Bt29|h2#=lC9A#x7foHiei(tW4zaClg5SeKaU(0#3JY96lfJP zL9iJ97&nA0E~M3t+Pi`{v|AggZvi%$Le*mosX3?MI8 zeZ2M$&x@-IJoR^s9!LGRW44j@Zu`&wFH+3#9`x9C>A&W#Ldl-uO<%xy0erHwH zuym(j00vVLy&6RVGh{Q!>24gs7nlaMU;|GDv-oy*tI{u*bf&zO-?!Tu1!1;e*3XcZ zr^&UOdK_^*S&5yKNgoO$jGnfDhHgDhJvhf)t?Ih0ujtNdLN&WAKD~G7?8JXr99&L& zsdmo3t_MhMjxnA6N(?j9dWN$)lTrW8Ge}62N*d3!TpKHKt~86=(Yuco_U5X2q25JO z?(Ny0HqTI6oA1~+iW*^N8?X746QaLthFF^y?Vp%#S#GT$)S}0*rr-+iVdA9j!H?|0 z+y$gR;C&{0T7EA+*Tyd^{@XX}6VglXcP;D?MKGzdbr9aOyX3CD)anMNaQ98R46jg| zJReV1er3c;(X(6Fz{PpI`^~uHruIRu!!V^EUm_!{@BJWg1A0kpK$EWEUXN_l?U6S!1-=Lt6b+_GL4j!M4n5{5q5_rBFCXHCtQv`K= ziwJZ6Q$x)J=kryz(cExoMj1jCHF!959-{Hf7aZf>{+y5}RZe?8Ktyh{*^FA6rT4%B z0FIQ&lr;?h2e>-SY(srtx~ZgItg@BDl_ii?UqpK_q~gz~v;o428~Fn-HKmP(#1swu zM>P|?a?`1wA4fD3Yp6626MdKz=Dl9bC4On5&*((uG0Z~^dMxh$K z?7LdlYB0m02@*0MKZPZ3SvS4B1X?B?=uXdcOMS?vdoYLARCr)2KJCX|*dI>*fy+Lm zkneu(`=RCH7M(Ge|65hu_~fiL$j8Hcmd+ODxCOshDYwbw^E=#F!ocbBGbp3(Cp2@VdF z22m6S$~Ml8EkOa>m4jgi$@tGlw0~3?<3`CwI%dYf>SF*=l$_X^p$MpFrE)$6pNbvO zPKTIFw)gffqxQO9`UjLnv^?B&)C2hI3>VM;4f%=O)8bjOW-i?eufxOUrW}MQ)TmYOd#p zj?})DXo!3P9w(yz((F$L{75>cVZNeZ9~vS9$&A4^WCmB3^aJ5JP2Y7qkxtq5cGZK{ zk|7=e?*3ItO=ukX|IRnwOrP7bqho%&{`jQosnEP*iu=zef1-p3zBR}?v7?$Az;q@3 zTM;Gd+=hxw*W+FWkG>8J_AyEz$=@a^+cEPo!`Mn3Y6 z);rHjQ}qk<)h$D*%QNC%r2gdxmN?CwUcg)Kgd>K3D`|dXYqUZ`he$#zk4G#Oo~^v# zwDp$%TkeI@7=rSnd{L(f$TxXDy=*0vSSYnBiiLL9I!T+-+@+?Hw&gnW^*AM(-?(`A z9g=Vp=#S%m5?sje_92*#rS!){mIEC{e?@J7V23a2s-XK!v68H z-_dLw6!Of}8cA47tHiKOvsir7{DZxZ)sg4>2&g%gMQIU{}?8V!M?5fFoXQp6&je!A@0~;+T6^4M#(X5b|IGE0}VqpkKqDF;fQL( zI>y3;$Lqom%}qqp&X^YsPY>{Kj<@E`hde4+UB*A_W~!>J(%7&8ZulqPMGH-*gmIz++0hrb>B-wim?~2`Gm+@4< zd~Fs&M1`jn_xgq?-tMsc1Yhl=d4prx(mtAgnj7+dxVB)2_NXg@h>8NgEq7EK{!qG( zaq8Uu(cAan-z5KN`7r)+E04$RLoEnddbRF6-{P^%8;9aoT!_Y6Dl|nD8B6XCCKjn% zN53iZ=ec*ShN6@_sA5PdZXrUQoq$I{^nF(9x7pRAJmOdYe(>E1iwJFt8_>H=|2rdr zqre7p8{p13oYAJ6RVDUB4kyFrZF;CIKj*rc&K4E}aiYd#M^1X)Dno&$`{47gRj~{k zi+U49i@>f|t;RIuA-NiHJ>uhb%`Zwig#r*hb)gGi#|%1g_0-w=i=WqPTr;-*Oy6*~ zAa)PGcw^eXquktVkBsn4Fp1)Qp`3E9!jkTnS-c!CY}<;d#E+zA?G^;t)8fk;yHOiD zfuT|+jwA~tO;&?bw?(q>u(t!E(3-NkaC`btn0u0D2nAAnz^}6!->=jz2UOX3YH@tz4w6K{{54=l0B zgWs!FWXUyL?;Z|vkE^Y;72rmE#+;JT2SS(4*D`CDKYWn7-^|srg5_<&R(Hc83}=Nh zoEGCko^OtR=zi`>1B^WD6RA8X^PwI?ra-(>|15nh3VOU4dRn9KFcEzF6OT8&X~7m* zl!tp1ByAM@Nl@Ozmo?JfC%A-v3+-MyfBmKK-UE85;L@jVV^l76)&DSMf1Sst853W+ z;kw6sMXz^V_h+6gLTR6B-egjEzErMC?*la6!DG*g77h2lY(J+|&qq4F+J9T1>62<5 z?v{-aVJFrRXZCb02pO#R2tpcDMZ)DOWsPu8ROK&|&~>T7IQ6O8s-uj_;`>bxcWhL% z5_ebr#fhG;xoC~8#xIqX=Q5n#;BvuUA(WlwaN<=t@O7R+S2lq=N0BQ8nt5nV|27V=f1PMWGl%>F>PfrWl*N zHepy=byumDVW+g>>Hw&%e`?WW15QZqH`fnaBQCSHB7U@bCq3;O&uHnpef>&OMcVJD zMLvrzTu3C+SeaWPKjj^|QJpa-Z-AUQHrQaWVqr3Ed6I-ElKQ1(>O+!FJCd>zr=EyZ zT@Nr^VCZvnK!*jvIHI-WA<4HDHw>l}8aK|`0?RYGFo$~RJWr>xL?+AciH@#;F4r!_ zg0m55WkXoHaMUJoa7$x3HND{}^!0lLVU5IGCzd;`M`GSLlOwRme9{UhL<=LuTBbL5 zOt^UBL)QVL{xu>&326g*^hayF*I-6_+*f?@-Bc`CD6Rl5{4N{$n5 zNLroFiav&4{_XHIl-;KGT_2rtAs z{+}I7-w8cK@6<#7mL}@l|1fb@mRw@c~iCR3j z0Z%{N-OJSgMS?HzNT6NOemr(2)0C|rHI8)JU%-O~{Sin5WHA?B#@ctoR`jL2^UUHp zszqY&^bdneTHCC(h`@XV?oA*!xr&FRUyLWA>$QH%ho|gbzWcEK69vt0r5?q-uf6Tw zbI5DvdM)@OUz%-b)8CuF)cN8GuBLO;^F8=!XOY8@uQelgjn3<(LMb*%m6Z`ql$%%U zfB%(0Z}Yfw%-yTFr=2w#GXVd9dK)`C9(#T5Fn!IUaClGaFAMM#iO}vVz=4z6=KdYN zk+}2tdrDyLr~sOK^NEx!kUOE?kKFpuAgQ>*?SxHoh1}>?ode%?Uru8{4DRp7v(-0C z=cR}f1g9|F|3B>c_UT%A_CAxQ5EkO}+5(}4%)~;-*CS`}T!mrTtHf<02^k3~k z?pJ+8qKZ7#O9pXBMNqdATr!LUDu&QEM(U2A?@|{2ytTIahU?{p25!-^8Pu0dT5^f# z@LZsU=*_sh<8>{Uy?m1%433k%esai3A6Wuq>s>t?EhN@UhepMECg_@F(F*4*ZiIR_ zT%vls5=t?p_X|_(YFuSg)NfQ8}{7_xHfx&gez%UoIS7>qICQCLrn(lPKXwAD2Zj9@fR&FN`0Dl0U+uBYtnI8Fm151`Az(9vX| zt3UttPV&_E2jd9je{S)bN4Y2!WVMpcI4isgTjJRx7LZAvmpRZ5XT9$3Rl~nlG+L|_ zisxD!U)3zw6(W(R!+)3z^=n6@U4tguM>)#2TKC|3;e2ITx8LE}rlB}TF&QzVklt@m zguI#zIUB0bm=w%D_^D^AgJY+orTb6@Xd;PS2>b1hNRSrq=l$=dvf7cBO>01W`=tXo z-dPsPXf6ZYEJSfR@%SU&0jzgFtyRwq`2WNI@{RduUgS}IiAf`pRK{CtE(NMy2~caK z;1ALX5KHsKIv*)o2J2Q7w_#^Fuk2D=xYOe7pQc}yUk_A(+{v^fF<%^QH_Ph&OoN+^8PD7@2NQit8WmQ0)lvJ zfgj)hb-wzX_6$qq7hEJ2e~n|8dB6@Z!q1qaCip5uZO#$bX}AXhHB3=F4?C(^L%L+AT>_8w-Y0yvs%%h>*D~Ax4w|Iv0=t zS>lwAj&>Py;U0I76FavYl4wYyF{r}Wcv6Fo!tn{!A^Sa!eBB<{X5~XvX$&UG;Z$I_ zTE=+2%Ih^XUsFm@!hWC8zJ-uUS!khOX$$BX1n)Z4nDt%^LlA8pqzA z{Yr|4T0&HcViqxQU~kX)Ty+X5ggT{hCV7BtYHa2k6fyQ%+(Hqc$Ug>Wq`YKF$SJyE zGol zR+s5CV0M#~H&1<5s5QtV3~1Ar2=sLMp%g~%)gl0wh{T!yFxk$B{&LEa+=0i8Phih& zGFovl&8D(OC2z$>X>u&``C5+)Uv{I1M4r0Kwi6M~R0l0K6RfP;w~SzEPh;mC6+L0P zu&#N+6K~X%6U3usR;KvmsjU?=7E9I=YL9^x@fEEyoKB1G$cZP#{k5n?g=4beCYJDk zZ@NH75ds%DW2*k*xewYt4%lQ1f#t^Rx}tOttR-0%4M--YndbfikLv9R$tvTjc{#i< z_yjTJrQ@OT*wW(O5JT%Q5w`)oyJ9#zeLQZ!P|B!PF}bg||tP6&^;wqc_4j z;Jhn&bk7t6d4Vu3m)j$-8|w%!=?|IZLGrF*#tjO)#ceq^p=(Mk;K0!OW*jO{-z$I1 za$tG@V@s=Z&4^dg2V?~Y){{2MIE_VT8kkxJzh+MSb71s!;X3(s)DJB*vSlt2{pMfW zZtlBJYWm;A=e+0A`WQFCkBcj%`9h~a4EkmZ~IfHyUih?>3%LL=|N zf~@jfIFCcb zTPJcs<*z<1@~H?@C!(@7UEv>562};54AKiJ3`g)?v-UPUFRI+ju6(0AKS-3=IQ;MQ z2$co}^NG(_Eehz+!l8V5imU4--drWrE8Z<@gl;7UR)w14A%paDbv|=X+TUqUrSkM(rMLi3QR4cHuH^jCttzx6C#mUl>{*O+MnBVEmwd-y*0FlXWq+JD zUIK34~RaOF!XIZMg8CN;gfkCmA_5M~BpM76Dod18#E z9JVkdk?RvrZf!R(mo%@a!R4Tah4rA>>`h-nQG##zeMyvd;6&9^Hg}1A(qb3dg zE?|`|2J_NBu1B8Cij9i+w*bh|r=UJmt$*|fQty``Xg)!c$NGyvge;VA=wl3&eHO@j zsTo%HJF!YX&bvdS!gi;HUo0$JGCwFQs=s-;*U#>~S(-K*yfcOt^ki~xY&T)r>OXNP;4uELU~nB5 z;W?mq>Ki7}aXW1K;ijDJdSL=0oO=<7x12tyM;_NjdO~wZz4s%NDEa$SES{{@ zk1^exD>|~fmQ4Jj4FVBwirsJ+tnkje{omwK?ym})sYoA5iEAxCBm9wqQ`*0do2Zx> z;vJ}=WdSH)KVfUR^F+>w*SSlmydmQrs$p1QHO7}4#!CyrF1hpnze1@(vO7pq;djZg zbUs8gBL?lu&Xmw~;s!Ww@b8_;PjJu~Ti*?`mRCZpFk}4l3?+Jee;(;-Zu&#Lnqvfe zSK)PM9P6^D7i|4fyNK(09WzY91&_c)61~I%#Xj zKSwwURUXYV-mNn9H?X~L7JrH~Fn$!VP5E1tI^p!q(1iMpQM}J41e_ z`{M5puAFt#@UE#+zut41GACHg#x;r3375FtEleV;A-N%Cb{yc);ql z7z#*4^4u`O5{B6SwnY8D%eXb}OJ&qwFB1M(-)yQNS=6jH?%Gjk8-m zBe|7Pl);?`&>*N-0nm#&+PqvEoQFx&>1VhswNroPHPOkG4WKW1Z>A8%T9%d6LFlev z>LGUZHqqOO@ox66$@>3*G0`4il!8&RaR|x8H}N|l)=+dtKcYTRt+tl_jf_PLukXaV zMy?Xu<{dXL4XJFwG*xje${#yruD`h6@uk-kJx0KMFw!l4+z5R7j98gc;E}JwM3=v=jv-UW1-9&3N}n zCYniaJxp_1;(t#>WPvw#KHLD45o%5`MWWamTmCJ`>J=zP;t4Q^>#PEmyEssomPuV- zf2T=>nn?OJw}!DpzbADO(LtKn*s7rWX%>_c(|jd@hrQIxyR=?1n+~3X9}=rE+CR>k zCUVATjl=MOt7k+RXn1!lL1d?vI#si;+>y?ONsg;KG|M$k#pnze zImrcdMj%;{9ZEg-vKWgq|1A%`NVnOSSl~C(ss!&A8MXrlGx0Sm4|^_8i^!rqyoUj zYs(a5t!+n!vuc%8`}IDhFaMNfo-^PI!2PL8*wB5d-&sJ#c*?5WSM@>a*bOd_){7^3 zQvBApp47hmjmf#QZP--7MWF0Ep7`;2S|CDKveJSeZZL!4dnrx%i?k=;^UX03HFI&R zZzT?l561uYq(aZvrf#QHOD5F5la`|=dz0RgSzMhEQIYgzhhyt_&SyheIl)#MyiWH5 zw<=u{UK(b0Bgz3|?WxsXEko)JwO=9&-#<8R7B13-{E2PmDZbjtDRx%6K#2WOLe928 zfYdEe`oN|Q__)OXUk1VgGekn$7a`xEr^ail; zKf9d`eXJW-mR-6Gvsuem%G*nnEK{Stroxs^xV2nr9|;_(sKa_~kxNXB{FywbDi(l5*YsWk7PFg_(l|?23E11f(WTTp94eXVRyk}mHeyU5{{cT)914ttd-JP*~Zf$Mx~ZV!A659 zC-K(2*H-5|tYU=IQNR{|87w{*(rJ3K0XA$>`GjT;>YM@Y5VY!6n=v;HKy@)(iBFGn z86ZwPmq2RmyO?J-F9n{rpcWFiStRW#&th;E(>nH#KI{k>5s2#G!c$AjP2hsYR)o;r zs<9Uroonc;=Vqq|htfEkC}buIAHb7RN+Tnlq9K!&c{yg57dBlpc|0{QmV(d43YmES zA+~rfJ3t#;Kc-*XVUC&DcTD8A7)liPTGC{N@}Ti*C|=VUYR2*87rc9Gzf0EunI9*@ z)3)}bfBjUC3fE~gMJwqyT8<|=tji{iwbU{ibvL1?ZkSYG2X)|A8u$d$B|5q*C-xD~ zBa*9Bn>VthVaAN4zASf4$ooQG&#XULCD9-OvEib-6TEDPKODssY1Ds={>*Lc`>>US zTZg^fhynkqv=%?^{iY5LIBwvkm`w800RW`RUQ-0t4X$|#aKVLE7PTDkTr^Co-K0pB zR8o0UWQI4dUXDSTjgGi?mFT=LPQlW=3b?IuSw?gj>tkkLsrTpkBkGs~8B9s#oDOyj z=!)^oTI1?o{3JZVy;8!)*(vCiDbp`4j-7EvnXoA^`w*Q(jg-hF@NZq_JL+PuKCw0L z<|pL*5y(x(exfSin+FgG?LI2!qOS;8e^uwJua@WFKsuJn&hhM>*obrhltP7WQ0fMD zZA{%{udN4xmq#CWxAo+xE78G2UU8#U<}s_$^nYf_P(tN`Jbm^SN}T=z)zO~nmOPeO zxWwz^)lwymn3f^&2|>~t9ZpCb$nue{x4 zkee;v`Gj+RhaoU)W;SeGYw~+2^FTe~kf6%P-%FtAD<$S2{t%J59NAa~pl~| zska$Z&X{C_%joqW1|zZe;`mn1s|BcSVpex#34FD7VDiJR0 z-4y>9kDM5<-|b0tHd86WVsdMZN*qhs*jC650bP6e?8dE*Zo20F7>_DR%q^@llfdkn znq{tIFUpMs6v{Cs{Tf8Z$a+?THD0My@Xu@2V0dAw#=TjrYH>!3df+=(6%RPz*@_38 zJI67!#a%Q_(D5Pfe{g>9*Z(P6ey4uH_mHf^`_yDwlTLWaIGp-*Cwa=!^7pB!?V=JML zFujHfR}vMG`zP937|g!kTyDX*{IyQ-gL*FK?eoFd+YqSl$*~hpy4lEF(n`&kbiBz~ zDV@4zLI=({M5DNmVw79Xy2*xB&2}8|wGJ&#_&E4m8W0s?q^Y%7B=NPK!u&quO@0G(Dfm|LkV1 z<7&R!{=3P0G?6f*a{@WhfRFDd3*Lg&sN$P1O^*NbS10#R8Ab-WqaG8xjb0ts!zg8K z=sA^l$@Dx5ncWufOSlmO_xxa%DgSURCb$=H*u^#GlMfhQ_oT?!Y7AIHibWVuuhR!* zFta@e+C#fJ-R`SHw3^PUP1vDA%x z?w|98K{xBBFb(?qXDGV!V>qNn9AqHq=z=F#dvUixytxZq2Ab8c!@im1;H`{hJv^Nj zR$c4z9astk&Iv6r?ofR$a{Uns;vU}(cO-jAE~BccU@df($2sl9EX(qoZdTlQI#J@>Q`EF8z$N3L**^YhDi+~D7`l|V^RfJW+^{Di)q|7a(Igk?Ef)@_n& z<9Tt_pi!rrwuP|wD8cdpj3hZD`B+LZE^L9M5*4L~!C`9&cRKL286c*VYIw<;>1dn+ zm{fdxeF6vt{4o|}QK`!ebgJSh9pf;G@iUOPL^a$IJ6p|Ewk;vjg1+$=R53jg_7J7d zFt}JBKDQ$pU9v~|nA;dyqlPbvFG>{IBLb@Fsw)*ws$Gq@~ zDGbMN;kAFlY#$Ycqoj}ApZJB{^fo$QhkB#FrG4<6D2}zC9gy<1s|TZ=7;I{z1gFX4 zxNlxD%e@Q5=0@U#Tgg|?6HHlchI*&AHT>f8>H_VmXg>WCI`^r{v4QEb14Ci6=s!hk zu*I5eYJQ6F7RrkP=o(5;OWt05xR|MupIuncTmj zo_O#EsT}j7N?n&I(j<~4Rg0|dPm@qIPhQf4is&SLKXP*ssCufhO_T*~l#CzT54*kh zBfx=6cph1|F_)vuu=L(X8gLK&v4_DKLc>Y+sNUju*2OTqq4`|bHKl?a*TTvs*;V?H zBzDD3kpJxqp9?;}sUTO)6^XyBf1v1BDGFEA@A~8oKii z`JV+Wn5|B-#VYk~#E6UmoO#{*L?InxRd+GH8~wXt49iBMPfxro{_wHb1ln1AF=j@-cMee%?i*x!Xi7dQkhl&vHyF39w_D!v(JvzV42LlYEzH zA8;}VsCFe&B|T4{ul7Vg*~4t*0Mn3k*Yov#PZE7Ce|Z)UqB`NZR>UW)HrU}iD(>Mr zIF@f6@V64lv-{=)q2((RRY2a;9rDcw>lB0e@|;YEDZ7gJ%^xz*pnF;9#TjFCr^|Eu+MRV4?zK$2FhW zRe_dYQg^wQHipdq)d*eKVTINLw*kz-L1yid$)j>qYbdjql8gK))WUF~DVv%zWf6K6 zo~ud~8S~1d6vI+#8WC$^TU6a|nOsSsziPV?Ll-6v!XYh1J6PDBdQK(dIWm$q+0v6f zv|Rz!Ze7v+r{ArSCJ+w!pi6n;ZTR)B{N1_>-nM?=^sKJygfr6gW$qvImEwN)%E4-N zI|~m>maqFnD3%<&Eg8SO)MQ%54*b=%fPo)rSM)9*{85YuZ^`fSu^xW{FeO>rpHN`o z2VB*G&3npEEFj|u;?$K7Ay#0<7}EBKlG7#_1_Kd{;yft! zVkK&g9}aZH9HRsU$l)?Lb|H@@4LlZkF*}Y7jl@v^!#-zSCy{Xb8w32L;U#p!A;cGz-H z+KeLE1M_2qGvqaAKj|9EJhg%VaB^lvYQ`PNPI;nMCz-L-wLAG@(^R1VfIO&r{P zBR(kFEhOHKeb~9lyz_XHUL)wxI{{;*&8!dm-D6LL&$uG@*8QAcms@p8TJjd{{0sCH z?`k#s*spJbEA9Q8g@&isv1K*YCq zuewpsEbo#fpH z8jjYR$R>x^O`QgEld>V9*koKU*Q}!#KRoDN>zU$3P=hdimm>R&Ij>4GN5%4Va~Xfs z;AjYed{Ztxhrq9CowR>z&5PK*-Ll zeH119sj-*1Q$FxwrgHJr=XOsEocmaEZ?Ijmbb=+1*(o|H|8(po?#ybz^13mKd)c1BHSs{ax zdHj&svjV6RW@9-xzk0MFs?jE!IEL3*I5&LfXV8))|4^gv~e@7<#ekXq{MGI z>fJA*5e`M(IE)+JZ{XA)e9vW(*^(N`c9@Cg&9nR{(NKjCCiqRmugM;Fng_L(UelfA zw%}CUeoBh$efncO-aBx{QBqetjR8UO<^i3t4iF|PWSML-eCw?n#Bohk74!@U7uBBcw zw#%BMnM!e4$P3yb6bu6+H&+Vl%+@`JF}8Dpw>S;K47hfIFiSPibiW$95;S!P*d2v1 zDOGizleCQ15>IpUB&Nw$Vnq2H8HvOXDRpoaT#n3ZK{;pNcvh5$vSL!x;HW^powuW% zPqWvwL07iQh~wIo``rv9D6o0D&+s*mXlAr{kSh*u8wYN1YXnfJ97~iEj>-yd0T&YQ z*^&G%=O1U<`tQhz5ka%H%PUR5uLHq}%rO2|Zy0Ahb+xdf0plllTz{l`;y< z5f^~wGyc%v-u1{8hdySE# zaL>Ug(wS8;4GS4{>!AHo5=z6}tlcn}-HxHUJlGLuK(1XXc7Rm^OubJ0&{`p?t|<~h zRK0KMIBPa<|tsAlL>VO&mnplsTv&REY=q4j$@ZKl1*d#+fym5P5*cIx?uz*nY51 zd_<(Sm$(ynys;!ZN$WCj`6s1PEO{sT%LzjUT1?f-clM?C+D$UT(9(`+pQ(k2;(xW#aEUK1+yo7ysi! zfL!Z=`$qjq)A<)mf7a{&e+D8%IAL1iOPd6>;e{6!xV@UAOUXUt--qPjv<#Dyfh(Jd zsr-Jc5!mse9jZy@bSsQee>i#&RTTjfCxa3ULP*rp>}=z|D!2?M5I<^jkt|`THl`Xp zux+!sD|=bPNXzhW4hVT=TxK{{;+|?&u+(hP?vfw}J$q=hgorIG_=)k*QHN+)$S-R) zUX7;t=ya!9+B;%ADko6?xLb}p}oZ$Yz>FX*5MTvq`%97c0>Ctvc6SJ zKSfx~#TD7&Zu~;7zj{m!3!9RQQDIje%`P@TBtz3NEY7v|oJLs*n9>H%yt-a+%CFl1 zPDfpE2wAO{{*uVD)*P ziSPk={`_8^r_5)ZY1NEHPNj}4+ ztf}6c3f7!=(66~bJTHJq*%i@_t_A@>>n}ndu~?ibvU#fVz6JJK#nL90yIOSZ9bW zb_S;c!c#z!p38T{U?i96WDV0erp!3NCCj0khO&ZqY}d*hRpK%;rp*CFBNfgIf|sam z-{+E%)g{9dkEaBn7pL&lrwi?gg4Rb8{BSdYCZ(9|8JMYY1X!@bh9f{-aheFr6xkpW zyWwhP%(tJ%@wnVE=Ex4F$plZU{arJOjS}fB`mA+}^btz&W6OZbWpg;UjsGE2EIdBC zm?bwe0i{b)3rcC6#YS0qAL}>+*}6=*Z6^84DuQ0ZA^KD&o~|9X;ERfUzH=WazcJD^ z6*ebSMlPn~VC{?*qeLQ$2Y%vZHy@IUMf!`4684Lq8{6hRGAgv=-6&E zXn1$leKID*R{hx8wb|MRW_47SI% zhpUUgE|WzmvEdF?0IBIYmQf}w=n#W5%jMoK9kYD>`Fy!RY6gC<#Up?CwY|sZ=_3yv zwFv2ag|7b!S-`-A7NM_hQEU{>EwsgB3<`upLLINTc$s@6AmQ@Xf_Ce>y9EaZOhnju zc-)ucN2W2G@j{EB1Ty3n3s2R$3&IsNE&Q+Mmh2orr*QI;lFFv0(qK>_V2#VHuD&iW zvaT3}jgc;&<9OO9S#FZUVG=6X6SXP!8QV_is?e`I1|ZT%g(=K|GaGxfce`PZS0w1SiCYAAn^vCY0p;XE0# z(lqNUqm+Wp;Gj!XUR~iHLW%fDXjOh*7+jIU1}r)2KA7$;bx!z1+2y)D z&Bhl(DidM~{wuT2u)Sp+Ava3;B139YwI~y{JPO?9Dk=K*#cB2Uc%q!w zqq!MD=(V4U=1Ep+Rk&N$#?9nBYZ-ZJFYNGc_f>H`+%Aky!BZ?Mg&a6>?NwJn6`fKH}JTE@}AJp|ccU(s< z7|H0*bUt=Wg(sRnsX}njB0P)f*c#8N<-%bDN0av*d_a%KtDAPd7TuSNa6-DRn@GXm z78de{a^Yycx$c`JJvuGuzJ$4_@5p23?t5cwwT%3%|7>AnaI}iTJ=gQ_KIVs~4c$9f zv7EZDD#FHvQ{45=>l?mglj%}sPUS+U|Lo`TKfAk?T0E24PJ?k)QNYVSFsXPzy22jN zBES6JSRcz~Cd^?)@j5q!75{##Xu(*yP%>K^Zgqog+H2lb$- zv0k@O!9UU%`0h~+DS{<955caQ9*|;-sKeo+Lix-%Pnb}NoCpVH=FD+IS>~Qy&$zfQ^phxYm&NPex^Y*j7PjwEPI=#|A(Ih)vI*O0OErkj&!uUH6{vAQ~OrpCp>Wy%Zk9_Y?7bp#{2 z!5SOYS^6lXHwDWE1vi@J!$~c;5M-NlQ-_@w1L$X!Z1D)OV2wHQY6;`d{gI1Yw2Fgdwuq~{u-M!HPN*Ti~F_Eae8E-_+&`E|ndCDW{RD@7ca3Pcb*rCUAl|OcP9l3Hw#4|qOX@52Z z0vOKsaJ-8py6{f?3;AnoAsGy8|C#2E}iV4Ph$?x%o$A*%!;r+eaS)4qxZaGjN`AknZL;8WyYy)V6OZ%yYBN3!YCx&*PyHwuhRuwld!)DZG*DQ~H>DT|^h)chS+b zNXW^NoOT`A4N_8BI4);V61)iaTR-CA2BHqM8Hc_D2q4Fv8#ovvJRxycrRGO^)Jio&$&glDZyE4Hcu>ZApTef*I!!6l^B4YWSHrq1B z^5BzpVz#+Z$)0^ubTMaJU&2SA*V?M&cW^=)th?a%$?XzzN?RqG0l(pC)se|>l@eWp z@2mh6)YF{$kT9+StpQc~ObI}Q$TH_d?*RKi69O|&)I{FBj5&om!(|~xpb!|wQD#Z$ zV5*r@N(L9W9U110rKFbG`bdeZVO>Sbfa2F|&=i=EmX1Y<=>U|R&bl}N#gg#4&4qmT z(4f_ZKPlKH5399Ol;}YWo0|A@wadd&Q2IcWM>7hTtd!lC5>q_3I&W$Q|Sslgf)=vv?LR8=kU@H9& zT0A}SL4=>=!=CS{TeztsH_Y>B71CkMi`&lvfpjF-Cdx4BC*$ga)OECsTwpvdb^#?C z6UI1|OmDTg9NOF3FgyF{r>=ANu5_x*iJ3Rkp(8?D=$smnfE}D$A`elE_@xbrzW;;j zX*>S=-!s0#Tl{cc%jt-G2Rwc#hAdBVhW@0g@+v~VlQ ztVty|w6&X^uUZo><D%JtasDP2A{9 z*z!_X?828MSfb0!MnqKn5Pl&sQ`JeDS+3=-4oy`aTr2Ib?d6*8T^@O=eX+>NL1Dx= zqj3@ATp)TQ9~ZyGfG#jHa%htq&V3U%eOE=L`i@136Ds4qa*<}L} zVi|Lm5O?GraXc%;}t6R%+WVtx7!0nF}BJu8`#-bZrE3@~FE&(mknTF9f%9kWhro#%W7S}ArLXE&@mx5VAJY&iKhz8-m6GGC2?)=>&3 zl0J6DG2~-QR=F zW-r>3rBXP?>xJ!bAurA@NwZ+L_7N)|dDD>mF1`a8Zwv;}ykW-|0q#liI7S)s<_Q41 zdz~AC)=0Ob;}!vP5(p&ls3N}QlKYGL!>A*poMQ&KNO&^6U5ekTnYi$ieE|T3#ha5X zGaRE}njPu}L>dT37Z_N4&IF`wm056^2G8cl>f^pguu^k36m>x-j)qA*(Q@=Xx^Nou zyOm>jHB~+l&pao!{rcE2ZqJ}bd&=4I zB$}5-3UQ?7JjF$W`Vk+58{chE?vxn{FRk+@1bX$Vos{X}CCKuqsHn&hd6ya19(KG) zFNzwJcOJ3YcvVjn8m>vua5A$r#Dd64d6%VDB7+DYn;9P#78D<-&df@bCZs8Fii(a3 zntG>4np5*XNOYt9tm#vcrK#TdxYa3T*>#Bof>*0vjcY2i?pBfhWWPk(`)hq}R3Xog z96wVOv)C$~5)X=c*YJa~F;E!dr`cY9;k!eun^UP#YD>>)R7cwEZETiH@S(HZ%Qb6V zp|Tu{P*f29_UlzRjO7|&Vuwdw`%@sgAZfn*sQFD-z#zeMHMuKB3X$<FR~P@rUH@%{MH zN~kMima`1UU43(Dkuk4#_}`Kz+PbW1c3q}2%>#%NNmB&V8XE&9IGs+xAPhZ^(|B#X z+VOgY4UUG8yVzO#Yt&T=z3Wt{U~?2z_(5d4C)rubZSycR8t z4BLCSCds70Za1!wz$7vf)g$d6kWu|s3{Wd9KLJ%@lEd*+PyRFm+o-vTSw+3j+6tK1 zw{QpY^CG;jtaJx*_1H8tgEpsm0meZQ=5S$f{!JCk2k=w7+WG$!69>c{0zQu~c|_^| zoe%juF6Mt=0E`yDm)dVM>;0AYN+Cys-YcI_x~>ES54k*eevf3ILY|YW!N}yXuiLXD zXRZ&T06h_BLsf zpFHfc2K(`Hke9}R&Vt2ib^yCg_i(%kSU0anxH^y~9dwSJ+t^?mH?L~*)y1E)gU=4F z->OU2fDNUJBS$Joo100%wLbJm!R|7aYuw^D$%!;greRb;GB)q3{CJ+Uz{2-hQ88UL zV#&FBzs9C*!T2)|NcWw%$ij6`sd2b3Kq6GE$O=ho4y#2-CXZW;TaPowP3q_)=1WYw zO?!&+>3zn1^egT|v_V>X@R-rSUVZj3eMs~|O%XpX{}>YLi3Dj^O(i;;DU6v+hVzo6 z(jk8GXXB!UnoxCCb(L=$*{&Vzob&Kf`Ib&zz}=DT&ihff1XToRr`*giT) zxTfm<<*UbPr0**GQ?Ie>^1==KWW?EgXFK#&vhBK8qVEjBHsqi^$==n~P-|!3*45}( z)&i*4t{u3tfjKojFoYEV050A+zODkIyCS9s#|K-UOf!FalIchlCGO1(Oqx-N`a3)~ zwjAZ-K$eOeYn$(la5J^E>L1l#4gSA;El8%2DtcPxtSq}o;el)7Eu<*ojX!z5$P{E& z4VTSXQ(bA02ce0#h^mw)1J;)smLyMs_mTe_`O=UzFmeBR6x7ik+uTwxo3V&j9Imy{-*l&1#Dl}~KhhsBQqei%WiT_X zu`w)M?olP_uPG;}oq?{NuZ}s_Iw!=66V@p>P7a+k2?!eY^5^)o`%>r1&XsxUzJgOO z%aet*{=HG5te&mZ+7nev z>TCKfIaKd%B~`7)WF?s_BgEXV@lJEGqS}?_t!qZdLUg&UOsZYQ>|_TEVlHZj#sfJ3 z9Q{&v!s1ksQ+vp77<*D8va$Mx50b%H?ujOs6MIR-%O(>1wCp4vd^-o-S#%+wnQ0fu zdGxT-Fd*>*gP;Jk-6W*Y(gIw5FRoP5-SVM4%d%6ioMoeaU z>@<;(5htX4*J{; z0liq`??wnm&gJHQH`sW+*Ck3s<>gWDZTvft+_4WVqrVG6eRR z_wh^qSFoW6yah#Tw_$xXu)<+o8-E#6vI}+cXqq-|jTE_+L0OL8z=$8Szq*O%|@Cs7|E@&yznt z1S<=2FHFcCcAaKEQ)Dh403t1|QtTFWlQnOT(|xVr*4S#2rpt`0_XAf%8Rg`;IHS^u zWRhQWl#}b~j7sw(k%{A#0DwE$Beh*!IrByC3%e~^JGB&Z-{!xyo9r`!l%Z#|T>reL zwrXlBPuX*7-_*34-@&O~_d9QsQ-h%L`LW{r-5^&M}N`5$3AK(?`csVHF|yRJI+wUdA&P4p9HsQG-vC&GVwZvSSjgjkOYbq zI(*wH($d+}S*NY+RWcw#1{@Vs@!&nw7u~gwjTgOHy*`{yd8rMI7^gJGSN_faP^egM z`cj?v$$$eZRg+OMNcp)~^mdUq*YDAVa5yT5K8T}q&6h<6Tmz$!fS|<3Tb0T|eODsl zQZxR@enzB;Vlps!nlM%S(+h~Pg`J;&D=>^YjO+8JIz#VIw12{-%P?UxB{BXJ!Mn#T zHzVr8Y%z#Q7OQ%_(Su6twuA3_dXrusd0LH$6#(;i$=mW0%SjZLxvN z!ea{@lk7?ctP{w=oFOj~BxIcCL!7R#>x^68leOdeOYNI4M*$+!iFbaLU$iVeL;7(0 z{?fobF)96f8)LFz5b+HW>)_j!L<553CNBr>&?;Y)0>&MrIGqp&9#OfN>ObJ z@ACVWN1g(pVy+%u{C7~QN+@y+_qUjIkSi*mkb#0bQtdU6j$EB-uYyFS+r zw2!Stf`p*#puq}?PLY)h(&QGoWoCVdCP&i*9}=$|+cPFpSTPko@lxy;OZKZBSIz+$ z7oh#zV>=4*&U5!G26N^zWg?kzg8xZ|w)Qj*A_y3~siDb%kNENdEd2=d^Vu8 zz$k?3O$DmY-p`|MIzRi%c@+FG9xQ)VY7S0W(#ZgaWbOnsgcXP!>>A9`b>PwCSIgXh zuRqVfyxN;5<~|nxbqZrklbOg()oO9jtQJd#Je{r3D)gvy9s3Fe9vV0p*}lY#0}twr>`aCQni>Sa`*LCzyx z|CX{)aSmBYQ|g;`A9f?DXgn(q5^hK2Ve-71bTLiC^6PWt_-kb9fljrbMxK+#bK&zE z^0tiQ1(sHc(nOXC6XCHpO5B_6J)9BS4)2_DO|iT%Tp>2wwudD=3UJ4jw!w7>z6k*; zmdh-V?W#yma+S66i|vbuTheSQrdo?!8s-hapkp9~C?N4G%=wgj<`(!CXaTE$SyJf0 zr|=+akDHJ$m@LmFEipY}GBMHNvJytkLY^JZ(PFg%qQ3EsEvdRzZ zA*#L_vbBN* z>rSwEaz(^ge);sXL9t3y3{0Or!s7^s&}xSl)-xu`R4zG*c*RsdQ{=82{L0ZXf^^u8 zfDb|OZE8^?OXx?h%#6|+_G5)EAqP9%oiJ7hY3djd(vI@TmCd-ya|6fVlul$q7cA2i z$HQ(l6PvWtjtTsQ!Vo*=k|Op$=Ptx}X+tT75cTpzVG9VfR5Pw<%1f2@EBjYfR>Y^; zixbvL|Zp-kyxi~dwa;drlQgX0Dm-)-l+#l?=f(1T*;qN4-#>89R&Q!~yt zdn&-p!+SSm>+N|XvRNy={j>m9W0<()^(i{a&0jw>#(}!A-Z8i0Y8omp)(7Zy@@?qM zLh!-c5-Y0rh8plY!yb^`9b8HKoe=(?UxeM;$lCzZ>mfdAo}(^KZVk@Znl;R8L-NmM}J zTVPE&g-F^)+^{HSxVJ0qWD7%U9Z!ypnC`iG_5&#qSrLLGq(#Pq%yOH6CePc`B#ZUc zeET@M^Vga7R&s;v7iVxkEj&`+LAv8sYPR1+vki8S{T zat}62GETKigm@dKQ7o=2njTqx?iBXO5~MyGeSSed;B~aU$)qt9)L-{mPy1_ztAkxu4wOvr01=qA+0?r=4Acm<}Dzd=km4=FP{Z@fK_UpS-)} zZRiU;Wm4Y$%#FUuYon_QGF@aPNr=n6o`P};@RV2ruHn7wMl^#O-_t(LOD`zpKHas& zIXsNfI#~HNMrKCz?2jh?v1@I1bT$j-TDCY`UZ=~I#xWRRLy-Zr59y{#1z`Vk0()OS z)HMi15!G#&p!gs`Wg(BBUnmFWUv^Adz6y}!Cx=8*ATh@MS74W15h10x$v-mGC9ykS&Ilag4RNDpw`J1^xc-47hw47kqc zuFv(}6h6X3kNFOKZ?`?Z_#^}kN$1CQGK5=%G<8(p*HU?OZBX;LntnYHqg-wmjN zS0?EptxZl0Pjqz`JTfo`7jgfVa@`xoq=Oozd~xY#&fLF=`Iwy_X&fr>Rq{Z5!FVRU zMd?gzbyfHx=*?=>ct8EVd_H%VWsth&erO6z{a`nc&Eq=vr{<})LTq|#a z#bqV9P;+d?3cr6Pp5p5=XPR9+4(*k%(q$s1M@QwVR%#`cn~yZ?Q&)h1UBpt4BHg;e zo>;Bkp^a_tlBR_9rdy%r9Fd-hVr-3*C7a7R%_^7RirZlaow*AnxFQiZzuiUAEL&uh z#ByY57m7V?YK^zAC43HGI+a^R&H=WLJdukcSz8I7&K>mBM;p@hgUumJqk(wIU|NOVH%q%bmeX@CmZs84{aBsA`z`s=zTZ(Dw za*D*^+z}rBGg>1m+{?HwnNUZ%-To2j!odVHSi6#bvL*U-Yg*0mUZ2!YDAR`c)IzM{^LIMG-bNg7cYBA8C^Kdts;ZSuiWg*l1-pPT@HEJNB-AF6d}2E9>wSdZ8O zq_7gf#Ww61GgQ6Y4HeDL8q#26IN0~w77T9cDtB&{^yI2SOMQ z!j`aHbB@_sx|JY$_HEAXv} z#7Oz_%ZP|ah!8@=fGllU8=}_2o~||F>a}OJ`NVLrxP<1)PLMr!Q6WU0Xkva7T3KD* zVv(m8H`MYZ+|;^75+50(2x5{FnTU``cB|^e`hoay(ZAv2^megcq?hc5Ne~j%1Kw?j z33frY*}2o5;r&AWogz#Nde zK@gEKV#)E>(z0kPu@DTwt_FW1{qkQYqzYCc7RYdDT-x_vuTgFuJ|39&Hk_Q(S~eAf z9Teptm`j@MN%b9IjoHX~j=7E5(5@57Qq^a}TqeFI1Fr?=(3Ub_vr<$63+Mgd7LS=7 zHajKY4>+r|veO`lE&7M^*1Rf83leY(-ICOu-D8}53V%+3j?y z^GrvQL>6ZMU7fG%NqnUm+judh3#*|==nCKqP_KS0303May7M8(uaOOsk9 z($Wkd9zal}zqptlb(@JF#fHR&C34}H0z3;LBG}|%;2P@D&AU!I3$gRmo$R=jM_J$RSMY&Lv;?Qg<$`KDg=A<|-pU;Fa=U#m;u3E!A;Y&*qQfYwM>?WgTgG2+Ii}a#&uOA$9~d-0NR#3! zl$0B<;abkH14i}RBd8E7#){dKQUVg6%!ZY)1d<|Vq8v>CXEoUte!OzeSn_yqqyYK*5q4$!RKMuKkDRkbcLWeVbG{+6y z;osSXm}dno*mP0}}8r^;2OHux-zKt6zHtJ)3 zW>FxE$z}=bP;4aI75nyv$C4p$M_}Om{)*dypQ_exPS_}p`b7veY!-_pszY*+YBSf(DAv?B#&MViPPBdr|I-`awka}pVD-v?az{k!q3$K!Tq4>ZFDeJVUE-x?8`xtGX*%5BO(#C3nW;0hc2lpf2rJ<;u8#PWNsoxqVGx0d1 zJN!sWmD_lO*Ipy9uR15tIIElgOLmdt{*6lM8(urIh!GOWUU5Fpv3W`%8b7P6DqE-_ z+c=JEbJ`{CcN`wKb@kwPkbQ&j^Fj7E+{@RfdaUlTkt>G_+z<@oo`KVK-q^unt~Y@b zxoGUxYiP!Zp;PiPPoKh_?Vuj>=vF%DKC+K~P!-kj#c{iIAn%K}V_BF9@bP1B@HkX5 zd4g`NoB&Q|-bk|Y;K6q-Py^7m7Q)jernqar>*f-H#Qjd{3Yvv5keh)o%{3+_R>Yr^ z@9Q4}rf7U>nHW1l+YLv65c(2`jO8{N4d7Dx-#1a|HolzVJnLVe*8`867jluyeh9h< z3)Ux$rDD2s-GHXndpyy15eyQ4`n!-z=%M%}C(^&pCHtYvLGERB!p43SZ%TV5J5H5^ z2i4!rJJ>ZpHVZx^(tvtQwqXU=o1R!)@IrGS>$+M;E@d9vPCx`pA`5;|YWl{O48C}uh063uNi8fzvrLE;8%Xpgy@5n!h3xRcc3SZpK1P!zY3Me-b41vG z)#yTJ#>zhDwmi=T2e4eFn^=U-mc&vQNIQZ!c2K@?Yt}Y&LAqgOpRVS0qt$&8C-vFp zr0m%n=WWB?vprupBf7hXh~9WEpC$ z_c+hfy~cqaDoSV(F# zFxZMGJCTQ%XT&J!0ejdY22$> ziId<6_{G0P<5=QggVm;|tV!r0qnbgCitUYcye%h%6NqaIYbQPc%6?ksv{6>GN_oR} zVEVX5<7otlh=7dBw03A1oG0k%`yzRD3+?5C=iIWLHz$xth&qzTx`#MJqYMo_vW2dU z*IFiM^$EciiwXb&pEMsPi!<&Od`+jV)~iAwWJyhT_fyX*ltc;=$}tf{B*?0iB`D{H zQfPH-ja^b2I$_%fC3_jmS`jI1y8@#$V_!O2KJ)YCyx?Y7!s_bkg~+0aInQz}(y^C{ z{WL-P5Nh6O(i4q|gXP*noi0(UC1Ok0PNpq{xJx2R4S_P`dRWGz|Ni3*@_Ua!jj?!| zL|%LND7D83m)Ldi!}h5d2fII_?%c|B_h`E+aCkjec!3yj?A;Tb@&XQaoU6KGL&Wbn zvNStezLH@vR_vKO&1j!VaIX;i*!i{Xrm32@Ky-r^cO8jae1#9f!@yoT zF~sr2h0@)d@(B1_*(pG3{9TlHkbwpM?~l#g>>*3`vl;FQ%7j@rss~ge5?P^7jtGYZ ziR(8Q!t>_KjH_W7J0^cfbeb)fEvZyq*d~cSES}Y9beKA5$IB z3qI`ih~!C8HnJ!zSQBD~aI%i$z4r>=&mD?Z`c8U>on|v(cX#Ws#v8ZO{EYfXVPSE7 zA}s!K$)|7pb+<3}H;r7-2MMx= zbU=rn+BbT~-G20$T z?y)2Fa#&VgOQ}CAxQE1+5n{}5m6kDmDiSb`%8-`)x{tW*6+T=U=yWVmZ2t}0I%Cq%dRRDgN z&~o;twahAoruIgzT+kV^nx>A9m=e#Vc1J#IyFSR_^1JW%oq`q~1WU){^r}63gq`*d ztnLo^;R>%{=6y_Fg;{7f_xCrW2$xQBm5mf@qH$=@K=_3A(FVd#ltE?$b2n0Yo!UAM z`$Q-%Fm{3(ZBF5=-xQrn_+*86?eO|JTNhUR&pTteCSPNgsfLK+Yj~LE1W=RF>r$}r zi{>4f1NAh3H&bAg6ep-;f+GL`Qxj(rl{i|#; zNL|pk^aOzRBRiU3c

JNYPxg08E3rnf@jKPt3W^LGmwcBWaK&Ez@|gcMsM5zJ}r{1E!5S=EsV;J zOnWq)oXqT_kVLn+yR-q|sC{P|ECURE=dcs;_p`Pw!t*B|Qhkfr zW>41S(VU6$-CBDIBK~9K%bU26GIzzQC)fIhJB&pqPFydOZe4bycZ5X)oK%sj9|uvM z+Pm=24Q?e}+_We&4zV-8>d2mmHPNTO&CF;$|6@Y($N%Y^*z_#IGNqix+y$;Q7Yc2# z;wP{=VPQ>(4tSN{qEEzqwEj1U__esQ{4zMR(~)uLFu;Y;wLWk|JbO0g$v+>NdMsPT zRRv2RK02rAEW2uqsxfEc0+mb>;gFN#%1RzqO|MRaa4@H|T%gAx9%;V9R>TTclm!<} zKfL24#cO=N+^O>?8I}`PADnKwm_Tg77v>@1g;H=*HyLh;L z{foN2vH0r;V9nR1LNL`EBDkiIo}gmGEP^r=#y%o(J^_T1%P|s?1Hg9g2MgUz!%<| zrWDze*YiOnh+I5mo_jVd>{&9d_Fa_=b;5n$19VMXUU0P48aPl?zbHV0B!mz1pRLDO zzkm0%W`N_s7yJSR7X!at=A3oxPN|l!M8U&njfT%rn0+Rmo9mq`E?6&7gfFb%y>Q+~ zm|b2Io`u7iq*DHmrN;=f%46U8#p8;wMKx1l!aPx}3j_t^j>=ItdPM3RUx~~Zo*^sE z|0_sp#IPk;3HhN>T%V(;m6E`yeF+d}A8&kN!3Ps@s#>jx`cN&_%8+2NPNPTJ2iI@9 z6OeVor(aZ;$G9$i`9q_wbKDqhkKBlM1G28CG);&)3+#Pl!0N`0NUTI{&&a;fn=AK} z<-=GJ{KwMyzVst=6#a3Y8(Fr#oJ^tZ%+Yy@akN$)tATrbj73il;18uQ_$;#a=+1rJ%|gWk|f46l7ry?)lvNvmHlB?Rc{PDzvY<6amOE= zj(EYa{oD-T*I0*dNb`U|oH!_1C1tLRD+J|0FRKq}UtI{y7W&y0g*bCSIgz)nPFHrO zrgUFnHr1k^wrc<6UtkPSNq0dJv=cRNk*}pc8v!bc?>M_XQ`Oqb7>6P(Y77t4s6DhTeWdGl#R(qFe)wC43fmk5X>r5Aw+ElPFT?Lp%TRc8?cP`CkZ zeRFYhR3-VF7G0hoXn;M!iIrbskL}Z=GM;^HrtN*L*N_xbK_*&5|1oGCsyeuOTF^7? zA_9SRc^sKE1&Vdke6qLD^%w5*y6(TYg(-wAVp;%yX)l9sZ6{J@6eqUhdr zYw>mx@0(n@Z%9acO+OD>`ObxtmWx+luu6GZhrXl#kr47r!o5I`PrHu==`puf?za~2 zOWS>0EyOlu4>UME9yHpAY|gL;!WDbajX82W{kMSF=(HvIlQ8#!herhCI0PnN?VFzY z)~`?l4A{~9?U}Z3!uOt?SToMtJ&*?twngY4IkiSr2d%X04Bo|A$`e`-+%5~*>4axb z_L~8VrKbW);nnI_=8g?(|HHickUL&9t2y`AJ(_A?V_;)J=&+XxV_#`hI*DL0xZE;g ztpcr?_=FG!vzf4fuy`1@A*&sKz&fHt{{5p39duV^89027fTiL5wq1$p^J6R!{q;%` z$tyht?s7T^tj{wAmIw+9w4G#tM=OrWrOWB^{w7_ZPAMfXQ64iGH&{0XtwGd`#qLTE zWaEl#h_OpsfGtg|ZAh!l`%UStAmG_7$*DbwI}3*r;tz-O$eq<2mhH;rrA z7})a3YXgh3Q$GQRcSfzSXYBm07W3EEp7%I)ciYn|3hhGgmA&~(T3R9Z$Z%#bTZZMZUWT}U1C!ts0ftjy z31l5K5dML{rsO}H9a)w!?K>KSR}f?XEZu1K>$6r>xgK-mnqI8|M%lXcMmNyZ4BP`m zz{9@?FWO;p9|URgb4WOf)p*Qziw~7n%%LDr1!0RiIK;&~|23r}NYZ;X#Pwglf{4FI zNuXuDr9Hc9YKhHSPQZ}-1W05G>|nLJ3_ez-ztJAAXs_jgj>;%px6w(TAYQpeIKZRGC<{ZJW}bCB-&c!+}Yp+PTbze5C7#`9avD9OZ$%vLgox3 z(6am;?Jf+EOnNr2!gab|>t$}zs6+Z(L<7)H;A@5PY9@mLT{0%cxrQANwlU=Gh9P9%8bRaUEO5e))uVx>j}T$ z^{sZmW4DXlLG^=@zchy)9fENMV|py$XuvRXrZGe1s- zjTslQ62SWtwlh6J+Yn0j)*%oY-{3!CgpV&h(SWGzCT97AITP}oijYrP@rs+kcN~0W zLQDg%P67PB9MxkE8~g)Sff@c=3IX?Fxb|E7tY2dPVRw_K_&24m^hn+2G474;NaBRP zI(hh;l3o`r(P;^2K0y^lnW0H!5E?*CvQ~t&kZz`RQ}t9!pK_jxI=WXPBZ*0v6h%Y? z1FQs5HczP<{bqHyq|6YO$yzl@v;v1bFaO1>ub#axd5+Z>;(v*he~tTz`rY4_K3Zb! zcCiFf+=K}6bv8}67dT+#7zn^IG)zWl7wTUxyWIO5T8~moRJBAiphOKSQj`9?TKc41 zOmPO0#=6h_Yl)zh_7^Vql~gf(}TacXQ}<^2UjSo-sL9ryFx?d*yx~ zI5o#lOawk@4&1H=4ygYRkPUPI36U|H_COnfk=oe&eg3V?=$@I!Mw&*BbsagfVG{)%DBp6_iF&v>Ar0umxl1HS?9JB!efzVrF zMuH$mXpsGhQRivsq8nm`R)MzAFb~1iEu)sLc-tpWY&6ZQ7L}~5w-=Wk@vXG0RT(~S}}=XS(rkIi-xrX0HT2q)dA_c5$b7(0)YYJM8MR~vgMj*(qG*@ zBeYQ0Z980IwS^z2V!M&eLgb)c zT+%aJgCt=ivKK-PM6(S@kn7ixtBlq%uesaK$vka_faty{<&IDZvempoD;c}jf8t`o zMq8CW+OAY4tD4sg8<1?GCNjgC6BQ@kazL*>ERt%?Oeqfm&_D!0!2BMkrQ5pX_#9;> zr5dG_vlAr!y<3>#Aza|FYd`=)AtcmmArTmeAjuHAj)@c!*e&viRANb##kxo1W@b$w z0SiPESQQA!X&n=xM3LZ<;*!rA7k{zj8x{sgz9!PY0|ugE%W?$(Lf48OYWZXAnS&ldgpg`+$n0mLas>%=Ynp+&iY zdS!pHhCyklE)Fy(_0x+(SFsh@D_z{%BA#}$`G~4ldp=4J-p#jogB+zvX_{W_r_d`3 z|NLv(p2lsgl>l*FpCy3cLI$yM#!fK5%6d&Hs1%_KtME`d*yEN;Ewe4aWv`a%qO~x* z(;do7BrG`;a@B*0v;Pmnz`6o~Fgk??Ztkev+;u-g%HkpaS%(RU+~0+G)AeUuhf)7> z(694tVxZ@+VU-sT_swCy`A^S2WVW%CSIiq8B~fI9IXTt<0{}ojwy2w!{X$wP1ET^e zU8FeW(}pzQxz-xsAd61`Pjg6xYy#s19vf}~49Y(0RdUp!3$k@q=JYbJtobc0fPto~@WLmoe)Gkw7|ZdzPy=CK;PD_1CtOJvw)^S0Y&;8ZHLM%<>|T1<-11;>!6+!O zJqN@~kM7*9$Zw+juh~+DykIzZu8aJC?&tqt9OV35 zeEjNrS{GWDi<`ct=_B(Ztk#uC7#@1coY`+6RfTft!uZEGhGwxB!5i%xij5H4Q~(n; z$}Z)(Lu{HyRN3i!Yk)6UzeqkfFu=}K!%dSkT3d6WrluAmj_r*`3QwCo_2HCcD7zfy zUNW_71=H9Fgl1qgReI?i2bl3#7iq|HJruF>$O9x+tyymy@o~t!o(0fUEJm~q*BjYV z89VHc1XM!}Rs{J1Dy@%>o)is!+Bp4jP`WcYyk%kQ+sQ{PVJBLL)}ggzC96NJ4qqe< zF-Kx5zm8fd&!pp*dh}r zDsNI~H!Gph#S>Qymc+YW-0Uz{Y35|k1b`uPI|_kFArc{Y0WzZ^ick2@S*?Z=f9?mS z;gM*6Hmh7-_BE4z4G}{`BZv$Z&{M$Pp?Tjh%No$}s0{>I*PXNZBXcu7gdIX-fSzH! z;^q^3t#hTl(&R9!O6~GbWwCrJ@ooAK+^4*X6mJgz)2=Ye{Lp4TOGdYiM3(FPHw36n zCZC75jS2Op(Ga26ML-RHDg2-nkTA7#0tQV)Q6z==E#kDdbwE2w^1a`)f^k}Oihs}~ zAdaQ%3oD=Hs@hM)dxF3NU`)gJbj4;4=npO@cC{^pvWy0GoGDf}=909FNnids`S zo*ZFuwWqRD0@H(Z^_6gX%iN=WEqreeA9H;{%Zge-;$M5M#C;w-acy2m^ZZ$us=Lr zFx{Vz8;|h^l=1j`d)wTV%C)PU=G9~dY~S#RaMQUgiVkQ~dqCZ6a&u_WIv@3tdCw(BAs?FYC)= zL!FCr!{eD8XKMR^4O3d)yQ&Y@*kpcnEnqs^0S0dY!`qi9q3|34>u&!0uM_}cee_|- zL$p$Q?WAbq$0fq}PjeAKKcUm=Hvr9}wW|pt0PApIwdCRWN`)A#s6V^C`W-?b3la(|q zd(I;B|0ZUv0+4Svb_p<@Bt~eUA9yxFnBg$pV{?T8G;CitbEWQz)H88j9m2|tIe;uj zEQzsbG3uDr;SYu-N_od$)iH#`dWL48fu_Yk>C(*0Mp2iXVSr;oD4e@{d1eKqFAlBS zfoT{zN#-^UkZ3i3?X&$pd^=E`N)YNb)TPeiK+#-xPSJFT@XU)rNub8tCYX>z7)ir0?E$aycph(00ABjMNYSTx`w7teF>drLx&aZv3pY zpK;tOjIm2z-jm)Eo{jtBVfFmfqa|C4cc%dW$WZs)m54^WWxJL0(a6>dqabj*6J-(E zXzr28!t3unWUH;A`WI~!RNOr-83F=8<5~$E#jZAf!8iyJbGw{dzV-THVgv#p;B6Pt zM1)NGQ}y-Bpi}@R{S-31P}mW zGkBnfSb*RdkqX@CUp5~8I0kALel`6E>aRn<-J4P1V|UnR5rrqgm8zxSYRri@5j#S_ zr^}(>*5L@y_$GAaWLVM3*4H8D!%s(S3cBEO>|OZL@o=!^O#}e1wY$?T|Cgd1$C>dc z!L*<#Pi#S1QtU^H^H}v8wyh_S4|C$i*S35S+KPu3%}A}HE`EZ;36pde8{EnBj9!z+ zvEj>?pFv^stj-mwp&I0|DwfYKJ?X>h;;5(ZdB_=7iew>ZciI}F)B5=Itb#>mvRtU6 ziz{Z_PNHI9YO3H8fPM3SO2JMt-~~Qp*+6e z>iluP$#CGDUEF%tC!cl`izWoqd4l&0357#Lyb}z?@oT&&sv?w!=XSdwO!-6{CRn?= z11$c!r6H@_qQL)r^&x2i_y~HU>n69$tGH@q;1h4_2`ialzI%HVe(h5Zx!$T#2$vR+ zhzjPY4ep6>cdLZ*Smin*#ScvyBPh!&C~AZD>frdt72Vrq6-PbXAg_HA0x*70U3eX% zZ(hodj>z&m?dx@7H>A@-g68OUuPF*+rwWH<*E{=2;Gk*LL%#I+v2|V_#$VUo&Px_} z-I<=_(dIsW$Ma07Nb^lQRK`I)EOA#vXUKRc)7nbG(Kb9zhvnY<$AU6)ae6e3$cWin z6TkiN>Z7~VXB7#yZCA$Vetd{3n&u;@4G39e1{yt^Sp++F^&HB&Ls{Sb9BSgU*3V}B zA?-ZY^Ffh9yzmk*6&|lF{;AqBc0anMv3d^8UBn5f&ma}C*q>|)0QgU)8bD-M<1GWL zb=z7b6Y&~uCy%GfB`f70Sf2ynse<0OUhxCywz4xu!HV#EiYz{XjRfYy4S}X0)8l?L zZq=4O`p24G9)hFD94YU@=K7MbX-?TCjH;|ZXKo=T#ZByQ+Q`8qc?km>jFK~7b~R8> zsfPFTZ(Ri&j6>cVwDl=KR=t}zM`x#BJ$`5l@2Vi_fp?7+wSM`B-EAW)JMf#Esn#cES3fW zHWurQyjInY1QlE^E8E;oWwhA=KYT96bWOr^#*X`~UK=ct`DI~*2}hVp_wMTS8*V}Q z1o=7!?VIl)3Tmoe61n5`rC>^Hk>@l!&jEv>erJ0M zM`y^}ufEW8*ftV{zEe{1gNv)RD(CPd$L`9Due=yR6SoatFm_qg-fm%(#eEX6&__#B zo+}!qDF8h3?g)A2=BL_ZGtBt-So+^jJWg7Xem-`-?oT7I#gdenq>@J#)D^w7shS6J z=Q*;&4@Cyek{eYRIL%y=LBPRS3-VSRn>4l6s^YaXQ}AjX{i!UH-nFe%YRtG7aS!iW zn@#QF{hnCDAYQoDqVJOK)?M{K{EworT8lBpm|LoXUtKVX;Pt1!Q-~2mvTRgp<3qGc zrZ))U6T~<47Ilz0Uw!&@eNPuTZ8ofAIZ8Y>FWVSBx5_~~TX)EzvI9%_yB6kxz|J4U zg&Xkz29WWZ3EALAP(%<>GlTk_=nOS|vC zE%pEB)kyym7y@E!Gn8j4v*W>&2$QIA&s5=UElPX{2LN^UY?^2I zIV=by4xDDiT>P4ju}&9z@Pz5#)e~A&ra6Slau~Dqog1OM7Em zf&mkkN{DkM{b({7l?Y&vD*qv#A{uc`pa_|g88{Ugaf^4N?mVez`%c~eJJY*7`}VN9 zAd?OGwe?QCP%o>!9L9JYcxTvL!i=w;Q8Ft>#AE_kdJa3M zMa`=B$~vMctNLoZW%GSQM*e*7jy)pR0Qzo;fG?N4>|FBZX4~YW*<;JDgD2+X#1VYzmmjA?245z?|so)@s^Z{*$Ja0bt)N9Prur*?vBxWSgQQdL?%$@kQcAxle)NiU;e2 z*ddNXJ$Aof`wLmyX1`Jpa#$0O%{&m453$^G`7DKPjwdeXeM2cZpomNZd~7fDcn3&r zwz&5CX*2!XH}kNL^N}Dla3CE3m?<6r*eP1{;3*3f^YQJ=m7RP+EG}@B^VN;hmxt#x zSLb9MiBr7iQ{Pibkp9P8J=sxP6lJD?_(tt4(J8I5;4mM2?B5TY^DacZ86#-}qPmS# z)&__It{mO5bJOXNBoBV%JO8%{WE4Bx)(y51sKd3!xG9@duXe!b5~FRIZPv$OEbONr zeUoz}-g`7)??u=JV9jDv=ZZ*9-svaH2ceSMS(XjqcBlOoG71b_bG_gD}v zAOPX%=7>P|flt2PH^EivB7SH^%~NqFi^rouw3z&W#?ctaU16uVbdMfulIkxX&B7F%w5;f-q3ed&T7)iyG|2rK|Gy3 zeNiA1sAV%6-+!}N@4bi!13(r}6p8#jeEprPTjjAc`m=cvZDqGScl1l4aE8%{w&%ac z`W~SI5}AF>76dYl2FOTD{oONJ7;uC;mzDqm05Dd?fIz`ks4j5rtZfBLSO-Ty*W3)V zvVK#wATTJ%Tq<+5Hu}7M^Y#*dke7v=^k?jpU>*J4bHa=q%%CJ3NgawH+GQ>#vLq`B zixO_k?VwON)F8-%;1J3OA;QYuOCclE$j^{4oNOl?P6gV^s68?S(&!bMs}|`l8tZZ6 z4~M}I*NZHy%Nl$#(L@JTXrE#v|GKdNT@OJ%*qAbdV!hMf1rq-`-NSZd_2?y~ogq5w zemW}(y%~{a7uh5-{NSE`aEqJ8s!_E-o551vCLp{fTc&QuC-AlU%H@ z@PG&&lKTxXsd-&!2ty*DfwnTJD7<=xHN zxOx1ibME>f6_;rd73X~&h9WxV&fNN+ZN0^4Qn_ES$0Sjck+I+8DEBWQfV+%Gk-k&C z%lv$?B}goCREl(O*eL{6_msQLGD`2torGM*aXfIpNC31Ct*`s(q1~J~mDG4M z3<2K+qYg4s=c6tbI3+GcAIq2;aNf`>zinCfO*@g^b*27sb<$q+G2w)IlgfAuibVn- z963nu7c&$5*XAmTUT zVj+56fQ0)yr_SP)c9HeNomUbnUJe{b<09Z8qLnNUDWZGDzWXBqWHuGiN_QYof-8d6 zgn+OK!E~ufUpWrP{j;jbwKg0eB4|c((YJ=s}zau^CYztPr-PXg9^Nxg4$m4|}sf zA|Mb3JJQ2tU<7H||DBVq48zFj%djMZW*D%-^R9L!p_Y<0#UQsPDkO1iGJc&C>Qt?l zJ~LtE&FF9`tGhxgMN+9_XQnC`fnGJA|=z^~SWG!Zu1L^>~a_p3_7Vs&28;v9) zqtnahf`-`dNa)KlCjH&^q~@3k;DoOS zdmbTX6$3)gE`in}dA61I;MP~oZKnaWtq}?gNw19^_$ac@SqfYm0O%gjN6qV;#O$4h zgiM=(D7^60hF)Q6IQ)0T3Y$#wNbAIv!^c=&H4aKQ*x#&4;(grC`~wHv0Q^0{CcEcz zpFad(%c##UilNQhilapw8p;D^3v2H%(r$75Ow=Ka{3<8y_WD!+dVzDS(HN_gq*L{) z3n9YlU-j{!nFA2M1Q5x=OV(91AYcK}WeTkph#(>e`xx%~)g2>KC%UkANbP%TW$7-4 z!vHA)B+QY%^2b}cRs=Rdd|a{@njQCgdnqS*GE}|PWXg1t)!m--#~*)&qYp_EYIRMq zdlr+3NQ4EA7P@3bP^6X@-2PHSZ}Wq>%IU^102p{UGwG5gwcg`V1M~~=f?6n)RRI9% zA*{~#`bsU9PqkDaJpu4iV8ts6HQ?b2XVPP38^1gXJTh`jCd-0-D)r`9SXa|C#29+) zIyf4g_WY)&{z7J(Ij`4XvyC~KQQz^h17%CJh{-Tw1zrdBFaTveaIN8l`zM~D1^1T4&TM6V2_06fH_(YOqA>RJ0iN5<|30mi6h{9^K^~!mwpks2hL!ndomq?IQ2pQyjO6jtK45U{XT&JASC9hwL zrlaU1GhPj2Vhn2luuXo$iNV|^p?(aaAkS(-G1F#QYk@WhO^{2hrS*(_O#uZ6jYSbu zuyK-$^BPvha)*8VBD1By02^3zNPLKPH0V*O;F=k?wQ59|GQrK1CWG$zYmmsx4j(Aub2=~REky;rZ_3Z zs?egXgF0O88n&4E8jj-;q_CvU<96ClouOqgBx&qk3$+<>*q{waoxBk;QU*9thVj7k zkF%R6=wOW4C&XpEnPM3bD(wL}AW~(=QcaeIeWqvZRobaqZx8)=FB>L1DZcM89pDke zcUz6#fGn+)rGC2*nbeOF69yom^^DuS-DYi6aKzL$S~IVQXd0MJtgYW=>wbYI()BySz4aDRKv>`N8NBCn2;1fPU7Lh_?MhHbs;2_0y=Prk1 z#N$5bRy#+e18$UdK+a)yQr=OqM?WMDN$+{dFtDO$x3~$7g)5{M3aO=XWqTgk%2e~* zXK?+8WOpV-68h>CT}bX2Z*a27{|XSQV1tF?x@``wK!8~QF4zhKvQPy?QPb7ObUk6& zVX2yBlL?NKdZ)zq5|B;pJtaa24y0B{P=`VrA<7s5Vt$X(2#gd3SuFrCtAuffc0i0W ztIU!y1IdJySBA;hb&OCdifWJY5JCpba#D?1k|c+Tz4;VU5)YEtpo6Tz=r9o?gVi3O z-8A6uoCU{4>HqAWyPJb;(_OLBxtZr?O0L+9ZeTIv+*N|kLC+wl%3NLB+lC2dvP|Gjbn6>#|^R#nsx76PRd29bmKB zw_?3UUBv{qzRG-_DFPZM)Pgq-zEbj!#^9T)3cn)JtV0W5ja!F7ziB=ds43?^`l%N-u&Ex@+K7@sFWA2nJ>I~Qvs#<=PHClxS1uT0yQZ<2ZWx2f& z=ox0W-KoYC2z(1pDY4s~D+)nM8*HMr8qR|F?IRz}pRcTm|*eDzAbiHWce5 zLJGtD>uAk*84^b#e@`PrgtACyFWYlh4${z=;=uO4+TJ?D)L!)p$u=g<0|ma97Q4@n$1$=SW-OB zYt3cql=CtcyI&EV)aF`t#^-_o)08xG4}J_rK-m_n4Sy{l9`AuQNXP)=vck->< zL#hr(r;Uf&n8cIZ3&meupvGWFMYfwHN&Z+eFV2}$bDcfxA;SL1fx)jH`y7;bX*SX! zHmR%$6QGdKhE8X06ga1QFZ>)~IFZt^+i$A*Zs*oHjP<#~%2=a$`Ed;&`*|zYX763k z2MLk&AXtnTw%x|w154!?Tf^eAOhhBtYIUli;y7X#cb4xD^2v*Pyq8zqvdHEJ|Dj^^okT{ zone{eM5VfX)jCPq%PDMC8QCLs|vU(Yks^l#8hhR{b zm?MUj^gy{hEO8abdJNxZ6r|)}uxMXbL#f}C!Z_>!71=@jhG28&wPF~h2nVWUKa_ZV z{^?uzL->d?Ye#qt1o=B?t~e_L>tT)RbN&Aj@a@@&vJD@PaFeaXr6={Uu^5T z+Pb8Vf4%#7bfIma=_n+!xA*G8jqGQ4?k>(-Wt|EPa+icaA_|2>Pl)R2!-b+QHN2Ts zzlq7<#Jc=5Jc3DGA^YPhQ6_7rZG!;8Ppog3IJ1ylj3c+>n9+{%^tGxlFL*mw?I3KM z^g%CuNb(x+ohR>`6Egk)MMwTep2>IJLfG?fmA z{^Bs~BUE6QTj18YBpgHn!5-htWfIIfJP{`t()931pV91CZFLC#9O)sy&?Pn|3X47C z#`BPekpkD~bha+xK#1TugM;V!mv&u*APFTBEef?Gi$Ad}(7ki|<=b!~Qou&uc@A;6 z)DEAZZBLrrX&2B7E1^U;T@tOF8&qbOlq)?+&bV-GDEm!P>uvOPm;SJ*n$`9@1Iq0s zxzd!$LgotF_HEMa&)sNJju-;y+IT)LH?AkogPz=Jf3+5;X9O_h8@_Pq*N{p;knPy* za8e@f<0yZR{^dTXH9V;}a%&IYJ``&|I~=EC`?94h{1;a9E(IO%4d1z=!3T>wzslcf zyL_O&TD5i^3oTLz-|ovggx&hx^aTe=>mwHEj7i<*9iA-H|EKvqL0?MX?>} zJJ9<7RrTeFA`mOmURYdQf84%~F%JLak0 zKFX@BF9Z+&3+jLOYRSb*dD6K?g`0z)odio8j>Qfrjy#eYJxyQ@!JMZ-<0DRRo4OX& zmepDag}jxTJnJ<5BEzfk6MB{`fB!HOAiUU^mz65YeE_cd&eCTbN5Y$1mVsZm&dySw z?0w*37G;nzaioKdn!69+{}sor*ex^={0%T-WqQtAr~d~5La5)v*9 zYn9%3t*r>_nnU6s0f@u^pz9)Mj|Fh8 z8`2OT3xGQ@nBbfUKroh4ymyt4nV_FS`Tn}7Y4xYnGZaL~e4N8!IRE;obvH|ZzP@>@ z?ay|`bDNjD!St3b&l;!N@J?Co)TLGd81jgf%zq2B)-i^i>fjmm4lPGv-wL<8cpCyeT4cz zwN4Y@{6SdxmA3myeIPDxfIp3@oXz`<^6cEi?4&C}_{Qt}JiZH=8H*23b-a4;him)#(QWKdr@;qvfca7Jo zQ)0vT$ePodx_yf-(mi|C^rV?laXcjR@r+)Kkv8RUQ8hTeMmCKb=2F?v@VcQPoWmePbe_4G^F`G;!}U+L z?Ag|!q$7u!b@$EL#H=>el?LD9xh|ki*N5#E%fofd>MHug{`$Pk(ONs7_fOGb@q}Qv zg<=9!xwo%(R^l*oSw11d9TMb}YR3U~IZOQjL z9NhBX9{QA?x}(AL0JD$kzPIT|Y;1E1e7NCFg~@4z z*=}&B+2e6>f`J1pk!qy?)o6Zss5M}xL2UjqQ^Vo}=!W7?$YFFk4Ci?Kpn+FYpZyer z?iYOKJ<}Q%X5z1J@*fFIzU*+ldFFzUdmC{31VX-uS6{~W<_nc3^J@a#N%Lesxl~bT zW^$mf4>T=v^sMR#^MaPmPo16)eXNHz)aQ8vff4J^5qaAjzpbFrql{tdZfhx>_B$;3LQ=$yN>rAef;v! zZcB$nO6wLY611=BrU_dDm&=Cv3jlb=?D+YNAD^2G{)dPR(5eIMBwBv+Hba3yDC~VJ_mbJ|?Gs2(XL0xet(3wocgFUavBAtT9+u9&gde+sHE{->r=~!HujKc7hDSs zKAKPB!a_uk9E2$(Qn-RS7Vw8f#gAR9Ai9KC*j_J9P2EI@IZ!fX>qAb6f9woXa5S2Dn?{J<9VEq;E286PD#`Y&T|q{&Pe!3Sk$c`}XIK3IZ)O&jzA007lsE z2H@#vTrnY@&ZApf)4beXzkdYbsKjsK#PEIM{3DJUfW}$yhwAYIrzfq5-g*st3SjeM z(F?I#6wiCTl|x^vY+AE`i!?_(cgPnvIhz$84sG`$HubYMzxXV^dlD)9-SD;X&_O^a zsslmQAMV+nS#6bq0Dg!Ci-aMCD}8UNYzhh?DB(HxC-@ZIwo}gsI{;Kf^ttM?C3Ptx zAi%Yeat!Z5G$M@V6Y7R53r&;BWm-ctfcAanR+{!g_vw;V zRxC$+ye!dvWXVL6im``xWD;d($uWqE$!a2DrZT(+OSAop7qYJ8<-K6&7?VTc_8$-L zxLhMHD6`}Nn8*oyf~CPcQ0J_9a$j4`^2bEl!8=XYu2{lPd9Ds%#Ne6_PAQVIe^m48yQ$!}nh zmP{#J=q9PQBZ1E9oT5es3Z&VJGL6Dh3Gwo}MT_><{{y_UVZ{xAmc!;lOd)pj(k{FF z+&L@Nj9uB2-Ugs4ZRkekpwLmG&D3E~H0cA#3NMSOpepvuNSeL(kUl+DxzlM@7^0ZjaBhE1)`T8L%wlyr44l#~>^PNwfK7*)Fk382>EEeTZ^1#n-8Cq2qn)mlvJnR z@T_q;xaSHaMU;ikl1}P;P)fh=35p_gBBqo!D>N?2K zO-P7z8%jCIbuk*2RWL&HZW@M3i<3kmAVwxcB0?e^KuvmX;697Vw7rC&)fkyV1(%-; zXNIL_XfMX7+t_9>k$(6;M1xouX`h3GL=Lfys3Sc@AW_!A3X^#rHw;j{ zJOKvSUJQXYViphAG8V*VEM^Z2G*K3laTXwxZbSAg05PU=Vl8pSS*u|R3Z=&&*_F61K91~l$fA=4zm)Cl!@&F=zgvf-7gBcLjo`*t=WEGe%U}y4RLjI z^ZXOfh5t*7k!*zD5*TmU2uY77$8%=5mnJihVO~cTL`@fg$AHi*t~1NoCGtWjJ1AIT z5B`o`u&7w@AI&wj;+plW)rRbfOVhEGqv;84-iRCA(ttjU63&DGwC^*I!h|FaiEA7p zGDHj!L;8i688QvSqO#WN5J1r@6QiTmbU~Zk8 zvxS4gf)PKU#MF5j0;|TadZJxwfCgA4(mb4J%!O0S@+}KZf2nUFt@wjo?fAP5nRg zQ|1|c$o#$#oHeg+_X7|gi^xK_Fs1eD!Hzq=*g*(LPPJ-4I-Fm2U6Sv=z$*~((kJc0 zc!&EmI(Inr|AdAZT6neh$0^qJvbT@Z(^(t9Kt#d0kZPeGVX3kZy`t_!DC%FsE zJcEU7|KE|u>_2~`%}?MG&K2aXY&)o8(){>Gg2>T4^K!G~)UT(zSFxia^N5~wn``|4 zQSV9EHJsNu(%g{dzh_1l@*KLH%ld4C4(q6JEdfZ%h3}qRd1#`V3i1JDIJ3T93J?d& z0$sOftF&j{hJtD~x(}dKs|2>S>XN;Kdb`FdOnzGHi@vxMNMsm2aas!`?_t2v8P6HT zIQDYQRbX)%n3_O^2A9N;N_zBo3*dDKAGL&~u7oJCYZ73b8nbZe$8!r9E|^!gmR=T> zNsVcp`KBCzq6Qk3+M!Y?)O*7~2hB<@k|h(UT6qMF0DzawB+~KW+~7KE9j&KDnE?qP zftY!8CT`g#J9C_g0v%NOaQ;%Dw6^$;5Ibm`BV)CR)SC$T17FEL{TvYdow)_4 z#bsHCA5NVIkU1DOwkC2}m-F(Ut0Baq>;?Y~EwO4>b!Y=WZ#drzbefrI(bNs6g3uwW zI`GHY=s0^}93Ty^f-U!vN$#J`aF6|9_!3YeH!RKvD5^oxEF*2bk2OxX$D>C=B< z!E5kwR4vCekcx%H*R`^Yxw%-7IKw_-njVygC3)1qZBXWRvG-mo|gF^mB>Ue7DLUHE#Dhem(*ez|>?(cKjodYi|8lUHVmpRdTDWPo8S&4=_r zxM!0Z``Dkr2(atI%T&pmQN6rn;w#%XkH5s)Q%+p0f+|l2Y7q8B zG{6&}3}Shs=Vxeq8^2&z5BX_uhI*-)}oe zIqNLCsQ9=kO?j~=dTU=hL|iIn2^qpMeLj&-N+MWC`BR7T=Bew0n!*{gN&zg)GT{;c zfTAc005{u8by@@z6`Y|-W(P7R5ykdr3ybZq*8uQ%d9D0dp0NZMpNQk8c~i7mJb z+}Oq8_nh4ru+j8rb;d7lLJOET{{KH34+t?<%GtBcbT$tU{_Z>O+H5-FImQ2TD|1Th zw1j{aT^37PufzV(;ez=B>1&)Rm$1GiEKGzz5aahxOZ~I|`h8~yNPWMF>Y(GVl5Ri% zqHO%^vaZ310)otGzECONxjgt=JuMTc8?C8A`G?#A-Gbo#PC6M_L}a`221=q=sq4M| zYPtV4a7T?c20#VH67b0C*lC8q+wVe&j76a?{mRMQ4K^3TmScv*VC@i?!#KrfMKZ9J z;&_icKF;Hb_m0AB_Sgmfi+G>XpN^l3SmF|5nIx|62%RQM#zZK#4v+c zxLuX1n0gp~A|qFmCh|00hURJCfH;w!JftajFRhTQK78AkQuT+D#*J2enRU zTvC7l_PHR!NuhMjikdG*R9Y8&a&2U+nS)poDaS)XPRqS3TSu>sw?_Bd>-K+t$#1miqhSj6|20ySjjT9BGGN z($Z>7$3tT6B7KvT5SLI8m221>e6#k4*2Vw6UKi0n&f^x|u>7Wrx~*x8mF%t$3h-o=9r5l4H#}llAJ6y_WXh{bQm1vhnnFnUn9+}J-5y)jHEk`ZtuXG0<|o}l=?{P0*cc^r2E8!+5zwWdZKAyCyb?96(;muV(WmpXDNF_<#jtPA4WWfQqo?n?;Cz!h+WMc> zv5_!oaZUzsPf^CSwdTycJ^JqD@t24aTH(f-00rNRD*kjXq@)C(Z7tQ=p?B4dujX{4 zb$I!1)j{Ahp2ssRXn`~w806ER&S6^ntFmCCZygtc^+mayw4c6t5&IZ@TttpnZlhg) zW!OVJ=U~_JfIs`Kav>v*ip<$#{2XX2INm)^6Jzr1suS%4QZ+}gyp+r<(~@vTQoueL z`y{-n!uiVrifFG-1}1aHVre2hIWL^ODcZsciZ|Ph^X5qZ(S84?fkI#LfKolofp9`Y za2cv?1Z1#;2BAKC3RS@30||2bq^9n`z%S&C{k<*_>I4*7Q43DZ*JMknLt6=~}4jT=XxHqi4cbMpq} z8@rpDoSVw?q_V>N+|8yQE}5#MNR>$yvf!pgmmi+fV$wv3SSp!>Rkq?pnS4WnFLy^> zQGgbdT(wfEATC$D)JFWG${U%iL0aQ%DuY9NsPiYS-wy(~a^JxA0!O6d%d4IP=%$I6~P5IiknVz_ekIey;- zF{Q&*U%hFu!H;DQy1Y&@bAH#-c4^;h%I?K`t2)xtA8QFZE?la}i^-VS|Z?G^iHyb1@wl*j|i+gMDaI;-P_4E;F0)A&6;0xOH};F0iazCO zeHK;wckGN$!H$1EKAS@mhOZ4&KDe71>D2wne^9c&P-|sf7|F4-s-caB#3GP5q}aoz z-5c+8>YSZG$BNkO#thEO%)BHrtr~;5(beTLyLt-;bw+sy5fu!*h$3QjqG>NakL8YI z&Aq7<%azOJP9)4CN`M~*jYr0+`y%3tazVKjf%*_bQ0cUVv6+S1$N&P4s^%{6&ip&8 zB#DfpkM&uuJ;+;oSZBI=yrHk?;I8@`agARQ=ythN5SHXg5Z#I&vRgfqy2o&qJK(&< zrAwPCWqs~Vl~Q_E!7C4HAJFO3IiQ{1squgNXuCbyJ~v;fsQHM*Gukp#Mx8yPeI;sF z#EWfK%A^>)zi@f1*DjbnRp4dr%2{uD@FsVP>`WW#kr@?@?x9X-v1=LXWSR7@vqp*u z4juZhL18h26KlYm5Z)^Q0C6%4I+zyD(#fFbKPqM8t(*M-G<$pn0M?CWn%8nb;E`1t zb{F{jOVwljb#+F-VMfB3#QFHKMbCfzn!{7qweNbaneXlGKaX^0 zH@4gy8+9JM&vL(o+c)gperVA)&zMJZ9Gtm40LEGhO2NaMRlkE9`hOiAtbK-)`dn5! zWAGrl62m=Iea?5nh$wcLU?Wi#fU2tBVo#wV1v>_b(KzN0(-8O~?>7k5P_IHfRt6$$ zA148jcU_@6CM^Nr1&v;?y}W^hqMzOq9#wL>_y=Lg^}A9%1R(s>u@e*|OrTnpXB_CY zkO+rQbOIf5z1h$l7S*C)vOP$_9%>RsYzmXV55O22S*Q;XA`CDvj$Z`e6U=0%JWghA zciQL==fC=C*Tows*c<627i%8 zQLI(qBZ5QVVA&La!1616!F4Jh2!bJhNDRX?a4!!{#>2P?&B%^qi%9}$j`2;!Y;1G3L`IAr4!vOg zg~TAUUW*QR6h=5@s&1 z;SgVX6LxZhJR{%O(zI)^VME}4j;${uzJSgU>BDTF)D1CAF)P?=l`J=!efLA2^&z>a zi!!!S7Sq}p9$Ng;cLd99+CA$V`pfsKny|7ae1d`ogUJBn>+p-QOL2?&OWA-3dB)lmFeTg)+* zBI2L95P)c9Fe^Xapj&dSU#4+H3lMMd|F$``#Nmvg{9k*ck%07 zJ!E5Ejj9GDgci+V>1cq4a7(YtB0`}yvKM5B$>K=|$-b3JxD1vnSWq+YPcR#R?%w3- zH{IR1pHFl}{p0!1{dU-Mk_8&kf@K4)4Pkj#MFq;fqiZmo;+Wgh++c6dRwG;$EX>O3 zeiXn!k%e%RERR9yqP`TF&={A#lwZnVZa;c-5A*w^@^_Mst6zLU&%&}SJ?aUn=VR6R zWhv{%+pu|Uds4N4N}-K~_hWH$!>L2eb6%$c4l`}10#11`h(qCXk=Xun(j4JDF2iPZ zvN@b=c6Jh}#Kuab)H%teR%FMsGOxCkolwYcnr2X~ygXnxgjZyl^0Kn+nI5vcWXr|! zsyo5Sbv}}K^t*pj{9Sj~6yqaB&xGjz?hp438w)4&OA^jJiP=9o@>cxO^MlM;B|Tj_ z?$xs$7m_2S$!=+Bdxs`RR&Y6A`-;>V?qw`4O` z4Qcas93NeiYaFYa02D$J3{LzM<|c^$&6ez7u##y)E|14E5B_D)ro&!kP4q~*_o4x{ZTnCT zoED4sFaIG~UNIXF+Y=En9@+ss?;(Hz2^UpfHsF*;H82YS%m*<{18cykEH4cw<8H7< zxeVDtp+q;&m~gI=c9Mf~4+9Z6X)s3I;h0f?Lk434N{Q}c4V zDa4>y{u>ld-uih-;Pu^Iw_VpK9vSXBeKCsa- zb@9RQvBYhGw}ThG68K{R3XAIq*q}pU?a*yT^~>jyDggF!Yn@4SVgb>IM3OW%ePLA6 z5D-f2me2*yQ`^Y@Dt-m{1Z$9XZ-c{gGR9g&)1)7cu~8yG)RH341tU6}MzjEpW6bJq zYI7d(8XM8tG^_jv za2A_EBB6LD*r$(FunDnp6OxE5mHK!TfmXk;6q%oiju;DVfp^!i*7Y#)QOS&_^GqIo zbM{OrbcrGsel;ns*niYMV$EO_J57Dm!7Fh>$A`u*=cKP;`g)+KMM8VrpMG~O6;F`9 zZ{H0WurG93b@Et{rt?w z-j@;Y5g1ac9%+-t1XvY%x}BO3S4@kcTF04Ejf_7CbA?jRSiZr^sVdE!=PZDPNF6Wa za>XzRqz5+yGbb@%-~i(rTpw-e6BeQvxR)4LFd-sjofHGYPLTl_r2C(j=dM8z(A9{p zD>OD9fRD*O>bVr(5e|feWp0-C<-r?uQ|l)WEW)bHvP8-BL>NAFvA>uzp*oHFV?Uk0 z`qRaWKX*-sujHiYmN~Gehr;eG3SQ_n#VaA=BUob}p9)UPwX`DIRH7%_!_ z#^3;fhk7Uuti#xBxqrt6b_T_?5*R7lLI`*RPOOVtNE(fcJr=PoH~Bh1k)G|m6WqIB z&Qp;=@FF@u5tvDT)=>^H1Pb1F_Yg_sp!dN0zF5zqjD525*7MP#y?n8yILJnnUAXtCN{zOl7F# z>Vgy8v{Rlt3y$+6Y)0!nPj|j43mK50*wXOHJ=J?3HUCnZ8jJ6y6znKGo2fY#ymp53 zWMj{0y2XbVBj<5hcEJJ&1w#ND4{b6Y#CXS^mGe`uBquXZ#a1i zZMwN_3694|$Y(z-K3uK5BrT}dc)N=08X?ygha#bSzBEIXlt)aqzQ(eaux|=a+rnSw zQW^c=w)f}Wd-r~ZCR3HW_Ky0FTiBhsflHzn#|Jk7fXgkjcK$c5b_tp)Cf85cJWv;Y z?NK42FRA?L*R8t?%&FB)u8YtykauzHI+MQaFMOgM?5_mkB*z!G?5@}+EE4+l(&~e~ z;vhiPmfydxIVn7Df3s&i@I&6+l-tzG&TtcggscYj3#;Z&8U}u(tT*S zH}Y@0`0?ob!fVeR9^SgUq0dL=sNjI0{93HU-`^`U zEOuHbR}T>IXmTvRoT8Y%9x!=%iJjXY*ok$u2L#kB;0T!PM}pCigoYuNKyb*s+upuH z7J){1hb>z-M&7#=$`jbmE905GqBcTR2u{MwFT4hEf~Rr5{JIGc5buaQyLrMT?=g!e z{U1p(i)Pxy#}OR=U$pzJUu&T?;_sCbWyx&o$K@#di8a%W0mv?xe2+){ALuxm@r&%D z*>)YT{dBW}a@RReHI11{`#=7_nTDnA9^hQQn*Cm^i2 zXe<(eg7p@?cN}$&ihm7*915e}%`yAKdupV%*$81Y3>(mk6?uLrf`yJjBTxw2-ojTl zF}a4L`QM|mIri0i)EZWLs(EC4-ly?~L_IGW zkL-PyI7phKrO_M&2rx2T2ncoxM3qX3R%*!p^s<|g_@F-!D+3BP+J3H{9KCGslCt%b zv*L2~D$D*?ej~%(H}wugmNuzpYN~da#Z0APqC+N^tVC)~aB)N|T>^*C^O_oRMi)Ow zsIk~FN`L=)NVmJ(*SDH|`~t9UjMjA9r(&}gB0SOms)b{WT&3t1CLN8O1d*xt<~BKe zaX}G(GD&lXb@MqeBn$_lRI#Y&+vb#;n8MnFobfIyd!e)f$X|!iT6M+2pa7MzHMStYq!`K9 z%u;88G~=u;^{m5lMzJf}{AI2F)STxvNScXGGf6(3rVBNRIN7y{W%BEofefV#E5msX zt3E$Kt(urvDV8f4DobyZvxxOOVsiEup3A6rGW`$Ap6Gc{@$Rh1f4E(=rR2p?NWGgy66*tPS?2KNitYi0RyY%}NR}K7Tww#tA@IV)K`gfN zTmYoW{R06+^IgATra(-l5CEM-SqVVwM+QsC?zb5zG+F|JVRXJ~7N0y^o)`4$i5~zL z4Z=SF)w)NS~o6?5@n4D&LX5y@f6HwY8L2pwG)X`_upO>OZ)FBVruV1bv%<6c6;&EUD4Cre7 zWh^z-iKLg@DrH5V$-_OYshPq(%sZtSs4pG8LH(Hu1}LwnV9@mhD1Ns8=eS1zL0(&I z6nqgocQXM7gNDu$&qo~|pn7B^i&z=%m8F zov|2y_8!^a;b)oX-RvZ=npl*5n(z$4%J-5}lu&eG>nptjv@@53IoT2JqZ*vE5 z%l$uQ)0mH~9J2uekkU`SEEj#{xxhB(4I}oP^4eY(u8v>Vh|jqOM-wsOPG8#oJnf9I zX>xM_0JqV-?6j3)HHXG`%Rax1!6c_E|FjND`Pnn)p%+N~@|Ms&-*5lPm+eCLBAjxr z!~FM@ZSgnl5^hG_v>WvZ{>)EcI09y!b-hM)(Q`neoxzpm3NV)ghpo3k0B9Z? zkjo{hNGe)~C{w4-iJOiqS|+U{LPUtI+R%>z0BmF1v*A3CB@lvyNrtMe!X`1 zmaiZU-^w?IHO?->3Ra99#B3jhr7~w?INS5FoY_aW0BLvCojzMTM*d$SK2ko(a|}Nt zf|Sdfm{fq+oDs$~Dj2M%I(Ny`?T~5pA3A^IO*R{=8N0NMg30J%&1RgJvt$Xa zalygMt5i;iF}V4xFCYN*T}wWiHI(qXZ|yvQ&c4Y(wr|F)1Ip@QiP}^sHo(OB&PG#;hC#hKk1wHyoeR>vH34louxN7ybV6ckN0O(at@?L& ziwbuJkIRdoQ+b^jE>2}{pH8Xee}C$h4rg!%kh0;F^B(cr>EEe=KmJ;RbMb`k1Q%J4EX3+$#PmDboX0a5(>${X*(}mJ8*N%i^Qx$I zlZhnntLMa7ey{)E?i6ynuYJF@&g-^Gx-YeJ07LLC?DIWjnJ^-io23b~BcQ7?YwXfK zXY6zKNsNY^c|4nqWrma&b&yI?mQcP*{ z`L!ZsI!~t#iEMfc+aOVZFIc`HY**KEPKSC|FL&#aG%tRRZlX2;-;6NCCkHA3Yc7JK z;Z!mk$Hq3(18DE*1WeEyF>WIgOYx^NP~8mdK`~s@Y5WKHUZaptPzFSYCM=ek1@wg4 zlQge^LsCDq#chaduYh*TbwMpYCZru7^wJ(c}1so=I)2eJrv{}qviXPQ*+C` z)Y3!Ze>qihBMwj%zy4Zh4rpAZ&ESREN3?p*2QnUx--Ot@uWiNHmQKPllH;R%j6Vau zJVy>&hRb6QT{RrNijffNu5bYI*Cpq7fy!;cbHWlK{$l6K7Rv zi1D(xZEBY7UqBYJzRLkg<$k}S*KkK84ngB2CoV{WZI6D2WpCL2GI2V~PDrZl752Bl z$OQx0m-!OY7`vW}_3xH~E*?9-#XxPL-wcXJdpoYC-92bRkI)G0QhPmGuQonYw(mVf zc_yViZl%vP`|ESJI_NTs96fn<)28MHIWjZNyLm%tzL9ZT%rfJO>^=Ep+AZwUBHg<@ zdrw223ea_oWt&(ZJ$=y&i?=Z3w>YKy-8BUD?)cB<2mVxp&SCG5U)gA@Sw+mO|9y`| z$Sjqwz_VK{YniHBu)QFSNT<@5%Kq~d)-sRsNyF1tU}7@OCgv~N+w2w~S%qd6GuzBM z$lPm{2j7bIF+aHN6`u2_iBH3M;EgEmuWBEe_^cQeqw3;hSGfen2)lNvk-KQ5Zo1#9 zJwzvU34)~6*ZbGX!uCrjrPxb4qH2!$uJ*j3+s~igP2+<9D0S+|>nx_N=2{ORt>`bQ z&b92418C5H8Mb+F-)~dfQycHalEcis7KDfGtxfozor%F&rWv2r#Xmygf2L&xL=N@5Dw^DVjvJH)^S6PkXFNZG65xX!dp0A02EObZvos?vqT&^U`Fk_$T{ z2myjry|&Dqmq>Etc|dWbUwGUcH}VrquMkJZ)$H$(zf5=ROlXfq`I5dmLW=5y9Y9qv z#q_YO`oidfZ>bu^tMM(AkFA=9ov&bd9gVt(OP89^9lcP{v_I*ZR`j~OSFC9fB*JMP z^hM+6q7r6HHc{}oxnvC9ghb51dH&J<#6aJ#dtZI|3?DL0%S;Ps3@^hR$4O+%OF*2E zfUzpK;D{~L;VqN=D72yJ8A8#o)2)eHHr~%Gwyy5Pm9J<^Db7b;)sHEV1VnoAwu-z~ zY0tHpBL;v00T3b^Vl&;6h_AF^pS!iF^RR{bC=5w)wNWVS$mpnaiC0JityJp{+%NM# zG(3V;b~ecDZqThzP9Z)!Cs{ zpJ~Q;n!135u1Y1(@s7WG!8I`{>#e&^0%FTnfZ=gt|80vAKgOII9(D^|*v?!SCTg}Z z16Vmsz3sHPR-JW~c2^5X%Mb%U&qZ*o$6lB#FAGWlRj z)UxIl18s=*Yp+OMsPQap(c3_3gJfLO?i})Z@}Ruz0v=An5ajlb6^zr}ue5?yWV^4C z(y;ye=c0+9mABfb;AR_!EYl8Iu1&oCae-;_v=*3|ETfr8EyXd0jW_Q+OVlVG)(%B! zAYv80JlBN@qy6kZNp*`}V@IzLXc-Tra+n$7ya$+510IOSTe{4Q3}nf#TLo8^LJ6fv$R7d2Miz_Gbu2~PSE7GU{<*l9 zM;Lxo_%l}4#a5gV?R@_}aRPu!2KJjP2_*fVHu-Fjhw*T++s%gr!~}N<(6Z~o3yx!$Vb-azFMOPg}*8f?z ztIY{YF?wa?=JpVwL?%t{6L$#R%>Gw`$?XxP{E}V>uO(xB>MeQD2l_{I(X8S6qsE`PHU(|| zsM!(|y4{3b*y^wpy?=|ieabg(VH+*lVmooiB-eiwHOBXvE=eB94q*4@i#@~wZ59II z=u`QSb2tBS{dR2np!Prd^hZdW$6i*%+~{2m(Z7X^`pJV2f}VZWXI4IV8)gE+w`fp4 zVrslGh7U$f;k7z|eX|0IKu&RRPSV>U03)(h(E|mcONy=l<;e8!pSj~Gz~lxDTH}@+ zfc9-#1`tf2vX5`q9~*rm~*APjtfW~9NQ|uRWF;CfkcjibNQ`&66|HMvI0N^rd%KvIsV<(U~zB6#@Q8jmnsLKtS{>^ zbvh9V6dq2#s~Xp)qJ+%@{lq-r8#qON0M-h;w*({w1kgJ_9)v_u!Eg815lA5YG!tPL zkV?gEUwGfx7@GhBZ#V{{k$r=`ZXhN@2D9f!ZxYb4R5w8NrxLrV@@k|sz)mVh4?*Z+ zoD?{rC@*Yk-W?VU``$$aC(Q<`p{{^u6)s?HcnL~MU}V2DEgHvk<1?2wX00BlT2 zuO;2^PB4cs0=hU|li3f(#5x_(O^JzR1pqq9CC>r)nU7dUJbrJ00QO+Z({0B#)0>xp zcm~2s{wQnJTc^+yTf=Oi2k6eV!2s243f5Ev=fWI#NYYL#-eY12HMAiT%0hC4=K+z( zTz2VqHNc?6nPnxLGQ$QD9lCH`mu5(B$k8hl3IPV~Lh&NbVj;wy!_X|<(JH~gLT2k# z-ZN$T6B3jdWJBTYUszN;euD>~9&>&o&hV{u2KPlXu<>-(CK)IEMYT>du|#}UKgEH# za}#sDbmp_pg{?(8HqI%;gN7swH0qquBEKHM(BB%^?^P3kivV+cifD{c+8;E&Qt2z{ z1nqvYin+08<x?p4j0UbX@7-X*M?shBVyUv9gt-6=I(ZrPIWqu2@Zl{N`=6DP0Ot7p zz^SJu*8uB_U{#)?knnS`BceJdvZ5h1CBHr=vMc8mxyOFzSbzbJ@blysdL9ou8B*lI zF1;=9Q*LJi}_xKKrRnZDE@?{>J})kFep<&sTjUHoi|K= zD@Z$inMKvuez8TFEoZ?bUE85b%Jf27=V}{`fW%&^hC)f1Zb(D(Fe@-u=7a#~P8@pn zP~k`$wH2Vj@1J+-xwe{q(B1S6h&pO1x|gbXGg$4%G_p6AnCD3j)p!K(@o`d)yRSq< zx4A&($B{@N*l;aIa`>}a-gJALmHGZXEb-+;7nj(5v*y$0h^n zX2zGP^0#>yXYk20ajBY}zI`*Q}Ki znpm$?#T}m_nF7>*S5qc8x=BOanwoxwG*H9*yhZ0E8k;K4O5%;OzS8UeF$w^HO)x+N z{boZN@rt8sMKL!nHJ~S2K~Ye%3spoVr9D~@A1Cd|&UPj?9r9$1MG*~{oi5Bmf>aiT z=4?FqR->RRhnDl}g|PHgEM^WM4(>J1LBtpX^hb)u*U4hh5uO1ArF#pNBLXjzC`^97AQp&gMMT{G5Q6g@b@ z9k89d=1YnGUUGw?HL4Mt!4!@c>Ak$=QphhJUZ;OBO|woBd18!sapAYHPQHaNz>=_J zY$912qhh9&oI1+eU}4K$uWhr*n_2&|HY8ruuJ#A_Lbcc|&K?h!gBx$B2y)6jZ^=bbgyVkWb^VG;~|A(q6Q{Rrpv zL4TQX^j@gju3*Vtc?<(hUgt?bcAq+`eq1}YC-FL!=CBWXiZRu|R)QY_0Lkf3p7?&&v-4t^ zywCJg0zNCp+!CHIeE;BQ2*jTiJ?NQV1LmLQiOz8Tf{vN?jT?_d5wQS)ZtL++>~b^( zW1(-)ed+~+L9I*(4uaE-N=q=KzZ;`OmsrL=B>5MVz7A%MU1z%<3E!GQPnlC8q33tq8 z{Qh{sI>y&Rinr-%QE-GTCW^mVM2 zSg!IYUF})vY9E?@z~?fd03mi2EZMX;ZfT$^z7pQy*tzxyWzOy+(U*;~8s^PICLP({ zxI3QL$7nWq9ywPyqlqB{(?HQ*(52+iQ*SPqqT7}$Nzm+QmiHgLEa;LAqWbsN@gP^@ zEL+}?WpYJSYS7uJFX`0oSlwm$T8U;m2Q`gz)4cN6OTdNMUkb0^X7o6h#C}GFupkIw zosRss7Y{`D<5u@ZcfF50SYHZ(L3z}{e=BWG;XamgUhWIsxd7mT${x+m@I|bMhYAhB z&7S0zzfOA1$B#-C+K1T7UJNFJ7E8@`-+NEKBuo;GvZ9WrxR>(o;v!D}G0G^taE-Y) zwe}KdBJqcz>qi^fx#{94%H+DP?ca@TXe7Du02;SN4pN_#5~WUhs-w!vz)_tY&o$5f zw?Djy7_r$GddfF}HIG@DaQa7-l{{xP^tg@B-06M3je_EjiGSlKoTvD?I2kT|vQfu- zI`7LI2HCnpX@kd8x8LQMH+ff*4Vtwq|CYuar|VmuiwqOz}z~^+Xfi)3JpK-gy3+w^5G0gQM>~+;_t~w`td3> zIQ(KqJdDkz9iuV+{P8Vm*kbqX%fdsi$1lq>2oOGCgHnB5EL8zqBM9j;z|_qfyVO$? z`V9+ijTRZm536S?c6JvjYozGoq?1d@Y<-VP@rNOy?D`hFWvf8FK zZ?oM!L_X!?8k#9jTq)0f!#a`G>SQ5hla{#uc_Pn$@$r+{Hj6$_JJVe+^Iar&vl*i+ zRj{T>gEC}USj-#mv%||+4aq||4mLxqz`>9IfQu74L!Ldc82c-SuaA3EINpbOx@+}J zF53U+3C==4_xYh|A9w696xrpD5%66TQuFIsVAXW&I=g`@m$i9;mFiqfE_R;jU+2)W z0i4nUfYjvy1ZWn>B{U}dkHeg}F8?bm!=4}yd~=M$g1Z&q4Rj~>N+RcqLjr(JT4Trp zQ)eE4#aba4fa;zNT*n1LS82#m<5(0Rd=c=8vVdk#91@=aRK!04no#0vyo@FSC_e_I zISEHY0TDqB@Bi;2r=#*GfIXh2C58UVcLfEYMe+Q?4y2+ffm2`tpwBWoHVyry{PWK; z_>p#ul~;|lgN)%rV=!&U%<}Zcm(;-7IV&eN4n{|$0tinZEG`1Tc*RWej1DwG%#u&XZ%RqEAD+A`50d z1Y!Sd06N{}auUDAW_vRUJ#}nkZW%cHZ9L@b$@SHr1IG0A3q7~xRRbmg@(E)SZ&!EY5iKLQlw8LA}mu5F>S`k1rrjYF|fW(eU zz<84Lc;pRFs##Jt*JYLZd1oe_-l3r~RjQh(5;jMePV?F3tMVxYUdK~7TqaKZfN3S% zNVd~2P$q(qJyN|Gnw%=HChun8rr}Z#qKX(;X>4~_rX$q~Oj2j)H3gKqx3?jF>Assh zYChY1nbI=FGDImt5PkY*A@@4N5bw+SEI|#v23PA}=bs;#A6SuEWzEF`t<2vAUoJPG zNvD>dr&EvK8phrk{*jU8xb$Wl|C!;3($4Xeqo;@Y@3j3uQxj{UHtgAx(N0MmOJjK3 ziVD96jZ3C%J>AMrr@WQMCA~pKZ|i*tBW337tTNP9iE32YHy#=yteK5#_O~M@}xLmlE^bp)t%AP*HG9LWtPkxspB{^l~TkEX=jRfQkHlF-3iGdkyNpH zmau0iF1n4xu*uFzHDxmy5+atN$~VvSl?Qjb6YLuf4k@ml-ThM)m?E6Io1EmV4VS5( zprwp~q>=NJmP7ylhSp1TbeMmtjrUA536nDGbSvMP)~l?Lwr8b51m%IDT>Ge4YCms= zj%Ru?QVM#iYtmohX;+4q1zwCapnTnDWLV(tusBnae0616h~yMBmiktWmWo zjXQ4W{DHGViIdi&)(s1+My(ok%^$~r$E?SW)>&C_eHz{_(}vP%SS{=i;mD98V$^o!VeGK#E1W{!U< zlA+^ps}l>}#|n80=jQ)rjen*BaxnL<>S{IISpBmSX>rJk`b7RO zvWu!C6L@{9UZo``tQF$pb!w@oDrL&IrRG~J$+dMne_`q|x~*u5p@;c{z&Y|JJK>Tg z09GOUm~@WBRFC}>{gQ>&O$xl6MlMqf3OaUPuaG8uo+r(J3`+>YR4ebOr+k~~UxQlC z-1Shh@wS4x22v*bq#}Zb(J??Ay4I%c`90w`#_A65 z;=*LKX+#(VJwBm=0fT}WcwX=m-@T6lT-U0vxxTl(*vU{6?1oS!zx&+Q2>`gHOe&&8 zeBekeNT!%dVte4wBue#pr?pV{;n+~EtPk$riFQWh3c>+|#QNuluq>fc*CL`2f&t-j zMUih9LpEmIomImDMTNAGxJ6NmPWUc}S{@ZHRn)Q>Xc5yiX|n%w?_Tex7Gv@tGgb)6EhfLcgHE5h9tf2?Zb5o+c|zQ8 zCC`{i4@&@l>5gAenrD{ztBh4#W5F33`{{>?7XU?#V6wa(IU_mQk}425IYop~rq?Tn zh}FxdI+@oRFf5UFW1PPQIJ;IgR~K#bs`OI!wM9iSY%jP<%{K4tZN`mV??2ZLiipni z*=ke=mL=4g3a_&t4Wka9w(`dU*+wLS+$qd$QxcjirPtXu*{F`@M7@Z~Wtg#T9w*c)*EtM{MDrp{sMTHPmlUrOzOw(6po0? z^)qyYBbqBg$#3QYt5je?4ee~3R1#T*>xS%;&3a}mrce>q9~vJ1a6#Hi>ki2QI#U4A zC2N*_X^w$y6$$>rTKQy`GJ}dzr0XKdBpC83KMu}N`02`YVI*05!X{|e=3Kr;gibl@ z@ob)k2c=8P?i%E1o3_wMF?-Ujz6_V>fa?oai_G>Ge4?YMg=>KuFN%R3C0{k;QdqEb$&f$`Nve ziH(I>hz|_zev=qdloVxjaS&W&9c@PCB>42%!Bvh^;QJc9@mjo*cYn;4m0n8B@v{^= zH;bcALSldbSvpzK?jqs}LG0e&JI`Arm%DSez@4a6QIi+LrkS~)*(cmYR+-}Z)$a2u z{dhm79(?`Y+G6SnM@*%9#xHN>@V9BR{T8n%s%W@(N0}^t!^p`vH$sKr|1C~HfiplW z1~YQD3b0frLCA z+_M9t($Rz4=ZAYHFVGRQeKi7#aRXWP#TPyag=+l==W*P36PAyAcYV5+$jW&A@jlU^ z!nq1kPm^0lJew*dRBffAy3EmMrd*{Sy2DkgPcj)>CTyIA~`4H(`pM;-gpEhuBT!Cd4ZirRyf>EN<$FE~Lm!^JY zKj*7e`a^s+BB8z?1LDPDKnB3z3k6SG92csqHOO-y7#VSg)7+KBrUCdfr5wciD1c5< z+aA*61+%sJK%|MKX@^`!BV#KQ7% z(2qI-bJQ$nz+MzLuDF=u zRim7JMeB-JWn}blO*BX0>vGl1tmTOrGjdvVug@??oMEOEpSdal2zmS|0GS@gA6jkP zEVchp05>`jZ}!$qhhR=MY9^OF@%@M-W%n)p?Nwcj)LPrZPJ8&Z$Bo;6XZ=X!|Kove z|L))TB-im7fWOz2H-7r*t0Oz-lS=6uSCV*cx3GL6*iIRHOmEL10MkYzkfs4Vs0aer zqyaeq&yko^SssQI0T7_y1Dy}V49jsAkevWMBUPZay-WVo8c5+Fk6g#!aW zp#UNM-Qz36o`JXw;NrHt;2cpl?p$>qEIf9_>uCU;0a@d53?hHbIjA^$!JNGOK>!g0 zN`O@e!hkI!)g{qbKM8dg>cj5UR+#15o<+94e8ZrYYo4jGcsdOmr7UgEVl7};@MEmn zj$Whdb6@%2mKhtg`m{QtGFqcn{#<>tWMbeN*sqx7dO~KH2{amF80_L^=qg|=>2Uoe zeiE7L6L!eFpKl+$I3(tr^edVb*TlqTQadCFa-Lv$!HH|BjIqE!6Kj4` zNyVhlFIV4tl=Ugdl652~L9f1kK|pxR@(vn@4fT)oi=d{mETJ}4kEng|zf%9py;B2b zHGK;fIoKv_>N0ncb|DU!y6{?xlT=#{hQEK{_6&WAngT7j@W%9T53KT-Ok={;a1pM^ zJp_I95K6X38%K?$Y2bAp%)Me&$ot2BH_)5cm^MgUs_%d5x#^nI_6~BZiPf4e3*W5l z@2wKKRQW1!n|(1Lbdz|Yy}fj^AC-&!`nB6@9=S+bL~6G?r1WY{Q%*JaZ){dv)0t+E zI#>UG6rFv0A^?+7pR12C{&$*yBFvV3gy9AiWpR!y3K$NsdXP-_K_IDRXxi6QL=gX5 zgZ8NwQgtfpZ#)KUyan}EWoAZdE_WKk0k1H2NY<)1jFgxPZ~p>_eo4JS=%bAlR9;9T z{(Q=_XUI=r%?~y(rqkr2CNXO7 z9B{bb1SFd9WEf1D=4hQTfn;(d1{*;p2VgJ%6lIWEBo?LTLihgHAV77GBxZhGSJG6R z8j#aH9)=0Q=@$b1t2Mx*l&ue1zt9xx8z*JgMVPf-`sgNJF({5}m|2pFzZd(!eL{fK zKuTt_j;Z`?*li>0iDW6ie&D`vl2!PUU0{kgyMGvAV>2Q+Hxk_H?4BQaPcv)>T>ZYi zyZdm_;1HE+cvEZ2pO+uVWNRTRrjBek16jHTfLh6FWyQDJAW|dQaZ}4z#*BY30OAC= zwAF_(MY;^Dx|7baH|Q3mup|t0$1q95>^Y*rC1j^BMo{&6XPQ(EQkg{BQ7`q8Ney{` z4GtmV188|kH=5-PY}zWo+pQLpno=CTuH~B8HHuBf^Cf{n+)Cns1-|(A-RiW#8GX~I zGfE%^g6$^1^R1?Z14T#waIm>-eJ_#7EGV@{=G9SJ@GLxg##1jDlN1BNNSQ3Hel7Yq zB@|{=BZ=q@j7uE}ZvSGWecG!Ajky6KbhorlGIzi}LXy-wi)Sz(RoDA%7Eu}j>CAK} zol_AK(-rSbs%ax?yMYb6y zO-u56`fPVsIAyOINQwWYQRN&0_r0jstLuh^6Lsu-55hIg$4p9$GL!>IVzk)lv7q$9 zsHT|Y84}6D!rTDF7jGtvwApifa>qPDU%cgEGIyyx;|L7BltYE6>oRs| z6&*u)Q4V&w&p;2Hvn`(~*`Zh}!^YN18)b31!Ew}|pFS(SmDo}+rwHkKK%u0=E)l4H zRy9c@{PO(t`+fN(xl^BZriwSUC+!4tI#yj{SUWEhx3A6WN-~%`*GSt}AM3USTcXK3 z*0xC766rLwNjlc{#1>C#VGhBgC%i<~TIbL-8S1egE=V3Aq(&ysRz&6HJv2=5ujz{H zu8XSgGs5FvhVkA^z#6JL4a9 zJoEJAnn{nK()Jl2MYAN{NER0i_4y$4L$L`m(yE3{`DCBYWC{fMiar!$cFoMBIaMp9 z=Vsp^)M(mjQUlpqdwiCIlI@{xqAHUqHrj7C@#0k9=1 zY=8QQ_p{%w-qS2S4o3p9k3BH&(+Y`G5{ikO9z5mVqba|o&D-W%khu<)V;(@{Qc)Ff ztfbJdfyhzJ_sL2AYdUTaxD6^|(sydBqVt*@lcv!loJ>vuUEs?u#J(Dpu!Kg%^HEuu zcba+~YKr~zAOFWkM`rdSi?0*!PQwJnmubcXmyWEKFcMSPwC?x=LZD%Ctc&5NMj&x07=uJ&kw^>zp`e>vq6F7+i+0`UUto6Jzu8>S zeDITVz0pyGi&Q9PvF)ckbDkhj6a3T_Oxu83Tp$J$We?etScdGbQ|qatjOB|JOgdu5 zH`$ThIr_&rjgI@L!iWy*r`7`pnm#(_35X(WxI*3)%-q0FJ4S;VWLRorVl$-_9ty>U z=^Z}h=i;Iv80u_Bu2^5n(?DI8qg|Ny&obBRYS&Gpu7fs}y|*LF>vt|c$1AJf5zJcn zH};>K(=!XJWm?j677Lyp0glAWWAA5M7$#v%lwmc`$^BrIsS#_7jx%TnV z^8XdOVgCE4J2vN%U#5d zm4;1KMLpBz;xHwVg2IgESpdTH?d;d#m0rS0dC%Xz*I|>Cj_DZ{O>KNJRh{l6*|Qq^ zDHUdovZA(SV?YT-otcwUf<`-THoxd8x_ajPr4MYNkB`Sq8pib{<8anYxETJ3R|G1p zijTgT_#X+zz`mb)2iyYd0|#}tg7!upb8xkD+WFg`2Ltyy#MH*tQZS1I%HJ~mrfyN( zDeiY)eHIF15QdIsvp4kmW+69@1PsZah%BYBhk&rq4IAc}AVk{Z;C$E~7s;P6MY<91Gb%6m#-C!s>>3dm;qFr&96HnyjC zm{CYJ(M!X#k$JU7y6Q6rDNnYXsDZR#E*d#KmXw3cMXaVUL`>0v2_Hn(OH+CoT}MtR zN46Efbr3}?C9*`zVF0o4H)0T5IjJQ_$PsE3HuESp)kJig0_9=z+~GUts|M?oO4 zY{-cF#el#kbU+jJKp{I1u0p9$6B>}@qcg~id~-r7+j7J^0oyv)CHnDn17I?$BU7{~ zP#$>Z?19BPy+VUP7YkoxYzX{MQx$#aqI7M@%VYfvtrqVQ5Max{IIc7R4o@^UM%Bus zzfMQiDwO&fm9n<>w8vTMu$-1FdmR9?eZUa#D!@dijPq%c%TUzG7_78LHny~)n z{hs106Z%NdZ$?@)t!1>L(zWz*4=PNx&vwga(j11HLm||KEAs0X8)|?2@6f`AU!I8I2_cE!2i`eXi zOdF5S(ki5Rd3uMuc8SP8VXz#=%jRj}SBW}q)*J-bPFevkKBY4|85wa>K;IU}Lo`vg z?!lKnqOFVp#;K<0D1{<1QK?LgiS(t5MF9a(hR9GwLV_xH@GtX;!~qGBPdQV{BkcUz z1$JwN6hC%MZB#~5k3=~v6DwUp=a;x^-y`Qook~q5hI_xLKA3BVTIhh=W(Q;Tn z8mau8UOqI6@i`XJv3pPc>zh=UBsMR(nMDX)UISmk(lUa^ja;1@H|poPOikwZZFo_o z?p%Ake2~E3e(J`>K*2r1_9yb4CnD1KWL)r39in#pDAIn>S8xf)BlPO^J{fv7n7ec2 z_scilpN;;01+IVNF>ZtEp&Cbr9UmqT{QAX@1WpM&!U_?v7pk^+;p)!Cr0^icAekv; zM#w9Y0X()ib-uVYMF=1z%E?0DsOKn&Pv03~^d%+zYn>Y5Z19G}5T8#uatWo+6`)Ai z%u&zns1hg#i3FhLGu3XGCxdEt?X&`I|9>@_qjz$Hc~_s+ng@k6KHo+p6lhO_$@`mv z7dzD@f2`@M;gsN64vmE};1iiERFMG(yFhexwGy%H_iYdbMeaSPZjEd_u-IO8pB>d_IVjLg{VnV>o zFPx!YzW`j)m1@ld7?@`NpS?Gxtf`qVIZ8kdHnqaz~{Bf>Y3@UVr-*!cbDa4L#H}jjX%IGj`h1 zdin#yq9em=MW+l(% zqkh@QNAFwirOi@_KD{GBi_wv$Z$u;gb;{^v1{{bnoaw8VWX)fI{&0?xyc}1*2Mu&_ z2y#*tiuDs0PdpX~`nf+?2CpF_gM(v|bF%!_`e3SB;9A7i$X&o~$cN}Hce~v|zCtOe zO2Z{%JC^?B?NyGeiE8}2&=B2SEKIarE;FRoEBgK!9<47Uc)M>rNehBO&|g$Z1wI7; zsxWhD7DzLErAD>q+i@1)(kKNtIZG53{bqv^xK|u@WUb6^Q3h7-H^_W9%3b4qyF2fU z**FsFdNGoP=3v=amLOMyb|N`g4z^QY)HR)6kl{E`?C1aWkKWb$-$sf-G!jGmO+7ggnx0;HR3|hMIarizbVh;>Z^)l6y0OQ+ zMDBCU(c$?|He3=n%ul>in&=32aDp4K#Oxp?717Fh8q8Ch^U4i~oyQ{b^VhMrv$p`Z z2Mxz02KG2*-UT3H^E+a!FO?w`z;1ZCO%{3q<4`G(J;;+g@-)PZJT%tTZ}Dk)2vcwd zJdO^z*6O_K!wlKU-bR1K%GFZ!>#6qfGn{9*Hk|W4>~3o_wj}?sdt6M5s?=7Ln=Ccw zCX=7WW&T=t68xGmbzb|d?-6zc0hf%*|NnJ9mFg=^CNf13ElW8KV!|F<2uc=~N3ST0p!axBOBd0shkekC)crhGkD z^m}g^FlX3ao)Ejl*|0B@k{OcXn#nHa2{sZw@RBEVQ2Y ztMn{FuTK^2ff1Zz;U8mND+kmI*42_X#Zt7$rt%n<9g}`r!Uh)%uIQ%-|E=X>iY8zA zwZ#Gq^l|zX|9G{zS%_TG+YsrZnRJu_Z~NTZULkT`bLJmmeoJ{QZ5`an=Rg)VDNxlj z+)+P;B>1IJ5r=zG-`^k8H=|g9?5-=U*}EkToU~1FddZ4Na6IX??%leC}+F;xOMY(t45#_)^d|FVX^$UM3TA&p0}59&4ztaS7`<|x%3 z_BUJwp_j`;_86M=b|n*1M(|%1pQu$y-6I8J`~i=W&{4v0n{5|RPo4Sk_NTWL*j(HN z`PRJ_+ZeOBC{T1az@avgJh;Ejr`+oj#f{|ZH~`fS^dg>8`#I$cT1J8!mMG-x^UV!g zFb)A>yK8i+$HHlLcp~62vOCO+q;9j>@k#qb3g~7zK$C>L@F%X9ui4fjUv>Bc8fXTI z=GzwCq0HoBE4%i~S04cY2iWT_-@`Yq!uo)1`E6MBtkz-n>0m)*t4Bd7Qm21V*BeuR z3b^%j_6r6>N9=)>9$*ZDG2pGzGDQo#6Id*um~_qs&T7nYeT9lcA&%@x-BWFt)6x-< zJrG?j`JJD;v5&wyjm;IO1?B{mX|nPu3dVIl*1kp}?>>GG!{4nT*qmmLve%6?`+j0e zEI$egsE$#$hKx8z55F-Rjq7M@IWCH1w#Y?;(e~r8oYFI~Gdrf89MnmHlM& zsr4l6Ig@1>D4$m-0X&0Xei>veGk8@Np@DF%XmV5<)W%=m8qb+1V7sfT%zhP9{NsC= zI;$4n?sVQc#T%1!lA{Y5YH}ntKrIR?TchsNbzn*(8{FvPF zp|v$oJJMmsGsQX!++Sx5<27ObydRuFrB@W+E${V6HkZp|g%|?y$(IGrk$a%3Xa3zW zC*9&sh876Zzu0Gg1^l;=LY0Dc`bM z;1XrZ+C-(pG{)w{)~A*XH1}I?w~dlC~ zSu2E^sUZvycb1j2*?z?7q#2K{x|oO_HE))WrXyiy=CB$Z#N%jmN1%+ zsijkp(Fif}lN3}I)OdGNr^H9E;$SddT{-ABVZym|Hvq6>)}EF{ z^6)~HC14T$%uv9x?)*ZZJ8*CGJSNo!7Q}Um*0!t3CTGO=){= z3T{cWCG_25HefjZbOYSHsCh!Vn6&~RHkEOT&F_jFGGT$<6p#Jdg2b1=LJ1^&G}sdg zDwl#SF2@$YPE=C(-}hYhuG1E$uQX1L_b4)^e<_PRS02I?euidADU&x!^{TiTQeQ>h zw=lmYFAobOD(QpQ!p(Wa@VkhsnbPg^>pl?-rw`IKSb}T_9_(0@=YTG2l-Ib)IXq)u z= z3)=%FCz}Tp3NVOKl33fP%Oh`_%P%(Fep%o&fdSSbAsmF=P{ca3($bQG*fDj+D`N(; zyM-J}i>WKChQ(X!D1LP0sPn+mutm*Ohx$Bs*5B)jp~y>hdXhU7L;cdbYxt~7xK>W{ zA%}XMbAHsXFH5bMG5O!UXVE5;a&&%@b(0!mib1?pJs`Zupl2Wa_fpO3;4Hwx#4xD5 zXembSbH$HZpEl1}yekTl)QAMw=xcfo9CEAa;}GX_1U4|`;0coVa^18>f-RilL^J3N zdV%_{Eua*L=u`A43_aCif@J&^5FI^LpG)Ksu43gVCXGqUGrZeKIV&po82#ipK-6DY z&wyrTm4#jU+J&81b3TeZD&|pSGqQ}yl>mdNp}$PYvl&PgE!dE=SLS-(CD4ELOSPOX zn5057jE-L?l~uMLCowawHaD5WX0sZ~Vn__uD&|jel^&I_<7FQiUbi0f z-!&e-YurD7G&k7zU|lWc&k6UK?izm$%i%YNBV)^l9Xx_z9^en0c!Vd}%mb<5>>ofD zl0fkp5Qf@4psA7gg2*D7A)K87GKC9(T|>=EZY~I*S%IP~#~oO`0;E!~&1XypN# zn?S3+nT2sF0ehWd3^AI;as8k|!`85CSo`KcGf4y*q(DF$Fg$gJ^Sd(8h%p191>m)l z>Oi9&?BjN7E+S-VH-krgK)6R#2$M7Eyo0D|z;cnz)isg(VGw55k6r`f&H!p9I7bF8 z!tKB?37k}}12e0vUm(ga)&drKK`GP%RG)))Iar`&Rv=ZY!Bur23N8fcd7!~P0qm^+ zhfg$lfSZwy1KlFvlxrebh6c&XdE;&$sDP<>MLAfB0$SMwa6A_vxeTDX8i4JD9H`IB z3Ar3(P&@9N&VlBkW{R~(m*zVuE)Kywt=oRHGdN7Y?T89gCEV8|$}MyYZU*jNgj${=HTZxee>qfMjMN zfv${*hG7_v3P-ciXd*H<`dcMO_7#Q-?3V8NyT1=p*kW@<1=AL(9eMHX(-3Qo5*`b;L1>mP8gidn<>ZLH-g!9d1eA)8ostoM9z#7ddVzg@a#~t!l>SzEJ3o5;*4S zn#f9ny=NfPqb$|d@xSHq|BSAaGu+>`)-0=mazo6B(?uwv3-+4e zKj!|scbIkTwH)5xpm7W(AL}Er*+@JZ8#m2u`wUS1%rHMk(JnO%VUL_+0!&56E+3y< zJ3YE~{^#J#s~3Qc_5!>Y?*+W~nVCdV9$gg_!wkvIC2l+7`m~1RC6mcqZdM#KVo$5Y z%*wZThFt#s{2c#|e|t9}4fvEHs?{K>$*72_EdE2FLE6A-zW?cvfZv@kgH&j@F{}39 zjIdN&IyoAuP23P!A9?q-U#?M~ntj18voyTGQ^+q^GwYL}7wKasnqYm{UflcGMnMI? zsPKxWD9Kn;o>i9hIJGjgGBAe=Fc?X5*ymIu{?|538ms>O_kEzPsiv~eTi&~(A3>w_ zI^*!Hy3YSD`3=~ZrOQ+tk3=UXCjMOv#kt*aBc`H+#3sh2KYS385Fek=L+81{?(RE1KQ7bMM`?)~bY>cFL zBvck@XO8+BFFgxeQn-Vfm4lS>$!T2wQXxoT;X|jq*7v9#`-?m(cD`kHExMN+pq3i^ zbrdguk0MY+waY@&ra4g=jZz<0Rkt>uE8y)AH50OlB6=NLs1s=;tEf@c0xWtK(1_$} zIrrfOv;yiaKt)fTUz|n8`;kSyaHa2eHoGZMn*?MDZ2WT9qo>6Hc)h@F!|?BKqEBS#3IULIcF1{J8VRg|J%2SoYVK0Y%ZInvcFyvQd5d;U zK6IY}pIWkDv^(d9V5~Bp8KC||TIj=LSZO~2yq?i<_Ja{Ym;nG}@oL^m9&w7KY*H*Y ztFFDS;CtK8?1p3b49nWS8}yvBz%lQZ!Kwij)xUo*V)viUALp2D&Um`07(nP66?**^ zQO1p*L?03aQ8Yac|2lrf6awduYh`eMX7y*^O$3RGv-9C$OoCo|4U~%3!w<<^hPD+ zkE5i;S0jS6g>wPOVhbi^*{wwD;>5t)INuU=&h4bGE=27G(Ckz|RM4036)f@9X$C#T z8_$YO8Y?qRaC8nD;!gQCQ27a^Y_%;&a~h*)#9m1~qEh{05lv3v7G>35;3h~tHH|F9 z_muRzw+&UWyB`qX-2qsd2swZ}gnA6j)G)Ci3U2|933&PQK4t{^End2)o#M=L11M~m zEqWNsR?7-;AEO;1v3JgZ6?8sdZ)AY=&kHH4>jQA%LUoIl%Ah8;=~+8`p+k+h#`V2n zyl^cdH&w0;o$5UwLlk)dWJ~|~CvNPD_qRBUivV!!t>Kg6vu&kv+iw(8#HJ2JnTtKN zD|>b}O@{>nyY2L#9WwhKPwp-!IDpMO=S;GnZhwD$WCa=Mx)pzQ z+01^@3x|4z{GYlODEqwryBkA8V0v~0O6|N`36u?@!2WtLlGoi~&VS0ws^0jPLbW`DncPgapge=+0> zd3+;p<=^2G-1}Ude=o?}_=hb2XO_@UZ-=I>wxSVsv@?UVwX2 zCt8c##~%~9rdluVL0Vh7hid;^vr}lVt~pp4_iez&8h%&p zl0b7_gTYs|!FSx(yu)l;XZ^@J@?PuTrAPhFDknI?^1mAdvuE$<`N89a7!?0wr%sTW z!~uEiRPchOAO5IswD_;~ODG-Mmdw88?i@IL2N9HwKYAgk^VThTt6&lp-V~}IOLkqC zFqZV%&o(HZFicolKCl~&+^GH-Rc-P=U)p?}Up;PkyGhZo*R{_t9S@bgn%^>J+hARt z|LlG?lO02G8h>civC6#tSL=!k7JJ_|IDB#LojBk`u7muNpbI*=GUn-OGp~ zNV}e2ZSIdRoG^E#qiOHlw+Fk@X=ghhFKPX=k9!1{qFH&6Vr4k_#guv+qvV8^G1m0uemn*Z(q`NCD`RKVU zn;p|O*JTr7&0qk@K7W%Lao4F~{yS~&q@5c>%Ny=-yWI`}fd_8J&iRR);Skt*OKnfc z*!=Sx;5V=}*5NFWMixuKNC03xg2{k=MoS)aF zc|QzG9Sas}BZ)-;H0B9e`rzsW^NZDL5|Ftt5~hC}{KsD^o^{eAW;91j@MJCZ*7Ny5 z%gLWOpK~4Rf+s6_pKVYRuUNY`x94Xlaqd6VC^r7ugLYX2{E)zo$ZjME`;Yx_@mtks z^HsZM?fx|t9pZWS<`TGjz3$n9vkk_PirkVk?Q^E(Dl)?y1OCF_9Kwhp^QRfn-!v3U z3|@DNJ-}(|3`$(7D%51pk@A~&sqMr~lV zUN;ZjIVFb{B1{d|_a0`2R(#_BeBhVVN4lVRObDDkZ#6iyA>+8bFwOaSjfVKK+s#m4 zW_Q{n2H-x>(Acw&=cKM!{_Xe0@^P40KcPR0G6(Z*j7>i=H!zzX-MO-UUwXF4vJNR` zja8hMr98T7Vh!cWPq1^-oP_G$n%sw}t8Oz$Gsz9B-A+Dk6Y{gwcCoySl5U*J@HAV@ zZFTx;?V2<@>CJYz?g#jfEJSbobwA+j99sHql}wZcSpl9+gXqy&Oid-l91@kMGk`uB ztxj7Q(G)X;A?D^GOA?Oc$De|)5P`MV#21Ewf7>ikN~166AFzzb_9b|CY?;G0j_mR9 z`2cncb{EmgBSNw`XtvQq)dBn1cuBz5-yP|B{!7#<7+Io1h1EfS=$VxC0PW+TU#mi+ z?ReZ30E1mBbNc%)Nt99^6`ba|XdZFn#x-XXe4LTUhAaOv*qd{jbuKlUY{cDHgBMo6 zmb~Bw0+i8%jLo3V1HVhe3G!(K6^o^H4NELFtHN=LFR=G49ElG8F5?4X#D3WYDpR2= z8|o>-!ToU~)lX!8n>O;E>RG3w67*$db$%>=mVdG%xd2g*Z0NiY&u(IE1PgL~_0s;> zqROO{-=6Rm*6pm42g(&So+cMsg(7ZXj)K}8GtDS2JfVH%Ldvi`n-+Dgy5(CQU79F6 zm|@JrOKWs*E9=qxnlv1Wi;Uf`QY~9mf_fHp0|)sPEWxXQHz(#>wPa;lbi_u1vyfOw z*@?N{hf$o$Q42dLcz}a++ndQBLM={tcU}CU!6KRPu8?QXszDXyf7oVdvt;tR zg3Nen38wNL0@t!(V4H09jn91KQ|<@N(-uTzMtA~%2RmT1#E1Yt;)5R%5JrXq3SUM= zQVeZ>6OwZ*W=X(NgE}2nF}OT7=g6@L$c6^{qtEc6h^;}ujJ&sFs#j|AX9d1T1|=t1 zQrf1FpVbsY-Xa!jf%q?!W_2f@j;rNPjY{>9`59jE^gL4^rgzl9M6G>2ud>?k?}^rN zbX=w)%8~F5V(r3a)0Or28BQ*@nX>~p3$Li(8}kngL@3_f;bG{Q(+-=>y7Wro&rC5M zli~&_#hf#C2k4$KOeA?C<$h8SK6lUwTp_R=c(7s+o zCG8~zpQ#n{D}&PJs6J*Wp}P`z!v!+^1q8f1-%lxvbE<;_oT|8^ZiAn0tA-n7=6XTv zNdNWC{v_TcYvu0Q5c5-M%ir_M<%m*DqLVW6_7V4~2Cq)9F?IAL?TvKN5uf<_BB$;n?xb6h9e#(zN4>x*TEpgHH8){~c!{bJ=T}JkF|@Izo4~DCeFw zGp}NYY+7=Q?{*3^H4sTB0eFN*D95kia~QdAu~2D*2zcK=leyU%aLPO8`Vr(4(x#=) zQ{_@P6v*kwrJSOJP&QAEO9O*PfIj}O>sYIbImFSP*c6I_?2?I^kH4ka$@Lz8uL^?< zQ8F!L1_hU4fPqrpoPP%$j!!Nb|9U@a^`==qz~JacbeB{Y>M@%Xgf7+vDjswmqVO*hjF|6@XvPkbfLxndX#a;W;%7{FeHgT-+tC%9xSeF&k`F?2OrH6CD?` z)dm=fGJsRXnQVhR0F$aThsK>--Pd+Ix}jfI5kzQ7sK~P*!%@z6EWT2oF(txIZ@W_Sx84edeNb1m@DmSnp{NeOTF_;MP$ zx)f2Uq_?mz^Vk3%q9t&gNb6MH=v9EROA1RcQW0i^U+GfDXPoN(m|7_`;UUelo~;@R zUaT$$Cte&Txdc|Vj1XPxe+>F3ZZ5@@)Pz}z?}ih8Y==00cqb=CU=8e7{a7sGU?eoY zd`1XknZAvK?Z@34p+&dIv1@`z&B$TjX@5ED(G4x3gbBfWZfuI`G7^ zcHXNN=CNgb2w2Z`WAW`Jpy#PA)e>$To>5m*IuUq;cLlOz$^Aja-`Rq{HH!`x*$`QF z(E7F-)~ilxjAKGf_-Webd1Q?_>G#UAGHLbnf`hizt;YB(Q=0xo0g50?1cf+X-_t*6 zUX@idKg1mnFHe`ny91mb7f2LBamd64{DPH*jqfQY##KJaGbC7V7_5^&lx2auR3Nf1 zXWM~%N0~$5!*y$nIWX4XuT3pa&I!-STdOUyk7OC-d)88Zd)%+tiDIKTGU%(c96lT= zyf+uwlQx!viy`KGz4n>y5hm~)Z?&{B+REj+sfT8OGaF_=f~j%XaQmdy=0T$zKts5c zne<)_>H`#=#t0E7N57AeU6J=m75^#vKI!I=Tntt6mLGV^mi!Na2+5f1!whetY7I%) zt5s0ieQVz=1le0GQGo;t@;c)=?t8tUO^=U{x;IxT?p8Pis2Hl@!Ii0NIu46UkJi$b zIfvDkf}@!n8iO^u;AM2j1>BBb^}PerZSs%G`pp|P!k54=zN4ddBPEV5lfZ0523&6p zBU=i#(R?a)gz1m1`rVA4V8*vvep6Q8e{@&L||j6R1TZ9A5cCpZy&cG z!Gv1Km z9ESo8=;yr8#5Sx!0w(|=k{XqD-r-q%(+mQLlmHQnCeCpXS{CSnbQ=&UX^dR&^Tzym z4T!V>nKF=3m-{6#X34NBC}{@~YFBb!18s@r$g}|{X$29g;K2HxfQ8tSrZA8$1tMjj zG}n78v81Tj1^7UKtIH&~-8*Bxk6%mx5n>=?1&VWWZpIVqw}=5}03pgLDl6+mZ1gcI zyA$@z-+AD7tdZ)Af;;ahb{38|rqrygjFRs?-S*tr8uXMnrcu3)eGS!31~ihTOG(*| zL)GE@1AhCNwN=iqWLWolIgi=yCDjcZO(^O2e;o$Q?Y-Xz zUAC~AX~mKD2cEMwAW7v1MsTBrDrs5vFVdy@3@_{TA3IBTrOHpRbKBTuZa(F z3o*4JLw;5;uXO96jlpsh+;sxXIx8pdl41$=Mq;*CKqzRRB>LqPp&;O9pk`K{c#>(% z{#hG18xxpGkpSrgK1g5!PyiikRMO!9)n>79arS8<<(Q%rS-DEn9>^}4WPorZ(a*W7 zWhloL`1_QEmrn-(92ZX5GI_j+4-6f9emDuX+7O|7yC4@85X$@UuGrjd@o%GDrP<5L z%kPJy{@}hi6pn5MxCRG{El_Oi5QgkOMllW6(BnpHDaIpb6$_v8%S1A;hhHX?{lBH3 zBoz%7>x7OJy9$%SKAmwAeBr6TQ0Sj++;bw?3iG*NlD%=%U;bSs2Dyj_>QwzGvtxs% zdUge_Yt=8srv=u}8uiMw!SXW>Z0WLGnY>{Llg|*a8S&GB#GBkp^O;KLK?q1C#H?Fq>fJ?UC+1C4P$yE^n=cy3jr(%}Vx5Hqldk;v__OSn^ zuGAA3hK@M`5+Uo|04DMfgb3$7d0`XsFA$LJKThsiRJ!GNxsChYTbQNTrg^+jvqCR` z)Fj;FH|{W6CG7i$VZYgxUwW3CgSRjA{Cq6NrA6gxIXZ4;-i%CFO-qU0BCLciz5PTx zBd(vs9DAmqOAqA)at(O_A(h{ofIzT=g~#Tx`R6Qw@?vC#4bA1hf4Ztz?r)#>R*v%w zc!x~~K+LFkyZ$mU=blwlk87n&c6eWuz+g!4wVK5e?>*z=Skpehi6K}w&gEy!tWfcs z`($D9X5iE(ybFlrYrOwRJk6*l6codoj%C-$%6A2MbsS2m>CzX5`^q=ZoKkUCHaC*< zGtO60#y2VwM=d;Z#6o&)1{mb|FT}hHq=0OK z?c!$c&`AbA(uF6Hk^RbZBO_Oz(zABH?rrW|CZ&>*^$hK~LcsD$+GwHcPu)FXk(U+BB>M`-)<+ zjU{|aJ0pjgA6#HsUQCl1rAQG|F7Am)2RrZ9_~s^nA<;qeO3GW+iFD z8P3bkm+UyXX@;m1hGvur&5;NG%UGyuq)2b)FbF@+WK20ju~VcBE)`a%rb2!uR2iyV zdO<=Npt1)87m;-L;m}>72O0TB#xOI-$ddY85*#L95@-f1<05k=4i?qM4C&GET^ojm{{fL5I2C>Ge3T(FVMNYlB#S_oVTu0;Z{ufyko>aC9gcjM zq;~|9oQoIc!OQc@_Bg(9tSuC#nt+wt(#YjXQXGVbY=##H1Ei4(L#>O8zw*w!uq&p` z*oOL~QXf`VSGofh&Q0K8mC0{ugcoOL0|->584?IWePjnDKf^{~$EQxq{dlr`ks}ye zQ&9Gf5rJwSDY8>rk;OGmrDzm@5sCKFc%P#npXjkkVo}N8xNEruiomf>eMhjd_Ukt9 z9i*vV_sRm0@8-r8cr`UwG3*lJb*E_lJuNLl({8h&*yxfX`+sRp8AT>oiB$t$O%3LG zmQ81NU;Wm_8Bn_d{7bSZ(;+IRN8^0|_DKfYnkbl3D&N)A#C9_nY>*tL3)3$s=Bn6g zFQHS-R*#mN>cVv;90rrgn{4h-E^E2KU$y&)-IgPJMN@d+5P07^`jczL70dIg+1UJg zWFgQptK_6b#YR|UdepXqtnG_nXr~VTyOeuR4vx>v^2y$!et4qshz#vIhMiw_S}}kr z_t44yn8n^wk`zUwBhiqeM#?Cy{Xn-v3yVWxYV7&F)cis$`Z`By@?B(+X=KM73o#51BA#pJ=OZI^73AVmm%PO*eg}{y)4YIoR{XEW98hk<} zm3SeNj|{&)DQ)aSC(=^H**oX%B+ zk7hb1GCj0Mp->yY5+b`d+p3`|sG8}tes5g=-k9Ej^d6p#*}}ImJeFp8Tlnq#7T%)t zkxYB9>xr7|`0?zdJ$c#j-Pzt@kD+)gt+IC3$J=Jb$AmY>PV9{aKFGV=>jLDj{}{7g z|CjWts3li#HpT)FDUv&zQ?dGU|wXip<4CWAYe0W~Vj_n}sbkbp0;&_Yd_1 zu+L4sV-tAr7t#U%5yH`lohSmDJhW*nM*S@{B$h$V3{C< z9}p_@KJYm}o;8xHl!mlK%oi)f7P)$Eb^HL!?v+#+ zyp#M>$k#cu0uy#ykyU`@>3KTsTyYg%?Wa^plTp#_ghqU0$2nhiKC4F}#2#uhw9`e4 z=bRy@*`lYzg6+Yq3YbEx(B&_ZFcHj3Qzq?^#*~&47C)^mhj!6) zD&Kz3G4Va#79sE!N*nw*udAzfV8scTvpGfkzy19AXXnRs z>K{`A#kX9lOFrK0`dAN$ogCo&3A1H?(?0g_Xj_gnOLD>_2Wdr0!y3rG3wI?&?os9=6{R`E$!{WbV)f$PEwg$@Q;vn zFN6~awPiV?G6!FB`J&CBGr}==_cEu~Rssqn;qI_uJK~cgwukTe3m`(+FFPS8* zH(MUgPWjAYTd?hnYwT8|O{_0;H|cIs8xF`h1K+bkDX2V8z2JP-pPvzBBsMI|#OK(`>81^_@nYqrH)O6=I$7p(VqDR0-C`DI3d zMad__GW(Qm|7$qgZg1Qcf_oEH&GM8{Ggkl6Uq;Q^7P$?IA)kM)efUCZn}aAjw~`;2 z^j-b*A*0nb6uc!8>wVy;dMs{AL0P_aL|V(R-`aYjm^khm?;K;vf&p@DfH1RigBgl7qHoui`*^;ebnty_lQ zgF5g_#=mIJLR9n*aYOn?J=E@6tp9p)K0^CA@o6p2-kHEV!w0F4&y+qf_`o=;V>`y4 z&0cT*Nk!G1vUy9UW?p&D$^a^iH5+8bF9z5vYixE% z#D4E0-pD=V>}^?#sE<-QurbY5zT|e(B=Q9s&LZ06pjAu;@q;4_#6QR3T@^+uV|Ow~ z9D)2D>E&&QyDy>ZN`Y<1+B!T!sro9id!72Hh%k~FvuzFgw*lgMWX&b9AT0uW!z=HQ zoO2LtSP8FqfeW4oyD?8?o(y6)^w)|rG?2!zR4|P+S1cJM)-kFeTW5FtKotam5xFT(=616P4Etes8l_xUM@yU}-Z0d7D z9)&XqtNE7=3FV{E(Ni8u%d~|ZriKDpcw{E93(*#K8XF3w5s_IAEi;Z9wgx=Wmj~X8 zy(Jl2#1%!J$N5)X!h^pcAPI{6QL!V~*|w2n)v+Ud`s|mCr4PdIJMgvQfCo&}-KK4A zp)K1uD0ZFN7c})TNEim~JNftFZR%1`(m9sa1?D`$E++y*!x(y}06&Tjr-RI2NHH5D zjQgVM5#@-2$oz=d;?DSn;DnDWQb?nOav|Wg>3MFDqrkgp*CunCnuequ4cBfIH=!Js z3{s&=D^0{LzJs~fs=HVA+uko$w184pE4%gYbE#teKX`s-olc5|0IvU)(}PXkW7W9i zeZVO_ppsXR;Th9fFdRG_Q~-mPnNqX19?F9bmtm!0xL3C0EsbBBAo$=m>hJ|l zI=Q6_y7rK~_6xNIJJU;4UlDc5wbGPL5`GC&ovi_oVje@mkoPzNmi?-X=A^`6UrKZq zq=RIJ_)M=pXChg7SbTZX{P84SZ_Px0FEa4BY>nk2M5eieW*xkwc>)!$yA2VqQ@HLt zl03w`<0!UFnDdHdu?k)3^?Y8=9SbIJZiKdQ!^13|s$#s%6fl|=ESBK=^$c45@ZKyp zEx!a!m_sg<70f8}RT>ml67o0pnk5N~q1Kl9@k_UPK#8^9@=@?oq9`)RTw(zG!ot(z zyLo=ouR;tyjF;?Uvtm8?oyHPcu+R9V=ZV0Q=sVk=I+|`He{Cfl7P*ddI#8}Q4moZ{ zIX?ncvAO?!+m8B*>$`sUR4vck4pCE>rPLw9k>c0#y^H7ieaV>0>H5BC1U0L8NVl}7 zh$tw^+LH(0Yu+*}1-YM?F}Xx8rH;FKDdsM@TdXeGvhgaJ9Cp3CD_AZpu(t;e#MxQm znpAR;+*VqU>A%J$t>Dthl^0+>RxWR_E9wBt_vRb(lA^o_PNwz=zL!~;wv^fDm2}2% zR@1hs&>Efj*JR8-5L(dsqO8jCjLK}^a{rQ*->m&KIpS6cr8(IkHQu&vBsI~BO4%*8 zSu(TmKa=yzjpej)i|D2|Xl0-XqLfCn{AYb8?&DkZ>1k12|7f0UHjFvE0)cS6LARuI z`9R0@>*ogtwYXu6V|)K(L1fE-_H(xty?fU61>Hu2C^?+*l;FTv*P9f=1VZpY9PDe6 zGUgLt*co&qh$IRq?mf1eGgCd*Tz~%-j}*@Eg9Ld6gui0m_yB>$RjU$a%;%d^t3=O5gilJ zL@cc{*_nyMI&FPEjILo_Ght-nU#pMlq$yBwm@up>q=3`~VH0#<%DzHrN@)cf43vW) zJ#GQP1|Y0BF*hu4Tp3g$KWKFrY3D%BD>%ltrv~e-6TMy&1Rr2hz2akIUq;E!YVHn7 zJ{5IUZR43Gr(LaAF7EHdpN?K79#d}aQ7|9!%2W}3CEZ@5f%o$$b7Vn1Ty!$4@0cMv zd>_M1?@3BZ>ieQ9C;QoT%=;>WVdm;1~8YryRN{iwZu-&_75kGfEGdqE>zX4!33e0L>^zqnBoW7foDE zKtT{UYx_vrc!4uXOkgFN@7%gAca@Q?$hhvrDdz;JLwEElsT$f3*TO^I$wV|5=$rVb-CtZEN^Yy?tJap!COYc+f|cLL_GpgSw#qZT(B@7+tZ3& z(($b=nawT*pE6xiyaain1YzW0;B2Yi%QnSWL@pOwTkC>BL`!x7DDsW>?uAZU={NB)oL9yEB-K({<73Je;M@7a$<1CEN zLM+Hp#O2ZeH6YJ)9L!~<2lXp0aSKy9^G{v3FXw)rQtq)?`%VRJS^E)a4Zl-eulyxu zE~i5A-=^v>I;yPuFS-qi|5jB)&P=G~WEv@FLUo^V*5oe?B=UyNo_Z-VIrk0Ue${`Y zNIvAtPDP!OoyLDLx!xO8#%c7mey{m9sOqykdnLMGj%pdsVCumDGRq^?)xkq=LQ<qTYIFH^Y5CmzzNkovx+o-W`?b!AVOz5WW;J)a^u851%9N? z)XzH+Q2BX&HZT3o@bWzjj1gfDlZc(ER$YwmfzG3+U^PK&Lcpg_64K-X0OjAr{)l)V zGpS|g&YoRh5eNM*Z3O;bI4w87qqU>mmYx~Y5|ee69fkiO&8aT5x3zavWlYc$JSoGJ z{xZtQQ?SGVSw>M*dNd$=F6w5SIk-+7Q}O)am)Bj5)6?^M`2=@F6}dfM zT1GeYw%Z-X&~m9-XIs8pDzj z38%z2Dya;GohpwQ!OLgC{!MtuTO=w!tX8uXepNj$XNl8$$xululPW%%9CljkwA@v@ z1YYLUT40AuY>ZZ&OeM}NyC7DXGK$vqV5%@el&&I?_LC&0Fd0Piv+IIJqk(x^dx~4G z9R_&2K}K*)QR?C`HYuB~qkJQCg%OaySh~zR*DEHqSQ^_oB{*oxl` zkmi-VW#b~|$q4^5PQJ<77$3wWD_sGN@%~CO)8+d_C^ofJ8rRtp95m1@i_J-8E%eTr z_RUUo-L0%6s6+MLrX;mk7S~(6qmZ7kkQ||P>144gT7=G}OOH_~Vv=1^5jrwOsB;-I z;}oX#3QQ27I9)3Ts_=#iLqzX{M`l=k53(1zY*rXpI9pocE1*f>`7)eJvFu;qN$UT? ztx>w9khOYu!qH5Q0e*jOk)9eTLr$Ko%pso_WdYHI?oE38UNg8iKqB1em(2WSl0>`8 z2fhIOx>4KrXzqT~)X+n!-|j&A4kIK8l^{Pdw#b=c zhY&Gxmk5AS=kz2f7ie0j-a^T3gzM|P6vVWSBgaJ0BA08h(_#sz2g@zP+1JElarPQk zE=`9fhR0Hgh4Sv^(8RdrlJB~|c(SXeu;DVPlBV`GpLC*y<+UX?^ZMkgwg@K> z@T*gNTrv=4^q(?rK$wsQnvSYdjJz5HgLd-ffFkniDtHj==qeu9PfsM5eWWi?St)Zh zWWs!5p5&yps_nnSwnF4|D6k|{)dQ6bw2|2Slb;^0Kwe!yz#Maq;cRk|Vb69uxOCap z{`+ynQ#$l7C#)oH0J@UtAMoLJMWPG%wEqpWkBdXcGXrqTWA?}(yYVX#C%k}%o=?ALS{g5-?MladqPyuJ!rJpWXUS)Fp7L)^d zM`?6KZ7x`TQ&;n{QAvoaiXC?dA9OkGXcrt6p7iRcxXjhYopDWE*)=a1E^&uRHr&#i zRuy|*gZtfqi2j26`}<~O=^94uf*m8SWXWpiUjqeONBLy=YUp1B1zQezkQJ+;e+`)1 z5B_44*4R%{5Dp{)v7fkjk*!1?P7S-D4Ha{y$)xbfh|Yfl_Z}z2*H3zqi3XuoC6mP4A(@VEsMLViEr?DY*k*NS$2hZGNg^^n>uKq9r=U=#JqdJ$9~QAEE`A^|1@Nx9e{_6r3T z#tmUxU*aj-V^ZpmJ%HsUa#^Gu{)~JY_z9)2XU{%h1Xq`vB8b5sK_gT1f)0m)sC36L z)%k0%=$~icIqP-(g6A$TUka$IAgy}@MK0!idXNshsW&+{I4%-PNZy>V*5HNzJvW`E zKwadw^gEmtvfnJ3X5o> zQ)z4QG6*9_tz^h3r~zwfBeH4bRSsBo$u7oa@-YHTPAO(>NgNY_obfjSf$U9^KA0c4 z!Lkqh394TlwaVMhs{j2a+fL4<*NOroST?4w!4os{=-rloa)RquyXk#y(OG+a{_Ai4 ztq4T#hiqy@tP9P@2#PHNT*aV4@yodyl;5QMlcN91xp~Y>imK>Kb}mwtQn2%SX+gNx zxz!G{2E5eyn1lpbIX9(R<4=2s<_EKx9p7jV?r#AI*u=1SlMlQ&cEu|HYOHd56ashr z)rg#+vZF9hC1lLeYY1v}(mP9VQ7`ZB#vwT$-B*+`Q;5V*Pb)%`13HE z`?^I{ehyNs;Q`NrhaVl~{>mod29<{`wN-&An|Q~ta%f;@%Z1e2CU-1u*PbzU3zZ28 z-?y1;(4+;j#n=MXLEYV%e@hm-eUfkezn)&MY1&pEx!OD~ytgAW zuyKLWVw$}*0Pk)$xvOlunyWmcZs-8^BJ!Ae9=zs%D8fTtcdr_;IIM5(M2F(vo1Ado^@jZ|-xwXskHM2b7 zz5`vfGHf5)6Z*$$G)2%>ZuOYejIrY|LuNV^MPih~HdMrCF=U*&Qhr+O*dgM%U zQ&cE3Qj%|zxOoYI57Cp&=o9-OTg82FN>Egwy|YMD+)O`HS)Xb5Nok<3%K$?$mq--DN zPv@;nr`jps7NLlr5XlpwGitq**E90hIsIkU)1i+@9EI;zi-lwR88lk&&bFv$p+{-{ zA>2w&xY#qEU_G9hchySo>XhDc`2}I_jzG1A#`2K`4|7fa>FvFJ2(qL;jaaKMCutWMDg9PLwuBuz2tO-15FKwKf6`T1zbhhn9EvoajE&%Tq;rDz=_u~j zOWG4#ElVUSiG=In+1H_z+qg_Q;LAPOEIg=Z4+4k=S8gA(UF^4UBj%C0r z2_^JGF*`ykb(34;9jiG#o}efh1mkL^hDih<0Hk5P?|KsLB)|atSt{{U?8pB>h>RD| zL!4QyU}a&J*-Kb<8I%EhfC|kcN!#vF_hB0$^!hIE?dc^864CFsYdy~v4a#{uKChhr zd=Us2ozng?;&^jG^Ar*31fpLpl>>{a=y<@U`aw^Tije%wOwo-AJ^9XRHarEH;|32kqIpqLgtyX4ojx>|?hn}>A zo$!VGMU+*-ivPj=!B2i`|Fy8Tw4^MnghQ0|&}87DYHDtjJ|kJsq)b$XEnJ<9h`gD} zW$VfVrWAI}*mHaO8d7dUP@@|N94d&2BUWY|j7m`9aw9tOtzreILHGdvM8J#)%|#rf z&ZgBFY21A)ty0rQ@08TZ7+*Q4ZE2mvV{M77R&h_e*d*JW2|@jerfWVX!E|4OFG7MW z9{y}mQi_+uP8RPpvYB1@r}|#P0J}ZK^I~uYN`mHWX!;Vw!ax+yF$YqZjO?BcMN+@? z4n+OH;0mqJDL~lW6SUIdI+VPf`|Ws&^JN)(u(l6@S@>bwCnox_*TFATiYe?UX92Y( z1D2C*=O;cUN`7C%bpI1HDL6QIB6J#*f}k0&a-5ME*5xUU_DADKkRHs%+}1`ngcKo# z4XA8HVdupKGaOP9xF=$^2+~sbt4LK>Ie>eOx@-!}7wEo%nU~WR&_vfl>&xp@!4rfXz=4j?>-B_v1Rcp}=0hws~SJNK%LU{H{E%>QGfy+d%@_if@{ z(IS8Hv+r?j4?xO`Z(X*2)UO5I%6h45Ll2Bb{kgfPXbmR3`@hLroziRH-mc5OJ2a@y z{$_Ey&frZKQS?U%Xu+YWo5m13ZN< zWPpvVdh*qOW5%k%FW$v|kie~0%3v~>EGCly(I9%6pt$D4yrlbD?NA^|t&&?9VT{01 zf0v3$N=$CsCy8-eP|-t^f8AA_8EuWXt7i<#4$8e06O+V5K#-Yrh-q!9db#dgP&1*K zIHvI`#)C;5jzko|&os&tD@5FJpF9NJZJ!DwqS zpav+NxbV8eLXwoDL&fKTpyFvNn3)EpGW6b-G%UJuX*19gM_4myR3BQAc99kYgCJ;? zGz6Nd|D)%XAW?NdF9?teXW=ztx8vvN4c@jFbB9l~{tRJ4o%g@-5C$wl>18dyY$Bvb zi4d`zW2l&)X_jO|5>RBEa`F9Nu)mKVXu`zu?bKK<4E)xdGPaY7)7NrR)^R5+_Ng*O z_1of|YrRt);sAdDqx1NXznb<3l5lUQL6gIwd)RQmXYmsTf|a~W8<*80XGI3>iRfbg z!@?kTaYBuEp7jsH9M{a8T!AJgg`DhWcRC8?d#!F+l_YL=Qo zAP7rKQkq|gwXxb*n)pxVBspmblEY%NR{RJ~@>S0gL;Da<;ob=o@iLhL8IlYm&NLlf zVoB0tq~+K4BYVa*VsS`Z%E&%mZu?n^c~r5>}s zdmokA1_+{jGAH#fo{CBB#W*gIzY7;sLNb{i_8khE1 zaG~B(61i$iDM{bJK}PHKSCAt2V+5Fh6N_`&<(P6zw&|3{LfylqYT09IVa(ENeFMCp zdl|XUH-Noo_1n!`D0o_rvm(^JI?elb#I)oDb|Q0`&wN*`Vn zaZzqmW+Q0#l52Kh1CRnvqH~FkU+@{eP^*@E=o;^87!xogz>YC~wRZTuats z(PZ}F$RB-Tr_i75T;`jk{XQnX+vF+phqGi|9WHq~hUt4|S(Dl0@oUXmcClAiT4dx+ z{MCv<O(B%hM=dQV8^~m zvV%WFzK5Rx{DyZxf+=~|{8Pjj#u0p5A-MAc6W_Shx84(akx_q^epr%i7vZiVAy+eL zFH82%g-elaLJyhsU_D>%zka09aPq?dw_;`{nw4Nz9iWBE+?>e)B~};iFQ0Y1D&D z9{e_ZG^+2!1xB+W>Y+snsE=Lgs;-!N(x$>;F+Xz6)$N$0%Pms!H~!(cYMAauE)>Nu zG9LwQX?;F(@kuq163g-rQ`U;%LdZzjm1j4cT^~FdO#Kk>I-9{F^=A4p1gthRAH%aJ zf}zQ!1-Sm~&)9%>C$~OJdy9LLC05Msf|frUu>q%=;ra(l9vDe7y+!1B%#1Zt!Oe%7 z+zWWeJQoREh5u0P+6gp=a+iri_20kucvx-84u?eCfgFV^_MN%ZJudfKF{W-pFnB-Zb1rNlbfwy zQ(s5tMyKPe`%R7|p|EjvuV2G9uR!#@E%zAQtB7MD45O}NgdE@h+m@W6E*YtyiU&Fx z*l!GQK<&7%xwYIU02zetLN{WN<@DT5>X~u=RL9CzV=7Sfs1(>*r9KHr8+s7Y%G!WD zwPB8K9tf1pAkL^LqoQXWo2UNoEF~GEWi_?ACAqoDWiy&!uQP<1T_TS?O5u54&>6c? zZI!xUle#E=_kh|;HPI$@0dVc^J#T-_ns^aNt6a?PYRJve zs2yXT6Zf!3zq{|!;TJdk@6R*uwG=&Pp4NPsxbQ{Hy`^6?KU zXfpaP+@exulV;OZ_Dn{3EsNbT(<`AsVq$RtVhY@`7m=>me`hFlK;p(`@z`~5r?-ql z7PotSJJ>`*7N>bjkr%>*cJNHUmS#r>Q^tz6W3P!`9RHbkHi3m-*J>3#>>WgLNV6RY z$GZQ?{#2uJI2=O%m{NX3YGg&Er{5&M-3`qlOX(uVu#*;M`NF@6NsgB4)v9queYmPEe5ai3xhpTL)lERC|{fOo%3_L+T4zW+1Cr7H8gEXjtt92?+J0{fIk` z$~lacWVGIb8XJ#2lUrRwh&Ebrm_O;N59BJ^y()e7o%1mTde;5Kn4KKO?>bG2nmO|p z!M1v5d*^@X!1;$IZDX_NW}<=67FAg4z-7jFQrsf%QDxteUG7xb$}NBqr;+0B`MgQn zj=&^*w%)5Z`BC;z0ELL2O3w+YuC6SzQCfsH=_ho;Ypq?ByTHIMy#Vj_Gx{tu5Qo=Iv9`dY0J zzMFPLly7Px;cartP2?ksAolDwjS7^aY7hN()gxr6v3Kur>$1wIwKQoozaV#J+Fj&?20*79enbGI65{^ucKHW+mG#-%agS8EeYif#| zRi93l#Ws|I<23~?#};aHNv!3D22NvQp9v z4b}`ijx=WaOY+Y2U*lXnclFyFb{-woXZC$8<_7JSmn^QD2hK^mrN}Tu*h|yfeSWUv3H1^WYnGV&ZJMH*GvNx zwk&k}sIaQ&V5uW0UDP}b(RkB=Bi0UH+;U{9-8F*IYB#o&Er`(7puAonBGi`!0Ku$; zpjp-<(3wyLT}f9NR?Pr%VG^iQaA*RN2|~|DJcq&_Cg2|RvpK)*1KaIT%K z^4c@#2#t%hiTwP1A{NAhjSPe!9}9Ln;E1T3@spo+iqIFoa4i&*7zpzARwqnpDP^SI zG@iIVplQA_P;6Z|y@jyWt?+TTS;PxICmM9W8kb8{cB5QNS4Ru(Rf{06^Tt|i#vqg6!)mi zD4Hj7kW3-5No=gDi^${f*u1cz_gja`k}tU%M}bi(U>GmQ8=IYs0Ws2^$*!F=4voVW zmOJLLg$^$A$t}LPW10q~u@oLuu*^Pom#q!__svc)zY1zaTK#i{x%Q<~lb}w9qi3hC zR8;ZRK!Ep`S$+4$NUj2GjxJA^Td^dls8P9dDsaB0+9;%RWu6}5UHJ`Kih7m!VF}J< z1W|cj+&md0+lVkAt@EoG-pwmOuC?)GQ7xTmjR9i(cpa%MGk;n0c$Z%8t37LIK$xFr zU2g|?^S=%+x70yRQs;XWe&MX6Q=W8yd$Obf505mu`_8496H6JJk5gmCu{D?Bfu*4)&FoDdnW2 zT}SGX=JO&nb#h0X&z@cG2i}%#q__^XlpS#1)wQ=+0c~&f7%uNS*r|B5EO_8|&VX?p z+E4mr&En{B`C9g)s2Dm7m3mqWYC8QA>X7)2T~DN15)P+p{FtgjaropDEB4m=9#EH0Mfqmp)CSQB;yC)2W1wn*3&Zr{M9yg#g2 zy&ZKpX;Vh&r<~7WzW4`OSr8C%H1+SIgJl^FPlJE!ExmX>)&E7E34;E0*c)Rv-!;Zj zK`uT=`eTLa;6^cK3>qk0NTlyE6inqIT$8UB@)~+Hc2ibU<{;izIo=8hq?gMky%HnJE!EhTo;bZ{V$Xo&N(RR z!gj4Mz6{(hy6k3s7uY)*J>B;(Ye#5XqoXSi-Bsh|%H!nAi>CvvCE8t#9nu3FzertA$Lfh__=MIEB$5Is_6{b(&ATpT3f`AO}F#6PME2 z)iY>AUYTU1%-tZ4<;U_`Dy>!kt6eZRZnZcGKN5~ox|2MYsM!zQ3Ym0i(rmFqEP5KHvVHI~$oegWeT@Z~54O9z@e?Q7QT5;#~Cght+O-2!LWMo{v_S?T~<|*#drF2oK z=mO7W(LxZT!G~)Z123P|fWIUJILZeCj`HZ*wh8~oUz?VK{)$N)51y~&?Ltbbu=lbQ zm5np=0w#)+7bI`38c#|-ZGy30k~GP0s4;76Bz=L`u+zlfl!PsIJV$JO5-}@yM$l*Z zfnz~Oo+PBMi816%k&gik%=?CK=g%LubG_%<&0S5|c&wy#o1V}vH2<3kbA|b z@Vct;XlCQtfU`*nq}(Tt*1e8JAfC(A&d0H9WJIVsnLWV-!IwcUVd?`46eM4UwoXMd zbySZX@g#6P1sezgL|)V|@$>w?aOcQ%H5?qmv?1yb^A_+((UA;vn{t3^RSBrClITSs zRO%vS5Lm>d{0l5?Iv@Od=^Y9t!6>7BBlt!CIFhr`@r6A^jw=Ee5c%k|K1jY#A>tCB z=f~>))b{>=c!sG9_7of%o&uMh@65kHxw+BYX))E)Yx&XR{g^#up?j)y7ScaDuBuG7 z%!g`ENq>C&Eeq%|^-t7y0Of@PPg&EZ=%d_})?#N^X4c}BD*X!=iq|9)+?_u)Pv{{T zUF$SdooT|6pJvcc0&AtY&uXUSThik0Ol)a?Z8zd-5jg-qUFk-^FVfW$va`awSHtZS zb$O-3BS~7ksBM7<|M7j8E0rX<2XH2Ebb6*32UZqFDZo^z(#+Ph!Dz0-nc`s8{~p=b#XH=M+*8%B0X_Tl@I zadzobzz7 zo%4(z)5hi4VYz7ha9z1H{=@AWzqfzU)P5O7R9OfIYGug}Hz-{0jJFkPsp5Q&5yJDA z57QGK7eT5C0=!W8P&ixdE=<#t&uoIo68p-^3AXNCiGoEleY4RGbFCpQ4Ee;x{)1(= zlOAhS$T#%}$<1ItwU8uXZaSqy_T)efgJlotn}<=*SZb zV?Z_(rp8>E_H?PEu!guE{T^0U+9;#R1g>1(9;JfZz)pkrf-~4b#q6?Kma$j7 ztMlWgBCHXRPGl0hr@n?i_4r9A$c+2^l7CPuc8%1axpM|~-u=1RSb{2Jy$Tc&wmww7 z+jDd%p=M3OsOLegob|d;gx5AEVhRvhs!jFd}<g7tgB5aTmM@6&_ zc`E-u2U;0bNmXc;E68{DT6&-fA0TxjB%>cf0ZU9MbuhpLQ!^ zJTxC;{-ra;KApb+_!nP^V)LVWoH_Hu>tR`-y;`(RU8kN|OSFotm=eStxuEi|x(!4} zR?z8KR#|G8T(b?uiC~*S1_lQ4d3Q?^7bX>=7wlTTOZgC-2y43~G(*XQnfvQzcACv+ zrCKn^fcdaMYLfdm_zs-YhS;cpXlF=AvYMu5=frJjjZ~~}eOGM|k;>dPP1SfwLRwYK z_rLnI@^Xb2#7MFxujg(9kWPsfBdHeg9yg*07Q+3cS)IehPfg-)D@nfAy8Jx6Ilju! z8FC1cQ9Gq*im8DTyUj&rV}7;KBuY*O7Oyv{;_FPP--6&r{Dba3J5O#&MHU_?DJNt9 z6kNCOj2RRlRRbQBLnGvMuLZF^BW}vT_-Jn7by!5~Vfy^8aZoN{>83-$Gm9 z$2+PsMdetzo*@ficp8U37==c9u`--2bnxAI3i|1JKxMd4{fkYB*uN-r8BCa?<&vT| zC`+p%g)~(jf_t%I0x~rMZqJ|Tt4(|(U7lf5v*~;ff7D@_Yc~Jk2<|R`gr&OU)(IZ_BGUo43`bGCg@7pvo9^xq zIQM86%6>;I*X?zQlw@o$9d>s(ioDr)Y;4$wTSnDao%?HIil{I#Wkk__ltfpa-(deZxK8j)&*w;ho@_l2XvJ|s_a-@Fav2I%G0Y- z%E~Jm*nBu2VkudwDA83@)5~t!{CBV*Yykt@+vk|JSgz zZM}Xq!Q0pGLSFCOd$%soNF~Z>G}rb183Fj+jJ_K*B+PdiJt9wM1gf@%Q}fF2Ah6$i zr{b$;to%U$;o7Ik#UXv=?_ltYG`wzM(xw{WrWse(>pzo#OH3Q>aTHGVgv8w%TxqQK zcGEhI&Xy{-dM`CN71?PeIQ@;Z$;4X;;)Bzfz>$G>l!P|815N+k6;ci6aiq_2PiDGH z@(%$y^b?gK>=0IydZaA#KC~ZP3-YXdtpn&w8OWmQMu%q$!0k`@Tfi@j?qHA>U$x|p zqT+1&4FD5(r*Dn$6=e-T5U-=an=5s0gTH9?7b3QBP}@areEXJqy5#x}ll^-10)vZ* zM^3it)lSs=ZDkCOU%t#@igG}W8n~?ipq^M|~JpJeUIpU>^R#WU|EWDWU z883r; z!Csx!A*Y@O&3-cr1g>zsdDwkR(5WXOn;Cx`0$jYnPF#@TVMVG!2HnD~1rC(OgMH4J zltD;Jb+rR#)9s!~n>}m;a}CV-{ke>x!lmJlyS4cx2{Eanq`19y z$)Yl2EVxQQZV*OA8- zE~51}^@yi`I+eS#`D{qGR|c&vnO0EIs2$SGU0z#v$&obgHAh}vGMBApYZx1Kq=C|e z6h!*X`Bc|;Cp=QJpM^|VHA3?tuz1t2oBg2T3ld1ry4c11hhltuBJf9KA73m-j@O3; ziQ~aTz=cczL-Sc29|u`Iv_irIASLP$KU(8WeS{GBIN#slN(6xk3zlAi@HDxl5I{87 z`J_0(4opmj0VHB^o57~079g*Ya!kH6YD&RQ&~H%0T2?U}_2=1&2Gf{JA~# zSJzC^p*hZxW9YQ)ECev>-K?AdZwC!$Q~{qkm+KxM&4KSZzefBj{Wy0^`fA80;F^CT z2*KrYxu*EaY(T7D?P%L z_sYqX5oEXDXi`d=+f^#j8-XRXw)u`5#renhn}UVW!XqS%5oSfv^9#_7A%`To=cEvK zKkBErTrF-LST|yau=;@wMyA#y?|bY2JLz@0{~heV>~-!R@@-a%*na=KsJgP+p?Pa5 zys5Lb{;f=xYrIg<8Tk&#A6X~eylj(n^Zy_YHuvU=>a7~{TYk5tub16ONxE4Z6MmC2 zcniqE^J$)Yjt{tV8^>%cB4}{ZKxv??r=9P|m$T8g40t~EPT=z`BWG$ol_e&El_t_l zvcIXUwkL22D^-;;m7J;80+_-B8-0ePtO5@1O-p(tGTr!|D)f9X{hA>U8R5WyjZ##0 zk!{VFvIs^AP-%u#==6%$%{0HXoURv0sUS6!1%kXV0n~k_}*Uq#=pxq;%pLv5p0(rYWf?P?qJ>|f&@U()++C$xbf+Mdv}eGi=-R=C%F zwvrYCthwWL3x;PZf}S7j5PU{Qy8{fH*1Ed8yLtvT)#YC>_Nx=XEyL(OfDRAvGYJwM zPQ3%8L$Ke{9o(AnJpm>YnOp3yTy*&mYlwJ*{Whx%Aw-DGEt*s}wPjhUNF57x-4p)N z3wvjXI+T&f5aE_8i3Gwg!&u3s;bmaNwZvT73JJnRBr$PVqrQV~RD|^)7)XfQ@n!of z>ve~03;o<3kS(q#w&-Y9ExH)3N>NL_^I3$q+nl)!6cRX5)C9JOKl|XJDLy|e-TZy> zL!9d`W4|C>FIGR_DQFjM`fh*$xL$PQJLNI+BX_VOSP=^10y(G}Dzy6|T&1W|$y7;J zGb4H#Gz-q+s_2aQ*&TUeZ?Vt>k4qYw4K{zTnEu#y=^JY#&z)3{VWZiNIGva;=G9tw z6c(c+56ar=ezPStJ$9w>;+1r#!ly=3%X)NC7pZIaC=&}Kgyyv4xFSZ8F9QrGP&!L< z3c@<*g;kexQ2zwKyK-paZCpgejiv~8^wxnmLlVxM@!>joS7$U%b>gK zo}F#lXZ^Ve_{rz08&~DZ^d(k}fS;XnU;2fm-=b3A+_v499UjItE?`>QCNn>;KW=F! z26xWcyWVZ${A7-*&6|CBi`|ixv_*_@wJ8oKI(^B03U>~oecD% zlEA9_E|j&VoU3Mx)de9QD}TNMyl8gHZ$`p7lVOH8OZAhr3waM?duplAa0Ic?5A zq0Ws6NG*)Oq-$_>gZn!}s-FLO)!%iSTKBlJ$Ak;5Zf(1Rkqw3K3|wTVsk5ODDMpBpgEY>zIV5c zNnrnNB6Hl!df6lKMVcawa#Kl!w!{H*=x);tY7sT19d^nZyJkRNS*Y`^=&Q<_J7fR2 z_>^Grzm_o);Lc%&yP3L zb}ObUMw-#pXFc*73Meed$W$!<71QTO|vraJzvs%$xU5wu@IBFvE7j(bPl8_OCtN#^A+4m;HO=#nv;f9_phuH5=TS!4J`C%mw8P*dZ4 z=Tphb87QuQw{M5_sBU)nu+Fu|;q^0z&QdiFHg9OVP8GfA7o!GkK30x9EeR>QcuH;K zco|0CAkfeqpFlF8<4RMmCf{^ap=~E9Nkpz=BSeksNR>AJLi1vL-XpcqIb&fr+Yjfa zHN3uJH1WqiV$;`GZlD@jsp{#UpC;VS%*c_|`PB0-CMI4Q1O!waLP@Y4v}h0^0Oc|F zG1?-7gd}#DmE;n-;G`MZ1;x2hI=!nGj(?O{AU$(Q-nxawqOVLXg->7LM54 z?;fVs_PSl&dZN4m(BNHH9~(W{*_Q{r9y_4Xz;W)3O4UVKxSydA%Mm!N6b9T7ft=pk zz`|O!*Ugq;xW3B@oiK|JkFnct^ee@m?bl^xq=zK`DZ_rJq^&|KrWMq*jDHET;+WVP z1JjoN2*;3Q8x1V^v>Az=ta*mEmTXwp0R(et>o1FfC>QS6MY)DiW4ZrvxabQ?{?6aT z?lZyTlYx<{@`yuSs@-ea<+T*?iZ%nKkSFBTmGZcyOjF@#i2EY*TwPp0?~8xFP#1d( zOqF!z*8R_gx6|Cpyit7?)eGH3mOoI;56QK&NHZ6RSEu|ummLf`3XF#v=z)gzspS>H z7xFn!HtrHF(2P4YNLWKuAii=VTcj@p?=Dl&_9DUq0c5H1#oHfig&mdf3XM4`2Gp&m zH^|IIL+~0XB9#VCa;=^XAmP743OT+Zc^M0~yL*~`LJ-)nh1w_ESExh4ZWB98kFYAA z`T~K{N(AL z&t|~(&$C)wg6HKK&Zo?Xk2vFcPvJoqkw4z=O_S;mQ3Wyj_>*6=WmYQ1!o=}h%R4Ap3=7U_G4S~VYtix zp~BbfKU^hX&Lyc^IvowJ-O)Af$C)g*iux|f@KExyVT`ES2m@J~GagK4GHK-MrebKy5-A73jIH$~#iE*+j z&Y7?m6{r%^Ljyuj0z-=b=sbeZ2Yfx&(!>1^BKIfGLui#fqz?CAa0@@=YCdyLxGClrr&b$A;{P` zSyjKQm_({dAFdp`TxG$2FaWoY_hDrJvPYs|_r^m$t88BzCz7X%zngqDzHAQN>xJVT z@hst*aR(QlgG0L=JkI(NUIJfKVc0#x@M<*@@mRH9e}n=0At&{@oTE`d1kt3(&_HEV zlzDqlD`YZ7@x)P>|Bt761r|9pt5xQi5B^^ySVInKp=yB#Js1w9*%nDeNclNfue(S> z#H__hPoT`*^O@ayYDKJ;d8--G>jg|vSA?x{ySv6#i)Avh+U(tG~CD3(~M@+!mO0Tt|3MZP7lwk3J@`b2-%3>&m-lttc$d)Imt;`CLwU`9e!G(f-^?4ZEFM2N9ADyl+HcSa1~}<~xuX#xGVyLYdv419%Z$)IVeW3;roM`|EHtT2uDD)%%w3l$+dg3cTr%?9* z_Q??O-OM=3>&3iLz6*79w{UcfShU2PAWIX9lY7cXi|kjN1Gh4M`W9SXt9s>|X?2KcB_wcKIgUq^M?VLI@f&TKyv6XS;#8tGc_&D& zf(T;^1m|gFO{Iz}B6V#2W9N4IqImwI#Z%@2xcZ5F=542#Rh%6;d&%N_@}0JmZwqIs zwSkVky8O_8gXRJ9r4uYXGT99g*N6}>w?^QS31~bse)6Qrlh;JYtp4kI=m?pzU$r|3 z=bAR5OtI^cb6U|eEO}wy z_TL_)lX1fTbbk7FP>X2bC1grWmuW%&>iiEGqFJrLmk@aZevn7C$4{E%h^NCxJ_ShF zuBrfbNRd_cp~P{O2J@;h2-nl=$ zaK#|JXw-BEr5U&N*8Iz3UwD#!1rCNmX!Q2@lE{dbmJJAWkdo(~3(P_Ve}$AMO8(nW zujtAUY-5i>0S+EDgAG?;jV25$ZdvxZ`rLMd7=tc1) zAP#^2ekk!ryrHJhUQPf2(HN<1j7~znfyPVT{+8l{pO3zHZXd+@{W=*~Qdj$_f0Bu{ zHTW9?ku~UE86SwKZfrcEX(AOz=2Ucc1vwwTxfV$$16=sN2y+9E2NwMQ2o0>BH(~)u zrpL6^+?W_wJ{A<@AC31xQ9tRGnx-hse(-fMpujPio9xd|k{O!-RBvGRA*9akwm`L= zn$!_8uShNJN8CLZ(s!f8K!z(SeHKlMZ9c6FbSrxK*n&#!69T+yBPo~3_o)Qpln^+v zR!y3KU!GLtWfgA7`qL!6S5}A?q9s{MyaGSn)RV+;usc!h;jyTKYBwgInJuntPtEAz zt{`Fz!;j|!m~KLzKsY2v8|e2GsALjsM@`> z@uX`_Ook)@907Oifnq@X^ahrI6Y3sSU_1nkU=__wcA-OcZxj`N=i2;WRCs8TfurG5 z_wv!wgygG~D?Ub=VK_Lzz9zr4G~YXbb&VQ>1Wl_At4*u3QIDe{oft7Mvm4^B2qah+YHhK^ZOU>zJaK8q#&!5IA*R-!>J3 z`p!L)DxPa$-EK@(ABl86)`?rwi@8G{>1Ytz)n*WhI-uZ0=2zWguPt+)vu z>iXVo2#mU}>WHY+RmgNtqH`U@4SgfG{OYqRDBsX~lNtuyl7miOQ1tWJV%{gCAazBB zFg2qhqf(t2@5;~wCWN{&)jRGJ!5Q!@_m_ z*7zRB4S!tCGnKjUSk+&oEZcSkxG6+~&K~UK071-!{pl3$aSUacH9J z*?T3;GQ>_PC-nSVI#w$f>;DpE3ckXckc@0)(67>LZd8H4`pzn%mJz211hYY2G%JkLmrggb_< zwu@$l_T-&L;g7Bn|h0Lw@YxF5JB_Q z9^1QzZ?xu2U!W9`vXYQFt)u0pr-eCEzk&H~*ID-BdhS6-o?eN`80)SD4F#F!i9!T4 zW7PjFIB>KhD_9fD$Y(3_LPlhulZneDHZ;7QR3%r(333P zYj^$w4)b5y?3wKYpJajB|u#&6kb>Yc|oYh_372Z|pP-G|_ZYb;!L_*3*MTS~; zxmaQQRqCAI+9HQWJX&zkHSq+7j-i*%hH4NRz0MgQS03?X)(F54#OYaqDkZd?S^Mt# z6iev44c_aKPQP;gdP#ro`hS<|<{;bL2P0VdfHy1vEG>&cO#}=(RmD*qy$qHc-=miA zu_BBqCrPf!eM!RP9)9Bs+X1-9WGEIuGAN#@&w7--een;;KeVl(gKCcm7pvdgYE(LAj>)Mrk#o7cl{ea@-a6?DiY+ zn#0J`Piu|S=RzYw-qI})|6C>>TQYHAo1#Xr$@qcDnp=!I@|~w-_e%bzYufjazTDO6 z*5(j`{<9!>{$1^%VLmx>%eXsCS2?{IjqAV{zlo;^+}`ev^Hk{@-^?4u#`> zUe)9e)7h2J7f*`IyS2s9;xH#yl7piw-zfqYF#YCG4p3~`y%fu1a0SD6Mh!edH!yrT z7?!tvCR>nK?g|+QYdEsVti?j9u@NSsLSWC7?e0s!SNcBK6ZRNjmOmOZ@;!)2Duj(jDi2d=*)hd6 z7!1Mg9Z;BsG{DQertiU5pQ&FH>E>g;{w*dx|ND1vKInd4NMxAS^VMYCu6Kv^9znFw zXpB`SwKK2EH+Ks#Pi9zp658rw|52ZGyR~Q$vS${6zG{MwN28+bg*l3_19?Z-4lmJ` zq12t6g?^FLc?z{&dmE3C#VlYHRBiQ-G(|3iTt(PF&!DB|FL^NSXk&yh0<45522;TM zp*D0=nYa^@KtsT(CQ3vcqdF`T$_piKmTWWhW9hsCiXNqqNothL$=A&eGIt;>a)Zn; zQW+GOt*M5>YkQ(Z38&2A@7C>&`r=T@*WUs&ch6pJP>M^n?4Q3U7?`09$W#uhE2QWg zsfp@m)CB9KHL&KLk}>4`Sm6DR?{*Uavv5=7aw%WZ5h)+i@;y&$I($>do*@qYkDkt2 zXdhLbijMb2usNyEQw)HZ+gMXulQr+5m@ca)A2@Q!b`u=VOaljQPB#l#mu-P^DLC+c zJq|~NGLY!GwRK^n*_9BGA9aSd$N%7t5c@v>&US1>Y21Pl1Vw z!WgY+rjFfpD+UJ*rn{%(;rz*fJ?8gOs$#*knrGw}%AA+(C(YvaYIMt3!0lw8Yy?V{ z1^zRg`9n0tg0e0=II(^8e|z#CCgao0jF%;Vw~4;0MI)=(DgRF98c^^jt_KSy;C+YDg%IQNu%t6vfmI9pl^D06XC z71H922hi-H&c_ZegW{@ig>K5vK4YPN_uh)~eJPZpYRz@A$NGdBBpH9qB?Q7!j!Qg` zB0ip>yN*L=Ngq6I56S2`0S!jltnHI_8Uk#rDRuFiRcv?B#tWeZ4#waGa2r_jY!QAfln4H7N`- zIg&_bBEZ`>IL_Y$7x78@eKw$A(@h<7 zchigRU`C`hA?l=cnHgb5_Q$cZS=o_BaO9oSR85YOJ)6SFQnoRPGwnhwU-4LiB=XRt zKxy>>U0IOS8ko!BGUx zl0mjBn9rs|qVA7zD@Jb~O?3N#SFcVpeNO3KX(%H3jHUd_!+W*gp~2yWS)(^G{4d*L z>FP|HeCaRd_y6l2`&~%#83WA^&-i#WfMvEOHzl*WWONvTz{{paZnr?Apy?1EF1%=_aM+5+5HN=^ zZ0>x!;nC=XhvO2AkwAfDrgm{`DtUu#RT3P_C?Jwt#F_xOC8*luqWL!Bz73v}G9_KxbD3?wBia@mY$&#@T+ z9?z`Yg?JIZ0i;*XtMi(#Uq8JVDWnS-Tp6xYSRyQKTjr*fYBjJ5CE<$&9nFynoq}Cx z=zki|eVZr0dmHsN*B9VLaa|_FxLhR<3{xp7pFD*(3$lSEEMX8Y#)vR#h4vK;Ac1q5 zHeo4yeakZGMPty8g(aRk^Ouc{FxK|6L&id4vOB=W@iNd|zQwyDg)HJdHsrre55}=5 z%s)g=BM5zNCsn#8iS!8~9puxni;GfTL?c7-FX`}yQK2P)_7`dK_vu1u2{VZFokaSK zOdVen8Q}x@no5GpPI-I#ytjgoUzAnP@Pp)(ynqu%@urq zLg&cm^E5!~)IFYP>d~Lf_*D|v$4oK50C9(-m~jAav&UM4`v-2PS#7{V<`Mg;fDo`E zy@EhZH5CAWt3hneOYJPXYwQAD=917d1w6s&@nJ;v{YWc!8cMe|LU358rEwZ>(A0`8 z#1(`dv64s0(&K%9+BJ?Q6c5!N))RXIc#1_pqT(q-lXfKxNm&wv2(NqgG3lu>ve0A5 zVtlbV7Z94vOFkDt{uWQ^Gq^f@d>gkg+M0B~uXWk?LSzWrz=x|NSzCxc*`DoRD9x4= ze2rEQW92YU?qZp_PbcM`eOe`9h{%;5*n;CVpJ9&$*0IwsX5WnX97Uqavfa|^qEld9AYHU}>) z7U-i;UudwDa7GdXZda1d8MO0n&KEuDPvL8ab*7~}u#m^a)2Ln=$rO^B_S8H&WEcIK z{?*xLA-^*^D`^ECf{^1?&CNWQhR2=PGI`uEq`orxGG3$CXvE>+L5Uj87s|3(ZuUU7 zY8gkxQcibEJ-EZK{_3+56<`n_)6ppmJ=S>ZAkVGk^42w<@c(9s`i_`C0&iU1Y)atp zxXoO!o>)+z@;mRs137F_F432j;DOikbs`3&wgL%S#-lx6*>>YfSy4GDqy)tuFu9sE1t;`e9;U&pv6z(OkzLSfEM znDEk`gG^{;*6j$rkMXu5znpz@vYylNob>9b>bHayr%yAd3)Tg_naHkSmCva7;tPim zF>>cd;5Ka8cBw1Oao;ib*nRVRsh1`~Kkzz$s7RqkfX<9bO6|>`ntyTVCVJX`?Km}( za`b*HHfBZrs}=zf{t$oBh_RE!*m<-6f8CKK#V-}BKmsOgt!2?_Ap+a4W%`46COTOzIaC6F^9&}jha08W< zVDu^r;Jf%-_6}$PB43*y8*{#eUV;g(3X@yWO!Q__70E^%O%ELOD{1prjk7-7xm1HH zBN*`p``oji0@PI!k3Uk%lPdaNbN@^KO*OR~6)|NmxCAP_qG{MwNM`Eew7SQ4^E*tL zPYhoqSK?no?q$$%KaI(4|C*j^57t*JEImBnJQWsMjqS}M*;DTnY^dYB930mWD` zPLhm-N{atFBOt3=r;{V1cJ@iZ?Jzsk)}E(CEJxgZ2c>>VJa?rtN)9q9LlgzTv|i4^ zVL3`OBG3bmsS94!EBn@7G9`O*rIKTu~x)Vk~g+$DQsFOS8?3pV=F*^{5VO=!PPNQFPw^;FaBltH_T<-QiLA=Ta0ZIaVzXK!ytL=1QNTtxR5vw< zbeZI0JF_?ncx?whF2)*UDBN(3Doz&U7`&kfJg62&P@$?{CdK!pLhMsHud&)KbW!eG z05B1S%5a?m#Az?GSQ=?_&d~~o_;QHV6p@Zqk;Bsvd~kTHyKc^j;(FT z34#?sGE{4}x5sJ>tU$$|p&#F_{YY%dlA{3z0%nrC)VlJXTxUF1&jQ7^>y9)1PlOVO zi3F@lviB4Fh*(f9=@i>6@;74e((F=EySb#vp6C$POm&{(z}?e0q{%Tzl%IZjK~aUf zkhU5CXS^88oQ%%(A^D|*6`ygD9LbSOB+1OmNy6n~B@@W5>#Xw9wLZF%Wl)p70G#^h z(fD%Ja(;Vn$l>k(n)QJYuo!WRhEmPld5?;sBfA)NfbK;7!akP*Jl76n(=EI0wyy3K z(VM>jDi73VRD`$AstRrI?yO!=@#q^MDBF&RG67xDwmb5G(&?8sXuL4r_Y5lp8Owg< zf50zawOd3-S=UDIaP5nnq-7Wjoo17VVL4>tv8o84#fF!)yA}cIh$WJhfVncI6`R^)+6x5mK;n(d{6Qsm%f^amRa3v#iJyKfC)?+m{~f1AHQ zcq^o*vDIf8OywWW0_b{59iu@|RVgx>MN#=>IbzS!x5IZoXt%0JK?WyaM^F+7x1YqB1L7EEpXQ1Z;d`M%~c?Iqr?e>^~sl|s10 zzNjsHPP^QV7a`~HxP#%SF(408hqvkbJZ_M){d2Bz*{Ms5Y`&=uOGT%>)E)URNe(kVUC5pmOS{N~ccf zHm*`c?hNqlduP_+{i#ofgExDr3{Br0ajOiP)R(;qjdqX$NUC`%T4J2}%=6 zBmXH$GmsePLqvu?!`?qg>S-32BMPjus7@9(<3tNd&@5ph+i@sZTom?t#_Pa7z$Mw`Zl2 zZzJ)x$Czj^@_QXJ+7KDrz&$VzS^9st(1P@i;P3)m0~lIVc6TWh*Pvb<>El-Vx~?CzwXr z<0o5{n$_&KDcy>x7!syl6~u8ASMcoLC{}O6k|Ub+Z&93@e4yRoks-FwjI))>aR@2B zBuVCCrNhzqKD&C*tr0G5Zi}bzvgrSQbh()RN zbsBOn#a}#Hhs2Bk7F5wzX!t6tE*RqznbNttClQIUcziUVx+P@!IHIq7rN{vveJ*9y zvr4bVwIe$a4fY0hT2*A_OTvm1KCVb1jS|X#kGiuy=;_%io*B3&4#7ZdDb!1|LxBuL`5hG=t6a+N5*+gr#^5F|qa7!=i%;H#GIi92?^-+cRI4@lmV zra=x6mOq!9&Lc7j<}!PzE%s5q+DJ(L8tV*Es?hU;$8QuZ_Q{n`8+;Dw>^*a?RZ6B) zdvIKDy;{1kGfngD5q(`?THD;19NX!EWZ-q8VVE#?zcar+;${of^oiz#_)78o)y&3? zt*jEm`RUWJ-N2AVDX8F3*3X}xn(0BwQ<lG~)yI30P*Y&lYpZ7(-YHXT$4l7~x24WBkdI!lZBkJrwNUeoyBuYm9lQXn zP!u0<9dv1vpJ_ghl(3E%Hm*44&~NX*y>)S0d~qw0 z&pArb?IV35NmL7rCa=HtNDQ!vhHX^=PN@Tk5HF&bNbulu_J?kP5A_Fvjy(9<&~VNQ z`gRBrj)kaDh}w*t$zjQr&TK-yb0OEAvr3GDWy27Rr~g}%_MBCOJb(P1)wzDji(1(8 zgzKUk=?Jk&A0azvrwjGi5`!?;n9i0mQR zN*Cg~$?@3VS@4X1l;fpi(1oEbF+FgxZzHW9X_s+`T8J=(9E0%~2TV@MB}*~vZA@;Q z4Ks^`m(EA9f?X}!WHB-`@|?>4ygQVQal1Wnc1|p^fBt5(h5uFA zb-$D6hV`}ml!_bNL*>@_HZe1}9S$yMTI1kjd^b6Nkixi^#_Zs7>KWJwrffJuF$jCN zoXq8Nxb5*MoaIzw7~l#yyhW<~GVpQDwY$)Ur%O0Wex8e|Ir3RbekoRmH!iYdijO?p z;7~88FjY@QD;sBKOk2D+Ths@r0g80?hAS|rUSTHhw71l!=?a-qg$o0i?=f*}gy zdeOJhz{Eu$<(*$n33oxvzE1cs+A%scW$LwkvN*oFkzBQ^!}oGkCFf z^ei%7q7W-V-^6fEc|X2G$#mQv;S$%;O9QCn1PuUcg0BX;4|y{x zD>T461msg!+tVerYxRHTnc0)*b-p*k(o4H~iQCTQw((w`?kff(5_~Mfjr5utpk0V>pArsEfK}Av0W|2aZ@_UvBr6$f-=al2okpqG5{(=HgoFE3RTCuzCHv%AIa#It)-ppb$kzn{h#=KaqL zTkhT_sFU)v7Yf}|YNgGMl5p0IhVq9rlxXXjKZwiiex*LQob)#hYP9xmGn$WXqbOP%dxY~A(LQpk#Mzm>6RUE+n#DECs_ zh-}{XU&wKMyq};x&6np&C9=hH$4Xn5GCS?#L&SS_KQj^VBU~!D`@+s-QM>w`)CUq9%HKX}i>vi*X3W_)&gdijb}AmnyPRz^mj%fzQ{9Yb2p{V2 z*54Nr0n%1&4ro5TFu;HW5YEtf(T&<|JeJx2E2Z!G^&n|ox9gQ`?@T{8*>-iefzMl|2RfkoE+ZCG(QYs9At7XOi!88k5@OR{6swZ@bUx{8gwlGvgq@~ za-Msl*oVE!Zi;>pPy(8Dm|e6ppJ7=cOn7 zsr6bS6HYO-G0|iZkN}cRTtO#NiOxyZ@dm<5BN;qbj6o{ZThjBazQ`^ab+6Tu3Xn7{ z`G-=eJfa+67}>?Aq^bfOyP&u^loykZg1^LJfoWf=gR=oAJ<%Zw^ZG-B(@-g>k#fNL zq`1568U1V4`^tYnhfDNBHr)Bsh!1m?uj}Nt_#U)(}d7d3w|5oJOgf$lT^5LdmH33$ZO5g@9gK z`_;sUD)_ffE&N$ek(J4>H{Z{SasGkS&gHanU!LqMh9czsun26YmBWGRyEgINl>C7) z+77$Mifoq*CNQUjm2MY=zj5ltuG@$=Gt8*$_f(8sD<-y~+G1MP+^+|LhVg#W@C{n} z`t;)07mFff*CuEcxt&=NZ9fVvlx+3lss_g?T82L!jpTI zR_c)Kc&pu3|MfTR$XZ~-LzC|4-w^4p-zUvil!O zwmv)ui|XKYil#NjRW)}I)@5ZHNVQy5S1j}x(~WNJtf}7%F@R9HTvk7%su$^z#i$aE zAuIjG z13_u1uKd&K9(l=XeBmYnWQ?|$ifz+QH-GIHgstZTu^|_-z=HKYb~gvA(E|LwsKaU0 z;+5&_n=}uZ*p!Dfq7ZdP?>JIP;TS^iy<|RrocNeRQV3ytLP7(vzKVxMbxwTD@R*87 z6T!jkh;NAuYbsuYcZ#@Vb2$L<%u6zcXY zjB6YNufrkA7-i3F-Q3}L{KwQ6y|L%_0Y@*m&~7Q?*MSteZn+vQfh}yP6_Zv4 zCYGC0LYohX2p>J_4`?_&=v3vvSn>BYdqHHVE-%ZnQ{@drWr34Ovof6I9Kpb_FR0z2+c&b2q2Z_b0Zt_V_LRcEgi@lv| zuxuPBF_y_#9lA_!ahyN-kc3bd& zL>1Vf`<5yd42#MCS)i5WM=BR>I)VOL17!m|GUeE&8@x^{^-eeH`yEq$$MQwfh1Zea zeL6h)?+t`VwpkpjTA$r&GEg+_B>1`TNdd=;I5Tqpum5a@Sw3MrrNDSL!@*qh>A;5d zD?AiEGrz!Hx9hjpr=s;C7s|?(`Mw?*0GOK9Ga1ZgD`PW5#xi7A@Ym z^;g<*|6LNAV!Xh69RyeqFtFzX`EvZrf8z^t(~}ERlZ(6b?{{AC zX+PWDeQ~s{-RA$fk@mScJ-a)DZ*C2VeHaP;M+ytzUW*8KQZOg{9SsO7k-FS-Bkp#Dehr`p9(%4vc6c>o-xPKUlvwOX5NMy|sQOE!J9sJ2z((I3^Y_%{< zgs;w`*p82emBhyp^Nt+zdl-on@7LF&`RFZ2M2QQoNi1Iv10px!g_9?m=`zyHb7( z6qE>tkiQM|kNQQ*aDOt^CBV08CjZ7ly9L*az=|yWC~fCkPzR-s1L%Mvrv>Xi=xv!( zZ@JC*X;S)$STWNc-9~kQN~m|l^Jk$p9ofh55M|PPfx$X;4&HH|PgFq#yV)tA8mpC< z2S$n`4%E6vBy(v3k*Ou#yAP}WRi0X^Ap$?z(AVq!todMUM1_HpGlca)uzQ~|smm=N zYPpxJq6u?RytQpocX+M0Uf#`K!LvSdM2B@I6Qw4TGJnm_ z51w<`jvY6>7d7SbM=CEASE{a3@#upW`&7-nTPDs%af5d2b*deqAFKCmX>R^R+VhTR z^e`W>Yzpu?V+xTz5>coD3}kzR<`RbwRcm#{gS$?P&52o*shfL(;d?!6N??fLRlq@x*jT61-W6@P@{MXaQ`67x7eBkWq_3gvbRsOf z=#^kqatW9+90UGHJ@NFzifBqG_4hPtgu z={5^cHzp~&*DF39S=kX!BqzxaArL>%E*41nhx(zx*-Sr|*#52~a>fT%MfqTvIt z2a#cW6up2E7{WseGSO~?XxO+LVu5bmI}j>kq+bTjJSGhX=4r`MLKv2|+8$Rl8Jp+^ zR;M`t5K2#*fLNfofZ0ZXydr8mE-AZ6$0^KCgr-p%89A>Gz(*$Mw$IvjF24EBG9f4Y zXfA44kxh*AiXvmkzTd#JPrn+uSw|rNYAaveV4{iL8e@dJS}3?18*LdR^K|ALrD$dN%BpM6{nK^wE^;Jm7S_!zke0gx@SFd5XTQ zq~yAP`_;fQxd2Bl4?`!R?Gv#Q?73x^7^YxLI*gNJu%bnNDjr=EE5de&CrmbYmpRrUrh&pEMxiyw2QO;Cp}eFxy>pNJgJ<;Md5r3f_SX0h zo=P|%D3wV%4eo4moN6gW(IJP#Ck=sJ|ED0s zh+rfvfgl6|Hxo$&|4&>pKdUeK%-SEHP3oeFfhj~FlG3}!#rygl*5_`M64OINS8*p( znrl}}dMsc`a>d6I77T0L5l~6$ZOKlaUB3Ot`WY$h&1KNQ^)(^yy&ck*UPEfn>D070LQy<}7QOa4oHAnZ1 z*goq3Ko>IIJo}26V-Pxo%2|0(BpKW-@HHUAKXzKKqc1eu2=Swb#Sbwj;8$-9gM+k} zkoaE^_@9wo7m&ccf9vudadV1S&~i49#T^wFP=pk&`g&&{z2X`dk(4}T=IIz#YGr3U zB{&_(pGC%h>(DQDdx`XpgQ-E?8@gpU!k@{iWtRRD+lFjM)Z4*UwTqpXFaOpVU0I%g z^G7S`O6Qfe-!r)54apaO0XEw{0@T-yU)rk>8MB}hAQ%GavQs&tX{^Xh55Mm2Y31_& zuKD6;1Ytl}WH(6|OSA##x)T9zMFWY96wGGfjKJh&47j$$_f>nU6Aq}}2MP*a9zYpZ z%XZ98-wk<|fTI9LfP%=sulsV(1t!PS1=?*GKAjH`1hnO{5?$y_KnNDs7#QQs?>?Ub z?>96Rb#u_Mq`K6!N4+ubhLj|Kk z2rC4GOpi%Gwac_Ftl_hiT^3tvCv3J@zI6BV>58bC1grZ~=w@25BlI!R0-lgh}KZ-kgh z!r)?Jl?To+FO1qNM#(tx)24y)BfdzliT%yHuZ4rBp8FIdbLW=?&R`fNcBgxI*#jo%j*W*3$d8}RN@Kh-Ph=cI>hE|I5p zI-ZY>ja?|b&kuBTw@ygs@_9F@s%AOPIzyB|Cn_u&E zYr)Xw+_}iYlq{f$a$(FP!?qH=w@!;I)v)(h`d<4MT2XP_dw$}$h%f;{5z$Y0=mT;1 z9(i**I>`e6qCodx7mBgsBKvM<_3F>^;yCPmn)6id_0>@og~iyP_xU@fXV*Zcq@!S& zANd{Qos^&R6@}yYuZ@Nt8cVxl-JJJuf}Qz8^qaR>Nx*3oAF&BN;3`s3ciPQysx2=m@ zBsFiwCn%t5<)C1~Jvk`mrQvUf<%2;}kkT*E0Rrn{l7Yyp0rQ;r?18XK!3J=iE_J!; zH>=yn)aoS*cWzDb<8={`Q5Katxt-Y~d{zAAGq_X`-TGR&V@tbzt zir)B$fyE9t_OJfevfS3LG%EZw!&OcaILKpP8WiT-`opRXLtI%#h#8fJ!4dB=x#UhH z%hcthZkICtbmhR^eKT=7>~A}?ZxAk539o3PMHJAO^Fystkz@)9vkZ$L$2l+V5WwBp zcm&C6wV^SXv@$PDivoj9-h)S(gqP|&Jnb<ZiiRI|!= zO{gW(T7qt=QAWO4DgsFNiUT6d18>stl+ukf=?B}RyMyQK?SS)G-pHJO$*)sb*3W+o zXOFeuFrlGy^dqV)3LXXxGZ?GH2@?`{KQwC+M7mDm9TM+~GNU?-D_-g6wR4HyS`DDa7E~I|TK#Jk(DMC`Xc%?Tqgg_mjr1an&y{LRvK)dz#E` z{*=|;CM9(mBDqQvX0T4_x*hY&kMhY2jWMPQdS8(=QRuZALrwwj+YDp0d4D?pW_o!r zEFesfRaN^(WCu3Cn>xB2{mYTz(T+WY(oAM%{51)UIdk@!c+ta1wkI+ zsF?FK<vlCHof2RO|`~XFS?;JGgb7$Hz&us#fb}M*qeC-tqEDnnau@q|nh7Hbw zAw__~qJY0J<}5!q(cGd6Y?cdbO6Dofd}+Q!=7@_DCX4GTyzSzLY8+!o)W9}tR9oqT zG(B~)cGGg1tP-!l__)XoZ$aN%NJT;wgD8k`k2zcL*7BDr&sZSkTH;wnE_yua^Zpf28?(V0HAe)8nW z^|@2NG*jUT`;z*~y0RJR8R;|9L2P&TJa7SBE|0~Z%C^GXuxBZ7q)=H2D)3%Q%cgA2 z6PuGHkW910SoPgIE9blcivMpqs#j0!KS(as;wDl*$Q9cA1qge+5Z1@XNdui6}!IYay_4PKUfECt&&DTwvN?xdW&R}_wDIdS*ebV`w z`36fHoAh9%_dQeRlo)b})4UjUZeJkOi#6sAObCD4bK7N@Ku)hpV4OTZ4%Z$jO8UHF zVM6Y(U2PoAtd6F%MfH5InBy;E+a<|Ag*@}=S z?6&;p@;d$u^WU9AopE2OTr?YQ6`rzKR`a_X&+vaD%Q|AK=lJT5Q;{7OXc~-(eSjCU zKH6Z<&Db~v%}ILap_#9D2<@^vh9JdpOek{W(@%{UBL)_niJt-V^xWE6Q{v)@nk<0W z?rwVuQB^Tz)|r{8n%C#VpZQRJ?5U@>>QUU`DH3G`xn1bEl1t0I(o{72`ixw=f%dT# z_#do^VOW^np{Jg%^UbM_Er=oi#Gh&0&9Amto)Ws?(nXb5+=r+ccdG;c>2N-mZ?lh) zMOO89Sra#L;l?DnRa{)GL%5b-%Z_0A`zSOTbPZj5u@5yhhT2%R1&tg|LjseH;6%x^ zaOHEUsEyGS-2T&2Mx7nbO;}j* zc~aMKDz0>RCzBALLDofGx4oa^F=m6gMywYWY%fHYnw^zo+3Z5od)}1~MA z=gkX^@mjVQS1-(h>4PUy(6sk+x|0?EYKN~hoSacm(!8m4XZiwR0U@`tOY<)jt&G#E zbH$?-Bf_;1Z3oS_d3?)ZT9D!EgHP2jyDY6 zx0jZYf31~on>kRlHx6ABl{p*-Gw&pimaaRC@YeGeCoj`AQtI;P_`Pd77i^P{+FNQ% z6F!ZXBYI+_*c^#pBb5Hm2S+C_vt4vDe#A$_;Licem{6lqz^(V+@ul7A zVi$H*Z z@DRo_;nmOVq01KLWA5X?d0Vwr$GgL@qA^!fC_h--Pse;$=!heOi2%;DPU*H;o2aK0 zMJGo8fSg&F3ylo{m`#?*uNgsKs%rHKJpP6rDzWj!Y6~Mra~$f>jKSyPRYu?%$~T`p3=`_wP)4;wZE}Y+h-9Mk@x3) zoqXMmI}PW1H(BYJ5(=V^|K$~(^wz}k^{##TpG=_nKh?Rna@n7P>JE+5tJrQ`_~TA= zVqG?zHn$2T=EAMli*)0>Ve4~zF)iq>*b&PrJLnIn_xjtvsjxomjQGzDsyCiEFH(?o zCvtR^&d@#60V+df^%5HqS)-Y*>Y|qSul$^%;z__9u|Vy+vh3rY8N$ zms6)(Zi0UeKQZ+h-uYQLvDtY}{6+j0hd{nSUE+Ea9|&a{jYh+))Jf)v8gQ6IYPpDy zI%hI-+H#*z-dAvcZHc2$E92M0-`5;Bf?rbq>L(>Te3|bB+9HdxWyHQSkf+H_GDZF4 zKAu0jRc-x%`ehG~-b(LxFY^b+>AFZoK;aJJC!ZC=hc}_fsnYezZT^qDbhEy!=#bS5 ze$71^ijvs_v2ehRq`AXXq0>c-$2alWAo+)UAY z!)`r0+qTG8xLrk88+NG%Yr<6)g*-rsQ6YIOUc%+w{HJ>j{W>u3CW#(SzO^fAMuEt; zL1q9h935_}#c9pvK+X`Jp-G#GA2sWFk>R|W?TP4>tK(wQsN(n)cz5-#-vcd#)uy|; z-l0$^i3N?8)MykDEWwJJD7%Ipqrb(Y} zk{n9P$Q^9UG|K<8cKR7_b-n4+<7-vFLW)7UzIX=|1N-W&=w%Xw506hczKO3eIvTJ= z-~Rp~0>L2&yX<~K3nmMLL4BjFwh+OZBrfyz_z{!+O~xG>%rRp>Y(8{zq)Xg-yWY4q z{B}m)bE**nD;rU>Fw~9(&YZ{XQLHmQ`n0O_CdJSZTM?G&9#t^mB~9q0n;MKnL3Z_0 zM;8^L3dAf5uxLURN3Tnyb(tdKyZ?8nd$#w_u{*7N4bVFzqL}3L?O2;mjvM~=k5PPe z8R^4<{e6=Yo)sq1-Mc*GjLoFsqy=%&cv=adlt@1n(pJ6k-(}8Q&p-@m$+oUJ`8!or zEqn7{ms1}wC*o)9c;^ULs}OBVGJN;hSWA5m(9utteMOZ=ajA~Yc=7xK2{RisDV%r+ zUc0{xD*)dAjIt=ODtP~&v{bkF?f(yJqS?ly%C*}*Y-bVOc>fR@Ls`QKx6r?n6Hh$K zo*{b!#E!HTh_DKL&3F53TtANO`gOm{Pgd4<23>8Q&2fN4h28`Um=s2tA1M2$13T_! zEx~(~v6yTIJKwpw!AKE$9TBJ+lH<9va+|3{JbFfoR5-03yo`W+IA5{_5MQb@~l3>VvHe=wh%GRmq z#$1^akH9C`q*<9}GPNO;2t4N>s8^tMLddp2bW#eLaa$&t2 zzo4+e5Nj=FIzXg@=jDZk=H&n$Fn!p>fd#NAJ!l$Yc0nSu&F4nmZcC(+x7`oSJ^M=| z+x4$QCYql~EIWCE2xJ08f`XA>Uw>|9n#Dz%qm-AvH%kIh_~m9kVb6oweih<3Amjxu z)DWLn!Vz=WY5$)Kh^@`2|=l;d|kMTTIHAM!g+b0&UF@S_{p#VgzE?4#5K6@I?yvMOl< z0lNK5+xl`YH3S*eHzx2K;LsPexpg@5sC<%?QRx(O#QWJ*4h1BwC-n0#er;t!g=1ds{!;Y7FK1HOy3&x32B|g$CU+a%sAN4Zf!zBAwoC$mKIUilFe35^ zld#1{HZj0K=+h%Lxjfc?-w@n)e)V_asPz zQ=_(i93fT^iE=`&AeIuFhP#74YAn-s0!-VOmBal9k}u9R}Tz6+6w@RO3`S~))vSE+soIZzy0fy?uu++#!3 zCcwtVqd{DNfqJ#ZhcCr_gowm-wc->ar-=#|b1xpe>%>cqB!4b7wjma2fnCtmuwP(dyfnSs7P{s7D+R&&Z3-8|ZA& z!y!bB+*`?`OOJgT&qN0qgFw#jocCw+t%8_xaNQ?v9k3Td;eW{gS}20B&XZ?0A-B%s z8p-?6pOtpNLVEwyUn5RE$B37|w?9=w;g{FiYJEpR@ZM@mL^_PtG;=X-vKx(6vU_!!>jsc zM1!YO0ik{hX~?pdSX^nKZ8e`MM|AB30y%LQXgvQM2bctphx8VVILSley*T`q8O5t8 zcqL`6Y?qe&Ct7c0JkUhw$oR&76!xG8Iv?e>q}ewsM*FkRJ`BKC^UslZm+ z)n4BxUK6TUc+@gz&85;<5+b|F?4C2TwevE<*(pg4VBPMwAU~-{%i#se`H#4xM8BHB z|JHYbHEg#Qd)o{fsvTNZ=qe!nV@wm5!4XPmCobSxA_qfAf$r4nHQ%$x^nj_=o36NC~#< z7L06cp0ebv$?mgWb3A@z#oj*UDtj62@jU+Tp%-R(!6%;^odWXsx?{_}$ncSF%7RBf z_$@#=zm-=3CxiSf>rUCgoqzh@CS4~d!io@2Mo;iMWp(|__w(fn1vtmr=;i-y0lKRrJH z-{SZ(--XE|(qDWKqemR|c7=C54_NSt^+sgSeCGA9Qzw^1nd|`h+#1=Ej^BeVh*`B_ z^@fwSZP8;79>MMGl)=y6yog1(-q`X0m%}An-d#x^N}cTwDz~LAg-_om9Q<0I)cdnl zRK&M0OCWvly*(L08Vds29ua|Wn+^MMs`8Xu>i^0L4^)5K!lD6cyLdN%cPK&Rm|ebf zGQ#FN2+qM!(c?pkG> zJhE4$&~Moz_HN$2!uaCJJJ1Mtks0Zg(VC2}boZR%5<>G#_d0^+)bH_D`jI^P`P{_} zz@Qg<>kR+>IPDY~_59p%vCV|!I5af8?RViFI>CU|faz1|C`Z^!n@Na5ELiusKC#lu14#zN})6yUZAb;CUSAg5VG@zTtNv3? z+|2YOBdk!h@PLm~;Cv;FDYo**EW|Z`&8UUPs|(UG9kLR?CC}2QBR#^c%Ry9P4EfGr z8wj)d$MOIe@q(EoQ&0of#XdMe;=Eb&OVKwV0R7JSJl)z+_JcqBvdVqC4_IJErM~Hl zFh_dp9zKHM%u>!XWgOurmn@-;WQ|e6E2_yNMy6sL_KV+mDxhBtY7VH#wzjq&Hm9;iZ$#!YbERVd5Uqv zxG9K>X3Yt{vDa=hC~jkC{LnZt&EVX{T*-M9GkMnh3J+5UKmqSNgCAE_Sv9`#Issz# zw7C_fomywd?CfyRZ8-}9%LF5a=fwk-S3EA(nbjuy4DBq&@O%ES1|{&}k~{g1o3Tnq zcW)4%m>Fpl;C-~44dHi^8R09cwp2_8dqkiq3C25jy7k(x{0Bju} z!G|~gX&arV(IT!Z=cYr&^%Ba})SrMGOpt8(rdEyIi%{3JQTvx}ui5>GnDj*G^nrzb zp%uYpJG%h!HZwa!H`k{!Dfr(nc^1kpnDLI-S4(5tymAC*na@b$EfpgQt%nPwh3N7y z0v5T3TD3$bPuz<_lC$vCa~XI18%A#$e0b`wZW0(h zvqIuRh9hA~G7}W!#};rXhcL(w+t4v;SAYbF&_dEcDvNL-qg#$eOv91%oQ-IX?;ku*Gl2U`( zHiv-H(JFwrXQP#QFtD^5sSA`OEI+EC0gl0K(<3QLw)qTnkyiu>)MrZ~po;qk)A=?< zei{acdNuyplG;hw?k*(`^w5dJ`cw%Ft}c6%-+QX9aAxQDa8^KF0*LprtE14$qna#w zXVqcwi2!P)@@6UZJ_avR0y}=nvm4Is5La@58M??nMpC(Tq1BRfBezVv%bV$NGKudgMb0DfcVKRGb3 z?yDXD2K3KqKw$5|WKkdqg&6#&;QKRlWSUGOb3;M{+qM8RNQm7NdY__9KiA~ZgNXyx zG>~v<%B1`4MgPu%bg@aXC0wD6t)vbjQl*$IP+imGikh;l!)?Td5vd3Pk}9(Zn#UiZ9@Q*|DCR!T@{-3Wxy4WyWVmJTTCFuo zs;u$NK#im`-1KQ;+-u(;9krz=>oa75X$knGZf_JV1*Ht)g>fT&FL<7;<`T+&xi{j~ zt*6n*%Z!vH@W{yLRg_6aR`+ghF-abz6t)fA3}w_Lo!LAui9IYWMQpb*6@TE*C6nK` zi$EJg5s$@{5PeEPYFv@Y?UqSxO}ey?O7po*;#_Ivyk$JhFf{f(p#C#wD_N4gmMC^S zq^hHYo%5;5)Xiv)6{&1n>vYQUhs)K)`m~G+Id@djI_}*1n91l?vy$rJJYM~oa_Y+Z z{h^%}tBACLMXQpO>u7YNt6WD|jqRi*dT?X(d;SCTmC)&A$jsJj;Uv^nL$g*$e-1ia z&gG3x*3swI?S=<@GGo+S$8YT>1YEar>p)a#9gj$q1M!P>wyz%9Y&GZ7?F7Nr1C-HB zc-S`IW{-K|>j>@iWV2*1N3Ds3uuPU!YsTK7_x3P8!g>L8rs#7?*))4IKBls9WO*f@ zmo=rTrT^iX{9WkMzuZEy^n;jp@z zj-O?ZwP1$*uQI4bn0pth$e#_oE(>{SqMFP&v-4Y_J zB?ZpvO+Pg3hmTH9WcMiK6f1;Pt?iOlHro4>+tAvtVK2G* zc}Xw9@c*d>#?X^etJ~DS!f@;3hrhXNivA4_g^u^||LL6sv81_!itTT%&fM`8Do zgetlXfhX-f>pHa>CezJ5a+CKJB5E?t-D3Q@I zv;Az_{%F*wqQWVk+*x^)@=9sx>ldws&U_`?fwx|)6i0%hGq@6No|Wjj+Lhc2#LbXI zik@&>S#lthOy5xS4viawbfqcF5t#22r#4c;ULsQqOn&iMQrAORQWXh`G=YxhM*4YN zTfgWxZlU6?d>wP(yNq!jqfNVxB}>Ww7cSen4lE1$g!lMN&~*PN_7ITCO&u%|6=U~^ zD`NV@*N5j%{d4(V*d&F9*Lp4o^=-wV4E$&&XJX#);dbqZ^8pUYCyEa?qdKs=!}D|N zZKGn0G1#bWFe1l-8nC}AR*a~P9;0KUBrGsNR8Um3F%kp&^sGD!?K|!B(qItgwkPpO z4nOg8&Z#<)4^Bj%sQjrANfD$Zj098^i(7$$Vl;{o&HR7r?C&hE&b-&}y`y4mHj%mu zNlfW!ecOyC;56fuZ7e6t7R&P^z1O9)e^Pe=qGENxwk%7Q3&sYU;&zJz+X!u6Ex^F$ zTu6(Z`;JIR{;Knn>IcTcKbV%&ZSxB`P>8MADLLm#sD>oQy@;IWvGh3j=*Qa5&VIQ& z#BvplZofSw5gN50lul%1ZW|#duBPzgJG1nxIGMaB*-obI9wC1%7zRoi%C^%k;Mn?+ z?pUuq3@j1^4v?E3B49cgqW>EY2?-#3jqje^;JgycOCcwp0HG~LNR*rji6bO_n_6Fl zxt$OawF6EyR#iAg$gdotjwKXO)cf75+S~gE2n>cpa0mh<1W_5Hw7c36opP+~qRPFS z?z(HcYuX#9GugKj(K=EQB_0sAfiipahu*36k{xIzyD2!y5%vK1@c|DQ3Q0^$kT!Po zBklXM?*0ZWJJ6;!hoDZHGR|mrw+{{o{_lUy{_6}+Pm!l|BNl}Q;&@bv@2Wy(0-c_O zab6Z9oUWgiKYRW)Vv0%P;3X|rT9E6xVx&Q%6AWJDG0oX-H5vJ?>5A8;PEnm%C;H~y z%@URb{E<@x+!!CGA#@@j24G?{>Gvg*2lVeVHM;^7(Pnl#tDV)(Y|gCiIh;CbXJ$WV za+~#V|9GDufDe2U{2(L>iu$ z&FbBmZ9gV+TlVF2nNyNeYL2HloUh~eKdpS)>J9Pm#Xd(4%myqFVno%qUa9n|Ua803 z8#-)?GmgDZL7HHzH4B_FHnRat`EXP62|?edFIDRb!q%9yytA|?Ib5`-)rNGqg%GbH z-}d(Uw;KH$fouQgEh;fvK+gfZPMGsl{cktu>gD1?zL z`z7_05U{qkjReFC1qI#x+jpODe!iG=?eIufIBbyAS`i6yq~pK;J!P{R?B6jf<_85Y z$&N8sKi05v?h+0-IZ#Z-(g8koZ#f{v7%?Dp!%F^s91LTw|BvSLb7Oj@878i9HK*kSp)6{%ZXlv-PQ)RD zE`x4f_xM$H9{@mn{1`uWwLbR;xgELO9FcMuRbkvnQXmT&j}ZE~*Z9?u0F(1c4Md6G z%ZpLJy?$`%3V_^=J3F{;`T31Z7#Ad=bomK731~(`S)uLTR8OErP908ueHZaDB4D$q z{GZri&j-sW%|A#W5to*SAH-ai&E<86{%v3LDwPh%=3Mm7wrS#iOV1$&8oKgshx_jMlowl4ED4$f#L1!t6C1g9p~=ODPt z5-F*yQZ*RmNQ`~4r~k{Ouxs3@+Z>Q5N}1kIzW_;y+Y`2(U+=Sj1(9)2Vkg!}$DaT~ zSw&5w0~|KUc7%a7st`^}4doR9Pl!$j8b%9FcqlQFIssg|->XC5YmQ@}VmJj+^a&GW z;TT&?6ewkE94j()E$+}^)|h0Xjx{@?P9)U!BBDsDj}WU31 zAtcV{=d|bI-bs8=m>_-=CKKcXWW_GX0~^$^=>jcb2lM)283`*Z!V{7?x-M-}_~|s` zV|lNhxg(2J)xt(s?g(|g4crMAX)o}cuastffHd9kY=i3#SX1;l!-O06F-4v5y)!_N z{n~32h};!G7bhd5ytZSkz1eQ+sUW)X74K7DJFF%9?n#Q!!7ID?F7r$p*h2z%vFq+0 z9=`hOhOu`E+Rawmf`Ea#sNtl*!}&#cW`0Ouz3DI?ydh+i=s;0>PiQfT7Zu*A>rw!Z2oWMZdTlLANQLT4}czIhYZic*axDrD;QpTldic#?)QnYZQ#V&@GPdWKu$ce zkR96D(D?F+uOEL7E{&8{@#anN+7VOiE7M#=o-3l-Qlfm(Hnj`lCvjX<;N1eImGc}P zIfq1q23S0QB<*mCfZhipyXl3dlKdo_(zgrVEctLByL0)aRMXBH-Ttp)yZ_WqYe|tF zU*@4;)#eID=!hTcSCgMs|CA-!(RT=~eyOCyMAVSk!pq$%^Rswq@*cQ(TXI^ehX9#d zQzf)Vo7@<4U`9OSg`E*=es@n8G*SbT@I9!qVekl|qYka=BE@A6$s=C?(x-c+DlyNW} z6eaQe@Drh#XmE?Ex(!VKoZcdgD?X0w=CviN3tmmjikMECbJNHMagMY-l@hQIzV7AZ zriQRf5j1k=Eh_KlCFt5{BiAK6a8T){lxWsNJ@?M~+S(158s#PwDXC&%gvLuu_&~q; zp5%18A)_>(Gy@` zHu}fy7?5gdqUqRaZ9G+VYFVjT`f3hBTtJLx%QHo4W^k7Hn4dbj+U@EPSKG&~pSs!K zvyPmU&Tyr~vom3Dulo^!F^FVgi})a%1Gn9)rTvJRN`lw2KOkz(aW}5MO~dBSW@edL zwPwp4)N=wJup1;S7@U)OkZj2gQGo~o4#o=@iYEeNjFZoLvW2r$?(LKzQYnI52$jlzP&K3-Fs?@ z8TYz{a*Ip6o|)y)qHif|*~IjRGj3tOR55>Cr^87ZMJVZQz4x-c--DZz!bJ3J`mBFt zv$MzMB*TT@cUYc?%vG%XC_t5juJ=v#VIpp<4lLvW$%%|VH?JfU3&D=q@FkudiARUh(d2N+ zWLd~2X5t4S?fb`JHk6Khs0b;)4m))>Bf>MuG>~md#IxJ@3UBxJiBI@&t;m6*b~tLF z>Y4m_C`-#PTHIv21B#D$$;E^HZ8uiYUtFhV*G%O%3~-xR^LiE@?1e}-zAdW`mbEM> zF-u5dt!0p?EOIRw9HXESaG^}g@5b$*Gd<>1m;%N!sdSMt*}PbmYdWd4wf_iOfHlC+ za|MYGa1MylQ*%_SxCI*3>pCu7wYNkflt8fcEw)9s%#j8m5R?-^jqs5&y2-XJ@J1PZ zvCEQxGD63Ll8sRsnbjBI1u1mJ!>4@OBQ%73++6qLsDSXuV7F#t5G=NzBh&|HiRm#q z*)7%le!&>OD#^0421Im4)tJOE2i~}o^A-DsEaeX+t0KZ z{sQInfSneVRDtp{f^<>g*rTZi2sAuCI!Z9Zh$ZFSky>G5VCcOA>UPbn{DxunR4-Zq z0{Rr3Vcwm`(344N37c0jkQV&${exerkPtp8!}^!LNFtPq`QzzulIshDd^c?rMzvmA z&&_^jixC$vO7ZGm0Le*_7u+*exgqHorQCbdJY~!;JgCi-!q5HtGLD2^A9dP#_`PVfh~Qf+*{6POoKUi6l2P%*Hl&QKAyfLqkaIKd`D8JY1@={Zhq*1zZjQU5-VVG9EdQhh(N}S^W*!YLJe?QZ~`l?e_yw z5+Rt%0P61dAXbLEnF=K$2o+w?V3$raPx6eS5Bi3KtXuINb~@n7ggV*iUfP^;*T3fx zK(YWg|IErMMW^{br`nI~*hvLG+;Qa(JTE9Xz2mD|`K zWkMsBLSxbz*}wwmYD`=a5~IW|zFKINTi5zYJdLXS5AlQ;aj16QewJ%pn@7XW)l@{k zKU1m8+14)_#x2y>CEb#Vl-cMv42b@BrfGab7RyPY#BuR=W2k^v0h<(f44SbZ&kQd& z1c7+0f=Eva?9UId@{fgyyLhy>XLZ>Hs_gVQ>JLK39^$?US5+# zF8FwgP0>wLKjyriCrA1t{C?ppovgaV>1c~smv@h!4uR$(`2`$DeE7c~B> zpO)wsEU7ZQ#)-uJ6()96NKJ8Y@H7-Z0#aPGy|SvlSYbSo*fbFCmK;D$X{<=pL|?w> z37bU`XR6OqiFvV2n$yv2RQ}kYO5LsvtCo2WW6I7VnMg|XEFd+Y{o1b`B?Ku6B<2+= z&U7;n*3GsPjMqSY02HvKv_gCJS?}VwnX)lP$9Q?8>7cln_TCYaRXg*#;^hb%1uH+IT+qbi5QUIEkAPwUL- zZcK{joDF?6iF-BK80ny(qch>Bj2#sVh;E9olq4i9E2BhC2h@ZuNbOcWnAb?Aj+ol{ zPjg%dw*~)|Ezvu`S2h4n_?1nG-8izHMroCi)H}Y7r8gOC^D?nEB?8ux%nux4T`W2w zjmomxy+te?pWb^_g#G~wZee%3vH68gXQ75Jt@23+IdVE`poA6wl8hR#JV_HpwK4Eu zBw$Qpa>tT{f!Cet&Rr4Zc;X#7JyIEVCMr=i=zs(;dVe1C%lLUbh~NS0gJ4a3_SBi0 zWKV|KrDg~RR0H=-#?#LMUi65trDJ==U20Be7 z%Xwpj z8rGRuVi>6*eIn2 z4sdTqnx|BWhY_zMYaCA7zUpjza))jPvt-vupa&k7+<6n*ist$5`NN|BwO~KBX%LYryjwYCD`L@BOz&Y#&6yLk zrl09#3<5$~a4xgYhziDTTr}+GvxUZ_irgNJWb6?^#5mb!Oz(fO^4&7G%H z5^GS_GXIRAC_Q6#bn~Jjo?A1S$rmQJt!U~*P6dbvJ-70Rj*C#qoAg1nM--Cz!Y317 z=u#u7#!Wgd*X$9WGk^)j?$&fleixkNGkSM;Ai$K^JD4}R=>kur91A#{$yq51$wX5{ z_^yQCFMy;I)XX=RX%FBGjUjh=$~M62v?QPtjW|Ux>QrIgjQe~*2*&>nXZq^b5AiNL zZOI)6wC_3KIl*(?NODXbHzum22a=JFGaEv41mKQ*TW=5nCK7LT+EZuu)vXw=D|?|q zMZe$WYg*z7q#{n@ie%~;HG`r$nwUvewW8XJl|HLR?P9D;g~!gQW+^ITmZnEFJoC&$ zpqK!kl`d!W6#u8;k_s8NrGXb9K``UKExyy)qZX#Ac7FthR3Nwo1`lL3ODL!o z#aVG+vZ|XXb=~EAEWJ7~DkOX|><)vPi!TI8y2~t+U`4!!=-3qTcu*UzvmX| zU;vxoFY7w$fXLF*)+alS*@;#LhY>_6%d`y63v$W)kPx*5f^bYS(x#$=iQiEsSbWTj#TRZs?$7t8|iN~L%c(PyNt zN>cc8olk|i&vOa$9mc_tq1qTUO?Q~7+#U@N=prKaG!!!T;ppICO~e}UM7l3dA&J#? zf-}{*xAKAEE{qjsE0aKYPnTB6aq63DUe`n4s;NtDuJ@l2EaI^^NCY{ITBxi%Cb)05 zg&!!x67sqr4))=f2=^B;|&U9nAtxK%O?JrH(qLN-KLYGA2ys`5Pbca_F5=9yX0 zI@KWOZ;?E|06C&Ni~*hajz+-M`jaFaJ2KXs*J`w}5c=M_?075|63ZIOft^DH#ZttH zbQl)6uo5JL99BwZ9>Hda#W}|*0Iy-0IZ%nKCgAwd#WqiGzSaX5Y^gk*)brv38S)wL zWOF?u0W-yO7LT=1Ezn{_pw#>#jSuWwImbE(F^wt}}lf1z<$?f+@!t&&enhvFSp|oAa+s9!U zHXe30?GjS`pv=ByF^BCWSWJbRy2A=eiD6-y5fj~pEXMQfgpkY{A~P+|N8}+K%cVH8 zxAHg&eBe|%Q{GUMi~=9Hw)OFF98FTLS>9sw=B0b@E4xqqW!sxF_VU+f1*fUgb*|_4 zRz3PvJ}t!oYhpH4pAwRi(5Y}*;!VBKPpDx3vfLzB=tRMJ8;%jV@j>6aqg%i<1&#b+ zk^D-3Kdxp(KRuW4k%?rmuP94I&g0b4>O%zd6?@oyO6liO1^U`$YEO(w~dfSW-)I*JFbc95RKnhH_Ueo)^V z5O<-H?_2BbD+u?V6s?hlkNW{&D{7-4R^P`fkDgL0;{mp{b)#&5Aruay{_1@GD<`i@ zS^hSgHnz=Q2J4n}WYT?K1Ba~KTmN}=+nAMVj->#wyKf}M<5@kRd1_Le5osxl7MTWO zkkpGzVMHjsSp8MXcS#7V+PhkS79{jH0@}OoIU2e8CV!dMG+M*m)+daUL`I+W-4I(& zUB!OpWEez0R`B*0QI%Jr&CRlbeRfkm!A=eXZTHE;D+5#BaqzefNU;B5|N6>RA@|Ob zujYmt7m3)_czpI-ihZS1NN z{mBusZ?O_Oo54A_*Q29z84jB*6Wst#IvTqXn1FOd0WHRQYg4!CYPDfB?VoaEw10XJ zM*G{lAl|>>gn0kjc8K>kTL8Snq(eBCBR95iHQy_>TsDaOw3GMV`td+(amo3Y-6~SVgFExhSbYQt48O)0=vGOBz@93V1J{b z%hnjMkz5Lb^ba^Q<`P+L@G)XOzkbHOO0N0Xg0Ihy$^3ajb3G!GhUm=0X6-0?ONj*> z_f3DrB8?gdNMPm0cL=p(y+ve&>N;XLt~MwFIj|UsJns<6WB+W8-IyLPg}oO15Nn;A zXX*?`q_n+^0gs7HP%P#UtYbBYu|?p@^*>8)y$gH5q(rM|2sDE3?Nr_ z6;wk|U!eBTYxBbDj4oegyx`H4PD;~E0DDx)A+w4$lWIO__?$4^47wxdhTYj)uj=EM znyJ8s%uB-ov3ip%{vp~EGl-_rGMMKEfwnp}WIi3G1!!q)Mb=!*J@7~jy3`z6D|(ulUfoM`T~yvcgH%qlR3L>cQz}3KH_#K=7el_UiNveh$%U8? z_LGuK4xOlJQHD;H94v&y2_rh?&Qj5;yNIP~_>vbFIhO?$;xT|Nf?1iDP{&TfzW|C{ zCb@Y`IIq*W&G(5WFw0|-!FC7~@WzQ;j=+kc@=CQq%FR2Z@=-e+m0g92{YkVJKEF#;crZ%nQcFJ%ER9s%lZuHyt zzJCQXZKOUpq-8^{@!U>*5UtJX?PJ5B=GmY497K(+_9#(mFzjTf_-f`njzVGrbu~ zIo%B~2+9wdNd~?$Ckbz>{gcoZ5?p1VB{W_&eWQl99s=eyg47Eg{UFjXJqPm>4W7YD z$9-*oALJ8xuo5PzsHx8)k^U}Y)`AIEyYYQx=Stt&>pC^1 z<1Ipzi|(09mqxhhS;O1DqBDH|#e6Brh?)T?##hqzUdF1q6jPRD!uP? zbWjmu@AiW4LERk~L~lO?LlBOkXS8(lwDr(C^0>rF%Uwqug_tr@MLb@WZA&whtoIbB zE8!EYJKqhOTZ^g|%QMT``HvY}F|fSBy?KOoxP^}j7bAZUs@!njJZjWwL(^eq=6+n~ z8%LxAL!~qu?!w+=bz*cNLZC~R!u8OxQEj~wJTO)h@b)gBEo@zQDyI4YXo5}-(Ea; zYM(shM=smh)qbs|w%6;$>GU<*xxL%3UDH z0vH0D^OBr9a`sG=$rh?)7@YIo7tGXb<&x^?G`z4x$kihn?Wt54!tl=`j5ks~^J>k@Dr0)P<4=`SHK z9HqZCbCIW(RVN`J;D75Pe20ytLgS&Ts0!l`bX*&cR3jPU^U~6tO^zfhGHzeRUZ*DYv5=CgnUBb27sKfkX_*_QW8g{ZJrxy%`UQ0*MHZ%`jL5C?){`F! z&C1heYOrD0xYm%Mlg`aWz|)=J6XL61(PaYmoZu*Oee#}dZ#fyd`&CdjdPpQ^urvhm z*}68VQ1kadK;l>pC^5~>n9Trx;doyON_o9|l{4Dr69cU$EWU&B<4x-^ZkyN@g+6xh zPwMoB)w72E_{3`d-x8SCuyV~Y<7PBtbGlz8b|q|+<4fOKPHB=WR`~8S-zT@E#MIz^ z=alPCn@!+HKuGW89YXG6E7SeT?x%L$Rz`6^7@OU(bxT^EXsU2P?CnJ`_xORo0LS5ZqJMxCVbRWeo-#hK z{zFi%iIA{N#Sai5nrc7MZU}T|<(}BnT?3{T;ZumX`1pI_wN=xH1(7Hxv$bO9qbFvM z=4UX|gWc*FmBdU?L8VP}WEBU@DdV#;!@A>HA=Y*PjwWDlg|GfH5>Q(U8=Ya^l!UuA z`@jrShkPR|fU*HMN(H2f3L_iHxXfRx)nrwvq&6c~8APszz?(uMOM~~;e4-k-z`+?7 zfGGlRkkAmSbZh-=1DfW@EUpy$Y!T?8>kso)AM7dJxn-C&fjmLF2(TVpFr4e2U+g#7 z+4k*TetXy?4RKO}&ah^a69N0{Pzn%X8X;zvwD}fTRfDp#XjmKaqHNo}UcvD?D4zpu zpg)quKs{n;XPMnk&6ayDlWEX8k|(r56^l4OXTtD$NJe@v5fJxV4@4v5kU@+YF81KM zB`3Ckcdb1#4>KC1$+)+jS|{?MNO*>ms=Mx+CI?BKk~GjUN$;IXX{4>cn`P*Fl-e82 z)6I{U{cqygw40B6gQ97V*DIRULB6*KLPT`CR2Q|GilRB@t|Z3gvZLw#C-?I9 zy!hb|Fjj~seB&a|1(KNJ>wxs3916gZ*He~34@x1F)sNqi(l*9MHd0)QHWXaHyE(K7 z7cKZ-J*L4?vm!Z3S1w#G4ti~Cddo)5wN>F(8-aiB*r&s{6%BN!A zfXYqSk3jA<$0DOjjri6<$##L%7TK|6qVIW0hR0*(fg#o6fLB0H$oz`;1a}}DIS=m zbyp1H(H}*@XgRD90l;D@8c^gVE|w&ON1VYZKqwZG5%G1S)>4fd>}E_8%j0} z>CWmY4@fF`)8Fw6=$}2#(#%l{FRR_s*mX%Ry$HHIkK6B%!5A!-uyP}Uc?5jE0|so# zJYf39QTYezJ;eLe`Rl1hBpc|f(m|4R>6nc&+U%5MHUVSI^MY5$rR0aBG=BCa?{*tv z8T?`Y(3M|9)vn`N-fV}=sLpm8aiki6a}XqLIP~HXQxETrC1SUhA1v?k|2gmVR&_R2s(seFN2Y%r46JqWZi{zMzO@6d9I)pcW^+TATpWS22)!K7 z{@c%I{Tj3rhq(T^vsRbu&Ze%9K%2Jx;;cHVUtnV^eewPNOqD#*TeOfPRjbx2AAHc} zt-4#2+gs(Qnd`dLr*F8*$-Dx&zg#^>Qus?OAzM6)zDVOgj)gmgIpO%m1%Wz|)Je^w zE56KO{+Rh8zqjowkH|kGk|#&d2je}T?ZiXYJha&VyO4V8#=E9bh(Tco8rT zPe-~LXJF3m-dlc?;6F}7;88&8_{fAd=8#U#frP4_L49h#jzVGc!5lN~#ic3g6~oWV zv^sIRNviD2sp=g0o*CI#Z^KCv z#FxvQ-B_rBq7Gjt0mKsW!!`BC6$k3Nbv~=i32Sh;2_&#wx~G` z(eO_m^%*b>b$6$%N#e-yrUExgrg)Xbt1_?iT*?_%W<73Jkye1Kq|hQGIg_l`b~tzn z`?hTr4-{}gX!g?+=y~FiGlIKtQ3(zuiP@z5*mQMqJp{b_?lasFliFvhEL3A?EU$@}>?(xy?0}JwQH8W)@ zgM%@G>PXH-ueM<_`@adULW)`<8U01d5R+zQxRm%!F$xyv|chrOou44}{FQ zu6YqRf~q96u+ODLO0G^H%4Fs2B8k-be>oiK3g$C0AW6*^ms%)ZC=G0PHVrTJK#p08 zLXKYE*x7xsPgH(6W4>d;@{V2knw5LvDa+k`?zu!b?IaU>6Z`Pq6UTXDmMjv=q=0+& zbV0gTGkOq6NxG|T!|+7LG~A?B1pV4nGi0U@Nzx9T^F)#<4HAstN!zTAE&*ige(75b zE&EHBUNV4MV+@np3f(yUgLS?vS?RQ1T-jfytki+QU-&E97h_7L+8iXKTrxUZSLO`W zV$?#Q?RP!b+FLOvP6MA=R(dp(9y_!AD3@k>PN&3w;8lV1W+;Df)|ucTc-JF?m*BR~ zOsPF17R8HHWkv%j8E+8z^ns8d>p9D}&pP2~Dkoz~<@M#QkC?n$ z&e?ks$b<$?W~FX=nO!(W5x+0$ryG2dx-rUj?F|2CK-5Y)v02RT)wWJ`+B%|S>gH%j ztfKJtZwjIKzq@q2O_0W5goIMejlWX#_i4d8d`{b6P$HnB{fI(9u(`CzAZ=h_p7o2O zI!*lxi_iiR31c$L#i%^U6{h{zleCsq2#-&VQv#A)oq+%)VO&84x^U<84CMIggs<|k zy=BH+=Ey;ktf{G+F3hldr`GGNcZSEmemrDYNoc|SQck^RYZ`Xo=5O44Zl=_nqJ53m z?jA^dWvppdl~<{u*c`_{q0Ag3%_vJcw7Cau9bggfCgx23cwR=Xk^w6xrQHLW>mJ6~ zoLc6EiL#W%j~X5^KVItxMGgd}D4^Y)9{5DysmOKYi5BuUui;d}nD6_L6YasFOjC}# zHczo(ZSUG->j%o24td8i_|W>9e3D++Qxe`w@T9$cDvUBrFU6PyDH+cIXb67yo5J#3 zG40794Me%jg^c&;B&HbEF_T9x&XsSefG`7I4C>qZhx=cAaV){D41BBnVE){<2L>v7 z@O+e}#wYA`9CLORgK8)rap0>`tBHC{KGDrK|BkwuzlaI=96JbeGJ_Pwi(vS%g;$GU z{Zx5S_h+a9Wo0lHhxZH-?es7(>U}TAl)Q~QXj^ng`9!-l)?P)w#v|is_sESpWZ=t+AIf!#G5rs&Syz>JIdC**R%{28T7 z3V@q>j&C4r)}lPRp4ColvW%S&W~ir4e=5v=&{fKhhgb93U!Md&2bOjoJ19Yb8HK3L zy4q61UjHC7w>>t}Ha#-tZtH%1W3Rmx2ar!UlUNLfmEdH$tN}_H)_jlNOi-NOoqi9^ zg{k`SIGQU_MC|n7T(8vT(ya@_ty9AnT&F$vRoQmT4Nc^QnjT{!Vf(8~JI_I`92Py) zsKlD7l)2VxfdNW{PJnQm=uIU-Qee^9h&$N%C=>g=hc&|xSDL-sJ+%mnhFKt;XD#Gj z2zE4q&{%)2*@^mvO4vZ|*FE@S$1}z1{Oo{4vd%e)yV|NLF_6$95=Yw_z4vQ4lC3tBMDGfINUylPM{vLdC8$PvGww3M z#7!FCN}^#}-qt^>V~yZ$FrFzti)i5lP8Wc{b)L^3ngy~Q{tIn0A4raVvcVtQ$}w_8 z{3pGv*4Hunp5VvTf00XaophUX0ZP&+jLmekkfXZY#_;M=VNVsAyL*H&%BP~bR*Q}dWg0oT^8Hb z+8?1G&z0BSPn^-$hiXOPI+G&__cnoUIy{k1=Mc@&b;oJ3rj6kk$$N!*-WU(H*D=bT zr0V|Tqw7^x$?|Od3@g!L!cOqQSF7ZW$!NRFDNm;|d2K~(*`%*Q*3~y3q@}A_QE>1T z_6D(LLad5BIEtTzyE_8L9|e!)^p^N1XG>BwZkhJX2IjpB!BjvAu5P?4wikmTJr-d# ze~F%~qM?I`uv&gYSC`RHUPM?eSZ1ec==@HA#jy~*aWwx=5(dFZKo$AuQ_>Rp!25mj zSZFWpKHMx~mgDF1I61Y+^zJP>M|=fW1(A{|-QHr~ANxVa>i9KBlioZk*_GScI>eu& z1|bw(XKH?{PY2&7|BF?JPV1t%IM>@CuK1MYhZAS<3|$8;R~lD;C|B%GHu9HNvEw0;77(X?22w1IM z%aiOB(=+-KA2<0vs~0Nfhj)MhXFr;#l`0{U>G=9ec~qi63stjc&eM9u(Mj>TmCs)n zqy~jI(kAj;bc_&x@JKEnS@BxtC^T6o>twE#!UOw>4wdD*?dko{h9uAd6M2~^-V^XtQB8iDT>SuRV5`lF@KVqR6BpM!C7IOSK==Vpw&g(pxj3)fUkzqW=b~T@qFwtEZ zW+hV>@`(tZVIO~PD)HCr*ovK<9kXxHykgqU{en1fN;#jwg4p7qn!+cTEpyI5hH}vG z>x6~8sZ_AKr9oJMqy|Y0(OfufU3-I1W($>IBOJ=s6IioUUS_%(HTTpfCmY%9#O%-* z7Wh}nGS9alcExi=;#_~8?TAqrbG4o*nahwsLFg1}QWPF4TIl>4u;pQqh|II-98+uo z(Uzi8j9bgxoMgNzDV@owyPUubP~^g*#Jxy#7^83fyfvKkIEl$Fgu-3GXv3c-G_7y!TzN53|0z0QrgQ7caCIUODsHrJxMO^Wb*kGR?`kWpC;A=J&>1(h7!{7l6brcI(kLf%V{TT2<75-6 z8&zYT427ft`=>CKA>vVv&c z>9c-_$@t1_qhpRP6z0#+ww!e6an%ezStolEC*FwaLF8jo@%>hTO&IniscS@-4Xk^{ zrtKJ5&7a4q|Ll#BJS?d+UDhcz~oPM2|KSxUs4*+p8fP(ywu!Bkt8%c6sw78 zWyNMQf4$PiP-wJBw)J zFrI&zxy$w&L>{f?;zPdE1W50pp&X*=#w>q9Fo{|y964+OygHpN!b_)=H+o!D;6hCIj zaWcvUbE@H&Wtj%YJiK-AP$vs@i<*4hd0{uunqN#iOC>hj6>gO$NE&}#blRdD+`i|#RqLfDYEs|E;WZS(Jd4JuKXL$d|7$*@si*w5&^NgZ;jfd9P&&PAfyK0 z@-#u^rMW!<3dHgDRD+nfKzz(tB&HQ<8g4F2+(~@yQiKAa_dwrJf`{u|5QPP|UW&x-B%aYvU?T(iBW85A*9V0nld}B|2ByRyeWvN&^j9@JKZ@!Qbsb8_^ zONlcJ=M0REj)N6&mU~$eu?2^f;T}P5TkRP+t4-So4XIQpAtJu020vP`T?2z@1x3Vd zvJ1qX!amg}mWG+-dq>E0of@wos@EzJey05Ent8dE>tKl|t3mre*_a~%{M0D|w-9f} zC?w+bfEz#g9_ATATsZS!`bnjtFS^eH6s zdY{~Fa>v+oy@j+DD2O^9u(yLph#W_UVr5pQccN(|L%vTj^!N}UkkH#>=UUua>^w(f zJbJADK(RUlt4b}v)x_UlVCbm>IDnyO(zDGhZ+jkL3o0&`h0 z@{No_wWBu{*EDzEFzZK`(=~~~dX2&bK`()oMNe|h|4Dlo1x#xHR(r?t-E^1H#SqLUK8XTlHbx)yx-zJV%;W zKH0>$zqd^jvt0{Zv#3t^*dDNRu~*%VWSum|q z51|7P!|^AB8yP?XE}H1sStdAo3W_XgHx(MPwWI3&GkMs-JB@+sRef+T-$|bg0qg$@ zcvks%*4}As_(r{2#p-68|I7JkSlVNUnAGeZE@BMm>Ov~4d?vr*k9=pVw`DKNYshuG z{&rknNQbtbo??Qa3K@Uo4zmWL7IK@zzE~4tS9XEc*vZt)r;Y|JJv<;-Pq|0 z%OO{|+~4Q~2Y_nK%zLWsoY`7QB;R_zdr#gJaIYRa=XjEGnV2kj4}%4b7WKja_3cjMco6HoZV~yG2pj)qF`7L zVJc{QADVF*X?0cOT;3WMsv=DOy3n*h`BatGSlLolhrUJwXZBrl<;2|=MZwM#05d?$ zzq2)~RxsboSgg_(FUIe6>$S#fx_X73LiM~S2ib$bO1gL%8=}nT-y8|%NqY0{0f5ps z`ihbDjgrz?{)Wz#?J;z;zqWa=h_}v~Uwwh0e6)CN<68v4cmhg&di-qj$o@o|*H)MN zhH~@QV{>G4ak_TpTan|pCJ~N~V4rVQwtu+3Z0kPcpe!WQvt4J6;&li^~|lB(=48NU`r2 z$5ptqRbX95wQEDI>V|^m?Dw++2AZ+`PnhjdQ-wp7;&+p8j}{AOe&HW^M>tULnR|Ok zuD>oM_4^m!6*k2o77=|29Aq>saUVY9U>1M`Y;3hvO+r$Wxlm;ShBD?sjWJS$x#CFt zalGMd2ttrizow=n(pRG;iN|8%w`f9%viT0fnpPY@C_nri9kzc)_XwUrm{EN^M?~~8 z9KsqptPf>CkY>~*A_I*VIO4tc$c;w&m!_F!^Xs=YV7%&ksTIJ23`_L&b#~lbrq5XC zwJVsP@(gweY7>RvwgO%>J>JhSGf$I)DB$V(zS=M?Nr#PQOVRaGpb^N&Z?Kz!PpG`j zY2z{z2Er-Wh6fb0NAky>3RpbR633Wj$86{78f~M+Q_WnU=k|wC%-kU%`fqsdB*QBV z7l{ai1U_VJ?Zx0LjOU$ViklGOPDxDz7Q{@2g^ zTzoYk-lO!p*rq7Q`jeoGlGu3*@oJ@Ulo@R(vh4SO=F>b}N0A8?-ZIw*>G5P#o*45` zoR=`K^ynmrr?zg-4U}@Yt^%@cxh{CkoMm5 zoPXV&&8X3vA}~MBUNYsjSVrfKEPHdn=5k+U5I|P0`W2GF@sfF;XNZy%{u&bu&Q8i- z=V|l^j+gs)0&%@NSlY-OMMQ(3T%oOEF&Z96qmn4Lq!5jYQghe9lB!h2%iZ)m8(i9n zQU3Xn0y1<|34=SAp9^4;)!bVf2iYvJ>OpJ1qf4XeVnl2s<6=0?EM1vtT&$b1{(Ngg ziP`1QcuaAAau(eR)Xs)Je2aR_jJpp)irmA=VV~$?#P>g8-w^PChhYw9GrTaM=nm53 zC<$un+#*J`K`QNg-=oW9v|YuSD_BV8lzPB(|Jl~}3*`%1sRC2!;!GV6;0|>541kSrttz3llsEV32psoEb>y#`{&)#REmCm={YP3 zkS~Izr@rF*wXZJjgaYCHsz`u-g(1b@h09>l*8)ZPyAQk=cp3W?_!Lk1+m;~P8*K!4 z0ZFiI>Zi2PkyUz~diHB7y()Zd<(bL?Dhn<@{q^^L<@~-4$mL_}__@FWXmHolKV{8X zmtDCkNPNtjG0*go`N(BIsa87)*ry2&G7*|kQC5h&l5AHtZ5%aE5u`I4Cj;AF{i3TJ zcoP!fEU41C8?#|4RP34arDaw7u5&RktJ~QYgl2R(7ZZT|fW!VA{8YQHd(t7WicG+# z(LnD{Opce;bjQ6R$qxFtUgJz5bgkxTAoiq|Uby)>LlXGRQts9Xg1wpWOPu`;5H@|AnueaE;&Yr*p!z}53qVrc-7QXPLS&p48sckL6*~l23wsvl+#eZ@qD?{k}E!>@*~j(GCw3uZe+c6>cFUF(NmvF zC7+C~{t{)_o_?MERiAN})$tgb3cTL4+0ux5*#%N=;LyJ;H-rU?%dzP961Dfy#l=2g z7sV9@3e7L;bw(0rhldkSXDLwUl}hx5Tq#%^zXWR_Rz@Q6=mT7I_Se|Ta?%1L^4NDp zU9)or6R3XU9B02{=iu1H`}AmFc}s^F;7ukNi;7i&ih z)Bjxo@;ow7%fz+n`CL9A&@#?$i4;Th0(zq zq4@P%1npcbS*gTbO0&BD8R^ft-;ju`#KWw9ySA545D}A}9Ns}CKAj7;@tFi&)#MX0 zP?>BsaJb-4lf%)F2=;+n%78RaK%c^)5i9`50Me|Ahl4GHEE$u}8Xyn}nlhj}i8BndXM!{V9@ULn(5BO=r$<`sYbb4v3~;t~tLvr= za%ox-M$LVSxQl5z$uH~snh+g~V|q}Z#dTK2Q8`78(k3U&FYF74k#^;r@~!y%rO(}G_EA+zTka?F#8vv(l>5w`m)5p>zc?}JARmg2a;0vX@8X)$ zxrGwVeI2^a3I#e75dbX2(7D|AHX2wrq@S+utY)mi8fBX&1q}yIO&OsTGH`r?G}-iU zHU*Hj0#KEWC4DbARw|3e#iG>jy*FKP&EG4~32 zmoC^Zo2~LJm+tb7QgYY%8DF{mc~wIt63q`c`uX!V5sy>UWxeE81)SF@eNm%^c75VZ*KB>B;`2 z;ddS|3p!af%~7->3c!l$pDPw;A`&Gk9-}fE0qJzh^_pOfN2QS6w51KeW;$q2Gwc>K z#ui=$hJHLy5Ccv6zghsx1S)re`Nq%I(vb2=FrXH2AtGRbP*dgt3ry$(6*dbBHmpzF z)DwFHCb+zC5sVNNXL5^sPFcLNv>-LCj}*in zB%n`#2xa~aM{dQ&bC}^Iii}(a?`ivB<3!fj+0pGkwBNo3JMsYP=y%-A>orw^cxry` zw9KZ~+_i?Pr}WmHpFW3q)2ZL~;3*u^Zz*gl-tLh|@GTvdJNwA=0|P7Be32N^D_f*juK7AWtCz#4>hE>(_0DNNN*N>a1aA&IDhdw9bkWyB#<|~n11hB zccL`+tIBq9mMF%!i3+ z7PVFGOz=o-eeG5ewfKU|_u7UZRra6A9V$XI{cMyD z6jD%T>j}|h1Ft6zzWU8PYR1716h*Dx5hTjS2M1bZcwGy(MXMlwbkF7HBmQnTJ*tKi<85{MeCN8$Q(z-qr#~Oz!UG+tI~i0b9dl{Z0yvB||xj zSfxDrQSI$sY5BX_?~8CORUpWb6c-C0RKtn(ev$1}t}+)WCwF|-FPf`DGZX;A>ao}8 z=Sm1HyL1Zb9^CP)S7%I4B=R6z$X4V04t(CenRdWvFj$>f{tW5tn$OTY+iH$z=lPtr z8Hs8z(9U~uOipdHt>#->Odj?#Q?Vpj2!j##rSZy$6MhZfhoyg#kxQPix~=gT-67Rc zMJU*dnv;ve*-$zrf0y}tug1L7tTc1QlZk~_Ofx}@Hic3R5ovZU6*mP_5IUbsu`{i( zWd@q@?zuf)s*8!Q8KT9eG|RKUGzP*?L*MCAe%z3Zg-%N_D`O-kGnP%U{MPApJUXQ! z6v^u>OgO2=!ar*yf>Yt8mk!+9#p4YSJoDfdZ?`D-Lm?uLxs_J(rRaWjcjl(l~; zK?+iH{>VLBM7RoSIUI4S@8WhIf6qhQZf^tPol8<4GKO~FDaOszF=U)$eMFfuYdkqW zz+DbI#5nz-fBL#YQYm=$%cDC;(`mGQd(AgAp3TY^G|!J)7Q_n--a2QRRtGJ8K)4{? zp&DP;fJ#t$7p1e0`iG5`SUZ;~VMI#JKc$bHToof&lELh9>6+(v@NK@y&Hh32(2g=( zsSVvd5#}~IYKcssUrw z(x6waKfH!3`oiD<_5Zy0<6z!{&xf)jL%o2P%Lo|7Lh768S0_TN!+x`?g3bM7;bIK{ z6Vm?g+BJTCVDQyJ)=e?_>fj3~(wvuFsXmya5;| z*x|VcAa9N&-KDBKX7XU7%%a%*bg{X~pGvPJ-}~dLNFV;?TIB!)5=)iC)QW?#9M5Y5 zz$*|;0d4KA6yD$OQZgQ-<*qUGEUuZslsAo76}LL=}fX=+YRK2vu_!3iu+bq88_~6K6d23g`7+NXELRGw=j@D~xdDR;< zSpN0LOT*?Y4Kwiy?nVFt`{lej7~*hC>vfK=u+_JN3zv-9agadwoS08RcK&%sH1PV6 z%ii8DEN!`?BSa!z%+aHV0XS@=QCjt-G4=C;tI$J~uAk^!t2A#)+^CG`?VgGcm8PJD z9h3cJL^kJWTc*5x8kyHj(HvdXR``B_E{4}Sw&@Ox#uCibFnTHl7##W;6`Dv`*DQd~ zzt1>$l zy`tr!xYPUpkWSf{f5Sj7i_}-tF$F}i2YMV^5W%qGTd++fR^~PAav?M(Rhe?D4Rhk4 zHzj$00OwBGN+>_2Zdq-K9wJl|`a_LPZF2iA1n!vKw0mMxPE?E?>|H7uedv-Kc3`Tc znERrYG3s7Oo#pO}({__iZ|+swhCx#{SD8=QiDe60DB8|K5d-C-&7B^FbZ;?Y&#M($ zNP_3Qd(pu4q<+gzfPGdS%Zu5$0B^FA6+DYRBgg%sZ>sR_zEnm;BJUd|H}5m9tk*8} zC_fdxX19`qisj~A-_rG9A@!WVvHZZlyfGzJ@APp@I_R9IsL!~3k_7ueI4AQLE3Wlc zsJ2%gb=#nVoiKlk3(I{VD^xFu?on>(6QJU35bBa=XfzR!b_H+p_jZ;uafnByQ$ZFzeFCn{3?&FTXjn(nbO86K)<>eWp)YTN2fr4;#I; zuOdnA*$U}^3y!5y|wZ%gt2Spw?1r~Xs#>Bj<$lV% zOegfQxuQPduw&@N;gU{38I`@@s_{4=;TOt_ihJyWm3kCn_5?TuUw8;s;?(fd+}bD} zSR!4{l&r*?O*VJ_ETm@WXJ(YsE6toKRI1fV8&wE&J`FACU3z^38-{PADv@nR2gSA@ zmNAJ_%^i$9yRo{v+qLC~{I@2mg%vs%mzhz6dhtl@;cB|QY#OF&{<%y6?i>x+MlAdP z!SMKxVdz<^A}37CtcJ<7rLtm5aC`Q=mo}}{tLCH*Xp`pAT@$~J5N)ar{YBC}t_#wB zlImumyV?Xsb{vY|>W4+UU`1DHZWeWT;5Z>iR$1piKQ~KW_7y9eTQawn-6dbFZFl6l zbHiG->gi2dKiqcWY@V}|IitB|q=-+-49|NU`Le1kvnM&LFB^Ro01Z@q<;)xF%I7xO z-d5{+!?gc)RT8;d;?ZPO9xPvV>Q>6_qvS=+D?%1Jfq3HKVUJlZOf-#h-B8Oh@*)wf zp>D75YFjB-bJh_xG>!EE+aSp_bLCUYHr>IiqVf!TnJ5J;iECG?hY&ZGs*@ zMqi^@Gv{UkUbjpVm1gT^CmIz%)EFjBH@8MGdxDJTl@dp%im_D4Ld4O|(=V?dX1LXQ zabx&hE=(>-5wdPx9=)X5(pRBtl-4Ni5NH~T-D9L7$ejA?u6*K(CD=bDz|dU%gf`t3 zQO3ZuZYsH%Fu(%jvnLp<87GR3j?-7JXvC@GpFR5k?!}!!NfITQtWVex=oEq$Qbdv_)@$k~&IuRwktnFF{qbwn&9`6Nb>Uc41%a?M zgG${LZ>@pdbjP58^&MamShIiV3+(fVYy{dbgx)RP)TyehuE7}!6jVYZ%RegiAp?{fle zrZ~A&f3U?pW+7v@D4I(fNcW2BgHx@`=twsqOz=~`E=0rvH0O&X{@H$A%i7trVZ2A_ z0-AHLX$VU&kiqv@&@*~q_hy|-?`nyJ1?Y7xt?`{TNyhP**=B8&I%%g8dVJT|pQ!OT)J~x!odB)G@6&^!F&Xx#i;#~kuQXG?@y9`0` z8jmoU@C*%0W|Oo=J$eg_#%Ba)iUY57W}7z`OL!oVThJ2as~-$ZUM^d+rqr!I^IFjX zWBVC5Xt}pViP5L?6Ps)lU5J|-On4|x5|JRH{|v!INPmIG^6cHduk;ZDTpT-w*`2b=}lq&|5&VzP9gpLxa=Pdj-IB)8~jZ0xqAXJQ<(_Q1Ei` z&6%0u5p%gQxx6o&7S&E2IIwkfqP;HDzf-DTa)fHDUASDWrJ7-OUX|n{3@uxM!@ zW_&@H(PqGBU3px^=npz&)a3oneUBfD$JMVB=SHsCO|dRb7o{ys+C!t{MTlnUx~#vf zb?xF@Q79BkjoXBvQfjTMxl;QQ$B)tPFSYPn%>=h~4pdKK4y21jI}=0Lw_^g0MZ1>0 zMaEQ9al_sGXftG#+bw$q{AO5i7R1BwHm9v<4_%_U+g77UVKY3f)!YDfnbb-^Sf=9X zzUTJMO~iU+Qp!wX1*0>fkuR76^az-TxMX^$BA58{Kh%H&A7|P+L|>&H(ZW!uzBj$C z!e7~-%Tr?&eZCc;mcswvsPxK}{4kIt`JFHVrJ!^ByWpEmM2C~*PgS#&h!5i+1eBY&9lSe`3@5A=D2})4dQ=Lbi7ELpiQ@aGf`O>dG~-{rIee z9&s}0(W>Ca(zF2gRl|+DEbGjMZCmj6<=#PJ)7>Vh$6hE6ad&nj>*K!(9`EXsj{E;E(NN#n zqq}mP(>xZHN;%~eYdXK62QEvGuyRNb#S zGVo+VAqX@L`QWZD3X+OWkpnnSEM~p>rxKihGE`|+4RwpLb$8_IQ< zXVLJ&lFU1%8B25DCl6kvrxKufD}x$0RaH-&sQW^h_|UfME3G87B~QCKWo*@@Dv{b_ zK&puaMu`OVV>T3LX9e_4RexXEelcc*rgptnyEP4o5c4fo4V&CB9gi5nAQvfLMDcsQ z^VG9qF&i0{BT;b8BYvnDRc3XEhGa-0g&L$J zwlZr`49qW!tK8Hd13py~UzBx+xJKWsC_4{hGpMNf*5q8{KjbHZJNA z^jbTY%}}r_Ptz%g(^#edwhcZ=ca_8*&Y? zl{cCt)2II&xO<)-uML|M;dle8ZJ`~f2E8$F(2}$CX@l``6R_kU5=z#}+)tXXCsrYe znIg9musw++6$%Z}mo$XJ_)Al|E9#NL$|hRc+nIxrC#2?vrCE*+;Lu*%7Pkduz6Aoz z=6?VG_kH4)EQP{&Cn9sBZ{MzDvB&+fAEV#BeS0nl=WFQ5$W%&MJ7#9;mhXj**J`Ir zR+6|Jyh86Q(e`S^+yNbNO|Dl=uOgcpW%Vze*S5RgyIE$L{fzW@ccMx4@;YnlkxA?5 zaW003$Fc~VWK36SZSMTIvt1ql$(QxQ$NOCkX3yfdDS|@b>U(Um*1NaC9boQ^vC3-J zexu%o-s!J9#DP10tv9j7EqX!0@7UK^!6&TF4s>Fljo2K6S5MV0n9Cm|0Q3e&Q!rA= znpX9Z$)8+E81nn+%5I`6XaO5-DT|>j8V0%P3hEr&E5R&YWX(0Rh&Q}B338(XS`fzLR;O0^i zd>Hn<8c&)sFK*C4k~U4@vH;Ce=+&!2e5nwaToqMrp`;65!)&i}-NFU5JrG-atd}08 zK?AM@KeF)*dP-jqQZ@nvt^QL%gXO>D3BQc`kD#^uZ_*#iOk;S?;n2L=z$7UxKT4FBS~l*jqV5r3fL zc?yV&`?|@ewX^2-Wh-^gXstuOJjO5YEOQBWd8of5@oLxDN$2purs%J=pL_ArjuQT~ z`pGQWzw#ySrGw631ydqhJG9;XUw&X4AwKL~`rM8aD$d$;T{udabsN{W56yK?!3~Mk z4%MMZK8T74XzxsGaW`k;61Y+_7WOR4s*$=FT3yC`ppYc2Lt3S*wviCb!H35qsum>>o?g+x^38-2Cux#N_m_E3sN z0tqF7xNdRLU5MqF$v(gd`g-)XXqjy=ke8ct%L6}x@&+Ke05ej2PWVuP&-WV7*Xz-^YdpaeNVp4 zS347URKFp(y4dzcf?Euw`K@p14Q!Q&zAE|}u&1=ZO9lazgiD9wRd%-AyvB^#t4>)o zn zTIh5Ujl*cs#>u;pQp2VJM{vf&6*oV2Nj_6aiBDkj?Gq;%?$-RYrP1murR10)yKlB$jpRoq* zU7O+1_k{A7X`)3)%S6uynj4a-7SL)p zY{A_GL;yC~rxz{!hK~Zb)WIvKeOgsCpI)x#cu%$6yq%wB#r)V&9!U5b6c7uI!s=B! zB1wDqDUsYUg#?XSz_9olF7?xcD{h2wDDc&ny!|Y+GD2sBK(aaW{CO3T&3Tvuj8CNjN6N2 zc^<8pBeum+YM(Y_a(^QMr^u1Bg5DHL?aMT55*qSP76$I$#wd9XhZgTn_04@GZH^3E znglJ&eDjmkh${UN9h6h?id^^6oQ?kIhlxNE{|n1N3fR(~3Up*`2 zijvce&z>hx^xV344M)^U?$&HBi@N=CsB!yR$aWt@D4j$@85l>8CgVft*s;SQ5ux&v zuRW5-qk1%jf{J!1qa-^6yn6Hp>aAVR%!xZca8VP7<010#C z&pr(kf!0j6UhAS}@7lX}z714Y-k-Mr2U6J$%r9TLNgk@iro>GrLVqrvwAd_Anl0%1 zNXlv{{r)9TfBC(>^h9tn+sIz+UU!XPOV+D_OXveoVLr~j@2jP1&!}hW_$mEMQ~cA} zyb|tYM@Csk%p{W)s+AS^SYU_@HzktNfMc>tk=jufPq`bxkAWgW)u9_gl_#s{wq6h} z>tG`AhC9kff1(D{|A5GBWz>?bPhM<^gF2Z}8KFMxG&N-#7Wf)HTQ?+ny{83(w0{iY zX}{%0@LVcF^bQm!$DPJOmJ9`JZ{7m9kmpTCW4yrK5Wa+krveuUd*Pv0edJrHe_c_J+3K;Y0fGo2K7-^3KpC?_WFK2zB=YrOQX#|1ZRY}N$ zsjg3wbQaq1zOBrX2Esqh)oYCB=NAGx(#X}&Tlw5RR8wig^q~--1elwg97Q}g_Zmel z?@kHWkas)hZA1u-uXWbPdM8_271IRIjYHLUr-uPBp=?(Ras7yfm^#HYOSK& z`wvMb^~2LMmRw~tZiUa+5rruoQg&l_>o4?H(nG{Q-Ana{or#-gdml%+`dImrvbG{( z7p&tb<2KF1iyEl$<3+|T(cr$3H{GD2`gSx^hn7h3?N z-7f#2g>parXHTO6Xp+A#C2Zuc{Zdc36GglYx@H|9PCaBM{&in*V!%HPSi-P^+!JO5 zI@rugFRTlbeLpC5i#EQCqt8&7BKWgRe%EPME#GG`?dVxT9A|p(!G9fnHgQW#ss8N_Q1c&3xd57=V@14Ul( z;Oq|aNiyHKuw+(mm2ptbABVYXT46HV*GPgdjvGBFxMN#vS0!oI8@L~%w_{iUf@6pe z!J}wU#&NgP={AWH8DsoS@;|-{eIIF4Xopg5(CA$r`Op>xj-ym(=xp)QE=7Xv{$V{4qbf+kT65`SQT( z!ZyvE*xJEVow#eKj@8VD4<6E)84uEj`&>;30OfqZbRZDZHBUS=J|IdC=Y78387%)% z9dc1B&9C;GL0lCl^(lD;dekR|9TQ7r*scadjrLb$X}myZdUYo;Torx0UU9+a&q+K6 zK4o6kXer21DjvD?6l{8}e?ow4KMQBv`LY4j_lk?k1Ir+oK{PaH?B{SH*qzj};=~S$xWpk*YrTFKJ~fRkm`kA6J*@ z(N}Xe3Y2Hsg` zd_4%nK)XGK!B0X5uzJQ&ykzsh$u(ATY$O1^q0w5^ggB79gS0qa&ySdKa40%KHcB;6 zSuzO;!>CpsnY9ilN0f=q%y4Dq;hn8qwyJ1qlNKKx4x-X>n%%9B&MK?4XR z6VrUXNWt|*BRA29)zaX!+%fR}Xm1 zh)0bC`jGnm?+!;tk`SQRu6~VKx=N|OR5wj=Uc%_QBZ4r2r{vhfwQ+~O1RC?#%j#l_ zFq%tNZ*=in4T>4nmTeIZUgv8d7i+Y-Eo94Z+TEXj|F2#QO7z`i_A{c#-IYcf6OTsE zROZjR+n1d=Z%+j1JTn zd+6vm8?`#Qp7VM|4Fn(8W8II^OkLUcMnV0%8i zr-c?L`(fwaopm_}=js0UIS}xkC!hfcsZ1Uc`D4(y%EXaKXp!_}&7Sgy>)}~Pk7k*v z0R*+iSy#a$v~R zeX^24%(kxlnZBzNfrHfi>tqOoyp%v43|w(75S}?G)apg?N;OE`O0+b$p?Yc&Fa4;>M((f(+qN5a0fa6{?2lCvuLHUtJ~ zs?$>|(7(8KG&DIi>SSt=D-4F6OKZ8(PI2i%r5OSRluhu66AmjYKYItpG80XMn@&o9 zR`GQZ{5deuBqL;2oG;ZZDUr_&L2EFS#)4iOjE8~wMjVvio6QBl+}v)l0*m+ix|BR6 zq7j@*t-zf3jCOGVB%GV-9-qnRuVe{8>Sv@<-AIjL3V*mP=gMK7dWVl_LqBz>zeAM?E0)b*m z(-tW@b|C-yqZl(%hEkVNw2uUR%ev%$PwfoW32O$$RZzsii+!`7Q&yF){S3^1cz<&M zQOa^}ud$yq9;5$y=a4dqMi8Wo()uUXucO%AZcab&9@l#!UG*^*LMtD{)wQJ!^~{{|qje>0#VA_7t-GV0Vt=7IO_^w2S|1KGCn=&7 zIiMqlKFliD13Y7lJK7x7ntg0O;-~v1`zg0pU=VC&Sr_guH7d{#*$<^ee(Eg@iS`F% zHA>;eTJ<4O1GTx+rl($J0Z@RWFJ@}K3xQP1SdkK<1Xw00W+4cO!<}9e@|b5YYCH+E zFWSfJrGrx^O4gG#;Z|M={+0UQpTC}7#2Ib8d!Ua7GQO-kqNNQmX*UEU0pJe@7AE4U zwf@t!j*X40k61-dQ|KSSc*Zpj9>=l0*@|=`jumLC5r}r@uU|vj7K7zem7BeOK_t37 zhCmC^0leiNW{O-pQ_NwEDVnA>L($P+o!;NhiVSBkC^Ts;Yr+#e1qvfIbcC$AnegCRn?NkwemQ9q{hZ80)DRKKV55>n@+ zrF_6xec$!x3-5M?t7hpcw?AKqOMFRL_1?t$qmqSty(Mj6DiAf?M7yNXV2p=OfuA`f zBa>sjholVH6rcqddf`ip%Fh>sbg|fg9}8rHx@*{h-8b_G>|28~r~`VU8QhR8o~FUQ zVm$X6d{aD^e%QJ#Rz-f)Y+bL?@#<8df815HKiz1(<-p~CrfcD+F|np^Vcxs=+ty|2{Ww#AoH6&% zo#cyzwgikJ)APFGIg@CG*hvi-ht@)l>k0=EIZLZ=Unl@u0cII6x44LJA^Z!4lKC?+ z9iBtCzQH?K4wgx1B&ErK=cc(pgvCHGS8NR*-4R`eCMk0^@ZhL4ck!fIkTYX0{Nqgm zXA54u6v#2s$LYCGvvG4HO>^;rGg?keO=~o~A8voFukYHJ1yE)-pw)>!Y}+;oIY8agmiMNa9*?C0;5E;h zHZt=0bU-%>p5aW6&N2xd_SY96bo}-0C)BUNVo1v5@6@~jh<6gp=2vF&@wdr}H$BYT z{4PCWcnu{5WIqkMf5GmJVYAB1Ad)%YW&d!Hr;EKvkJ70OOUUK-T=0;^+mHL5gr0C3 zEfR5KgQKbmo0CAPN#e)o^I~h<*%Y~*smuj4Wl)?JMmXI8iCS${OeonAC~;6QHNP2d z87I7@!9)1R!d8j3ifO>Ls+-yplcA1kmC*3XzXVu6ap`AXI@6oLTU$`DRye7g8L|tZ zpEjfb+C53hi6{uQV+PGfmYNmYK&cfMz2Hn@A#As71>D9s->gk`+WGpOc2;8bao>Iw z+|m*+q}t6T$4O})h=stm(t^*S)}vJOojv*?LbHPePzF;5I;L%%b*y%a&;$ig1fR%r z&(EdrJEy-Frq5agd~+-oM}-f|I^f1|NcM`aXW8ji6?K547g`8XK4#|3K%L?MWfbCz zu0Te^JT~LavfwTq1(Ui=feqFWFM%nOSdLj|`ofd%rjvvjgu(Vy^JZUHZQ6_h6WNlg9F`pn0bGzs>?3HLw0ZOK&|M5DU zPKimPl{Zeo*d(cX7TUPF^a~>+90YH4G8YBWFps2b{&?jK$gEYWx3(D1 z!<21adU``7ytCf#r&HikiojIc~8C+D%CNYW3!UMh+0Xdsi zJa%p$1_QS`eLF%c*M|;d-cycTNT3ng2n@+=H5Bb2YKy3*W@TT9jMnMqPRxN}#5li# ze0*p1fWUan)K^A~Y4FG;5kt>L0VD19O>3u&F_-A{u@MHIcSe0TnJmI^0V)0=rO?PJ0vAVOUPhak5s4~M34*5kF z25O02RuL8fQ>{_BoGq=8f#?NIsMkGNodk7Ylh7DoD8 zzPfI@YFNx}*sLL!U@enFT-YvoYpfdnBm?&Bf@OHevw%+U zNRBWjHA7s0U^svMzgEe2yb+DSJl{eE#<^>v`hffK8eg-Ib!p$35ZH= z5}7G;Zk%*q^70w$Uk`XiORbbdlm;NByg~_?BxhNeLBCc$A7><$B}~vTOe5~&dmARs zotTzJbPr_fT)?GJloLIi(i>qk;>rz=9}hSpoIKo}ii>mnOkQ42-`w&=W1Po!xvcF- zEnhzAm-46a){EHM_yRk8D~DsL$RUfV1i!Yw-s%fDz8_C7(k|$ygu(YpZpJvgCa5gz z5rLK^>vQvTkX<$?3u_0KNH*~diAHfFDBFo!mU)+qkEVP3!7wP3Uf{|L*1y4G*7)n! zqpZcO4g-UdfaDhx0NmOOot^!(ktSw_&U!;}Nr}%A5Eb1#&YUEYt0*XFT+&5E=|j=< z9|0W|t=$~l^XX$>=y>)o!GlGDE;{5K{rqWO_{J-W&Yzw!e;C)M$@9{JN@+AeU~GqY z5Kiw*B<7HqHp9|Xm#W1QE}fP?(CUxm4>Si|42@W%F=%{!XE;1D$fP_A?m$ZdjhZhO z$MvEw3*)8HHSKT#$bZ+I%5UrFk#v%-aEB0KAZqEQbl_q|krJE>MX7oAwZ0-PRqgo|BCn>&`IF=Y?=7?)5<=Q#D7yDqGNhr5l|ces8J$>Q}~C`goaq;?B(t0HPdZ@otlM-AqfX#@VUglq#y zWsHU;X<;Tgvt)_3&m3ev^ZX7iX$`k*O%m?D+_2dep;STdlq9yCR!B#D=dR@7LJ z85N`5m3X>xbXYH-LD6v6GPDl}URyDKQhVzb^W8M3^|hoU-b4nq-D5+^lon2;PL zp(ocvSOQQmHb;Zou95p}Tj@NO8%~3BV^2n9QToa)l4ofo^B7W2=o7O2Zy7hzS9+Qa zUv#>;B0uVSJW_+F zhC<5xXSd1N+X}5uO%?u&Sz?xr+3NE3!%pTXIOg(K;@F{1e<)9X;eFV@x8p{La*u76dWsCAC0 z;3<~x07XE$zic`7(5?15A?1C^k-R-y@)9btnLDSgvH^s3d$6>z1M4mtq?T|Iz2YM3 zA?o4=EdIQF9Ci+?4{lBwn@bE6?KU%Y0AxOc_BM={1iR09FGv=mecTfslJU`zg93YT zOo1Jo@g$P+4GQO+;4Q?&^kJcoTaNzub94*cZc~hIGLFQb;6R~&lI|MOw~CDqzYY(N zjCe>+aKWO9$K$o$5FXMp@zCQ4CIsQ>3o`==r}2dIkaDmk(QT?&E&SMTv9|S&6XJknCMcy%W2@rdP%wEgdul!cz zeevkyGTT7sO3FwDl~dss9`+PIA%681n@s6mWE&6(nC5c8(lsyV9gs(PP7hc92rczs z1*EYX;^fJiOiBZui#@5-C{m?XGQ-G^>`gnqI*TpO>_G@HJQ>KO2~5KWF-$y0DAG#q zt@IR34uMfZFui753z0sPh|B0G^vM_P~}qobEq zrQ0l5Oo}5#*R0Y-wylJR92l8TH7-l~!I80%rumsuY;$h{jKzA1WRep%|$Mtgz z>Xr+=pZTauYs&7%qXV9JSn}5Q%GN$Inb@Zcg!Jn~;z5y>%z8 z^3vmGU7;TFwL<%I6im0bLCFC%Q-^5POQUw?oOW(4%3o!?IS^&_RtF+&ldlJfLJ~Uf zM+45QzIfJS^;%d8uD;1{8XM`_dH&`30P?~}5KCuNoE&~*P6xuc7wzHzhfi8dI^1I1 zK?i^(IYS9uox^YP70QEYqMHOIy;UmhPlW)g916w1eH_QvJjhlsxs zzRRIMb@u&1a;aLGnikCh(OuI)>sTNZU)6T+O%J?}F;*Owza|+_T<_`~#Wq-@lQQe; zoozSdrLkLV(vK&*9zm(eQ8rS$3sVd2QGM&{l&w>T>}7wI?C(l~^;=Qa)VPBkGn3IpP+HR#54sm{HY` z+mRkD9%1=qq|fB0SeqliDuv(YXIAV~ZgKgK%|}d^D44=pDbsI+P4mHNj^!aETG1E; z%18w+gU}@LiOGOh`t`J+uUxQjskjx;D#*6=jSCkq50sTIXTH*TAUTuoOfr{&8gQp5 z(IZ+dDQS+uxbwB$YU{MpYSgV6Js%ppFk+MQ@*7}oqcGrMU7Tw&lSwJMSnWmIIA)e^ zM6u4dyCpc1LsKr^Z`u`$#G4rQPG{dIe`MWotu39|N|QZdx{AG7JZ#+T$Dj;p*7UX{56pUxSdX5*+lmX{xiD172Y)8r^qOtsfs`JakDoOQx94|Zfum+8Ls zezZtV@&Kz_v2H}f%*thGFWQJGGO015Xk}l@lu>S0J&{A?_VALZ`AGj98-GQO?`Ion zey1g>LZ#y|HU7rnV|vAv3w8~GK4I%wfbk`UB}`S4+3I45lSh*7q z+hO`l8Q2kJcgc&M^(|;weL5bf!FXvPPq_skm5O+LD_)Dkv9d#P0VRZg1LnA0ds|x@ z9@udrnhD%^KuibLb#T>`9o55XyXu1r3*6Q%0o~}MTRq8ti@^1h*ru{v4Dn@&i)wLO z{w41mvtC!Fhm;x_C*nwI(|N*U>hvW_IEolaZFrT!HA2U&7A(LOnqvi2eC;=E(YKM^1`El#k zQ}QEbC`U9$-j_)}w5QbIh2(D4+Jr@t1`hn$ssHzl@?M0Sl7Qxy%a@DVJVYcuZt+M* zTgMhni6_ZJ)FzV0xF>J;a#d{z1%Moi#u59?PRq~TzJGU00Y8ZnP-B1t17 zR+L{Za&t*>4R9ORsqnewx*$Ff1j%AY>`r=>#l14Jah6z<{Y3dmuGV3S_LkZwNdFL4 zgH)oe?3}!rpC6S)$#jo=`r1deGnOa~Z%=e`N^B385_1APJ3fuNIMJ8rg!Roe5xQJDC_U?_s{tY_J-Nuwi)+f zWY`BH3AvFA+bwfZXCvY)F-@=*oP4jXFR69SX!cT+vC}QbE^8!5_)9F^g)w0jJz=Z- zj9E~}LB=d`lqDe%*8d7mP6ZWuc1||eUZutZKJf0wtU>8^+)9T=@YB7`DX_^3FP)i+ z-l}ZOlBq&7M@<==uP0j=kQyv*To%6Pj9eXS-qE8CZ7~IF59R2j!o&fVtm}T)n)zyOF+NOMiR^UwBUR5fNa=fSkCVa9152N(|@>YDi4> zO%JI&l0c6qkRajwR%$ zO>Wq5=AjE(0Ms-6Kt3n-O}y}A4gOiWEJ6fSvzK+T!b$J6YU+fqO93Djd_VvMQB)SN#!#r_D+d_kI&~iIvSZzS(4M_ivYX2bq40%5HH_M* z$^tksg4Srrsj8}+r(w65Ms@aBOk-Q2Zcf*zcyvzRM4MRH#VQd_I0ORy@W$NX!*e$t z0v3rCeE9YlhRre!e~<-Idp>cWJ{Hro9peUl!p4jv$vgDAsPKfCX;7=1yl zVD}F<8`K3jl<0sMOc_Wlt(rF{w;X`k) zw9awDr~6u`W$5Pfn!R+azh&bYS84v0w}D z2dB>*Lf_-4s)9MGaRN8iK=~Q5i-NDXC$tjK?G_&6p5gi(t6M!~9vq3pNGo2^m%7E? z>R~VSM}-qMjC$2P@HQ!V(6)!=L`dX!M$6Ch;}dq}`uZ|%M!hK|!({mL?*qB+E}bdi z2o%QKl~6Wb!?$t?jpGD+s%ZDfJc>-pKeI__E~mGcjsvS!7Y zusJ3)F4{W)=5srbLX5AK{q_nHnrrs;8QkXe^_70lKB#Ib&#-wSRLkR?ylTBoRU3f< z>157=O}yQ)t+ZSJghcUYG!J_kE8*RpAE}H2p%*%;JcBuLsRFkF{z1=w6aoc*p%r%r z2~2&v#X&v7qc#&8uiKzycKF>vbrF;+Rr+85ANEn+GiKgDpXB0|8&bDimk2NgQpNxn ze+{HkULf-<_n7Ne(RYR1SE3so6@q`V?lR(FK?xt_cBx0HJUI&wlgc!1SUaIVy9165W~)bEVdWK?t&E>anro9=REA^l2S{WD}o3I-yMc) zHONyJ~x~)-!6B6-+T3?r`y=Z8V zO!akq*TxVy`3(ue*5q20roz;H@kvO+I>w7{OMSbH3d~_IE!AtI^LSQqFvJ4Fa>~ws zOhb@g;DiViL=ZM;Cg{79Q>AfzaNnr%J(?J}els|}5TWs2c#c!wp<}+N)i_mc5wZ7W zemAhVwjT7ER#jTZI`nqNuM6Z`ZRtLRzY~Bz(+$xG;BXs#^j`+y`4DGI214ERq58vL z3MK1bq-Q<%Noag7-KE5Z^8Qv1UNPj8x-bbMdy|$ohJ$T}bI>`+59*tyv-HtI;PvcI zo|H+!6L5#jX?qG?N~|F25cWDvxT>YndE_OD#dU_~)dm2+`bXvj&Hq-`fuRDm3+B=R zYXWOLZz&qidpsRa@kdJ6rJ;C3PHHnP%c>iy@9_{QpEUqGU2?+IsT<#j` zWPWZHu#qxyaxzb1yEcMbmQ;b((h5=-535UK%USd1ii`NKG-F+nKC~31jRuTxdElq! zfocYDIvNB=U9Vcu=-9|45-b$pGVH3D>%Bu-UOz|o_*Q1(?DprNv9bjF7brsO;7Mik{3{fR zIjt7%It@V#4hzHeobL+%ymqLi)X+54QbM;#AlG{5(X)B%eE)bGzOJ0squW0&_+)V&)k&ZlVcwHls)yDF-7GhRwz{SlA71SeGBHRa#K0Baw`(tc>suBaw4;>+a^8 zyE`uH>D?LzyZSD4ir1++>Pr?$R3{gKHkcZf%5688(jxLY?;7mlzHc#ftUNg=wW9_cFMZljE zbDsz__PRp@cT8%1DH*Z(;yfsZo>_26cjDdiSBqYf{YXrVEem$b+i-;W#F0P&cizO% zpK!&@xt&$|OSqT7p*}I|w}A1)Ov}EhX5s`eaEZ{)j+Yxf)L-k2@t+|J2|508##_3& z!N#qw`E-OWV_Xf@2|(3x@m;c#;6p)5w6Ac@P+@O;9(k#3PTuN~dk;p2^C~m5M$q`n zcuap(cA~Vz<#{E6V7!wZG^fW|(pzO%7JafdOZ-X&%c+Es63hSqUL!oo zoyiE#N#9>D?yfR3EkLnsvow~=`(VoKP~trS=1V3$E-C5F)tp#%Osa^*X0dPC3!RHX zM_t~ojTX`?0`iOI*n&`bxX?+CZmCva=4&l}Q;fxA(Craq{Q}ryRkxQe+Goa>C*2@1 zPKy2YtuRm_^Z*E<&aZ-pNR{oVT}WoI5}prRv|7S=%N^py1zaw|Ad%pJy(^+zUlueI zVwk2+cCQ-$f{KzOyRP=Jh{bjxf^5tLEYx^B>>5N9cu7tIEk+Z9>}4!3iCk@h-qU2X zP+3&RXfPER%PaAAh7A(j2^#CyZFwKZ=7^+l2SZ#n&oRS1XbWI3xcA+g0SYCJwuqw z0lq`Ao}SV699L>VoU*kH+D~c2?VpULl4)!(2N*|mV?75{qY12aHJv=!gz<&?Cryez zBL$AD4emjwM2Hrm!{oMw5TYsQZG$4moADV~ArKBN>X*)(VZKrxm8ycdnP08+k$ovU z%{w*|#qZFcvM7#@Z#veL{Bc8G{rSh0?Wy~%+qLPfK|PLo`5I5}2V%+zg=B<&_{zoG z+xxbS*Y0R~mu@dgewfFq#iV*u=qyTtrb;6+#jV5h5NQkH|5|=uqI+Yzj2>NY2bN+| zI`nor>!afKKV?4&bXr~3xZl;F-)GgTO=}M778E9qdU~I6vmfOp!&O69Tv^`QyJd6r zwuU!pcB145xvW~3WbX(X6cL|PsTNk|tWnHEjvORy1jLMMz-bKKceKX81rj6k=C3;s z&G^iV$q6NS%SRurI6yTzd2uPUsH}YAjI2)G=RN(j#_Yx2Le_!BUR?gEQ~5Yu2LkK$ zs$H5td%U1>SNXN_(p!Hm?71sf4;Z9z*(qK!)%f52$1TXr8%s-|6fkEriA>VG?j}$9 zvQtpJWbNProyDFlZL$@B1;;-3xZU%Bhi>e68_H36S>?2j0Ak@B;)!{tLlRM%2%FBw z`auBC8Ivgpn2$os>qKBYV3LUJnZef>v$3-91?j*3H=fA{k-H^kBBfc07Lyf?`#!dk z+0dv*UEEZC>R@OSr8JmDa98lcwx9A-gh3Sj zPVeG{tq5mo-YMS6?BXV>ie#Ap47xQ7xHPSQA2fbzEiy~0qEPxGWkKaZ_zYE#=I?FR%$ z`X}qka2xh9=8he`O2Zg!>S6}k_RZB{TkkUOvE@H&OK|}lr?Mf8h(Ik~SvfcNDxH>Z zFz|tqX~j*_Y~(%l-@5#^wC$?DrIPl(DCsw6sl2~mtKY|&#{^g9*rTM=E-w3x3XBeL z&D$R6Yov?=pRNn;BM+?e`1rwNT?Rnl`2+5kl8tc#i*K597G11%OOC*4UDHDqD;=6k zHr5L*?Jp-&qRZ%eR;uAfBX9-Argcvy;pJx@^m>V@b@JeJlB#%ROq4E)sCM3S+)ZZh z(Vsvs(E-}a6UbJ? zi)t=*-PZ9{NTKsE!OCsNmDboQGZLu0htOgNbTfdX+Q}&4&m=}8vBXe=XnIucAv-Yc~5wEt#<(A_qRo#V9!r3PQ(T_+p zvDb$fg~Kxb)%*&vb!|;U&7}tCp>S;~S<9`fi_$p`0m5Iqo$}%pN)cPc^YgkcIkeX% z^WiLVfJnG$--9^Gg`n?Y!p+vm-x-%%zfK;QZnOS8jze;IOttTF`ARb4c4HV6{^UM* z%?bRR?$#0HN*;nEb>pN5w>oZFlNOzreHv`^dcxDLwCP@1JD#@Wv3j)Xvlr8etTDh~ zH+qA1FPfNN=bV$U$_{&w&l^1_REHp7O4+=1b4=r+>{F zJz}v137f{^?qY}leL_mwIf;h)#KP2$@ky@pJwsMfjkzVxOw~oop1wSB86Z#E4XT z@RsOP5gsq4QI%Q#rAz&e71cMl|C^R(y%bQy;I z=SraX>8v=nGuK(Qwce=wMqWCe%!=cD?vBcuIAC&p;8EwnXh!KY)$5|VY9g~bYoanc zYopFCEbk`%)_U7iNk+F+dH6k@OPRtu!fW|{B~$mW6rG`^P9mMg|(`OwEA(}UJ(8eEa{%8cMe z%`O7PK5(|??Uy0VT|B4)+wy5mxdFml#Mz~8&TD!I`8A0Vy9 z_LYqv+(tyYkaA?dME-0IVQF zq6on(SOc)SW|R7tuYcQIk^a?H%$GdpFj7aqHr3b^DfUK#a1 z1%xQI+DKBV)IxZTwM^89h-xhu@a^wm+Hf4=b(#WY-J3M zntBML_NYog>eV&+tKxaMLl*~)Q9x2sae`0zr?5OP9ponQ9Z5$f0xfVrUsEr;ZEmLZ zzu3Y9W2TT=H9Pe@c?1a<8hSkmdIs)AmE+0`hl$i@S+5i(+8GNE>~;xS&2k6 z&H+5_A3=)xrPCLtkWR;}m6~bAM3wdqP9%TAHz4izE`}h|E6c!V97&vKp~gD3BR}D| zq)>H7mlts>H9RPj8PD3TEl9gcM4ub4xZqVWCTHxs&b}jAxdIp?eZ+&1i3cr|bE6eJ zNt(*JjbP4uHo}2$*i)qYnsq_zoNa9ui${ZSJP_@f-1>9)PibQ?0?M|6b-x(+1)Y?f zW*)*dZzB(^lAMws+SM-aZ(W6Kt~@AzN$b^?E6^ZY6htkSvC|S{q45O2aUJTNyWuGr z%RE(3ad~f1UNkvN9Gem&2`a(A@g-jV=Jt;wRv&hR94als=IV3Vc`+hRq#?sJ#t86S zRV2}$%8OgA%)m{3f!~o&zJGE8J(=}OEs+NbiN829N#(8n-Yby^$|$iNS!8W!ucpP2 zh@1sXVW7MuRhd+mt_t>)L-!~K4+Os2<%%7S9VZ}2CqF1Ij&~sytX# zm#$Hiq{;({!UaqYDMn3;hhD2bhQhpsaK+vjh3_!~%tE-2YOpH34hR`f@__ApPq7XR z6fA=70*d{S?l8&Uu&>Iw0?@tlh%6j+?umfI=!E>h!V0uVbN&)Fz23yK*~(I-)#@mv zhx7G~E2PjyyG+L)KSpRHeo7bg^1U$+^^}&D0vrpJw4o4iDNiEJElS7|{c#Wtn*zy$ zH^+50mDecSgrdLqtL*>omLX6;f$9i88pDAxlnMZ(CKMSbj&n1u*@uQ$EbBR0gBN_i za~iADLC8Zzc5udg%(^8Mn6m^kxHlhvlwT@%L+j=^&k8)FB8(p!Cn86|wejcDAqU;U zqr?!T=T`OWv#H>7z$QF4L@jNekHMRviw=Qwu5_My=y5gvw<2x#jIX>(>)h;pU;HRu z4!v#dCsv@do11eI-U8dSM)y7v4}B_g)>g?C(}x2VBCw{Q%=c~lx3{eZ@BI9z)fV)r zId5^Oxu?3(`Fp{XZ>*3Z3_K2^e_eM6zd&IQ@FQW2#Ob+N*I9jO!J?GJd?V6w@6ufM z2J(rQNelv%U*DODS1a4gBJGim|J+X8o`Nu!e3$2^Ij1=2*1ZZY#d&6sq__z0ZtVVZ z%b@`1Vwk_qejRWsHAN!<@&$7W%XUuQIX=*1$>iv>QAgDw>wv?W#}9!x{`}C2k$JN= zCaTH|y)81ceo_0D%K(8}^kLz-mYD0%z9}`;ALHZM>0euyk$Uf6X&&!%s^#-yDBrCf z8c(E+J?KL(`pMv&4DAlE8BjDo3=cWxRLd*^?lAzOuhp#56oxs`%_8+?z2M1E?yRO= zQ@i!sAJm+GC?7C(H2ZVUN(XadwV7^Fw|nXA{04o^3?sonr2X>u?#Yj!@t+x(RoTJ& z6TPNhzMN7k7=bS~_a_Pxq?eExi;EG+OK7L}E$!b%_;Z0ZlUV+=-j-PWd00{RGlh;?}k=%CeTjT3gH8S}klO z-cE{TlvhYs2G32%Ul`E}R@0~Cc;<7H^_E#ihG;W_N+Zn02X1Gb;|^{|d`gISN$vPb6iA3F7=ul4nrMeB6Y z*XQm7VkWpe4VXpfU+eMFaM3VIbb24aSPZAFLbS5=tS(aa?fUf!E=9uP#EzhpbuBPY zQ$oYO7;OpS+ttUSoS^aIlk6G?U3Qcf-(;O&w|~pSomd(FQ2*eZ;`*Cg4Ht~+R_;U7 zG*1wbjFGjFzxOaEddCv@3C?)J?>!L=pYD~CkOjz=7SenIVc z)*kS@Lr_avssNX67ObD=zEWqrym-PZ&h#5;d>goL@yeXy@sc>Kw{M&maZ0mb1Dq7= z{6`er;eHH;iOH33AW#bDI1sRT4|Q>Z>!P*U!U)Xz*6@&^wfdQ-jg6m~)r>vHwx1K5 zRNTV1ZZdGK61l%&K^-sQMq3SCD{x-6wMMlUo5U!}^Zmj<$*ePHX94rG_1O*t>`^JS z0mH<^inR_zOl>sxm`6LmKR7YhThXi3RMB&PllwK#Z)ue{h&rb({Q!uxKDj+GFHFA&Z ze4l{Gq>7VX%s=>geYaciqQHSuR|i%1y&m=(u>|Z?eHwv{KTOxa_W2G~&0f2}jLm%* zObOC9Xt+4r4eny%jmM5f+OPs{yf1`J0nyn(g$@MlHp=4b`?ixdO=}c9>CAOGjc+w6 zKXIuEBgQZ>Id!8!F3N3K0v4%h$g1*YXU0)~8k4uWS8wtDXRScS>lk&cJHrXdZxaa*E0_iv+lS{OF)}dP)V5I@OJP>2nDX zo-+~l_juI0*DOc3Ae~K1WW1WNb{8dL?XhpZgMSCsd;;M7t=eohrFscoVM9kddRA<> z4j_DA^}`RQ{cYf{w?(O1QEZ&*yN*Z1H?2wk-`wgXYdgN!d(4dHe{W=Gps5=uM& zs6F0!cNRdrQoq~f{&Bh)TmuqoOE7yfbaw4920bEo4KRPiPTm)k1NFRe4X;G*ZrTQe zN?$c1TWqgUorX6^!WMtQ*YhxV8~87K$A$rMu#mwxJ~l?O zz78iaDhNkh@=@Di*Caawo@j|?6aYm+*ZilMLlU}{gtskV88Cs}0V(j0gL#x&Xv&e1 z_7lIvR_c`sNHU&qLy8%+cu}=b!lm%&IhqnaCVFS#fUS=zl`Ct>yo4vk6u-(>U!;CX z`L&M0P-kEF5JOLUV)5e6%$A9xs$tc)^R`aO$RP00^a`i@enBS=l`jHG+2!qwpKr36 z_39rYrwrQMtQsmXcLJxux%04r>yAqrqfbnDi~EUbF~ChKf6IV++?TO?nIM~O&1Fiu zAuLZP_NZDiPKs>~!Vd=GI;gac+@dN+$6(;}cwKYSwj*XlT$m930rI*Pqr^r@f}Kcr z^X**{tEvE!Nela;kw3UMBNfPkRf#U~HFq`1uFg_FH~ZEXkPoipFdUIOy)&u5ZW94; zCOIbOR&{W&9kirDMstu9n~WP(V>?NGyCGbU7_L=z!W*>ZeW-*1VuHU9nR+_S&CWS_ z9^4@yQrXnl*Ur9^?vvj9smcmYKq-kZ-jI@VOCAy`-Pzor;FIKC~AnIxkg#JEFRE_du zH#B0&q+aZPUhF6-dB+q%QNXQ_XSDMmyplN_Y;5q}yR-|V~XBWrhISFaFAU8k6$!ku*yc^EJSGK*T z=KmJrv-}|W)j{&|Q29k__J?rgrdiT*(u&d(@*R>&7U2?b7&pUyR-wDvz_&Qyw99Xw zKbNE0@4L&_{_7xztJ>$S{4*m;MhQDpY&H;4L4auz-G8eDr11qq-w*6&e^fA8@^>Br z!b$u0v@3qp9<*DRuxmmcu?6CjG|@3k`KVi=D)YuWFKW~JOaVbnFj(b%KK&4}xuml7 zF64CBx^)%E!*m~Njk3gPT8+5sHpJ|qDdP~aq;(PO9%T5M_-^B_`~<+cm8-v=e?OG8 z*~-cl?h1o^ZZvONyYo0m+b^TgXw@OB-2?`GgGoNA*A^e%{NH5$Z)T`L)kW06IxI=<98b%6lU} zd;iB+CHAF5u!l=cJK>D$!T?2$D0_BP5;hA=VVhZf#%kkFlZ?@=RQAxazhDq`AhEds zgq7{P%O6U_+S`NmGG>G^_TNOB>Eo_1pG_M4=u(X_vqNHs79c<)55!(1c}OC*V*}wO z8{dE%PE)z|3zSu&W$!s?u>Xg-9gr~?|U0uB@mjb^C5Ev3=!e?GFI*zjmb|Q4D zyu~u@3=`&LVB1jIu!OhXiT)16P)2N6vDfmM}z$}e0Zi01L{OR))P zfu4}63BO`^8d`|I>r7G-zM8sey-&v|J?^%A((R=D$5wrax+(Cr*S?+LTU!C?AKFm% zThH_E@opW=^W-w@Hdz;)ORAL#zf~Aa6PkSkl2;ipB!Ak2QaYfg45d#1{WD2wx+u<) zA5zwZN{xUE@R2E}ozxcj?YE|}u?71ENSjIfgV}DJQ@1F~XP8Usa0{iV?=qWQpO2;v zZ%*CsfgO2a=)0Qsufd);lqckn+HkfGu_YUS*8xkbMMbG+PZ-5pIx5W9xDWu(4{*Ae z;MPsxlNSsOfn>me1GePI-i?ZjASVHTm#mzJl7?24ui?0DtQoTo zs!1+h#mj{W!Mq+g-|#}8Zy>e5meHZgrj4= z8?!cubAI>-pzZ=nX>G6<7U{7Tqq%Fdj{ zJ6-jjMV`da96|v>(2xaDnTc#7lvUN*e}?e2EZ#%xDgF@TCuW;Nd)!MzhF#ilBPbjN zUh&S~9u>OfdG`);J-nG1Jyp5fYHt>9{t)nNR%I0Sb;+PHh2|qcnGMo#QJl8w2aXxPeRIhTR9(X3!3R|_iCoR%=rf{e*YNuQ9J2MWPNq6ar z4!pI1Hcme~o3T7?Cn}71MA!X4BthWHg7F$S4~b?XA~449yUJQg`8$lGAYb32RT5)I zYp5d03mRD>Vh_R)3Wq#$U)jJeROYo@y{cnAjje|rbW=m_5v zdRhre4peW9JI6TY%}C1-uZa$T%TOO)MRQaN5+_TXK*8h&?#~4G3<`vF_JKn4B}QuG zWJA+`gV)!p1{Mu(u^pqXhCoacn)1(OF^k+Q143^xvVp zbL#KqOr9Ywh(R))QuiPaAe%G_qZz4~f;t^%wO@@YTXY1Mi1bq`U5>vt73?g58&5gA zGXtii)TcZ5eX>j{;)dPC|}Y;umdv*NnW%@a{bJ%bE9HM1yc^v49`?q&f!})o1m8}dVgcOqEpVx4TXOF@ru2`4y|3%+mhgT=W*RK8 z6(O@ep%JM|2AZRqIayLNy6|@Ka`{9v@5Cqi3d8uB4@&O^R@KgztCSwA@*G zejM6|)v@YSADEAE&J1%pcDX={?om(r#j7lDc9prji1zFK94xnCq5@^uO7aSZC05 zUNoyxd;YU#6dH<5$q{+ee{cxV;hLJs1^_YMsC=+b2Myj7GTY!a-XaVP@^r~n;5w-WnAY*kzmT$khfH&2ouL;on2i6_id@}sdR_6ReKn5@%}+F;L77DhvpWU# zR~PA$Lq(#_o)&Wd<$LE~$tH=!EFUNI+jRfk>=llRTR6cNap8$|?)VBVD91|dUAvex z4XE1lnX>E3xizcj@L_rUw+d)z`dP94nYb?R{>wC-2Wlp;wi=T(-|~XCVfGxN_6vh? z%O@zB3xze{mlYEogz~r)a~g_R!$qCdnJxh~9m-+< zUmHO+y#4ztJ!HJx;|xB;xnC|B?y6|d&&cRFbVA{Cxacs%4@gSJABt?8;h}6>RY)}U zb}k9K%06AjC<<$gIWC|eRg^(GEI}<5tiQ&0=7o96u#nP;%kfs=YF1SYoL;_|fqk%i zcYjn!!PA&59|J*g$S^xB^IAkIuG}MgpS-PX%t$xj)nXn}Snn`HfyZRcbwbgi^)=FD zs6EYAuv}CSJnQ6K_r6wz`$U7Gvh4EHB^h>UCRfN0>oF8QmleUAP=ENiR0;ep?5Ol1bMx<)P ztE$4zlNy*+vINO|PA7Ftq~gOIq0xAyhbD?C3aK`Ca&m7+=AbkI7Y(t#-b~w4x4H>u zZj^{xVV|S9z?36&D-|;2K51ql2!9gKrM(;xDaXF~J}@LE+sg!Tq`(lp4;Ai?l>b_^H}p9?N?P7 zRV(TIQAf_v`BC%S#^2;KEadAi;3bMhZ=9n7j^D%HhYl3gyyy<+^p#}IH+p>p4I>>- zw{&}XL?ScctP8us^h=)3WUiI)AbUe~H~o+&(hV9zDQ<)?dmhg;tZSyNkSKf!btpCc zm31j1>wLBpRv`YAS8^1dobY9?6!C7|e{PfB>sVKWPadRukA#v!b(vRHhXx<1k}NVz zA&n@DOMSSa1CaEZr1Qc9y0`qCHF0z6pl^ZoF$ia4Lg4a`fI&`~0(aoLagn+LQRlq|N5^ zAo?@Ty_40YcT(~JErnoFdR*_*r;T>$0D)ulk34{L2mpz=&?+f^;>O=4ZRfvdPTZ#M zx~)lhvVJ4yn>s?eeeZjjL=Y<9{s&aT4?=5{ZP?qoUOTkK1S_$(jNz z*h0Td6Ql>gJg;ZuO-W6E2>{ur0Ok9R5*P^K&cZ-$X5avZT%h=U!L(!^9B-Jyhlz~s zj9V8rTdqPRthzZZx1Lg6)q<1a1_o5keeHD;K_r_i!DZ5-6g0+b0Q$R*b|>%Z>HMFT zUP}nh?9$2{7&Z-IJ2+%5cq_Hl;YtTzhIJKRG7Qe5N3Q_~%5no`Jsq7tz})-WD7O9m z1A&SYcZZZ4FE5lR#{yqqy*2uG&M%%XD>_(xw_5yI*1|4wb;yuWmVlRmS0?QP++|gB zKYxLG@PAH&(tK)a1R7t+O?NXfhvdf*9}gpO7D`)n|5rxvc=^t{UL!E`&pX(Tml8^17>keUn3>qx z_9L=9pXlpN>w0}2baie1xNG~4aEF#*Qx>e4uAb8tATslC7%o9xQ!$=jE_X*CVQ(cj zt}IhkSE-cMl?pfKZDh11MfN=`+faqx>Zx1Ou+!y=nyU5fY>MsY@k@|BGrB%#I&fMy zf7hQMyJvp?-Xrgd)H@t_M6Yz)-%q=y{(RZqbke$g)YT?gIsND76uQQ)aAI{;TV0Te z@t9P)qS(&4Bf{aTRn|ste}4HEdCt|Ps-evg+l9%YLdZI~68eRYJi;uE+=( zy^}oQq7v`}YQUPoHF>1bgKy<2UAm3$u`IoWwkzme$12f8jI200yT!cXn)Vf@plwr% z-BhJX%=S6ry14`6?As!${;kAcOG{^H#qcJ>TwY;4qze*QhNm77#{DRX9CcvsvmK>v zXHOd}i_?jQ0%(1K`;y*ys0JjN1KW}kq$CXAMaKJE)9GT8$L0*PTpikq$arjiTgC9c z0MXNIIk91iyVMQ8uU zLx2A$raTpYXSZbU+t<*ba!q?oSJJLW2WS#E{5i8%_eRN_EOSx@h0EWSdPq0Yde526 zMsj0FOZ@-%8sBdjQ?B9TMqw}+!xpW2vVoOo$3vn|?*Dyxxe6SAQ39 zr}o=50!rC%N7bOy()6@2%<7C^)zpoujsV|rSO3JAl$Z*CT{W0^43YrJ_Mn~?;Q2Aj zd3Dkz=BEy?I7rBkCljCkJEYP;yF5|ucJ(;9gp94ebyloA9_F{nrbSsP7Au+WbZ)t^ ze9qsp)l0SXl?>D$-RZT}Gb)M87O3hX+x)fy_TH-_BOCf2@VMIzlF*J$*=Zt8L!(BR zTETTx2nyZ7gQhq1?GWmDTs`;EhQ85}V+55CSXm@0=3d%KPU~pyaU2D~hiJ(>hp_C2 zqSERdTekq`t%i}cCBccsRay4VLGDNNIGk-8UXIXnAFZ-=7uLeIlanMi33PpWqwGzZGc^&=nRnea|NaiXT#nC$KguRg@; zFjIWnUqNM&XRbUl%s3GJK&>n3u{D$lGy7*ta5~oM@T^4#>P+7MLU#X4uda)UYWq6k zz3wU|dWDqT;HmmB;tp0I3qB5^%}2CY9sWZ~qv}cWPqOz#awYkt zVfMKTxtqb&36J<(y-k6*{Go|<^2nP?XLx;d4Oo1rBJAW;$YLuQ?P3oWpZMX9ftu~R*EY_5 z>qxKAn}=;AoSJlH)-f#}#G4B4{I$Hh2uEFMx!joWsF~ooB)hs%I&KH;M`>RX{u zppQp9s+yUpG8&cB;`Wa`y;aBL<&N%mu$7#ct}8v{IlaZZ5 z=Zq!ATK!0?TvF(_71yry!WnJoSz3fFUExbel3UtEw-Cd>$K)?;JKtu#>kZqP{YrS_#AOR!cJRfQ$C&JWVVDMyly zLYXAKMK@e#{8`quROGJhxW@|h21{q&-^sT-qBk4wAa}2+LTLUe`D=yE%`~!&m;dQp z^Rse1!g_VVt8}YVd}~=Kb&KS0C0xZ>O05*hZ^(wj(LXfpj?Ltv2gj zo8?Ha&UZ5`5o>v?l+mGht-Qj4$}B;K*S85};;G9chJ`QG=>2rtb9JnpBl?`eIEl08 z=F8#vJ7>(744v9t$Nn5!hks;X6vl6}u0eqaY>4|9XCt>DZ~Z{tULNz&c1aGSL$$ev z65-Dm;A_w05pn{E{A-9!a0?dI)PUjhOP!6*ZEg-q_%@``%^}1Idxd&YNmfpta)EM1 z&RUkbaOAbpSEY9-TX`D!9r>%W4Jryw`9t|r#SViZe<6Rv*rQ|A?vR9|{=&j7ajm`3 z9#wZr`#owb!W-}fozU3pz0hm`9__JPUUN*ob?Iu32|rp z;kgF3`_32QV@_zB`;`4u!hd$xDOa20WWvcA?On%R#~mt3*&W9n#uA)vzN8Pqkp@@8H+}ttZw5(A?hRnQ>%D5kf1xQip0-5#VERy0HuB#4XRgf zb-G*_%N++ublNIM#GVdz$~vmkTjRb=*K(NNEugEZdHhGvZ3=6HEjCLRzdeFE0oX)7 zxkqdEzTys>VMG}2Y&qaOYTX-Em=toaod7orjI7}FYP7j3?FLS4rMtiskCPWEIKdHW zkTR6eV&dsj%fKEjVTzk`^Y7?1WFRaVrU76Cf;a{N8y;#fUq(YJxDqy{6sL(Qzgr|< zTp)2LI~YSUY(&;c()klTBjOkFI^I@rEht}`=}2MBxg?|{J$Jt&7HtMYDna2fN{boQ zP`M?VbKqnur#jT(B?*1#y6e$2szFjX?!3eW28EfE_{ z5Z5feEJ4dm=;L*?TbY`i`5n))QA#!1CwiHc51K$u)Sb^-%!#K(M9x5?C{R{pY?G{9 zI8Ny%ES#_@NnN&NtLCIm^Zw7?Sr#}eyUL#GU%Li(pajnQ?EiJ*rHbr0*CYGnEAue| zWbHU}Hi41@^`6J98-3-YuMD5!(ezb$i}Ge;kinU_E6UXSAt{Z>rnBBLo3|CdTj#P) z>#+3d*L^d`u1QC%+jU)z+jxH7UWLk(m^2EVnVWHB>E@UNxLY1Rlq`Gft}!F=UNfri zNks3P>pkmn2PCm2@}SA3!t**oDuLcZX9^2a$-%@x43$EZhDiO6m_Xzq9#n4qn-$u3 zwrt|f%dPMg*kK41v0d)X^U18T!x8iYdNmW93$@Z1@d$f*-xkI3G13H5CV-D@o?KVa zpOpJ&g7BCCl0`|`k#s4C9-;_@IFM4PRB$Q-SxuYTi}&+2B-&RZr>_BEkOW6iu0HSQT6zh@E+HVE_|mVKdIxxk8`>1o!DGj-sSrnCDQ&I zXOi=DGG0uOBRfl;Fg`o7AH&WekdqSmQ&UOR$NU5#A+Oa3NQXY4Q`HpCe7r)w&$Y$1 z9#KxO2rMM47A#8d%Paw{pLz3Pjy^%6@B;TDR0rTw=z~q2&(;o0mcIVc?FS;mN$jhL zoGYn2JEhaS=%ril>EShyttwvSo-rYb-8%qn$t^8EcVb>;nW95!=uZ`UuXQ+NQ_LD#8ldFQlyV_ z8HXb>1RRuE-_{gBurj>nfll`}UR0XDDRo=S6+Sd5ZX@FnDtDj4vPxo}(%t{AB*>(d z)E=s3(*NbiN^unI%{*&L$8QE%m_qn0VNpTH{VTY6%{GUaZg zuKcylw5TpaOh234XZoLP(=yv!^^_y0E?1bU@>yW%9UfOlfx$jY+qzNL&<0zYOH9myL{1h`)?iN&`dd|p}^n! z7iWqFt?}fCgs5W3CA=oLvS`R4-gv;)OrWhPdkYsRW^eYJf9z13NEw#vp2vP{7nYM9 z@z^+`AT4w1v@^RXAqyE^1G zVw`VIzDvSXlD}vkciQLJQ687Z7k>%5uqox8f!!zyy=j=owihOFIgy-@n4H}nMx$i+ zNr1riQ}Ca9vDMU~rRM_Hb#a>)6=&YvwCPqv(OUE-VECHS0RM1( zorRg7`C$_of#;R$EI$ml@aH&?&=3{}=9!!PONO3bm9Moo%xB_11kiGu5mzo%(E(|W*UN~m%89UW)1r-Q6OpSdONsqpjp2Ot(n^TqzQUf6`KywCiL*z>t6&C{%i zl^o^l9z^GW2ADjOt;6+-B{T(sGCl4f9rw~S+mk;$^ z{DUY6{rJd1(1Yq-c<;e!@mgz;u;U~(pzH-z+=z%j16r!JPW}TrHQZXizX1Y6<^?BO z>fEHteIFEep{Lq@NJZn`0j*X}C-YA_sZz!L7^r+oC9Dz@*r6B#%+y0JUf{XM+K%O5 z%i3qnkSH@DwvS;Aj9W0tm<|xay8t7gsAFAfq1ziNn1Nst8}HI`b4nqlDr&X`5))(f z2xedul)Z1uE9MQZ@9iBK85=uoc&NO%c>jSQwHz`$bH)`l)%uP=gGf}ueTlDLjo?s$ z$T}5ud;K1)P$#w5?b-M*wYsf7Jq>*bN=t96o0S<2VG8A`>R3+Zx-H=ZzDv3TI}~_K zKtLVAwuzKs9gFZR1mcOv5vZ!nbzL3Lx~ZL2ELrwDN$p|S%de~@7J19UTnUIAz$3Xb zBA{fs!4ZjJMc%bOP?dhKKW@dKc3pQ`#P7^m*Q^50?~bvs@PM~rDTwCYGo3SZGSKnk z?+^E_RQ~`_rlfhpY%0L9PhA9Y0^}0ZSl-pTiU5kN?3J{ed?992iu_-l6d{b!&^W!t97dh zt7nGy_wxIp0OCNv9gF-c`XYb@lTt1dK~s=an=7sdI8z6JnXxl+3Q#O@-IZ2egk}Z0 z0NvAKnfBV9U1WS~unHP@bWsc3!=yc;6FTAu1aU(z(Z1hH`ZnY_K+X}&rnLV!+k=fM zuj4ibZPja!&x;?05_)@ycKx-r#X}Mc>+MGqt@D(qX?TwE6ZjpAfQr9ybd8y6PZFl%4DfeL*&Dg(7b!f@w@i zj2)gy4>kF`dEl4hKLCM*hk<;r)>UOKhti_VXkzQIEM2{_TZJ zSRGrEJGS)UgfvCVXd%c#L9NT*Y8S5)TFE?oI%csOp`rtcAC`KWJiqwjRGUIa5yKXTRWOv{SP zW~}#b%gqQ$4{p!(NZ1vb%^hjkaaCt$>W$?o(}$)MX&&`08eyybb!p7YG%R6zo*-_% zStPKyoB2rXYf2eo)Xqu>0XRU3bTL7ad5`M*r8uKfQO+qS=MBMea{fHE!s)9gRK)+3 zGEr4UzVlRwsD~847orT*s|ud!(keteAq12X;-#2i@|3Fuxm}VlUf-fCJ;$r{s!4na zUcM4f{b6{cyC;|9iA2y;QxZ}&f_wc(a05#XI2<80k7E^_AxkZi3@j^aVRxL^>^7Ob_S6Y5u&tBC9%x@o1b>UV_z88v6zBou;Epp^(tqoxe1)JWq zLX6^&05_3NIkO?P_-9EVGV6l`X-`5QxvUGiDtpMPA-yKLM%)l{sKHaApYP%5ZFJKr zR>ta)V`zM}lFFitCJ;qEqpd{*mMenOLQ0?}Q6evK!eo)(=gmy#4Aj$-=1%U@W5BBMycfgJo z<+z#TBC6zRsx;upeL|I~S2LO4tnTCPTW>U3X1UBFiyi*b(lapwM1ODEl)b=m!Cgax zs)TUQyg_+vu%c_pH&Y-?uFYz}stxr(**^XGbNVI!@#-+!DRmLGLAoH_IsJ$&UV9oN zc=#`&-lj}j7GUBqFRhj+iQGTJs9DV^hS-~73XFG2d*ZER&16FeF|U=j+1>c<+K}2u z@Qh@I5^9OOJeK2t@fz}^Qm^YU@G50lL$OYCNhp3UmL))Y2Dz9MFs%#?Dv?0Jg6 zV$n;z&Aa&yk);Mi$il9-nupzPd` zE|_1o6$aDR|F39^B74{v`DgM++YxH6-RBhHc@PHS!WFHDJ0Vz%JBr2|gZvgl3P`Au zDrfd`Es*{@GD$nKf$(JG`c#tFSn9+j5?tM87gVhG2bG)0no@J1-);F2$1UzJERG$^ z!aG&4y;ZW?-}$i+#C9!vg{PA}m2OW7If4M4@@s$}5mm11m5`mP?&6aY9t7@-65;LE02$&Il8gBz;kB!3emQ*ocX3=7?L3q^K^<&Wvva# zUN?1o&rq%0|9-~Q#t=VNTzFlgZ$^f1XC|I^HBYD3 zZ|f{GmD{RpOjP}!*2A^j8HP@71^HEAdZ%1e7tT#@_oYT_{jk zoYC=^^mrvQin?FQ<(`=5GG{>kMZlkz$!CV7NNT&wbm>j)`wods5$ZPfMozvB+hbn3 z$_4P*vb^oB@?(+J>#Tn*O5jA)U&jS5EAgRBQEY)vkpl?AWaR*0b(6cNAG|xM;nt>A z{bKECm@DWJeNT{G=H|2U?!oXA4%&&swIR$Ie`08u3B~;4AJYaBj>ma2FZLvTEi?nZ zt&lAOf%g)qqT3vOmf#tDkbYdp&o6E1+KA7wzyu&(gd{Qpp3RivH6z^TzQ9}$flyq6 zYgn_i4vfEaculM+#+4LLYzDw7UielyW-I#?baRbryb;>S%auyJsS~XD3||t4~R3@K@<}WEJcd zjW53+n)c0Z-w?3!@hQ;xFr@qIP$O6}Klwt(hO-f=DT_4=G?taDB ziL0FtwWGmVSeAtY#6csIUoe6elBkN7YK0{o7b8l^^Eh9nyqRV$=kLVG;VsUJUdArq z)+Y*#WOc#*?BavacnB;#a{um}vLlgYv6Hr?f$}OrTFuJcg~bzFQz~l=q4l-I?6iRN z=txez1Q%4YvL*RNorE2g7WsCJL4xMUV~SGWS(G+_;s9jp%)6^u+_C|s02>sC4g&o2 z%I|?6ij7Am2mcvk1Bg81^lzS*kS5}6^LKTOy+2GyT9mVtZk&y)O({e#^HrR2*0MXl z8}__A>JJ4CkL-_(?hL%f_GccAx3dwOxZNoM%F*4Ts-LBd|GBq$4tIQBeq`Tl1Fse) z$-Y42ook7pXevXu7dHH!|z2d*cX8Ip# z{kDk+QwQJGz|@gMRJxTHo|TnN72+7l0D(^>NgMu;YJ1l~a zd+L1`ge=mW+&!(obC2F`jEOzRx=%?v_9TC*?$U7b?ZPK%CTolz+&8Y-`n^Xk?)I?~ z=KYPj58d|7bo2leFzOp}1-0l6CmpT)Vq7_cs&apk+wKi)XKGK}+AVSn-2Rem@dINL z#q5j2H)&&SE7Ktrt3;Pw)%1zZVKF_?q&0DYi);pejt{L4Z139!)uW>&5tWg&8q$&d zYQzag_heKG!Vh)=FQfGN3H690_Uw-zsl86#zSUmA40w~A>_VB_ic2YEP&jVFGdTLc!J;94=7^~+UF+< zNCIV!sC4bz6>ob|mVG2|MHFKDu|Ju^*%g7ytnQ;hp$~Z#vu4}=nz2JK&Yzrn-PW^p zH+tlfj~$O1lh9a4wsxVi)&APsEmuCjxvgJ*nQPCZl*sXqh?JD>zp8fba>$!$f+iua zDk*`p2pw`s_3YAOK;`VJmL*L!(4BLWAx@jU>pj&oXv8I8fgM#d2C|Ni^?6o&433TD zaEK2G(`zg?uGZD9id`#v6ZZ7RMb4L8z!TJ7+0z8d)&qHN+mtRU9Z`CfO;5A))xZDg z5Jc}0?%gNsRF(fzT%s_TS5+r9`;@*qnIqw7&V@l0CCWuwx5}I~Vzttos}wd(F8f|_ z=hf}gw%S2n@nfyOw5crG$6I zp%;9$_}WhPcK~EzdnHly31gpm*wJT^{Zg}@pq#})IePD)ShWX2PM&-<`Pq@P5rmcNLB753es^X2f~1W|_^o1I&Auz<&NSHfmi1H{v*L*{8t1yQ(X;9&T25C| zsAdqu9a^S%sgey+x6K}}eIAnt%=gsI9;-#y+M;z{!1t|v+YOnluowS5*1R+1u|q-Z zY(re*qbEfU&Z#NaE{kF=E&9jzM?(Cx?wr_!^6p4Md|E|^d5p`g(|Peo=iEB~4ErRF zh7%`>ScUd>AIUQ&yLs~hR#8eXxw-$ENnYvG#oGz$Cp22`|5;lZeLnoelWrEDoY?Ec z(XHkg#iMrUtNv7PXIFaLyts14F>4KdP-E~eX8OgQ>Gl%) zOhDwfUV|;&&^PdKYJ_j8vAdjd&7|=9MB=uz3vh5tbn=1119BAlk5zrjBxh|(bdW(% zgS5kTt=-EE9B30N*|O!$n=SXX{aVm=CdFh(t7?2Sw@}6oIiU0VvEDyjU4ME7cN-Yn z?gAhY0DuS@cliIKOq<~k2bjRxdd(nuz=i1^xS-IfA=UUU1uG{kdYoc7`|b#Xrw=OM zt|W`z>W0p0&W0?4wKwWwL*|76731rYZ=NsO_g%q7tY|A9x)Qe|P)@2D$T|%l(#JfX zMB-BrUsE&?I}Xm)Oh+HAu9@BMv+P!1{UJxQsW_L2%A6&z_W~WQXK`JycUZaH!W$S8 zTzU&#h(ecFu=@;$&b!xo{p?gz`F5c6Y}3l{@X8Q{hE}*MBl?Qrp`5C-G8-wq!WLcaLM{2QQ?{dvP@$dI>&A3HC%GgKa ztTc_@6Pv%q*5q>Gt1sfz4Kot5m6GO^s4?rjQ(CK~6i zdwsMs1Mz*Gz4wgQ^`ae?U{VKF1Lt|CtO#jtqE;LlZe@7ico^8PsAKnrVR7J4wd7P6D5A~O2YX{c0+BVIFD-`b~(KTMT)m)-DY;4N7F!3bYEvH=O zw8lx8O++`GPZry{(&MdiRr(Cd6gpAbgPSotJJJa)tC;IL7~y*Bulimk@o|v6LcUr{ zicv)C=*D{m(wCNa$8TjNv?_26*A5mpe6=lfJYL;+*rU*5RQ~NMZVZ*>ea_pNZ_vui zp4TYz-2v~kvV*4t*Vd0agHj&rli=;pMSiD$>gx*yz$ZS@6+m89wm$!o-B&dWfWRd) zBUp(w^adi|w&%FD=xuj@46e86BP{5DEU`oNIO&#!omY;}Pd&uD;)WR9NcS5z>*GDn zw#CdEIxEo);gg;yPUWmT&BAUXT|3#V;Y11w3M+?AeFU{xVAkgs2kg)2)5z)!Pu0FclNz#B-?$EVx zRIcV37GXCe?rjqKeH@89VZ*=wZEG&XG}9j3=QpbHwgb3Jblr=TLi>CC5Z=!p^Pag{ zJ)@C-`z!cKp%?n5;pCV1cl7<~lW$I`F0YVM@gi%kPc>+=ycJ=&y+f5tkT4rhuZsO2 zP^%<_FS~nj%XM4964t<9X6s)fE|7QRc_i#ODI#xJh&waDG+HO*@{^)RCZ4SHZ`tfM z8=&%M$gBxl3p|iOUUic2NB0~0l+0H!Ij%(Fu`Z}fizb5rLM1#qf zAN<)s3GuptNw~=3G(7BVoI@h*V86&V=lrF?-ZvJ|iz@iPDW%5_Z0mX&NDg0$dQFsz0rFIT#po}Z_E^|Zy){2{g*c?4<954(@xJKZV&hT28|^%(^pbnZIM$^O~b&S73B9a06;F7-`6OMF4A)GeU>Yu5D5g*Vf-5?5YJ1dp zePd7h?(6*{Rv@AV`yI@sDV;hD&+cZRo~S6pz4B2W>hK^O^v8hSDyhm_!_~E)lC0r= z#4TWG_`oqKI=_g+1%}d@oEW#lZVx~$$j;q?+9y6^6DYEu@$b(*ET*ZkkyS8`E>WNE zuYc~_FN~yfRVub?qTZ2GF(xKEdz?Kyq#g-T0i_nTkYvM!QWY2_q?H||u~M%Iz@)v! z;-^MHA`*$t_7w<*Gp=CAKV9D zzVQDa3?B2({|te`TO+C0$IRgnyjljg?%FTFgb+DcO-7xl+lPA+;KAHC^8OwI$eEC_ zoZ6}6^v~iOw=0STXoj=H!~b(cW+5Rj*Tvd-#@P#d+_?16J@xKqFg%GB%&8}^@X zR`WtFMQJ$6w>hlP$ud00$Wwk!2}|3l#BkFmhr@!PhX;TvkrmdQ)^}r9M&I^hryi)D zOFzO|K}rzW#=50&H`KSh^I{;;X@~gs%S%ksU|q-SXUUFmBy1^%ar_IpqQSA!jaIQj zAErZ(Dr4_}{7bKCa(aIuku&JphqfHHvwSe)-$t{F4Pf*KTAM-ynNePz_IiCHA=Rl( zkFNM~A`8D;-WgJ|j2iEez)e5x$M6q^xF8d~A2*il3*iZeWK3inNGn*=>GxD{ox8U6 zmmfQwjNiLgwa?GnGmnOAK5F`>S6!f6_XPp^(SnyzRDSpeH#xOMojjXz1(lI$@uwi6p;$ww{h(GIasiWY zPNqh$6O~Kvd^tH$Q0JKT8e(BB{eB806#|h*7H(LOfIm86E^q;6E*~BO3n9X;L*ZtK z0EFL!S`Q@o-0y(;z84DW;nv-rT-b?fwzR8_a(2>Un=$(2z(zC+3ME1y5C|W+LJeyo zy>hZF9VDmpB<#ukT!}YJm8~`2bNBOZU&IW)(JS@!v7;4swY{exitI@gyIAUmMv+dfhbcfG*UTOs)P+I(p#t@!OC)kW`bXDpV+m32 zQe6$9zg=Zq6+<8pcMx9c%DT+}@R6RcS2o_NeM~}p`RLNInW(ciG4q{L3=Oo=aBe-4 zhYTGIVi1%aK0s>*v;G!Dwo=#E#*9J?z&vE@7DUWXOP%N5XL?HOGKFn#1;5>TO>PB6 z=Y2&>N5EH<oBbrabh`Y z3qxPPeo*Rf*7fjVt(nSzz%lTYK4RCYijmXYY1Vdz|C=^58FgO>oXI<8Y90f)FEJ;1 zuo*eGL^zva(I5q_x^62LE?U6y7-n(*xjw;K4$Q;zRFIk$&Y#Y#1od+^r|Rj;8V%R( zAMK!bqgD(btUxLF!RiQs_TYCHF{ly#yR%@@XzvLFrhHm=vXG0ahWAyo|7r8L4<2Ez ze|z{{=d%7Hs+SNo3y4_vAg@jLp+s0_Y{_c^VWW_Ex60Z2C$Kp-5+SFwF}5mTn4YdOpVi8d2WxACwK?(wTJ7cuFiuCig@(&A zgEey5VNpsJ3l760&i#KYjuu+MEUHha>Cb5GPYvig`Wn_)6$d?Fr%%7;Fo?knjuhXE z92|_iS3L4g9n3qx%6nV0z8;+X9Mfem#a_2Z=g7|8tiUaM3_89h9Nd=mR-qOdPaZvV zU54|#wa3x+G{%ohMtw0+tXBb0%6Z}wKu@K9YxnV{Tkk7@xnrLZ3`btN%croh%9}h$fRAg3r~5fEUv2F?ew`DbVpE%N4HtN`|X z@7sX+?i$ArIa94w60cVPfgw-I8luvbr0HO2z`8%1FPJ@_r1J_O@NdWYBKMgZ29G*8 zg7`r;0#-}LBc_p9t{=9DpovLw^l^_%g^umqc`VVmgF0SNL3I#*-`(pn%^z zi(q7tnQSt3*xDWcb`3V2HDc2J3z^5Qt+0Vh)Ax4k{O!>ek8cZzfQqim4V`ZjqnQdx z(U7G$5Q^v!FpB8NO^p2c?FoNVf63Sv5>6lX`~{ZOCQI)--3 zMF?UJO4^h4Fp!i>B9LI@M}JzM(bsOF*+^DaN~^NI7L!8ku06qi~X2%kd{V?eTHWTz%dFj>j}T?yx{aH-F$- z!1EKCceWN;HRa}>-su}K6gHFpzSEe^>d=ybAhaqe1GDJtfb)8{M;7W+JOM67IU?ua zLt)M#dW5c{id(*Z#ZW$)lHIgp1CiKTLjR9q%rtBs5W zfodp9m9*8I8?rixaawOBIU*p86`#rCgU{hKX~5E zfLHS{O)aaXH_{p(*qNT9?nrW0s4@z-krW+C>a^}W```%c;^ru~+~&Cz2JH`=4K;On zcWOd(h0Fit9Et`(k+84Uk8c+bhV@)!8#7tqj{3DsT<*%cYiuKP|8vmGf0Pc(ugn`1 zM-vX{V*f8|=Fr4KS}>OKauv=*xoCw%*cx#;;r>_a^PkdsvqK$>9XKFBtjQAq(?b{P z1vHU_w&I-e6^br5qrz32dtawq(GY--UwtDXe0r29F*3MMhmW1F1iG{Q~9EjEcD;1^ddH6j{7%L#klChR8DOCnXZb_w0aTTWQ>@HiwDn zXiP?u3auGPPhGwKgofVdqYaHs6`kSkBHP?m?b0!yP~g=H4_grO9=VMrfBomA;m43jr2Z+86zdY~WEfX1T?JdSS5b7@3(9@(KUv&Ewa!}^=C z@YNGDZC5VIdon8r*r%-S%XE?#V(@^K#Y&xm1eRmh3j`wSy~_nT3&qaEkycKV6N+Hs-MIds`6X-C(Is)myLbJty^QX0>P7dsg$8M5?956AuVueKNd@&q@_h!q62|?-?G{EKJ8TgR<=lmw&r=_zjry990o;ft^oeJW!XNQp~8D2yN6oL*2$1klFP$Ib8h(%=6y$c^E z9SBn+mem4qOQ6W_fJ7dc+W|!Uqze1UnhX5!>KaXmIYQROG)Lhc^JPHsW{!T|yE_A6 zez#XoYYNvxOabWejv!Qq=aqb*JC@yc=qcimvtdXUlD7<&z`5{xu03pdPWlw0Q(pS( z2H$u`hv}~{7^($k-^O?$Ww-;zxGtJGm8QVrTqp_$|0r&6L1|CjK($AN!?Ap4JMQH@8Aa9@G|DGS zJp4edx_k(Wm^5C1aS43oT;+fJhE^3H;_VxsF>s&{C0oWLQ`GO^BkV@$i~8dC&)6ff zs4b>Lq)GAG% zCM>7Si{DTetjkQUS>fL#IPk!rKK9ZN(LMOWTgTRS+&l&<2}2lu&Ljd{n5CXs$yqo5 zn^z=R;gf%{tX`0uapFcLMTOSc*Fn=1R}->PsT4QLd)4sht&fTkWD3zq%%hh)4} zR8UUkko^dEVzQ6B)SQD|9+UZIf7 zZ%2H-o#7)_Duaqe{pm=d2+@aDcwKEI@7mRmkxNQV&kr<4EvuIpZ&B+*8=b1Q+A`6{ z?Xw2DGjT72RG(eFDe)Z^JT@+BcyGTid_zHArdwk|>N2V0d_f7hdvAZxF|CzLd+`P` zK^0(6t?>*SMmW2|JEzqrAij$^5(E;)fIwnW!(Hx_qsq6@aV%EaZx^3DD)5r}_-wrq zUXg+bjRt zs}9U9vKC{UYi=(3%kOp>mLxwqi|>i1f$!Xx-^IZGV#j;m6U||I1Henb!|L9nWSK{6 zc~;i8yupR1TKTWdr8>9FCt8jbb7z|_0=ofETo*4Z-)Z|UgrzlV%04Kejtf14|32~v z%XS_L+w^xmH(Y}>z8~4(--vnf`hF?c$#EG@O928G0&}Tze)2hgJfheOYYm*>w|is( zhNj=vZ~4QXJD;`3TIh|0umt8o#8Qbgr*?9~txe5=meI2L63T#{my0IyUp}>PJYifW z5ZzK1^IvhFzs+wAKv*JBT~t-xFnPb|zIGYlcC-t3*6RJGbjn@jRn?ak?P=c&hddQS z)8g@Iu6R9TF?KgOiYR9J3hYhlYxCNKI+G{bstUVF>WU1N2KQimdCmwqMD4t$@imfe zj__3uI=VwEFFrX{$3`e4Wl5BLl}jPI+TqZWlWZ`kq%$_L*>1;7N0((PHcn*?FUyP? z?bMFf#j0v*)tcjX`n0X{W%b23a(vN(kl=)r_nW*Tlp6uNXgF)(=TFq0c zLvjk%ltSZ4o3d_nhuYSDwJpsfTH{u`f4kbqcKX&G8%(mSLIE3c`KKZ|#g{dn*uy#C z9)LJj2EOXJc&rC#>R)7D%Q};Mcx_h!D4(}}tKSX!P3n1pE2SwT5+%xlwV5Av{i=nX zf_~nwz83q3(TR&HxAdg9#Y+>Tlvs{~ukSqg&(UYA`!@i5U=V=K+SYm!u*OI*l^nFs zX=_=SJu=4@7UbdY`{iy8U;Ec}|5(5NM^{$TxsHyrfmvNIOFT;MRAg=zow&GJv+d^f zN=-IE;OBDPjhq|vPWxhNzVFjS9XPdoAkD%jgERm(*b+=Y{vkc#Nu?AQb$@#5Z4R2s zkY2spNmV+O5P<2JWdDuB-HZ}p4nJWsXaX;gu*7NZdBr=}*KP(;x{3JbZy?z3kdr8j z{(-f3BUf<-_~!{pVJD6ygusKR@**+z#_9 zUupR8uaaG&#iBsBkip|rei7U`8GFp^9aXe&t^7^>*;pOdkf8-?`ozgo>6@unIy&#s zKvoo!R@uIQMiy^b`(7xJK9Pg5Ifgw}#EUkT$JQsde_T;h7pswSZdX`o zBSt(hd087`3w@5%ml>7RcLn^BBO^zV(9mOrW?HmyHMOy3adL2Lc{&>mzfYG}-gIUR zvQ(uPmV|mCv`7+D_a;#4$`4*Z79Nbok%`0Y9Sy^dOFK>k@$5R(jS-`_ET71?$G^1j z#hG8oLeZ3y!I zIr!2KKxMG`e%y50jm)j5zrxdGk|6RbETSD?hO(x>^k(_Cb8uRYT*DnIqva{A%}LW! z%?zE2exenF<@3*R@AmFSnk+t(IaEI3HZ91nt3`wm?IQ@KIu4F2GPNIFgW1w-^5Tjr zzliSakOP*e2+4~lXJqpP?xT`+QJ^t(OKNuLq7nQ`U_{~f^uX0Vf+JtzdIy!v3*TE2yxCq+3 zmx2?LZ@vO7E!oLXgADFuhj0Py?`ao@9K$>RJRZX#?8>k$SNF?|r3xP5aU*ScE6enB zWo2B_tEVq_xcR+Q;G}N9c<1B3U&`F5BT65Q(LlpRp!gFOz}T3DZOMUSZxE8V`)k*N z1pVct^9@hQl-|Lh@LZ@r5e~>B@eQk=Zv)hL&FJlozmJ^-vaz?bkE?{3W4|B?9Wl#rhXOZA@F^c##c(~_f3A^44sA8$3F=Yvq)2`RJ&I76~~@H!P<-0mJstYKMk^W z-sKgB0TZBoVR*UQdEOeOoXp@X?j7Q1#^VJ=N6~R*JeikR;1#*8w0Kj3_tfuvYGkcg zlALYL&ie#>9tu!z{eYXNOosb&YI;j2*As}Sbr*4<{#7@5yMvCd+RmfXXPZ>?LQ~cW z43IOF(h6MlNq0h_;<>zwepxd2Xo4-M9|&lgk_ExSSZyl2d&6@uXGa3mru04xOC7_2 zeTxNLP5zdtLmE+qnSt>7%*McATI{_ggapmw$ba4 z)47KnvtHpDgRN8Gd6DmD&VU@!V-#;qkolx`T~Nfvh6ST*^iw;4i!0=K2GrR(yB425 zx1z7lCDO16g5L&2!UyWzO^JT`w>I_7nVv$&xDn16db~&w(;2%dxz5GWS!@?W+l%RL z3d>o2*5&Tx_q9OdM5w!~h?hpmOUgYmi z>Vw5{pBc#t(lo#3iIUn=PL(2~eA%106>GSzBJ4=nWSQ33(9U#p+#cGAG;K6Cc${!w zp!zL!oX6YK? zPhI&O*L7gLVKK|yzjQ0m;&LnK;Ar(MF>(?R5;318I+O4Ld6FyC$%e^z+pvXz{l~9jfQxHf$)q$Ogb2+$5*WC2&13Btc zb|lHGdOF1yW+UPX`?*(dB8OU(XM|dJ_Tb4nu{2yl-EaSin=LoZjtvhQzi(aj{?xA2 z*VWyZZK&l1(=@1>ty>FcK=r+|ygG0RWE?!6kGnY(sWxIc3{F3!r2vugB~K?sq}csb z*>s$l@E7}ykdc*@i7ikw)1dHV851~GR7?paz>g7f2uen=i2HLeyl+Me;22Ebi^j89XnvHWgModvFZwFxteCyK_{Pfc`AnRn$l{Z&4W~^yrjq~P04i4Zpid?a^vu2|4`97BKQtU=SAMAT@hYg!+U8x>1a5l(k z(q}(LUBdg{{}lW_cLmPA9Z(({PJO5ffHP+-XyQbV#q3g zT;LT1k;*N|TQC}{og&qHOz}EtP5mBAdbb~5M<8m&Gg_RNN?QpvQB7oRPq!G@8=J>B z8VMwEe~f5`3lqY{!Q7CL**EZwt*40;t%UYAGeSk~8_lQ|*+?I{(Im zM6Iwe%GQCFR)G>y@jLRz)B3 zs#dSsj8h|R7nSjZdgw`zOOz|qmmt4pks!F_i1;7XUbJ0Cz(oD zbOuVKkK|Bnk6Kha)c7r81k~>!B zER=eoTxlpY+10w!Bfp91QnDKHMfQA@lk!iHeX7{aKbI{xi%wg_XiI~7R5UWI*rr`y z^!fLsU!velyQi>BR}f)mg6~7VNUHx5Cl^>S*vrI`Z<0SPWEZ9&R|YV50^yR%glz0C zj^_?F*>#p(F`47~xliY!W(4pzl_dS-b`I^$h8ZYJC?-nae8$odxYcTT=i}WQ7mjw# zgHPv--!4z-8`0NNptNVs+m^UC1z+DSj!*7;(4E`?{$HGn|LQS+j9Ru$Q0Mt>bebJj zeHFCu_jeXCcIaMY8*LR0P}}X-l=Xj{ULfjIKh&6cNM6Gwm|=tRs{v=kVXMiX@6%dx zLr+l#>wYSMIwgGbo6<<=B7&|ga_(B{^Vooo`bkYEnk}vvDj;g377=`jAcR>i8tPZAUT~)gNk>lRbaFvK3 zWD?)4LaDVe;q?lv3x8skl7JoX=$CQQ5$dnY{d+OuLt=6)#YesFT(Z!;@3W#F*j9AdR6S@TTvC6kCu--xuKO z%(~|<I@d0!?Ze^g<`QT~8HQx3YR;=bu2MQm^$aQ*E}bi|yq7K?87K)e zIOR1`-F(r=sugj$^Ap%yeFiYZEoM{$$&hb1?k`=>>__`<5w)(jrLeMxqql7GaA1fgXZW_ zjvEU2!V#?mf)!f|A`)i0DSej9*3%r)yLVD@COY^44&(BZIhx9)@DVSl!MaX4p8KKq z`fH{%V$bXHe%>x*f>;tBe-NyB%F~m+M<(j^NpfhL1uyMtySiU9cTqyg`L1$AnkFsq z6g_0PLKn?PReWp!6$rgew@b@KNcI;?fa7)yDh+sN-vlFNb@|nwtz2Jv3>5G&e8d+0 zMCAq-v8Y+|q9y(P|LB1B`C^m}GWACf5Ja1!6V(gpsp~!%B}ww!q3$(WywZyIjim!W z92<}wiR&_v5hXwOdws{{;_Mwm=RE(ty!y3{ zO7313dtvL9vSs+|`jZOodR1h8n+I1VWOEFnPHv&PBLo z|3{e!zMSRyk!UU&*;xx-4>t=TA8X}|NUNAA>}1A@a7(gcyTggq!|Xi6)&Ako=o5S2 zUXOQo-+_dk%60*Z#ar~Lti@-T#T;J`U16m?8+_%l+iLiq_V+N3ZgWJrYDjU*$!)(2 z<)_E6eG}h?MP0}LQpqIG<`=jx|K^w2m{etqeH&7+1yp3E+52@f>Ge&c|1`!taDLo< z?Ry`q?!;wX3uJcBLmiO8CU-{@6GP)Jkq67jz-m(rI6PuXlqD)Mo#Yn{ChH^3JoTrG zN{>9^GkZ2n9r(P zVNJskC(vRmgm0vq83Mq~zJPen*TUaG+-9HenJyK%_2mtJdY=h$hfPnamJ?W$iA~csmYBI6DmDi%%vn=XSWpGJ$OI5;gcSJwdPv?1Bd?m)mrlW zJ$qNanNc{sn=d;)ub>`RBE8-p5O^f22~?p-NblrO5jkR>OJA>yzx33)aJQXOhx}y% zAT(BNCoiCnwv#i}>79@jCv4(F$c?~cRDW&gndWeF8Ks&EB9o7GLV`kfQjS*W)b-~v zA{NyEK`xZS&V+yB)1>beuI_yWiYqJKXzKy?}t9UZbjUEgSe|1tF`&$~7NYRvxz?25tbyRbAe27dHI>nK= zhFZv@J7UY@v$A8IIK8!;uFzE#&-hkIK)?Oi_omncEP)ih?^`@WT&zmKMw?T?<#o4U z0E8)}taVbxW+J)BL2Gbl_xbFzAvr)iZ3VB&Fx9X_9~Bil+GY$LJS= zu(5Qq>zQjyj)t^d=5&>>cV)U2e>0aOktkZ67U0 zzaM+qMdXXE-m{SRi^~!+B(O4a@kAOIV1Yw%G8S3NUieQ{ z@`=%UqY^ok@;kyO+gKB^0@B;C*l44)wZBY-*1Qa;46fTrGvSyB$(NFN(RSU!j=aC& zs@kBXkRq>@lPtu5@(S57qR9%?Y;QP_pGFKTOPJJ*b$G#`g0o5Lpng(K7L6wc3jJYE zWA0}1YjK`yIlTiswHaa`F{!pLv7c&OHR$c#KB35I#*r8{HOF<>-pm@HUn(9)gb)Xs z#151Dy*9Tqou2zX*1y)bliHDNv75X?7#8Q}CX<=cF^MlxPJYRL z-p&K{r<)xG@b8_zZd9^98(9sDS-EqmV61Mjgy?!Lw?{N4=>gDN{UaJDAK70tZ2{p5 zlnkJmk6~^j0Q_QM{ws;j60EQ7!~I=!pN;eDmxlL9lSupqM)~O5%<^qqBZ}TU5>iqk z^EYF-dmkjr4syM-(x8IJ>>X(~z%px4wL7VW#aO*`n;mmvcfSd%z?`X+%B-wS231>v z(KrLy%EF1C)|2f*5E z35$#~9)VjnVylbnQv7s3OXUi`B}S%VL!(I9^)G_4>bz0 z;Zt4&XL26;b3-Cs&%rH#+VWH+|IFIZt6OJVs}Xt1WQ|SF3I)v=1O12#J3fXC^gMC0 zmpv6?TBJm5Yhi(*-f+Zo2%wfnq>>3@0h^QXZa=F2ow?#!WWk+S@+?L|NjKAE8<$^| zLkfCH^7vpF7x&a36OtmKKNt5TLcQHU-^bSKx7K|$sy1u`od2T$QkJv0L!HFkrb>?h=_O48fmctYHQl!rtQL>13-$W5(BbyiJ}MoRrs*1IF91XV7YsfBa{aVl2s zx57pJzH2CNk3p4**K0Gw{VaQP^R_d?eA^{SWqYY-VH)tjNX6$lns%fag+BmciwTD; z{eVqUm4Mgr3)34~grHgkOhHM1NIlmK)DJ;NPEBY=^bL5fof%EdN2GAc*tSba|5 zd%Da_mCezJ-OR#}B5eCDOYKr|h*?#syewp!p-?V6K2h15S)NpCOho4^p0%JDK5iEh zx5E`Egfd;y$Z2-YWKQw6dL`Uh+8l`BJ0L5q7U=v+RZic}Zm1hu}UNe`mO z=LptzGSdq5EKUf?`+YG^;{mRZ>MEv&WAW2kl}mE-NCVt17>JK7Wgxm{we_u2<8t}k zhE3`2yO=e>c54;}iy6mEDa~O){1F{NO2EspIQ_)1BZPC>#dQK?im_j?!XC+>TvujUx`O zrP>n6kf(ZfC;SY5DVK1NYw{0LRH(j&?q7GP^!vy~O?pd-yJBaRdj5PM2kMk9%57Lq z8{48QQJxx3-?aAE)fi{#%_G-5f|VtP;dT|evh}ysUl}sn2)6>_4#d`5)A05UZPLX1 z02wc&ab>YE*| z00wzTjq#4xcwee33dNraE!<1rf#}rrLC>Ne*Hz+OPOl;ShcE&{W3yKE(nV^p6KB=` zRMYM@Oo1fB_Fum@?w?s^yJuO8^%W-k>^AFHd7i`>XSn}I49ca z=gHReK08-Pi5@6RFtZAuUM|6SAmr9D@_T~cKyi9ccIdqOV(_+7_q`0!Q~}bIJ)p&& zW{@X%7USX^sK)VIDH$%xZw&JAFK)XGZ*H5^hV7)=SIL`3%j>^td5j9#)xL!K>sfi& z?cYH2ZOjQlvHR&piRSs_6lh@}Fy1D3bWyLXRg>DSOkm@f2&XQ#-T~XVg*Xa+Hzzm> z(gA&X*`GJTi-N~5ukS-Mho#wx7!m1QlKQ3LjFDcuw^Q0VZ0*zsb4BrpU(-i{iRjxZ z4wO`zbg%Kr_q%?k8tX1bhjnJ%E;{f`!2~Od6BuwtlWYrt-E_9gK&;Y|FbP3`P{}?M z?*aFreO^3N5_5SLsoPEJFHiDa>%XbLV$8Z*TJ?HoymC7LVZcg7WTsE-x}QtvjkteE z)emmI$xS`a4?+LBe*!!~@gDlt&DDD1dMDe?TRB)09>_d7wn* z>B%%mKS|5ch9vpQtJwXuLJjOM2Z}vQpox06_V}qN{w1Hf;cu>$RMe=8G?PF*FVnZ< zlGv3(nC%)xH(B;wJMqlj{ebX1v|JYhFlX+7n zbOM7NWBYsG`uS@hqD#v^z^BId-Y#pPr(%W@#^g(|t?qMl-|B&F%?8!`c&j(aaz0d{ zGRmQ$2!<3KgmgVe;%z+tR>_L5{q2jsae_f=KcLhRe{PNxD2qyj1QLQAg#pu3`yOas zD@2DAgAQrzZLUC)(Avl_%KNLYno*aAk#w*|2=AMjyPsokxx--ms^V$9V1_pjI3=1Y z#8SZ|$E_JsT`3M5xPrvD%0an8oi56j=9s90h3n8&sNajoTxSRe2822S-r=;hF%2DM ze8e+Kre}(!T_RZ$(U4rL|I%ZzEV~EFNNeM@N8t6~7*%c>!R!d8lVXBl zVJWn=l4EWf;4AzSakR{LSO?S*SHc4=Xh6ACdK~c8lySDg_f`pkFa*>HU#k^?Mk*9{ za)hMXOej0CYjHfP@rr~g=bzpZWd>K)z(RWS24$;J{WoGXRRr;k!7#8hjdn`O-U8}5 zo6@7Qu$vlPAwxkd&&~X!a5-rWMK9dA?DB9=jmEx5D3{D5oiT{fXLI@`D=Ux#grhuG zD^+!nEA~NcC)v7i@}e#|#_(t9O%4YG-k=tCW>)%JiM~ScnO!i>TNad-?#I#}>v((J!f2=gHwtwVc_EHLQC){JFeq7&ps>W$Ag5{AA z5%-n%)m`Uk9s6B0JIB6kaJrH3z;!O?qLioid$n=1i4lrqDOhOBjy_{)&~}-)5yfq~ zDifYQW_zyMSN{T4L=Pc#ME$CI0va)*OlfjUkgHml<^y$ie%U+w2tv?6msX5G3P$2| z#}ZAU`GSWiS?V@OD{M@e!KF@7;%AG)l_V?oK94RRx+$P-W{4>of3`BKkt$%=Cw)rH zdIYbw;3}9c=gIK<(6$4kYGoOTejN0P^d6Erc!4g3XYGDqwO^ERSQsi+-!=}GN!)X>w*ji{P1H>wZ{UH6 zX{an&UKRFSLBQ>AVwy2F&Q`XK_T!efPgBi&dArxpzkCbg)}*sMQ3d!ynYcWix z_|npYGkjM4H_VCfl1lDfoX0C$VNvA=MKO()qiafz$U5Uzd^r!`sw6gjbZ`=$i^_!5*E*mpvGd zg5%DuZ3wIxm4a&5e0xsqmgD* zYGLt_w3+$h0%!yaVq;0um3t$XEA$yK5Pw|pv!C9zSh@wc?lNT5)5EG6KfIzyluy3k zUv3{ba}*4FG$(pmR^nCj0s#eCNQ4~D zqf!&>E;YJNTW#siz8Z?A8ZLGxgC714l~`@O#>4Wd5=#=oawdMM<77yT(2db7k@4Wp zE%_OM$dm`us47x}?QgqM7)?HZM=$E)8)}u-P|8J5me;Vs-QgJLa01hjt`-GZf4WXYs8)21~d#k7r)eGs%T zoTM@mjdY}?b}Wv#jHbE*Kz`zf{tRkAt>Qc*%XqotdNs+gjp4Eba2n*ly|eRwCt$ys zh~nX>+L&#zD&EyQzPT7a-T4FSO1;b<&IKtjfrbAlppEY|+K)W=f(08x4LSchxPcZ; z&=#FTV)*|ywEy4&Mhf@OGx`^f5+SBVpmLE zI=62U*W>|>NHHU*R5SE{tCw-<<`9FC;fkJ1!6_8;hau))x%lmF$sfp7&pD(kD96H)c$SxIVbZT_~A3 zq=}nfv}2Lwr=d1$v7i?b+##9FLkXQFg^h;+o~eoUixID_yyG_rQYZ@APz*{54#pA0 zKa>pR#RSC`{ME;>CYUt;d;KKSEM)0R4s_P8I^L$4pB(rX9NTKK(#8fN{R*CJBK6fj zg$x42U%7H@19J?CBoA$x)b)Wp621#55p_mM7E4!7(moooafA6ECF-Zt^1qol{;FtA zId&y37DAx8Lw|yrU@Kx3nm!Z4dtT`gHi}vb$}j&kSBP&eGZ2SUb=dNsnEsur&WEKT z)j_QnLZ)5KOXZBcM8xs9Gw{W^CwZ=9$>@IzmDQpcEd(2W&^0pw4EE)QCw7R^@bLL; z`;jKBD-xYQQ2yd6a!O3cQ1R6Y?8$v6opn%hlyAYLdyZByBqP$wt`$?@3G?GqjI-WI zFr(&N%W-LTiVx^1Ho9CEPW9Z5AOL?Gi|-iXg08;`9bHFOX<@)jh53F(ufGo7X8;-H z0l)YvMmC@|H(*Hq)5~Lc+wpVu7B-~+C=Jcxyn+Svys26)m~PyI-+W15v=_={`XO5l zHTRU5<6Q%(;GtU{_)M$_Z@txr^r;MoqLKj!*lxsJ-o*}P>e`FX{w*=TWA)e>mkquq zR>aObeoL>tvlW0b{B)@!*Q#MRNDVE1iwYTY0jEF7nOpwz-CzpVB)}t%DHnxnklM&j z{5nE-m_I0{MuyF@X{w^ZXId;$ZzxX3PofMm&=br2L2ZV2EG&HUL-^jmzMYczD$O`Z z?tN3awcrjqUCwXxK5<+SI?>|?PR!D$t||ghxxLKVr-Z6Dw@24}CgX^Pq}kM_7!5qg z%Z*9SS}A#;Gxrf6Yzc??{fJaAfRlxa)hoqd(HC= z7O1`LmWceuZ0Io0(jzpSr>;rS>W?x`vcp>fVVJl1r4thU;2&FV>(dCwX&XK8S-%w< z9R&H4wYnRLSj%_btvh@R$#$Oo0`rfNf}|CtyFYe$!fDRQ{TCn#B2oP}ys`rt2n8pY zPr*hy=n`c2!FY)-Q6avwsaI|ld#8}B@=2^@?xy>AgA!eO(n7ietiyp6B?7 zzEjdImQZsbH{m6+$_l~!C_p?uVA-?$aetr2!i(>2oJ8*9svS$rL?LjaYe}8@!`*TQ zq#ig1wLj@;6j;-piPNt2DLzE!!*!-C3&;{_h7O&)YC#HO4{G<&N_9zob7B%}yt1NC zn%`Mm`%Yl-g?yhDxiV;rXh^>0f5my?!*A)t)TMO`3`(N+D9}1!YxNnLK)>@{8hpI5 zD`Qq^)g>Q(N6@}yx=%cj9sNvX@vp)=nn6ncK;7JEiZgd^P2j%)6VR%zgBZHuTvAw6 z>wG|E*}P>alWtK8B}_gAdu^xWy(?U(@8_IgZ{Dg_YfH_i| zcEU*ZONGosHYDv&Sy(wA_rub(!|ZW;oHgD9RV~OgubHzEy>?~?K2bePVezxt2%>;P z-?ra7<4n?x&FYaE?cEGI)-)$tD$5+muBu}U?sPHFKe+hV5?aCTUXV`J=9AHC=o-*Q zXUuT@-0>M!)m+!o+T(oHaeB!5lJUF^EcXIqSUNsvI7$4;|X#{w!e5pUJ_ zak1J+C*mxrK*L>l)}}XDmB5!T;U_ev;jCB9B2`6t)Wa`7=7pam>YPepUHy>E1}-i| zx=cTq2|P}#Ey5pcy4D8*2oic4dykynV%zxoUkQ#ZS%}$Wd?mL`_nI;G*TmEF^KJp z_vh{DE5H7`9RZOzAku0+?DJ`Ocwh zS7jB5f%YHF1(sTSKSuTtezZh?ey859@nDV}*wx8We3^(^>c;D^k{15Qf0gLJdBw#% zK4AOfnWngIHTLC=dT)#w{3rZBSpE+*HU0+;Htp>`-fzW8*#W`aU5e&a;9&m+kS-Mo literal 0 HcmV?d00001 diff --git a/BTPanel/static/ace/icons/mfixx.woff2 b/BTPanel/static/ace/icons/mfixx.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e77b4661395c17a3684f4c69ced6e457e36ccd17 GIT binary patch literal 25824 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

vwTbrr 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"},{token:["punctuation.definition.tag.apacheconf","entity.tag.apacheconf","punctuation.definition.tag.apacheconf"],regex:"()"},{token:["keyword.alias.apacheconf","text","string.regexp.apacheconf","text","string.replacement.apacheconf","text"],regex:"(Rewrite(?:Rule|Cond))(\\s+)(.+?)(\\s+)(.+?)($|\\s)"},{token:["keyword.alias.apacheconf","text","entity.status.apacheconf","text","string.regexp.apacheconf","text","string.path.apacheconf","text"],regex:"(RedirectMatch)(?:(\\s+)(\\d\\d\\d|permanent|temp|seeother|gone))?(\\s+)(.+?)(\\s+)(?:(.+?)($|\\s))?"},{token:["keyword.alias.apacheconf","text","entity.status.apacheconf","text","string.path.apacheconf","text","string.path.apacheconf","text"],regex:"(Redirect)(?:(\\s+)(\\d\\d\\d|permanent|temp|seeother|gone))?(\\s+)(.+?)(\\s+)(?:(.+?)($|\\s))?"},{token:["keyword.alias.apacheconf","text","string.regexp.apacheconf","text","string.path.apacheconf","text"],regex:"(ScriptAliasMatch|AliasMatch)(\\s+)(.+?)(\\s+)(?:(.+?)(\\s))?"},{token:["keyword.alias.apacheconf","text","string.path.apacheconf","text","string.path.apacheconf","text"],regex:"(RedirectPermanent|RedirectTemp|ScriptAlias|Alias)(\\s+)(.+?)(\\s+)(?:(.+?)($|\\s))?"},{token:"keyword.core.apacheconf",regex:"\\b(?:AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|ForceType|HostnameLookups|IdentityCheck|Include|KeepAlive|KeepAliveTimeout|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|LogLevel|MaxKeepAliveRequests|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|TimeOut|TraceEnable|UseCanonicalName)\\b"},{token:"keyword.mpm.apacheconf",regex:"\\b(?:AcceptMutex|AssignUserID|BS2000Account|ChildPerUserID|CoreDumpDirectory|EnableExceptionHook|Group|Listen|ListenBacklog|LockFile|MaxClients|MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MinSpareServers|MinSpareThreads|NumServers|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User|Win32DisableAcceptEx)\\b"},{token:"keyword.access.apacheconf",regex:"\\b(?:Allow|Deny|Order)\\b"},{token:"keyword.actions.apacheconf",regex:"\\b(?:Action|Script)\\b"},{token:"keyword.alias.apacheconf",regex:"\\b(?:Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)\\b"},{token:"keyword.auth.apacheconf",regex:"\\b(?:AuthAuthoritative|AuthGroupFile|AuthUserFile)\\b"},{token:"keyword.auth_anon.apacheconf",regex:"\\b(?:Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)\\b"},{token:"keyword.auth_dbm.apacheconf",regex:"\\b(?:AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile)\\b"},{token:"keyword.auth_digest.apacheconf",regex:"\\b(?:AuthDigestAlgorithm|AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize)\\b"},{token:"keyword.auth_ldap.apacheconf",regex:"\\b(?:AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl)\\b"},{token:"keyword.autoindex.apacheconf",regex:"\\b(?:AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexIgnore|IndexOptions|IndexOrderDefault|ReadmeName)\\b"},{token:"keyword.cache.apacheconf",regex:"\\b(?:CacheDefaultExpire|CacheDisable|CacheEnable|CacheForceCompletion|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire)\\b"},{token:"keyword.cern_meta.apacheconf",regex:"\\b(?:MetaDir|MetaFiles|MetaSuffix)\\b"},{token:"keyword.cgi.apacheconf",regex:"\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength)\\b"},{token:"keyword.cgid.apacheconf",regex:"\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock)\\b"},{token:"keyword.charset_lite.apacheconf",regex:"\\b(?:CharsetDefault|CharsetOptions|CharsetSourceEnc)\\b"},{token:"keyword.dav.apacheconf",regex:"\\b(?:Dav|DavDepthInfinity|DavMinTimeout|DavLockDB)\\b"},{token:"keyword.deflate.apacheconf",regex:"\\b(?:DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)\\b"},{token:"keyword.dir.apacheconf",regex:"\\b(?:DirectoryIndex|DirectorySlash)\\b"},{token:"keyword.disk_cache.apacheconf",regex:"\\b(?:CacheDirLength|CacheDirLevels|CacheExpiryCheck|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheMaxFileSize|CacheMinFileSize|CacheRoot|CacheSize|CacheTimeMargin)\\b"},{token:"keyword.dumpio.apacheconf",regex:"\\b(?:DumpIOInput|DumpIOOutput)\\b"},{token:"keyword.env.apacheconf",regex:"\\b(?:PassEnv|SetEnv|UnsetEnv)\\b"},{token:"keyword.expires.apacheconf",regex:"\\b(?:ExpiresActive|ExpiresByType|ExpiresDefault)\\b"},{token:"keyword.ext_filter.apacheconf",regex:"\\b(?:ExtFilterDefine|ExtFilterOptions)\\b"},{token:"keyword.file_cache.apacheconf",regex:"\\b(?:CacheFile|MMapFile)\\b"},{token:"keyword.headers.apacheconf",regex:"\\b(?:Header|RequestHeader)\\b"},{token:"keyword.imap.apacheconf",regex:"\\b(?:ImapBase|ImapDefault|ImapMenu)\\b"},{token:"keyword.include.apacheconf",regex:"\\b(?:SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)\\b"},{token:"keyword.isapi.apacheconf",regex:"\\b(?:ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)\\b"},{token:"keyword.ldap.apacheconf",regex:"\\b(?:LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedCA|LDAPTrustedCAType)\\b"},{token:"keyword.log.apacheconf",regex:"\\b(?:BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog|ForensicLog)\\b"},{token:"keyword.mem_cache.apacheconf",regex:"\\b(?:MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)\\b"},{token:"keyword.mime.apacheconf",regex:"\\b(?:AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)\\b"},{token:"keyword.misc.apacheconf",regex:"\\b(?:ProtocolEcho|Example|AddModuleInfo|MimeMagicFile|CheckSpelling|ExtendedStatus|SuexecUserGroup|UserDir)\\b"},{token:"keyword.negotiation.apacheconf",regex:"\\b(?:CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)\\b"},{token:"keyword.nw_ssl.apacheconf",regex:"\\b(?:NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)\\b"},{token:"keyword.proxy.apacheconf",regex:"\\b(?:AllowCONNECT|NoProxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassReverse|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia)\\b"},{token:"keyword.rewrite.apacheconf",regex:"\\b(?:RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)\\b"},{token:"keyword.setenvif.apacheconf",regex:"\\b(?:BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)\\b"},{token:"keyword.so.apacheconf",regex:"\\b(?:LoadFile|LoadModule)\\b"},{token:"keyword.ssl.apacheconf",regex:"\\b(?:SSLCACertificateFile|SSLCACertificatePath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth)\\b"},{token:"keyword.usertrack.apacheconf",regex:"\\b(?:CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)\\b"},{token:"keyword.vhost_alias.apacheconf",regex:"\\b(?:VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)\\b"},{token:["keyword.php.apacheconf","text","entity.property.apacheconf","text","string.value.apacheconf","text"],regex:"\\b(php_value|php_flag)\\b(?:(\\s+)(.+?)(?:(\\s+)(.+?))?)?(\\s)"},{token:["punctuation.variable.apacheconf","variable.env.apacheconf","variable.misc.apacheconf","punctuation.variable.apacheconf"],regex:"(%\\{)(?:(HTTP_USER_AGENT|HTTP_REFERER|HTTP_COOKIE|HTTP_FORWARDED|HTTP_HOST|HTTP_PROXY_CONNECTION|HTTP_ACCEPT|REMOTE_ADDR|REMOTE_HOST|REMOTE_PORT|REMOTE_USER|REMOTE_IDENT|REQUEST_METHOD|SCRIPT_FILENAME|PATH_INFO|QUERY_STRING|AUTH_TYPE|DOCUMENT_ROOT|SERVER_ADMIN|SERVER_NAME|SERVER_ADDR|SERVER_PORT|SERVER_PROTOCOL|SERVER_SOFTWARE|TIME_YEAR|TIME_MON|TIME_DAY|TIME_HOUR|TIME_MIN|TIME_SEC|TIME_WDAY|TIME|API_VERSION|THE_REQUEST|REQUEST_URI|REQUEST_FILENAME|IS_SUBREQ|HTTPS)|(.*?))(\\})"},{token:["entity.mime-type.apacheconf","text"],regex:"\\b((?:text|image|application|video|audio)/.+?)(\\s)"},{token:"entity.helper.apacheconf",regex:"\\b(?:from|unset|set|on|off)\\b",caseInsensitive:!0},{token:"constant.integer.apacheconf",regex:"\\b\\d+\\b"},{token:["text","punctuation.definition.flag.apacheconf","string.flag.apacheconf","punctuation.definition.flag.apacheconf","text"],regex:"(\\s)(\\[)(.*?)(\\])(\\s)"}]},this.normalizeRules()};s.metaData={fileTypes:["conf","CONF","htaccess","HTACCESS","htgroups","HTGROUPS","htpasswd","HTPASSWD",".htaccess",".HTACCESS",".htgroups",".HTGROUPS",".htpasswd",".HTPASSWD"],name:"Apache Conf",scopeName:"source.apacheconf"},r.inherits(s,i),t.ApacheConfHighlightRules=s}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/apache_conf",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/apache_conf_highlight_rules","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./apache_conf_highlight_rules").ApacheConfHighlightRules,o=e("./folding/cstyle").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart="#",this.$id="ace/mode/apache_conf"}.call(u.prototype),t.Mode=u}); (function() { + window.require(["ace/mode/apache_conf"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-batchfile.js b/BTPanel/static/ace/mode-batchfile.js new file mode 100644 index 00000000..0550234a --- /dev/null +++ b/BTPanel/static/ace/mode-batchfile.js @@ -0,0 +1,8 @@ +define("ace/mode/batchfile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"keyword.command.dosbatch",regex:"\\b(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\\b",caseInsensitive:!0},{token:"keyword.control.statement.dosbatch",regex:"\\b(?:goto|call|exit)\\b",caseInsensitive:!0},{token:"keyword.control.conditional.if.dosbatch",regex:"\\bif\\s+not\\s+(?:exist|defined|errorlevel|cmdextversion)\\b",caseInsensitive:!0},{token:"keyword.control.conditional.dosbatch",regex:"\\b(?:if|else)\\b",caseInsensitive:!0},{token:"keyword.control.repeat.dosbatch",regex:"\\bfor\\b",caseInsensitive:!0},{token:"keyword.operator.dosbatch",regex:"\\b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\\b"},{token:["doc.comment","comment"],regex:"(?:^|\\b)(rem)($|\\s.*$)",caseInsensitive:!0},{token:"comment.line.colons.dosbatch",regex:"::.*$"},{include:"variable"},{token:"punctuation.definition.string.begin.shell",regex:'"',push:[{token:"punctuation.definition.string.end.shell",regex:'"',next:"pop"},{include:"variable"},{defaultToken:"string.quoted.double.dosbatch"}]},{token:"keyword.operator.pipe.dosbatch",regex:"[|]"},{token:"keyword.operator.redirect.shell",regex:"&>|\\d*>&\\d*|\\d*(?:>>|>|<)|\\d*<&|\\d*<>"}],variable:[{token:"constant.numeric",regex:"%%\\w+|%[*\\d]|%\\w+%"},{token:"constant.numeric",regex:"%~\\d+"},{token:["markup.list","constant.other","markup.list"],regex:"(%)(\\w+)(%?)"}]},this.normalizeRules()};s.metaData={name:"Batch File",scopeName:"source.dosbatch",fileTypes:["bat"]},r.inherits(s,i),t.BatchFileHighlightRules=s}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/batchfile",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/batchfile_highlight_rules","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./batchfile_highlight_rules").BatchFileHighlightRules,o=e("./folding/cstyle").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart="::",this.blockComment="",this.$id="ace/mode/batchfile"}.call(u.prototype),t.Mode=u}); (function() { + window.require(["ace/mode/batchfile"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-c_cpp.js b/BTPanel/static/ace/mode-c_cpp.js new file mode 100644 index 00000000..eb224312 --- /dev/null +++ b/BTPanel/static/ace/mode-c_cpp.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=t.cFunctions="\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\b",u=function(){var e="break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using",t="asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t",n="const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local",r="and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace",s="NULL|true|false|TRUE|FALSE|nullptr",u=this.$keywords=this.createKeywordMapper({"keyword.control":e,"storage.type":t,"storage.modifier":n,"keyword.operator":r,"variable.language":"this","constant.language":s},"identifier"),a="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b",f=/\\(?:['"?\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}U[a-fA-F\d]{8}|.)/.source,l="%"+/(\d+\$)?/.source+/[#0\- +']*/.source+/[,;:_]?/.source+/((-?\d+)|\*(-?\d+\$)?)?/.source+/(\.((-?\d+)|\*(-?\d+\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\[[^"\]]+\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:"comment",regex:"//$",next:"start"},{token:"comment",regex:"//",next:"singleLineComment"},i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:"'(?:"+f+"|.)?'"},{token:"string.start",regex:'"',stateName:"qqstring",next:[{token:"string",regex:/\\\s*$/,next:"qqstring"},{token:"constant.language.escape",regex:f},{token:"constant.language.escape",regex:l},{token:"string.end",regex:'"|$',next:"start"},{defaultToken:"string"}]},{token:"string.start",regex:'R"\\(',stateName:"rawString",next:[{token:"string.end",regex:'\\)"',next:"start"},{defaultToken:"string"}]},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:"keyword",regex:"#\\s*(?:include|import|pragma|line|define|undef)\\b",next:"directive"},{token:"keyword",regex:"#\\s*(?:endif|if|ifdef|else|elif|ifndef)\\b"},{token:"support.function.C99.c",regex:o},{token:u,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*"},{token:"keyword.operator",regex:/--|\+\+|<<=|>>=|>>>=|<>|&&|\|\||\?:|[*%\/+\-&\^|~!<>=]=?/},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],singleLineComment:[{token:"comment",regex:/\\$/,next:"singleLineComment"},{token:"comment",regex:/$/,next:"start"},{defaultToken:"comment"}],directive:[{token:"constant.other.multiline",regex:/\\/},{token:"constant.other.multiline",regex:/.*\\/},{token:"constant.other",regex:"\\s*<.+?>",next:"start"},{token:"constant.other",regex:'\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]',next:"start"},{token:"constant.other",regex:"\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']",next:"start"},{token:"constant.other",regex:/[^\\\/]+/,next:"start"}]},this.embedRules(i,"doc-",[i.getEndRule("start")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./c_cpp_highlight_rules").c_cppHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../range").Range,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var u=t.match(/^.*[\{\(\[]\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id="ace/mode/c_cpp"}.call(l.prototype),t.Mode=l}); (function() { + window.require(["ace/mode/c_cpp"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-csharp.js b/BTPanel/static/ace/mode-csharp.js new file mode 100644 index 00000000..e0ad5685 --- /dev/null +++ b/BTPanel/static/ace/mode-csharp.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/csharp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"this",keyword:"abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic","constant.language":"null|true|false"},"identifier");this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:/'(?:.|\\(:?u[\da-fA-F]+|x[\da-fA-F]+|[tbrf'"n]))?'/},{token:"string",start:'"',end:'"|$',next:[{token:"constant.language.escape",regex:/\\(:?u[\da-fA-F]+|x[\da-fA-F]+|[tbrf'"n])/},{token:"invalid",regex:/\\./}]},{token:"string",start:'@"',end:'"',next:[{token:"constant.language.escape",regex:'""'}]},{token:"string",start:/\$"/,end:'"|$',next:[{token:"constant.language.escape",regex:/\\(:?$)|{{/},{token:"constant.language.escape",regex:/\\(:?u[\da-fA-F]+|x[\da-fA-F]+|[tbrf'"n])/},{token:"invalid",regex:/\\./}]},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:e,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"keyword",regex:"^\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}]},this.embedRules(i,"doc-",[i.getEndRule("start")]),this.normalizeRules()};r.inherits(o,s),t.CSharpHighlightRules=o}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/folding/csharp",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./cstyle").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.usingRe=/^\s*using \S/,this.getFoldWidgetRangeBase=this.getFoldWidgetRange,this.getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=this.getFoldWidgetBase(e,t,n);if(!r){var i=e.getLine(n);if(/^\s*#region\b/.test(i))return"start";var s=this.usingRe;if(s.test(i)){var o=e.getLine(n-1),u=e.getLine(n+1);if(!s.test(o)&&s.test(u))return"start"}}return r},this.getFoldWidgetRange=function(e,t,n){var r=this.getFoldWidgetRangeBase(e,t,n);if(r)return r;var i=e.getLine(n);if(this.usingRe.test(i))return this.getUsingStatementBlock(e,i,n);if(/^\s*#region\b/.test(i))return this.getRegionBlock(e,i,n)},this.getUsingStatementBlock=function(e,t,n){var r=t.match(this.usingRe)[0].length-1,s=e.getLength(),o=n,u=n;while(++no){var a=e.getLine(u).length;return new i(o,r,u,a)}},this.getRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/csharp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/csharp_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/csharp"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./csharp_highlight_rules").CSharpHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./behaviour/cstyle").CstyleBehaviour,a=e("./folding/csharp").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[]\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){return null},this.$id="ace/mode/csharp"}.call(f.prototype),t.Mode=f}); (function() { + window.require(["ace/mode/csharp"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-css.js b/BTPanel/static/ace/mode-css.js new file mode 100644 index 00000000..adac04cc --- /dev/null +++ b/BTPanel/static/ace/mode-css.js @@ -0,0 +1,8 @@ +define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom",f=t.supportConstantColor="aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen",l=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"paren.rparen",regex:"\\}"},{token:"string",regex:"@(?!viewport)",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"keyword",regex:"%"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant.numeric",regex:c},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"start"},{token:"paren.rparen",regex:"\\}",next:"start"},{token:"string",regex:";",next:"start"},{token:"keyword",regex:"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)"}],comments:[{token:"comment",regex:"\\/\\*",push:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}]}],ruleset:[{regex:"-(webkit|ms|moz|o)-",token:"text"},{token:"punctuation.operator",regex:"[:;]"},{token:"paren.rparen",regex:"\\}",next:"start"},{include:["strings","url","comments"]},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{include:"url"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}],url:[{token:"support.function",regex:"(?:url(:?-prefix)?|domain|regexp)\\(",push:[{token:"support.function",regex:"\\)",next:"pop"},{defaultToken:"string"}]}],strings:[{token:"string.start",regex:"'",push:[{token:"string.end",regex:"'|$",next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]},{token:"string.start",regex:'"',push:[{token:"string.end",regex:'"|$',next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]}],escapes:[{token:"constant.language.escape",regex:/\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/css_completions",["require","exports","module"],function(e,t,n){"use strict";var r={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,"double":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{"default":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},"float":{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,"static":1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e){if(typeof e[t]!="string")continue;var n=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e==="ruleset"||t.$mode.$id=="ace/mode/scss"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+": $0;",meta:"property",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\w\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]=="object"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:"property value",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(/^(\s+[^;]|\s*$)/.test(f.substring(s.column)))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}}),this.add("!important","insertion",function(e,t,n,r,i){if(i==="!"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\s*(;|}|$)/.test(o.substring(s.column)))return{text:"!important",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./css_completions").CssCompletions,f=e("./behaviour/css").CssBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(c.prototype),t.Mode=c}); (function() { + window.require(["ace/mode/css"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-django.js b/BTPanel/static/ace/mode-django.js new file mode 100644 index 00000000..75754bec --- /dev/null +++ b/BTPanel/static/ace/mode-django.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/,next:"start"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$quotes={'"':'"',"'":"'","`":"`"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(l.prototype),t.Mode=l}),define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom",f=t.supportConstantColor="aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen",l=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"paren.rparen",regex:"\\}"},{token:"string",regex:"@(?!viewport)",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"keyword",regex:"%"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant.numeric",regex:c},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"start"},{token:"paren.rparen",regex:"\\}",next:"start"},{token:"string",regex:";",next:"start"},{token:"keyword",regex:"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)"}],comments:[{token:"comment",regex:"\\/\\*",push:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}]}],ruleset:[{regex:"-(webkit|ms|moz|o)-",token:"text"},{token:"punctuation.operator",regex:"[:;]"},{token:"paren.rparen",regex:"\\}",next:"start"},{include:["strings","url","comments"]},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{include:"url"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}],url:[{token:"support.function",regex:"(?:url(:?-prefix)?|domain|regexp)\\(",push:[{token:"support.function",regex:"\\)",next:"pop"},{defaultToken:"string"}]}],strings:[{token:"string.start",regex:"'",push:[{token:"string.end",regex:"'|$",next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]},{token:"string.start",regex:'"',push:[{token:"string.end",regex:'"|$',next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]}],escapes:[{token:"constant.language.escape",regex:/\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define("ace/mode/css_completions",["require","exports","module"],function(e,t,n){"use strict";var r={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,"double":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{"default":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},"float":{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,"static":1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e){if(typeof e[t]!="string")continue;var n=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e==="ruleset"||t.$mode.$id=="ace/mode/scss"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+": $0;",meta:"property",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\w\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]=="object"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:"property value",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(/^(\s+[^;]|\s*$)/.test(f.substring(s.column)))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}}),this.add("!important","insertion",function(e,t,n,r,i){if(i==="!"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\s*(;|}|$)/.test(o.substring(s.column)))return{text:"!important",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./css_completions").CssCompletions,f=e("./behaviour/css").CssBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(c.prototype),t.Mode=c}),define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){var t="[_:a-zA-Z\u00c0-\uffff][-_:.a-zA-Z0-9\u00c0-\uffff]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.start.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.end.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_highlight_rules").XmlHighlightRules,a=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),f=function(){u.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:.]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var n=a[t];return["meta.tag.punctuation."+(e=="<"?"":"end-")+"tag-open.xml","meta.tag"+(n?"."+n:"")+".tag-name.xml"]},regex:"(",next:"start"}]}),this.embedTagRules(s,"css-","style"),this.embedTagRules((new o({jsx:!1})).getRules(),"js-","script"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),a=function(){this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==""&&a!=="'"&&a!='"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,"attribute-value")||u(p,"string")))return{text:"",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,"tag-whitespace")||u(p,"whitespace"))p=h.stepBackward();var d=!c||c.match(/\s/);if(u(p,"attribute-equals")&&(d||c==">")||u(p,"decl-attribute-equals")&&(d||c=="?"))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,"tag-name")||u(f,"tag-whitespace")||u(f,"attribute-name")||u(f,"attribute-equals")||u(f,"attribute-value")))return;if(u(f,"reference.attribute-value"))return;if(u(f,"attribute-value")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,"tag-name")){f=a.stepBackward();if(f.value=="<"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),"end-tag-open"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf("tag-close")!==-1){if(f.value=="/>")return;while(f&&f.type.indexOf("tag-name")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value==="-1}var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t=="markbeginend"?"end":"":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?"":this._findEndTagInLine(e,n,r.tagName,r.end.column)?"":"start":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/";break}}return r}if(l(s,"tag-close"))return r.selfClosing=s.value=="/>",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,"tag-open"))return n.closing=l(t,"end-tag-open"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,"tag-name")?n.tagName=t.value:l(t,"tag-close")&&(n.selfClosing=t.value=="/>",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"tag-name"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"attribute-name"))i=n.stepBackward();if(i)return i.value}var r=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"],s=["onabort","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextmenu","oncuechange","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onload","onloadeddata","onloadedmetadata","onloadstart","onmousedown","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onpause","onplay","onplaying","onprogress","onratechange","onreset","onscroll","onseeked","onseeking","onselect","onshow","onstalled","onsubmit","onsuspend","ontimeupdate","onvolumechange","onwaiting"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{"accept-charset":1,action:1,autocomplete:1,enctype:{"multipart/form-data":1,"application/x-www-form-urlencoded":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{"allow-same-origin":1,"allow-top-navigation":1,"allow-forms":1,"allow-scripts":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,"datetime-local":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{"application/x-www-form-urlencoded":1,"multipart/form-data":1,"text/plain":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,"for":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{"text/css":1,"image/png":1,"image/jpeg":1,"image/gif":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{"http-equiv":{"content-type":1},name:{description:1,keywords:1},content:{"text/html; charset=UTF-8":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{"for":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{"text/javascript":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,"default":1},section:{},summary:{},u:{},ul:{},"var":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,"tag-name")||f(i,"tag-open")||f(i,"end-tag-open"))return this.getTagCompletions(e,t,n,r);if(f(i,"tag-whitespace")||f(i,"attribute-name"))return this.getAttributeCompletions(e,t,n,r);if(f(i,"attribute-value"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:"tag",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]=="object"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:"attribute value",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=["Aacute;","aacute;","Acirc;","acirc;","acute;","AElig;","aelig;","Agrave;","agrave;","alefsym;","Alpha;","alpha;","amp;","and;","ang;","Aring;","aring;","asymp;","Atilde;","atilde;","Auml;","auml;","bdquo;","Beta;","beta;","brvbar;","bull;","cap;","Ccedil;","ccedil;","cedil;","cent;","Chi;","chi;","circ;","clubs;","cong;","copy;","crarr;","cup;","curren;","Dagger;","dagger;","dArr;","darr;","deg;","Delta;","delta;","diams;","divide;","Eacute;","eacute;","Ecirc;","ecirc;","Egrave;","egrave;","empty;","emsp;","ensp;","Epsilon;","epsilon;","equiv;","Eta;","eta;","ETH;","eth;","Euml;","euml;","euro;","exist;","fnof;","forall;","frac12;","frac14;","frac34;","frasl;","Gamma;","gamma;","ge;","gt;","hArr;","harr;","hearts;","hellip;","Iacute;","iacute;","Icirc;","icirc;","iexcl;","Igrave;","igrave;","image;","infin;","int;","Iota;","iota;","iquest;","isin;","Iuml;","iuml;","Kappa;","kappa;","Lambda;","lambda;","lang;","laquo;","lArr;","larr;","lceil;","ldquo;","le;","lfloor;","lowast;","loz;","lrm;","lsaquo;","lsquo;","lt;","macr;","mdash;","micro;","middot;","minus;","Mu;","mu;","nabla;","nbsp;","ndash;","ne;","ni;","not;","notin;","nsub;","Ntilde;","ntilde;","Nu;","nu;","Oacute;","oacute;","Ocirc;","ocirc;","OElig;","oelig;","Ograve;","ograve;","oline;","Omega;","omega;","Omicron;","omicron;","oplus;","or;","ordf;","ordm;","Oslash;","oslash;","Otilde;","otilde;","otimes;","Ouml;","ouml;","para;","part;","permil;","perp;","Phi;","phi;","Pi;","pi;","piv;","plusmn;","pound;","Prime;","prime;","prod;","prop;","Psi;","psi;","quot;","radic;","rang;","raquo;","rArr;","rarr;","rceil;","rdquo;","real;","reg;","rfloor;","Rho;","rho;","rlm;","rsaquo;","rsquo;","sbquo;","Scaron;","scaron;","sdot;","sect;","shy;","Sigma;","sigma;","sigmaf;","sim;","spades;","sub;","sube;","sum;","sup;","sup1;","sup2;","sup3;","supe;","szlig;","Tau;","tau;","there4;","Theta;","theta;","thetasym;","thinsp;","THORN;","thorn;","tilde;","times;","trade;","Uacute;","uacute;","uArr;","uarr;","Ucirc;","ucirc;","Ugrave;","ugrave;","uml;","upsih;","Upsilon;","upsilon;","Uuml;","uuml;","weierp;","Xi;","xi;","Yacute;","yacute;","yen;","Yuml;","yuml;","Zeta;","zeta;","zwj;","zwnj;"];return i.map(function(e){return{caption:e,snippet:e,meta:"html entity",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text").Mode,o=e("./javascript").Mode,u=e("./css").Mode,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/xml").XmlBehaviour,l=e("./folding/html").FoldMode,c=e("./html_completions").HtmlCompletions,h=e("../worker/worker_client").WorkerClient,p=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],d=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({"js-":o,"css-":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:""},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/html"}.call(v.prototype),t.Mode=v}),define("ace/mode/django",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/html_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./html").Mode,s=e("./html_highlight_rules").HtmlHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=function(){this.$rules={start:[{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"},{token:"constant",regex:"[0-9]+"},{token:"variable",regex:"[-_a-zA-Z0-9:]+"}],tag:[{token:"entity.name.function",regex:"[a-zA-Z][_a-zA-Z0-9]*",next:"start"}]}};r.inherits(u,o);var a=function(){this.$rules=(new s).getRules();for(var e in this.$rules)this.$rules[e].unshift({token:"comment.line",regex:"\\{#.*?#\\}"},{token:"comment.block",regex:"\\{\\%\\s*comment\\s*\\%\\}",merge:!0,next:"django-comment"},{token:"constant.language",regex:"\\{\\{",next:"django-start"},{token:"constant.language",regex:"\\{\\%",next:"django-tag"}),this.embedRules(u,"django-",[{token:"comment.block",regex:"\\{\\%\\s*endcomment\\s*\\%\\}",merge:!0,next:"start"},{token:"constant.language",regex:"\\%\\}",next:"start"},{token:"constant.language",regex:"\\}\\}",next:"start"}])};r.inherits(a,s);var f=function(){i.call(this),this.HighlightRules=a};r.inherits(f,i),function(){this.$id="ace/mode/django"}.call(f.prototype),t.Mode=f}); (function() { + window.require(["ace/mode/django"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-dockerfile.js b/BTPanel/static/ace/mode-dockerfile.js new file mode 100644 index 00000000..f485aeab --- /dev/null +++ b/BTPanel/static/ace/mode-dockerfile.js @@ -0,0 +1,8 @@ +define("ace/mode/sh_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=t.reservedKeywords="!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly",o=t.languageConstructs="[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait",u=function(){var e=this.createKeywordMapper({keyword:s,"support.function.builtin":o,"invalid.deprecated":"debugger"},"identifier"),t="(?:(?:[1-9]\\d*)|(?:0))",n="(?:\\.\\d+)",r="(?:\\d+)",i="(?:(?:"+r+"?"+n+")|(?:"+r+"\\.))",u="(?:(?:"+i+"|"+r+")"+")",a="(?:"+u+"|"+i+")",f="(?:&"+r+")",l="[a-zA-Z_][a-zA-Z0-9_]*",c="(?:"+l+"(?==))",h="(?:\\$(?:SHLVL|\\$|\\!|\\?))",p="(?:"+l+"\\s*\\(\\))";this.$rules={start:[{token:"constant",regex:/\\./},{token:["text","comment"],regex:/(^|\s)(#.*)$/},{token:"string.start",regex:'"',push:[{token:"constant.language.escape",regex:/\\(?:[$`"\\]|$)/},{include:"variables"},{token:"keyword.operator",regex:/`/},{token:"string.end",regex:'"',next:"pop"},{defaultToken:"string"}]},{token:"string",regex:"\\$'",push:[{token:"constant.language.escape",regex:/\\(?:[abeEfnrtv\\'"]|x[a-fA-F\d]{1,2}|u[a-fA-F\d]{4}([a-fA-F\d]{4})?|c.|\d{1,3})/},{token:"string",regex:"'",next:"pop"},{defaultToken:"string"}]},{regex:"<<<",token:"keyword.operator"},{stateName:"heredoc",regex:"(<<-?)(\\s*)(['\"`]?)([\\w\\-]+)(['\"`]?)",onMatch:function(e,t,n){var r=e[2]=="-"?"indentedHeredoc":"heredoc",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:"constant",value:i[1]},{type:"text",value:i[2]},{type:"string",value:i[3]},{type:"support.class",value:i[4]},{type:"string",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||"start","support.class"):(this.next="","string")},regex:".*$",next:"start"}],indentedHeredoc:[{token:"string",regex:"^ +"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||"start","support.class"):(this.next="","string")},regex:".*$",next:"start"}]}},{regex:"$",token:"empty",next:function(e,t){return t[0]==="heredoc"||t[0]==="indentedHeredoc"?t[0]:e}},{token:["keyword","text","text","text","variable"],regex:/(declare|local|readonly)(\s+)(?:(-[fixar]+)(\s+))?([a-zA-Z_][a-zA-Z0-9_]*\b)/},{token:"variable.language",regex:h},{token:"variable",regex:c},{include:"variables"},{token:"support.function",regex:p},{token:"support.function",regex:f},{token:"string",start:"'",end:"'"},{token:"constant.numeric",regex:a},{token:"constant.numeric",regex:t+"\\b"},{token:e,regex:"[a-zA-Z_][a-zA-Z0-9_]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!=|[%&|`]"},{token:"punctuation.operator",regex:";"},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]]"},{token:"paren.rparen",regex:"[\\)\\}]",next:"pop"}],variables:[{token:"variable",regex:/(\$)(\w+)/},{token:["variable","paren.lparen"],regex:/(\$)(\()/,push:"start"},{token:["variable","paren.lparen","keyword.operator","variable","keyword.operator"],regex:/(\$)(\{)([#!]?)(\w+|[*@#?\-$!0_])(:[?+\-=]?|##?|%%?|,,?\/|\^\^?)?/,push:"start"},{token:"variable",regex:/\$[*@#?\-$!0_]/},{token:["variable","paren.lparen"],regex:/(\$)(\{)/,push:"start"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/sh",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sh_highlight_rules","ace/range","ace/mode/folding/cstyle","ace/mode/behaviour/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./sh_highlight_rules").ShHighlightRules,o=e("../range").Range,u=e("./folding/cstyle").FoldMode,a=e("./behaviour/cstyle").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart="#",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[:]\s*$/);o&&(r+=n)}return r};var e={pass:1,"return":1,raise:1,"break":1,"continue":1};this.checkOutdent=function(t,n,r){if(r!=="\r\n"&&r!=="\r"&&r!=="\n")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type=="comment"||s.type=="text"&&s.value.match(/^\s+$/)));return s?s.type=="keyword"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id="ace/mode/sh"}.call(f.prototype),t.Mode=f}),define("ace/mode/dockerfile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/sh_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./sh_highlight_rules").ShHighlightRules,s=function(){i.call(this);var e=this.$rules.start;for(var t=0;t=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^="},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment.end",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],bqstring:[{token:"string",regex:"`",next:"start"},{defaultToken:"string"}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.GolangHighlightRules=o}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/golang",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/golang_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("./golang_highlight_rules").GolangHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./behaviour/cstyle").CstyleBehaviour,a=e("./folding/cstyle").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new a,this.$behaviour=new u};r.inherits(f,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var u=t.match(/^.*[\{\(\[]\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id="ace/mode/golang"}.call(f.prototype),t.Mode=f}); (function() { + window.require(["ace/mode/golang"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-html.js b/BTPanel/static/ace/mode-html.js new file mode 100644 index 00000000..937720fa --- /dev/null +++ b/BTPanel/static/ace/mode-html.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/,next:"start"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$quotes={'"':'"',"'":"'","`":"`"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(l.prototype),t.Mode=l}),define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom",f=t.supportConstantColor="aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen",l=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"paren.rparen",regex:"\\}"},{token:"string",regex:"@(?!viewport)",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"keyword",regex:"%"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant.numeric",regex:c},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"start"},{token:"paren.rparen",regex:"\\}",next:"start"},{token:"string",regex:";",next:"start"},{token:"keyword",regex:"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)"}],comments:[{token:"comment",regex:"\\/\\*",push:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}]}],ruleset:[{regex:"-(webkit|ms|moz|o)-",token:"text"},{token:"punctuation.operator",regex:"[:;]"},{token:"paren.rparen",regex:"\\}",next:"start"},{include:["strings","url","comments"]},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{include:"url"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}],url:[{token:"support.function",regex:"(?:url(:?-prefix)?|domain|regexp)\\(",push:[{token:"support.function",regex:"\\)",next:"pop"},{defaultToken:"string"}]}],strings:[{token:"string.start",regex:"'",push:[{token:"string.end",regex:"'|$",next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]},{token:"string.start",regex:'"',push:[{token:"string.end",regex:'"|$',next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]}],escapes:[{token:"constant.language.escape",regex:/\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define("ace/mode/css_completions",["require","exports","module"],function(e,t,n){"use strict";var r={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,"double":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{"default":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},"float":{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,"static":1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e){if(typeof e[t]!="string")continue;var n=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e==="ruleset"||t.$mode.$id=="ace/mode/scss"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+": $0;",meta:"property",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\w\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]=="object"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:"property value",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(/^(\s+[^;]|\s*$)/.test(f.substring(s.column)))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}}),this.add("!important","insertion",function(e,t,n,r,i){if(i==="!"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\s*(;|}|$)/.test(o.substring(s.column)))return{text:"!important",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./css_completions").CssCompletions,f=e("./behaviour/css").CssBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(c.prototype),t.Mode=c}),define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){var t="[_:a-zA-Z\u00c0-\uffff][-_:.a-zA-Z0-9\u00c0-\uffff]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.start.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.end.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_highlight_rules").XmlHighlightRules,a=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),f=function(){u.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:.]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var n=a[t];return["meta.tag.punctuation."+(e=="<"?"":"end-")+"tag-open.xml","meta.tag"+(n?"."+n:"")+".tag-name.xml"]},regex:"(",next:"start"}]}),this.embedTagRules(s,"css-","style"),this.embedTagRules((new o({jsx:!1})).getRules(),"js-","script"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),a=function(){this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==""&&a!=="'"&&a!='"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,"attribute-value")||u(p,"string")))return{text:"",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,"tag-whitespace")||u(p,"whitespace"))p=h.stepBackward();var d=!c||c.match(/\s/);if(u(p,"attribute-equals")&&(d||c==">")||u(p,"decl-attribute-equals")&&(d||c=="?"))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,"tag-name")||u(f,"tag-whitespace")||u(f,"attribute-name")||u(f,"attribute-equals")||u(f,"attribute-value")))return;if(u(f,"reference.attribute-value"))return;if(u(f,"attribute-value")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,"tag-name")){f=a.stepBackward();if(f.value=="<"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),"end-tag-open"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf("tag-close")!==-1){if(f.value=="/>")return;while(f&&f.type.indexOf("tag-name")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value==="-1}var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t=="markbeginend"?"end":"":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?"":this._findEndTagInLine(e,n,r.tagName,r.end.column)?"":"start":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/";break}}return r}if(l(s,"tag-close"))return r.selfClosing=s.value=="/>",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,"tag-open"))return n.closing=l(t,"end-tag-open"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,"tag-name")?n.tagName=t.value:l(t,"tag-close")&&(n.selfClosing=t.value=="/>",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"tag-name"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"attribute-name"))i=n.stepBackward();if(i)return i.value}var r=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"],s=["onabort","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextmenu","oncuechange","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onload","onloadeddata","onloadedmetadata","onloadstart","onmousedown","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onpause","onplay","onplaying","onprogress","onratechange","onreset","onscroll","onseeked","onseeking","onselect","onshow","onstalled","onsubmit","onsuspend","ontimeupdate","onvolumechange","onwaiting"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{"accept-charset":1,action:1,autocomplete:1,enctype:{"multipart/form-data":1,"application/x-www-form-urlencoded":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{"allow-same-origin":1,"allow-top-navigation":1,"allow-forms":1,"allow-scripts":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,"datetime-local":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{"application/x-www-form-urlencoded":1,"multipart/form-data":1,"text/plain":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,"for":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{"text/css":1,"image/png":1,"image/jpeg":1,"image/gif":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{"http-equiv":{"content-type":1},name:{description:1,keywords:1},content:{"text/html; charset=UTF-8":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{"for":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{"text/javascript":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,"default":1},section:{},summary:{},u:{},ul:{},"var":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,"tag-name")||f(i,"tag-open")||f(i,"end-tag-open"))return this.getTagCompletions(e,t,n,r);if(f(i,"tag-whitespace")||f(i,"attribute-name"))return this.getAttributeCompletions(e,t,n,r);if(f(i,"attribute-value"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:"tag",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]=="object"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:"attribute value",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=["Aacute;","aacute;","Acirc;","acirc;","acute;","AElig;","aelig;","Agrave;","agrave;","alefsym;","Alpha;","alpha;","amp;","and;","ang;","Aring;","aring;","asymp;","Atilde;","atilde;","Auml;","auml;","bdquo;","Beta;","beta;","brvbar;","bull;","cap;","Ccedil;","ccedil;","cedil;","cent;","Chi;","chi;","circ;","clubs;","cong;","copy;","crarr;","cup;","curren;","Dagger;","dagger;","dArr;","darr;","deg;","Delta;","delta;","diams;","divide;","Eacute;","eacute;","Ecirc;","ecirc;","Egrave;","egrave;","empty;","emsp;","ensp;","Epsilon;","epsilon;","equiv;","Eta;","eta;","ETH;","eth;","Euml;","euml;","euro;","exist;","fnof;","forall;","frac12;","frac14;","frac34;","frasl;","Gamma;","gamma;","ge;","gt;","hArr;","harr;","hearts;","hellip;","Iacute;","iacute;","Icirc;","icirc;","iexcl;","Igrave;","igrave;","image;","infin;","int;","Iota;","iota;","iquest;","isin;","Iuml;","iuml;","Kappa;","kappa;","Lambda;","lambda;","lang;","laquo;","lArr;","larr;","lceil;","ldquo;","le;","lfloor;","lowast;","loz;","lrm;","lsaquo;","lsquo;","lt;","macr;","mdash;","micro;","middot;","minus;","Mu;","mu;","nabla;","nbsp;","ndash;","ne;","ni;","not;","notin;","nsub;","Ntilde;","ntilde;","Nu;","nu;","Oacute;","oacute;","Ocirc;","ocirc;","OElig;","oelig;","Ograve;","ograve;","oline;","Omega;","omega;","Omicron;","omicron;","oplus;","or;","ordf;","ordm;","Oslash;","oslash;","Otilde;","otilde;","otimes;","Ouml;","ouml;","para;","part;","permil;","perp;","Phi;","phi;","Pi;","pi;","piv;","plusmn;","pound;","Prime;","prime;","prod;","prop;","Psi;","psi;","quot;","radic;","rang;","raquo;","rArr;","rarr;","rceil;","rdquo;","real;","reg;","rfloor;","Rho;","rho;","rlm;","rsaquo;","rsquo;","sbquo;","Scaron;","scaron;","sdot;","sect;","shy;","Sigma;","sigma;","sigmaf;","sim;","spades;","sub;","sube;","sum;","sup;","sup1;","sup2;","sup3;","supe;","szlig;","Tau;","tau;","there4;","Theta;","theta;","thetasym;","thinsp;","THORN;","thorn;","tilde;","times;","trade;","Uacute;","uacute;","uArr;","uarr;","Ucirc;","ucirc;","Ugrave;","ugrave;","uml;","upsih;","Upsilon;","upsilon;","Uuml;","uuml;","weierp;","Xi;","xi;","Yacute;","yacute;","yen;","Yuml;","yuml;","Zeta;","zeta;","zwj;","zwnj;"];return i.map(function(e){return{caption:e,snippet:e,meta:"html entity",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text").Mode,o=e("./javascript").Mode,u=e("./css").Mode,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/xml").XmlBehaviour,l=e("./folding/html").FoldMode,c=e("./html_completions").HtmlCompletions,h=e("../worker/worker_client").WorkerClient,p=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],d=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({"js-":o,"css-":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:""},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/html"}.call(v.prototype),t.Mode=v}); (function() { + window.require(["ace/mode/html"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-ini.js b/BTPanel/static/ace/mode-ini.js new file mode 100644 index 00000000..0655e50e --- /dev/null +++ b/BTPanel/static/ace/mode-ini.js @@ -0,0 +1,8 @@ +define("ace/mode/ini_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s="\\\\(?:[\\\\0abtrn;#=:]|x[a-fA-F\\d]{4})",o=function(){this.$rules={start:[{token:"punctuation.definition.comment.ini",regex:"#.*",push_:[{token:"comment.line.number-sign.ini",regex:"$|^",next:"pop"},{defaultToken:"comment.line.number-sign.ini"}]},{token:"punctuation.definition.comment.ini",regex:";.*",push_:[{token:"comment.line.semicolon.ini",regex:"$|^",next:"pop"},{defaultToken:"comment.line.semicolon.ini"}]},{token:["keyword.other.definition.ini","text","punctuation.separator.key-value.ini"],regex:"\\b([a-zA-Z0-9_.-]+)\\b(\\s*)(=)"},{token:["punctuation.definition.entity.ini","constant.section.group-title.ini","punctuation.definition.entity.ini"],regex:"^(\\[)(.*?)(\\])"},{token:"punctuation.definition.string.begin.ini",regex:"'",push:[{token:"punctuation.definition.string.end.ini",regex:"'",next:"pop"},{token:"constant.language.escape",regex:s},{defaultToken:"string.quoted.single.ini"}]},{token:"punctuation.definition.string.begin.ini",regex:'"',push:[{token:"constant.language.escape",regex:s},{token:"punctuation.definition.string.end.ini",regex:'"',next:"pop"},{defaultToken:"string.quoted.double.ini"}]}]},this.normalizeRules()};o.metaData={fileTypes:["ini","conf"],keyEquivalent:"^~I",name:"Ini",scopeName:"source.ini"},r.inherits(o,i),t.IniHighlightRules=o}),define("ace/mode/folding/ini",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/^\s*\[([^\])]*)]\s*(?:$|[;#])/,this.getFoldWidgetRange=function(e,t,n){var r=this.foldingStartMarker,s=e.getLine(n),o=s.match(r);if(!o)return;var u=o[1]+".",a=s.length,f=e.getLength(),l=n,c=n;while(++nl){var h=e.getLine(c).length;return new i(l,a,c,h)}}}.call(o.prototype)}),define("ace/mode/ini",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/ini_highlight_rules","ace/mode/folding/ini"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./ini_highlight_rules").IniHighlightRules,o=e("./folding/ini").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart=";",this.blockComment=null,this.$id="ace/mode/ini"}.call(u.prototype),t.Mode=u}); (function() { + window.require(["ace/mode/ini"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-java.js b/BTPanel/static/ace/mode-java.js new file mode 100644 index 00000000..1965fbb5 --- /dev/null +++ b/BTPanel/static/ace/mode-java.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/,next:"start"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$quotes={'"':'"',"'":"'","`":"`"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(l.prototype),t.Mode=l}),define("ace/mode/java_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e="abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while|var",t="null|Infinity|NaN|undefined",n="AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object",r=this.createKeywordMapper({"variable.language":"this",keyword:e,"constant.language":t,"support.function":n},"identifier");this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\b/},{token:"constant.numeric",regex:/[+-]?\d[\d_]*(?:(?:\.[\d_]*)?(?:[eE][+-]?[\d_]+)?)?[LlSsDdFfYy]?\b/},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{regex:"(open(?:\\s+))?module(?=\\s*\\w)",token:"keyword",next:[{regex:"{",token:"paren.lparen",next:[{regex:"}",token:"paren.rparen",next:"start"},{regex:"\\b(requires|transitive|exports|opens|to|uses|provides|with)\\b",token:"keyword"}]},{token:"text",regex:"\\s+"},{token:"identifier",regex:"\\w+"},{token:"punctuation.operator",regex:"."},{token:"text",regex:"\\s+"},{regex:"",next:"start"}]},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}]},this.embedRules(i,"doc-",[i.getEndRule("start")]),this.normalizeRules()};r.inherits(o,s),t.JavaHighlightRules=o}),define("ace/mode/folding/java",["require","exports","module","ace/lib/oop","ace/mode/folding/cstyle","ace/range"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./cstyle").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.importRegex=/^import /,this.getCStyleFoldWidget=this.getFoldWidget,this.getFoldWidget=function(e,t,n){if(t==="markbegin"){var r=e.getLine(n);if(this.importRegex.test(r))if(n==0||!this.importRegex.test(e.getLine(n-1)))return"start"}return this.getCStyleFoldWidget(e,t,n)},this.getCstyleFoldWidgetRange=this.getFoldWidgetRange,this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n),o=i.match(this.importRegex);if(!o||t!=="markbegin")return this.getCstyleFoldWidgetRange(e,t,n,r);var u=o[0].length,a=e.getLength(),f=n,l=n;while(++nf){var c=e.getLine(l).length;return new s(f,u,l,c)}}}.call(o.prototype)}),define("ace/mode/java",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/mode/java_highlight_rules","ace/mode/folding/java"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./javascript").Mode,s=e("./java_highlight_rules").JavaHighlightRules,o=e("./folding/java").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.createWorker=function(e){return null},this.$id="ace/mode/java"}.call(u.prototype),t.Mode=u}); (function() { + window.require(["ace/mode/java"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-javascript.js b/BTPanel/static/ace/mode-javascript.js new file mode 100644 index 00000000..50cfee8c --- /dev/null +++ b/BTPanel/static/ace/mode-javascript.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/,next:"start"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$quotes={'"':'"',"'":"'","`":"`"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(l.prototype),t.Mode=l}); (function() { + window.require(["ace/mode/javascript"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-json.js b/BTPanel/static/ace/mode-json.js new file mode 100644 index 00000000..04ffe008 --- /dev/null +++ b/BTPanel/static/ace/mode-json.js @@ -0,0 +1,8 @@ +define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"variable",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)'},{token:"string",regex:'"',next:"string"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"text",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"comment",regex:"\\/\\/.*$"},{token:"comment.start",regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],string:[{token:"constant.language.escape",regex:/\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],comment:[{token:"comment.end",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}]}};r.inherits(s,i),t.JsonHighlightRules=s}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./json_highlight_rules").JsonHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./behaviour/cstyle").CstyleBehaviour,a=e("./folding/cstyle").FoldMode,f=e("../worker/worker_client").WorkerClient,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e=="start"){var i=t.match(/^.*[\{\(\[]\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/json_worker","JsonWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/json"}.call(l.prototype),t.Mode=l}); (function() { + window.require(["ace/mode/json"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-jsp.js b/BTPanel/static/ace/mode-jsp.js new file mode 100644 index 00000000..c6e778f1 --- /dev/null +++ b/BTPanel/static/ace/mode-jsp.js @@ -0,0 +1,8 @@ +define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom",f=t.supportConstantColor="aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen",l=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"paren.rparen",regex:"\\}"},{token:"string",regex:"@(?!viewport)",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"keyword",regex:"%"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant.numeric",regex:c},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"start"},{token:"paren.rparen",regex:"\\}",next:"start"},{token:"string",regex:";",next:"start"},{token:"keyword",regex:"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)"}],comments:[{token:"comment",regex:"\\/\\*",push:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}]}],ruleset:[{regex:"-(webkit|ms|moz|o)-",token:"text"},{token:"punctuation.operator",regex:"[:;]"},{token:"paren.rparen",regex:"\\}",next:"start"},{include:["strings","url","comments"]},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{include:"url"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}],url:[{token:"support.function",regex:"(?:url(:?-prefix)?|domain|regexp)\\(",push:[{token:"support.function",regex:"\\)",next:"pop"},{defaultToken:"string"}]}],strings:[{token:"string.start",regex:"'",push:[{token:"string.end",regex:"'|$",next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]},{token:"string.start",regex:'"',push:[{token:"string.end",regex:'"|$',next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]}],escapes:[{token:"constant.language.escape",regex:/\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/,next:"start"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){var t="[_:a-zA-Z\u00c0-\uffff][-_:.a-zA-Z0-9\u00c0-\uffff]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.start.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.end.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_highlight_rules").XmlHighlightRules,a=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),f=function(){u.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:.]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var n=a[t];return["meta.tag.punctuation."+(e=="<"?"":"end-")+"tag-open.xml","meta.tag"+(n?"."+n:"")+".tag-name.xml"]},regex:"(",next:"start"}]}),this.embedTagRules(s,"css-","style"),this.embedTagRules((new o({jsx:!1})).getRules(),"js-","script"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define("ace/mode/java_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e="abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while|var",t="null|Infinity|NaN|undefined",n="AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object",r=this.createKeywordMapper({"variable.language":"this",keyword:e,"constant.language":t,"support.function":n},"identifier");this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\b/},{token:"constant.numeric",regex:/[+-]?\d[\d_]*(?:(?:\.[\d_]*)?(?:[eE][+-]?[\d_]+)?)?[LlSsDdFfYy]?\b/},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{regex:"(open(?:\\s+))?module(?=\\s*\\w)",token:"keyword",next:[{regex:"{",token:"paren.lparen",next:[{regex:"}",token:"paren.rparen",next:"start"},{regex:"\\b(requires|transitive|exports|opens|to|uses|provides|with)\\b",token:"keyword"}]},{token:"text",regex:"\\s+"},{token:"identifier",regex:"\\w+"},{token:"punctuation.operator",regex:"."},{token:"text",regex:"\\s+"},{regex:"",next:"start"}]},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}]},this.embedRules(i,"doc-",[i.getEndRule("start")]),this.normalizeRules()};r.inherits(o,s),t.JavaHighlightRules=o}),define("ace/mode/jsp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules","ace/mode/java_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./html_highlight_rules").HtmlHighlightRules,s=e("./java_highlight_rules").JavaHighlightRules,o=function(){i.call(this);var e="request|response|out|session|application|config|pageContext|page|Exception",t="page|include|taglib",n=[{token:"comment",regex:"<%--",push:"jsp-dcomment"},{token:"meta.tag",regex:"<%@?|<%=?|<%!?|]+>",push:"jsp-start"}],r=[{token:"meta.tag",regex:"%>|<\\/jsp:[^>]+>",next:"pop"},{token:"variable.language",regex:e},{token:"keyword",regex:t}];for(var o in this.$rules)this.$rules[o].unshift.apply(this.$rules[o],n);this.embedRules(s,"jsp-",r,["start"]),this.addRules({"jsp-dcomment":[{token:"comment",regex:".*?--%>",next:"pop"}]}),this.normalizeRules()};r.inherits(o,i),t.JspHighlightRules=o}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/jsp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/jsp_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./jsp_highlight_rules").JspHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./behaviour/cstyle").CstyleBehaviour,a=e("./folding/cstyle").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.$id="ace/mode/jsp"}.call(f.prototype),t.Mode=f}); (function() { + window.require(["ace/mode/jsp"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-less.js b/BTPanel/static/ace/mode-less.js new file mode 100644 index 00000000..0e97c90a --- /dev/null +++ b/BTPanel/static/ace/mode-less.js @@ -0,0 +1,8 @@ +define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom",f=t.supportConstantColor="aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen",l=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"paren.rparen",regex:"\\}"},{token:"string",regex:"@(?!viewport)",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"keyword",regex:"%"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant.numeric",regex:c},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"start"},{token:"paren.rparen",regex:"\\}",next:"start"},{token:"string",regex:";",next:"start"},{token:"keyword",regex:"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)"}],comments:[{token:"comment",regex:"\\/\\*",push:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}]}],ruleset:[{regex:"-(webkit|ms|moz|o)-",token:"text"},{token:"punctuation.operator",regex:"[:;]"},{token:"paren.rparen",regex:"\\}",next:"start"},{include:["strings","url","comments"]},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{include:"url"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}],url:[{token:"support.function",regex:"(?:url(:?-prefix)?|domain|regexp)\\(",push:[{token:"support.function",regex:"\\)",next:"pop"},{defaultToken:"string"}]}],strings:[{token:"string.start",regex:"'",push:[{token:"string.end",regex:"'|$",next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]},{token:"string.start",regex:'"',push:[{token:"string.end",regex:'"|$',next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]}],escapes:[{token:"constant.language.escape",regex:/\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define("ace/mode/less_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/css_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=e("./css_highlight_rules"),o=function(){var e="@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|or|and|when|not",t=e.split("|"),n=s.supportType.split("|"),r=this.createKeywordMapper({"support.constant":s.supportConstant,keyword:e,"support.constant.color":s.supportConstantColor,"support.constant.fonts":s.supportConstantFonts},"identifier",!0),i="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+i+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:"constant.numeric",regex:i},{token:["support.function","paren.lparen","string","paren.rparen"],regex:"(url)(\\()(.*)(\\))"},{token:["support.function","paren.lparen"],regex:"(:extend|[a-z0-9_\\-]+)(\\()"},{token:function(e){return t.indexOf(e.toLowerCase())>-1?"keyword":"variable"},regex:"[@\\$][a-z0-9_\\-@\\$]*\\b"},{token:"variable",regex:"[@\\$]\\{[a-z0-9_\\-@\\$]*\\}"},{token:function(e,t){return n.indexOf(e.toLowerCase())>-1?["support.type.property","text"]:["support.type.unknownProperty","text"]},regex:"([a-z0-9-_]+)(\\s*:)"},{token:"keyword",regex:"&"},{token:r,regex:"\\-?[@a-z_][@a-z0-9_\\-]*"},{token:"variable.language",regex:"#[a-z0-9-_]+"},{token:"variable.language",regex:"\\.[a-z0-9-_]+"},{token:"variable.language",regex:":[a-z_][a-z0-9-_]*"},{token:"constant",regex:"[a-z0-9-_]+"},{token:"keyword.operator",regex:"<|>|<=|>=|=|!=|-|%|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}]},this.normalizeRules()};r.inherits(o,i),t.LessHighlightRules=o}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(/^(\s+[^;]|\s*$)/.test(f.substring(s.column)))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}}),this.add("!important","insertion",function(e,t,n,r,i){if(i==="!"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\s*(;|}|$)/.test(o.substring(s.column)))return{text:"!important",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define("ace/mode/css_completions",["require","exports","module"],function(e,t,n){"use strict";var r={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,"double":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{"default":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},"float":{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,"static":1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e){if(typeof e[t]!="string")continue;var n=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e==="ruleset"||t.$mode.$id=="ace/mode/scss"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+": $0;",meta:"property",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\w\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]=="object"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:"property value",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/less",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/less_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/css","ace/mode/css_completions","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./less_highlight_rules").LessHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./behaviour/css").CssBehaviour,a=e("./css_completions").CssCompletions,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.$completer=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions("ruleset",t,n,r)},this.$id="ace/mode/less"}.call(l.prototype),t.Mode=l}); (function() { + window.require(["ace/mode/less"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-lua.js b/BTPanel/static/ace/mode-lua.js new file mode 100644 index 00000000..6fd936f3 --- /dev/null +++ b/BTPanel/static/ace/mode-lua.js @@ -0,0 +1,8 @@ +define("ace/mode/lua_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not",t="true|false|nil|_G|_VERSION",n="string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber",r="string|package|os|io|math|debug|table|coroutine",i="setn|foreach|foreachi|gcinfo|log10|maxn",s=this.createKeywordMapper({keyword:e,"support.function":n,"keyword.deprecated":i,"constant.library":r,"constant.language":t,"variable.language":"self"},"identifier"),o="(?:(?:[1-9]\\d*)|(?:0))",u="(?:0[xX][\\dA-Fa-f]+)",a="(?:"+o+"|"+u+")",f="(?:\\.\\d+)",l="(?:\\d+)",c="(?:(?:"+l+"?"+f+")|(?:"+l+"\\.))",h="(?:"+c+")";this.$rules={start:[{stateName:"bracketedComment",onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),"comment"},regex:/\-\-\[=*\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next="","comment"},regex:/\]=*\]/,next:"start"},{defaultToken:"comment"}]},{token:"comment",regex:"\\-\\-.*$"},{stateName:"bracketedString",onMatch:function(e,t,n){return n.unshift(this.next,e.length,t),"string.start"},regex:/\[=*\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next="","string.end"},regex:/\]=*\]/,next:"start"},{defaultToken:"string"}]},{token:"string",regex:'"(?:[^\\\\]|\\\\.)*?"'},{token:"string",regex:"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:h},{token:"constant.numeric",regex:a+"\\b"},{token:s,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\/|%|\\#|\\^|~|<|>|<=|=>|==|~=|=|\\:|\\.\\.\\.|\\.\\."},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+|\\w+"}]},this.normalizeRules()};r.inherits(s,i),t.LuaHighlightRules=s}),define("ace/mode/folding/lua",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=e("../../token_iterator").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.foldingStartMarker=/\b(function|then|do|repeat)\b|{\s*$|(\[=*\[)/,this.foldingStopMarker=/\bend\b|^\s*}|\]=*\]/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]=="then"&&/\belseif\b/.test(r))return;if(o[1]){if(e.getTokenAt(n,o.index+1).type==="keyword")return"start"}else{if(!o[2])return"start";var u=e.bgTokenizer.getState(n)||"";if(u[0]=="bracketedComment"||u[0]=="bracketedString")return"start"}}if(t!="markbeginend"||!s||i&&s)return"";var o=r.match(this.foldingStopMarker);if(o[0]==="end"){if(e.getTokenAt(n,o.index+1).type==="keyword")return"end"}else{if(o[0][0]!=="]")return"end";var u=e.bgTokenizer.getState(n-1)||"";if(u[0]=="bracketedComment"||u[0]=="bracketedString")return"end"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.luaBlock(e,n,i.index+1):i[2]?e.getCommentFoldRange(n,i.index+1):this.openingBracketBlock(e,"{",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[0]==="end"&&e.getTokenAt(n,i.index+1).type==="keyword"?this.luaBlock(e,n,i.index+1):i[0][0]==="]"?e.getCommentFoldRange(n,i.index+1):this.closingBracketBlock(e,"}",n,i.index+i[0].length)},this.luaBlock=function(e,t,n,r){var i=new o(e,t,n),u={"function":1,"do":1,then:1,elseif:-1,end:-1,repeat:1,until:-1},a=i.getCurrentToken();if(!a||a.type!="keyword")return;var f=a.value,l=[f],c=u[f];if(!c)return;var h=c===-1?i.getCurrentTokenColumn():e.getLine(t).length,p=t;i.step=c===-1?i.stepBackward:i.stepForward;while(a=i.step()){if(a.type!=="keyword")continue;var d=c*u[a.value];if(d>0)l.unshift(a.value);else if(d<=0){l.shift();if(!l.length&&a.value!="elseif")break;d===0&&l.unshift(a.value)}}if(!a)return null;if(r)return i.getCurrentTokenRange();var t=i.getCurrentTokenRow();return c===-1?new s(t,e.getLine(t).length,p,h):new s(p,h,t,i.getCurrentTokenColumn())}}.call(u.prototype)}),define("ace/mode/lua",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/lua_highlight_rules","ace/mode/folding/lua","ace/range","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./lua_highlight_rules").LuaHighlightRules,o=e("./folding/lua").FoldMode,u=e("../range").Range,a=e("../worker/worker_client").WorkerClient,f=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(f,i),function(){function n(t){var n=0;for(var r=0;r0?1:0}this.lineCommentStart="--",this.blockComment={start:"--[",end:"]--"};var e={"function":1,then:1,"do":1,"else":1,elseif:1,repeat:1,end:-1,until:-1},t=["else","elseif","end","until"];this.getNextLineIndent=function(e,t,r){var i=this.$getIndent(t),s=0,o=this.getTokenizer().getLineTokens(t,e),u=o.tokens;return e=="start"&&(s=n(u)),s>0?i+r:s<0&&i.substr(i.length-r.length)==r&&!this.checkOutdent(e,t,"\n")?i.substr(0,i.length-r.length):i},this.checkOutdent=function(e,n,r){if(r!="\n"&&r!="\r"&&r!="\r\n")return!1;if(n.match(/^\s*[\)\}\]]$/))return!0;var i=this.getTokenizer().getLineTokens(n.trim(),e).tokens;return!i||!i.length?!1:i[0].type=="keyword"&&t.indexOf(i[0].value)!=-1},this.getMatching=function(t,n,r){if(n==undefined){var i=t.selection.lead;r=i.column,n=i.row}var s=t.getTokenAt(n,r);if(s&&s.value in e)return this.foldingRules.luaBlock(t,n,r,!0)},this.autoOutdent=function(e,t,n){var r=t.getLine(n),i=r.match(/^\s*/)[0].length;if(!i||!n)return;var s=this.getMatching(t,n,i+1);if(!s||s.start.row==n)return;var o=this.$getIndent(t.getLine(s.start.row));o.length!=i&&(t.replace(new u(n,0,n,i),o),t.outdentRows(new u(n+1,0,n+1,0)))},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/lua_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/lua"}.call(f.prototype),t.Mode=f}); (function() { + window.require(["ace/mode/lua"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-makefile.js b/BTPanel/static/ace/mode-makefile.js new file mode 100644 index 00000000..70cac333 --- /dev/null +++ b/BTPanel/static/ace/mode-makefile.js @@ -0,0 +1,8 @@ +define("ace/mode/sh_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=t.reservedKeywords="!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly",o=t.languageConstructs="[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait",u=function(){var e=this.createKeywordMapper({keyword:s,"support.function.builtin":o,"invalid.deprecated":"debugger"},"identifier"),t="(?:(?:[1-9]\\d*)|(?:0))",n="(?:\\.\\d+)",r="(?:\\d+)",i="(?:(?:"+r+"?"+n+")|(?:"+r+"\\.))",u="(?:(?:"+i+"|"+r+")"+")",a="(?:"+u+"|"+i+")",f="(?:&"+r+")",l="[a-zA-Z_][a-zA-Z0-9_]*",c="(?:"+l+"(?==))",h="(?:\\$(?:SHLVL|\\$|\\!|\\?))",p="(?:"+l+"\\s*\\(\\))";this.$rules={start:[{token:"constant",regex:/\\./},{token:["text","comment"],regex:/(^|\s)(#.*)$/},{token:"string.start",regex:'"',push:[{token:"constant.language.escape",regex:/\\(?:[$`"\\]|$)/},{include:"variables"},{token:"keyword.operator",regex:/`/},{token:"string.end",regex:'"',next:"pop"},{defaultToken:"string"}]},{token:"string",regex:"\\$'",push:[{token:"constant.language.escape",regex:/\\(?:[abeEfnrtv\\'"]|x[a-fA-F\d]{1,2}|u[a-fA-F\d]{4}([a-fA-F\d]{4})?|c.|\d{1,3})/},{token:"string",regex:"'",next:"pop"},{defaultToken:"string"}]},{regex:"<<<",token:"keyword.operator"},{stateName:"heredoc",regex:"(<<-?)(\\s*)(['\"`]?)([\\w\\-]+)(['\"`]?)",onMatch:function(e,t,n){var r=e[2]=="-"?"indentedHeredoc":"heredoc",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:"constant",value:i[1]},{type:"text",value:i[2]},{type:"string",value:i[3]},{type:"support.class",value:i[4]},{type:"string",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||"start","support.class"):(this.next="","string")},regex:".*$",next:"start"}],indentedHeredoc:[{token:"string",regex:"^ +"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||"start","support.class"):(this.next="","string")},regex:".*$",next:"start"}]}},{regex:"$",token:"empty",next:function(e,t){return t[0]==="heredoc"||t[0]==="indentedHeredoc"?t[0]:e}},{token:["keyword","text","text","text","variable"],regex:/(declare|local|readonly)(\s+)(?:(-[fixar]+)(\s+))?([a-zA-Z_][a-zA-Z0-9_]*\b)/},{token:"variable.language",regex:h},{token:"variable",regex:c},{include:"variables"},{token:"support.function",regex:p},{token:"support.function",regex:f},{token:"string",start:"'",end:"'"},{token:"constant.numeric",regex:a},{token:"constant.numeric",regex:t+"\\b"},{token:e,regex:"[a-zA-Z_][a-zA-Z0-9_]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!=|[%&|`]"},{token:"punctuation.operator",regex:";"},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]]"},{token:"paren.rparen",regex:"[\\)\\}]",next:"pop"}],variables:[{token:"variable",regex:/(\$)(\w+)/},{token:["variable","paren.lparen"],regex:/(\$)(\()/,push:"start"},{token:["variable","paren.lparen","keyword.operator","variable","keyword.operator"],regex:/(\$)(\{)([#!]?)(\w+|[*@#?\-$!0_])(:[?+\-=]?|##?|%%?|,,?\/|\^\^?)?/,push:"start"},{token:"variable",regex:/\$[*@#?\-$!0_]/},{token:["variable","paren.lparen"],regex:/(\$)(\{)/,push:"start"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),define("ace/mode/makefile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/sh_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=e("./sh_highlight_rules"),o=function(){var e=this.createKeywordMapper({keyword:s.reservedKeywords,"support.function.builtin":s.languageConstructs,"invalid.deprecated":"debugger"},"string");this.$rules={start:[{token:"string.interpolated.backtick.makefile",regex:"`",next:"shell-start"},{token:"punctuation.definition.comment.makefile",regex:/#(?=.)/,next:"comment"},{token:["keyword.control.makefile"],regex:"^(?:\\s*\\b)(\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\b)"},{token:["entity.name.function.makefile","text"],regex:"^([^\\t ]+(?:\\s[^\\t ]+)*:)(\\s*.*)"}],comment:[{token:"punctuation.definition.comment.makefile",regex:/.+\\/},{token:"punctuation.definition.comment.makefile",regex:".+",next:"start"}],"shell-start":[{token:e,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"string",regex:"\\w+"},{token:"string.interpolated.backtick.makefile",regex:"`",next:"start"}]}};r.inherits(o,i),t.MakefileHighlightRules=o}),define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++nl){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/,next:"start"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$quotes={'"':'"',"'":"'","`":"`"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(l.prototype),t.Mode=l}),define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){var t="[_:a-zA-Z\u00c0-\uffff][-_:.a-zA-Z0-9\u00c0-\uffff]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.start.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.end.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),a=function(){this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==""&&a!=="'"&&a!='"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,"attribute-value")||u(p,"string")))return{text:"",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,"tag-whitespace")||u(p,"whitespace"))p=h.stepBackward();var d=!c||c.match(/\s/);if(u(p,"attribute-equals")&&(d||c==">")||u(p,"decl-attribute-equals")&&(d||c=="?"))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,"tag-name")||u(f,"tag-whitespace")||u(f,"attribute-name")||u(f,"attribute-equals")||u(f,"attribute-value")))return;if(u(f,"reference.attribute-value"))return;if(u(f,"attribute-value")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,"tag-name")){f=a.stepBackward();if(f.value=="<"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),"end-tag-open"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf("tag-close")!==-1){if(f.value=="/>")return;while(f&&f.type.indexOf("tag-name")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value==="-1}var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t=="markbeginend"?"end":"":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?"":this._findEndTagInLine(e,n,r.tagName,r.end.column)?"":"start":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/";break}}return r}if(l(s,"tag-close"))return r.selfClosing=s.value=="/>",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,"tag-open"))return n.closing=l(t,"end-tag-open"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,"tag-name")?n.tagName=t.value:l(t,"tag-close")&&(n.selfClosing=t.value=="/>",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column"},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/xml_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/xml"}.call(l.prototype),t.Mode=l}),define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom",f=t.supportConstantColor="aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen",l=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"paren.rparen",regex:"\\}"},{token:"string",regex:"@(?!viewport)",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"keyword",regex:"%"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant.numeric",regex:c},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"start"},{token:"paren.rparen",regex:"\\}",next:"start"},{token:"string",regex:";",next:"start"},{token:"keyword",regex:"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)"}],comments:[{token:"comment",regex:"\\/\\*",push:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}]}],ruleset:[{regex:"-(webkit|ms|moz|o)-",token:"text"},{token:"punctuation.operator",regex:"[:;]"},{token:"paren.rparen",regex:"\\}",next:"start"},{include:["strings","url","comments"]},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{include:"url"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}],url:[{token:"support.function",regex:"(?:url(:?-prefix)?|domain|regexp)\\(",push:[{token:"support.function",regex:"\\)",next:"pop"},{defaultToken:"string"}]}],strings:[{token:"string.start",regex:"'",push:[{token:"string.end",regex:"'|$",next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]},{token:"string.start",regex:'"',push:[{token:"string.end",regex:'"|$',next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]}],escapes:[{token:"constant.language.escape",regex:/\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define("ace/mode/css_completions",["require","exports","module"],function(e,t,n){"use strict";var r={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,"double":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{"default":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},"float":{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,"static":1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e){if(typeof e[t]!="string")continue;var n=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e==="ruleset"||t.$mode.$id=="ace/mode/scss"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+": $0;",meta:"property",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\w\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]=="object"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:"property value",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(/^(\s+[^;]|\s*$)/.test(f.substring(s.column)))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}}),this.add("!important","insertion",function(e,t,n,r,i){if(i==="!"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\s*(;|}|$)/.test(o.substring(s.column)))return{text:"!important",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./css_completions").CssCompletions,f=e("./behaviour/css").CssBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(c.prototype),t.Mode=c}),define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_highlight_rules").XmlHighlightRules,a=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),f=function(){u.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:.]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var n=a[t];return["meta.tag.punctuation."+(e=="<"?"":"end-")+"tag-open.xml","meta.tag"+(n?"."+n:"")+".tag-name.xml"]},regex:"(",next:"start"}]}),this.embedTagRules(s,"css-","style"),this.embedTagRules((new o({jsx:!1})).getRules(),"js-","script"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!="string"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):""},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./mixed").FoldMode,s=e("./xml").FoldMode,o=e("./cstyle").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{"js-":new o,"css-":new o})};r.inherits(u,i)}),define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"],function(e,t,n){"use strict";function f(e,t){return e.type.lastIndexOf(t+".xml")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"tag-name"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"attribute-name"))i=n.stepBackward();if(i)return i.value}var r=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"],s=["onabort","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextmenu","oncuechange","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onload","onloadeddata","onloadedmetadata","onloadstart","onmousedown","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onpause","onplay","onplaying","onprogress","onratechange","onreset","onscroll","onseeked","onseeking","onselect","onshow","onstalled","onsubmit","onsuspend","ontimeupdate","onvolumechange","onwaiting"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{"accept-charset":1,action:1,autocomplete:1,enctype:{"multipart/form-data":1,"application/x-www-form-urlencoded":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{"allow-same-origin":1,"allow-top-navigation":1,"allow-forms":1,"allow-scripts":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,"datetime-local":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{"application/x-www-form-urlencoded":1,"multipart/form-data":1,"text/plain":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,"for":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{"text/css":1,"image/png":1,"image/jpeg":1,"image/gif":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{"http-equiv":{"content-type":1},name:{description:1,keywords:1},content:{"text/html; charset=UTF-8":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{"for":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{"text/javascript":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,"default":1},section:{},summary:{},u:{},ul:{},"var":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,"tag-name")||f(i,"tag-open")||f(i,"end-tag-open"))return this.getTagCompletions(e,t,n,r);if(f(i,"tag-whitespace")||f(i,"attribute-name"))return this.getAttributeCompletions(e,t,n,r);if(f(i,"attribute-value"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:"tag",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]=="object"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:"attribute value",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=["Aacute;","aacute;","Acirc;","acirc;","acute;","AElig;","aelig;","Agrave;","agrave;","alefsym;","Alpha;","alpha;","amp;","and;","ang;","Aring;","aring;","asymp;","Atilde;","atilde;","Auml;","auml;","bdquo;","Beta;","beta;","brvbar;","bull;","cap;","Ccedil;","ccedil;","cedil;","cent;","Chi;","chi;","circ;","clubs;","cong;","copy;","crarr;","cup;","curren;","Dagger;","dagger;","dArr;","darr;","deg;","Delta;","delta;","diams;","divide;","Eacute;","eacute;","Ecirc;","ecirc;","Egrave;","egrave;","empty;","emsp;","ensp;","Epsilon;","epsilon;","equiv;","Eta;","eta;","ETH;","eth;","Euml;","euml;","euro;","exist;","fnof;","forall;","frac12;","frac14;","frac34;","frasl;","Gamma;","gamma;","ge;","gt;","hArr;","harr;","hearts;","hellip;","Iacute;","iacute;","Icirc;","icirc;","iexcl;","Igrave;","igrave;","image;","infin;","int;","Iota;","iota;","iquest;","isin;","Iuml;","iuml;","Kappa;","kappa;","Lambda;","lambda;","lang;","laquo;","lArr;","larr;","lceil;","ldquo;","le;","lfloor;","lowast;","loz;","lrm;","lsaquo;","lsquo;","lt;","macr;","mdash;","micro;","middot;","minus;","Mu;","mu;","nabla;","nbsp;","ndash;","ne;","ni;","not;","notin;","nsub;","Ntilde;","ntilde;","Nu;","nu;","Oacute;","oacute;","Ocirc;","ocirc;","OElig;","oelig;","Ograve;","ograve;","oline;","Omega;","omega;","Omicron;","omicron;","oplus;","or;","ordf;","ordm;","Oslash;","oslash;","Otilde;","otilde;","otimes;","Ouml;","ouml;","para;","part;","permil;","perp;","Phi;","phi;","Pi;","pi;","piv;","plusmn;","pound;","Prime;","prime;","prod;","prop;","Psi;","psi;","quot;","radic;","rang;","raquo;","rArr;","rarr;","rceil;","rdquo;","real;","reg;","rfloor;","Rho;","rho;","rlm;","rsaquo;","rsquo;","sbquo;","Scaron;","scaron;","sdot;","sect;","shy;","Sigma;","sigma;","sigmaf;","sim;","spades;","sub;","sube;","sum;","sup;","sup1;","sup2;","sup3;","supe;","szlig;","Tau;","tau;","there4;","Theta;","theta;","thetasym;","thinsp;","THORN;","thorn;","tilde;","times;","trade;","Uacute;","uacute;","uArr;","uarr;","Ucirc;","ucirc;","Ugrave;","ugrave;","uml;","upsih;","Upsilon;","upsilon;","Uuml;","uuml;","weierp;","Xi;","xi;","Yacute;","yacute;","yen;","Yuml;","yuml;","Zeta;","zeta;","zwj;","zwnj;"];return i.map(function(e){return{caption:e,snippet:e,meta:"html entity",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text").Mode,o=e("./javascript").Mode,u=e("./css").Mode,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/xml").XmlBehaviour,l=e("./folding/html").FoldMode,c=e("./html_completions").HtmlCompletions,h=e("../worker/worker_client").WorkerClient,p=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],d=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({"js-":o,"css-":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:""},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/html"}.call(v.prototype),t.Mode=v}),define("ace/mode/markdown_highlight_rules",["require","exports","module","ace/config","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/html_highlight_rules"],function(e,t,n){"use strict";var r=e("../config").$modes,i=e("../lib/oop"),s=e("../lib/lang"),o=e("./text_highlight_rules").TextHighlightRules,u=e("./html_highlight_rules").HtmlHighlightRules,a=function(e){return"(?:[^"+s.escapeRegExp(e)+"\\\\]|\\\\.)*"},f=function(){u.call(this);var e={token:"support.function",regex:/^\s*(```+[^`]*|~~~+[^~]*)$/,onMatch:function(e,t,n,i){var s=e.match(/^(\s*)([`~]+)(.*)/),o=/[\w-]+|$/.exec(s[3])[0];return r[o]||(o=""),n.unshift("githubblock",[],[s[1],s[2],o],t),this.token},next:"githubblock"},t=[{token:"support.function",regex:".*",onMatch:function(e,t,n,i){var s=n[1],o=n[2][0],u=n[2][1],a=n[2][2],f=/^(\s*)(`+|~+)\s*$/.exec(e);if(f&&f[1].length=u.length&&f[2][0]==u[0])return n.splice(0,3),this.next=n.shift(),this.token;this.next="";if(a&&r[a]){var l=r[a].getTokenizer().getLineTokens(e,s.slice(0));return n[1]=l.state,l.tokens}return this.token}}];this.$rules.start.unshift({token:"empty_line",regex:"^$",next:"allowBlock"},{token:"markup.heading.1",regex:"^=+(?=\\s*$)"},{token:"markup.heading.2",regex:"^\\-+(?=\\s*$)"},{token:function(e){return"markup.heading."+e.length},regex:/^#{1,6}(?=\s|$)/,next:"header"},e,{token:"string.blockquote",regex:"^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+",next:"blockquote"},{token:"constant",regex:"^ {0,2}(?:(?: ?\\* ?){3,}|(?: ?\\- ?){3,}|(?: ?\\_ ?){3,})\\s*$",next:"allowBlock"},{token:"markup.list",regex:"^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",next:"listblock-start"},{include:"basic"}),this.addRules({basic:[{token:"constant.language.escape",regex:/\\[\\`*_{}\[\]()#+\-.!]/},{token:"support.function",regex:"(`+)(.*?[^`])(\\1)"},{token:["text","constant","text","url","string","text"],regex:'^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:["][^"]+["])?(\\s*))$'},{token:["text","string","text","constant","text"],regex:"(\\[)("+a("]")+")(\\]\\s*\\[)("+a("]")+")(\\])"},{token:["text","string","text","markup.underline","string","text"],regex:"(\\!?\\[)("+a("]")+")(\\]\\()"+'((?:[^\\)\\s\\\\]|\\\\.|\\s(?=[^"]))*)'+'(\\s*"'+a('"')+'"\\s*)?'+"(\\))"},{token:"string.strong",regex:"([*]{2}|[_]{2}(?=\\S))(.*?\\S[*_]*)(\\1)"},{token:"string.emphasis",regex:"([*]|[_](?=\\S))(.*?\\S[*_]*)(\\1)"},{token:["text","url","text"],regex:"(<)((?:https?|ftp|dict):[^'\">\\s]+|(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+)(>)"}],allowBlock:[{token:"support.function",regex:"^ {4}.+",next:"allowBlock"},{token:"empty_line",regex:"^$",next:"allowBlock"},{token:"empty",regex:"",next:"start"}],header:[{regex:"$",next:"start"},{include:"basic"},{defaultToken:"heading"}],"listblock-start":[{token:"support.variable",regex:/(?:\[[ x]\])?/,next:"listblock"}],listblock:[{token:"empty_line",regex:"^$",next:"start"},{token:"markup.list",regex:"^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",next:"listblock-start"},{include:"basic",noEscape:!0},e,{defaultToken:"list"}],blockquote:[{token:"empty_line",regex:"^\\s*$",next:"start"},{token:"string.blockquote",regex:"^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+",next:"blockquote"},{include:"basic",noEscape:!0},{defaultToken:"string.blockquote"}],githubblock:t}),this.normalizeRules()};i.inherits(f,o),t.MarkdownHighlightRules=f}),define("ace/mode/folding/markdown",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.foldingStartMarker=/^(?:[=-]+\s*$|#{1,6} |`{3})/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?r[0]=="`"?e.bgTokenizer.getState(n)=="start"?"end":"start":"start":""},this.getFoldWidgetRange=function(e,t,n){function l(t){return f=e.getTokens(t)[0],f&&f.type.lastIndexOf(c,0)===0}function h(){var e=f.value[0];return e=="="?6:e=="-"?5:7-f.value.search(/[^#]|$/)}var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(!r.match(this.foldingStartMarker))return;if(r[0]=="`"){if(e.bgTokenizer.getState(n)!=="start"){while(++n0){r=e.getLine(n);if(r[0]=="`"&r.substring(0,3)=="```")break}return new s(n,r.length,u,0)}var f,c="markup.heading";if(l(n)){var p=h();while(++n=p)break}a=n-(!f||["=","-"].indexOf(f.value[0])==-1?1:2);if(a>u)while(a>u&&/^\s*$/.test(e.getLine(a)))a--;if(a>u){var v=e.getLine(a).length;return new s(u,i,a,v)}}}}.call(o.prototype)}),define("ace/mode/sh_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=t.reservedKeywords="!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly",o=t.languageConstructs="[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait",u=function(){var e=this.createKeywordMapper({keyword:s,"support.function.builtin":o,"invalid.deprecated":"debugger"},"identifier"),t="(?:(?:[1-9]\\d*)|(?:0))",n="(?:\\.\\d+)",r="(?:\\d+)",i="(?:(?:"+r+"?"+n+")|(?:"+r+"\\.))",u="(?:(?:"+i+"|"+r+")"+")",a="(?:"+u+"|"+i+")",f="(?:&"+r+")",l="[a-zA-Z_][a-zA-Z0-9_]*",c="(?:"+l+"(?==))",h="(?:\\$(?:SHLVL|\\$|\\!|\\?))",p="(?:"+l+"\\s*\\(\\))";this.$rules={start:[{token:"constant",regex:/\\./},{token:["text","comment"],regex:/(^|\s)(#.*)$/},{token:"string.start",regex:'"',push:[{token:"constant.language.escape",regex:/\\(?:[$`"\\]|$)/},{include:"variables"},{token:"keyword.operator",regex:/`/},{token:"string.end",regex:'"',next:"pop"},{defaultToken:"string"}]},{token:"string",regex:"\\$'",push:[{token:"constant.language.escape",regex:/\\(?:[abeEfnrtv\\'"]|x[a-fA-F\d]{1,2}|u[a-fA-F\d]{4}([a-fA-F\d]{4})?|c.|\d{1,3})/},{token:"string",regex:"'",next:"pop"},{defaultToken:"string"}]},{regex:"<<<",token:"keyword.operator"},{stateName:"heredoc",regex:"(<<-?)(\\s*)(['\"`]?)([\\w\\-]+)(['\"`]?)",onMatch:function(e,t,n){var r=e[2]=="-"?"indentedHeredoc":"heredoc",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:"constant",value:i[1]},{type:"text",value:i[2]},{type:"string",value:i[3]},{type:"support.class",value:i[4]},{type:"string",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||"start","support.class"):(this.next="","string")},regex:".*$",next:"start"}],indentedHeredoc:[{token:"string",regex:"^ +"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||"start","support.class"):(this.next="","string")},regex:".*$",next:"start"}]}},{regex:"$",token:"empty",next:function(e,t){return t[0]==="heredoc"||t[0]==="indentedHeredoc"?t[0]:e}},{token:["keyword","text","text","text","variable"],regex:/(declare|local|readonly)(\s+)(?:(-[fixar]+)(\s+))?([a-zA-Z_][a-zA-Z0-9_]*\b)/},{token:"variable.language",regex:h},{token:"variable",regex:c},{include:"variables"},{token:"support.function",regex:p},{token:"support.function",regex:f},{token:"string",start:"'",end:"'"},{token:"constant.numeric",regex:a},{token:"constant.numeric",regex:t+"\\b"},{token:e,regex:"[a-zA-Z_][a-zA-Z0-9_]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!=|[%&|`]"},{token:"punctuation.operator",regex:";"},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]]"},{token:"paren.rparen",regex:"[\\)\\}]",next:"pop"}],variables:[{token:"variable",regex:/(\$)(\w+)/},{token:["variable","paren.lparen"],regex:/(\$)(\()/,push:"start"},{token:["variable","paren.lparen","keyword.operator","variable","keyword.operator"],regex:/(\$)(\{)([#!]?)(\w+|[*@#?\-$!0_])(:[?+\-=]?|##?|%%?|,,?\/|\^\^?)?/,push:"start"},{token:"variable",regex:/\$[*@#?\-$!0_]/},{token:["variable","paren.lparen"],regex:/(\$)(\{)/,push:"start"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),define("ace/mode/sh",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sh_highlight_rules","ace/range","ace/mode/folding/cstyle","ace/mode/behaviour/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./sh_highlight_rules").ShHighlightRules,o=e("../range").Range,u=e("./folding/cstyle").FoldMode,a=e("./behaviour/cstyle").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart="#",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[:]\s*$/);o&&(r+=n)}return r};var e={pass:1,"return":1,raise:1,"break":1,"continue":1};this.checkOutdent=function(t,n,r){if(r!=="\r\n"&&r!=="\r"&&r!=="\n")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type=="comment"||s.type=="text"&&s.value.match(/^\s+$/)));return s?s.type=="keyword"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id="ace/mode/sh"}.call(f.prototype),t.Mode=f}),define("ace/mode/markdown",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/xml","ace/mode/html","ace/mode/markdown_highlight_rules","ace/mode/folding/markdown","ace/mode/javascript","ace/mode/html","ace/mode/sh","ace/mode/sh","ace/mode/xml","ace/mode/css"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript").Mode,o=e("./xml").Mode,u=e("./html").Mode,a=e("./markdown_highlight_rules").MarkdownHighlightRules,f=e("./folding/markdown").FoldMode,l=function(){this.HighlightRules=a,this.createModeDelegates({javascript:e("./javascript").Mode,html:e("./html").Mode,bash:e("./sh").Mode,sh:e("./sh").Mode,xml:e("./xml").Mode,css:e("./css").Mode}),this.foldingRules=new f,this.$behaviour=this.$defaultBehaviour};r.inherits(l,i),function(){this.type="text",this.blockComment={start:""},this.getNextLineIndent=function(e,t,n){if(e=="listblock"){var r=/^(\s*)(?:([-+*])|(\d+)\.)(\s+)/.exec(t);if(!r)return"";var i=r[2];return i||(i=parseInt(r[3],10)+1+"."),r[1]+i+r[4]}return this.$getIndent(t)},this.$id="ace/mode/markdown"}.call(l.prototype),t.Mode=l}); (function() { + window.require(["ace/mode/markdown"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-mysql.js b/BTPanel/static/ace/mode-mysql.js new file mode 100644 index 00000000..1dc656c2 --- /dev/null +++ b/BTPanel/static/ace/mode-mysql.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/mysql_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=function(){function i(e){var t=e.start,n=e.escape;return{token:"string.start",regex:t,next:[{token:"constant.language.escape",regex:n},{token:"string.end",next:"start",regex:t},{defaultToken:"string"}]}}var e="alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|coalesce|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat",t="by|bool|boolean|bit|blob|decimal|double|enum|float|long|longblob|longtext|medium|mediumblob|mediumint|mediumtext|time|timestamp|tinyblob|tinyint|tinytext|text|bigint|int|int1|int2|int3|int4|int8|integer|float|float4|float8|double|char|varbinary|varchar|varcharacter|precision|date|datetime|year|unsigned|signed|numeric|ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nvl",n="charset|clear|connect|edit|ego|exit|go|help|nopager|notee|nowarning|pager|print|prompt|quit|rehash|source|status|system|tee",r=this.createKeywordMapper({"support.function":t,keyword:e,constant:"false|true|null|unknown|date|time|timestamp|ODBCdotTable|zerolessFloat","variable.language":n},"identifier",!0);this.$rules={start:[{token:"comment",regex:"(?:-- |#).*$"},i({start:'"',escape:/\\[0'"bnrtZ\\%_]?/}),i({start:"'",escape:/\\[0'"bnrtZ\\%_]?/}),s.getStartRule("doc-start"),{token:"comment",regex:/\/\*/,next:"comment"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+|[xX]'[0-9a-fA-F]+'|0[bB][01]+|[bB]'[01]+'/},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"constant.class",regex:"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"constant.buildin",regex:"`[^`]*`"},{token:"keyword.operator",regex:"\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\(]"},{token:"paren.rparen",regex:"[\\)]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}]},this.embedRules(s,"doc-",[s.getEndRule("start")]),this.normalizeRules()};r.inherits(u,o),t.MysqlHighlightRules=u}),define("ace/mode/mysql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/mysql_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../mode/text").Mode,s=e("./mysql_highlight_rules").MysqlHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=["--","#"],this.blockComment={start:"/*",end:"*/"},this.$id="ace/mode/mysql"}.call(o.prototype),t.Mode=o}); (function() { + window.require(["ace/mode/mysql"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-nginx.js b/BTPanel/static/ace/mode-nginx.js new file mode 100644 index 00000000..ccc35582 --- /dev/null +++ b/BTPanel/static/ace/mode-nginx.js @@ -0,0 +1,8 @@ +define("ace/mode/nginx_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="include|index|absolute_redirect|aio|output_buffers|directio|sendfile|aio_write|alias|root|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|default_type|disable_symlinks|directio_alignment|error_page|etag|if_modified_since|ignore_invalid_headers|internal|keepalive_requests|keepalive_disable|keepalive_timeout|limit_except|large_client_header_buffers|limit_rate|limit_rate_after|lingering_close|lingering_time|lingering_timeout|listen|log_not_found|log_subrequest|max_ranges|merge_slashes|msie_padding|msie_refresh|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|output_buffers|port_in_redirect|postpone_output|read_ahead|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|satisfy|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|subrequest_output_buffer_size|tcp_nodelay|tcp_nopush|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|variables_hash_bucket_size|variables_hash_max_size|accept_mutex|accept_mutex_delay|debug_connection|error_log|daemon|debug_points|env|load_module|lock_file|master_process|multi_accept|pcre_jit|pid|ssl_engine|thread_pool|timer_resolution|use|user|worker_aio_requests|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_shutdown_timeout|working_directory|allow|deny|add_before_body|add_after_body|addition_types|api|status_zone|auth_basic|auth_basic_user_file|auth_jwt|auth_jwt|auth_jwt_claim_set|auth_jwt_header_set|auth_jwt_key_file|auth_jwt_key_request|auth_jwt_leeway|auth_request|auth_request_set|autoindex|autoindex_exact_size|autoindex_format|autoindex_localtime|ancient_browser|ancient_browser_value|modern_browser|modern_browser_value|charset|charset_map|charset_types|override_charset|source_charset|create_full_put_path|dav_access|dav_methods|min_delete_depth|empty_gif|f4f|f4f_buffer_size|fastcgi_bind|fastcgi_buffer_size|fastcgi_buffering|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_background_update|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_age|fastcgi_cache_lock_timeout|fastcgi_cache_max_range_offset|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_revalidate|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_catch_stderr|fastcgi_connect_timeout|fastcgi_force_ranges|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_limit_rate|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_next_upstream_timeout|fastcgi_next_upstream_tries|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_pass_request_body|fastcgi_pass_request_headers|fastcgi_read_timeout|fastcgi_request_buffering|fastcgi_send_lowat|fastcgi_send_timeout|fastcgi_socket_keepalive|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geoip_country|geoip_city|geoip_org|geoip_proxy|geoip_proxy_recursive|grpc_bind|grpc_buffer_size|grpc_connect_timeout|grpc_hide_header|grpc_ignore_headers|grpc_intercept_errors|grpc_next_upstream|grpc_next_upstream_timeout|grpc_next_upstream_tries|grpc_pass|grpc_pass_header|grpc_read_timeout|grpc_send_timeout|grpc_set_header|grpc_socket_keepalive|grpc_ssl_certificate|grpc_ssl_certificate_key|grpc_ssl_ciphers|grpc_ssl_crl|grpc_ssl_name|grpc_ssl_password_file|grpc_ssl_protocols|grpc_ssl_server_name|grpc_ssl_session_reuse|grpc_ssl_trusted_certificate|grpc_ssl_verify|grpc_ssl_verify_depth|gunzip|gunzip_buffers|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_types|gzip_vary|gzip_static|add_header|add_trailer|expires|hlshls_buffers|hls_forward_args|hls_fragment|hls_mp4_buffer_size|hls_mp4_max_buffer_size|image_filter|image_filter_buffer|image_filter_interlace|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|image_filter_webp_quality|js_content|js_include|js_set|keyval|keyval_zone|limit_conn|limit_conn_log_level|limit_conn_status|limit_conn_zone|limit_zone|limit_req|limit_req_log_level|limit_req_status|limit_req_zone|access_log|log_format|open_log_file_cache|map_hash_bucket_size|map_hash_max_size|memcached_bind|memcached_buffer_size|memcached_connect_timeout|memcached_force_ranges|memcached_gzip_flag|memcached_next_upstream|memcached_next_upstream_timeout|memcached_next_upstream_tries|memcached_pass|memcached_read_timeout|memcached_send_timeout|memcached_socket_keepalive|mirror|mirror_request_body|mp4|mp4_buffer_size|mp4_max_buffer_size|mp4_limit_rate|mp4_limit_rate_after|perl_modules|perl_require|perl_set|proxy_bind|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_background_update|proxy_cache_bypass|proxy_cache_convert_head|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_age|proxy_cache_lock_timeout|proxy_cache_max_range_offset|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_purge|proxy_cache_revalidate|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_force_ranges|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_limit_rate|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_next_upstream_timeout|proxy_next_upstream_tries|proxy_no_cache|proxy_pass|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_socket_keepalive|proxy_ssl_certificate|proxy_ssl_certificate_key|proxy_ssl_ciphers|proxy_ssl_crl|proxy_ssl_name|proxy_ssl_password_file|proxy_ssl_protocols|proxy_ssl_server_name|proxy_ssl_session_reuse|proxy_ssl_trusted_certificate|proxy_ssl_verify|proxy_ssl_verify_depth|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|random_index|set_real_ip_from|real_ip_header|real_ip_recursive|referer_hash_bucket_size|referer_hash_max_size|valid_referers|break|return|rewrite_log|set|uninitialized_variable_warn|scgi_bind|scgi_buffer_size|scgi_buffering|scgi_buffers|scgi_busy_buffers_size|scgi_cache|scgi_cache_background_update|scgi_cache_key|scgi_cache_lock|scgi_cache_lock_age|scgi_cache_lock_timeout|scgi_cache_max_range_offset|scgi_cache_methods|scgi_cache_min_uses|scgi_cache_path|scgi_cache_purge|scgi_cache_revalidate|scgi_cache_use_stale|scgi_cache_valid|scgi_connect_timeout|scgi_force_ranges|scgi_hide_header|scgi_ignore_client_abort|scgi_ignore_headers|scgi_intercept_errors|scgi_limit_rate|scgi_max_temp_file_size|scgi_next_upstream|scgi_next_upstream_timeout|scgi_next_upstream_tries|scgi_no_cache|scgi_param|scgi_pass|scgi_pass_header|scgi_pass_request_body|scgi_pass_request_headers|scgi_read_timeout|scgi_request_buffering|scgi_send_timeout|scgi_socket_keepalive|scgi_store|scgi_store_access|scgi_temp_file_write_size|scgi_temp_path|secure_link|secure_link_md5|secure_link_secret|session_log|session_log_format|session_log_zone|slice|spdy_chunk_size|spdy_headers_comp|ssi|ssi_last_modified|ssi_min_file_chunk|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_buffer_size|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_early_data|ssl_ecdh_curve|ssl_password_file|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_ticket_key|ssl_session_tickets|ssl_session_timeout|ssl_stapling|ssl_stapling_file|ssl_stapling_responder|ssl_stapling_verify|ssl_trusted_certificate|ssl_verify_client|ssl_verify_depth|status|status_format|status_zone|stub_status|sub_filter|sub_filter_last_modified|sub_filter_once|sub_filter_types|server|zone|state|hash|ip_hash|keepalive|keepalive_requests|keepalive_timeout|ntlm|least_conn|least_time|queue|random|sticky|sticky_cookie_insert|upstream_conf|health_check|userid|userid_domain|userid_expires|userid_mark|userid_name|userid_p3p|userid_path|userid_service|uwsgi_bind|uwsgi_buffer_size|uwsgi_buffering|uwsgi_buffers|uwsgi_busy_buffers_size|uwsgi_cache|uwsgi_cache_background_update|uwsgi_cache_bypass|uwsgi_cache_key|uwsgi_cache_lock|uwsgi_cache_lock_age|uwsgi_cache_lock_timeout|uwsgi_cache_max_range_offset|uwsgi_cache_methods|uwsgi_cache_min_uses|uwsgi_cache_path|uwsgi_cache_purge|uwsgi_cache_revalidate|uwsgi_cache_use_stale|uwsgi_cache_valid|uwsgi_connect_timeout|uwsgi_force_ranges|uwsgi_hide_header|uwsgi_ignore_client_abort|uwsgi_ignore_headers|uwsgi_intercept_errors|uwsgi_limit_rate|uwsgi_max_temp_file_size|uwsgi_modifier1|uwsgi_modifier2|uwsgi_next_upstream|uwsgi_next_upstream_timeout|uwsgi_next_upstream_tries|uwsgi_no_cache|uwsgi_param|uwsgi_pass|uwsgi_pass_header|uwsgi_pass_request_body|uwsgi_pass_request_headers|uwsgi_read_timeout|uwsgi_request_buffering|uwsgi_send_timeout|uwsgi_socket_keepalive|uwsgi_ssl_certificate|uwsgi_ssl_certificate_key|uwsgi_ssl_ciphers|uwsgi_ssl_crl|uwsgi_ssl_name|uwsgi_ssl_password_file|uwsgi_ssl_protocols|uwsgi_ssl_server_name|uwsgi_ssl_session_reuse|uwsgi_ssl_trusted_certificate|uwsgi_ssl_verify|uwsgi_ssl_verify_depth|uwsgi_store|uwsgi_store_access|uwsgi_temp_file_write_size|uwsgi_temp_path|http2_body_preread_size|http2_chunk_size|http2_idle_timeout|http2_max_concurrent_pushes|http2_max_concurrent_streams|http2_max_field_size|http2_max_header_size|http2_max_requests|http2_push|http2_push_preload|http2_recv_buffer_size|http2_recv_timeout|xml_entities|xslt_last_modified|xslt_param|xslt_string_param|xslt_stylesheet|xslt_types|listen|protocol|resolver|resolver_timeout|timeout|auth_http|auth_http_header|auth_http_pass_client_cert|auth_http_timeout|proxy_buffer|proxy_pass_error_message|proxy_timeout|xclient|starttls|imap_auth|imap_capabilities|imap_client_buffer|pop3_auth|pop3_capabilities|smtp_auth|smtp_capabilities|smtp_client_buffer|smtp_greeting_delay|preread_buffer_size|preread_timeout|proxy_protocol_timeout|js_access|js_filter|js_preread|proxy_download_rate|proxy_requests|proxy_responses|proxy_upload_rate|ssl_handshake_timeout|ssl_preread|health_check_timeout|zone_sync|zone_sync_buffers|zone_sync_connect_retry_interval|zone_sync_connect_timeout|zone_sync_interval|zone_sync_recv_buffer_size|zone_sync_server|zone_sync_ssl|zone_sync_ssl_certificate|zone_sync_ssl_certificate_key|zone_sync_ssl_ciphers|zone_sync_ssl_crl|zone_sync_ssl_name|zone_sync_ssl_password_file|zone_sync_ssl_protocols|zone_sync_ssl_server_name|zone_sync_ssl_trusted_certificate|zone_sync_ssl_verify_depth|zone_sync_timeout|google_perftools_profiles|proxy|perl";this.$rules={start:[{token:["storage.type","text","string.regexp","paren.lpar"],regex:"\\b(location)(\\s+)([\\^]?~[\\*]?\\s+.*?)({)"},{token:["storage.type","text","text","paren.lpar"],regex:"\\b(location|match|upstream)(\\s+)(.*?)({)"},{token:["storage.type","text","string","text","variable","text","paren.lpar"],regex:'\\b(split_clients|map)(\\s+)(\\".*\\")(\\s+)(\\$[\\w_]+)(\\s*)({)'},{token:["storage.type","text","paren.lpar"],regex:"\\b(http|events|server|mail|stream)(\\s*)({)"},{token:["storage.type","text","variable","text","variable","text","paren.lpar"],regex:"\\b(geo|map)(\\s+)(\\$[\\w_]+)?(\\s*)(\\$[\\w_]+)(\\s*)({)"},{token:"paren.rpar",regex:"(})"},{token:"paren.lpar",regex:"({)"},{token:["storage.type","text","paren.lpar"],regex:"\\b(if)(\\s+)(\\()",push:[{token:"paren.rpar",regex:"\\)|$",next:"pop"},{include:"lexical"}]},{token:"keyword",regex:"\\b("+e+")\\b",push:[{token:"punctuation",regex:";",next:"pop"},{include:"lexical"}]},{token:["keyword","text","string.regexp","text","punctuation"],regex:"\\b(rewrite)(\\s)(\\S*)(\\s.*)(;)"},{include:"lexical"},{include:"comments"}],comments:[{token:"comment",regex:"#.*$"}],lexical:[{token:"string",regex:"'",push:[{token:"string",regex:"'",next:"pop"},{include:"variables"},{defaultToken:"string"}]},{token:"string",regex:'"',push:[{token:"string",regex:'"',next:"pop"},{include:"variables"},{defaultToken:"string"}]},{token:"string.regexp",regex:/[!]?[~][*]?\s+.*(?=\))/},{token:"string.regexp",regex:/[\^]\S*(?=;$)/},{token:"string.regexp",regex:/[\^]\S*(?=;|\s|$)/},{token:"keyword.operator",regex:"\\B(\\+|\\-|\\*|\\=|!=)\\B"},{token:"constant.language",regex:"\\b(true|false|on|off|all|any|main|always)\\b"},{token:"text",regex:"\\s+"},{include:"variables"}],variables:[{token:"variable",regex:"\\$[\\w_]+"},{token:"variable.language",regex:"\\b(GET|POST|HEAD)\\b"}]},this.normalizeRules()};r.inherits(s,i),t.NginxHighlightRules=s}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/nginx",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/nginx_highlight_rules","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./nginx_highlight_rules").NginxHighlightRules,o=e("./folding/cstyle").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart="#",this.$id="ace/mode/nginx"}.call(u.prototype),t.Mode=u}); (function() { + window.require(["ace/mode/nginx"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-objectivec.js b/BTPanel/static/ace/mode-objectivec.js new file mode 100644 index 00000000..6f05dc72 --- /dev/null +++ b/BTPanel/static/ace/mode-objectivec.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=t.cFunctions="\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\b",u=function(){var e="break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using",t="asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t",n="const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local",r="and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace",s="NULL|true|false|TRUE|FALSE|nullptr",u=this.$keywords=this.createKeywordMapper({"keyword.control":e,"storage.type":t,"storage.modifier":n,"keyword.operator":r,"variable.language":"this","constant.language":s},"identifier"),a="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b",f=/\\(?:['"?\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}U[a-fA-F\d]{8}|.)/.source,l="%"+/(\d+\$)?/.source+/[#0\- +']*/.source+/[,;:_]?/.source+/((-?\d+)|\*(-?\d+\$)?)?/.source+/(\.((-?\d+)|\*(-?\d+\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\[[^"\]]+\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:"comment",regex:"//$",next:"start"},{token:"comment",regex:"//",next:"singleLineComment"},i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:"'(?:"+f+"|.)?'"},{token:"string.start",regex:'"',stateName:"qqstring",next:[{token:"string",regex:/\\\s*$/,next:"qqstring"},{token:"constant.language.escape",regex:f},{token:"constant.language.escape",regex:l},{token:"string.end",regex:'"|$',next:"start"},{defaultToken:"string"}]},{token:"string.start",regex:'R"\\(',stateName:"rawString",next:[{token:"string.end",regex:'\\)"',next:"start"},{defaultToken:"string"}]},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:"keyword",regex:"#\\s*(?:include|import|pragma|line|define|undef)\\b",next:"directive"},{token:"keyword",regex:"#\\s*(?:endif|if|ifdef|else|elif|ifndef)\\b"},{token:"support.function.C99.c",regex:o},{token:u,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*"},{token:"keyword.operator",regex:/--|\+\+|<<=|>>=|>>>=|<>|&&|\|\||\?:|[*%\/+\-&\^|~!<>=]=?/},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],singleLineComment:[{token:"comment",regex:/\\$/,next:"singleLineComment"},{token:"comment",regex:/$/,next:"start"},{defaultToken:"comment"}],directive:[{token:"constant.other.multiline",regex:/\\/},{token:"constant.other.multiline",regex:/.*\\/},{token:"constant.other",regex:"\\s*<.+?>",next:"start"},{token:"constant.other",regex:'\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]',next:"start"},{token:"constant.other",regex:"\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']",next:"start"},{token:"constant.other",regex:/[^\\\/]+/,next:"start"}]},this.embedRules(i,"doc-",[i.getEndRule("start")]),this.normalizeRules()};r.inherits(u,s),t.c_cppHighlightRules=u}),define("ace/mode/objectivec_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/c_cpp_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./c_cpp_highlight_rules"),o=s.c_cppHighlightRules,u=function(){var e="\\\\(?:[abefnrtv'\"?\\\\]|[0-3]\\d{1,2}|[4-7]\\d?|222|x[a-zA-Z0-9]+)",t=[{regex:"\\b_cmd\\b",token:"variable.other.selector.objc"},{regex:"\\b(?:self|super)\\b",token:"variable.language.objc"}],n=new o,r=n.getRules();this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:["storage.type.objc","punctuation.definition.storage.type.objc","entity.name.type.objc","text","entity.other.inherited-class.objc"],regex:"(@)(interface|protocol)(?!.+;)(\\s+[A-Za-z_][A-Za-z0-9_]*)(\\s*:\\s*)([A-Za-z]+)"},{token:["storage.type.objc"],regex:"(@end)"},{token:["storage.type.objc","entity.name.type.objc","entity.other.inherited-class.objc"],regex:"(@implementation)(\\s+[A-Za-z_][A-Za-z0-9_]*)(\\s*?::\\s*(?:[A-Za-z][A-Za-z0-9]*))?"},{token:"string.begin.objc",regex:'@"',next:"constant_NSString"},{token:"storage.type.objc",regex:"\\bid\\s*<",next:"protocol_list"},{token:"keyword.control.macro.objc",regex:"\\bNS_DURING|NS_HANDLER|NS_ENDHANDLER\\b"},{token:["punctuation.definition.keyword.objc","keyword.control.exception.objc"],regex:"(@)(try|catch|finally|throw)\\b"},{token:["punctuation.definition.keyword.objc","keyword.other.objc"],regex:"(@)(defs|encode)\\b"},{token:["storage.type.id.objc","text"],regex:"(\\bid\\b)(\\s|\\n)?"},{token:"storage.type.objc",regex:"\\bIBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class\\b"},{token:["punctuation.definition.storage.type.objc","storage.type.objc"],regex:"(@)(class|protocol)\\b"},{token:["punctuation.definition.storage.type.objc","punctuation"],regex:"(@selector)(\\s*\\()",next:"selectors"},{token:["punctuation.definition.storage.modifier.objc","storage.modifier.objc"],regex:"(@)(synchronized|public|private|protected|package)\\b"},{token:"constant.language.objc",regex:"\\bYES|NO|Nil|nil\\b"},{token:"support.variable.foundation",regex:"\\bNSApp\\b"},{token:["support.function.cocoa.leopard"],regex:"(?:\\b)(NS(?:Rect(?:ToCGRect|FromCGRect)|MakeCollectable|S(?:tringFromProtocol|ize(?:ToCGSize|FromCGSize))|Draw(?:NinePartImage|ThreePartImage)|P(?:oint(?:ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))(?:\\b)"},{token:["support.function.cocoa"],regex:"(?:\\b)(NS(?:R(?:ound(?:DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(?:CriticalAlertPanel(?:RelativeToWindow)?|InformationalAlertPanel(?:RelativeToWindow)?|AlertPanel(?:RelativeToWindow)?)|e(?:set(?:MapTable|HashTable)|c(?:ycleZone|t(?:Clip(?:List)?|F(?:ill(?:UsingOperation|List(?:UsingOperation|With(?:Grays|Colors(?:UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(?:dPixel|l(?:MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(?:SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(?:s)?|WindowServerMemory|AlertPanel)|M(?:i(?:n(?:X|Y)|d(?:X|Y))|ouseInRect|a(?:p(?:Remove|Get|Member|Insert(?:IfAbsent|KnownAbsent)?)|ke(?:R(?:ect|ange)|Size|Point)|x(?:Range|X|Y)))|B(?:itsPer(?:SampleFromDepth|PixelFromDepth)|e(?:stDepth|ep|gin(?:CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(?:ho(?:uldRetainWithZone|w(?:sServicesMenuItem|AnimationEffect))|tringFrom(?:R(?:ect|ange)|MapTable|S(?:ize|elector)|HashTable|Class|Point)|izeFromString|e(?:t(?:ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(?:Big(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|Short|Host(?:ShortTo(?:Big|Little)|IntTo(?:Big|Little)|DoubleTo(?:Big|Little)|FloatTo(?:Big|Little)|Long(?:To(?:Big|Little)|LongTo(?:Big|Little)))|Int|Double|Float|L(?:ittle(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|ong(?:Long)?)))|H(?:ighlightRect|o(?:stByteOrder|meDirectory(?:ForUser)?)|eight|ash(?:Remove|Get|Insert(?:IfAbsent|KnownAbsent)?)|FSType(?:CodeFromFileType|OfFile))|N(?:umberOfColorComponents|ext(?:MapEnumeratorPair|HashEnumeratorItem))|C(?:o(?:n(?:tainsRect|vert(?:GlyphsToPackedGlyphs|Swapped(?:DoubleToHost|FloatToHost)|Host(?:DoubleToSwapped|FloatToSwapped)))|unt(?:MapTable|HashTable|Frames|Windows(?:ForContext)?)|py(?:M(?:emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(?:MapTables|HashTables))|lassFromString|reate(?:MapTable(?:WithZone)?|HashTable(?:WithZone)?|Zone|File(?:namePboardType|ContentsPboardType)))|TemporaryDirectory|I(?:s(?:ControllerMarker|EmptyRect|FreedObject)|n(?:setRect|crementExtraRefCount|te(?:r(?:sect(?:sRect|ionR(?:ect|ange))|faceStyleForKey)|gralRect)))|Zone(?:Realloc|Malloc|Name|Calloc|Fr(?:omPointer|ee))|O(?:penStepRootDirectory|ffsetRect)|D(?:i(?:sableScreenUpdates|videRect)|ottedFrameRect|e(?:c(?:imal(?:Round|Multiply|S(?:tring|ubtract)|Normalize|Co(?:py|mpa(?:ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(?:MemoryPages|Object))|raw(?:Gr(?:oove|ayBezel)|B(?:itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(?:hiteBezel|indowBackground)|LightBezel))|U(?:serName|n(?:ionR(?:ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(?:Bundle(?:Setup|Cleanup)|Setup(?:VirtualMachine)?|Needs(?:ToLoadClasses|VirtualMachine)|ClassesF(?:orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(?:oint(?:InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(?:n(?:d(?:MapTableEnumeration|HashTableEnumeration)|umerate(?:MapTable|HashTable)|ableScreenUpdates)|qual(?:R(?:ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(?:ileTypeForHFSTypeCode|ullUserName|r(?:ee(?:MapTable|HashTable)|ame(?:Rect(?:WithWidth(?:UsingOperation)?)?|Address)))|Wi(?:ndowList(?:ForContext)?|dth)|Lo(?:cationInRange|g(?:v|PageSize)?)|A(?:ccessibility(?:R(?:oleDescription(?:ForUIElement)?|aiseBadArgumentException)|Unignored(?:Children(?:ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(?:Main|Load)|vailableWindowDepths|ll(?:MapTable(?:Values|Keys)|HashTableObjects|ocate(?:MemoryPages|Collectable|Object)))))(?:\\b)"},{token:["support.class.cocoa.leopard"],regex:"(?:\\b)(NS(?:RuleEditor|G(?:arbageCollector|radient)|MapTable|HashTable|Co(?:ndition|llectionView(?:Item)?)|T(?:oolbarItemGroup|extInputClient|r(?:eeNode|ackingArea))|InvocationOperation|Operation(?:Queue)?|D(?:ictionaryController|ockTile)|P(?:ointer(?:Functions|Array)|athC(?:o(?:ntrol(?:Delegate)?|mponentCell)|ell(?:Delegate)?)|r(?:intPanelAccessorizing|edicateEditor(?:RowTemplate)?))|ViewController|FastEnumeration|Animat(?:ionContext|ablePropertyContainer)))(?:\\b)"},{token:["support.class.cocoa"],regex:"(?:\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\b)"},{token:["support.type.cocoa.leopard"],regex:"(?:\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\b)"},{token:["support.class.quartz"],regex:"(?:\\b)(C(?:I(?:Sampler|Co(?:ntext|lor)|Image(?:Accumulator)?|PlugIn(?:Registration)?|Vector|Kernel|Filter(?:Generator|Shape)?)|A(?:Renderer|MediaTiming(?:Function)?|BasicAnimation|ScrollLayer|Constraint(?:LayoutManager)?|T(?:iledLayer|extLayer|rans(?:ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(?:nimation(?:Group)?|ction))))(?:\\b)"},{token:["support.type.quartz"],regex:"(?:\\b)(C(?:G(?:Float|Point|Size|Rect)|IFormat|AConstraintAttribute))(?:\\b)"},{token:["support.type.cocoa"],regex:"(?:\\b)(NS(?:R(?:ect(?:Edge)?|ange)|G(?:lyph(?:Relation|LayoutMode)?|radientType)|M(?:odalSession|a(?:trixMode|p(?:Table|Enumerator)))|B(?:itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(?:cr(?:oll(?:er(?:Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(?:Granularity|Direction|Affinity)|wapped(?:Double|Float)|aveOperationType)|Ha(?:sh(?:Table|Enumerator)|ndler(?:2)?)|C(?:o(?:ntrol(?:Size|Tint)|mp(?:ositingOperation|arisonResult))|ell(?:State|Type|ImagePosition|Attribute))|T(?:hreadPrivate|ypesetterGlyphInfo|i(?:ckMarkPosition|tlePosition|meInterval)|o(?:ol(?:TipTag|bar(?:SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(?:TabType|Alignment)|ab(?:State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(?:ContextAuxiliary|PixelFormatAuxiliary)|D(?:ocumentChangeType|atePickerElementFlags|ra(?:werState|gOperation))|UsableScrollerParts|P(?:oint|r(?:intingPageOrder|ogressIndicator(?:Style|Th(?:ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(?:nt(?:SymbolicTraits|TraitMask|Action)|cusRingType)|W(?:indow(?:OrderingMode|Depth)|orkspace(?:IconCreationOptions|LaunchOptions)|ritingDirection)|L(?:ineBreakMode|ayout(?:Status|Direction))|A(?:nimation(?:Progress|Effect)|ppl(?:ication(?:TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle)))(?:\\b)"},{token:["support.constant.cocoa"],regex:"(?:\\b)(NS(?:NotFound|Ordered(?:Ascending|Descending|Same)))(?:\\b)"},{token:["support.constant.notification.cocoa.leopard"],regex:"(?:\\b)(NS(?:MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification)(?:\\b)"},{token:["support.constant.notification.cocoa"],regex:"(?:\\b)(NS(?:Menu(?:Did(?:RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(?:ystemColorsDidChange|plitView(?:DidResizeSubviews|WillResizeSubviews))|C(?:o(?:nt(?:extHelpModeDid(?:Deactivate|Activate)|rolT(?:intDidChange|extDid(?:BeginEditing|Change|EndEditing)))|lor(?:PanelColorDidChange|ListDidChange)|mboBox(?:Selection(?:IsChanging|DidChange)|Will(?:Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(?:oolbar(?:DidRemoveItem|WillAddItem)|ext(?:Storage(?:DidProcessEditing|WillProcessEditing)|Did(?:BeginEditing|Change|EndEditing)|View(?:DidChange(?:Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)))|ImageRepRegistryDidChange|OutlineView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)|Item(?:Did(?:Collapse|Expand)|Will(?:Collapse|Expand)))|Drawer(?:Did(?:Close|Open)|Will(?:Close|Open))|PopUpButton(?:CellWillPopUp|WillPopUp)|View(?:GlobalFrameDidChange|BoundsDidChange|F(?:ocusDidChange|rameDidChange))|FontSetChanged|W(?:indow(?:Did(?:Resi(?:ze|gn(?:Main|Key))|M(?:iniaturize|ove)|Become(?:Main|Key)|ChangeScreen(?:|Profile)|Deminiaturize|Update|E(?:ndSheet|xpose))|Will(?:M(?:iniaturize|ove)|BeginSheet|Close))|orkspace(?:SessionDid(?:ResignActive|BecomeActive)|Did(?:Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(?:Sleep|Unmount|PowerOff|LaunchApplication)))|A(?:ntialiasThresholdChanged|ppl(?:ication(?:Did(?:ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(?:nhide|pdate)|FinishLaunching)|Will(?:ResignActive|BecomeActive|Hide|Terminate|U(?:nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification)(?:\\b)"},{token:["support.constant.cocoa.leopard"],regex:"(?:\\b)(NS(?:RuleEditor(?:RowType(?:Simple|Compound)|NestingMode(?:Si(?:ngle|mple)|Compound|List))|GradientDraws(?:BeforeStartingLocation|AfterEndingLocation)|M(?:inusSetExpressionType|a(?:chPortDeallocate(?:ReceiveRight|SendRight|None)|pTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(?:oxCustom|undleExecutableArchitecture(?:X86|I386|PPC(?:64)?)|etweenPredicateOperatorType|ackgroundStyle(?:Raised|Dark|L(?:ight|owered)))|S(?:tring(?:DrawingTruncatesLastVisibleLine|EncodingConversion(?:ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(?:e(?:ech(?:SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(?:GrammarFlag|SpellingFlag))|litViewDividerStyleThi(?:n|ck))|e(?:rvice(?:RequestTimedOutError|M(?:iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(?:inimum|aximum)|Application(?:NotFoundError|LaunchFailedError))|gmentStyle(?:Round(?:Rect|ed)|SmallSquare|Capsule|Textured(?:Rounded|Square)|Automatic)))|H(?:UDWindowMask|ashTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(?:oModeColorPanel|etServiceNoAutoRename)|C(?:hangeRedone|o(?:ntainsPredicateOperatorType|l(?:orRenderingIntent(?:RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(?:None|ContentArea|TrackableArea|EditableTextArea))|T(?:imeZoneNameStyle(?:S(?:hort(?:Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(?:Regular|SourceList)|racking(?:Mouse(?:Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(?:ssumeInside|ctive(?:In(?:KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(?:n(?:tersectSetExpressionType|dexedColorSpaceModel)|mageScale(?:None|Proportionally(?:Down|UpOrDown)|AxesIndependently))|Ope(?:nGLPFAAllowOfflineRenderers|rationQueue(?:DefaultMaxConcurrentOperationCount|Priority(?:High|Normal|Very(?:High|Low)|Low)))|D(?:iacriticInsensitiveSearch|ownloadsDirectory)|U(?:nionSetExpressionType|TF(?:16(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(?:ointerFunctions(?:Ma(?:chVirtualMemory|llocMemory)|Str(?:ongMemory|uctPersonality)|C(?:StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(?:paque(?:Memory|Personality)|bjectP(?:ointerPersonality|ersonality)))|at(?:hStyle(?:Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(?:Scaling|Copies|Orientation|P(?:a(?:perSize|ge(?:Range|SetupAccessory))|review)))|Executable(?:RuntimeMismatchError|NotLoadableError|ErrorM(?:inimum|aximum)|L(?:inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(?:Initial|Prior)|F(?:i(?:ndPanelSubstringMatchType(?:StartsWith|Contains|EndsWith|FullWord)|leRead(?:TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(?:ndow(?:BackingLocation(?:MainMemory|Default|VideoMemory)|Sharing(?:Read(?:Only|Write)|None)|CollectionBehavior(?:MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType))(?:\\b)"},{token:["support.constant.cocoa"],regex:"(?:\\b)(NS(?:R(?:GB(?:ModeColorPanel|ColorSpaceModel)|ight(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey)|ound(?:RectBezelStyle|Bankers|ed(?:BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(?:CapStyle|JoinStyle))|un(?:StoppedResponse|ContinuesResponse|AbortedResponse)|e(?:s(?:izableWindowMask|et(?:CursorRectsRunLoopOrdering|FunctionKey))|ce(?:ssedBezelStyle|iver(?:sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(?:evancyLevelIndicatorStyle|ative(?:Before|After))|gular(?:SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(?:n(?:domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(?:ModeMatrix|Button)))|G(?:IFFileType|lyph(?:Below|Inscribe(?:B(?:elow|ase)|Over(?:strike|Below)|Above)|Layout(?:WithPrevious|A(?:tAPoint|gainstAPoint))|A(?:ttribute(?:BidiLevel|Soft|Inscribe|Elastic)|bove))|r(?:ooveBorder|eaterThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|a(?:y(?:ModeColorPanel|ColorSpaceModel)|dient(?:None|Con(?:cave(?:Strong|Weak)|vex(?:Strong|Weak)))|phiteControlTint)))|XML(?:N(?:o(?:tationDeclarationKind|de(?:CompactEmptyElement|IsCDATA|OptionsNone|Use(?:SingleQuotes|DoubleQuotes)|Pre(?:serve(?:NamespaceOrder|C(?:haracterReferences|DATA)|DTD|Prefixes|E(?:ntities|mptyElements)|Quotes|Whitespace|A(?:ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(?:ocument(?:X(?:MLKind|HTMLKind|Include)|HTMLKind|T(?:idy(?:XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(?:arser(?:GTRequiredError|XMLDeclNot(?:StartedError|FinishedError)|Mi(?:splaced(?:XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(?:StartedError|FinishedError))|S(?:t(?:andaloneValueError|ringNot(?:StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(?:MTOKENRequiredError|o(?:t(?:ationNot(?:StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(?:haracterRef(?:In(?:DTDError|PrologError|EpilogError)|AtEOFError)|o(?:nditionalSectionNot(?:StartedError|FinishedError)|mment(?:NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(?:ternalError|valid(?:HexCharacterRefError|C(?:haracter(?:RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(?:NameError|Error)))|OutOfMemoryError|D(?:ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(?:RI(?:RequiredError|FragmentError)|n(?:declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(?:CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(?:MissingSemiError|NoNameError|In(?:Internal(?:SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(?:ocessingInstructionNot(?:StartedError|FinishedError)|ematureDocumentEndError))|E(?:n(?:codingNotSupportedError|tity(?:Ref(?:In(?:DTDError|PrologError|EpilogError)|erence(?:MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(?:StartedError|FinishedError)|Is(?:ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(?:StartedError|FinishedError)|xt(?:ernalS(?:tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(?:iteralNot(?:StartedError|FinishedError)|T(?:RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(?:RedefinedError|HasNoValueError|Not(?:StartedError|FinishedError)|ListNot(?:StartedError|FinishedError)))|rocessingInstructionKind)|E(?:ntity(?:GeneralKind|DeclarationKind|UnparsedKind|P(?:ar(?:sedKind|ameterKind)|redefined))|lement(?:Declaration(?:MixedKind|UndefinedKind|E(?:lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(?:N(?:MToken(?:sKind|Kind)|otationKind)|CDATAKind|ID(?:Ref(?:sKind|Kind)|Kind)|DeclarationKind|En(?:tit(?:yKind|iesKind)|umerationKind)|Kind))|M(?:i(?:n(?:XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(?:nthCalendarUnit|deSwitchFunctionKey|use(?:Moved(?:Mask)?|E(?:ntered(?:Mask)?|ventSubtype|xited(?:Mask)?))|veToBezierPathElement|mentary(?:ChangeButton|Push(?:Button|InButton)|Light(?:Button)?))|enuFunctionKey|a(?:c(?:intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(?:XEdge|YEdge))|ACHOperatingSystem)|B(?:MPFileType|o(?:ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(?:Se(?:condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(?:zelBorder|velLineJoinStyle|low(?:Bottom|Top)|gin(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(?:spaceCharacter|tabTextMovement|ingStore(?:Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(?:owser(?:NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(?:h(?:ift(?:JISStringEncoding|KeyMask)|ow(?:ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(?:s(?:ReqFunctionKey|tem(?:D(?:omainMask|efined(?:Mask)?)|FunctionKey))|mbolStringEncoding)|c(?:a(?:nnedOption|le(?:None|ToFit|Proportionally))|r(?:oll(?:er(?:NoPart|Increment(?:Page|Line|Arrow)|Decrement(?:Page|Line|Arrow)|Knob(?:Slot)?|Arrows(?:M(?:inEnd|axEnd)|None|DefaultSetting))|Wheel(?:Mask)?|LockFunctionKey)|eenChangedEventType))|t(?:opFunctionKey|r(?:ingDrawing(?:OneShot|DisableScreenFontSubstitution|Uses(?:DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(?:Status(?:Reading|NotOpen|Closed|Open(?:ing)?|Error|Writing|AtEnd)|Event(?:Has(?:BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(?:ndEncountered|rrorOccurred)))))|i(?:ngle(?:DateMode|UnderlineStyle)|ze(?:DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(?:condCalendarUnit|lect(?:By(?:Character|Paragraph|Word)|i(?:ng(?:Next|Previous)|onAffinity(?:Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(?:Momentary|Select(?:One|Any)))|quareLineCapStyle|witchButton|ave(?:ToOperation|Op(?:tions(?:Yes|No|Ask)|eration)|AsOperation)|mall(?:SquareBezelStyle|C(?:ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(?:ighlightModeMatrix|SBModeColorPanel|o(?:ur(?:Minute(?:SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(?:Never|OnlyFromMainDocumentDomain|Always)|e(?:lp(?:ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(?:MonthDa(?:yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(?:o(?:n(?:StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(?:ification(?:SuspensionBehavior(?:Hold|Coalesce|D(?:eliverImmediately|rop))|NoCoalescing|CoalescingOn(?:Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(?:cr(?:iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(?:itle|opLevelContainersSpecifierError|abs(?:BezelBorder|NoBorder|LineBorder))|I(?:nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(?:ll(?:Glyph|CellType)|m(?:eric(?:Search|PadKeyMask)|berFormatter(?:Round(?:Half(?:Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(?:10|Default)|S(?:cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(?:ercentStyle|ad(?:Before(?:Suffix|Prefix)|After(?:Suffix|Prefix))))))|e(?:t(?:Services(?:BadArgumentError|NotFoundError|C(?:ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(?:StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(?:t(?:iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(?:hange(?:ReadOtherContents|GrayCell(?:Mask)?|BackgroundCell(?:Mask)?|Cleared|Done|Undone|Autosaved)|MYK(?:ModeColorPanel|ColorSpaceModel)|ircular(?:BezelStyle|Slider)|o(?:n(?:stantValueExpressionType|t(?:inuousCapacityLevelIndicatorStyle|entsCellMask|ain(?:sComparison|erSpecifierError)|rol(?:Glyph|KeyMask))|densedFontMask)|lor(?:Panel(?:RGBModeMask|GrayModeMask|HSBModeMask|C(?:MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(?:p(?:osite(?:XOR|Source(?:In|O(?:ut|ver)|Atop)|Highlight|C(?:opy|lear)|Destination(?:In|O(?:ut|ver)|Atop)|Plus(?:Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(?:stom(?:SelectorPredicateOperatorType|PaletteModeColorPanel)|r(?:sor(?:Update(?:Mask)?|PointingDevice)|veToBezierPathElement))|e(?:nterT(?:extAlignment|abStopType)|ll(?:State|H(?:ighlighted|as(?:Image(?:Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(?:Bordered|InsetButton)|Disabled|Editable|LightsBy(?:Gray|Background|Contents)|AllowsMixedState))|l(?:ipPagination|o(?:s(?:ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(?:ControlTint|DisplayFunctionKey|LineFunctionKey))|a(?:seInsensitive(?:Search|PredicateOption)|n(?:notCreateScriptCommandError|cel(?:Button|TextMovement))|chesDirectory|lculation(?:NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(?:itical(?:Request|AlertStyle)|ayonModeColorPanel))|T(?:hick(?:SquareBezelStyle|erSquareBezelStyle)|ypesetter(?:Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(?:ineBreakAction|atestBehavior))|i(?:ckMark(?:Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(?:olbarItemVisibilityPriority(?:Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(?:Compression(?:N(?:one|EXT)|CCITTFAX(?:3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(?:rminate(?:Now|Cancel|Later)|xt(?:Read(?:InapplicableDocumentTypeError|WriteErrorM(?:inimum|aximum))|Block(?:M(?:i(?:nimum(?:Height|Width)|ddleAlignment)|a(?:rgin|ximum(?:Height|Width)))|B(?:o(?:ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(?:ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(?:Characters|Attributes)|CellType|ured(?:RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(?:FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(?:RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(?:Character|TextMovement|le(?:tP(?:oint(?:Mask|EventSubtype)?|roximity(?:Mask|EventSubtype)?)|Column(?:NoResizing|UserResizingMask|AutoresizingMask)|View(?:ReverseSequentialColumnAutoresizingStyle|GridNone|S(?:olid(?:HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(?:n(?:sert(?:CharFunctionKey|FunctionKey|LineFunctionKey)|t(?:Type|ernalS(?:criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(?:Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(?:2022JPStringEncoding|Latin(?:1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(?:R(?:ight|ep(?:MatchesDevice|LoadStatus(?:ReadingHeader|Completed|InvalidData|Un(?:expectedEOF|knownType)|WillNeedAllData)))|Below|C(?:ellType|ache(?:BySize|Never|Default|Always))|Interpolation(?:High|None|Default|Low)|O(?:nly|verlaps)|Frame(?:Gr(?:oove|ayBezel)|Button|None|Photo)|L(?:oadStatus(?:ReadError|C(?:ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(?:lign(?:Right|Bottom(?:Right|Left)?|Center|Top(?:Right|Left)?|Left)|bove)))|O(?:n(?:State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|TextMovement)|SF1OperatingSystem|pe(?:n(?:GL(?:GO(?:Re(?:setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(?:R(?:obust|endererID)|M(?:inimumPolicy|ulti(?:sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(?:creenMask|te(?:ncilSize|reo)|ingleRenderer|upersample|ample(?:s|Buffers|Alpha))|NoRecovery|C(?:o(?:lor(?:Size|Float)|mpliant)|losestPolicy)|OffScreen|D(?:oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(?:cc(?:umSize|elerated)|ux(?:Buffers|DepthStencil)|l(?:phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(?:criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(?:B(?:itfield|oolType)|S(?:hortType|tr(?:ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(?:Type|longType)|ArrayType))|D(?:i(?:s(?:c(?:losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(?:Selection|PredicateModifier))|o(?:c(?:ModalWindowMask|ument(?:Directory|ationDirectory))|ubleType|wn(?:TextMovement|ArrowFunctionKey))|e(?:s(?:cendingPageOrder|ktopDirectory)|cimalTabStopType|v(?:ice(?:NColorSpaceModel|IndependentModifierFlagsMask)|eloper(?:Directory|ApplicationDirectory))|fault(?:ControlTint|TokenStyle)|lete(?:Char(?:acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(?:yCalendarUnit|teFormatter(?:MediumStyle|Behavior(?:10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(?:wer(?:Clos(?:ingState|edState)|Open(?:ingState|State))|gOperation(?:Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(?:ser(?:CancelledError|D(?:irectory|omainMask)|FunctionKey)|RL(?:Handle(?:NotLoaded|Load(?:Succeeded|InProgress|Failed))|CredentialPersistence(?:None|Permanent|ForSession))|n(?:scaledWindowMask|cachedRead|i(?:codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(?:o(?:CloseGroupingRunLoopOrdering|FunctionKey)|e(?:finedDateComponent|rline(?:Style(?:Single|None|Thick|Double)|Pattern(?:Solid|D(?:ot|ash(?:Dot(?:Dot)?)?)))))|known(?:ColorSpaceModel|P(?:ointingDevice|ageOrder)|KeyS(?:criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(?:dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(?:ustifiedTextAlignment|PEG(?:2000FileType|FileType)|apaneseEUC(?:GlyphPacking|StringEncoding))|P(?:o(?:s(?:t(?:Now|erFontMask|WhenIdle|ASAP)|iti(?:on(?:Replace|Be(?:fore|ginning)|End|After)|ve(?:IntType|DoubleType|FloatType)))|pUp(?:NoArrow|ArrowAt(?:Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(?:InCell(?:Mask)?|OnPushOffButton)|e(?:n(?:TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(?:Mask)?)|P(?:S(?:caleField|tatus(?:Title|Field)|aveButton)|N(?:ote(?:Title|Field)|ame(?:Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(?:a(?:perFeedButton|ge(?:Range(?:To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(?:useFunctionKey|ragraphSeparatorCharacter|ge(?:DownFunctionKey|UpFunctionKey))|r(?:int(?:ing(?:ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(?:NotFound|OK|Error)|FunctionKey)|o(?:p(?:ertyList(?:XMLFormat|MutableContainers(?:AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(?:BarStyle|SpinningStyle|Preferred(?:SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(?:ssedTab|vFunctionKey))|L(?:HeightForm|CancelButton|TitleField|ImageButton|O(?:KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(?:n(?:terCharacter|d(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|v(?:e(?:nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(?:Comparison|PredicateOperatorType)|ra(?:serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(?:clude(?:10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(?:i(?:ew(?:M(?:in(?:XMargin|YMargin)|ax(?:XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(?:lidationErrorM(?:inimum|aximum)|riableExpressionType))|Key(?:SpecifierEvaluationScriptError|Down(?:Mask)?|Up(?:Mask)?|PathExpressionType|Value(?:MinusSetMutation|SetSetMutation|Change(?:Re(?:placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(?:New|Old)|UnionSetMutation|ValidationError))|QTMovie(?:NormalPlayback|Looping(?:BackAndForthPlayback|Playback))|F(?:1(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(?:nd(?:PanelAction(?:Replace(?:A(?:ndFind|ll(?:InSelection)?))?|S(?:howFindPanel|e(?:tFindString|lectAll(?:InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(?:Read(?:No(?:SuchFileError|PermissionError)|CorruptFileError|In(?:validFileNameError|applicableStringEncodingError)|Un(?:supportedSchemeError|knownError))|HandlingPanel(?:CancelButton|OKButton)|NoSuchFileError|ErrorM(?:inimum|aximum)|Write(?:NoPermissionError|In(?:validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(?:supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(?:nt(?:Mo(?:noSpaceTrait|dernSerifsClass)|BoldTrait|S(?:ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(?:o(?:ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(?:ntegerAdvancementsRenderingMode|talicTrait)|O(?:ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(?:nknownClass|IOptimizedTrait)|Panel(?:S(?:hadowEffectModeMask|t(?:andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(?:ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(?:amilyClassMask|reeformSerifsClass)|Antialiased(?:RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(?:Below|Type(?:None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(?:attingError(?:M(?:inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(?:ExpressionType|KeyMask)|3(?:1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(?:RevertButton|S(?:ize(?:Title|Field)|etButton)|CurrentField|Preview(?:Button|Field))|l(?:oat(?:ingPointSamplesBitmapFormat|Type)|agsChanged(?:Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(?:heelModeColorPanel|indow(?:s(?:NTOperatingSystem|CP125(?:1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(?:InterfaceStyle|OperatingSystem))|M(?:iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(?:NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(?:ctivation|ddingToRecents)|A(?:sync|nd(?:Hide(?:Others)?|Print)|llowingClassicStartup))|eek(?:day(?:CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(?:ntsBidiLevels|rningAlertStyle)|r(?:itingDirection(?:RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(?:i(?:stModeMatrix|ne(?:Moves(?:Right|Down|Up|Left)|B(?:order|reakBy(?:C(?:harWrapping|lipping)|Truncating(?:Middle|Head|Tail)|WordWrapping))|S(?:eparatorCharacter|weep(?:Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(?:ssThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey))|a(?:yout(?:RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(?:sc(?:iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(?:y(?:Type|PredicateModifier|EventMask)|choredSearch|imation(?:Blocking|Nonblocking(?:Threaded)?|E(?:ffect(?:DisappearingItemDefault|Poof)|ase(?:In(?:Out)?|Out))|Linear)|dPredicateType)|t(?:Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(?:obe(?:GB1CharacterCollection|CNS1CharacterCollection|Japan(?:1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(?:saveOperation|Pagination)|pp(?:lication(?:SupportDirectory|D(?:irectory|e(?:fined(?:Mask)?|legateReply(?:Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(?:Mask)?)|l(?:ternateKeyMask|pha(?:ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(?:SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(?:ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(?:sWrongScriptError|EvaluationScriptError)|bove(?:Bottom|Top)|WTEventType)))(?:\\b)"},{token:"support.function.C99.c",regex:s.cFunctions},{token:n.getKeywords(),regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"punctuation.section.scope.begin.objc",regex:"\\[",next:"bracketed_content"},{token:"meta.function.objc",regex:"^(?:-|\\+)\\s*"}],constant_NSString:[{token:"constant.character.escape.objc",regex:e},{token:"invalid.illegal.unknown-escape.objc",regex:"\\\\."},{token:"string",regex:'[^"\\\\]+'},{token:"punctuation.definition.string.end",regex:'"',next:"start"}],protocol_list:[{token:"punctuation.section.scope.end.objc",regex:">",next:"start"},{token:"support.other.protocol.objc",regex:"\bNS(?:GlyphStorage|M(?:utableCopying|enuItem)|C(?:hangeSpelling|o(?:ding|pying|lorPicking(?:Custom|Default)))|T(?:oolbarItemValidations|ext(?:Input|AttachmentCell))|I(?:nputServ(?:iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(?:CTypeSerializationCallBack|ect)|D(?:ecimalNumberBehaviors|raggingInfo)|U(?:serInterfaceValidations|RL(?:HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(?:ToobarItem|UserInterfaceItem)|Locking)\b"}],selectors:[{token:"support.function.any-method.name-of-parameter.objc",regex:"\\b(?:[a-zA-Z_:][\\w]*)+"},{token:"punctuation",regex:"\\)",next:"start"}],bracketed_content:[{token:"punctuation.section.scope.end.objc",regex:"]",next:"start"},{token:["support.function.any-method.objc"],regex:"(?:predicateWithFormat:| NSPredicate predicateWithFormat:)",next:"start"},{token:"support.function.any-method.objc",regex:"\\w+(?::|(?=]))",next:"start"}],bracketed_strings:[{token:"punctuation.section.scope.end.objc",regex:"]",next:"start"},{token:"keyword.operator.logical.predicate.cocoa",regex:"\\b(?:AND|OR|NOT|IN)\\b"},{token:["invalid.illegal.unknown-method.objc","punctuation.separator.arguments.objc"],regex:"\\b(\\w+)(:)"},{regex:"\\b(?:ALL|ANY|SOME|NONE)\\b",token:"constant.language.predicate.cocoa"},{regex:"\\b(?:NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\\b",token:"constant.language.predicate.cocoa"},{regex:"\\b(?:MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\\b",token:"keyword.operator.comparison.predicate.cocoa"},{regex:"\\bC(?:ASEINSENSITIVE|I)\\b",token:"keyword.other.modifier.predicate.cocoa"},{regex:"\\b(?:ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\\b",token:"keyword.other.predicate.cocoa"},{regex:e,token:"constant.character.escape.objc"},{regex:"\\\\.",token:"invalid.illegal.unknown-escape.objc"},{token:"string",regex:'[^"\\\\]'},{token:"punctuation.definition.string.end.objc",regex:'"',next:"predicates"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{defaultToken:"comment"}],methods:[{token:"meta.function.objc",regex:"(?=\\{|#)|;",next:"start"}]};for(var u in r)this.$rules[u]?this.$rules[u].push&&this.$rules[u].push.apply(this.$rules[u],r[u]):this.$rules[u]=r[u];this.$rules.bracketed_content=this.$rules.bracketed_content.concat(this.$rules.start,t),this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(u,o),t.ObjectiveCHighlightRules=u}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/objectivec",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/objectivec_highlight_rules","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./objectivec_highlight_rules").ObjectiveCHighlightRules,o=e("./folding/cstyle").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$id="ace/mode/objectivec"}.call(u.prototype),t.Mode=u}); (function() { + window.require(["ace/mode/objectivec"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-perl.js b/BTPanel/static/ace/mode-perl.js new file mode 100644 index 00000000..070cdf65 --- /dev/null +++ b/BTPanel/static/ace/mode-perl.js @@ -0,0 +1,8 @@ +define("ace/mode/perl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars",t="ARGV|ENV|INC|SIG",n="getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|getpeername|setpriority|getprotoent|setprotoent|getpriority|endprotoent|getservent|setservent|endservent|sethostent|socketpair|getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|map|die|uc|lc|do",r=this.createKeywordMapper({keyword:e,"constant.language":t,"support.function":n},"identifier");this.$rules={start:[{token:"comment.doc",regex:"^=(?:begin|item)\\b",next:"block_comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0x[0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"%#|\\$#|\\.\\.\\.|\\|\\|=|>>=|<<=|<=>|&&=|=>|!~|\\^=|&=|\\|=|\\.=|x=|%=|\\/=|\\*=|\\-=|\\+=|=~|\\*\\*|\\-\\-|\\.\\.|\\|\\||&&|\\+\\+|\\->|!=|==|>=|<=|>>|<<|,|=|\\?\\:|\\^|\\||x|%|\\/|\\*|<|&|\\\\|~|!|>|\\.|\\-|\\+|\\-C|\\-b|\\-S|\\-u|\\-t|\\-p|\\-l|\\-d|\\-f|\\-g|\\-s|\\-z|\\-k|\\-e|\\-O|\\-T|\\-B|\\-M|\\-A|\\-X|\\-W|\\-c|\\-R|\\-o|\\-x|\\-w|\\-r|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"},{token:"comment",regex:"#.*$"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",regex:".+"}],block_comment:[{token:"comment.doc",regex:"^=cut\\b",next:"start"},{defaultToken:"comment.doc"}]}};r.inherits(s,i),t.PerlHighlightRules=s}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/perl",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/perl_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./perl_highlight_rules").PerlHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./folding/cstyle").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u({start:"^=(begin|item)\\b",end:"^=(cut)\\b"}),this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart="#",this.blockComment=[{start:"=begin",end:"=cut",lineStartOnly:!0},{start:"=item",end:"=cut",lineStartOnly:!0}],this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[:]\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id="ace/mode/perl"}.call(a.prototype),t.Mode=a}); (function() { + window.require(["ace/mode/perl"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-perl6.js b/BTPanel/static/ace/mode-perl6.js new file mode 100644 index 00000000..c3e2bdf2 --- /dev/null +++ b/BTPanel/static/ace/mode-perl6.js @@ -0,0 +1,8 @@ +define("ace/mode/perl6_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="my|our|class|role|grammar|is|does|sub|method|submethod|try|default|when|if|elsif|else|unless|with|orwith|without|for|given|proceed|succeed|loop|while|until|repeat|module|use|need|import|require|unit|constant|enum|multi|return|has|token|rule|make|made|proto|state|augment|but|anon|supersede|let|subset|gather|returns|return-rw|temp|BEGIN|CHECK|INIT|END|CLOSE|ENTER|LEAVE|KEEP|UNDO|PRE|POST|FIRST|NEXT|LAST|CATCH|CONTROL|QUIT|DOC",t="Any|Array|Associative|AST|atomicint|Attribute|Backtrace|Backtrace::Frame|Bag|Baggy|BagHash|Blob|Block|Bool|Buf|Callable|CallFrame|Cancellation|Capture|Channel|Code|compiler|Complex|ComplexStr|Cool|CurrentThreadScheduler|Cursor|Date|Dateish|DateTime|Distro|Duration|Encoding|Exception|Failure|FatRat|Grammar|Hash|HyperWhatever|Instant|Int|IntStr|IO|IO::ArgFiles|IO::CatHandle|IO::Handle|IO::Notification|IO::Path|IO::Path::Cygwin|IO::Path::QNX|IO::Path::Unix|IO::Path::Win32|IO::Pipe|IO::Socket|IO::Socket::Async|IO::Socket::INET|IO::Spec|IO::Spec::Cygwin|IO::Spec::QNX|IO::Spec::Unix|IO::Spec::Win32|IO::Special|Iterable|Iterator|Junction|Kernel|Label|List|Lock|Lock::Async|Macro|Map|Match|Metamodel::AttributeContainer|Metamodel::C3MRO|Metamodel::ClassHOW|Metamodel::EnumHOW|Metamodel::Finalization|Metamodel::MethodContainer|Metamodel::MROBasedMethodDispatch|Metamodel::MultipleInheritance|Metamodel::Naming|Metamodel::Primitives|Metamodel::PrivateMethodContainer|Metamodel::RoleContainer|Metamodel::Trusting|Method|Mix|MixHash|Mixy|Mu|NFC|NFD|NFKC|NFKD|Nil|Num|Numeric|NumStr|ObjAt|Order|Pair|Parameter|Perl|Pod::Block|Pod::Block::Code|Pod::Block::Comment|Pod::Block::Declarator|Pod::Block::Named|Pod::Block::Para|Pod::Block::Table|Pod::Heading|Pod::Item|Positional|PositionalBindFailover|Proc|Proc::Async|Promise|Proxy|PseudoStash|QuantHash|Range|Rat|Rational|RatStr|Real|Regex|Routine|Scalar|Scheduler|Semaphore|Seq|Set|SetHash|Setty|Signature|Slip|Stash|Str|StrDistance|Stringy|Sub|Submethod|Supplier|Supplier::Preserving|Supply|Systemic|Tap|Telemetry|Telemetry::Instrument::Thread|Telemetry::Instrument::Usage|Telemetry::Period|Telemetry::Sampler|Thread|ThreadPoolScheduler|UInt|Uni|utf8|Variable|Version|VM|Whatever|WhateverCode|WrapHandle|int|uint|num|str|int8|int16|int32|int64|uint8|uint16|uint32|uint64|long|longlong|num32|num64|size_t|bool|CArray|Pointer|Backtrace|Backtrace::Frame|Exception|Failure|X::AdHoc|X::Anon::Augment|X::Anon::Multi|X::Assignment::RO|X::Attribute::NoPackage|X::Attribute::Package|X::Attribute::Undeclared|X::Augment::NoSuchType|X::Bind|X::Bind::NativeType|X::Bind::Slice|X::Caller::NotDynamic|X::Channel::ReceiveOnClosed|X::Channel::SendOnClosed|X::Comp|X::Composition::NotComposable|X::Constructor::Positional|X::ControlFlow|X::ControlFlow::Return|X::DateTime::TimezoneClash|X::Declaration::Scope|X::Declaration::Scope::Multi|X::Does::TypeObject|X::Eval::NoSuchLang|X::Export::NameClash|X::IO|X::IO::Chdir|X::IO::Chmod|X::IO::Copy|X::IO::Cwd|X::IO::Dir|X::IO::DoesNotExist|X::IO::Link|X::IO::Mkdir|X::IO::Move|X::IO::Rename|X::IO::Rmdir|X::IO::Symlink|X::IO::Unlink|X::Inheritance::NotComposed|X::Inheritance::Unsupported|X::Method::InvalidQualifier|X::Method::NotFound|X::Method::Private::Permission|X::Method::Private::Unqualified|X::Mixin::NotComposable|X::NYI|X::NoDispatcher|X::Numeric::Real|X::OS|X::Obsolete|X::OutOfRange|X::Package::Stubbed|X::Parameter::Default|X::Parameter::MultipleTypeConstraints|X::Parameter::Placeholder|X::Parameter::Twigil|X::Parameter::WrongOrder|X::Phaser::Multiple|X::Phaser::PrePost|X::Placeholder::Block|X::Placeholder::Mainline|X::Pod|X::Proc::Async|X::Proc::Async::AlreadyStarted|X::Proc::Async::CharsOrBytes|X::Proc::Async::MustBeStarted|X::Proc::Async::OpenForWriting|X::Proc::Async::TapBeforeSpawn|X::Proc::Unsuccessful|X::Promise::CauseOnlyValidOnBroken|X::Promise::Vowed|X::Redeclaration|X::Role::Initialization|X::Seq::Consumed|X::Sequence::Deduction|X::Signature::NameClash|X::Signature::Placeholder|X::Str::Numeric|X::StubCode|X::Syntax|X::Syntax::Augment::WithoutMonkeyTyping|X::Syntax::Comment::Embedded|X::Syntax::Confused|X::Syntax::InfixInTermPosition|X::Syntax::Malformed|X::Syntax::Missing|X::Syntax::NegatedPair|X::Syntax::NoSelf|X::Syntax::Number::RadixOutOfRange|X::Syntax::P5|X::Syntax::Regex::Adverb|X::Syntax::Regex::SolitaryQuantifier|X::Syntax::Reserved|X::Syntax::Self::WithoutObject|X::Syntax::Signature::InvocantMarker|X::Syntax::Term::MissingInitializer|X::Syntax::UnlessElse|X::Syntax::Variable::Match|X::Syntax::Variable::Numeric|X::Syntax::Variable::Twigil|X::Temporal|X::Temporal::InvalidFormat|X::TypeCheck|X::TypeCheck::Assignment|X::TypeCheck::Binding|X::TypeCheck::Return|X::TypeCheck::Splice|X::Undeclared",n="abs|abs2rel|absolute|accept|ACCEPTS|accessed|acos|acosec|acosech|acosh|acotan|acotanh|acquire|act|action|actions|add|add_attribute|add_enum_value|add_fallback|add_method|add_parent|add_private_method|add_role|add_trustee|adverb|after|all|allocate|allof|allowed|alternative-names|annotations|antipair|antipairs|any|anyof|app_lifetime|append|arch|archname|args|arity|asec|asech|asin|asinh|ASSIGN-KEY|ASSIGN-POS|assuming|ast|at|atan|atan2|atanh|AT-KEY|atomic-assign|atomic-dec-fetch|atomic-fetch|atomic-fetch-add|atomic-fetch-dec|atomic-fetch-inc|atomic-fetch-sub|atomic-inc-fetch|AT-POS|attributes|auth|await|backtrace|Bag|BagHash|base|basename|base-repeating|batch|BIND-KEY|BIND-POS|bind-stderr|bind-stdin|bind-stdout|bind-udp|bits|bless|block|bool-only|bounds|break|Bridge|broken|BUILD|build-date|bytes|cache|callframe|calling-package|CALL-ME|callsame|callwith|can|cancel|candidates|cando|canonpath|caps|caption|Capture|cas|catdir|categorize|categorize-list|catfile|catpath|cause|ceiling|cglobal|changed|Channel|chars|chdir|child|child-name|child-typename|chmod|chomp|chop|chr|chrs|chunks|cis|classify|classify-list|cleanup|clone|close|closed|close-stdin|code|codes|collate|column|comb|combinations|command|comment|compiler|Complex|compose|compose_type|composer|condition|config|configure_destroy|configure_type_checking|conj|connect|constraints|construct|contains|contents|copy|cos|cosec|cosech|cosh|cotan|cotanh|count|count-only|cpu-cores|cpu-usage|CREATE|create_type|cross|cue|curdir|curupdir|d|Date|DateTime|day|daycount|day-of-month|day-of-week|day-of-year|days-in-month|declaration|decode|decoder|deepmap|defined|DEFINITE|delayed|DELETE-KEY|DELETE-POS|denominator|desc|DESTROY|destroyers|devnull|did-you-mean|die|dir|dirname|dir-sep|DISTROnames|do|done|duckmap|dynamic|e|eager|earlier|elems|emit|enclosing|encode|encoder|encoding|end|ends-with|enum_from_value|enum_value_list|enum_values|enums|eof|EVAL|EVALFILE|exception|excludes-max|excludes-min|EXISTS-KEY|EXISTS-POS|exit|exitcode|exp|expected|explicitly-manage|expmod|extension|f|fail|fc|feature|file|filename|find_method|find_method_qualified|finish|first|flat|flatmap|flip|floor|flush|fmt|format|formatter|freeze|from|from-list|from-loop|from-posix|full|full-barrier|get|get_value|getc|gist|got|grab|grabpairs|grep|handle|handled|handles|hardware|has_accessor|head|headers|hh-mm-ss|hidden|hides|hour|how|hyper|id|illegal|im|in|indent|index|indices|indir|infinite|infix|install_method_cache|Instant|instead|int-bounds|interval|in-timezone|invalid-str|invert|invocant|IO|IO::Notification.watch-path|is_trusted|is_type|isa|is-absolute|is-hidden|is-initial-thread|is-int|is-lazy|is-leap-year|isNaN|is-prime|is-relative|is-routine|is-setting|is-win|item|iterator|join|keep|kept|KERNELnames|key|keyof|keys|kill|kv|kxxv|l|lang|last|lastcall|later|lazy|lc|leading|level|line|lines|link|listen|live|local|lock|log|log10|lookup|lsb|MAIN|match|max|maxpairs|merge|message|method_table|methods|migrate|min|minmax|minpairs|minute|misplaced|Mix|MixHash|mkdir|mode|modified|month|move|mro|msb|multiness|name|named|named_names|narrow|nativecast|native-descriptor|nativesizeof|new|new_type|new-from-daycount|new-from-pairs|next|nextcallee|next-handle|nextsame|nextwith|NFC|NFD|NFKC|NFKD|nl-in|nl-out|nodemap|none|norm|not|note|now|nude|numerator|Numeric|of|offset|offset-in-hours|offset-in-minutes|old|on-close|one|on-switch|open|opened|operation|optional|ord|ords|orig|os-error|osname|out-buffer|pack|package|package-kind|package-name|packages|pair|pairs|pairup|parameter|params|parent|parent-name|parents|parse|parse-base|parsefile|parse-names|parts|path|path-sep|payload|peer-host|peer-port|periods|perl|permutations|phaser|pick|pickpairs|pid|placeholder|plus|polar|poll|polymod|pop|pos|positional|posix|postfix|postmatch|precomp-ext|precomp-target|pred|prefix|prematch|prepend|print|printf|print-nl|print-to|private|private_method_table|proc|produce|Promise|prompt|protect|pull-one|push|push-all|push-at-least|push-exactly|push-until-lazy|put|qualifier-type|quit|r|race|radix|rand|range|raw|re|read|readchars|readonly|ready|Real|reallocate|reals|reason|rebless|receive|recv|redispatcher|redo|reduce|rel2abs|relative|release|rename|repeated|replacement|report|reserved|resolve|restore|result|resume|rethrow|reverse|right|rindex|rmdir|roles_to_compose|rolish|roll|rootdir|roots|rotate|rotor|round|roundrobin|routine-type|run|rwx|s|samecase|samemark|samewith|say|schedule-on|scheduler|scope|sec|sech|second|seek|self|send|Set|set_hidden|set_name|set_package|set_rw|set_value|SetHash|set-instruments|setup_finalization|shape|share|shell|shift|sibling|sigil|sign|signal|signals|signature|sin|sinh|sink|sink-all|skip|skip-at-least|skip-at-least-pull-one|skip-one|sleep|sleep-timer|sleep-until|Slip|slurp|slurp-rest|slurpy|snap|snapper|so|socket-host|socket-port|sort|source|source-package|spawn|SPEC|splice|split|splitdir|splitpath|sprintf|spurt|sqrt|squish|srand|stable|start|started|starts-with|status|stderr|stdout|sub_signature|subbuf|subbuf-rw|subname|subparse|subst|subst-mutate|substr|substr-eq|substr-rw|succ|sum|Supply|symlink|t|tail|take|take-rw|tan|tanh|tap|target|target-name|tc|tclc|tell|then|throttle|throw|timezone|tmpdir|to|today|toggle|to-posix|total|trailing|trans|tree|trim|trim-leading|trim-trailing|truncate|truncated-to|trusts|try_acquire|trying|twigil|type|type_captures|typename|uc|udp|uncaught_handler|unimatch|uniname|uninames|uniparse|uniprop|uniprops|unique|unival|univals|unlink|unlock|unpack|unpolar|unshift|unwrap|updir|USAGE|utc|val|value|values|VAR|variable|verbose-config|version|VMnames|volume|vow|w|wait|warn|watch|watch-path|week|weekday-of-month|week-number|week-year|WHAT|WHERE|WHEREFORE|WHICH|WHO|whole-second|WHY|wordcase|words|workaround|wrap|write|write-to|yada|year|yield|yyyy-mm-dd|z|zip|zip-latest|plan|done-testing|bail-out|todo|skip|skip-rest|diag|subtest|pass|flunk|ok|nok|cmp-ok|is-deeply|isnt|is-approx|like|unlike|use-ok|isa-ok|does-ok|can-ok|dies-ok|lives-ok|eval-dies-ok|eval-lives-ok|throws-like|fails-like|rw|required|native|repr|export|symbol",r="pi|Inf|tau|time",i="eq|ne|gt|lt|le|ge|div|gcd|lcm|leg|cmp|ff|fff|x|before|after|Z|X|and|or|andthen|notandthen|orelse|xor",s=this.createKeywordMapper({keyword:e,"storage.type":t,"constant.language":r,"support.function":n,"keyword.operator":i},"identifier"),o="[a-zA-Z_][a-zA-Z_0-9:-]*\\b",u={token:"constant.numeric",regex:"0x[0-9a-fA-F]+\\b"},a={token:"constant.numeric",regex:"[+-.]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},f={token:"constant.numeric",regex:"(?:\\d+_?\\d+)+\\b"},l={token:"constant.numeric",regex:"\\+?\\d+i\\b"},c={token:"constant.language.boolean",regex:"(?:True|False)\\b"},h={token:"constant.other",regex:"v[0-9](?:\\.[a-zA-Z0-9*])*\\b"},p={token:s,regex:"[a-zA-Z][\\:a-zA-Z0-9_-]*\\b"},d={token:"variable.language",regex:"[$@%&][?*!.]?[a-zA-Z0-9_-]+\\b"},v={token:"variable.language",regex:"\\$[/|!]?|@\\$/"},m={token:"keyword.operator",regex:"=|<|>|\\+|\\*|-|/|~|%|\\?|!|\\^|\\.|\\:|\\,|\u00bb|\u00ab|\\||\\&|\u269b|\u2218"},g={token:"constant.language",regex:"\ud835\udc52|\u03c0|\u03c4|\u221e"},y={token:"string.quoted.single",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},b={token:"string.quoted.single",regex:"[<](?:[a-zA-Z0-9 ])*[>]"},w={token:"string.regexp",regex:"[m|rx]?[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"};this.$rules={start:[{token:"comment.block",regex:"#[`|=]\\(.*\\)"},{token:"comment.block",regex:"#[`|=]\\[.*\\]"},{token:"comment.doc",regex:"^=(?:begin)\\b",next:"block_comment"},{token:"string.unquoted",regex:"q[x|w]?\\:to/END/;",next:"qheredoc"},{token:"string.unquoted",regex:"qq[x|w]?\\:to/END/;",next:"qqheredoc"},w,y,{token:"string.quoted.double",regex:'"',next:"qqstring"},b,{token:["keyword","text","variable.module"],regex:"(use)(\\s+)((?:"+o+"\\.?)*)"},u,a,f,l,c,h,p,d,v,m,g,{token:"comment",regex:"#.*$"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"constant.language.escape",regex:'\\\\(?:[nrtef\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},d,v,{token:"lparen",regex:"{",next:"qqinterpolation"},{token:"string.quoted.double",regex:'"',next:"start"},{defaultToken:"string.quoted.double"}],qqinterpolation:[u,a,f,l,c,h,p,d,v,m,g,y,w,{token:"rparen",regex:"}",next:"qqstring"}],block_comment:[{token:"comment.doc",regex:"^=end +[a-zA-Z_0-9]*",next:"start"},{defaultToken:"comment.doc"}],qheredoc:[{token:"string.unquoted",regex:"END$",next:"start"},{defaultToken:"string.unquoted"}],qqheredoc:[d,v,{token:"lparen",regex:"{",next:"qqheredocinterpolation"},{token:"string.unquoted",regex:"END$",next:"start"},{defaultToken:"string.unquoted"}],qqheredocinterpolation:[u,a,f,l,c,h,p,d,v,m,g,y,w,{token:"rparen",regex:"}",next:"qqheredoc"}]}};r.inherits(s,i),t.Perl6HighlightRules=s}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/perl6",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/perl6_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./perl6_highlight_rules").Perl6HighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./folding/cstyle").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u({start:"^=(begin)\\b",end:"^=(end)\\b"}),this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart="#",this.blockComment=[{start:"=begin",end:"=end",lineStartOnly:!0},{start:"=item",end:"=end",lineStartOnly:!0}],this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[:]\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id="ace/mode/perl6"}.call(a.prototype),t.Mode=a}); (function() { + window.require(["ace/mode/perl6"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-pgsql.js b/BTPanel/static/ace/mode-pgsql.js new file mode 100644 index 00000000..7649c6ee --- /dev/null +++ b/BTPanel/static/ace/mode-pgsql.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/perl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars",t="ARGV|ENV|INC|SIG",n="getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|getpeername|setpriority|getprotoent|setprotoent|getpriority|endprotoent|getservent|setservent|endservent|sethostent|socketpair|getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|map|die|uc|lc|do",r=this.createKeywordMapper({keyword:e,"constant.language":t,"support.function":n},"identifier");this.$rules={start:[{token:"comment.doc",regex:"^=(?:begin|item)\\b",next:"block_comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0x[0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"%#|\\$#|\\.\\.\\.|\\|\\|=|>>=|<<=|<=>|&&=|=>|!~|\\^=|&=|\\|=|\\.=|x=|%=|\\/=|\\*=|\\-=|\\+=|=~|\\*\\*|\\-\\-|\\.\\.|\\|\\||&&|\\+\\+|\\->|!=|==|>=|<=|>>|<<|,|=|\\?\\:|\\^|\\||x|%|\\/|\\*|<|&|\\\\|~|!|>|\\.|\\-|\\+|\\-C|\\-b|\\-S|\\-u|\\-t|\\-p|\\-l|\\-d|\\-f|\\-g|\\-s|\\-z|\\-k|\\-e|\\-O|\\-T|\\-B|\\-M|\\-A|\\-X|\\-W|\\-c|\\-R|\\-o|\\-x|\\-w|\\-r|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"},{token:"comment",regex:"#.*$"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",regex:".+"}],block_comment:[{token:"comment.doc",regex:"^=cut\\b",next:"start"},{defaultToken:"comment.doc"}]}};r.inherits(s,i),t.PerlHighlightRules=s}),define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield|async|await|nonlocal",t="True|False|None|NotImplemented|Ellipsis|__debug__",n="abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|apply|delattr|help|next|setattr|set|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|ascii|breakpoint|bytes",r=this.createKeywordMapper({"invalid.deprecated":"debugger","support.function":n,"variable.language":"self|cls","constant.language":t,keyword:e},"identifier"),i="[uU]?",s="[rR]",o="[fF]",u="(?:[rR][fF]|[fF][rR])",a="(?:(?:[1-9]\\d*)|(?:0))",f="(?:0[oO]?[0-7]+)",l="(?:0[xX][\\dA-Fa-f]+)",c="(?:0[bB][01]+)",h="(?:"+a+"|"+f+"|"+l+"|"+c+")",p="(?:[eE][+-]?\\d+)",d="(?:\\.\\d+)",v="(?:\\d+)",m="(?:(?:"+v+"?"+d+")|(?:"+v+"\\.))",g="(?:(?:"+m+"|"+v+")"+p+")",y="(?:"+g+"|"+m+")",b="\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:i+'"{3}',next:"qqstring3"},{token:"string",regex:i+'"(?=.)',next:"qqstring"},{token:"string",regex:i+"'{3}",next:"qstring3"},{token:"string",regex:i+"'(?=.)",next:"qstring"},{token:"string",regex:s+'"{3}',next:"rawqqstring3"},{token:"string",regex:s+'"(?=.)',next:"rawqqstring"},{token:"string",regex:s+"'{3}",next:"rawqstring3"},{token:"string",regex:s+"'(?=.)",next:"rawqstring"},{token:"string",regex:o+'"{3}',next:"fqqstring3"},{token:"string",regex:o+'"(?=.)',next:"fqqstring"},{token:"string",regex:o+"'{3}",next:"fqstring3"},{token:"string",regex:o+"'(?=.)",next:"fqstring"},{token:"string",regex:u+'"{3}',next:"rfqqstring3"},{token:"string",regex:u+'"(?=.)',next:"rfqqstring"},{token:"string",regex:u+"'{3}",next:"rfqstring3"},{token:"string",regex:u+"'(?=.)",next:"rfqstring"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|@|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"punctuation",regex:",|:|;|\\->|\\+=|\\-=|\\*=|\\/=|\\/\\/=|%=|@=|&=|\\|=|^=|>>=|<<=|\\*\\*="},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"},{include:"constants"}],qqstring3:[{token:"constant.language.escape",regex:b},{token:"string",regex:'"{3}',next:"start"},{defaultToken:"string"}],qstring3:[{token:"constant.language.escape",regex:b},{token:"string",regex:"'{3}",next:"start"},{defaultToken:"string"}],qqstring:[{token:"constant.language.escape",regex:b},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:b},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"start"},{defaultToken:"string"}],rawqqstring3:[{token:"string",regex:'"{3}',next:"start"},{defaultToken:"string"}],rawqstring3:[{token:"string",regex:"'{3}",next:"start"},{defaultToken:"string"}],rawqqstring:[{token:"string",regex:"\\\\$",next:"rawqqstring"},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],rawqstring:[{token:"string",regex:"\\\\$",next:"rawqstring"},{token:"string",regex:"'|$",next:"start"},{defaultToken:"string"}],fqqstring3:[{token:"constant.language.escape",regex:b},{token:"string",regex:'"{3}',next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],fqstring3:[{token:"constant.language.escape",regex:b},{token:"string",regex:"'{3}",next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],fqqstring:[{token:"constant.language.escape",regex:b},{token:"string",regex:"\\\\$",next:"fqqstring"},{token:"string",regex:'"|$',next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],fqstring:[{token:"constant.language.escape",regex:b},{token:"string",regex:"'|$",next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],rfqqstring3:[{token:"string",regex:'"{3}',next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],rfqstring3:[{token:"string",regex:"'{3}",next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],rfqqstring:[{token:"string",regex:"\\\\$",next:"rfqqstring"},{token:"string",regex:'"|$',next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],rfqstring:[{token:"string",regex:"'|$",next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],fqstringParRules:[{token:"paren.lparen",regex:"[\\[\\(]"},{token:"paren.rparen",regex:"[\\]\\)]"},{token:"string",regex:"\\s+"},{token:"string",regex:"'(.)*'"},{token:"string",regex:'"(.)*"'},{token:"function.support",regex:"(!s|!r|!a)"},{include:"constants"},{token:"paren.rparen",regex:"}",next:"pop"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"}],constants:[{token:"constant.numeric",regex:"(?:"+y+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:y},{token:"constant.numeric",regex:h+"[lL]\\b"},{token:"constant.numeric",regex:h+"\\b"},{token:["punctuation","function.support"],regex:"(\\.)([a-zA-Z_]+)\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"}]},this.normalizeRules()};r.inherits(s,i),t.PythonHighlightRules=s}),define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"variable",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)'},{token:"string",regex:'"',next:"string"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"text",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"comment",regex:"\\/\\/.*$"},{token:"comment.start",regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],string:[{token:"constant.language.escape",regex:/\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],comment:[{token:"comment.end",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}]}};r.inherits(s,i),t.JsonHighlightRules=s}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/,next:"start"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define("ace/mode/pgsql_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules","ace/mode/perl_highlight_rules","ace/mode/python_highlight_rules","ace/mode/json_highlight_rules","ace/mode/javascript_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=e("./perl_highlight_rules").PerlHighlightRules,a=e("./python_highlight_rules").PythonHighlightRules,f=e("./json_highlight_rules").JsonHighlightRules,l=e("./javascript_highlight_rules").JavaScriptHighlightRules,c=function(){var e="abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|anyrange|array|as|asc|assertion|assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|bigint|binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|create|cross|cstring|csv|current|current_catalog|current_date|current_role|current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|date|daterange|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|definer|delete|delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|domain|double|drop|each|else|enable|encoding|encrypted|end|enum|escape|event|event_trigger|except|exclude|excluding|exclusive|execute|exists|explain|extension|external|extract|false|family|fdw_handler|fetch|first|float|float4|float8|following|for|force|foreign|forward|freeze|from|full|function|functions|global|grant|granted|greatest|group|gtsvector|handler|having|header|hold|hour|identity|if|ilike|immediate|immutable|implicit|in|including|increment|index|indexes|inet|inherit|inherits|initially|inline|inner|inout|input|insensitive|insert|instead|int|int2|int2vector|int4|int4range|int8|int8range|integer|internal|intersect|interval|into|invoker|is|isnull|isolation|join|json|key|label|language|language_handler|large|last|lateral|lc_collate|lc_ctype|leading|leakproof|least|left|level|like|limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|mapping|match|materialized|maxvalue|minute|minvalue|mode|money|month|move|name|names|national|natural|nchar|next|no|none|not|nothing|notify|notnull|nowait|null|nullif|nulls|numeric|numrange|object|of|off|offset|oid|oids|oidvector|on|only|opaque|operator|option|options|or|order|out|outer|over|overlaps|overlay|owned|owner|parser|partial|partition|passing|password|path|pg_attribute|pg_auth_members|pg_authid|pg_class|pg_database|pg_node_tree|pg_proc|pg_type|placing|plans|point|polygon|position|preceding|precision|prepare|prepared|preserve|primary|prior|privileges|procedural|procedure|program|quote|range|read|real|reassign|recheck|record|recursive|ref|refcursor|references|refresh|regclass|regconfig|regdictionary|regoper|regoperator|regproc|regprocedure|regtype|reindex|relative|release|reltime|rename|repeatable|replace|replica|reset|restart|restrict|returning|returns|revoke|right|role|rollback|row|rows|rule|savepoint|schema|scroll|search|second|security|select|sequence|sequences|serializable|server|session|session_user|set|setof|share|show|similar|simple|smallint|smgr|snapshot|some|stable|standalone|start|statement|statistics|stdin|stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|tablespace|temp|template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|tinterval|to|trailing|transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsrange|tstzrange|tsvector|txid_snapshot|type|types|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone",t="RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|acldefault|aclexplode|aclinsert|aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|anyarray_in|anyarray_out|anyarray_recv|anyarray_send|anyelement_in|anyelement_out|anyenum_in|anyenum_out|anynonarray_in|anynonarray_out|anyrange_in|anyrange_out|anytextcat|area|areajoinsel|areasel|array_agg|array_agg_finalfn|array_agg_transfn|array_append|array_cat|array_dims|array_eq|array_fill|array_ge|array_gt|array_in|array_larger|array_le|array_length|array_lower|array_lt|array_ndims|array_ne|array_out|array_prepend|array_recv|array_remove|array_replace|array_send|array_smaller|array_to_json|array_to_string|array_typanalyze|array_upper|arraycontained|arraycontains|arraycontjoinsel|arraycontsel|arrayoverlap|ascii|ascii_to_mic|ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|big5_to_utf8|bit_and|bit_in|bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|bitcmp|biteq|bitge|bitgt|bitle|bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|bittypmodin|bittypmodout|bitxor|bool|bool_and|bool_or|booland_statefunc|booleq|boolge|boolgt|boolin|boolle|boollt|boolne|boolor_statefunc|boolout|boolrecv|boolsend|box|box_above|box_above_eq|box_add|box_below|box_below_eq|box_center|box_contain|box_contain_pt|box_contained|box_distance|box_div|box_eq|box_ge|box_gt|box_in|box_intersect|box_le|box_left|box_lt|box_mul|box_out|box_overabove|box_overbelow|box_overlap|box_overleft|box_overright|box_recv|box_right|box_same|box_send|box_sub|bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|bpchar_pattern_le|bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|bpchargt|bpchariclike|bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|bpcharlike|bpcharlt|bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|bpcharregexne|bpcharsend|bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|btarraycmp|btbeginscan|btboolcmp|btbpchar_pattern_cmp|btbuild|btbuildempty|btbulkdelete|btcanreturn|btcharcmp|btcostestimate|btendscan|btfloat48cmp|btfloat4cmp|btfloat4sortsupport|btfloat84cmp|btfloat8cmp|btfloat8sortsupport|btgetbitmap|btgettuple|btinsert|btint24cmp|btint28cmp|btint2cmp|btint2sortsupport|btint42cmp|btint48cmp|btint4cmp|btint4sortsupport|btint82cmp|btint84cmp|btint8cmp|btint8sortsupport|btmarkpos|btnamecmp|btnamesortsupport|btoidcmp|btoidsortsupport|btoidvectorcmp|btoptions|btrecordcmp|btreltimecmp|btrescan|btrestrpos|btrim|bttext_pattern_cmp|bttextcmp|bttidcmp|bttintervalcmp|btvacuumcleanup|bytea_string_agg_finalfn|bytea_string_agg_transfn|byteacat|byteacmp|byteaeq|byteage|byteagt|byteain|byteale|bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|cash_cmp|cash_div_cash|cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|cash_ge|cash_gt|cash_in|cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|cash_mul_int2|cash_mul_int4|cash_ne|cash_out|cash_pl|cash_recv|cash_send|cash_words|cashlarger|cashsmaller|cbrt|ceil|ceiling|center|char|char_length|character_length|chareq|charge|chargt|charin|charle|charlt|charne|charout|charrecv|charsend|chr|cideq|cidin|cidout|cidr|cidr_in|cidr_out|cidr_recv|cidr_send|cidrecv|cidsend|circle|circle_above|circle_add_pt|circle_below|circle_center|circle_contain|circle_contain_pt|circle_contained|circle_distance|circle_div_pt|circle_eq|circle_ge|circle_gt|circle_in|circle_le|circle_left|circle_lt|circle_mul_pt|circle_ne|circle_out|circle_overabove|circle_overbelow|circle_overlap|circle_overleft|circle_overright|circle_recv|circle_right|circle_same|circle_send|circle_sub_pt|clock_timestamp|close_lb|close_ls|close_lseg|close_pb|close_pl|close_ps|close_sb|close_sl|col_description|concat|concat_ws|contjoinsel|contsel|convert|convert_from|convert_to|corr|cos|cot|count|covar_pop|covar_samp|cstring_in|cstring_out|cstring_recv|cstring_send|cume_dist|current_database|current_query|current_schema|current_schemas|current_setting|current_user|currtid|currtid2|currval|cursor_to_xml|cursor_to_xmlschema|database_to_xml|database_to_xml_and_xmlschema|database_to_xmlschema|date|date_cmp|date_cmp_timestamp|date_cmp_timestamptz|date_eq|date_eq_timestamp|date_eq_timestamptz|date_ge|date_ge_timestamp|date_ge_timestamptz|date_gt|date_gt_timestamp|date_gt_timestamptz|date_in|date_larger|date_le|date_le_timestamp|date_le_timestamptz|date_lt|date_lt_timestamp|date_lt_timestamptz|date_mi|date_mi_interval|date_mii|date_ne|date_ne_timestamp|date_ne_timestamptz|date_out|date_part|date_pl_interval|date_pli|date_recv|date_send|date_smaller|date_sortsupport|date_trunc|daterange|daterange_canonical|daterange_subdiff|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|dense_rank|dexp|diagonal|diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|dist_pc|dist_pl|dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|dpow|dround|dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|dsynonym_init|dsynonym_lexize|dtrunc|elem_contained_by_range|encode|enum_cmp|enum_eq|enum_first|enum_ge|enum_gt|enum_in|enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|enum_range|enum_recv|enum_send|enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|euc_cn_to_utf8|euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|euc_jp_to_sjis|euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|euc_tw_to_mic|euc_tw_to_utf8|event_trigger_in|event_trigger_out|every|exp|factorial|family|fdw_handler_in|fdw_handler_out|first_value|float4|float48div|float48eq|float48ge|float48gt|float48le|float48lt|float48mi|float48mul|float48ne|float48pl|float4_accum|float4abs|float4div|float4eq|float4ge|float4gt|float4in|float4larger|float4le|float4lt|float4mi|float4mul|float4ne|float4out|float4pl|float4recv|float4send|float4smaller|float4um|float4up|float8|float84div|float84eq|float84ge|float84gt|float84le|float84lt|float84mi|float84mul|float84ne|float84pl|float8_accum|float8_avg|float8_corr|float8_covar_pop|float8_covar_samp|float8_regr_accum|float8_regr_avgx|float8_regr_avgy|float8_regr_intercept|float8_regr_r2|float8_regr_slope|float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|float8_stddev_samp|float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|float8ge|float8gt|float8in|float8larger|float8le|float8lt|float8mi|float8mul|float8ne|float8out|float8pl|float8recv|float8send|float8smaller|float8um|float8up|floor|flt4_mul_cash|flt8_mul_cash|fmgr_c_validator|fmgr_internal_validator|fmgr_sql_validator|format|format_type|gb18030_to_utf8|gbk_to_utf8|generate_series|generate_subscripts|get_bit|get_byte|get_current_ts_config|getdatabaseencoding|getpgusername|gin_cmp_prefix|gin_cmp_tslexeme|gin_extract_tsquery|gin_extract_tsvector|gin_tsquery_consistent|ginarrayconsistent|ginarrayextract|ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|gincostestimate|ginendscan|gingetbitmap|gininsert|ginmarkpos|ginoptions|ginqueryarrayextract|ginrescan|ginrestrpos|ginvacuumcleanup|gist_box_compress|gist_box_consistent|gist_box_decompress|gist_box_penalty|gist_box_picksplit|gist_box_same|gist_box_union|gist_circle_compress|gist_circle_consistent|gist_point_compress|gist_point_consistent|gist_point_distance|gist_poly_compress|gist_poly_consistent|gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|gistcostestimate|gistendscan|gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|gistoptions|gistrescan|gistrestrpos|gistvacuumcleanup|gtsquery_compress|gtsquery_consistent|gtsquery_decompress|gtsquery_penalty|gtsquery_picksplit|gtsquery_same|gtsquery_union|gtsvector_compress|gtsvector_consistent|gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|gtsvector_same|gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|has_function_privilege|has_language_privilege|has_schema_privilege|has_sequence_privilege|has_server_privilege|has_table_privilege|has_tablespace_privilege|has_type_privilege|hash_aclitem|hash_array|hash_numeric|hash_range|hashbeginscan|hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|hashcostestimate|hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|hashinet|hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|hashname|hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|hashvacuumcleanup|hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|icnlikejoinsel|icnlikesel|icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|inet_client_addr|inet_client_port|inet_in|inet_out|inet_recv|inet_send|inet_server_addr|inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|initcap|int2|int24div|int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|int24pl|int28div|int28eq|int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|int2_accum|int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|int2gt|int2in|int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|int2pl|int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|int2vectorin|int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|int42ge|int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|int48gt|int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|int4_mul_cash|int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|int4larger|int4le|int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|int4range|int4range_canonical|int4range_subdiff|int4recv|int4send|int4shl|int4shr|int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|int82le|int82lt|int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|int84lt|int84mi|int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|int8abs|int8and|int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|int8inc_float8_float8|int8larger|int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|int8or|int8out|int8pl|int8pl_inet|int8range|int8range_canonical|int8range_subdiff|int8recv|int8send|int8shl|int8shr|int8smaller|int8um|int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|internal_out|interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|interval_ge|interval_gt|interval_hash|interval_in|interval_larger|interval_le|interval_lt|interval_mi|interval_mul|interval_ne|interval_out|interval_pl|interval_pl_date|interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|interval_pl_timetz|interval_recv|interval_send|interval_smaller|interval_transform|interval_um|intervaltypmodin|intervaltypmodout|intinterval|isclosed|isempty|isfinite|ishorizontal|iso8859_1_to_utf8|iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|iso_to_win866|isopen|isparallel|isperp|isvertical|johab_to_utf8|json_agg|json_agg_finalfn|json_agg_transfn|json_array_element|json_array_element_text|json_array_elements|json_array_length|json_each|json_each_text|json_extract_path|json_extract_path_op|json_extract_path_text|json_extract_path_text_op|json_in|json_object_field|json_object_field_text|json_object_keys|json_out|json_populate_record|json_populate_recordset|json_recv|json_send|justify_days|justify_hours|justify_interval|koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|koi8r_to_win1251|koi8r_to_win866|koi8u_to_utf8|lag|language_handler_in|language_handler_out|last_value|lastval|latin1_to_mic|latin2_to_mic|latin2_to_win1250|latin3_to_mic|latin4_to_mic|lead|left|length|like|like_escape|likejoinsel|likesel|line|line_distance|line_eq|line_horizontal|line_in|line_interpt|line_intersect|line_out|line_parallel|line_perp|line_recv|line_send|line_vertical|ln|lo_close|lo_creat|lo_create|lo_export|lo_import|lo_lseek|lo_lseek64|lo_open|lo_tell|lo_tell64|lo_truncate|lo_truncate64|lo_unlink|log|loread|lower|lower_inc|lower_inf|lowrite|lpad|lseg|lseg_center|lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_and|macaddr_cmp|macaddr_eq|macaddr_ge|macaddr_gt|macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_not|macaddr_or|macaddr_out|macaddr_recv|macaddr_send|makeaclitem|masklen|max|md5|mic_to_ascii|mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|mic_to_koi8r|mic_to_latin1|mic_to_latin2|mic_to_latin3|mic_to_latin4|mic_to_sjis|mic_to_win1250|mic_to_win1251|mic_to_win866|min|mktinterval|mod|money|mul_d_interval|name|nameeq|namege|namegt|nameiclike|nameicnlike|nameicregexeq|nameicregexne|namein|namele|namelike|namelt|namene|namenlike|nameout|namerecv|nameregexeq|nameregexne|namesend|neqjoinsel|neqsel|netmask|network|network_cmp|network_eq|network_ge|network_gt|network_le|network_lt|network_ne|network_sub|network_subeq|network_sup|network_supeq|nextval|nlikejoinsel|nlikesel|notlike|now|npoints|nth_value|ntile|numeric_abs|numeric_accum|numeric_add|numeric_avg|numeric_avg_accum|numeric_cmp|numeric_div|numeric_div_trunc|numeric_eq|numeric_exp|numeric_fac|numeric_ge|numeric_gt|numeric_in|numeric_inc|numeric_larger|numeric_le|numeric_ln|numeric_log|numeric_lt|numeric_mod|numeric_mul|numeric_ne|numeric_out|numeric_power|numeric_recv|numeric_send|numeric_smaller|numeric_sqrt|numeric_stddev_pop|numeric_stddev_samp|numeric_sub|numeric_transform|numeric_uminus|numeric_uplus|numeric_var_pop|numeric_var_samp|numerictypmodin|numerictypmodout|numnode|numrange|numrange_subdiff|obj_description|octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|oidrecv|oidsend|oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|oidvectorlt|oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|on_pl|on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|path_add_pt|path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|path_length|path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|path_out|path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|pg_available_extension_versions|pg_available_extensions|pg_backend_pid|pg_backup_start_time|pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|pg_collation_for|pg_collation_is_visible|pg_column_is_updatable|pg_column_size|pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|pg_event_trigger_dropped_objects|pg_export_snapshot|pg_extension_config_dump|pg_extension_update_paths|pg_function_is_visible|pg_get_constraintdef|pg_get_expr|pg_get_function_arguments|pg_get_function_identity_arguments|pg_get_function_result|pg_get_functiondef|pg_get_indexdef|pg_get_keywords|pg_get_multixact_members|pg_get_ruledef|pg_get_serial_sequence|pg_get_triggerdef|pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_identify_object|pg_indexes_size|pg_is_in_backup|pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|pg_opfamily_is_visible|pg_options_to_table|pg_postmaster_start_time|pg_prepared_statement|pg_prepared_xact|pg_read_binary_file|pg_read_file|pg_relation_filenode|pg_relation_filepath|pg_relation_is_updatable|pg_relation_size|pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|pg_show_all_settings|pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|pg_stat_file|pg_stat_get_activity|pg_stat_get_analyze_count|pg_stat_get_autoanalyze_count|pg_stat_get_autovacuum_count|pg_stat_get_backend_activity|pg_stat_get_backend_activity_start|pg_stat_get_backend_client_addr|pg_stat_get_backend_client_port|pg_stat_get_backend_dbid|pg_stat_get_backend_idset|pg_stat_get_backend_pid|pg_stat_get_backend_start|pg_stat_get_backend_userid|pg_stat_get_backend_waiting|pg_stat_get_backend_xact_start|pg_stat_get_bgwriter_buf_written_checkpoints|pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|pg_stat_get_buf_written_backend|pg_stat_get_checkpoint_sync_time|pg_stat_get_checkpoint_write_time|pg_stat_get_db_blk_read_time|pg_stat_get_db_blk_write_time|pg_stat_get_db_blocks_fetched|pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|pg_stat_get_db_conflict_tablespace|pg_stat_get_db_deadlocks|pg_stat_get_db_numbackends|pg_stat_get_db_stat_reset_time|pg_stat_get_db_temp_bytes|pg_stat_get_db_temp_files|pg_stat_get_db_tuples_deleted|pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|pg_stat_get_function_calls|pg_stat_get_function_self_time|pg_stat_get_function_total_time|pg_stat_get_last_analyze_time|pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_total_time|pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|pg_tablespace_databases|pg_tablespace_location|pg_tablespace_size|pg_terminate_backend|pg_timezone_abbrevs|pg_timezone_names|pg_total_relation_size|pg_trigger_depth|pg_try_advisory_lock|pg_try_advisory_lock_shared|pg_try_advisory_xact_lock|pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|pg_ts_dict_is_visible|pg_ts_parser_is_visible|pg_ts_template_is_visible|pg_type_is_visible|pg_typeof|pg_xlog_location_diff|pg_xlog_replay_pause|pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|pi|plainto_tsquery|plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|point|point_above|point_add|point_below|point_distance|point_div|point_eq|point_horiz|point_in|point_left|point_mul|point_ne|point_out|point_recv|point_right|point_send|point_sub|point_vert|poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|poly_contained|poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|poly_overbelow|poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|poly_same|poly_send|polygon|popen|position|positionjoinsel|positionsel|postgresql_fdw_validator|pow|power|prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|prsd_start|pt_contained_circle|pt_contained_poly|query_to_xml|query_to_xml_and_xmlschema|query_to_xmlschema|querytree|quote_ident|quote_literal|quote_nullable|radians|radius|random|range_adjacent|range_after|range_before|range_cmp|range_contained_by|range_contains|range_contains_elem|range_eq|range_ge|range_gist_compress|range_gist_consistent|range_gist_decompress|range_gist_penalty|range_gist_picksplit|range_gist_same|range_gist_union|range_gt|range_in|range_intersect|range_le|range_lt|range_minus|range_ne|range_out|range_overlaps|range_overleft|range_overright|range_recv|range_send|range_typanalyze|range_union|rangesel|rank|record_eq|record_ge|record_gt|record_in|record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|row_to_json|rpad|rtrim|scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|smgrout|spg_kd_choose|spg_kd_config|spg_kd_inner_consistent|spg_kd_picksplit|spg_quad_choose|spg_quad_config|spg_quad_inner_consistent|spg_quad_leaf_consistent|spg_quad_picksplit|spg_range_quad_choose|spg_range_quad_config|spg_range_quad_inner_consistent|spg_range_quad_leaf_consistent|spg_range_quad_picksplit|spg_text_choose|spg_text_config|spg_text_inner_consistent|spg_text_leaf_consistent|spg_text_picksplit|spgbeginscan|spgbuild|spgbuildempty|spgbulkdelete|spgcanreturn|spgcostestimate|spgendscan|spggetbitmap|spggettuple|spginsert|spgmarkpos|spgoptions|spgrescan|spgrestrpos|spgvacuumcleanup|split_part|sqrt|statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|string_agg_finalfn|string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|time_smaller|time_transform|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|timestamp_sortsupport|timestamp_transform|timestamptypmodin|timestamptypmodout|timestamptz_cmp|timestamptz_cmp_date|timestamptz_cmp_timestamp|timestamptz_eq|timestamptz_eq_date|timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|to_json|to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsrange|tsrange_subdiff|tstzrange|tstzrange_subdiff|tsvector_cmp|tsvector_concat|tsvector_eq|tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|tsvector_ne|tsvector_update_trigger|tsvector_update_trigger_column|tsvectorin|tsvectorout|tsvectorrecv|tsvectorsend|txid_current|txid_current_snapshot|txid_snapshot_in|txid_snapshot_out|txid_snapshot_recv|txid_snapshot_send|txid_snapshot_xip|txid_snapshot_xmax|txid_snapshot_xmin|txid_visible_in_snapshot|uhc_to_utf8|unique_key_recheck|unknownin|unknownout|unknownrecv|unknownsend|unnest|upper|upper_inc|upper_inf|utf8_to_ascii|utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|utf8_to_euc_kr|utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|utf8_to_iso8859_1|utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|utf8_to_sjis|utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|uuid_le|uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|varbit_out|varbit_recv|varbit_send|varbit_transform|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|varbitlt|varbitne|varbittypmodin|varbittypmodout|varchar_transform|varcharin|varcharout|varcharrecv|varcharsend|varchartypmodin|varchartypmodout|variance|version|void_in|void_out|void_recv|void_send|width|width_bucket|win1250_to_latin2|win1250_to_mic|win1251_to_iso|win1251_to_koi8r|win1251_to_mic|win1251_to_win866|win866_to_iso|win866_to_koi8r|win866_to_mic|win866_to_win1251|win_to_utf8|xideq|xideqint4|xidin|xidout|xidrecv|xidsend|xml|xml_in|xml_is_well_formed|xml_is_well_formed_content|xml_is_well_formed_document|xml_out|xml_recv|xml_send|xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|xpath_exists",n=this.createKeywordMapper({"support.function":t,keyword:e},"identifier",!0),r=[{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"variable.language",regex:'".*?"'},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:n,regex:"[a-zA-Z_][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|!!|!~|!~\\*|!~~|!~~\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\&|\\&\\&|\\&<|\\&<\\||\\&>|\\*|\\+|\\-|/|<|<#>|<\\->|<<|<<=|<<\\||<=|<>|<\\?>|<@|<\\^|=|>|>=|>>|>>=|>\\^|\\?#|\\?\\-|\\?\\-\\||\\?\\||\\?\\|\\||@|@\\-@|@>|@@|@@@|\\^|\\||\\|\\&>|\\|/|\\|>>|\\|\\||\\|\\|/|~|~\\*|~<=~|~<~|~=|~>=~|~>~|~~|~~\\*"},{token:"paren.lparen",regex:"[\\(]"},{token:"paren.rparen",regex:"[\\)]"},{token:"text",regex:"\\s+"}];this.$rules={start:[{token:"comment",regex:"--.*$"},s.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"keyword.statementBegin",regex:"[a-zA-Z]+",next:"statement"},{token:"support.buildin",regex:"^\\\\[\\S]+.*$"}],statement:[{token:"comment",regex:"--.*$"},{token:"comment",regex:"\\/\\*",next:"commentStatement"},{token:"statementEnd",regex:";",next:"start"},{token:"string",regex:"\\$perl\\$",next:"perl-start"},{token:"string",regex:"\\$python\\$",next:"python-start"},{token:"string",regex:"\\$json\\$",next:"json-start"},{token:"string",regex:"\\$(js|javascript)\\$",next:"javascript-start"},{token:"string",regex:"\\$[\\w_0-9]*\\$$",next:"dollarSql"},{token:"string",regex:"\\$[\\w_0-9]*\\$",next:"dollarStatementString"}].concat(r),dollarSql:[{token:"comment",regex:"--.*$"},{token:"comment",regex:"\\/\\*",next:"commentDollarSql"},{token:"string",regex:"^\\$[\\w_0-9]*\\$",next:"statement"},{token:"string",regex:"\\$[\\w_0-9]*\\$",next:"dollarSqlString"}].concat(r),comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],commentStatement:[{token:"comment",regex:"\\*\\/",next:"statement"},{defaultToken:"comment"}],commentDollarSql:[{token:"comment",regex:"\\*\\/",next:"dollarSql"},{defaultToken:"comment"}],dollarStatementString:[{token:"string",regex:".*?\\$[\\w_0-9]*\\$",next:"statement"},{token:"string",regex:".+"}],dollarSqlString:[{token:"string",regex:".*?\\$[\\w_0-9]*\\$",next:"dollarSql"},{token:"string",regex:".+"}]},this.embedRules(s,"doc-",[s.getEndRule("start")]),this.embedRules(u,"perl-",[{token:"string",regex:"\\$perl\\$",next:"statement"}]),this.embedRules(a,"python-",[{token:"string",regex:"\\$python\\$",next:"statement"}]),this.embedRules(f,"json-",[{token:"string",regex:"\\$json\\$",next:"statement"}]),this.embedRules(l,"javascript-",[{token:"string",regex:"\\$(js|javascript)\\$",next:"statement"}])};r.inherits(c,o),t.PgsqlHighlightRules=c}),define("ace/mode/pgsql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/pgsql_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../mode/text").Mode,s=e("./pgsql_highlight_rules").PgsqlHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart="--",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){return e=="start"||e=="keyword.statementEnd"?"":this.$getIndent(t)},this.$id="ace/mode/pgsql"}.call(o.prototype),t.Mode=o}); (function() { + window.require(["ace/mode/pgsql"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-php.js b/BTPanel/static/ace/mode-php.js new file mode 100644 index 00000000..d0e2f36e --- /dev/null +++ b/BTPanel/static/ace/mode-php.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom",f=t.supportConstantColor="aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen",l=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"paren.rparen",regex:"\\}"},{token:"string",regex:"@(?!viewport)",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"keyword",regex:"%"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant.numeric",regex:c},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"start"},{token:"paren.rparen",regex:"\\}",next:"start"},{token:"string",regex:";",next:"start"},{token:"keyword",regex:"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)"}],comments:[{token:"comment",regex:"\\/\\*",push:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}]}],ruleset:[{regex:"-(webkit|ms|moz|o)-",token:"text"},{token:"punctuation.operator",regex:"[:;]"},{token:"paren.rparen",regex:"\\}",next:"start"},{include:["strings","url","comments"]},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{include:"url"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}],url:[{token:"support.function",regex:"(?:url(:?-prefix)?|domain|regexp)\\(",push:[{token:"support.function",regex:"\\)",next:"pop"},{defaultToken:"string"}]}],strings:[{token:"string.start",regex:"'",push:[{token:"string.end",regex:"'|$",next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]},{token:"string.start",regex:'"',push:[{token:"string.end",regex:'"|$',next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]}],escapes:[{token:"constant.language.escape",regex:/\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/,next:"start"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){var t="[_:a-zA-Z\u00c0-\uffff][-_:.a-zA-Z0-9\u00c0-\uffff]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.start.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.end.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_highlight_rules").XmlHighlightRules,a=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),f=function(){u.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:.]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var n=a[t];return["meta.tag.punctuation."+(e=="<"?"":"end-")+"tag-open.xml","meta.tag"+(n?"."+n:"")+".tag-name.xml"]},regex:"(",next:"start"}]}),this.embedTagRules(s,"css-","style"),this.embedTagRules((new o({jsx:!1})).getRules(),"js-","script"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define("ace/mode/php_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules","ace/mode/html_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=e("./html_highlight_rules").HtmlHighlightRules,a=function(){var e=s,t=i.arrayToMap("abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|get_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|mysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|mysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|mysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|mysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|mysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|mysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|mysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|mysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|mysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|mysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|mysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|mysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|mysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|mysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|mysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|mysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|mysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|mysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type".split("|")),n=i.arrayToMap("abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|final|finally|for|foreach|function|global|goto|if|implements|instanceof|insteadof|interface|namespace|new|or|private|protected|public|static|switch|throw|trait|try|use|var|while|xor|yield".split("|")),r=i.arrayToMap("__halt_compiler|die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset".split("|")),o=i.arrayToMap("true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__|__TRAIT__".split("|")),u=i.arrayToMap("$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv".split("|")),a=i.arrayToMap("key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase".split("|")),f=i.arrayToMap("cfunction|old_function".split("|")),l=i.arrayToMap([]);this.$rules={start:[{token:"comment",regex:/(?:#|\/\/)(?:[^?]|\?[^>])*/},e.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/][gimy]*\\s*(?=[).,;]|$)"},{token:"string",regex:'"',next:"qqstring"},{token:"string",regex:"'",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language",regex:"\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\b"},{token:["keyword","text","support.class"],regex:"\\b(new)(\\s+)(\\w+)"},{token:["support.class","keyword.operator"],regex:"\\b(\\w+)(::)"},{token:"constant.language",regex:"\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\b"},{token:function(e){return n.hasOwnProperty(e)?"keyword":o.hasOwnProperty(e)?"constant.language":u.hasOwnProperty(e)?"variable.language":l.hasOwnProperty(e)?"invalid.illegal":t.hasOwnProperty(e)?"support.function":e=="debugger"?"invalid.deprecated":e.match(/^(\$[a-zA-Z_\x7f-\uffff][a-zA-Z0-9_\x7f-\uffff]*|self|parent)$/)?"variable":"identifier"},regex:/[a-zA-Z_$\x7f-\uffff][a-zA-Z0-9_\x7f-\uffff]*/},{onMatch:function(e,t,n){e=e.substr(3);if(e[0]=="'"||e[0]=='"')e=e.slice(1,-1);return n.unshift(this.next,e),"markup.list"},regex:/<<<(?:\w+|'\w+'|"\w+")$/,next:"heredoc"},{token:"keyword.operator",regex:"::|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|\\.=|=|!|&&|\\|\\||\\?\\:|\\*=|/=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"punctuation.operator",regex:/[,;]/},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],heredoc:[{onMatch:function(e,t,n){return n[1]!=e?"string":(n.shift(),n.shift(),"markup.list")},regex:"^\\w+(?=;?$)",next:"start"},{token:"string",regex:".*"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],qqstring:[{token:"constant.language.escape",regex:'\\\\(?:[nrtvef\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},{token:"variable",regex:/\$[\w]+(?:\[[\w\]+]|[=\-]>\w+)?/},{token:"variable",regex:/\$\{[^"\}]+\}?/},{token:"string",regex:'"',next:"start"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:/\\['\\]/},{token:"string",regex:"'",next:"start"},{defaultToken:"string"}]},this.embedRules(s,"doc-",[s.getEndRule("start")])};r.inherits(a,o);var f=function(){u.call(this);var e=[{token:"support.php_tag",regex:"<\\?(?:php|=)?",push:"php-start"}],t=[{token:"support.php_tag",regex:"\\?>",next:"pop"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(a,"php-",t,["start"]),this.normalizeRules()};r.inherits(f,u),t.PhpHighlightRules=f,t.PhpLangHighlightRules=a}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/php_completions",["require","exports","module"],function(e,t,n){"use strict";function s(e,t){return e.type.lastIndexOf(t)>-1}var r={abs:["int abs(int number)","Return the absolute value of the number"],acos:["float acos(float number)","Return the arc cosine of the number in radians"],acosh:["float acosh(float number)","Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number"],addGlob:["bool addGlob(string pattern[,int flags [, array options]])","Add files matching the glob pattern. See php's glob for the pattern syntax."],addPattern:["bool addPattern(string pattern[, string path [, array options]])","Add files matching the pcre pattern. See php's pcre for the pattern syntax."],addcslashes:["string addcslashes(string str, string charlist)","Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\n', '\\r', '\\t' etc...)"],addslashes:["string addslashes(string str)","Escapes single quote, double quotes and backslash characters in a string with backslashes"],apache_child_terminate:["bool apache_child_terminate(void)","Terminate apache process after this request"],apache_get_modules:["array apache_get_modules(void)","Get a list of loaded Apache modules"],apache_get_version:["string apache_get_version(void)","Fetch Apache version"],apache_getenv:["bool apache_getenv(string variable [, bool walk_to_top])","Get an Apache subprocess_env variable"],apache_lookup_uri:["object apache_lookup_uri(string URI)","Perform a partial request of the given URI to obtain information about it"],apache_note:["string apache_note(string note_name [, string note_value])","Get and set Apache request notes"],apache_request_auth_name:["string apache_request_auth_name()",""],apache_request_auth_type:["string apache_request_auth_type()",""],apache_request_discard_request_body:["long apache_request_discard_request_body()",""],apache_request_err_headers_out:["array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])","* fetch all headers that go out in case of an error or a subrequest"],apache_request_headers:["array apache_request_headers(void)","Fetch all HTTP request headers"],apache_request_headers_in:["array apache_request_headers_in()","* fetch all incoming request headers"],apache_request_headers_out:["array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])","* fetch all outgoing request headers"],apache_request_is_initial_req:["bool apache_request_is_initial_req()",""],apache_request_log_error:["boolean apache_request_log_error(string message, [long facility])",""],apache_request_meets_conditions:["long apache_request_meets_conditions()",""],apache_request_remote_host:["int apache_request_remote_host([int type])",""],apache_request_run:["long apache_request_run()","This is a wrapper for ap_sub_run_req and ap_destory_sub_req. It takes sub_request, runs it, destroys it, and returns it's status."],apache_request_satisfies:["long apache_request_satisfies()",""],apache_request_server_port:["int apache_request_server_port()",""],apache_request_set_etag:["void apache_request_set_etag()",""],apache_request_set_last_modified:["void apache_request_set_last_modified()",""],apache_request_some_auth_required:["bool apache_request_some_auth_required()",""],apache_request_sub_req_lookup_file:["object apache_request_sub_req_lookup_file(string file)","Returns sub-request for the specified file. You would need to run it yourself with run()."],apache_request_sub_req_lookup_uri:["object apache_request_sub_req_lookup_uri(string uri)","Returns sub-request for the specified uri. You would need to run it yourself with run()"],apache_request_sub_req_method_uri:["object apache_request_sub_req_method_uri(string method, string uri)","Returns sub-request for the specified file. You would need to run it yourself with run()."],apache_request_update_mtime:["long apache_request_update_mtime([int dependency_mtime])",""],apache_reset_timeout:["bool apache_reset_timeout(void)","Reset the Apache write timer"],apache_response_headers:["array apache_response_headers(void)","Fetch all HTTP response headers"],apache_setenv:["bool apache_setenv(string variable, string value [, bool walk_to_top])","Set an Apache subprocess_env variable"],array_change_key_case:["array array_change_key_case(array input [, int case=CASE_LOWER])","Retuns an array with all string keys lowercased [or uppercased]"],array_chunk:["array array_chunk(array input, int size [, bool preserve_keys])","Split array into chunks"],array_combine:["array array_combine(array keys, array values)","Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values"],array_count_values:["array array_count_values(array input)","Return the value as key and the frequency of that value in input as value"],array_diff:["array array_diff(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have values which are not present in any of the others arguments."],array_diff_assoc:["array array_diff_assoc(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal"],array_diff_key:["array array_diff_key(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved."],array_diff_uassoc:["array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)","Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function."],array_diff_ukey:["array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)","Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved."],array_fill:["array array_fill(int start_key, int num, mixed val)","Create an array containing num elements starting with index start_key each initialized to val"],array_fill_keys:["array array_fill_keys(array keys, mixed val)","Create an array using the elements of the first parameter as keys each initialized to val"],array_filter:["array array_filter(array input [, mixed callback])","Filters elements from the array via the callback."],array_flip:["array array_flip(array input)","Return array with key <-> value flipped"],array_intersect:["array array_intersect(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have values which are present in all the other arguments"],array_intersect_assoc:["array array_intersect_assoc(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check"],array_intersect_key:["array array_intersect_key(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data."],array_intersect_uassoc:["array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)","Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback."],array_intersect_ukey:["array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)","Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data."],array_key_exists:["bool array_key_exists(mixed key, array search)","Checks if the given key or index exists in the array"],array_keys:["array array_keys(array input [, mixed search_value[, bool strict]])","Return just the keys from the input array, optionally only for the specified search_value"],array_map:["array array_map(mixed callback, array input1 [, array input2 ,...])","Applies the callback to the elements in given arrays."],array_merge:["array array_merge(array arr1, array arr2 [, array ...])","Merges elements from passed arrays into one array"],array_merge_recursive:["array array_merge_recursive(array arr1, array arr2 [, array ...])","Recursively merges elements from passed arrays into one array"],array_multisort:["bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])","Sort multiple arrays at once similar to how ORDER BY clause works in SQL"],array_pad:["array array_pad(array input, int pad_size, mixed pad_value)","Returns a copy of input array padded with pad_value to size pad_size"],array_pop:["mixed array_pop(array stack)","Pops an element off the end of the array"],array_product:["mixed array_product(array input)","Returns the product of the array entries"],array_push:["int array_push(array stack, mixed var [, mixed ...])","Pushes elements onto the end of the array"],array_rand:["mixed array_rand(array input [, int num_req])","Return key/keys for random entry/entries in the array"],array_reduce:["mixed array_reduce(array input, mixed callback [, mixed initial])","Iteratively reduce the array to a single value via the callback."],array_replace:["array array_replace(array arr1, array arr2 [, array ...])","Replaces elements from passed arrays into one array"],array_replace_recursive:["array array_replace_recursive(array arr1, array arr2 [, array ...])","Recursively replaces elements from passed arrays into one array"],array_reverse:["array array_reverse(array input [, bool preserve keys])","Return input as a new array with the order of the entries reversed"],array_search:["mixed array_search(mixed needle, array haystack [, bool strict])","Searches the array for a given value and returns the corresponding key if successful"],array_shift:["mixed array_shift(array stack)","Pops an element off the beginning of the array"],array_slice:["array array_slice(array input, int offset [, int length [, bool preserve_keys]])","Returns elements specified by offset and length"],array_splice:["array array_splice(array input, int offset [, int length [, array replacement]])","Removes the elements designated by offset and length and replace them with supplied array"],array_sum:["mixed array_sum(array input)","Returns the sum of the array entries"],array_udiff:["array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)","Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function."],array_udiff_assoc:["array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)","Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function."],array_udiff_uassoc:["array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)","Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions."],array_uintersect:["array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)","Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback."],array_uintersect_assoc:["array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)","Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback."],array_uintersect_uassoc:["array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)","Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks."],array_unique:["array array_unique(array input [, int sort_flags])","Removes duplicate values from array"],array_unshift:["int array_unshift(array stack, mixed var [, mixed ...])","Pushes elements onto the beginning of the array"],array_values:["array array_values(array input)","Return just the values from the input array"],array_walk:["bool array_walk(array input, string funcname [, mixed userdata])","Apply a user function to every member of an array"],array_walk_recursive:["bool array_walk_recursive(array input, string funcname [, mixed userdata])","Apply a user function recursively to every member of an array"],arsort:["bool arsort(array &array_arg [, int sort_flags])","Sort an array in reverse order and maintain index association"],asin:["float asin(float number)","Returns the arc sine of the number in radians"],asinh:["float asinh(float number)","Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number"],asort:["bool asort(array &array_arg [, int sort_flags])","Sort an array and maintain index association"],assert:["int assert(string|bool assertion)","Checks if assertion is false"],assert_options:["mixed assert_options(int what [, mixed value])","Set/get the various assert flags"],atan:["float atan(float number)","Returns the arc tangent of the number in radians"],atan2:["float atan2(float y, float x)","Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x"],atanh:["float atanh(float number)","Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number"],attachIterator:["void attachIterator(Iterator iterator[, mixed info])","Attach a new iterator"],base64_decode:["string base64_decode(string str[, bool strict])","Decodes string using MIME base64 algorithm"],base64_encode:["string base64_encode(string str)","Encodes string using MIME base64 algorithm"],base_convert:["string base_convert(string number, int frombase, int tobase)","Converts a number in a string from any base <= 36 to any base <= 36"],basename:["string basename(string path [, string suffix])","Returns the filename component of the path"],bcadd:["string bcadd(string left_operand, string right_operand [, int scale])","Returns the sum of two arbitrary precision numbers"],bccomp:["int bccomp(string left_operand, string right_operand [, int scale])","Compares two arbitrary precision numbers"],bcdiv:["string bcdiv(string left_operand, string right_operand [, int scale])","Returns the quotient of two arbitrary precision numbers (division)"],bcmod:["string bcmod(string left_operand, string right_operand)","Returns the modulus of the two arbitrary precision operands"],bcmul:["string bcmul(string left_operand, string right_operand [, int scale])","Returns the multiplication of two arbitrary precision numbers"],bcpow:["string bcpow(string x, string y [, int scale])","Returns the value of an arbitrary precision number raised to the power of another"],bcpowmod:["string bcpowmod(string x, string y, string mod [, int scale])","Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous"],bcscale:["bool bcscale(int scale)","Sets default scale parameter for all bc math functions"],bcsqrt:["string bcsqrt(string operand [, int scale])","Returns the square root of an arbitray precision number"],bcsub:["string bcsub(string left_operand, string right_operand [, int scale])","Returns the difference between two arbitrary precision numbers"],bin2hex:["string bin2hex(string data)","Converts the binary representation of data to hex"],bind_textdomain_codeset:["string bind_textdomain_codeset (string domain, string codeset)","Specify the character encoding in which the messages from the DOMAIN message catalog will be returned."],bindec:["int bindec(string binary_number)","Returns the decimal equivalent of the binary number"],bindtextdomain:["string bindtextdomain(string domain_name, string dir)","Bind to the text domain domain_name, looking for translations in dir. Returns the current domain"],birdstep_autocommit:["bool birdstep_autocommit(int index)",""],birdstep_close:["bool birdstep_close(int id)",""],birdstep_commit:["bool birdstep_commit(int index)",""],birdstep_connect:["int birdstep_connect(string server, string user, string pass)",""],birdstep_exec:["int birdstep_exec(int index, string exec_str)",""],birdstep_fetch:["bool birdstep_fetch(int index)",""],birdstep_fieldname:["string birdstep_fieldname(int index, int col)",""],birdstep_fieldnum:["int birdstep_fieldnum(int index)",""],birdstep_freeresult:["bool birdstep_freeresult(int index)",""],birdstep_off_autocommit:["bool birdstep_off_autocommit(int index)",""],birdstep_result:["mixed birdstep_result(int index, mixed col)",""],birdstep_rollback:["bool birdstep_rollback(int index)",""],bzcompress:["string bzcompress(string source [, int blocksize100k [, int workfactor]])","Compresses a string into BZip2 encoded data"],bzdecompress:["string bzdecompress(string source [, int small])","Decompresses BZip2 compressed data"],bzerrno:["int bzerrno(resource bz)","Returns the error number"],bzerror:["array bzerror(resource bz)","Returns the error number and error string in an associative array"],bzerrstr:["string bzerrstr(resource bz)","Returns the error string"],bzopen:["resource bzopen(string|int file|fp, string mode)","Opens a new BZip2 stream"],bzread:["string bzread(resource bz[, int length])","Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified"],cal_days_in_month:["int cal_days_in_month(int calendar, int month, int year)","Returns the number of days in a month for a given year and calendar"],cal_from_jd:["array cal_from_jd(int jd, int calendar)","Converts from Julian Day Count to a supported calendar and return extended information"],cal_info:["array cal_info([int calendar])","Returns information about a particular calendar"],cal_to_jd:["int cal_to_jd(int calendar, int month, int day, int year)","Converts from a supported calendar to Julian Day Count"],call_user_func:["mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])","Call a user function which is the first parameter"],call_user_func_array:["mixed call_user_func_array(string function_name, array parameters)","Call a user function which is the first parameter with the arguments contained in array"],call_user_method:["mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])","Call a user method on a specific object or class"],call_user_method_array:["mixed call_user_method_array(string method_name, mixed object, array params)","Call a user method on a specific object or class using a parameter array"],ceil:["float ceil(float number)","Returns the next highest integer value of the number"],chdir:["bool chdir(string directory)","Change the current directory"],checkdate:["bool checkdate(int month, int day, int year)","Returns true(1) if it is a valid date in gregorian calendar"],chgrp:["bool chgrp(string filename, mixed group)","Change file group"],chmod:["bool chmod(string filename, int mode)","Change file mode"],chown:["bool chown (string filename, mixed user)","Change file owner"],chr:["string chr(int ascii)","Converts ASCII code to a character"],chroot:["bool chroot(string directory)","Change root directory"],chunk_split:["string chunk_split(string str [, int chunklen [, string ending]])","Returns split line"],class_alias:["bool class_alias(string user_class_name , string alias_name [, bool autoload])","Creates an alias for user defined class"],class_exists:["bool class_exists(string classname [, bool autoload])","Checks if the class exists"],class_implements:["array class_implements(mixed what [, bool autoload ])","Return all classes and interfaces implemented by SPL"],class_parents:["array class_parents(object instance [, boolean autoload = true])","Return an array containing the names of all parent classes"],clearstatcache:["void clearstatcache([bool clear_realpath_cache[, string filename]])","Clear file stat cache"],closedir:["void closedir([resource dir_handle])","Close directory connection identified by the dir_handle"],closelog:["bool closelog(void)","Close connection to system logger"],collator_asort:["bool collator_asort( Collator $coll, array(string) $arr )","* Sort array using specified collator, maintaining index association."],collator_compare:["int collator_compare( Collator $coll, string $str1, string $str2 )","* Compare two strings."],collator_create:["Collator collator_create( string $locale )","* Create collator."],collator_get_attribute:["int collator_get_attribute( Collator $coll, int $attr )","* Get collation attribute value."],collator_get_error_code:["int collator_get_error_code( Collator $coll )","* Get collator's last error code."],collator_get_error_message:["string collator_get_error_message( Collator $coll )","* Get text description for collator's last error code."],collator_get_locale:["string collator_get_locale( Collator $coll, int $type )","* Gets the locale name of the collator."],collator_get_sort_key:["bool collator_get_sort_key( Collator $coll, string $str )","* Get a sort key for a string from a Collator. }}}"],collator_get_strength:["int collator_get_strength(Collator coll)","* Returns the current collation strength."],collator_set_attribute:["bool collator_set_attribute( Collator $coll, int $attr, int $val )","* Set collation attribute."],collator_set_strength:["bool collator_set_strength(Collator coll, int strength)","* Set the collation strength."],collator_sort:["bool collator_sort( Collator $coll, array(string) $arr [, int $sort_flags] )","* Sort array using specified collator."],collator_sort_with_sort_keys:["bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )","* Equivalent to standard PHP sort using Collator. * Uses ICU ucol_getSortKey for performance."],com_create_guid:["string com_create_guid()","Generate a globally unique identifier (GUID)"],com_event_sink:["bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])","Connect events from a COM object to a PHP object"],com_get_active_object:["object com_get_active_object(string progid [, int code_page ])","Returns a handle to an already running instance of a COM object"],com_load_typelib:["bool com_load_typelib(string typelib_name [, int case_insensitive])","Loads a Typelibrary and registers its constants"],com_message_pump:["bool com_message_pump([int timeoutms])","Process COM messages, sleeping for up to timeoutms milliseconds"],com_print_typeinfo:["bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)","Print out a PHP class definition for a dispatchable interface"],compact:["array compact(mixed var_names [, mixed ...])","Creates a hash containing variables and their values"],compose_locale:["static string compose_locale($array)","* Creates a locale by combining the parts of locale-ID passed * }}}"],confirm_extname_compiled:["string confirm_extname_compiled(string arg)","Return a string to confirm that the module is compiled in"],connection_aborted:["int connection_aborted(void)","Returns true if client disconnected"],connection_status:["int connection_status(void)","Returns the connection status bitfield"],constant:["mixed constant(string const_name)","Given the name of a constant this function will return the constant's associated value"],convert_cyr_string:["string convert_cyr_string(string str, string from, string to)","Convert from one Cyrillic character set to another"],convert_uudecode:["string convert_uudecode(string data)","decode a uuencoded string"],convert_uuencode:["string convert_uuencode(string data)","uuencode a string"],copy:["bool copy(string source_file, string destination_file [, resource context])","Copy a file"],cos:["float cos(float number)","Returns the cosine of the number in radians"],cosh:["float cosh(float number)","Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2"],count:["int count(mixed var [, int mode])","Count the number of elements in a variable (usually an array)"],count_chars:["mixed count_chars(string input [, int mode])","Returns info about what characters are used in input"],crc32:["string crc32(string str)","Calculate the crc32 polynomial of a string"],create_function:["string create_function(string args, string code)","Creates an anonymous function, and returns its name (funny, eh?)"],crypt:["string crypt(string str [, string salt])","Hash a string"],ctype_alnum:["bool ctype_alnum(mixed c)","Checks for alphanumeric character(s)"],ctype_alpha:["bool ctype_alpha(mixed c)","Checks for alphabetic character(s)"],ctype_cntrl:["bool ctype_cntrl(mixed c)","Checks for control character(s)"],ctype_digit:["bool ctype_digit(mixed c)","Checks for numeric character(s)"],ctype_graph:["bool ctype_graph(mixed c)","Checks for any printable character(s) except space"],ctype_lower:["bool ctype_lower(mixed c)","Checks for lowercase character(s)"],ctype_print:["bool ctype_print(mixed c)","Checks for printable character(s)"],ctype_punct:["bool ctype_punct(mixed c)","Checks for any printable character which is not whitespace or an alphanumeric character"],ctype_space:["bool ctype_space(mixed c)","Checks for whitespace character(s)"],ctype_upper:["bool ctype_upper(mixed c)","Checks for uppercase character(s)"],ctype_xdigit:["bool ctype_xdigit(mixed c)","Checks for character(s) representing a hexadecimal digit"],curl_close:["void curl_close(resource ch)","Close a cURL session"],curl_copy_handle:["resource curl_copy_handle(resource ch)","Copy a cURL handle along with all of it's preferences"],curl_errno:["int curl_errno(resource ch)","Return an integer containing the last error number"],curl_error:["string curl_error(resource ch)","Return a string contain the last error for the current session"],curl_exec:["bool curl_exec(resource ch)","Perform a cURL session"],curl_getinfo:["mixed curl_getinfo(resource ch [, int option])","Get information regarding a specific transfer"],curl_init:["resource curl_init([string url])","Initialize a cURL session"],curl_multi_add_handle:["int curl_multi_add_handle(resource mh, resource ch)","Add a normal cURL handle to a cURL multi handle"],curl_multi_close:["void curl_multi_close(resource mh)","Close a set of cURL handles"],curl_multi_exec:["int curl_multi_exec(resource mh, int &still_running)","Run the sub-connections of the current cURL handle"],curl_multi_getcontent:["string curl_multi_getcontent(resource ch)","Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set"],curl_multi_info_read:["array curl_multi_info_read(resource mh [, long msgs_in_queue])","Get information about the current transfers"],curl_multi_init:["resource curl_multi_init(void)","Returns a new cURL multi handle"],curl_multi_remove_handle:["int curl_multi_remove_handle(resource mh, resource ch)","Remove a multi handle from a set of cURL handles"],curl_multi_select:["int curl_multi_select(resource mh[, double timeout])",'Get all the sockets associated with the cURL extension, which can then be "selected"'],curl_setopt:["bool curl_setopt(resource ch, int option, mixed value)","Set an option for a cURL transfer"],curl_setopt_array:["bool curl_setopt_array(resource ch, array options)","Set an array of option for a cURL transfer"],curl_version:["array curl_version([int version])","Return cURL version information."],current:["mixed current(array array_arg)","Return the element currently pointed to by the internal array pointer"],date:["string date(string format [, long timestamp])","Format a local date/time"],date_add:["DateTime date_add(DateTime object, DateInterval interval)","Adds an interval to the current date in object."],date_create:["DateTime date_create([string time[, DateTimeZone object]])","Returns new DateTime object"],date_create_from_format:["DateTime date_create_from_format(string format, string time[, DateTimeZone object])","Returns new DateTime object formatted according to the specified format"],date_date_set:["DateTime date_date_set(DateTime object, long year, long month, long day)","Sets the date."],date_default_timezone_get:["string date_default_timezone_get()","Gets the default timezone used by all date/time functions in a script"],date_default_timezone_set:["bool date_default_timezone_set(string timezone_identifier)","Sets the default timezone used by all date/time functions in a script"],date_diff:["DateInterval date_diff(DateTime object [, bool absolute])","Returns the difference between two DateTime objects."],date_format:["string date_format(DateTime object, string format)","Returns date formatted according to given format"],date_get_last_errors:["array date_get_last_errors()","Returns the warnings and errors found while parsing a date/time string."],date_interval_create_from_date_string:["DateInterval date_interval_create_from_date_string(string time)","Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string"],date_interval_format:["string date_interval_format(DateInterval object, string format)","Formats the interval."],date_isodate_set:["DateTime date_isodate_set(DateTime object, long year, long week[, long day])","Sets the ISO date."],date_modify:["DateTime date_modify(DateTime object, string modify)","Alters the timestamp."],date_offset_get:["long date_offset_get(DateTime object)","Returns the DST offset."],date_parse:["array date_parse(string date)","Returns associative array with detailed info about given date"],date_parse_from_format:["array date_parse_from_format(string format, string date)","Returns associative array with detailed info about given date"],date_sub:["DateTime date_sub(DateTime object, DateInterval interval)","Subtracts an interval to the current date in object."],date_sun_info:["array date_sun_info(long time, float latitude, float longitude)","Returns an array with information about sun set/rise and twilight begin/end"],date_sunrise:["mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])","Returns time of sunrise for a given day and location"],date_sunset:["mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])","Returns time of sunset for a given day and location"],date_time_set:["DateTime date_time_set(DateTime object, long hour, long minute[, long second])","Sets the time."],date_timestamp_get:["long date_timestamp_get(DateTime object)","Gets the Unix timestamp."],date_timestamp_set:["DateTime date_timestamp_set(DateTime object, long unixTimestamp)","Sets the date and time based on an Unix timestamp."],date_timezone_get:["DateTimeZone date_timezone_get(DateTime object)","Return new DateTimeZone object relative to give DateTime"],date_timezone_set:["DateTime date_timezone_set(DateTime object, DateTimeZone object)","Sets the timezone for the DateTime object."],datefmt_create:["IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )","* Create formatter."],datefmt_format:["string datefmt_format( [mixed]int $args or array $args )","* Format the time value as a string. }}}"],datefmt_get_calendar:["string datefmt_get_calendar( IntlDateFormatter $mf )","* Get formatter calendar."],datefmt_get_datetype:["string datefmt_get_datetype( IntlDateFormatter $mf )","* Get formatter datetype."],datefmt_get_error_code:["int datefmt_get_error_code( IntlDateFormatter $nf )","* Get formatter's last error code."],datefmt_get_error_message:["string datefmt_get_error_message( IntlDateFormatter $coll )","* Get text description for formatter's last error code."],datefmt_get_locale:["string datefmt_get_locale(IntlDateFormatter $mf)","* Get formatter locale."],datefmt_get_pattern:["string datefmt_get_pattern( IntlDateFormatter $mf )","* Get formatter pattern."],datefmt_get_timetype:["string datefmt_get_timetype( IntlDateFormatter $mf )","* Get formatter timetype."],datefmt_get_timezone_id:["string datefmt_get_timezone_id( IntlDateFormatter $mf )","* Get formatter timezone_id."],datefmt_isLenient:["string datefmt_isLenient(IntlDateFormatter $mf)","* Get formatter locale."],datefmt_localtime:["integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])","* Parse the string $value to a localtime array }}}"],datefmt_parse:["integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )","* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}"],datefmt_setLenient:["string datefmt_setLenient(IntlDateFormatter $mf)","* Set formatter lenient."],datefmt_set_calendar:["bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )","* Set formatter calendar."],datefmt_set_pattern:["bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )","* Set formatter pattern."],datefmt_set_timezone_id:["boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)","* Set formatter timezone_id."],dba_close:["void dba_close(resource handle)","Closes database"],dba_delete:["bool dba_delete(string key, resource handle)","Deletes the entry associated with key If inifile: remove all other key lines"],dba_exists:["bool dba_exists(string key, resource handle)","Checks, if the specified key exists"],dba_fetch:["string dba_fetch(string key, [int skip ,] resource handle)","Fetches the data associated with key"],dba_firstkey:["string dba_firstkey(resource handle)","Resets the internal key pointer and returns the first key"],dba_handlers:["array dba_handlers([bool full_info])","List configured database handlers"],dba_insert:["bool dba_insert(string key, string value, resource handle)","If not inifile: Insert value as key, return false, if key exists already If inifile: Add vakue as key (next instance of key)"],dba_key_split:["array|false dba_key_split(string key)","Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null"],dba_list:["array dba_list()","List opened databases"],dba_nextkey:["string dba_nextkey(resource handle)","Returns the next key"],dba_open:["resource dba_open(string path, string mode [, string handlername, string ...])","Opens path using the specified handler in mode"],dba_optimize:["bool dba_optimize(resource handle)","Optimizes (e.g. clean up, vacuum) database"],dba_popen:["resource dba_popen(string path, string mode [, string handlername, string ...])","Opens path using the specified handler in mode persistently"],dba_replace:["bool dba_replace(string key, string value, resource handle)","Inserts value as key, replaces key, if key exists already If inifile: remove all other key lines"],dba_sync:["bool dba_sync(resource handle)","Synchronizes database"],dcgettext:["string dcgettext(string domain_name, string msgid, long category)","Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist"],dcngettext:["string dcngettext (string domain, string msgid1, string msgid2, int n, int category)","Plural version of dcgettext()"],debug_backtrace:["array debug_backtrace([bool provide_object])","Return backtrace as array"],debug_print_backtrace:["void debug_print_backtrace(void) */","ZEND_FUNCTION(debug_print_backtrace) { zend_execute_data *ptr, *skip; int lineno; char *function_name; char *filename; char *class_name = NULL; char *call_type; char *include_filename = NULL; zval *arg_array = NULL; int indent = 0; if (zend_parse_parameters_none() == FAILURE) { return; } ptr = EG(current_execute_data);","PHP_FUNCTION(dom_document_relaxNG_validate_file) { _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file"],dom_document_relaxNG_validate_xml:["boolean dom_document_relaxNG_validate_xml(string source); */","PHP_FUNCTION(dom_document_relaxNG_validate_xml) { _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml"],dom_document_rename_node:["DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3"],dom_document_save:["int dom_document_save(string file);","Convenience method to save to file"],dom_document_save_html:["string dom_document_save_html();","Convenience method to output as html"],dom_document_save_html_file:["int dom_document_save_html_file(string file);","Convenience method to save to file as html"],dom_document_savexml:["string dom_document_savexml([node n]);","URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3"],dom_document_schema_validate:["boolean dom_document_schema_validate(string source); */","PHP_FUNCTION(dom_document_schema_validate_xml) { _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate"],dom_document_schema_validate_file:["boolean dom_document_schema_validate_file(string filename); */","PHP_FUNCTION(dom_document_schema_validate_file) { _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file"],dom_document_validate:["boolean dom_document_validate();","Since: DOM extended"],dom_document_xinclude:["int dom_document_xinclude([int options])","Substitutues xincludes in a DomDocument"],dom_domconfiguration_can_set_parameter:["boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:"],dom_domconfiguration_get_parameter:["domdomuserdata dom_domconfiguration_get_parameter(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:"],dom_domconfiguration_set_parameter:["dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:"],dom_domerrorhandler_handle_error:["dom_boolean dom_domerrorhandler_handle_error(domerror error);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:"],dom_domimplementation_create_document:["DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2"],dom_domimplementation_create_document_type:["DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2"],dom_domimplementation_get_feature:["DOMNode dom_domimplementation_get_feature(string feature, string version);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3"],dom_domimplementation_has_feature:["boolean dom_domimplementation_has_feature(string feature, string version);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:"],dom_domimplementationlist_item:["domdomimplementation dom_domimplementationlist_item(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:"],dom_domimplementationsource_get_domimplementation:["domdomimplementation dom_domimplementationsource_get_domimplementation(string features);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:"],dom_domimplementationsource_get_domimplementations:["domimplementationlist dom_domimplementationsource_get_domimplementations(string features);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:"],dom_domstringlist_item:["domstring dom_domstringlist_item(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:"],dom_element_get_attribute:["string dom_element_get_attribute(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:"],dom_element_get_attribute_node:["DOMAttr dom_element_get_attribute_node(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:"],dom_element_get_attribute_node_ns:["DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2"],dom_element_get_attribute_ns:["string dom_element_get_attribute_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2"],dom_element_get_elements_by_tag_name:["DOMNodeList dom_element_get_elements_by_tag_name(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:"],dom_element_get_elements_by_tag_name_ns:["DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2"],dom_element_has_attribute:["boolean dom_element_has_attribute(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2"],dom_element_has_attribute_ns:["boolean dom_element_has_attribute_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2"],dom_element_remove_attribute:["void dom_element_remove_attribute(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:"],dom_element_remove_attribute_node:["DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:"],dom_element_remove_attribute_ns:["void dom_element_remove_attribute_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2"],dom_element_set_attribute:["void dom_element_set_attribute(string name, string value);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:"],dom_element_set_attribute_node:["DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:"],dom_element_set_attribute_node_ns:["DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2"],dom_element_set_attribute_ns:["void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2"],dom_element_set_id_attribute:["void dom_element_set_id_attribute(string name, boolean isId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3"],dom_element_set_id_attribute_node:["void dom_element_set_id_attribute_node(attr idAttr, boolean isId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3"],dom_element_set_id_attribute_ns:["void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3"],dom_import_simplexml:["somNode dom_import_simplexml(sxeobject node)","Get a simplexml_element object from dom to allow for processing"],dom_namednodemap_get_named_item:["DOMNode dom_namednodemap_get_named_item(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:"],dom_namednodemap_get_named_item_ns:["DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2"],dom_namednodemap_item:["DOMNode dom_namednodemap_item(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:"],dom_namednodemap_remove_named_item:["DOMNode dom_namednodemap_remove_named_item(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:"],dom_namednodemap_remove_named_item_ns:["DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2"],dom_namednodemap_set_named_item:["DOMNode dom_namednodemap_set_named_item(DOMNode arg);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:"],dom_namednodemap_set_named_item_ns:["DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2"],dom_namelist_get_name:["string dom_namelist_get_name(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:"],dom_namelist_get_namespace_uri:["string dom_namelist_get_namespace_uri(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:"],dom_node_append_child:["DomNode dom_node_append_child(DomNode newChild);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:"],dom_node_clone_node:["DomNode dom_node_clone_node(boolean deep);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:"],dom_node_compare_document_position:["short dom_node_compare_document_position(DomNode other);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3"],dom_node_get_feature:["DomNode dom_node_get_feature(string feature, string version);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3"],dom_node_get_user_data:["mixed dom_node_get_user_data(string key);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3"],dom_node_has_attributes:["boolean dom_node_has_attributes();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2"],dom_node_has_child_nodes:["boolean dom_node_has_child_nodes();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:"],dom_node_insert_before:["domnode dom_node_insert_before(DomNode newChild, DomNode refChild);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:"],dom_node_is_default_namespace:["boolean dom_node_is_default_namespace(string namespaceURI);","URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3"],dom_node_is_equal_node:["boolean dom_node_is_equal_node(DomNode arg);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3"],dom_node_is_same_node:["boolean dom_node_is_same_node(DomNode other);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3"],dom_node_is_supported:["boolean dom_node_is_supported(string feature, string version);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2"],dom_node_lookup_namespace_uri:["string dom_node_lookup_namespace_uri(string prefix);","URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3"],dom_node_lookup_prefix:["string dom_node_lookup_prefix(string namespaceURI);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3"],dom_node_normalize:["void dom_node_normalize();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:"],dom_node_remove_child:["DomNode dom_node_remove_child(DomNode oldChild);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:"],dom_node_replace_child:["DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:"],dom_node_set_user_data:["mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3"],dom_nodelist_item:["DOMNode dom_nodelist_item(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:"],dom_string_extend_find_offset16:["int dom_string_extend_find_offset16(int offset32);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:"],dom_string_extend_find_offset32:["int dom_string_extend_find_offset32(int offset16);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:"],dom_text_is_whitespace_in_element_content:["boolean dom_text_is_whitespace_in_element_content();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3"],dom_text_replace_whole_text:["DOMText dom_text_replace_whole_text(string content);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3"],dom_text_split_text:["DOMText dom_text_split_text(int offset);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:"],dom_userdatahandler_handle:["dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:"],dom_xpath_evaluate:["mixed dom_xpath_evaluate(string expr [,DOMNode context]); */","PHP_FUNCTION(dom_xpath_evaluate) { php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate"],dom_xpath_query:["DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */","PHP_FUNCTION(dom_xpath_query) { php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query"],dom_xpath_register_ns:["boolean dom_xpath_register_ns(string prefix, string uri); */",'PHP_FUNCTION(dom_xpath_register_ns) { zval *id; xmlXPathContextPtr ctxp; int prefix_len, ns_uri_len; dom_xpath_object *intern; unsigned char *prefix, *ns_uri; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) { return; } intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); ctxp = (xmlXPathContextPtr) intern->ptr; if (ctxp == NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid XPath Context"); RETURN_FALSE; } if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) { RETURN_FALSE } RETURN_TRUE; } /* }}}'],dom_xpath_register_php_functions:["void dom_xpath_register_php_functions() */",'PHP_FUNCTION(dom_xpath_register_php_functions) { zval *id; dom_xpath_object *intern; zval *array_value, **entry, *new_string; int name_len = 0; char *name; DOM_GET_THIS(id); if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "a", &array_value) == SUCCESS) { intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value)); while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) { SEPARATE_ZVAL(entry); convert_to_string_ex(entry); MAKE_STD_ZVAL(new_string); ZVAL_LONG(new_string,1); zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL); zend_hash_move_forward(Z_ARRVAL_P(array_value)); } intern->registerPhpFunctions = 2; RETURN_TRUE; } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == SUCCESS) { intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); MAKE_STD_ZVAL(new_string); ZVAL_LONG(new_string,1); zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL); intern->registerPhpFunctions = 2; } else { intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); intern->registerPhpFunctions = 1; } } /* }}} end dom_xpath_register_php_functions'],each:["array each(array arr)","Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element"],easter_date:["int easter_date([int year])","Return the timestamp of midnight on Easter of a given year (defaults to current year)"],easter_days:["int easter_days([int year, [int method]])","Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)"],echo:["void echo(string arg1 [, string ...])","Output one or more strings"],empty:["bool empty( mixed var )","Determine whether a variable is empty"],enchant_broker_describe:["array enchant_broker_describe(resource broker)","Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()"],enchant_broker_dict_exists:["bool enchant_broker_dict_exists(resource broker, string tag)","Whether a dictionary exists or not. Using non-empty tag"],enchant_broker_free:["boolean enchant_broker_free(resource broker)","Destroys the broker object and its dictionnaries"],enchant_broker_free_dict:["resource enchant_broker_free_dict(resource dict)","Free the dictionary resource"],enchant_broker_get_dict_path:["string enchant_broker_get_dict_path(resource broker, int dict_type)","Get the directory path for a given backend, works with ispell and myspell"],enchant_broker_get_error:["string enchant_broker_get_error(resource broker)","Returns the last error of the broker"],enchant_broker_init:["resource enchant_broker_init()","create a new broker object capable of requesting"],enchant_broker_list_dicts:["string enchant_broker_list_dicts(resource broker)","Lists the dictionaries available for the given broker"],enchant_broker_request_dict:["resource enchant_broker_request_dict(resource broker, string tag)",'create a new dictionary using tag, the non-empty language tag you wish to request a dictionary for ("en_US", "de_DE", ...)'],enchant_broker_request_pwl_dict:["resource enchant_broker_request_pwl_dict(resource broker, string filename)","creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call."],enchant_broker_set_dict_path:["bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)","Set the directory path for a given backend, works with ispell and myspell"],enchant_broker_set_ordering:["bool enchant_broker_set_ordering(resource broker, string tag, string ordering)","Declares a preference of dictionaries to use for the language described/referred to by 'tag'. The ordering is a comma delimited list of provider names. As a special exception, the \"*\" tag can be used as a language tag to declare a default ordering for any language that does not explictly declare an ordering."],enchant_dict_add_to_personal:["void enchant_dict_add_to_personal(resource dict, string word)","add 'word' to personal word list"],enchant_dict_add_to_session:["void enchant_dict_add_to_session(resource dict, string word)","add 'word' to this spell-checking session"],enchant_dict_check:["bool enchant_dict_check(resource dict, string word)","If the word is correctly spelled return true, otherwise return false"],enchant_dict_describe:["array enchant_dict_describe(resource dict)","Describes an individual dictionary 'dict'"],enchant_dict_get_error:["string enchant_dict_get_error(resource dict)","Returns the last error of the current spelling-session"],enchant_dict_is_in_session:["bool enchant_dict_is_in_session(resource dict, string word)","whether or not 'word' exists in this spelling-session"],enchant_dict_quick_check:["bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])","If the word is correctly spelled return true, otherwise return false, if suggestions variable is provided, fill it with spelling alternatives."],enchant_dict_store_replacement:["void enchant_dict_store_replacement(resource dict, string mis, string cor)","add a correction for 'mis' using 'cor'. Notes that you replaced @mis with @cor, so it's possibly more likely that future occurrences of @mis will be replaced with @cor. So it might bump @cor up in the suggestion list."],enchant_dict_suggest:["array enchant_dict_suggest(resource dict, string word)","Will return a list of values if any of those pre-conditions are not met."],end:["mixed end(array array_arg)","Advances array argument's internal pointer to the last element and return it"],ereg:["int ereg(string pattern, string string [, array registers])","Regular expression match"],ereg_replace:["string ereg_replace(string pattern, string replacement, string string)","Replace regular expression"],eregi:["int eregi(string pattern, string string [, array registers])","Case-insensitive regular expression match"],eregi_replace:["string eregi_replace(string pattern, string replacement, string string)","Case insensitive replace regular expression"],error_get_last:["array error_get_last()","Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet."],error_log:["bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])","Send an error message somewhere"],error_reporting:["int error_reporting([int new_error_level])","Return the current error_reporting level, and if an argument was passed - change to the new level"],escapeshellarg:["string escapeshellarg(string arg)","Quote and escape an argument for use in a shell command"],escapeshellcmd:["string escapeshellcmd(string command)","Escape shell metacharacters"],exec:["string exec(string command [, array &output [, int &return_value]])","Execute an external program"],exif_imagetype:["int exif_imagetype(string imagefile)","Get the type of an image"],exif_read_data:["array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])","Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails"],exif_tagname:["string exif_tagname(index)","Get headername for index or false if not defined"],exif_thumbnail:["string exif_thumbnail(string filename [, &width, &height [, &imagetype]])","Reads the embedded thumbnail"],exit:["void exit([mixed status])","Output a message and terminate the current script"],exp:["float exp(float number)","Returns e raised to the power of the number"],explode:["array explode(string separator, string str [, int limit])","Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned."],expm1:["float expm1(float number)","Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero"],extension_loaded:["bool extension_loaded(string extension_name)","Returns true if the named extension is loaded"],extract:["int extract(array var_array [, int extract_type [, string prefix]])","Imports variables into symbol table from an array"],ezmlm_hash:["int ezmlm_hash(string addr)","Calculate EZMLM list hash value."],fclose:["bool fclose(resource fp)","Close an open file pointer"],feof:["bool feof(resource fp)","Test for end-of-file on a file pointer"],fflush:["bool fflush(resource fp)","Flushes output"],fgetc:["string fgetc(resource fp)","Get a character from file pointer"],fgetcsv:["array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])","Get line from file pointer and parse for CSV fields"],fgets:["string fgets(resource fp[, int length])","Get a line from file pointer"],fgetss:["string fgetss(resource fp [, int length [, string allowable_tags]])","Get a line from file pointer and strip HTML tags"],file:["array file(string filename [, int flags[, resource context]])","Read entire file into an array"],file_exists:["bool file_exists(string filename)","Returns true if filename exists"],file_get_contents:["string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])","Read the entire file into a string"],file_put_contents:["int file_put_contents(string file, mixed data [, int flags [, resource context]])","Write/Create a file with contents data and return the number of bytes written"],fileatime:["int fileatime(string filename)","Get last access time of file"],filectime:["int filectime(string filename)","Get inode modification time of file"],filegroup:["int filegroup(string filename)","Get file group"],fileinode:["int fileinode(string filename)","Get file inode"],filemtime:["int filemtime(string filename)","Get last modification time of file"],fileowner:["int fileowner(string filename)","Get file owner"],fileperms:["int fileperms(string filename)","Get file permissions"],filesize:["int filesize(string filename)","Get file size"],filetype:["string filetype(string filename)","Get file type"],filter_has_var:["mixed filter_has_var(constant type, string variable_name)","* Returns true if the variable with the name 'name' exists in source."],filter_input:["mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])","* Returns the filtered variable 'name'* from source `type`."],filter_input_array:["mixed filter_input_array(constant type, [, mixed options]])","* Returns an array with all arguments defined in 'definition'."],filter_var:["mixed filter_var(mixed variable [, long filter [, mixed options]])","* Returns the filtered version of the vriable."],filter_var_array:["mixed filter_var_array(array data, [, mixed options]])","* Returns an array with all arguments defined in 'definition'."],finfo_buffer:["string finfo_buffer(resource finfo, char *string [, int options [, resource context]])","Return infromation about a string buffer."],finfo_close:["resource finfo_close(resource finfo)","Close fileinfo resource."],finfo_file:["string finfo_file(resource finfo, char *file_name [, int options [, resource context]])","Return information about a file."],finfo_open:["resource finfo_open([int options [, string arg]])","Create a new fileinfo resource."],finfo_set_flags:["bool finfo_set_flags(resource finfo, int options)","Set libmagic configuration options."],floatval:["float floatval(mixed var)","Get the float value of a variable"],flock:["bool flock(resource fp, int operation [, int &wouldblock])","Portable file locking"],floor:["float floor(float number)","Returns the next lowest integer value from the number"],flush:["void flush(void)","Flush the output buffer"],fmod:["float fmod(float x, float y)","Returns the remainder of dividing x by y as a float"],fnmatch:["bool fnmatch(string pattern, string filename [, int flags])","Match filename against pattern"],fopen:["resource fopen(string filename, string mode [, bool use_include_path [, resource context]])","Open a file or a URL and return a file pointer"],forward_static_call:["mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])","Call a user function which is the first parameter"],fpassthru:["int fpassthru(resource fp)","Output all remaining data from a file pointer"],fprintf:["int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])","Output a formatted string into a stream"],fputcsv:["int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])","Format line as CSV and write to file pointer"],fread:["string fread(resource fp, int length)","Binary-safe file read"],frenchtojd:["int frenchtojd(int month, int day, int year)","Converts a french republic calendar date to julian day count"],fscanf:["mixed fscanf(resource stream, string format [, string ...])","Implements a mostly ANSI compatible fscanf()"],fseek:["int fseek(resource fp, int offset [, int whence])","Seek on a file pointer"],fsockopen:["resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])","Open Internet or Unix domain socket connection"],fstat:["array fstat(resource fp)","Stat() on a filehandle"],ftell:["int ftell(resource fp)","Get file pointer's read/write position"],ftok:["int ftok(string pathname, string proj)","Convert a pathname and a project identifier to a System V IPC key"],ftp_alloc:["bool ftp_alloc(resource stream, int size[, &response])","Attempt to allocate space on the remote FTP server"],ftp_cdup:["bool ftp_cdup(resource stream)","Changes to the parent directory"],ftp_chdir:["bool ftp_chdir(resource stream, string directory)","Changes directories"],ftp_chmod:["int ftp_chmod(resource stream, int mode, string filename)","Sets permissions on a file"],ftp_close:["bool ftp_close(resource stream)","Closes the FTP stream"],ftp_connect:["resource ftp_connect(string host [, int port [, int timeout]])","Opens a FTP stream"],ftp_delete:["bool ftp_delete(resource stream, string file)","Deletes a file"],ftp_exec:["bool ftp_exec(resource stream, string command)","Requests execution of a program on the FTP server"],ftp_fget:["bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])","Retrieves a file from the FTP server and writes it to an open file"],ftp_fput:["bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])","Stores a file from an open file to the FTP server"],ftp_get:["bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])","Retrieves a file from the FTP server and writes it to a local file"],ftp_get_option:["mixed ftp_get_option(resource stream, int option)","Gets an FTP option"],ftp_login:["bool ftp_login(resource stream, string username, string password)","Logs into the FTP server"],ftp_mdtm:["int ftp_mdtm(resource stream, string filename)","Returns the last modification time of the file, or -1 on error"],ftp_mkdir:["string ftp_mkdir(resource stream, string directory)","Creates a directory and returns the absolute path for the new directory or false on error"],ftp_nb_continue:["int ftp_nb_continue(resource stream)","Continues retrieving/sending a file nbronously"],ftp_nb_fget:["int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])","Retrieves a file from the FTP server asynchronly and writes it to an open file"],ftp_nb_fput:["int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])","Stores a file from an open file to the FTP server nbronly"],ftp_nb_get:["int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])","Retrieves a file from the FTP server nbhronly and writes it to a local file"],ftp_nb_put:["int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])","Stores a file on the FTP server"],ftp_nlist:["array ftp_nlist(resource stream, string directory)","Returns an array of filenames in the given directory"],ftp_pasv:["bool ftp_pasv(resource stream, bool pasv)","Turns passive mode on or off"],ftp_put:["bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])","Stores a file on the FTP server"],ftp_pwd:["string ftp_pwd(resource stream)","Returns the present working directory"],ftp_raw:["array ftp_raw(resource stream, string command)","Sends a literal command to the FTP server"],ftp_rawlist:["array ftp_rawlist(resource stream, string directory [, bool recursive])","Returns a detailed listing of a directory as an array of output lines"],ftp_rename:["bool ftp_rename(resource stream, string src, string dest)","Renames the given file to a new path"],ftp_rmdir:["bool ftp_rmdir(resource stream, string directory)","Removes a directory"],ftp_set_option:["bool ftp_set_option(resource stream, int option, mixed value)","Sets an FTP option"],ftp_site:["bool ftp_site(resource stream, string cmd)","Sends a SITE command to the server"],ftp_size:["int ftp_size(resource stream, string filename)","Returns the size of the file, or -1 on error"],ftp_ssl_connect:["resource ftp_ssl_connect(string host [, int port [, int timeout]])","Opens a FTP-SSL stream"],ftp_systype:["string ftp_systype(resource stream)","Returns the system type identifier"],ftruncate:["bool ftruncate(resource fp, int size)","Truncate file to 'size' length"],func_get_arg:["mixed func_get_arg(int arg_num)","Get the $arg_num'th argument that was passed to the function"],func_get_args:["array func_get_args()","Get an array of the arguments that were passed to the function"],func_num_args:["int func_num_args(void)","Get the number of arguments that were passed to the function"],"function ":["",""],"foreach ":["",""],function_exists:["bool function_exists(string function_name)","Checks if the function exists"],fwrite:["int fwrite(resource fp, string str [, int length])","Binary-safe file write"],gc_collect_cycles:["int gc_collect_cycles(void)","Forces collection of any existing garbage cycles. Returns number of freed zvals"],gc_disable:["void gc_disable(void)","Deactivates the circular reference collector"],gc_enable:["void gc_enable(void)","Activates the circular reference collector"],gc_enabled:["void gc_enabled(void)","Returns status of the circular reference collector"],gd_info:["array gd_info()",""],getKeywords:["static array getKeywords(string $locale) {","* return an associative array containing keyword-value * pairs for this locale. The keys are keys to the array (doh!) * }}}"],get_browser:["mixed get_browser([string browser_name [, bool return_array]])","Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array."],get_called_class:["string get_called_class()",'Retrieves the "Late Static Binding" class name'],get_cfg_var:["mixed get_cfg_var(string option_name)","Get the value of a PHP configuration option"],get_class:["string get_class([object object])","Retrieves the class name"],get_class_methods:["array get_class_methods(mixed class)","Returns an array of method names for class or class instance."],get_class_vars:["array get_class_vars(string class_name)","Returns an array of default properties of the class."],get_current_user:["string get_current_user(void)","Get the name of the owner of the current PHP script"],get_declared_classes:["array get_declared_classes()","Returns an array of all declared classes."],get_declared_interfaces:["array get_declared_interfaces()","Returns an array of all declared interfaces."],get_defined_constants:["array get_defined_constants([bool categorize])","Return an array containing the names and values of all defined constants"],get_defined_functions:["array get_defined_functions(void)","Returns an array of all defined functions"],get_defined_vars:["array get_defined_vars(void)","Returns an associative array of names and values of all currently defined variable names (variables in the current scope)"],get_display_language:["static string get_display_language($locale[, $in_locale = null])","* gets the language for the $locale in $in_locale or default_locale"],get_display_name:["static string get_display_name($locale[, $in_locale = null])","* gets the name for the $locale in $in_locale or default_locale"],get_display_region:["static string get_display_region($locale, $in_locale = null)","* gets the region for the $locale in $in_locale or default_locale"],get_display_script:["static string get_display_script($locale, $in_locale = null)","* gets the script for the $locale in $in_locale or default_locale"],get_extension_funcs:["array get_extension_funcs(string extension_name)","Returns an array with the names of functions belonging to the named extension"],get_headers:["array get_headers(string url[, int format])","fetches all the headers sent by the server in response to a HTTP request"],get_html_translation_table:["array get_html_translation_table([int table [, int quote_style]])","Returns the internal translation table used by htmlspecialchars and htmlentities"],get_include_path:["string get_include_path()","Get the current include_path configuration option"],get_included_files:["array get_included_files(void)","Returns an array with the file names that were include_once()'d"],get_loaded_extensions:["array get_loaded_extensions([bool zend_extensions])","Return an array containing names of loaded extensions"],get_magic_quotes_gpc:["int get_magic_quotes_gpc(void)","Get the current active configuration setting of magic_quotes_gpc"],get_magic_quotes_runtime:["int get_magic_quotes_runtime(void)","Get the current active configuration setting of magic_quotes_runtime"],get_meta_tags:["array get_meta_tags(string filename [, bool use_include_path])","Extracts all meta tag content attributes from a file and returns an array"],get_object_vars:["array get_object_vars(object obj)","Returns an array of object properties"],get_parent_class:["string get_parent_class([mixed object])","Retrieves the parent class name for object or class or current scope."],get_resource_type:["string get_resource_type(resource res)","Get the resource type name for a given resource"],getallheaders:["array getallheaders(void)",""],getcwd:["mixed getcwd(void)","Gets the current directory"],getdate:["array getdate([int timestamp])","Get date/time information"],getenv:["string getenv(string varname)","Get the value of an environment variable"],gethostbyaddr:["string gethostbyaddr(string ip_address)","Get the Internet host name corresponding to a given IP address"],gethostbyname:["string gethostbyname(string hostname)","Get the IP address corresponding to a given Internet host name"],gethostbynamel:["array gethostbynamel(string hostname)","Return a list of IP addresses that a given hostname resolves to."],gethostname:["string gethostname()","Get the host name of the current machine"],getimagesize:["array getimagesize(string imagefile [, array info])","Get the size of an image as 4-element array"],getlastmod:["int getlastmod(void)","Get time of last page modification"],getmygid:["int getmygid(void)","Get PHP script owner's GID"],getmyinode:["int getmyinode(void)","Get the inode of the current script being parsed"],getmypid:["int getmypid(void)","Get current process ID"],getmyuid:["int getmyuid(void)","Get PHP script owner's UID"],getopt:["array getopt(string options [, array longopts])","Get options from the command line argument list"],getprotobyname:["int getprotobyname(string name)","Returns protocol number associated with name as per /etc/protocols"],getprotobynumber:["string getprotobynumber(int proto)","Returns protocol name associated with protocol number proto"],getrandmax:["int getrandmax(void)","Returns the maximum value a random number can have"],getrusage:["array getrusage([int who])","Returns an array of usage statistics"],getservbyname:["int getservbyname(string service, string protocol)",'Returns port associated with service. Protocol must be "tcp" or "udp"'],getservbyport:["string getservbyport(int port, string protocol)",'Returns service name associated with port. Protocol must be "tcp" or "udp"'],gettext:["string gettext(string msgid)","Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist"],gettimeofday:["array gettimeofday([bool get_as_float])","Returns the current time as array"],gettype:["string gettype(mixed var)","Returns the type of the variable"],glob:["array glob(string pattern [, int flags])","Find pathnames matching a pattern"],gmdate:["string gmdate(string format [, long timestamp])","Format a GMT date/time"],gmmktime:["int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])","Get UNIX timestamp for a GMT date"],gmp_abs:["resource gmp_abs(resource a)","Calculates absolute value"],gmp_add:["resource gmp_add(resource a, resource b)","Add a and b"],gmp_and:["resource gmp_and(resource a, resource b)","Calculates logical AND of a and b"],gmp_clrbit:["void gmp_clrbit(resource &a, int index)","Clears bit in a"],gmp_cmp:["int gmp_cmp(resource a, resource b)","Compares two numbers"],gmp_com:["resource gmp_com(resource a)","Calculates one's complement of a"],gmp_div_q:["resource gmp_div_q(resource a, resource b [, int round])","Divide a by b, returns quotient only"],gmp_div_qr:["array gmp_div_qr(resource a, resource b [, int round])","Divide a by b, returns quotient and reminder"],gmp_div_r:["resource gmp_div_r(resource a, resource b [, int round])","Divide a by b, returns reminder only"],gmp_divexact:["resource gmp_divexact(resource a, resource b)","Divide a by b using exact division algorithm"],gmp_fact:["resource gmp_fact(int a)","Calculates factorial function"],gmp_gcd:["resource gmp_gcd(resource a, resource b)","Computes greatest common denominator (gcd) of a and b"],gmp_gcdext:["array gmp_gcdext(resource a, resource b)","Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)"],gmp_hamdist:["int gmp_hamdist(resource a, resource b)","Calculates hamming distance between a and b"],gmp_init:["resource gmp_init(mixed number [, int base])","Initializes GMP number"],gmp_intval:["int gmp_intval(resource gmpnumber)","Gets signed long value of GMP number"],gmp_invert:["resource gmp_invert(resource a, resource b)","Computes the inverse of a modulo b"],gmp_jacobi:["int gmp_jacobi(resource a, resource b)","Computes Jacobi symbol"],gmp_legendre:["int gmp_legendre(resource a, resource b)","Computes Legendre symbol"],gmp_mod:["resource gmp_mod(resource a, resource b)","Computes a modulo b"],gmp_mul:["resource gmp_mul(resource a, resource b)","Multiply a and b"],gmp_neg:["resource gmp_neg(resource a)","Negates a number"],gmp_nextprime:["resource gmp_nextprime(resource a)","Finds next prime of a"],gmp_or:["resource gmp_or(resource a, resource b)","Calculates logical OR of a and b"],gmp_perfect_square:["bool gmp_perfect_square(resource a)","Checks if a is an exact square"],gmp_popcount:["int gmp_popcount(resource a)","Calculates the population count of a"],gmp_pow:["resource gmp_pow(resource base, int exp)","Raise base to power exp"],gmp_powm:["resource gmp_powm(resource base, resource exp, resource mod)","Raise base to power exp and take result modulo mod"],gmp_prob_prime:["int gmp_prob_prime(resource a[, int reps])",'Checks if a is "probably prime"'],gmp_random:["resource gmp_random([int limiter])","Gets random number"],gmp_scan0:["int gmp_scan0(resource a, int start)","Finds first zero bit"],gmp_scan1:["int gmp_scan1(resource a, int start)","Finds first non-zero bit"],gmp_setbit:["void gmp_setbit(resource &a, int index[, bool set_clear])","Sets or clear bit in a"],gmp_sign:["int gmp_sign(resource a)","Gets the sign of the number"],gmp_sqrt:["resource gmp_sqrt(resource a)","Takes integer part of square root of a"],gmp_sqrtrem:["array gmp_sqrtrem(resource a)","Square root with remainder"],gmp_strval:["string gmp_strval(resource gmpnumber [, int base])","Gets string representation of GMP number"],gmp_sub:["resource gmp_sub(resource a, resource b)","Subtract b from a"],gmp_testbit:["bool gmp_testbit(resource a, int index)","Tests if bit is set in a"],gmp_xor:["resource gmp_xor(resource a, resource b)","Calculates logical exclusive OR of a and b"],gmstrftime:["string gmstrftime(string format [, int timestamp])","Format a GMT/UCT time/date according to locale settings"],grapheme_extract:["string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])","Function to extract a sequence of default grapheme clusters"],grapheme_stripos:["int grapheme_stripos(string haystack, string needle [, int offset ])","Find position of first occurrence of a string within another, ignoring case differences"],grapheme_stristr:["string grapheme_stristr(string haystack, string needle[, bool part])","Finds first occurrence of a string within another"],grapheme_strlen:["int grapheme_strlen(string str)","Get number of graphemes in a string"],grapheme_strpos:["int grapheme_strpos(string haystack, string needle [, int offset ])","Find position of first occurrence of a string within another"],grapheme_strripos:["int grapheme_strripos(string haystack, string needle [, int offset])","Find position of last occurrence of a string within another, ignoring case"],grapheme_strrpos:["int grapheme_strrpos(string haystack, string needle [, int offset])","Find position of last occurrence of a string within another"],grapheme_strstr:["string grapheme_strstr(string haystack, string needle[, bool part])","Finds first occurrence of a string within another"],grapheme_substr:["string grapheme_substr(string str, int start [, int length])","Returns part of a string"],gregoriantojd:["int gregoriantojd(int month, int day, int year)","Converts a gregorian calendar date to julian day count"],gzcompress:["string gzcompress(string data [, int level])","Gzip-compress a string"],gzdeflate:["string gzdeflate(string data [, int level])","Gzip-compress a string"],gzencode:["string gzencode(string data [, int level [, int encoding_mode]])","GZ encode a string"],gzfile:["array gzfile(string filename [, int use_include_path])","Read und uncompress entire .gz-file into an array"],gzinflate:["string gzinflate(string data [, int length])","Unzip a gzip-compressed string"],gzopen:["resource gzopen(string filename, string mode [, int use_include_path])","Open a .gz-file and return a .gz-file pointer"],gzuncompress:["string gzuncompress(string data [, int length])","Unzip a gzip-compressed string"],hash:["string hash(string algo, string data[, bool raw_output = false])","Generate a hash of a given input string Returns lowercase hexits by default"],hash_algos:["array hash_algos(void)","Return a list of registered hashing algorithms"],hash_copy:["resource hash_copy(resource context)","Copy hash resource"],hash_file:["string hash_file(string algo, string filename[, bool raw_output = false])","Generate a hash of a given file Returns lowercase hexits by default"],hash_final:["string hash_final(resource context[, bool raw_output=false])","Output resulting digest"],hash_hmac:["string hash_hmac(string algo, string data, string key[, bool raw_output = false])","Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default"],hash_hmac_file:["string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])","Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default"],hash_init:["resource hash_init(string algo[, int options, string key])","Initialize a hashing context"],hash_update:["bool hash_update(resource context, string data)","Pump data into the hashing algorithm"],hash_update_file:["bool hash_update_file(resource context, string filename[, resource context])","Pump data into the hashing algorithm from a file"],hash_update_stream:["int hash_update_stream(resource context, resource handle[, integer length])","Pump data into the hashing algorithm from an open stream"],header:["void header(string header [, bool replace, [int http_response_code]])","Sends a raw HTTP header"],header_remove:["void header_remove([string name])","Removes an HTTP header previously set using header()"],headers_list:["array headers_list(void)","Return list of headers to be sent / already sent"],headers_sent:["bool headers_sent([string &$file [, int &$line]])","Returns true if headers have already been sent, false otherwise"],hebrev:["string hebrev(string str [, int max_chars_per_line])","Converts logical Hebrew text to visual text"],hebrevc:["string hebrevc(string str [, int max_chars_per_line])","Converts logical Hebrew text to visual text with newline conversion"],hexdec:["int hexdec(string hexadecimal_number)","Returns the decimal equivalent of the hexadecimal number"],highlight_file:["bool highlight_file(string file_name [, bool return] )","Syntax highlight a source file"],highlight_string:["bool highlight_string(string string [, bool return] )","Syntax highlight a string or optionally return it"],html_entity_decode:["string html_entity_decode(string string [, int quote_style][, string charset])","Convert all HTML entities to their applicable characters"],htmlentities:["string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])","Convert all applicable characters to HTML entities"],htmlspecialchars:["string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])","Convert special characters to HTML entities"],htmlspecialchars_decode:["string htmlspecialchars_decode(string string [, int quote_style])","Convert special HTML entities back to characters"],http_build_query:["string http_build_query(mixed formdata [, string prefix [, string arg_separator]])","Generates a form-encoded query string from an associative array or object."],hypot:["float hypot(float num1, float num2)","Returns sqrt(num1*num1 + num2*num2)"],ibase_add_user:["bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])","Add a user to security database"],ibase_affected_rows:["int ibase_affected_rows( [ resource link_identifier ] )","Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement"],ibase_backup:["mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])","Initiates a backup task in the service manager and returns immediately"],ibase_blob_add:["bool ibase_blob_add(resource blob_handle, string data)","Add data into created blob"],ibase_blob_cancel:["bool ibase_blob_cancel(resource blob_handle)","Cancel creating blob"],ibase_blob_close:["string ibase_blob_close(resource blob_handle)","Close blob"],ibase_blob_create:["resource ibase_blob_create([resource link_identifier])","Create blob for adding data"],ibase_blob_echo:["bool ibase_blob_echo([ resource link_identifier, ] string blob_id)","Output blob contents to browser"],ibase_blob_get:["string ibase_blob_get(resource blob_handle, int len)","Get len bytes data from open blob"],ibase_blob_import:["string ibase_blob_import([ resource link_identifier, ] resource file)","Create blob, copy file in it, and close it"],ibase_blob_info:["array ibase_blob_info([ resource link_identifier, ] string blob_id)","Return blob length and other useful info"],ibase_blob_open:["resource ibase_blob_open([ resource link_identifier, ] string blob_id)","Open blob for retrieving data parts"],ibase_close:["bool ibase_close([resource link_identifier])","Close an InterBase connection"],ibase_commit:["bool ibase_commit( resource link_identifier )","Commit transaction"],ibase_commit_ret:["bool ibase_commit_ret( resource link_identifier )","Commit transaction and retain the transaction context"],ibase_connect:["resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])","Open a connection to an InterBase database"],ibase_db_info:["string ibase_db_info(resource service_handle, string db, int action [, int argument])","Request statistics about a database"],ibase_delete_user:["bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])","Delete a user from security database"],ibase_drop_db:["bool ibase_drop_db([resource link_identifier])","Drop an InterBase database"],ibase_errcode:["int ibase_errcode(void)","Return error code"],ibase_errmsg:["string ibase_errmsg(void)","Return error message"],ibase_execute:["mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])","Execute a previously prepared query"],ibase_fetch_assoc:["array ibase_fetch_assoc(resource result [, int fetch_flags])","Fetch a row from the results of a query"],ibase_fetch_object:["object ibase_fetch_object(resource result [, int fetch_flags])","Fetch a object from the results of a query"],ibase_fetch_row:["array ibase_fetch_row(resource result [, int fetch_flags])","Fetch a row from the results of a query"],ibase_field_info:["array ibase_field_info(resource query_result, int field_number)","Get information about a field"],ibase_free_event_handler:["bool ibase_free_event_handler(resource event)","Frees the event handler set by ibase_set_event_handler()"],ibase_free_query:["bool ibase_free_query(resource query)","Free memory used by a query"],ibase_free_result:["bool ibase_free_result(resource result)","Free the memory used by a result"],ibase_gen_id:["int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])","Increments the named generator and returns its new value"],ibase_maintain_db:["bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])","Execute a maintenance command on the database server"],ibase_modify_user:["bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])","Modify a user in security database"],ibase_name_result:["bool ibase_name_result(resource result, string name)","Assign a name to a result for use with ... WHERE CURRENT OF statements"],ibase_num_fields:["int ibase_num_fields(resource query_result)","Get the number of fields in result"],ibase_num_params:["int ibase_num_params(resource query)","Get the number of params in a prepared query"],ibase_num_rows:["int ibase_num_rows( resource result_identifier )","Return the number of rows that are available in a result"],ibase_param_info:["array ibase_param_info(resource query, int field_number)","Get information about a parameter"],ibase_pconnect:["resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])","Open a persistent connection to an InterBase database"],ibase_prepare:["resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])","Prepare a query for later execution"],ibase_query:["mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])","Execute a query"],ibase_restore:["mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])","Initiates a restore task in the service manager and returns immediately"],ibase_rollback:["bool ibase_rollback( resource link_identifier )","Rollback transaction"],ibase_rollback_ret:["bool ibase_rollback_ret( resource link_identifier )","Rollback transaction and retain the transaction context"],ibase_server_info:["string ibase_server_info(resource service_handle, int action)","Request information about a database server"],ibase_service_attach:["resource ibase_service_attach(string host, string dba_username, string dba_password)","Connect to the service manager"],ibase_service_detach:["bool ibase_service_detach(resource service_handle)","Disconnect from the service manager"],ibase_set_event_handler:["resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])","Register the callback for handling each of the named events"],ibase_trans:["resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])","Start a transaction over one or several databases"],ibase_wait_event:["string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])","Waits for any one of the passed Interbase events to be posted by the database, and returns its name"],iconv:["string iconv(string in_charset, string out_charset, string str)","Returns str converted to the out_charset character set"],iconv_get_encoding:["mixed iconv_get_encoding([string type])","Get internal encoding and output encoding for ob_iconv_handler()"],iconv_mime_decode:["string iconv_mime_decode(string encoded_string [, int mode, string charset])","Decodes a mime header field"],iconv_mime_decode_headers:["array iconv_mime_decode_headers(string headers [, int mode, string charset])","Decodes multiple mime header fields"],iconv_mime_encode:["string iconv_mime_encode(string field_name, string field_value [, array preference])","Composes a mime header field with field_name and field_value in a specified scheme"],iconv_set_encoding:["bool iconv_set_encoding(string type, string charset)","Sets internal encoding and output encoding for ob_iconv_handler()"],iconv_strlen:["int iconv_strlen(string str [, string charset])","Returns the character count of str"],iconv_strpos:["int iconv_strpos(string haystack, string needle [, int offset [, string charset]])","Finds position of first occurrence of needle within part of haystack beginning with offset"],iconv_strrpos:["int iconv_strrpos(string haystack, string needle [, string charset])","Finds position of last occurrence of needle within part of haystack beginning with offset"],iconv_substr:["string iconv_substr(string str, int offset, [int length, string charset])","Returns specified part of a string"],idate:["int idate(string format [, int timestamp])","Format a local time/date as integer"],idn_to_ascii:["int idn_to_ascii(string domain[, int options])","Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC"],idn_to_utf8:["int idn_to_utf8(string domain[, int options])","Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC"],ignore_user_abort:["int ignore_user_abort([string value])","Set whether we want to ignore a user abort event or not"],image2wbmp:["bool image2wbmp(resource im [, string filename [, int threshold]])","Output WBMP image to browser or file"],image_type_to_extension:["string image_type_to_extension(int imagetype [, bool include_dot])","Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype"],image_type_to_mime_type:["string image_type_to_mime_type(int imagetype)","Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype"],imagealphablending:["bool imagealphablending(resource im, bool on)","Turn alpha blending mode on or off for the given image"],imageantialias:["bool imageantialias(resource im, bool on)","Should antialiased functions used or not"],imagearc:["bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)","Draw a partial ellipse"],imagechar:["bool imagechar(resource im, int font, int x, int y, string c, int col)","Draw a character"],imagecharup:["bool imagecharup(resource im, int font, int x, int y, string c, int col)","Draw a character rotated 90 degrees counter-clockwise"],imagecolorallocate:["int imagecolorallocate(resource im, int red, int green, int blue)","Allocate a color for an image"],imagecolorallocatealpha:["int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)","Allocate a color with an alpha level. Works for true color and palette based images"],imagecolorat:["int imagecolorat(resource im, int x, int y)","Get the index of the color of a pixel"],imagecolorclosest:["int imagecolorclosest(resource im, int red, int green, int blue)","Get the index of the closest color to the specified color"],imagecolorclosestalpha:["int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)","Find the closest matching colour with alpha transparency"],imagecolorclosesthwb:["int imagecolorclosesthwb(resource im, int red, int green, int blue)","Get the index of the color which has the hue, white and blackness nearest to the given color"],imagecolordeallocate:["bool imagecolordeallocate(resource im, int index)","De-allocate a color for an image"],imagecolorexact:["int imagecolorexact(resource im, int red, int green, int blue)","Get the index of the specified color"],imagecolorexactalpha:["int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)","Find exact match for colour with transparency"],imagecolormatch:["bool imagecolormatch(resource im1, resource im2)","Makes the colors of the palette version of an image more closely match the true color version"],imagecolorresolve:["int imagecolorresolve(resource im, int red, int green, int blue)","Get the index of the specified color or its closest possible alternative"],imagecolorresolvealpha:["int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)","Resolve/Allocate a colour with an alpha level. Works for true colour and palette based images"],imagecolorset:["void imagecolorset(resource im, int col, int red, int green, int blue)","Set the color for the specified palette index"],imagecolorsforindex:["array imagecolorsforindex(resource im, int col)","Get the colors for an index"],imagecolorstotal:["int imagecolorstotal(resource im)","Find out the number of colors in an image's palette"],imagecolortransparent:["int imagecolortransparent(resource im [, int col])","Define a color as transparent"],imageconvolution:["resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)","Apply a 3x3 convolution matrix, using coefficient div and offset"],imagecopy:["bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)","Copy part of an image"],imagecopymerge:["bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)","Merge one part of an image with another"],imagecopymergegray:["bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)","Merge one part of an image with another"],imagecopyresampled:["bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)","Copy and resize part of an image using resampling to help ensure clarity"],imagecopyresized:["bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)","Copy and resize part of an image"],imagecreate:["resource imagecreate(int x_size, int y_size)","Create a new image"],imagecreatefromgd:["resource imagecreatefromgd(string filename)","Create a new image from GD file or URL"],imagecreatefromgd2:["resource imagecreatefromgd2(string filename)","Create a new image from GD2 file or URL"],imagecreatefromgd2part:["resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)","Create a new image from a given part of GD2 file or URL"],imagecreatefromgif:["resource imagecreatefromgif(string filename)","Create a new image from GIF file or URL"],imagecreatefromjpeg:["resource imagecreatefromjpeg(string filename)","Create a new image from JPEG file or URL"],imagecreatefrompng:["resource imagecreatefrompng(string filename)","Create a new image from PNG file or URL"],imagecreatefromstring:["resource imagecreatefromstring(string image)","Create a new image from the image stream in the string"],imagecreatefromwbmp:["resource imagecreatefromwbmp(string filename)","Create a new image from WBMP file or URL"],imagecreatefromxbm:["resource imagecreatefromxbm(string filename)","Create a new image from XBM file or URL"],imagecreatefromxpm:["resource imagecreatefromxpm(string filename)","Create a new image from XPM file or URL"],imagecreatetruecolor:["resource imagecreatetruecolor(int x_size, int y_size)","Create a new true color image"],imagedashedline:["bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)","Draw a dashed line"],imagedestroy:["bool imagedestroy(resource im)","Destroy an image"],imageellipse:["bool imageellipse(resource im, int cx, int cy, int w, int h, int color)","Draw an ellipse"],imagefill:["bool imagefill(resource im, int x, int y, int col)","Flood fill"],imagefilledarc:["bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)","Draw a filled partial ellipse"],imagefilledellipse:["bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)","Draw an ellipse"],imagefilledpolygon:["bool imagefilledpolygon(resource im, array point, int num_points, int col)","Draw a filled polygon"],imagefilledrectangle:["bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)","Draw a filled rectangle"],imagefilltoborder:["bool imagefilltoborder(resource im, int x, int y, int border, int col)","Flood fill to specific color"],imagefilter:["bool imagefilter(resource src_im, int filtertype, [args] )","Applies Filter an image using a custom angle"],imagefontheight:["int imagefontheight(int font)","Get font height"],imagefontwidth:["int imagefontwidth(int font)","Get font width"],imageftbbox:["array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])","Give the bounding box of a text using fonts via freetype2"],imagefttext:["array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])","Write text to the image using fonts via freetype2"],imagegammacorrect:["bool imagegammacorrect(resource im, float inputgamma, float outputgamma)","Apply a gamma correction to a GD image"],imagegd:["bool imagegd(resource im [, string filename])","Output GD image to browser or file"],imagegd2:["bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])","Output GD2 image to browser or file"],imagegif:["bool imagegif(resource im [, string filename])","Output GIF image to browser or file"],imagegrabscreen:["resource imagegrabscreen()","Grab a screenshot"],imagegrabwindow:["resource imagegrabwindow(int window_handle [, int client_area])","Grab a window or its client area using a windows handle (HWND property in COM instance)"],imageinterlace:["int imageinterlace(resource im [, int interlace])","Enable or disable interlace"],imageistruecolor:["bool imageistruecolor(resource im)","return true if the image uses truecolor"],imagejpeg:["bool imagejpeg(resource im [, string filename [, int quality]])","Output JPEG image to browser or file"],imagelayereffect:["bool imagelayereffect(resource im, int effect)","Set the alpha blending flag to use the bundled libgd layering effects"],imageline:["bool imageline(resource im, int x1, int y1, int x2, int y2, int col)","Draw a line"],imageloadfont:["int imageloadfont(string filename)","Load a new font"],imagepalettecopy:["void imagepalettecopy(resource dst, resource src)","Copy the palette from the src image onto the dst image"],imagepng:["bool imagepng(resource im [, string filename])","Output PNG image to browser or file"],imagepolygon:["bool imagepolygon(resource im, array point, int num_points, int col)","Draw a polygon"],imagepsbbox:["array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])","Return the bounding box needed by a string if rasterized"],imagepscopyfont:["int imagepscopyfont(int font_index)","Make a copy of a font for purposes like extending or reenconding"],imagepsencodefont:["bool imagepsencodefont(resource font_index, string filename)","To change a fonts character encoding vector"],imagepsextendfont:["bool imagepsextendfont(resource font_index, float extend)","Extend or or condense (if extend < 1) a font"],imagepsfreefont:["bool imagepsfreefont(resource font_index)","Free memory used by a font"],imagepsloadfont:["resource imagepsloadfont(string pathname)","Load a new font from specified file"],imagepsslantfont:["bool imagepsslantfont(resource font_index, float slant)","Slant a font"],imagepstext:["array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])","Rasterize a string over an image"],imagerectangle:["bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)","Draw a rectangle"],imagerotate:["resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])","Rotate an image using a custom angle"],imagesavealpha:["bool imagesavealpha(resource im, bool on)","Include alpha channel to a saved image"],imagesetbrush:["bool imagesetbrush(resource image, resource brush)",'Set the brush image to $brush when filling $image with the "IMG_COLOR_BRUSHED" color'],imagesetpixel:["bool imagesetpixel(resource im, int x, int y, int col)","Set a single pixel"],imagesetstyle:["bool imagesetstyle(resource im, array styles)","Set the line drawing styles for use with imageline and IMG_COLOR_STYLED."],imagesetthickness:["bool imagesetthickness(resource im, int thickness)","Set line thickness for drawing lines, ellipses, rectangles, polygons etc."],imagesettile:["bool imagesettile(resource image, resource tile)",'Set the tile image to $tile when filling $image with the "IMG_COLOR_TILED" color'],imagestring:["bool imagestring(resource im, int font, int x, int y, string str, int col)","Draw a string horizontally"],imagestringup:["bool imagestringup(resource im, int font, int x, int y, string str, int col)","Draw a string vertically - rotated 90 degrees counter-clockwise"],imagesx:["int imagesx(resource im)","Get image width"],imagesy:["int imagesy(resource im)","Get image height"],imagetruecolortopalette:["void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)","Convert a true colour image to a palette based image with a number of colours, optionally using dithering."],imagettfbbox:["array imagettfbbox(float size, float angle, string font_file, string text)","Give the bounding box of a text using TrueType fonts"],imagettftext:["array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)","Write text to the image using a TrueType font"],imagetypes:["int imagetypes(void)","Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM"],imagewbmp:["bool imagewbmp(resource im [, string filename, [, int foreground]])","Output WBMP image to browser or file"],imagexbm:["int imagexbm(int im, string filename [, int foreground])","Output XBM image to browser or file"],imap_8bit:["string imap_8bit(string text)","Convert an 8-bit string to a quoted-printable string"],imap_alerts:["array imap_alerts(void)","Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called."],imap_append:["bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])","Append a new message to a specified mailbox"],imap_base64:["string imap_base64(string text)","Decode BASE64 encoded text"],imap_binary:["string imap_binary(string text)","Convert an 8bit string to a base64 string"],imap_body:["string imap_body(resource stream_id, int msg_no [, int options])","Read the message body"],imap_bodystruct:["object imap_bodystruct(resource stream_id, int msg_no, string section)","Read the structure of a specified body section of a specific message"],imap_check:["object imap_check(resource stream_id)","Get mailbox properties"],imap_clearflag_full:["bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])","Clears flags on messages"],imap_close:["bool imap_close(resource stream_id [, int options])","Close an IMAP stream"],imap_createmailbox:["bool imap_createmailbox(resource stream_id, string mailbox)","Create a new mailbox"],imap_delete:["bool imap_delete(resource stream_id, int msg_no [, int options])","Mark a message for deletion"],imap_deletemailbox:["bool imap_deletemailbox(resource stream_id, string mailbox)","Delete a mailbox"],imap_errors:["array imap_errors(void)","Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called."],imap_expunge:["bool imap_expunge(resource stream_id)","Permanently delete all messages marked for deletion"],imap_fetch_overview:["array imap_fetch_overview(resource stream_id, string sequence [, int options])","Read an overview of the information in the headers of the given message sequence"],imap_fetchbody:["string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])","Get a specific body section"],imap_fetchheader:["string imap_fetchheader(resource stream_id, int msg_no [, int options])","Get the full unfiltered header for a message"],imap_fetchstructure:["object imap_fetchstructure(resource stream_id, int msg_no [, int options])","Read the full structure of a message"],imap_gc:["bool imap_gc(resource stream_id, int flags)","This function garbage collects (purges) the cache of entries of a specific type."],imap_get_quota:["array imap_get_quota(resource stream_id, string qroot)","Returns the quota set to the mailbox account qroot"],imap_get_quotaroot:["array imap_get_quotaroot(resource stream_id, string mbox)","Returns the quota set to the mailbox account mbox"],imap_getacl:["array imap_getacl(resource stream_id, string mailbox)","Gets the ACL for a given mailbox"],imap_getmailboxes:["array imap_getmailboxes(resource stream_id, string ref, string pattern)","Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter"],imap_getsubscribed:["array imap_getsubscribed(resource stream_id, string ref, string pattern)","Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()"],imap_headerinfo:["object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])","Read the headers of the message"],imap_headers:["array imap_headers(resource stream_id)","Returns headers for all messages in a mailbox"],imap_last_error:["string imap_last_error(void)","Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call."],imap_list:["array imap_list(resource stream_id, string ref, string pattern)","Read the list of mailboxes"],imap_listscan:["array imap_listscan(resource stream_id, string ref, string pattern, string content)","Read list of mailboxes containing a certain string"],imap_lsub:["array imap_lsub(resource stream_id, string ref, string pattern)","Return a list of subscribed mailboxes"],imap_mail:["bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])","Send an email message"],imap_mail_compose:["string imap_mail_compose(array envelope, array body)","Create a MIME message based on given envelope and body sections"],imap_mail_copy:["bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])","Copy specified message to a mailbox"],imap_mail_move:["bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])","Move specified message to a mailbox"],imap_mailboxmsginfo:["object imap_mailboxmsginfo(resource stream_id)","Returns info about the current mailbox"],imap_mime_header_decode:["array imap_mime_header_decode(string str)","Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'"],imap_msgno:["int imap_msgno(resource stream_id, int unique_msg_id)","Get the sequence number associated with a UID"],imap_mutf7_to_utf8:["string imap_mutf7_to_utf8(string in)","Decode a modified UTF-7 string to UTF-8"],imap_num_msg:["int imap_num_msg(resource stream_id)","Gives the number of messages in the current mailbox"],imap_num_recent:["int imap_num_recent(resource stream_id)","Gives the number of recent messages in current mailbox"],imap_open:["resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])","Open an IMAP stream to a mailbox"],imap_ping:["bool imap_ping(resource stream_id)","Check if the IMAP stream is still active"],imap_qprint:["string imap_qprint(string text)","Convert a quoted-printable string to an 8-bit string"],imap_renamemailbox:["bool imap_renamemailbox(resource stream_id, string old_name, string new_name)","Rename a mailbox"],imap_reopen:["bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])","Reopen an IMAP stream to a new mailbox"],imap_rfc822_parse_adrlist:["array imap_rfc822_parse_adrlist(string address_string, string default_host)","Parses an address string"],imap_rfc822_parse_headers:["object imap_rfc822_parse_headers(string headers [, string default_host])","Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()"],imap_rfc822_write_address:["string imap_rfc822_write_address(string mailbox, string host, string personal)","Returns a properly formatted email address given the mailbox, host, and personal info"],imap_savebody:['bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = ""[, int options = 0]])',"Save a specific body section to a file"],imap_search:["array imap_search(resource stream_id, string criteria [, int options [, string charset]])","Return a list of messages matching the given criteria"],imap_set_quota:["bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)","Will set the quota for qroot mailbox"],imap_setacl:["bool imap_setacl(resource stream_id, string mailbox, string id, string rights)","Sets the ACL for a given mailbox"],imap_setflag_full:["bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])","Sets flags on messages"],imap_sort:["array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])","Sort an array of message headers, optionally including only messages that meet specified criteria."],imap_status:["object imap_status(resource stream_id, string mailbox, int options)","Get status info from a mailbox"],imap_subscribe:["bool imap_subscribe(resource stream_id, string mailbox)","Subscribe to a mailbox"],imap_thread:["array imap_thread(resource stream_id [, int options])","Return threaded by REFERENCES tree"],imap_timeout:["mixed imap_timeout(int timeout_type [, int timeout])","Set or fetch imap timeout"],imap_uid:["int imap_uid(resource stream_id, int msg_no)","Get the unique message id associated with a standard sequential message number"],imap_undelete:["bool imap_undelete(resource stream_id, int msg_no [, int flags])","Remove the delete flag from a message"],imap_unsubscribe:["bool imap_unsubscribe(resource stream_id, string mailbox)","Unsubscribe from a mailbox"],imap_utf7_decode:["string imap_utf7_decode(string buf)","Decode a modified UTF-7 string"],imap_utf7_encode:["string imap_utf7_encode(string buf)","Encode a string in modified UTF-7"],imap_utf8:["string imap_utf8(string mime_encoded_text)","Convert a mime-encoded text to UTF-8"],imap_utf8_to_mutf7:["string imap_utf8_to_mutf7(string in)","Encode a UTF-8 string to modified UTF-7"],implode:["string implode([string glue,] array pieces)","Joins array elements placing glue string between items and return one string"],import_request_variables:["bool import_request_variables(string types [, string prefix])","Import GET/POST/Cookie variables into the global scope"],in_array:["bool in_array(mixed needle, array haystack [, bool strict])","Checks if the given value exists in the array"],include:["bool include(string path)","Includes and evaluates the specified file"],include_once:["bool include_once(string path)","Includes and evaluates the specified file"],inet_ntop:["string inet_ntop(string in_addr)","Converts a packed inet address to a human readable IP address string"],inet_pton:["string inet_pton(string ip_address)","Converts a human readable IP address to a packed binary string"],ini_get:["string ini_get(string varname)","Get a configuration option"],ini_get_all:["array ini_get_all([string extension[, bool details = true]])","Get all configuration options"],ini_restore:["void ini_restore(string varname)","Restore the value of a configuration option specified by varname"],ini_set:["string ini_set(string varname, string newvalue)","Set a configuration option, returns false on error and the old value of the configuration option on success"],interface_exists:["bool interface_exists(string classname [, bool autoload])","Checks if the class exists"],intl_error_name:["string intl_error_name()","* Return a string for a given error code. * The string will be the same as the name of the error code constant."],intl_get_error_code:["int intl_get_error_code()","* Get code of the last occured error."],intl_get_error_message:["string intl_get_error_message()","* Get text description of the last occured error."],intl_is_failure:["bool intl_is_failure()","* Check whether the given error code indicates a failure. * Returns true if it does, and false if the code * indicates success or a warning."],intval:["int intval(mixed var [, int base])","Get the integer value of a variable using the optional base for the conversion"],ip2long:["int ip2long(string ip_address)","Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address"],iptcembed:["array iptcembed(string iptcdata, string jpeg_file_name [, int spool])","Embed binary IPTC data into a JPEG image."],iptcparse:["array iptcparse(string iptcdata)","Parse binary IPTC-data into associative array"],is_a:["bool is_a(object object, string class_name)","Returns true if the object is of this class or has this class as one of its parents"],is_array:["bool is_array(mixed var)","Returns true if variable is an array"],is_bool:["bool is_bool(mixed var)","Returns true if variable is a boolean"],is_callable:["bool is_callable(mixed var [, bool syntax_only [, string callable_name]])","Returns true if var is callable."],is_dir:["bool is_dir(string filename)","Returns true if file is directory"],is_executable:["bool is_executable(string filename)","Returns true if file is executable"],is_file:["bool is_file(string filename)","Returns true if file is a regular file"],is_finite:["bool is_finite(float val)","Returns whether argument is finite"],is_float:["bool is_float(mixed var)","Returns true if variable is float point"],is_infinite:["bool is_infinite(float val)","Returns whether argument is infinite"],is_link:["bool is_link(string filename)","Returns true if file is symbolic link"],is_long:["bool is_long(mixed var)","Returns true if variable is a long (integer)"],is_nan:["bool is_nan(float val)","Returns whether argument is not a number"],is_null:["bool is_null(mixed var)","Returns true if variable is null"],is_numeric:["bool is_numeric(mixed value)","Returns true if value is a number or a numeric string"],is_object:["bool is_object(mixed var)","Returns true if variable is an object"],is_readable:["bool is_readable(string filename)","Returns true if file can be read"],is_resource:["bool is_resource(mixed var)","Returns true if variable is a resource"],is_scalar:["bool is_scalar(mixed value)","Returns true if value is a scalar"],is_string:["bool is_string(mixed var)","Returns true if variable is a string"],is_subclass_of:["bool is_subclass_of(object object, string class_name)","Returns true if the object has this class as one of its parents"],is_uploaded_file:["bool is_uploaded_file(string path)","Check if file was created by rfc1867 upload"],is_writable:["bool is_writable(string filename)","Returns true if file can be written"],isset:["bool isset(mixed var [, mixed var])","Determine whether a variable is set"],iterator_apply:["int iterator_apply(Traversable it, mixed function [, mixed params])","Calls a function for every element in an iterator"],iterator_count:["int iterator_count(Traversable it)","Count the elements in an iterator"],iterator_to_array:["array iterator_to_array(Traversable it [, bool use_keys = true])","Copy the iterator into an array"],jddayofweek:["mixed jddayofweek(int juliandaycount [, int mode])","Returns name or number of day of week from julian day count"],jdmonthname:["string jdmonthname(int juliandaycount, int mode)","Returns name of month for julian day count"],jdtofrench:["string jdtofrench(int juliandaycount)","Converts a julian day count to a french republic calendar date"],jdtogregorian:["string jdtogregorian(int juliandaycount)","Converts a julian day count to a gregorian calendar date"],jdtojewish:["string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])","Converts a julian day count to a jewish calendar date"],jdtojulian:["string jdtojulian(int juliandaycount)","Convert a julian day count to a julian calendar date"],jdtounix:["int jdtounix(int jday)","Convert Julian Day to UNIX timestamp"],jewishtojd:["int jewishtojd(int month, int day, int year)","Converts a jewish calendar date to a julian day count"],join:["string join(array src, string glue)","An alias for implode"],jpeg2wbmp:["bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)","Convert JPEG image to WBMP image"],json_decode:["mixed json_decode(string json [, bool assoc [, long depth]])","Decodes the JSON representation into a PHP value"],json_encode:["string json_encode(mixed data [, int options])","Returns the JSON representation of a value"],json_last_error:["int json_last_error()","Returns the error code of the last json_decode()."],juliantojd:["int juliantojd(int month, int day, int year)","Converts a julian calendar date to julian day count"],key:["mixed key(array array_arg)","Return the key of the element currently pointed to by the internal array pointer"],krsort:["bool krsort(array &array_arg [, int sort_flags])","Sort an array by key value in reverse order"],ksort:["bool ksort(array &array_arg [, int sort_flags])","Sort an array by key"],lcfirst:["string lcfirst(string str)","Make a string's first character lowercase"],lcg_value:["float lcg_value()","Returns a value from the combined linear congruential generator"],lchgrp:["bool lchgrp(string filename, mixed group)","Change symlink group"],ldap_8859_to_t61:["string ldap_8859_to_t61(string value)","Translate 8859 characters to t61 characters"],ldap_add:["bool ldap_add(resource link, string dn, array entry)","Add entries to LDAP directory"],ldap_bind:["bool ldap_bind(resource link [, string dn [, string password]])","Bind to LDAP directory"],ldap_compare:["bool ldap_compare(resource link, string dn, string attr, string value)","Determine if an entry has a specific value for one of its attributes"],ldap_connect:["resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])","Connect to an LDAP server"],ldap_count_entries:["int ldap_count_entries(resource link, resource result)","Count the number of entries in a search result"],ldap_delete:["bool ldap_delete(resource link, string dn)","Delete an entry from a directory"],ldap_dn2ufn:["string ldap_dn2ufn(string dn)","Convert DN to User Friendly Naming format"],ldap_err2str:["string ldap_err2str(int errno)","Convert error number to error string"],ldap_errno:["int ldap_errno(resource link)","Get the current ldap error number"],ldap_error:["string ldap_error(resource link)","Get the current ldap error string"],ldap_explode_dn:["array ldap_explode_dn(string dn, int with_attrib)","Splits DN into its component parts"],ldap_first_attribute:["string ldap_first_attribute(resource link, resource result_entry)","Return first attribute"],ldap_first_entry:["resource ldap_first_entry(resource link, resource result)","Return first result id"],ldap_first_reference:["resource ldap_first_reference(resource link, resource result)","Return first reference"],ldap_free_result:["bool ldap_free_result(resource result)","Free result memory"],ldap_get_attributes:["array ldap_get_attributes(resource link, resource result_entry)","Get attributes from a search result entry"],ldap_get_dn:["string ldap_get_dn(resource link, resource result_entry)","Get the DN of a result entry"],ldap_get_entries:["array ldap_get_entries(resource link, resource result)","Get all result entries"],ldap_get_option:["bool ldap_get_option(resource link, int option, mixed retval)","Get the current value of various session-wide parameters"],ldap_get_values_len:["array ldap_get_values_len(resource link, resource result_entry, string attribute)","Get all values with lengths from a result entry"],ldap_list:["resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])","Single-level search"],ldap_mod_add:["bool ldap_mod_add(resource link, string dn, array entry)","Add attribute values to current"],ldap_mod_del:["bool ldap_mod_del(resource link, string dn, array entry)","Delete attribute values"],ldap_mod_replace:["bool ldap_mod_replace(resource link, string dn, array entry)","Replace attribute values with new ones"],ldap_next_attribute:["string ldap_next_attribute(resource link, resource result_entry)","Get the next attribute in result"],ldap_next_entry:["resource ldap_next_entry(resource link, resource result_entry)","Get next result entry"],ldap_next_reference:["resource ldap_next_reference(resource link, resource reference_entry)","Get next reference"],ldap_parse_reference:["bool ldap_parse_reference(resource link, resource reference_entry, array referrals)","Extract information from reference entry"],ldap_parse_result:["bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)","Extract information from result"],ldap_read:["resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])","Read an entry"],ldap_rename:["bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);","Modify the name of an entry"],ldap_sasl_bind:["bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])","Bind to LDAP directory using SASL"],ldap_search:["resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])","Search LDAP tree under base_dn"],ldap_set_option:["bool ldap_set_option(resource link, int option, mixed newval)","Set the value of various session-wide parameters"],ldap_set_rebind_proc:["bool ldap_set_rebind_proc(resource link, string callback)","Set a callback function to do re-binds on referral chasing."],ldap_sort:["bool ldap_sort(resource link, resource result, string sortfilter)","Sort LDAP result entries"],ldap_start_tls:["bool ldap_start_tls(resource link)","Start TLS"],ldap_t61_to_8859:["string ldap_t61_to_8859(string value)","Translate t61 characters to 8859 characters"],ldap_unbind:["bool ldap_unbind(resource link)","Unbind from LDAP directory"],leak:["void leak(int num_bytes=3)","Cause an intentional memory leak, for testing/debugging purposes"],levenshtein:["int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])","Calculate Levenshtein distance between two strings"],libxml_clear_errors:["void libxml_clear_errors()","Clear last error from libxml"],libxml_disable_entity_loader:["bool libxml_disable_entity_loader([boolean disable])","Disable/Enable ability to load external entities"],libxml_get_errors:["object libxml_get_errors()","Retrieve array of errors"],libxml_get_last_error:["object libxml_get_last_error()","Retrieve last error from libxml"],libxml_set_streams_context:["void libxml_set_streams_context(resource streams_context)","Set the streams context for the next libxml document load or write"],libxml_use_internal_errors:["bool libxml_use_internal_errors([boolean use_errors])","Disable libxml errors and allow user to fetch error information as needed"],link:["int link(string target, string link)","Create a hard link"],linkinfo:["int linkinfo(string filename)","Returns the st_dev field of the UNIX C stat structure describing the link"],litespeed_request_headers:["array litespeed_request_headers(void)","Fetch all HTTP request headers"],litespeed_response_headers:["array litespeed_response_headers(void)","Fetch all HTTP response headers"],locale_accept_from_http:["string locale_accept_from_http(string $http_accept)",null],locale_canonicalize:["static string locale_canonicalize(Locale $loc, string $locale)","* @param string $locale The locale string to canonicalize"],locale_filter_matches:["boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])","* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm"],locale_get_all_variants:["static array locale_get_all_variants($locale)","* gets an array containing the list of variants, or null"],locale_get_default:["static string locale_get_default( )","Get default locale"],locale_get_keywords:["static array locale_get_keywords(string $locale) {","* return an associative array containing keyword-value * pairs for this locale. The keys are keys to the array (doh!)"],locale_get_primary_language:["static string locale_get_primary_language($locale)","* gets the primary language for the $locale"],locale_get_region:["static string locale_get_region($locale)","* gets the region for the $locale"],locale_get_script:["static string locale_get_script($locale)","* gets the script for the $locale"],locale_lookup:["string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])","* Searchs the items in $langtag for the best match to the language * range"],locale_set_default:["static string locale_set_default( string $locale )","Set default locale"],localeconv:["array localeconv(void)","Returns numeric formatting information based on the current locale"],localtime:["array localtime([int timestamp [, bool associative_array]])","Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array"],log:["float log(float number, [float base])","Returns the natural logarithm of the number, or the base log if base is specified"],log10:["float log10(float number)","Returns the base-10 logarithm of the number"],log1p:["float log1p(float number)","Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero"],long2ip:["string long2ip(int proper_address)","Converts an (IPv4) Internet network address into a string in Internet standard dotted format"],lstat:["array lstat(string filename)","Give information about a file or symbolic link"],ltrim:["string ltrim(string str [, string character_mask])","Strips whitespace from the beginning of a string"],mail:["int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])","Send an email message"],max:["mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])","Return the highest value in an array or a series of arguments"],mb_check_encoding:["bool mb_check_encoding([string var[, string encoding]])","Check if the string is valid for the specified encoding"],mb_convert_case:["string mb_convert_case(string sourcestring, int mode [, string encoding])","Returns a case-folded version of sourcestring"],mb_convert_encoding:["string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])","Returns converted string in desired encoding"],mb_convert_kana:["string mb_convert_kana(string str [, string option] [, string encoding])","Conversion between full-width character and half-width character (Japanese)"],mb_convert_variables:["string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])","Converts the string resource in variables to desired encoding"],mb_decode_mimeheader:["string mb_decode_mimeheader(string string)",'Decodes the MIME "encoded-word" in the string'],mb_decode_numericentity:["string mb_decode_numericentity(string string, array convmap [, string encoding])","Converts HTML numeric entities to character code"],mb_detect_encoding:["string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])","Encodings of the given string is returned (as a string)"],mb_detect_order:["bool|array mb_detect_order([mixed encoding-list])","Sets the current detect_order or Return the current detect_order as a array"],mb_encode_mimeheader:["string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])",'Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?='],mb_encode_numericentity:["string mb_encode_numericentity(string string, array convmap [, string encoding])","Converts specified characters to HTML numeric entities"],mb_encoding_aliases:["array mb_encoding_aliases(string encoding)","Returns an array of the aliases of a given encoding name"],mb_ereg:["int mb_ereg(string pattern, string string [, array registers])","Regular expression match for multibyte string"],mb_ereg_match:["bool mb_ereg_match(string pattern, string string [,string option])","Regular expression match for multibyte string"],mb_ereg_replace:["string mb_ereg_replace(string pattern, string replacement, string string [, string option])","Replace regular expression for multibyte string"],mb_ereg_search:["bool mb_ereg_search([string pattern[, string option]])","Regular expression search for multibyte string"],mb_ereg_search_getpos:["int mb_ereg_search_getpos(void)","Get search start position"],mb_ereg_search_getregs:["array mb_ereg_search_getregs(void)","Get matched substring of the last time"],mb_ereg_search_init:["bool mb_ereg_search_init(string string [, string pattern[, string option]])","Initialize string and regular expression for search."],mb_ereg_search_pos:["array mb_ereg_search_pos([string pattern[, string option]])","Regular expression search for multibyte string"],mb_ereg_search_regs:["array mb_ereg_search_regs([string pattern[, string option]])","Regular expression search for multibyte string"],mb_ereg_search_setpos:["bool mb_ereg_search_setpos(int position)","Set search start position"],mb_eregi:["int mb_eregi(string pattern, string string [, array registers])","Case-insensitive regular expression match for multibyte string"],mb_eregi_replace:["string mb_eregi_replace(string pattern, string replacement, string string)","Case insensitive replace regular expression for multibyte string"],mb_get_info:["mixed mb_get_info([string type])","Returns the current settings of mbstring"],mb_http_input:["mixed mb_http_input([string type])","Returns the input encoding"],mb_http_output:["string mb_http_output([string encoding])","Sets the current output_encoding or returns the current output_encoding as a string"],mb_internal_encoding:["string mb_internal_encoding([string encoding])","Sets the current internal encoding or Returns the current internal encoding as a string"],mb_language:["string mb_language([string language])","Sets the current language or Returns the current language as a string"],mb_list_encodings:["mixed mb_list_encodings()","Returns an array of all supported entity encodings"],mb_output_handler:["string mb_output_handler(string contents, int status)","Returns string in output buffer converted to the http_output encoding"],mb_parse_str:["bool mb_parse_str(string encoded_string [, array result])","Parses GET/POST/COOKIE data and sets global variables"],mb_preferred_mime_name:["string mb_preferred_mime_name(string encoding)","Return the preferred MIME name (charset) as a string"],mb_regex_encoding:["string mb_regex_encoding([string encoding])","Returns the current encoding for regex as a string."],mb_regex_set_options:["string mb_regex_set_options([string options])","Set or get the default options for mbregex functions"],mb_send_mail:["int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])","* Sends an email message with MIME scheme"],mb_split:["array mb_split(string pattern, string string [, int limit])","split multibyte string into array by regular expression"],mb_strcut:["string mb_strcut(string str, int start [, int length [, string encoding]])","Returns part of a string"],mb_strimwidth:["string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])","Trim the string in terminal width"],mb_stripos:["int mb_stripos(string haystack, string needle [, int offset [, string encoding]])","Finds position of first occurrence of a string within another, case insensitive"],mb_stristr:["string mb_stristr(string haystack, string needle[, bool part[, string encoding]])","Finds first occurrence of a string within another, case insensitive"],mb_strlen:["int mb_strlen(string str [, string encoding])","Get character numbers of a string"],mb_strpos:["int mb_strpos(string haystack, string needle [, int offset [, string encoding]])","Find position of first occurrence of a string within another"],mb_strrchr:["string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])","Finds the last occurrence of a character in a string within another"],mb_strrichr:["string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])","Finds the last occurrence of a character in a string within another, case insensitive"],mb_strripos:["int mb_strripos(string haystack, string needle [, int offset [, string encoding]])","Finds position of last occurrence of a string within another, case insensitive"],mb_strrpos:["int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])","Find position of last occurrence of a string within another"],mb_strstr:["string mb_strstr(string haystack, string needle[, bool part[, string encoding]])","Finds first occurrence of a string within another"],mb_strtolower:["string mb_strtolower(string sourcestring [, string encoding])","* Returns a lowercased version of sourcestring"],mb_strtoupper:["string mb_strtoupper(string sourcestring [, string encoding])","* Returns a uppercased version of sourcestring"],mb_strwidth:["int mb_strwidth(string str [, string encoding])","Gets terminal width of a string"],mb_substitute_character:["mixed mb_substitute_character([mixed substchar])","Sets the current substitute_character or returns the current substitute_character"],mb_substr:["string mb_substr(string str, int start [, int length [, string encoding]])","Returns part of a string"],mb_substr_count:["int mb_substr_count(string haystack, string needle [, string encoding])","Count the number of substring occurrences"],mcrypt_cbc:["string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)","CBC crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_cfb:["string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)","CFB crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_create_iv:["string mcrypt_create_iv(int size, int source)","Create an initialization vector (IV)"],mcrypt_decrypt:["string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)","OFB crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_ecb:["string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)","ECB crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_enc_get_algorithms_name:["string mcrypt_enc_get_algorithms_name(resource td)","Returns the name of the algorithm specified by the descriptor td"],mcrypt_enc_get_block_size:["int mcrypt_enc_get_block_size(resource td)","Returns the block size of the cipher specified by the descriptor td"],mcrypt_enc_get_iv_size:["int mcrypt_enc_get_iv_size(resource td)","Returns the size of the IV in bytes of the algorithm specified by the descriptor td"],mcrypt_enc_get_key_size:["int mcrypt_enc_get_key_size(resource td)","Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td"],mcrypt_enc_get_modes_name:["string mcrypt_enc_get_modes_name(resource td)","Returns the name of the mode specified by the descriptor td"],mcrypt_enc_get_supported_key_sizes:["array mcrypt_enc_get_supported_key_sizes(resource td)","This function decrypts the crypttext"],mcrypt_enc_is_block_algorithm:["bool mcrypt_enc_is_block_algorithm(resource td)","Returns TRUE if the alrogithm is a block algorithms"],mcrypt_enc_is_block_algorithm_mode:["bool mcrypt_enc_is_block_algorithm_mode(resource td)","Returns TRUE if the mode is for use with block algorithms"],mcrypt_enc_is_block_mode:["bool mcrypt_enc_is_block_mode(resource td)","Returns TRUE if the mode outputs blocks"],mcrypt_enc_self_test:["int mcrypt_enc_self_test(resource td)","This function runs the self test on the algorithm specified by the descriptor td"],mcrypt_encrypt:["string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)","OFB crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_generic:["string mcrypt_generic(resource td, string data)","This function encrypts the plaintext"],mcrypt_generic_deinit:["bool mcrypt_generic_deinit(resource td)","This function terminates encrypt specified by the descriptor td"],mcrypt_generic_init:["int mcrypt_generic_init(resource td, string key, string iv)","This function initializes all buffers for the specific module"],mcrypt_get_block_size:["int mcrypt_get_block_size(string cipher, string module)","Get the key size of cipher"],mcrypt_get_cipher_name:["string mcrypt_get_cipher_name(string cipher)","Get the key size of cipher"],mcrypt_get_iv_size:["int mcrypt_get_iv_size(string cipher, string module)","Get the IV size of cipher (Usually the same as the blocksize)"],mcrypt_get_key_size:["int mcrypt_get_key_size(string cipher, string module)","Get the key size of cipher"],mcrypt_list_algorithms:["array mcrypt_list_algorithms([string lib_dir])",'List all algorithms in "module_dir"'],mcrypt_list_modes:["array mcrypt_list_modes([string lib_dir])",'List all modes "module_dir"'],mcrypt_module_close:["bool mcrypt_module_close(resource td)","Free the descriptor td"],mcrypt_module_get_algo_block_size:["int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])","Returns the block size of the algorithm"],mcrypt_module_get_algo_key_size:["int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])","Returns the maximum supported key size of the algorithm"],mcrypt_module_get_supported_key_sizes:["array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])","This function decrypts the crypttext"],mcrypt_module_is_block_algorithm:["bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])","Returns TRUE if the algorithm is a block algorithm"],mcrypt_module_is_block_algorithm_mode:["bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])","Returns TRUE if the mode is for use with block algorithms"],mcrypt_module_is_block_mode:["bool mcrypt_module_is_block_mode(string mode [, string lib_dir])","Returns TRUE if the mode outputs blocks of bytes"],mcrypt_module_open:["resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)","Opens the module of the algorithm and the mode to be used"],mcrypt_module_self_test:["bool mcrypt_module_self_test(string algorithm [, string lib_dir])",'Does a self test of the module "module"'],mcrypt_ofb:["string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)","OFB crypt/decrypt data using key key with cipher cipher starting with iv"],md5:["string md5(string str, [ bool raw_output])","Calculate the md5 hash of a string"],md5_file:["string md5_file(string filename [, bool raw_output])","Calculate the md5 hash of given filename"],mdecrypt_generic:["string mdecrypt_generic(resource td, string data)","This function decrypts the plaintext"],memory_get_peak_usage:["int memory_get_peak_usage([real_usage])","Returns the peak allocated by PHP memory"],memory_get_usage:["int memory_get_usage([real_usage])","Returns the allocated by PHP memory"],metaphone:["string metaphone(string text[, int phones])","Break english phrases down into their phonemes"],method_exists:["bool method_exists(object object, string method)","Checks if the class method exists"],mhash:["string mhash(int hash, string data [, string key])","Hash data with hash"],mhash_count:["int mhash_count(void)","Gets the number of available hashes"],mhash_get_block_size:["int mhash_get_block_size(int hash)","Gets the block size of hash"],mhash_get_hash_name:["string mhash_get_hash_name(int hash)","Gets the name of hash"],mhash_keygen_s2k:["string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)","Generates a key using hash functions"],microtime:["mixed microtime([bool get_as_float])","Returns either a string or a float containing the current time in seconds and microseconds"],mime_content_type:["string mime_content_type(string filename|resource stream)","Return content-type for file"],min:["mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])","Return the lowest value in an array or a series of arguments"],mkdir:["bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])","Create a directory"],mktime:["int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])","Get UNIX timestamp for a date"],money_format:["string money_format(string format , float value)","Convert monetary value(s) to string"],move_uploaded_file:["bool move_uploaded_file(string path, string new_path)","Move a file if and only if it was created by an upload"],msg_get_queue:["resource msg_get_queue(int key [, int perms])","Attach to a message queue"],msg_queue_exists:["bool msg_queue_exists(int key)","Check whether a message queue exists"],msg_receive:["mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])","Send a message of type msgtype (must be > 0) to a message queue"],msg_remove_queue:["bool msg_remove_queue(resource queue)","Destroy the queue"],msg_send:["bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])","Send a message of type msgtype (must be > 0) to a message queue"],msg_set_queue:["bool msg_set_queue(resource queue, array data)","Set information for a message queue"],msg_stat_queue:["array msg_stat_queue(resource queue)","Returns information about a message queue"],msgfmt_create:["MessageFormatter msgfmt_create( string $locale, string $pattern )","* Create formatter."],msgfmt_format:["mixed msgfmt_format( MessageFormatter $nf, array $args )","* Format a message."],msgfmt_format_message:["mixed msgfmt_format_message( string $locale, string $pattern, array $args )","* Format a message."],msgfmt_get_error_code:["int msgfmt_get_error_code( MessageFormatter $nf )","* Get formatter's last error code."],msgfmt_get_error_message:["string msgfmt_get_error_message( MessageFormatter $coll )","* Get text description for formatter's last error code."],msgfmt_get_locale:["string msgfmt_get_locale(MessageFormatter $mf)","* Get formatter locale."],msgfmt_get_pattern:["string msgfmt_get_pattern( MessageFormatter $mf )","* Get formatter pattern."],msgfmt_parse:["array msgfmt_parse( MessageFormatter $nf, string $source )","* Parse a message."],msgfmt_set_pattern:["bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )","* Set formatter pattern."],mssql_bind:["bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])","Adds a parameter to a stored procedure or a remote stored procedure"],mssql_close:["bool mssql_close([resource conn_id])","Closes a connection to a MS-SQL server"],mssql_connect:["int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])","Establishes a connection to a MS-SQL server"],mssql_data_seek:["bool mssql_data_seek(resource result_id, int offset)","Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number"],mssql_execute:["mixed mssql_execute(resource stmt [, bool skip_results = false])","Executes a stored procedure on a MS-SQL server database"],mssql_fetch_array:["array mssql_fetch_array(resource result_id [, int result_type])","Returns an associative array of the current row in the result set specified by result_id"],mssql_fetch_assoc:["array mssql_fetch_assoc(resource result_id)","Returns an associative array of the current row in the result set specified by result_id"],mssql_fetch_batch:["int mssql_fetch_batch(resource result_index)","Returns the next batch of records"],mssql_fetch_field:["object mssql_fetch_field(resource result_id [, int offset])","Gets information about certain fields in a query result"],mssql_fetch_object:["object mssql_fetch_object(resource result_id)","Returns a pseudo-object of the current row in the result set specified by result_id"],mssql_fetch_row:["array mssql_fetch_row(resource result_id)","Returns an array of the current row in the result set specified by result_id"],mssql_field_length:["int mssql_field_length(resource result_id [, int offset])","Get the length of a MS-SQL field"],mssql_field_name:["string mssql_field_name(resource result_id [, int offset])","Returns the name of the field given by offset in the result set given by result_id"],mssql_field_seek:["bool mssql_field_seek(resource result_id, int offset)","Seeks to the specified field offset"],mssql_field_type:["string mssql_field_type(resource result_id [, int offset])","Returns the type of a field"],mssql_free_result:["bool mssql_free_result(resource result_index)","Free a MS-SQL result index"],mssql_free_statement:["bool mssql_free_statement(resource result_index)","Free a MS-SQL statement index"],mssql_get_last_message:["string mssql_get_last_message(void)","Gets the last message from the MS-SQL server"],mssql_guid_string:["string mssql_guid_string(string binary [,bool short_format])","Converts a 16 byte binary GUID to a string"],mssql_init:["int mssql_init(string sp_name [, resource conn_id])","Initializes a stored procedure or a remote stored procedure"],mssql_min_error_severity:["void mssql_min_error_severity(int severity)","Sets the lower error severity"],mssql_min_message_severity:["void mssql_min_message_severity(int severity)","Sets the lower message severity"],mssql_next_result:["bool mssql_next_result(resource result_id)","Move the internal result pointer to the next result"],mssql_num_fields:["int mssql_num_fields(resource mssql_result_index)","Returns the number of fields fetched in from the result id specified"],mssql_num_rows:["int mssql_num_rows(resource mssql_result_index)","Returns the number of rows fetched in from the result id specified"],mssql_pconnect:["int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])","Establishes a persistent connection to a MS-SQL server"],mssql_query:["resource mssql_query(string query [, resource conn_id [, int batch_size]])","Perform an SQL query on a MS-SQL server database"],mssql_result:["string mssql_result(resource result_id, int row, mixed field)","Returns the contents of one cell from a MS-SQL result set"],mssql_rows_affected:["int mssql_rows_affected(resource conn_id)","Returns the number of records affected by the query"],mssql_select_db:["bool mssql_select_db(string database_name [, resource conn_id])","Select a MS-SQL database"],mt_getrandmax:["int mt_getrandmax(void)","Returns the maximum value a random number from Mersenne Twister can have"],mt_rand:["int mt_rand([int min, int max])","Returns a random number from Mersenne Twister"],mt_srand:["void mt_srand([int seed])","Seeds Mersenne Twister random number generator"],mysql_affected_rows:["int mysql_affected_rows([int link_identifier])","Gets number of affected rows in previous MySQL operation"],mysql_client_encoding:["string mysql_client_encoding([int link_identifier])","Returns the default character set for the current connection"],mysql_close:["bool mysql_close([int link_identifier])","Close a MySQL connection"],mysql_connect:["resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])","Opens a connection to a MySQL Server"],mysql_create_db:["bool mysql_create_db(string database_name [, int link_identifier])","Create a MySQL database"],mysql_data_seek:["bool mysql_data_seek(resource result, int row_number)","Move internal result pointer"],mysql_db_query:["resource mysql_db_query(string database_name, string query [, int link_identifier])","Sends an SQL query to MySQL"],mysql_drop_db:["bool mysql_drop_db(string database_name [, int link_identifier])","Drops (delete) a MySQL database"],mysql_errno:["int mysql_errno([int link_identifier])","Returns the number of the error message from previous MySQL operation"],mysql_error:["string mysql_error([int link_identifier])","Returns the text of the error message from previous MySQL operation"],mysql_escape_string:["string mysql_escape_string(string to_be_escaped)","Escape string for mysql query"],mysql_fetch_array:["array mysql_fetch_array(resource result [, int result_type])","Fetch a result row as an array (associative, numeric or both)"],mysql_fetch_assoc:["array mysql_fetch_assoc(resource result)","Fetch a result row as an associative array"],mysql_fetch_field:["object mysql_fetch_field(resource result [, int field_offset])","Gets column information from a result and return as an object"],mysql_fetch_lengths:["array mysql_fetch_lengths(resource result)","Gets max data size of each column in a result"],mysql_fetch_object:["object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])","Fetch a result row as an object"],mysql_fetch_row:["array mysql_fetch_row(resource result)","Gets a result row as an enumerated array"],mysql_field_flags:["string mysql_field_flags(resource result, int field_offset)","Gets the flags associated with the specified field in a result"],mysql_field_len:["int mysql_field_len(resource result, int field_offset)","Returns the length of the specified field"],mysql_field_name:["string mysql_field_name(resource result, int field_index)","Gets the name of the specified field in a result"],mysql_field_seek:["bool mysql_field_seek(resource result, int field_offset)","Sets result pointer to a specific field offset"],mysql_field_table:["string mysql_field_table(resource result, int field_offset)","Gets name of the table the specified field is in"],mysql_field_type:["string mysql_field_type(resource result, int field_offset)","Gets the type of the specified field in a result"],mysql_free_result:["bool mysql_free_result(resource result)","Free result memory"],mysql_get_client_info:["string mysql_get_client_info(void)","Returns a string that represents the client library version"],mysql_get_host_info:["string mysql_get_host_info([int link_identifier])","Returns a string describing the type of connection in use, including the server host name"],mysql_get_proto_info:["int mysql_get_proto_info([int link_identifier])","Returns the protocol version used by current connection"],mysql_get_server_info:["string mysql_get_server_info([int link_identifier])","Returns a string that represents the server version number"],mysql_info:["string mysql_info([int link_identifier])","Returns a string containing information about the most recent query"],mysql_insert_id:["int mysql_insert_id([int link_identifier])","Gets the ID generated from the previous INSERT operation"],mysql_list_dbs:["resource mysql_list_dbs([int link_identifier])","List databases available on a MySQL server"],mysql_list_fields:["resource mysql_list_fields(string database_name, string table_name [, int link_identifier])","List MySQL result fields"],mysql_list_processes:["resource mysql_list_processes([int link_identifier])","Returns a result set describing the current server threads"],mysql_list_tables:["resource mysql_list_tables(string database_name [, int link_identifier])","List tables in a MySQL database"],mysql_num_fields:["int mysql_num_fields(resource result)","Gets number of fields in a result"],mysql_num_rows:["int mysql_num_rows(resource result)","Gets number of rows in a result"],mysql_pconnect:["resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])","Opens a persistent connection to a MySQL Server"],mysql_ping:["bool mysql_ping([int link_identifier])","Ping a server connection. If no connection then reconnect."],mysql_query:["resource mysql_query(string query [, int link_identifier])","Sends an SQL query to MySQL"],mysql_real_escape_string:["string mysql_real_escape_string(string to_be_escaped [, int link_identifier])","Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection"],mysql_result:["mixed mysql_result(resource result, int row [, mixed field])","Gets result data"],mysql_select_db:["bool mysql_select_db(string database_name [, int link_identifier])","Selects a MySQL database"],mysql_set_charset:["bool mysql_set_charset(string csname [, int link_identifier])","sets client character set"],mysql_stat:["string mysql_stat([int link_identifier])","Returns a string containing status information"],mysql_thread_id:["int mysql_thread_id([int link_identifier])","Returns the thread id of current connection"],mysql_unbuffered_query:["resource mysql_unbuffered_query(string query [, int link_identifier])","Sends an SQL query to MySQL, without fetching and buffering the result rows"],mysqli_affected_rows:["mixed mysqli_affected_rows(object link)","Get number of affected rows in previous MySQL operation"],mysqli_autocommit:["bool mysqli_autocommit(object link, bool mode)","Turn auto commit on or of"],mysqli_cache_stats:["array mysqli_cache_stats(void)","Returns statistics about the zval cache"],mysqli_change_user:["bool mysqli_change_user(object link, string user, string password, string database)","Change logged-in user of the active connection"],mysqli_character_set_name:["string mysqli_character_set_name(object link)","Returns the name of the character set used for this connection"],mysqli_close:["bool mysqli_close(object link)","Close connection"],mysqli_commit:["bool mysqli_commit(object link)","Commit outstanding actions and close transaction"],mysqli_connect:["object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])","Open a connection to a mysql server"],mysqli_connect_errno:["int mysqli_connect_errno(void)","Returns the numerical value of the error message from last connect command"],mysqli_connect_error:["string mysqli_connect_error(void)","Returns the text of the error message from previous MySQL operation"],mysqli_data_seek:["bool mysqli_data_seek(object result, int offset)","Move internal result pointer"],mysqli_debug:["void mysqli_debug(string debug)",""],mysqli_dump_debug_info:["bool mysqli_dump_debug_info(object link)",""],mysqli_embedded_server_end:["void mysqli_embedded_server_end(void)",""],mysqli_embedded_server_start:["bool mysqli_embedded_server_start(bool start, array arguments, array groups)","initialize and start embedded server"],mysqli_errno:["int mysqli_errno(object link)","Returns the numerical value of the error message from previous MySQL operation"],mysqli_error:["string mysqli_error(object link)","Returns the text of the error message from previous MySQL operation"],mysqli_fetch_all:["mixed mysqli_fetch_all (object result [,int resulttype])","Fetches all result rows as an associative array, a numeric array, or both"],mysqli_fetch_array:["mixed mysqli_fetch_array (object result [,int resulttype])","Fetch a result row as an associative array, a numeric array, or both"],mysqli_fetch_assoc:["mixed mysqli_fetch_assoc (object result)","Fetch a result row as an associative array"],mysqli_fetch_field:["mixed mysqli_fetch_field (object result)","Get column information from a result and return as an object"],mysqli_fetch_field_direct:["mixed mysqli_fetch_field_direct (object result, int offset)","Fetch meta-data for a single field"],mysqli_fetch_fields:["mixed mysqli_fetch_fields (object result)","Return array of objects containing field meta-data"],mysqli_fetch_lengths:["mixed mysqli_fetch_lengths (object result)","Get the length of each output in a result"],mysqli_fetch_object:["mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])","Fetch a result row as an object"],mysqli_fetch_row:["array mysqli_fetch_row (object result)","Get a result row as an enumerated array"],mysqli_field_count:["int mysqli_field_count(object link)","Fetch the number of fields returned by the last query for the given link"],mysqli_field_seek:["int mysqli_field_seek(object result, int fieldnr)","Set result pointer to a specified field offset"],mysqli_field_tell:["int mysqli_field_tell(object result)","Get current field offset of result pointer"],mysqli_free_result:["void mysqli_free_result(object result)","Free query result memory for the given result handle"],mysqli_get_charset:["object mysqli_get_charset(object link)","returns a character set object"],mysqli_get_client_info:["string mysqli_get_client_info(void)","Get MySQL client info"],mysqli_get_client_stats:["array mysqli_get_client_stats(void)","Returns statistics about the zval cache"],mysqli_get_client_version:["int mysqli_get_client_version(void)","Get MySQL client info"],mysqli_get_connection_stats:["array mysqli_get_connection_stats(void)","Returns statistics about the zval cache"],mysqli_get_host_info:["string mysqli_get_host_info (object link)","Get MySQL host info"],mysqli_get_proto_info:["int mysqli_get_proto_info(object link)","Get MySQL protocol information"],mysqli_get_server_info:["string mysqli_get_server_info(object link)","Get MySQL server info"],mysqli_get_server_version:["int mysqli_get_server_version(object link)","Return the MySQL version for the server referenced by the given link"],mysqli_get_warnings:["object mysqli_get_warnings(object link) */",'PHP_FUNCTION(mysqli_get_warnings) { MY_MYSQL *mysql; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; MYSQLI_WARNING *w; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID); if (mysql_warning_count(mysql->mysql)) { w = php_get_warnings(mysql->mysql TSRMLS_CC); } else { RETURN_FALSE; } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = mysqli_resource->info = (void *)w; mysqli_resource->status = MYSQLI_STATUS_VALID; MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}'],mysqli_info:["string mysqli_info(object link)","Get information about the most recent query"],mysqli_init:["resource mysqli_init(void)","Initialize mysqli and return a resource for use with mysql_real_connect"],mysqli_insert_id:["mixed mysqli_insert_id(object link)","Get the ID generated from the previous INSERT operation"],mysqli_kill:["bool mysqli_kill(object link, int processid)","Kill a mysql process on the server"],mysqli_link_construct:["object mysqli_link_construct()",""],mysqli_more_results:["bool mysqli_more_results(object link)","check if there any more query results from a multi query"],mysqli_multi_query:["bool mysqli_multi_query(object link, string query)","allows to execute multiple queries"],mysqli_next_result:["bool mysqli_next_result(object link)","read next result from multi_query"],mysqli_num_fields:["int mysqli_num_fields(object result)","Get number of fields in result"],mysqli_num_rows:["mixed mysqli_num_rows(object result)","Get number of rows in result"],mysqli_options:["bool mysqli_options(object link, int flags, mixed values)","Set options"],mysqli_ping:["bool mysqli_ping(object link)","Ping a server connection or reconnect if there is no connection"],mysqli_poll:["int mysqli_poll(array read, array write, array error, long sec [, long usec])","Poll connections"],mysqli_prepare:["mixed mysqli_prepare(object link, string query)","Prepare a SQL statement for execution"],mysqli_query:["mixed mysqli_query(object link, string query [,int resultmode]) */",'PHP_FUNCTION(mysqli_query) { MY_MYSQL *mysql; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; MYSQL_RES *result; char *query = NULL; unsigned int query_len; unsigned long resultmode = MYSQLI_STORE_RESULT; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|l", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) { return; } if (!query_len) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty query"); RETURN_FALSE; } if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for resultmode"); RETURN_FALSE; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID); MYSQLI_DISABLE_MQ; #ifdef MYSQLI_USE_MYSQLND if (resultmode & MYSQLI_ASYNC) { if (mysqli_async_query(mysql->mysql, query, query_len)) { MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC; RETURN_TRUE; } #endif if (mysql_real_query(mysql->mysql, query, query_len)) { MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } if (!mysql_field_count(mysql->mysql)) { /* no result set - not a SELECT'],mysqli_real_connect:["bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])","Open a connection to a mysql server"],mysqli_real_escape_string:["string mysqli_real_escape_string(object link, string escapestr)","Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection"],mysqli_real_query:["bool mysqli_real_query(object link, string query)","Binary-safe version of mysql_query()"],mysqli_reap_async_query:["int mysqli_reap_async_query(object link)","Poll connections"],mysqli_refresh:["bool mysqli_refresh(object link, long options)","Flush tables or caches, or reset replication server information"],mysqli_report:["bool mysqli_report(int flags)","sets report level"],mysqli_rollback:["bool mysqli_rollback(object link)","Undo actions from current transaction"],mysqli_select_db:["bool mysqli_select_db(object link, string dbname)","Select a MySQL database"],mysqli_set_charset:["bool mysqli_set_charset(object link, string csname)","sets client character set"],mysqli_set_local_infile_default:["void mysqli_set_local_infile_default(object link)","unsets user defined handler for load local infile command"],mysqli_set_local_infile_handler:["bool mysqli_set_local_infile_handler(object link, callback read_func)","Set callback functions for LOAD DATA LOCAL INFILE"],mysqli_sqlstate:["string mysqli_sqlstate(object link)","Returns the SQLSTATE error from previous MySQL operation"],mysqli_ssl_set:["bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])",""],mysqli_stat:["mixed mysqli_stat(object link)","Get current system status"],mysqli_stmt_affected_rows:["mixed mysqli_stmt_affected_rows(object stmt)","Return the number of rows affected in the last query for the given link"],mysqli_stmt_attr_get:["int mysqli_stmt_attr_get(object stmt, long attr)",""],mysqli_stmt_attr_set:["int mysqli_stmt_attr_set(object stmt, long attr, long mode)",""],mysqli_stmt_bind_param:["bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])","Bind variables to a prepared statement as parameters"],mysqli_stmt_bind_result:["bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])","Bind variables to a prepared statement for result storage"],mysqli_stmt_close:["bool mysqli_stmt_close(object stmt)","Close statement"],mysqli_stmt_data_seek:["void mysqli_stmt_data_seek(object stmt, int offset)","Move internal result pointer"],mysqli_stmt_errno:["int mysqli_stmt_errno(object stmt)",""],mysqli_stmt_error:["string mysqli_stmt_error(object stmt)",""],mysqli_stmt_execute:["bool mysqli_stmt_execute(object stmt)","Execute a prepared statement"],mysqli_stmt_fetch:["mixed mysqli_stmt_fetch(object stmt)","Fetch results from a prepared statement into the bound variables"],mysqli_stmt_field_count:["int mysqli_stmt_field_count(object stmt) {","Return the number of result columns for the given statement"],mysqli_stmt_free_result:["void mysqli_stmt_free_result(object stmt)","Free stored result memory for the given statement handle"],mysqli_stmt_get_result:["object mysqli_stmt_get_result(object link)","Buffer result set on client"],mysqli_stmt_get_warnings:["object mysqli_stmt_get_warnings(object link) */",'PHP_FUNCTION(mysqli_stmt_get_warnings) { MY_STMT *stmt; zval *stmt_link; MYSQLI_RESOURCE *mysqli_resource; MYSQLI_WARNING *w; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &stmt_link, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, "mysqli_stmt", MYSQLI_STATUS_VALID); if (mysqli_stmt_warning_count(stmt->stmt)) { w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC); } else { RETURN_FALSE; } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = mysqli_resource->info = (void *)w; mysqli_resource->status = MYSQLI_STATUS_VALID; MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}'],mysqli_stmt_init:["mixed mysqli_stmt_init(object link)","Initialize statement object"],mysqli_stmt_insert_id:["mixed mysqli_stmt_insert_id(object stmt)","Get the ID generated from the previous INSERT operation"],mysqli_stmt_next_result:["bool mysqli_stmt_next_result(object link)","read next result from multi_query"],mysqli_stmt_num_rows:["mixed mysqli_stmt_num_rows(object stmt)","Return the number of rows in statements result set"],mysqli_stmt_param_count:["int mysqli_stmt_param_count(object stmt)","Return the number of parameter for the given statement"],mysqli_stmt_prepare:["bool mysqli_stmt_prepare(object stmt, string query)","prepare server side statement with query"],mysqli_stmt_reset:["bool mysqli_stmt_reset(object stmt)","reset a prepared statement"],mysqli_stmt_result_metadata:["mixed mysqli_stmt_result_metadata(object stmt)","return result set from statement"],mysqli_stmt_send_long_data:["bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)",""],mysqli_stmt_sqlstate:["string mysqli_stmt_sqlstate(object stmt)",""],mysqli_stmt_store_result:["bool mysqli_stmt_store_result(stmt)",""],mysqli_store_result:["object mysqli_store_result(object link)","Buffer result set on client"],mysqli_thread_id:["int mysqli_thread_id(object link)","Return the current thread ID"],mysqli_thread_safe:["bool mysqli_thread_safe(void)","Return whether thread safety is given or not"],mysqli_use_result:["mixed mysqli_use_result(object link)","Directly retrieve query results - do not buffer results on client side"],mysqli_warning_count:["int mysqli_warning_count (object link)","Return number of warnings from the last query for the given link"],natcasesort:["void natcasesort(array &array_arg)","Sort an array using case-insensitive natural sort"],natsort:["void natsort(array &array_arg)","Sort an array using natural sort"],next:["mixed next(array array_arg)","Move array argument's internal pointer to the next element and return it"],ngettext:["string ngettext(string MSGID1, string MSGID2, int N)","Plural version of gettext()"],nl2br:["string nl2br(string str [, bool is_xhtml])","Converts newlines to HTML line breaks"],nl_langinfo:["string nl_langinfo(int item)","Query language and locale information"],normalizer_is_normalize:["bool normalizer_is_normalize( string $input [, string $form = FORM_C] )","* Test if a string is in a given normalization form."],normalizer_normalize:["string normalizer_normalize( string $input [, string $form = FORM_C] )","* Normalize a string."],nsapi_request_headers:["array nsapi_request_headers(void)","Get all headers from the request"],nsapi_response_headers:["array nsapi_response_headers(void)","Get all headers from the response"],nsapi_virtual:["bool nsapi_virtual(string uri)","Perform an NSAPI sub-request"],number_format:["string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])","Formats a number with grouped thousands"],numfmt_create:["NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )","* Create number formatter."],numfmt_format:["mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )","* Format a number."],numfmt_format_currency:["mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )","* Format a number as currency."],numfmt_get_attribute:["mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )","* Get formatter attribute value."],numfmt_get_error_code:["int numfmt_get_error_code( NumberFormatter $nf )","* Get formatter's last error code."],numfmt_get_error_message:["string numfmt_get_error_message( NumberFormatter $nf )","* Get text description for formatter's last error code."],numfmt_get_locale:["string numfmt_get_locale( NumberFormatter $nf[, int type] )","* Get formatter locale."],numfmt_get_pattern:["string numfmt_get_pattern( NumberFormatter $nf )","* Get formatter pattern."],numfmt_get_symbol:["string numfmt_get_symbol( NumberFormatter $nf, int $attr )","* Get formatter symbol value."],numfmt_get_text_attribute:["string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )","* Get formatter attribute value."],numfmt_parse:["mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])","* Parse a number."],numfmt_parse_currency:["double numfmt_parse_currency( NumberFormatter $nf, string $str, string $¤cy[, int $&position] )","* Parse a number as currency."],numfmt_parse_message:["array numfmt_parse_message( string $locale, string $pattern, string $source )","* Parse a message."],numfmt_set_attribute:["bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )","* Get formatter attribute value."],numfmt_set_pattern:["bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )","* Set formatter pattern."],numfmt_set_symbol:["bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )","* Set formatter symbol value."],numfmt_set_text_attribute:["bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )","* Get formatter attribute value."],ob_clean:["bool ob_clean(void)","Clean (delete) the current output buffer"],ob_end_clean:["bool ob_end_clean(void)","Clean the output buffer, and delete current output buffer"],ob_end_flush:["bool ob_end_flush(void)","Flush (send) the output buffer, and delete current output buffer"],ob_flush:["bool ob_flush(void)","Flush (send) contents of the output buffer. The last buffer content is sent to next buffer"],ob_get_clean:["bool ob_get_clean(void)","Get current buffer contents and delete current output buffer"],ob_get_contents:["string ob_get_contents(void)","Return the contents of the output buffer"],ob_get_flush:["bool ob_get_flush(void)","Get current buffer contents, flush (send) the output buffer, and delete current output buffer"],ob_get_length:["int ob_get_length(void)","Return the length of the output buffer"],ob_get_level:["int ob_get_level(void)","Return the nesting level of the output buffer"],ob_get_status:["false|array ob_get_status([bool full_status])","Return the status of the active or all output buffers"],ob_gzhandler:["string ob_gzhandler(string str, int mode)","Encode str based on accept-encoding setting - designed to be called from ob_start()"],ob_iconv_handler:["string ob_iconv_handler(string contents, int status)","Returns str in output buffer converted to the iconv.output_encoding character set"],ob_implicit_flush:["void ob_implicit_flush([int flag])","Turn implicit flush on/off and is equivalent to calling flush() after every output call"],ob_list_handlers:["false|array ob_list_handlers()","* List all output_buffers in an array"],ob_start:["bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])","Turn on Output Buffering (specifying an optional output handler)."],oci_bind_array_by_name:["bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])","Bind a PHP array to an Oracle PL/SQL type by name"],oci_bind_by_name:["bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])","Bind a PHP variable to an Oracle placeholder by name"],oci_cancel:["bool oci_cancel(resource stmt)","Cancel reading from a cursor"],oci_close:["bool oci_close(resource connection)","Disconnect from database"],oci_collection_append:["bool oci_collection_append(string value)","Append an object to the collection"],oci_collection_assign:["bool oci_collection_assign(object from)","Assign a collection from another existing collection"],oci_collection_element_assign:["bool oci_collection_element_assign(int index, string val)","Assign element val to collection at index ndx"],oci_collection_element_get:["string oci_collection_element_get(int ndx)","Retrieve the value at collection index ndx"],oci_collection_max:["int oci_collection_max()","Return the max value of a collection. For a varray this is the maximum length of the array"],oci_collection_size:["int oci_collection_size()","Return the size of a collection"],oci_collection_trim:["bool oci_collection_trim(int num)","Trim num elements from the end of a collection"],oci_commit:["bool oci_commit(resource connection)","Commit the current context"],oci_connect:["resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])","Connect to an Oracle database and log on. Returns a new session."],oci_define_by_name:["bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])","Define a PHP variable to an Oracle column by name"],oci_error:["array oci_error([resource stmt|connection|global])","Return the last error of stmt|connection|global. If no error happened returns false."],oci_execute:["bool oci_execute(resource stmt [, int mode])","Execute a parsed statement"],oci_fetch:["bool oci_fetch(resource stmt)","Prepare a new row of data for reading"],oci_fetch_all:["int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])","Fetch all rows of result data into an array"],oci_fetch_array:["array oci_fetch_array( resource stmt [, int mode ])","Fetch a result row as an array"],oci_fetch_assoc:["array oci_fetch_assoc( resource stmt )","Fetch a result row as an associative array"],oci_fetch_object:["object oci_fetch_object( resource stmt )","Fetch a result row as an object"],oci_fetch_row:["array oci_fetch_row( resource stmt )","Fetch a result row as an enumerated array"],oci_field_is_null:["bool oci_field_is_null(resource stmt, int col)","Tell whether a column is NULL"],oci_field_name:["string oci_field_name(resource stmt, int col)","Tell the name of a column"],oci_field_precision:["int oci_field_precision(resource stmt, int col)","Tell the precision of a column"],oci_field_scale:["int oci_field_scale(resource stmt, int col)","Tell the scale of a column"],oci_field_size:["int oci_field_size(resource stmt, int col)","Tell the maximum data size of a column"],oci_field_type:["mixed oci_field_type(resource stmt, int col)","Tell the data type of a column"],oci_field_type_raw:["int oci_field_type_raw(resource stmt, int col)","Tell the raw oracle data type of a column"],oci_free_collection:["bool oci_free_collection()","Deletes collection object"],oci_free_descriptor:["bool oci_free_descriptor()","Deletes large object description"],oci_free_statement:["bool oci_free_statement(resource stmt)","Free all resources associated with a statement"],oci_internal_debug:["void oci_internal_debug(int onoff)","Toggle internal debugging output for the OCI extension"],oci_lob_append:["bool oci_lob_append( object lob )","Appends data from a LOB to another LOB"],oci_lob_close:["bool oci_lob_close()","Closes lob descriptor"],oci_lob_copy:["bool oci_lob_copy( object lob_to, object lob_from [, int length ] )","Copies data from a LOB to another LOB"],oci_lob_eof:["bool oci_lob_eof()","Checks if EOF is reached"],oci_lob_erase:["int oci_lob_erase( [ int offset [, int length ] ] )","Erases a specified portion of the internal LOB, starting at a specified offset"],oci_lob_export:["bool oci_lob_export([string filename [, int start [, int length]]])","Writes a large object into a file"],oci_lob_flush:["bool oci_lob_flush( [ int flag ] )","Flushes the LOB buffer"],oci_lob_import:["bool oci_lob_import( string filename )","Loads file into a LOB"],oci_lob_is_equal:["bool oci_lob_is_equal( object lob1, object lob2 )","Tests to see if two LOB/FILE locators are equal"],oci_lob_load:["string oci_lob_load()","Loads a large object"],oci_lob_read:["string oci_lob_read( int length )","Reads particular part of a large object"],oci_lob_rewind:["bool oci_lob_rewind()","Rewind pointer of a LOB"],oci_lob_save:["bool oci_lob_save( string data [, int offset ])","Saves a large object"],oci_lob_seek:["bool oci_lob_seek( int offset [, int whence ])","Moves the pointer of a LOB"],oci_lob_size:["int oci_lob_size()","Returns size of a large object"],oci_lob_tell:["int oci_lob_tell()","Tells LOB pointer position"],oci_lob_truncate:["bool oci_lob_truncate( [ int length ])","Truncates a LOB"],oci_lob_write:["int oci_lob_write( string string [, int length ])","Writes data to current position of a LOB"],oci_lob_write_temporary:["bool oci_lob_write_temporary(string var [, int lob_type])","Writes temporary blob"],oci_new_collection:["object oci_new_collection(resource connection, string tdo [, string schema])","Initialize a new collection"],oci_new_connect:["resource oci_new_connect(string user, string pass [, string db])","Connect to an Oracle database and log on. Returns a new session."],oci_new_cursor:["resource oci_new_cursor(resource connection)","Return a new cursor (Statement-Handle) - use this to bind ref-cursors!"],oci_new_descriptor:["object oci_new_descriptor(resource connection [, int type])","Initialize a new empty descriptor LOB/FILE (LOB is default)"],oci_num_fields:["int oci_num_fields(resource stmt)","Return the number of result columns in a statement"],oci_num_rows:["int oci_num_rows(resource stmt)","Return the row count of an OCI statement"],oci_parse:["resource oci_parse(resource connection, string query)","Parse a query and return a statement"],oci_password_change:["bool oci_password_change(resource connection, string username, string old_password, string new_password)","Changes the password of an account"],oci_pconnect:["resource oci_pconnect(string user, string pass [, string db [, string charset ]])","Connect to an Oracle database using a persistent connection and log on. Returns a new session."],oci_result:["string oci_result(resource stmt, mixed column)","Return a single column of result data"],oci_rollback:["bool oci_rollback(resource connection)","Rollback the current context"],oci_server_version:["string oci_server_version(resource connection)","Return a string containing server version information"],oci_set_action:["bool oci_set_action(resource connection, string value)","Sets the action attribute on the connection"],oci_set_client_identifier:["bool oci_set_client_identifier(resource connection, string value)","Sets the client identifier attribute on the connection"],oci_set_client_info:["bool oci_set_client_info(resource connection, string value)","Sets the client info attribute on the connection"],oci_set_edition:["bool oci_set_edition(string value)","Sets the edition attribute for all subsequent connections created"],oci_set_module_name:["bool oci_set_module_name(resource connection, string value)","Sets the module attribute on the connection"],oci_set_prefetch:["bool oci_set_prefetch(resource stmt, int prefetch_rows)","Sets the number of rows to be prefetched on execute to prefetch_rows for stmt"],oci_statement_type:["string oci_statement_type(resource stmt)","Return the query type of an OCI statement"],ocifetchinto:["int ocifetchinto(resource stmt, array &output [, int mode])","Fetch a row of result data into an array"],ocigetbufferinglob:["bool ocigetbufferinglob()","Returns current state of buffering for a LOB"],ocisetbufferinglob:["bool ocisetbufferinglob( boolean flag )","Enables/disables buffering for a LOB"],octdec:["int octdec(string octal_number)","Returns the decimal equivalent of an octal string"],odbc_autocommit:["mixed odbc_autocommit(resource connection_id [, int OnOff])","Toggle autocommit mode or get status"],odbc_binmode:["bool odbc_binmode(int result_id, int mode)","Handle binary column data"],odbc_close:["void odbc_close(resource connection_id)","Close an ODBC connection"],odbc_close_all:["void odbc_close_all(void)","Close all ODBC connections"],odbc_columnprivileges:["resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)","Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table"],odbc_columns:["resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])","Returns a result identifier that can be used to fetch a list of column names in specified tables"],odbc_commit:["bool odbc_commit(resource connection_id)","Commit an ODBC transaction"],odbc_connect:["resource odbc_connect(string DSN, string user, string password [, int cursor_option])","Connect to a datasource"],odbc_cursor:["string odbc_cursor(resource result_id)","Get cursor name"],odbc_data_source:["array odbc_data_source(resource connection_id, int fetch_type)","Return information about the currently connected data source"],odbc_error:["string odbc_error([resource connection_id])","Get the last error code"],odbc_errormsg:["string odbc_errormsg([resource connection_id])","Get the last error message"],odbc_exec:["resource odbc_exec(resource connection_id, string query [, int flags])","Prepare and execute an SQL statement"],odbc_execute:["bool odbc_execute(resource result_id [, array parameters_array])","Execute a prepared statement"],odbc_fetch_array:["array odbc_fetch_array(int result [, int rownumber])","Fetch a result row as an associative array"],odbc_fetch_into:["int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])","Fetch one result row into an array"],odbc_fetch_object:["object odbc_fetch_object(int result [, int rownumber])","Fetch a result row as an object"],odbc_fetch_row:["bool odbc_fetch_row(resource result_id [, int row_number])","Fetch a row"],odbc_field_len:["int odbc_field_len(resource result_id, int field_number)","Get the length (precision) of a column"],odbc_field_name:["string odbc_field_name(resource result_id, int field_number)","Get a column name"],odbc_field_num:["int odbc_field_num(resource result_id, string field_name)","Return column number"],odbc_field_scale:["int odbc_field_scale(resource result_id, int field_number)","Get the scale of a column"],odbc_field_type:["string odbc_field_type(resource result_id, int field_number)","Get the datatype of a column"],odbc_foreignkeys:["resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)","Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table"],odbc_free_result:["bool odbc_free_result(resource result_id)","Free resources associated with a result"],odbc_gettypeinfo:["resource odbc_gettypeinfo(resource connection_id [, int data_type])","Returns a result identifier containing information about data types supported by the data source"],odbc_longreadlen:["bool odbc_longreadlen(int result_id, int length)","Handle LONG columns"],odbc_next_result:["bool odbc_next_result(resource result_id)","Checks if multiple results are avaiable"],odbc_num_fields:["int odbc_num_fields(resource result_id)","Get number of columns in a result"],odbc_num_rows:["int odbc_num_rows(resource result_id)","Get number of rows in a result"],odbc_pconnect:["resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])","Establish a persistent connection to a datasource"],odbc_prepare:["resource odbc_prepare(resource connection_id, string query)","Prepares a statement for execution"],odbc_primarykeys:["resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)","Returns a result identifier listing the column names that comprise the primary key for a table"],odbc_procedurecolumns:["resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])","Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures"],odbc_procedures:["resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])","Returns a result identifier containg the list of procedure names in a datasource"],odbc_result:["mixed odbc_result(resource result_id, mixed field)","Get result data"],odbc_result_all:["int odbc_result_all(resource result_id [, string format])","Print result as HTML table"],odbc_rollback:["bool odbc_rollback(resource connection_id)","Rollback a transaction"],odbc_setoption:["bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)","Sets connection or statement options"],odbc_specialcolumns:["resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)","Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction"],odbc_statistics:["resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)","Returns a result identifier that contains statistics about a single table and the indexes associated with the table"],odbc_tableprivileges:["resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)","Returns a result identifier containing a list of tables and the privileges associated with each table"],odbc_tables:["resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])","Call the SQLTables function"],opendir:["mixed opendir(string path[, resource context])","Open a directory and return a dir_handle"],openlog:["bool openlog(string ident, int option, int facility)","Open connection to system logger"],openssl_csr_export:["bool openssl_csr_export(resource csr, string &out [, bool notext=true])","Exports a CSR to file or a var"],openssl_csr_export_to_file:["bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])","Exports a CSR to file"],openssl_csr_get_public_key:["mixed openssl_csr_get_public_key(mixed csr)","Returns the subject of a CERT or FALSE on error"],openssl_csr_get_subject:["mixed openssl_csr_get_subject(mixed csr)","Returns the subject of a CERT or FALSE on error"],openssl_csr_new:["bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])","Generates a privkey and CSR"],openssl_csr_sign:["resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])","Signs a cert with another CERT"],openssl_decrypt:["string openssl_decrypt(string data, string method, string password [, bool raw_input=false])","Takes raw or base64 encoded string and dectupt it using given method and key"],openssl_dh_compute_key:["string openssl_dh_compute_key(string pub_key, resource dh_key)","Computes shared sicret for public value of remote DH key and local DH key"],openssl_digest:["string openssl_digest(string data, string method [, bool raw_output=false])","Computes digest hash value for given data using given method, returns raw or binhex encoded string"],openssl_encrypt:["string openssl_encrypt(string data, string method, string password [, bool raw_output=false])","Encrypts given data with given method and key, returns raw or base64 encoded string"],openssl_error_string:["mixed openssl_error_string(void)","Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages"],openssl_get_cipher_methods:["array openssl_get_cipher_methods([bool aliases = false])","Return array of available cipher methods"],openssl_get_md_methods:["array openssl_get_md_methods([bool aliases = false])","Return array of available digest methods"],openssl_open:["bool openssl_open(string data, &string opendata, string ekey, mixed privkey)","Opens data"],openssl_pkcs12_export:["bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])","Creates and exports a PKCS12 to a var"],openssl_pkcs12_export_to_file:["bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])","Creates and exports a PKCS to file"],openssl_pkcs12_read:["bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)","Parses a PKCS12 to an array"],openssl_pkcs7_decrypt:["bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])","Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename. recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key"],openssl_pkcs7_encrypt:["bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])","Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile"],openssl_pkcs7_sign:["bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])","Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum"],openssl_pkcs7_verify:["bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])","Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers"],openssl_pkey_export:["bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])","Gets an exportable representation of a key into a string or file"],openssl_pkey_export_to_file:["bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)","Gets an exportable representation of a key into a file"],openssl_pkey_free:["void openssl_pkey_free(int key)","Frees a key"],openssl_pkey_get_details:["resource openssl_pkey_get_details(resource key)","returns an array with the key details (bits, pkey, type)"],openssl_pkey_get_private:["int openssl_pkey_get_private(string key [, string passphrase])","Gets private keys"],openssl_pkey_get_public:["int openssl_pkey_get_public(mixed cert)","Gets public key from X.509 certificate"],openssl_pkey_new:["resource openssl_pkey_new([array configargs])","Generates a new private key"],openssl_private_decrypt:["bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])","Decrypts data with private key"],openssl_private_encrypt:["bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])","Encrypts data with private key"],openssl_public_decrypt:["bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])","Decrypts data with public key"],openssl_public_encrypt:["bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])","Encrypts data with public key"],openssl_random_pseudo_bytes:["string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])","Returns a string of the length specified filled with random pseudo bytes"],openssl_seal:["int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)","Seals data"],openssl_sign:["bool openssl_sign(string data, &string signature, mixed key[, mixed method])","Signs data"],openssl_verify:["int openssl_verify(string data, string signature, mixed key[, mixed method])","Verifys data"],openssl_x509_check_private_key:["bool openssl_x509_check_private_key(mixed cert, mixed key)","Checks if a private key corresponds to a CERT"],openssl_x509_checkpurpose:["int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])","Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs"],openssl_x509_export:["bool openssl_x509_export(mixed x509, string &out [, bool notext = true])","Exports a CERT to file or a var"],openssl_x509_export_to_file:["bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])","Exports a CERT to file or a var"],openssl_x509_free:["void openssl_x509_free(resource x509)","Frees X.509 certificates"],openssl_x509_parse:["array openssl_x509_parse(mixed x509 [, bool shortnames=true])","Returns an array of the fields/values of the CERT"],openssl_x509_read:["resource openssl_x509_read(mixed cert)","Reads X.509 certificates"],ord:["int ord(string character)","Returns ASCII value of character"],output_add_rewrite_var:["bool output_add_rewrite_var(string name, string value)","Add URL rewriter values"],output_reset_rewrite_vars:["bool output_reset_rewrite_vars(void)","Reset(clear) URL rewriter values"],pack:["string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])","Takes one or more arguments and packs them into a binary string according to the format argument"],parse_ini_file:["array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])","Parse configuration file"],parse_ini_string:["array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])","Parse configuration string"],parse_locale:["static array parse_locale($locale)","* parses a locale-id into an array the different parts of it"],parse_str:["void parse_str(string encoded_string [, array result])","Parses GET/POST/COOKIE data and sets global variables"],parse_url:["mixed parse_url(string url, [int url_component])","Parse a URL and return its components"],passthru:["void passthru(string command [, int &return_value])","Execute an external program and display raw output"],pathinfo:["array pathinfo(string path[, int options])","Returns information about a certain string"],pclose:["int pclose(resource fp)","Close a file pointer opened by popen()"],pcnlt_sigwaitinfo:["int pcnlt_sigwaitinfo(array set[, array &siginfo])","Synchronously wait for queued signals"],pcntl_alarm:["int pcntl_alarm(int seconds)","Set an alarm clock for delivery of a signal"],pcntl_exec:["bool pcntl_exec(string path [, array args [, array envs]])","Executes specified program in current process space as defined by exec(2)"],pcntl_fork:["int pcntl_fork(void)","Forks the currently running process following the same behavior as the UNIX fork() system call"],pcntl_getpriority:["int pcntl_getpriority([int pid [, int process_identifier]])","Get the priority of any process"],pcntl_setpriority:["bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])","Change the priority of any process"],pcntl_signal:["bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])","Assigns a system signal handler to a PHP function"],pcntl_signal_dispatch:["bool pcntl_signal_dispatch()","Dispatch signals to signal handlers"],pcntl_sigprocmask:["bool pcntl_sigprocmask(int how, array set[, array &oldset])","Examine and change blocked signals"],pcntl_sigtimedwait:["int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])","Wait for queued signals"],pcntl_wait:["int pcntl_wait(int &status)","Waits on or returns the status of a forked child as defined by the waitpid() system call"],pcntl_waitpid:["int pcntl_waitpid(int pid, int &status, int options)","Waits on or returns the status of a forked child as defined by the waitpid() system call"],pcntl_wexitstatus:["int pcntl_wexitstatus(int status)","Returns the status code of a child's exit"],pcntl_wifexited:["bool pcntl_wifexited(int status)","Returns true if the child status code represents a successful exit"],pcntl_wifsignaled:["bool pcntl_wifsignaled(int status)","Returns true if the child status code represents a process that was terminated due to a signal"],pcntl_wifstopped:["bool pcntl_wifstopped(int status)","Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)"],pcntl_wstopsig:["int pcntl_wstopsig(int status)","Returns the number of the signal that caused the process to stop who's status code is passed"],pcntl_wtermsig:["int pcntl_wtermsig(int status)","Returns the number of the signal that terminated the process who's status code is passed"],pdo_drivers:["array pdo_drivers()","Return array of available PDO drivers"],pfsockopen:["resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])","Open persistent Internet or Unix domain socket connection"],pg_affected_rows:["int pg_affected_rows(resource result)","Returns the number of affected tuples"],pg_cancel_query:["bool pg_cancel_query(resource connection)","Cancel request"],pg_client_encoding:["string pg_client_encoding([resource connection])","Get the current client encoding"],pg_close:["bool pg_close([resource connection])","Close a PostgreSQL connection"],pg_connect:["resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)","Open a PostgreSQL connection"],pg_connection_busy:["bool pg_connection_busy(resource connection)","Get connection is busy or not"],pg_connection_reset:["bool pg_connection_reset(resource connection)","Reset connection (reconnect)"],pg_connection_status:["int pg_connection_status(resource connnection)","Get connection status"],pg_convert:["array pg_convert(resource db, string table, array values[, int options])","Check and convert values for PostgreSQL SQL statement"],pg_copy_from:["bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])","Copy table from array"],pg_copy_to:["array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])","Copy table to array"],pg_dbname:["string pg_dbname([resource connection])","Get the database name"],pg_delete:["mixed pg_delete(resource db, string table, array ids[, int options])","Delete records has ids (id=>value)"],pg_end_copy:["bool pg_end_copy([resource connection])","Sync with backend. Completes the Copy command"],pg_escape_bytea:["string pg_escape_bytea([resource connection,] string data)","Escape binary for bytea type"],pg_escape_string:["string pg_escape_string([resource connection,] string data)","Escape string for text/char type"],pg_execute:["resource pg_execute([resource connection,] string stmtname, array params)","Execute a prepared query"],pg_fetch_all:["array pg_fetch_all(resource result)","Fetch all rows into array"],pg_fetch_all_columns:["array pg_fetch_all_columns(resource result [, int column_number])","Fetch all rows into array"],pg_fetch_array:["array pg_fetch_array(resource result [, int row [, int result_type]])","Fetch a row as an array"],pg_fetch_assoc:["array pg_fetch_assoc(resource result [, int row])","Fetch a row as an assoc array"],pg_fetch_object:["object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])","Fetch a row as an object"],pg_fetch_result:["mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)","Returns values from a result identifier"],pg_fetch_row:["array pg_fetch_row(resource result [, int row [, int result_type]])","Get a row as an enumerated array"],pg_field_is_null:["int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)","Test if a field is NULL"],pg_field_name:["string pg_field_name(resource result, int field_number)","Returns the name of the field"],pg_field_num:["int pg_field_num(resource result, string field_name)","Returns the field number of the named field"],pg_field_prtlen:["int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)","Returns the printed length"],pg_field_size:["int pg_field_size(resource result, int field_number)","Returns the internal size of the field"],pg_field_table:["mixed pg_field_table(resource result, int field_number[, bool oid_only])","Returns the name of the table field belongs to, or table's oid if oid_only is true"],pg_field_type:["string pg_field_type(resource result, int field_number)","Returns the type name for the given field"],pg_field_type_oid:["string pg_field_type_oid(resource result, int field_number)","Returns the type oid for the given field"],pg_free_result:["bool pg_free_result(resource result)","Free result memory"],pg_get_notify:["array pg_get_notify([resource connection[, result_type]])","Get asynchronous notification"],pg_get_pid:["int pg_get_pid([resource connection)","Get backend(server) pid"],pg_get_result:["resource pg_get_result(resource connection)","Get asynchronous query result"],pg_host:["string pg_host([resource connection])","Returns the host name associated with the connection"],pg_insert:["mixed pg_insert(resource db, string table, array values[, int options])","Insert values (filed=>value) to table"],pg_last_error:["string pg_last_error([resource connection])","Get the error message string"],pg_last_notice:["string pg_last_notice(resource connection)","Returns the last notice set by the backend"],pg_last_oid:["string pg_last_oid(resource result)","Returns the last object identifier"],pg_lo_close:["bool pg_lo_close(resource large_object)","Close a large object"],pg_lo_create:["mixed pg_lo_create([resource connection],[mixed large_object_oid])","Create a large object"],pg_lo_export:["bool pg_lo_export([resource connection, ] int objoid, string filename)","Export large object direct to filesystem"],pg_lo_import:["int pg_lo_import([resource connection, ] string filename [, mixed oid])","Import large object direct from filesystem"],pg_lo_open:["resource pg_lo_open([resource connection,] int large_object_oid, string mode)","Open a large object and return fd"],pg_lo_read:["string pg_lo_read(resource large_object [, int len])","Read a large object"],pg_lo_read_all:["int pg_lo_read_all(resource large_object)","Read a large object and send straight to browser"],pg_lo_seek:["bool pg_lo_seek(resource large_object, int offset [, int whence])","Seeks position of large object"],pg_lo_tell:["int pg_lo_tell(resource large_object)","Returns current position of large object"],pg_lo_unlink:["bool pg_lo_unlink([resource connection,] string large_object_oid)","Delete a large object"],pg_lo_write:["int pg_lo_write(resource large_object, string buf [, int len])","Write a large object"],pg_meta_data:["array pg_meta_data(resource db, string table)","Get meta_data"],pg_num_fields:["int pg_num_fields(resource result)","Return the number of fields in the result"],pg_num_rows:["int pg_num_rows(resource result)","Return the number of rows in the result"],pg_options:["string pg_options([resource connection])","Get the options associated with the connection"],pg_parameter_status:["string|false pg_parameter_status([resource connection,] string param_name)","Returns the value of a server parameter"],pg_pconnect:["resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)","Open a persistent PostgreSQL connection"],pg_ping:["bool pg_ping([resource connection])","Ping database. If connection is bad, try to reconnect."],pg_port:["int pg_port([resource connection])","Return the port number associated with the connection"],pg_prepare:["resource pg_prepare([resource connection,] string stmtname, string query)","Prepare a query for future execution"],pg_put_line:["bool pg_put_line([resource connection,] string query)","Send null-terminated string to backend server"],pg_query:["resource pg_query([resource connection,] string query)","Execute a query"],pg_query_params:["resource pg_query_params([resource connection,] string query, array params)","Execute a query"],pg_result_error:["string pg_result_error(resource result)","Get error message associated with result"],pg_result_error_field:["string pg_result_error_field(resource result, int fieldcode)","Get error message field associated with result"],pg_result_seek:["bool pg_result_seek(resource result, int offset)","Set internal row offset"],pg_result_status:["mixed pg_result_status(resource result[, long result_type])","Get status of query result"],pg_select:["mixed pg_select(resource db, string table, array ids[, int options])","Select records that has ids (id=>value)"],pg_send_execute:["bool pg_send_execute(resource connection, string stmtname, array params)","Executes prevriously prepared stmtname asynchronously"],pg_send_prepare:["bool pg_send_prepare(resource connection, string stmtname, string query)","Asynchronously prepare a query for future execution"],pg_send_query:["bool pg_send_query(resource connection, string query)","Send asynchronous query"],pg_send_query_params:["bool pg_send_query_params(resource connection, string query, array params)","Send asynchronous parameterized query"],pg_set_client_encoding:["int pg_set_client_encoding([resource connection,] string encoding)","Set client encoding"],pg_set_error_verbosity:["int pg_set_error_verbosity([resource connection,] int verbosity)","Set error verbosity"],pg_trace:["bool pg_trace(string filename [, string mode [, resource connection]])","Enable tracing a PostgreSQL connection"],pg_transaction_status:["int pg_transaction_status(resource connnection)","Get transaction status"],pg_tty:["string pg_tty([resource connection])","Return the tty name associated with the connection"],pg_unescape_bytea:["string pg_unescape_bytea(string data)","Unescape binary for bytea type"],pg_untrace:["bool pg_untrace([resource connection])","Disable tracing of a PostgreSQL connection"],pg_update:["mixed pg_update(resource db, string table, array fields, array ids[, int options])","Update table using values (field=>value) and ids (id=>value)"],pg_version:["array pg_version([resource connection])","Returns an array with client, protocol and server version (when available)"],php_egg_logo_guid:["string php_egg_logo_guid(void)","Return the special ID used to request the PHP logo in phpinfo screens"],php_ini_loaded_file:["string php_ini_loaded_file(void)","Return the actual loaded ini filename"],php_ini_scanned_files:["string php_ini_scanned_files(void)","Return comma-separated string of .ini files parsed from the additional ini dir"],php_logo_guid:["string php_logo_guid(void)","Return the special ID used to request the PHP logo in phpinfo screens"],php_real_logo_guid:["string php_real_logo_guid(void)","Return the special ID used to request the PHP logo in phpinfo screens"],php_sapi_name:["string php_sapi_name(void)","Return the current SAPI module name"],php_snmpv3:["void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)","* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK snmp3_walk() - walk the mib and return a single dimensional array * containing the values. * st=SNMP_CMD_REALWALK snmp3_real_walk() - walk the mib and return an * array of oid,value pairs. * st=SNMP_CMD_SET snmp3_set() - query an agent and set a single value *"],php_strip_whitespace:["string php_strip_whitespace(string file_name)","Return source with stripped comments and whitespace"],php_uname:["string php_uname(void)","Return information about the system PHP was built on"],phpcredits:["void phpcredits([int flag])","Prints the list of people who've contributed to the PHP project"],phpinfo:["void phpinfo([int what])","Output a page of useful information about PHP and the current request"],phpversion:["string phpversion([string extension])","Return the current PHP version"],pi:["float pi(void)","Returns an approximation of pi"],png2wbmp:["bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)","Convert PNG image to WBMP image"],popen:["resource popen(string command, string mode)","Execute a command and open either a read or a write pipe to it"],posix_access:["bool posix_access(string file [, int mode])","Determine accessibility of a file (POSIX.1 5.6.3)"],posix_ctermid:["string posix_ctermid(void)","Generate terminal path name (POSIX.1, 4.7.1)"],posix_get_last_error:["int posix_get_last_error(void)","Retrieve the error number set by the last posix function which failed."],posix_getcwd:["string posix_getcwd(void)","Get working directory pathname (POSIX.1, 5.2.2)"],posix_getegid:["int posix_getegid(void)","Get the current effective group id (POSIX.1, 4.2.1)"],posix_geteuid:["int posix_geteuid(void)","Get the current effective user id (POSIX.1, 4.2.1)"],posix_getgid:["int posix_getgid(void)","Get the current group id (POSIX.1, 4.2.1)"],posix_getgrgid:["array posix_getgrgid(long gid)","Group database access (POSIX.1, 9.2.1)"],posix_getgrnam:["array posix_getgrnam(string groupname)","Group database access (POSIX.1, 9.2.1)"],posix_getgroups:["array posix_getgroups(void)","Get supplementary group id's (POSIX.1, 4.2.3)"],posix_getlogin:["string posix_getlogin(void)","Get user name (POSIX.1, 4.2.4)"],posix_getpgid:["int posix_getpgid(void)","Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)"],posix_getpgrp:["int posix_getpgrp(void)","Get current process group id (POSIX.1, 4.3.1)"],posix_getpid:["int posix_getpid(void)","Get the current process id (POSIX.1, 4.1.1)"],posix_getppid:["int posix_getppid(void)","Get the parent process id (POSIX.1, 4.1.1)"],posix_getpwnam:["array posix_getpwnam(string groupname)","User database access (POSIX.1, 9.2.2)"],posix_getpwuid:["array posix_getpwuid(long uid)","User database access (POSIX.1, 9.2.2)"],posix_getrlimit:["array posix_getrlimit(void)","Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)"],posix_getsid:["int posix_getsid(void)","Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)"],posix_getuid:["int posix_getuid(void)","Get the current user id (POSIX.1, 4.2.1)"],posix_initgroups:["bool posix_initgroups(string name, int base_group_id)","Calculate the group access list for the user specified in name."],posix_isatty:["bool posix_isatty(int fd)","Determine if filedesc is a tty (POSIX.1, 4.7.1)"],posix_kill:["bool posix_kill(int pid, int sig)","Send a signal to a process (POSIX.1, 3.3.2)"],posix_mkfifo:["bool posix_mkfifo(string pathname, int mode)","Make a FIFO special file (POSIX.1, 5.4.2)"],posix_mknod:["bool posix_mknod(string pathname, int mode [, int major [, int minor]])","Make a special or ordinary file (POSIX.1)"],posix_setegid:["bool posix_setegid(long uid)","Set effective group id"],posix_seteuid:["bool posix_seteuid(long uid)","Set effective user id"],posix_setgid:["bool posix_setgid(int uid)","Set group id (POSIX.1, 4.2.2)"],posix_setpgid:["bool posix_setpgid(int pid, int pgid)","Set process group id for job control (POSIX.1, 4.3.3)"],posix_setsid:["int posix_setsid(void)","Create session and set process group id (POSIX.1, 4.3.2)"],posix_setuid:["bool posix_setuid(long uid)","Set user id (POSIX.1, 4.2.2)"],posix_strerror:["string posix_strerror(int errno)","Retrieve the system error message associated with the given errno."],posix_times:["array posix_times(void)","Get process times (POSIX.1, 4.5.2)"],posix_ttyname:["string posix_ttyname(int fd)","Determine terminal device name (POSIX.1, 4.7.2)"],posix_uname:["array posix_uname(void)","Get system name (POSIX.1, 4.4.1)"],pow:["number pow(number base, number exponent)","Returns base raised to the power of exponent. Returns integer result when possible"],preg_filter:["mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])","Perform Perl-style regular expression replacement and only return matches."],preg_grep:["array preg_grep(string regex, array input [, int flags])","Searches array and returns entries which match regex"],preg_last_error:["int preg_last_error()","Returns the error code of the last regexp execution."],preg_match:["int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])","Perform a Perl-style regular expression match"],preg_match_all:["int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])","Perform a Perl-style global regular expression match"],preg_quote:["string preg_quote(string str [, string delim_char])","Quote regular expression characters plus an optional character"],preg_replace:["mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])","Perform Perl-style regular expression replacement."],preg_replace_callback:["mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])","Perform Perl-style regular expression replacement using replacement callback."],preg_split:["array preg_split(string pattern, string subject [, int limit [, int flags]])","Split string into an array using a perl-style regular expression as a delimiter"],prev:["mixed prev(array array_arg)","Move array argument's internal pointer to the previous element and return it"],print:["int print(string arg)","Output a string"],print_r:["mixed print_r(mixed var [, bool return])","Prints out or returns information about the specified variable"],printf:["int printf(string format [, mixed arg1 [, mixed ...]])","Output a formatted string"],proc_close:["int proc_close(resource process)","close a process opened by proc_open"],proc_get_status:["array proc_get_status(resource process)","get information about a process opened by proc_open"],proc_nice:["bool proc_nice(int priority)","Change the priority of the current process"],proc_open:["resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])","Run a process with more control over it's file descriptors"],proc_terminate:["bool proc_terminate(resource process [, long signal])","kill a process opened by proc_open"],property_exists:["bool property_exists(mixed object_or_class, string property_name)","Checks if the object or class has a property"],pspell_add_to_personal:["bool pspell_add_to_personal(int pspell, string word)","Adds a word to a personal list"],pspell_add_to_session:["bool pspell_add_to_session(int pspell, string word)","Adds a word to the current session"],pspell_check:["bool pspell_check(int pspell, string word)","Returns true if word is valid"],pspell_clear_session:["bool pspell_clear_session(int pspell)","Clears the current session"],pspell_config_create:["int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])","Create a new config to be used later to create a manager"],pspell_config_data_dir:["bool pspell_config_data_dir(int conf, string directory)","location of language data files"],pspell_config_dict_dir:["bool pspell_config_dict_dir(int conf, string directory)","location of the main word list"],pspell_config_ignore:["bool pspell_config_ignore(int conf, int ignore)","Ignore words <= n chars"],pspell_config_mode:["bool pspell_config_mode(int conf, long mode)","Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)"],pspell_config_personal:["bool pspell_config_personal(int conf, string personal)","Use a personal dictionary for this config"],pspell_config_repl:["bool pspell_config_repl(int conf, string repl)","Use a personal dictionary with replacement pairs for this config"],pspell_config_runtogether:["bool pspell_config_runtogether(int conf, bool runtogether)","Consider run-together words as valid components"],pspell_config_save_repl:["bool pspell_config_save_repl(int conf, bool save)","Save replacement pairs when personal list is saved for this config"],pspell_new:["int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])","Load a dictionary"],pspell_new_config:["int pspell_new_config(int config)","Load a dictionary based on the given config"],pspell_new_personal:["int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])","Load a dictionary with a personal wordlist"],pspell_save_wordlist:["bool pspell_save_wordlist(int pspell)","Saves the current (personal) wordlist"],pspell_store_replacement:["bool pspell_store_replacement(int pspell, string misspell, string correct)","Notify the dictionary of a user-selected replacement"],pspell_suggest:["array pspell_suggest(int pspell, string word)","Returns array of suggestions"],putenv:["bool putenv(string setting)","Set the value of an environment variable"],quoted_printable_decode:["string quoted_printable_decode(string str)","Convert a quoted-printable string to an 8 bit string"],quoted_printable_encode:["string quoted_printable_encode(string str) */",'PHP_FUNCTION(quoted_printable_encode) { char *str, *new_str; int str_len; size_t new_str_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) != SUCCESS) { return; } if (!str_len) { RETURN_EMPTY_STRING(); } new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len); RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}'],quotemeta:["string quotemeta(string str)","Quotes meta characters"],rad2deg:["float rad2deg(float number)","Converts the radian number to the equivalent number in degrees"],rand:["int rand([int min, int max])","Returns a random number"],range:["array range(mixed low, mixed high[, int step])","Create an array containing the range of integers or characters from low to high (inclusive)"],rawurldecode:["string rawurldecode(string str)","Decodes URL-encodes string"],rawurlencode:["string rawurlencode(string str)","URL-encodes string"],readdir:["string readdir([resource dir_handle])","Read directory entry from dir_handle"],readfile:["int readfile(string filename [, bool use_include_path[, resource context]])","Output a file or a URL"],readgzfile:["int readgzfile(string filename [, int use_include_path])","Output a .gz-file"],readline:["string readline([string prompt])","Reads a line"],readline_add_history:["bool readline_add_history(string prompt)","Adds a line to the history"],readline_callback_handler_install:["void readline_callback_handler_install(string prompt, mixed callback)","Initializes the readline callback interface and terminal, prints the prompt and returns immediately"],readline_callback_handler_remove:["bool readline_callback_handler_remove()","Removes a previously installed callback handler and restores terminal settings"],readline_callback_read_char:["void readline_callback_read_char()","Informs the readline callback interface that a character is ready for input"],readline_clear_history:["bool readline_clear_history(void)","Clears the history"],readline_completion_function:["bool readline_completion_function(string funcname)","Readline completion function?"],readline_info:["mixed readline_info([string varname [, string newvalue]])","Gets/sets various internal readline variables."],readline_list_history:["array readline_list_history(void)","Lists the history"],readline_on_new_line:["void readline_on_new_line(void)","Inform readline that the cursor has moved to a new line"],readline_read_history:["bool readline_read_history([string filename])","Reads the history"],readline_redisplay:["void readline_redisplay(void)","Ask readline to redraw the display"],readline_write_history:["bool readline_write_history([string filename])","Writes the history"],readlink:["string readlink(string filename)","Return the target of a symbolic link"],realpath:["string realpath(string path)","Return the resolved path"],realpath_cache_get:["bool realpath_cache_get()","Get current size of realpath cache"],realpath_cache_size:["bool realpath_cache_size()","Get current size of realpath cache"],recode_file:["bool recode_file(string request, resource input, resource output)","Recode file input into file output according to request"],recode_string:["string recode_string(string request, string str)","Recode string str according to request string"],register_shutdown_function:["void register_shutdown_function(string function_name)","Register a user-level function to be called on request termination"],register_tick_function:["bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])","Registers a tick callback function"],rename:["bool rename(string old_name, string new_name[, resource context])","Rename a file"],require:["bool require(string path)","Includes and evaluates the specified file, erroring if the file cannot be included"],require_once:["bool require_once(string path)","Includes and evaluates the specified file, erroring if the file cannot be included"],reset:["mixed reset(array array_arg)","Set array argument's internal pointer to the first element and return it"],restore_error_handler:["void restore_error_handler(void)","Restores the previously defined error handler function"],restore_exception_handler:["void restore_exception_handler(void)","Restores the previously defined exception handler function"],restore_include_path:["void restore_include_path()","Restore the value of the include_path configuration option"],rewind:["bool rewind(resource fp)","Rewind the position of a file pointer"],rewinddir:["void rewinddir([resource dir_handle])","Rewind dir_handle back to the start"],rmdir:["bool rmdir(string dirname[, resource context])","Remove a directory"],round:["float round(float number [, int precision [, int mode]])","Returns the number rounded to specified precision"],rsort:["bool rsort(array &array_arg [, int sort_flags])","Sort an array in reverse order"],rtrim:["string rtrim(string str [, string character_mask])","Removes trailing whitespace"],scandir:["array scandir(string dir [, int sorting_order [, resource context]])","List files & directories inside the specified path"],sem_acquire:["bool sem_acquire(resource id)","Acquires the semaphore with the given id, blocking if necessary"],sem_get:["resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])","Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously"],sem_release:["bool sem_release(resource id)","Releases the semaphore with the given id"],sem_remove:["bool sem_remove(resource id)","Removes semaphore from Unix systems"],serialize:["string serialize(mixed variable)","Returns a string representation of variable (which can later be unserialized)"],session_cache_expire:["int session_cache_expire([int new_cache_expire])","Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire"],session_cache_limiter:["string session_cache_limiter([string new_cache_limiter])","Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter"],session_decode:["bool session_decode(string data)","Deserializes data and reinitializes the variables"],session_destroy:["bool session_destroy(void)","Destroy the current session and all data associated with it"],session_encode:["string session_encode(void)","Serializes the current setup and returns the serialized representation"],session_get_cookie_params:["array session_get_cookie_params(void)","Return the session cookie parameters"],session_id:["string session_id([string newid])","Return the current session id. If newid is given, the session id is replaced with newid"],session_is_registered:["bool session_is_registered(string varname)","Checks if a variable is registered in session"],session_module_name:["string session_module_name([string newname])","Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname"],session_name:["string session_name([string newname])","Return the current session name. If newname is given, the session name is replaced with newname"],session_regenerate_id:["bool session_regenerate_id([bool delete_old_session])","Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session."],session_register:["bool session_register(mixed var_names [, mixed ...])","Adds varname(s) to the list of variables which are freezed at the session end"],session_save_path:["string session_save_path([string newname])","Return the current save path passed to module_name. If newname is given, the save path is replaced with newname"],session_set_cookie_params:["void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])","Set session cookie parameters"],session_set_save_handler:["void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)","Sets user-level functions"],session_start:["bool session_start(void)","Begin session - reinitializes freezed variables, registers browsers etc"],session_unregister:["bool session_unregister(string varname)","Removes varname from the list of variables which are freezed at the session end"],session_unset:["void session_unset(void)","Unset all registered variables"],session_write_close:["void session_write_close(void)","Write session data and end session"],set_error_handler:["string set_error_handler(string error_handler [, int error_types])","Sets a user-defined error handler function. Returns the previously defined error handler, or false on error"],set_exception_handler:["string set_exception_handler(callable exception_handler)","Sets a user-defined exception handler function. Returns the previously defined exception handler, or false on error"],set_include_path:["string set_include_path(string new_include_path)","Sets the include_path configuration option"],set_magic_quotes_runtime:["bool set_magic_quotes_runtime(int new_setting)","Set the current active configuration setting of magic_quotes_runtime and return previous"],set_time_limit:["bool set_time_limit(int seconds)","Sets the maximum time a script can run"],setcookie:["bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])","Send a cookie"],setlocale:["string setlocale(mixed category, string locale [, string ...])","Set locale information"],setrawcookie:["bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])","Send a cookie with no url encoding of the value"],settype:["bool settype(mixed var, string type)","Set the type of the variable"],sha1:["string sha1(string str [, bool raw_output])","Calculate the sha1 hash of a string"],sha1_file:["string sha1_file(string filename [, bool raw_output])","Calculate the sha1 hash of given filename"],shell_exec:["string shell_exec(string cmd)","Execute command via shell and return complete output as string"],shm_attach:["int shm_attach(int key [, int memsize [, int perm]])","Creates or open a shared memory segment"],shm_detach:["bool shm_detach(resource shm_identifier)","Disconnects from shared memory segment"],shm_get_var:["mixed shm_get_var(resource id, int variable_key)","Returns a variable from shared memory"],shm_has_var:["bool shm_has_var(resource id, int variable_key)","Checks whether a specific entry exists"],shm_put_var:["bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)","Inserts or updates a variable in shared memory"],shm_remove:["bool shm_remove(resource shm_identifier)","Removes shared memory from Unix systems"],shm_remove_var:["bool shm_remove_var(resource id, int variable_key)","Removes variable from shared memory"],shmop_close:["void shmop_close (int shmid)","closes a shared memory segment"],shmop_delete:["bool shmop_delete (int shmid)","mark segment for deletion"],shmop_open:["int shmop_open (int key, string flags, int mode, int size)","gets and attaches a shared memory segment"],shmop_read:["string shmop_read (int shmid, int start, int count)","reads from a shm segment"],shmop_size:["int shmop_size (int shmid)","returns the shm size"],shmop_write:["int shmop_write (int shmid, string data, int offset)","writes to a shared memory segment"],shuffle:["bool shuffle(array array_arg)","Randomly shuffle the contents of an array"],similar_text:["int similar_text(string str1, string str2 [, float percent])","Calculates the similarity between two strings"],simplexml_import_dom:["simplemxml_element simplexml_import_dom(domNode node [, string class_name])","Get a simplexml_element object from dom to allow for processing"],simplexml_load_file:["simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])","Load a filename and return a simplexml_element object to allow for processing"],simplexml_load_string:["simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])","Load a string and return a simplexml_element object to allow for processing"],sin:["float sin(float number)","Returns the sine of the number in radians"],sinh:["float sinh(float number)","Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2"],sleep:["void sleep(int seconds)","Delay for a given number of seconds"],smfi_addheader:["bool smfi_addheader(string headerf, string headerv)","Adds a header to the current message."],smfi_addrcpt:["bool smfi_addrcpt(string rcpt)","Add a recipient to the message envelope."],smfi_chgheader:["bool smfi_chgheader(string headerf, string headerv)","Changes a header's value for the current message."],smfi_delrcpt:["bool smfi_delrcpt(string rcpt)","Removes the named recipient from the current message's envelope."],smfi_getsymval:["string smfi_getsymval(string macro)","Returns the value of the given macro or NULL if the macro is not defined."],smfi_replacebody:["bool smfi_replacebody(string body)","Replaces the body of the current message. If called more than once, subsequent calls result in data being appended to the new body."],smfi_setflags:["void smfi_setflags(long flags)","Sets the flags describing the actions the filter may take."],smfi_setreply:["bool smfi_setreply(string rcode, string xcode, string message)","Directly set the SMTP error reply code for this connection. This code will be used on subsequent error replies resulting from actions taken by this filter."],smfi_settimeout:["void smfi_settimeout(long timeout)","Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket."],snmp2_get:["string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])","Fetch a SNMP object"],snmp2_getnext:["string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])","Fetch a SNMP object"],snmp2_real_walk:["array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])","Return all objects including their respective object id withing the specified one"],snmp2_set:["int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])","Set the value of a SNMP object"],snmp2_walk:["array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])","Return all objects under the specified object id"],snmp3_get:["int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp3_getnext:["int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp3_real_walk:["int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp3_set:["int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp3_walk:["int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp_get_quick_print:["bool snmp_get_quick_print(void)","Return the current status of quick_print"],snmp_get_valueretrieval:["int snmp_get_valueretrieval()","Return the method how the SNMP values will be returned"],snmp_read_mib:["int snmp_read_mib(string filename)","Reads and parses a MIB file into the active MIB tree."],snmp_set_enum_print:["void snmp_set_enum_print(int enum_print)","Return all values that are enums with their enum value instead of the raw integer"],snmp_set_oid_output_format:["void snmp_set_oid_output_format(int oid_format)","Set the OID output format."],snmp_set_quick_print:["void snmp_set_quick_print(int quick_print)","Return all objects including their respective object id withing the specified one"],snmp_set_valueretrieval:["void snmp_set_valueretrieval(int method)","Specify the method how the SNMP values will be returned"],snmpget:["string snmpget(string host, string community, string object_id [, int timeout [, int retries]])","Fetch a SNMP object"],snmpgetnext:["string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])","Fetch a SNMP object"],snmprealwalk:["array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])","Return all objects including their respective object id withing the specified one"],snmpset:["int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])","Set the value of a SNMP object"],snmpwalk:["array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])","Return all objects under the specified object id"],socket_accept:["resource socket_accept(resource socket)","Accepts a connection on the listening socket fd"],socket_bind:["bool socket_bind(resource socket, string addr [, int port])","Binds an open socket to a listening port, port is only specified in AF_INET family."],socket_clear_error:["void socket_clear_error([resource socket])","Clears the error on the socket or the last error code."],socket_close:["void socket_close(resource socket)","Closes a file descriptor"],socket_connect:["bool socket_connect(resource socket, string addr [, int port])","Opens a connection to addr:port on the socket specified by socket"],socket_create:["resource socket_create(int domain, int type, int protocol)","Creates an endpoint for communication in the domain specified by domain, of type specified by type"],socket_create_listen:["resource socket_create_listen(int port[, int backlog])","Opens a socket on port to accept connections"],socket_create_pair:["bool socket_create_pair(int domain, int type, int protocol, array &fd)","Creates a pair of indistinguishable sockets and stores them in fds."],socket_get_option:["mixed socket_get_option(resource socket, int level, int optname)","Gets socket options for the socket"],socket_getpeername:["bool socket_getpeername(resource socket, string &addr[, int &port])","Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type."],socket_getsockname:["bool socket_getsockname(resource socket, string &addr[, int &port])","Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type."],socket_last_error:["int socket_last_error([resource socket])","Returns the last socket error (either the last used or the provided socket resource)"],socket_listen:["bool socket_listen(resource socket[, int backlog])","Sets the maximum number of connections allowed to be waited for on the socket specified by fd"],socket_read:["string socket_read(resource socket, int length [, int type])","Reads a maximum of length bytes from socket"],socket_recv:["int socket_recv(resource socket, string &buf, int len, int flags)","Receives data from a connected socket"],socket_recvfrom:["int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])","Receives data from a socket, connected or not"],socket_select:["int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])","Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec"],socket_send:["int socket_send(resource socket, string buf, int len, int flags)","Sends data to a connected socket"],socket_sendto:["int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])","Sends a message to a socket, whether it is connected or not"],socket_set_block:["bool socket_set_block(resource socket)","Sets blocking mode on a socket resource"],socket_set_nonblock:["bool socket_set_nonblock(resource socket)","Sets nonblocking mode on a socket resource"],socket_set_option:["bool socket_set_option(resource socket, int level, int optname, int|array optval)","Sets socket options for the socket"],socket_shutdown:["bool socket_shutdown(resource socket[, int how])","Shuts down a socket for receiving, sending, or both."],socket_strerror:["string socket_strerror(int errno)","Returns a string describing an error"],socket_write:["int socket_write(resource socket, string buf[, int length])","Writes the buffer to the socket resource, length is optional"],solid_fetch_prev:["bool solid_fetch_prev(resource result_id)",""],sort:["bool sort(array &array_arg [, int sort_flags])","Sort an array"],soundex:["string soundex(string str)","Calculate the soundex key of a string"],spl_autoload:["void spl_autoload(string class_name [, string file_extensions])","Default implementation for __autoload()"],spl_autoload_call:["void spl_autoload_call(string class_name)","Try all registerd autoload function to load the requested class"],spl_autoload_extensions:["string spl_autoload_extensions([string file_extensions])","Register and return default file extensions for spl_autoload"],spl_autoload_functions:["false|array spl_autoload_functions()","Return all registered __autoload() functionns"],spl_autoload_register:['bool spl_autoload_register([mixed autoload_function = "spl_autoload" [, throw = true [, prepend]]])',"Register given function as __autoload() implementation"],spl_autoload_unregister:["bool spl_autoload_unregister(mixed autoload_function)","Unregister given function as __autoload() implementation"],spl_classes:["array spl_classes()","Return an array containing the names of all clsses and interfaces defined in SPL"],spl_object_hash:["string spl_object_hash(object obj)","Return hash id for given object"],split:["array split(string pattern, string string [, int limit])","Split string into array by regular expression"],spliti:["array spliti(string pattern, string string [, int limit])","Split string into array by regular expression case-insensitive"],sprintf:["string sprintf(string format [, mixed arg1 [, mixed ...]])","Return a formatted string"],sql_regcase:["string sql_regcase(string string)","Make regular expression for case insensitive match"],sqlite_array_query:["array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])","Executes a query against a given database and returns an array of arrays."],sqlite_busy_timeout:["void sqlite_busy_timeout(resource db, int ms)","Set busy timeout duration. If ms <= 0, all busy handlers are disabled."],sqlite_changes:["int sqlite_changes(resource db)","Returns the number of rows that were changed by the most recent SQL statement."],sqlite_close:["void sqlite_close(resource db)","Closes an open sqlite database."],sqlite_column:["mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])","Fetches a column from the current row of a result set."],sqlite_create_aggregate:["bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])","Registers an aggregate function for queries."],sqlite_create_function:["bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])",'Registers a "regular" function for queries.'],sqlite_current:["array sqlite_current(resource result [, int result_type [, bool decode_binary]])","Fetches the current row from a result set as an array."],sqlite_error_string:["string sqlite_error_string(int error_code)","Returns the textual description of an error code."],sqlite_escape_string:["string sqlite_escape_string(string item)","Escapes a string for use as a query parameter."],sqlite_exec:["boolean sqlite_exec(string query, resource db[, string &error_message])","Executes a result-less query against a given database"],sqlite_factory:["object sqlite_factory(string filename [, int mode [, string &error_message]])","Opens a SQLite database and creates an object for it. Will create the database if it does not exist."],sqlite_fetch_all:["array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])","Fetches all rows from a result set as an array of arrays."],sqlite_fetch_array:["array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])","Fetches the next row from a result set as an array."],sqlite_fetch_column_types:["resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])","Return an array of column types from a particular table."],sqlite_fetch_object:["object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])","Fetches the next row from a result set as an object."],sqlite_fetch_single:["string sqlite_fetch_single(resource result [, bool decode_binary])","Fetches the first column of a result set as a string."],sqlite_field_name:["string sqlite_field_name(resource result, int field_index)","Returns the name of a particular field of a result set."],sqlite_has_prev:["bool sqlite_has_prev(resource result)","* Returns whether a previous row is available."],sqlite_key:["int sqlite_key(resource result)","Return the current row index of a buffered result."],sqlite_last_error:["int sqlite_last_error(resource db)","Returns the error code of the last error for a database."],sqlite_last_insert_rowid:["int sqlite_last_insert_rowid(resource db)","Returns the rowid of the most recently inserted row."],sqlite_libencoding:["string sqlite_libencoding()","Returns the encoding (iso8859 or UTF-8) of the linked SQLite library."],sqlite_libversion:["string sqlite_libversion()","Returns the version of the linked SQLite library."],sqlite_next:["bool sqlite_next(resource result)","Seek to the next row number of a result set."],sqlite_num_fields:["int sqlite_num_fields(resource result)","Returns the number of fields in a result set."],sqlite_num_rows:["int sqlite_num_rows(resource result)","Returns the number of rows in a buffered result set."],sqlite_open:["resource sqlite_open(string filename [, int mode [, string &error_message]])","Opens a SQLite database. Will create the database if it does not exist."],sqlite_popen:["resource sqlite_popen(string filename [, int mode [, string &error_message]])","Opens a persistent handle to a SQLite database. Will create the database if it does not exist."],sqlite_prev:["bool sqlite_prev(resource result)","* Seek to the previous row number of a result set."],sqlite_query:["resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])","Executes a query against a given database and returns a result handle."],sqlite_rewind:["bool sqlite_rewind(resource result)","Seek to the first row number of a buffered result set."],sqlite_seek:["bool sqlite_seek(resource result, int row)","Seek to a particular row number of a buffered result set."],sqlite_single_query:["array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])","Executes a query and returns either an array for one single column or the value of the first row."],sqlite_udf_decode_binary:["string sqlite_udf_decode_binary(string data)","Decode binary encoding on a string parameter passed to an UDF."],sqlite_udf_encode_binary:["string sqlite_udf_encode_binary(string data)","Apply binary encoding (if required) to a string to return from an UDF."],sqlite_unbuffered_query:["resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])","Executes a query that does not prefetch and buffer all data."],sqlite_valid:["bool sqlite_valid(resource result)","Returns whether more rows are available."],sqrt:["float sqrt(float number)","Returns the square root of the number"],srand:["void srand([int seed])","Seeds random number generator"],sscanf:["mixed sscanf(string str, string format [, string ...])","Implements an ANSI C compatible sscanf"],stat:["array stat(string filename)","Give information about a file"],str_getcsv:["array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])","Parse a CSV string into an array"],str_ireplace:["mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])","Replaces all occurrences of search in haystack with replace / case-insensitive"],str_pad:["string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])","Returns input string padded on the left or right to specified length with pad_string"],str_repeat:["string str_repeat(string input, int mult)","Returns the input string repeat mult times"],str_replace:["mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])","Replaces all occurrences of search in haystack with replace"],str_rot13:["string str_rot13(string str)","Perform the rot13 transform on a string"],str_shuffle:["void str_shuffle(string str)","Shuffles string. One permutation of all possible is created"],str_split:["array str_split(string str [, int split_length])","Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long."],str_word_count:["mixed str_word_count(string str, [int format [, string charlist]])",'Counts the number of words inside a string. If format of 1 is specified, then the function will return an array containing all the words found inside the string. If format of 2 is specified, then the function will return an associated array where the position of the word is the key and the word itself is the value. For the purpose of this function, \'word\' is defined as a locale dependent string containing alphabetic characters, which also may contain, but not start with "\'" and "-" characters.'],strcasecmp:["int strcasecmp(string str1, string str2)","Binary safe case-insensitive string comparison"],strchr:["string strchr(string haystack, string needle)","An alias for strstr"],strcmp:["int strcmp(string str1, string str2)","Binary safe string comparison"],strcoll:["int strcoll(string str1, string str2)","Compares two strings using the current locale"],strcspn:["int strcspn(string str, string mask [, start [, len]])","Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)"],stream_bucket_append:["void stream_bucket_append(resource brigade, resource bucket)","Append bucket to brigade"],stream_bucket_make_writeable:["object stream_bucket_make_writeable(resource brigade)","Return a bucket object from the brigade for operating on"],stream_bucket_new:["resource stream_bucket_new(resource stream, string buffer)","Create a new bucket for use on the current stream"],stream_bucket_prepend:["void stream_bucket_prepend(resource brigade, resource bucket)","Prepend bucket to brigade"],stream_context_create:["resource stream_context_create([array options[, array params]])","Create a file context and optionally set parameters"],stream_context_get_default:["resource stream_context_get_default([array options])","Get a handle on the default file/stream context and optionally set parameters"],stream_context_get_options:["array stream_context_get_options(resource context|resource stream)","Retrieve options for a stream/wrapper/context"],stream_context_get_params:["array stream_context_get_params(resource context|resource stream)","Get parameters of a file context"],stream_context_set_default:["resource stream_context_set_default(array options)","Set default file/stream context, returns the context as a resource"],stream_context_set_option:["bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)","Set an option for a wrapper"],stream_context_set_params:["bool stream_context_set_params(resource context|resource stream, array options)","Set parameters for a file context"],stream_copy_to_stream:["long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])","Reads up to maxlen bytes from source stream and writes them to dest stream."],stream_filter_append:["resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])","Append a filter to a stream"],stream_filter_prepend:["resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])","Prepend a filter to a stream"],stream_filter_register:["bool stream_filter_register(string filtername, string classname)","Registers a custom filter handler class"],stream_filter_remove:["bool stream_filter_remove(resource stream_filter)","Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource"],stream_get_contents:["string stream_get_contents(resource source [, long maxlen [, long offset]])","Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string."],stream_get_filters:["array stream_get_filters(void)","Returns a list of registered filters"],stream_get_line:["string stream_get_line(resource stream, int maxlen [, string ending])","Read up to maxlen bytes from a stream or until the ending string is found"],stream_get_meta_data:["array stream_get_meta_data(resource fp)","Retrieves header/meta data from streams/file pointers"],stream_get_transports:["array stream_get_transports()","Retrieves list of registered socket transports"],stream_get_wrappers:["array stream_get_wrappers()","Retrieves list of registered stream wrappers"],stream_is_local:["bool stream_is_local(resource stream|string url)",""],stream_resolve_include_path:["string stream_resolve_include_path(string filename)","Determine what file will be opened by calls to fopen() with a relative path"],stream_select:["int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])","Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec"],stream_set_blocking:["bool stream_set_blocking(resource socket, int mode)","Set blocking/non-blocking mode on a socket or stream"],stream_set_timeout:["bool stream_set_timeout(resource stream, int seconds [, int microseconds])","Set timeout on stream read to seconds + microseonds"],stream_set_write_buffer:["int stream_set_write_buffer(resource fp, int buffer)","Set file write buffer"],stream_socket_accept:["resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])","Accept a client connection from a server socket"],stream_socket_client:["resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])","Open a client connection to a remote address"],stream_socket_enable_crypto:["int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])","Enable or disable a specific kind of crypto on the stream"],stream_socket_get_name:["string stream_socket_get_name(resource stream, bool want_peer)","Returns either the locally bound or remote name for a socket stream"],stream_socket_pair:["array stream_socket_pair(int domain, int type, int protocol)","Creates a pair of connected, indistinguishable socket streams"],stream_socket_recvfrom:["string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])","Receives data from a socket stream"],stream_socket_sendto:["long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])","Send data to a socket stream. If target_addr is specified it must be in dotted quad (or [ipv6]) format"],stream_socket_server:["resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])","Create a server socket bound to localaddress"],stream_socket_shutdown:["int stream_socket_shutdown(resource stream, int how)","causes all or part of a full-duplex connection on the socket associated with stream to be shut down. If how is SHUT_RD, further receptions will be disallowed. If how is SHUT_WR, further transmissions will be disallowed. If how is SHUT_RDWR, further receptions and transmissions will be disallowed."],stream_supports_lock:["bool stream_supports_lock(resource stream)","Tells whether the stream supports locking through flock()."],stream_wrapper_register:["bool stream_wrapper_register(string protocol, string classname[, integer flags])","Registers a custom URL protocol handler class"],stream_wrapper_restore:["bool stream_wrapper_restore(string protocol)","Restore the original protocol handler, overriding if necessary"],stream_wrapper_unregister:["bool stream_wrapper_unregister(string protocol)","Unregister a wrapper for the life of the current request."],strftime:["string strftime(string format [, int timestamp])","Format a local time/date according to locale settings"],strip_tags:["string strip_tags(string str [, string allowable_tags])","Strips HTML and PHP tags from a string"],stripcslashes:["string stripcslashes(string str)","Strips backslashes from a string. Uses C-style conventions"],stripos:["int stripos(string haystack, string needle [, int offset])","Finds position of first occurrence of a string within another, case insensitive"],stripslashes:["string stripslashes(string str)","Strips backslashes from a string"],stristr:["string stristr(string haystack, string needle[, bool part])","Finds first occurrence of a string within another, case insensitive"],strlen:["int strlen(string str)","Get string length"],strnatcasecmp:["int strnatcasecmp(string s1, string s2)","Returns the result of case-insensitive string comparison using 'natural' algorithm"],strnatcmp:["int strnatcmp(string s1, string s2)","Returns the result of string comparison using 'natural' algorithm"],strncasecmp:["int strncasecmp(string str1, string str2, int len)","Binary safe string comparison"],strncmp:["int strncmp(string str1, string str2, int len)","Binary safe string comparison"],strpbrk:["array strpbrk(string haystack, string char_list)","Search a string for any of a set of characters"],strpos:["int strpos(string haystack, string needle [, int offset])","Finds position of first occurrence of a string within another"],strptime:["string strptime(string timestamp, string format)","Parse a time/date generated with strftime()"],strrchr:["string strrchr(string haystack, string needle)","Finds the last occurrence of a character in a string within another"],strrev:["string strrev(string str)","Reverse a string"],strripos:["int strripos(string haystack, string needle [, int offset])","Finds position of last occurrence of a string within another string"],strrpos:["int strrpos(string haystack, string needle [, int offset])","Finds position of last occurrence of a string within another string"],strspn:["int strspn(string str, string mask [, start [, len]])","Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)"],strstr:["string strstr(string haystack, string needle[, bool part])","Finds first occurrence of a string within another"],strtok:["string strtok([string str,] string token)","Tokenize a string"],strtolower:["string strtolower(string str)","Makes a string lowercase"],strtotime:["int strtotime(string time [, int now ])","Convert string representation of date and time to a timestamp"],strtoupper:["string strtoupper(string str)","Makes a string uppercase"],strtr:["string strtr(string str, string from[, string to])","Translates characters in str using given translation tables"],strval:["string strval(mixed var)","Get the string value of a variable"],substr:["string substr(string str, int start [, int length])","Returns part of a string"],substr_compare:["int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])","Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters"],substr_count:["int substr_count(string haystack, string needle [, int offset [, int length]])","Returns the number of times a substring occurs in the string"],substr_replace:["mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])","Replaces part of a string with another string"],sybase_affected_rows:["int sybase_affected_rows([resource link_id])","Get number of affected rows in last query"],sybase_close:["bool sybase_close([resource link_id])","Close Sybase connection"],sybase_connect:["int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])","Open Sybase server connection"],sybase_data_seek:["bool sybase_data_seek(resource result, int offset)","Move internal row pointer"],sybase_deadlock_retry_count:["void sybase_deadlock_retry_count(int retry_count)","Sets deadlock retry count"],sybase_fetch_array:["array sybase_fetch_array(resource result)","Fetch row as array"],sybase_fetch_assoc:["array sybase_fetch_assoc(resource result)","Fetch row as array without numberic indices"],sybase_fetch_field:["object sybase_fetch_field(resource result [, int offset])","Get field information"],sybase_fetch_object:["object sybase_fetch_object(resource result [, mixed object])","Fetch row as object"],sybase_fetch_row:["array sybase_fetch_row(resource result)","Get row as enumerated array"],sybase_field_seek:["bool sybase_field_seek(resource result, int offset)","Set field offset"],sybase_free_result:["bool sybase_free_result(resource result)","Free result memory"],sybase_get_last_message:["string sybase_get_last_message(void)","Returns the last message from server (over min_message_severity)"],sybase_min_client_severity:["void sybase_min_client_severity(int severity)","Sets minimum client severity"],sybase_min_server_severity:["void sybase_min_server_severity(int severity)","Sets minimum server severity"],sybase_num_fields:["int sybase_num_fields(resource result)","Get number of fields in result"],sybase_num_rows:["int sybase_num_rows(resource result)","Get number of rows in result"],sybase_pconnect:["int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])","Open persistent Sybase connection"],sybase_query:["int sybase_query(string query [, resource link_id])","Send Sybase query"],sybase_result:["string sybase_result(resource result, int row, mixed field)","Get result data"],sybase_select_db:["bool sybase_select_db(string database [, resource link_id])","Select Sybase database"],sybase_set_message_handler:["bool sybase_set_message_handler(mixed error_func [, resource connection])","Set the error handler, to be called when a server message is raised. If error_func is NULL the handler will be deleted"],sybase_unbuffered_query:["int sybase_unbuffered_query(string query [, resource link_id])","Send Sybase query"],symlink:["int symlink(string target, string link)","Create a symbolic link"],sys_get_temp_dir:["string sys_get_temp_dir()","Returns directory path used for temporary files"],sys_getloadavg:["array sys_getloadavg()",""],syslog:["bool syslog(int priority, string message)","Generate a system log message"],system:["int system(string command [, int &return_value])","Execute an external program and display output"],tan:["float tan(float number)","Returns the tangent of the number in radians"],tanh:["float tanh(float number)","Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)"],tempnam:["string tempnam(string dir, string prefix)","Create a unique filename in a directory"],textdomain:["string textdomain(string domain)",'Set the textdomain to "domain". Returns the current domain'],tidy_access_count:["int tidy_access_count()","Returns the Number of Tidy accessibility warnings encountered for specified document."],tidy_clean_repair:["boolean tidy_clean_repair()","Execute configured cleanup and repair operations on parsed markup"],tidy_config_count:["int tidy_config_count()","Returns the Number of Tidy configuration errors encountered for specified document."],tidy_diagnose:["boolean tidy_diagnose()","Run configured diagnostics on parsed and repaired markup."],tidy_error_count:["int tidy_error_count()","Returns the Number of Tidy errors encountered for specified document."],tidy_get_body:["TidyNode tidy_get_body(resource tidy)","Returns a TidyNode Object starting from the tag of the tidy parse tree"],tidy_get_config:["array tidy_get_config()","Get current Tidy configuarion"],tidy_get_error_buffer:["string tidy_get_error_buffer([boolean detailed])","Return warnings and errors which occured parsing the specified document"],tidy_get_head:["TidyNode tidy_get_head()","Returns a TidyNode Object starting from the tag of the tidy parse tree"],tidy_get_html:["TidyNode tidy_get_html()","Returns a TidyNode Object starting from the tag of the tidy parse tree"],tidy_get_html_ver:["int tidy_get_html_ver()","Get the Detected HTML version for the specified document."],tidy_get_opt_doc:["string tidy_get_opt_doc(tidy resource, string optname)","Returns the documentation for the given option name"],tidy_get_output:["string tidy_get_output()","Return a string representing the parsed tidy markup"],tidy_get_release:["string tidy_get_release()","Get release date (version) for Tidy library"],tidy_get_root:["TidyNode tidy_get_root()","Returns a TidyNode Object representing the root of the tidy parse tree"],tidy_get_status:["int tidy_get_status()","Get status of specfied document."],tidy_getopt:["mixed tidy_getopt(string option)","Returns the value of the specified configuration option for the tidy document."],tidy_is_xhtml:["boolean tidy_is_xhtml()","Indicates if the document is a XHTML document."],tidy_is_xml:["boolean tidy_is_xml()","Indicates if the document is a generic (non HTML/XHTML) XML document."],tidy_parse_file:["boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])","Parse markup in file or URI"],tidy_parse_string:["bool tidy_parse_string(string input [, mixed config_options [, string encoding]])","Parse a document stored in a string"],tidy_repair_file:["boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])","Repair a file using an optionally provided configuration file"],tidy_repair_string:["boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])","Repair a string using an optionally provided configuration file"],tidy_warning_count:["int tidy_warning_count()","Returns the Number of Tidy warnings encountered for specified document."],time:["int time(void)","Return current UNIX timestamp"],time_nanosleep:["mixed time_nanosleep(long seconds, long nanoseconds)","Delay for a number of seconds and nano seconds"],time_sleep_until:["mixed time_sleep_until(float timestamp)","Make the script sleep until the specified time"],timezone_abbreviations_list:["array timezone_abbreviations_list()","Returns associative array containing dst, offset and the timezone name"],timezone_identifiers_list:["array timezone_identifiers_list([long what[, string country]])","Returns numerically index array with all timezone identifiers."],timezone_location_get:["array timezone_location_get()","Returns location information for a timezone, including country code, latitude/longitude and comments"],timezone_name_from_abbr:["string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])","Returns the timezone name from abbrevation"],timezone_name_get:["string timezone_name_get(DateTimeZone object)","Returns the name of the timezone."],timezone_offset_get:["long timezone_offset_get(DateTimeZone object, DateTime object)","Returns the timezone offset."],timezone_open:["DateTimeZone timezone_open(string timezone)","Returns new DateTimeZone object"],timezone_transitions_get:["array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])","Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone."],timezone_version_get:["array timezone_version_get()","Returns the Olson database version number."],tmpfile:["resource tmpfile(void)","Create a temporary file that will be deleted automatically after use"],token_get_all:["array token_get_all(string source)",""],token_name:["string token_name(int type)",""],touch:["bool touch(string filename [, int time [, int atime]])","Set modification time of file"],trigger_error:["void trigger_error(string messsage [, int error_type])","Generates a user-level error/warning/notice message"],trim:["string trim(string str [, string character_mask])","Strips whitespace from the beginning and end of a string"],uasort:["bool uasort(array array_arg, string cmp_function)","Sort an array with a user-defined comparison function and maintain index association"],ucfirst:["string ucfirst(string str)","Make a string's first character lowercase"],ucwords:["string ucwords(string str)","Uppercase the first character of every word in a string"],uksort:["bool uksort(array array_arg, string cmp_function)","Sort an array by keys using a user-defined comparison function"],umask:["int umask([int mask])","Return or change the umask"],uniqid:["string uniqid([string prefix [, bool more_entropy]])","Generates a unique ID"],unixtojd:["int unixtojd([int timestamp])","Convert UNIX timestamp to Julian Day"],unlink:["bool unlink(string filename[, context context])","Delete a file"],unpack:["array unpack(string format, string input)","Unpack binary string into named array elements according to format argument"],unregister_tick_function:["void unregister_tick_function(string function_name)","Unregisters a tick callback function"],unserialize:["mixed unserialize(string variable_representation)","Takes a string representation of variable and recreates it"],unset:["void unset (mixed var [, mixed var])","Unset a given variable"],urldecode:["string urldecode(string str)","Decodes URL-encoded string"],urlencode:["string urlencode(string str)","URL-encodes string"],usleep:["void usleep(int micro_seconds)","Delay for a given number of micro seconds"],usort:["bool usort(array array_arg, string cmp_function)","Sort an array by values using a user-defined comparison function"],utf8_decode:["string utf8_decode(string data)","Converts a UTF-8 encoded string to ISO-8859-1"],utf8_encode:["string utf8_encode(string data)","Encodes an ISO-8859-1 string to UTF-8"],var_dump:["void var_dump(mixed var)","Dumps a string representation of variable to output"],var_export:["mixed var_export(mixed var [, bool return])","Outputs or returns a string representation of a variable"],variant_abs:["mixed variant_abs(mixed left)","Returns the absolute value of a variant"],variant_add:["mixed variant_add(mixed left, mixed right)",'"Adds" two variant values together and returns the result'],variant_and:["mixed variant_and(mixed left, mixed right)","performs a bitwise AND operation between two variants and returns the result"],variant_cast:["object variant_cast(object variant, int type)","Convert a variant into a new variant object of another type"],variant_cat:["mixed variant_cat(mixed left, mixed right)","concatenates two variant values together and returns the result"],variant_cmp:["int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])","Compares two variants"],variant_date_from_timestamp:["object variant_date_from_timestamp(int timestamp)","Returns a variant date representation of a unix timestamp"],variant_date_to_timestamp:["int variant_date_to_timestamp(object variant)","Converts a variant date/time value to unix timestamp"],variant_div:["mixed variant_div(mixed left, mixed right)","Returns the result from dividing two variants"],variant_eqv:["mixed variant_eqv(mixed left, mixed right)","Performs a bitwise equivalence on two variants"],variant_fix:["mixed variant_fix(mixed left)","Returns the integer part ? of a variant"],variant_get_type:["int variant_get_type(object variant)","Returns the VT_XXX type code for a variant"],variant_idiv:["mixed variant_idiv(mixed left, mixed right)","Converts variants to integers and then returns the result from dividing them"],variant_imp:["mixed variant_imp(mixed left, mixed right)","Performs a bitwise implication on two variants"],variant_int:["mixed variant_int(mixed left)","Returns the integer portion of a variant"],variant_mod:["mixed variant_mod(mixed left, mixed right)","Divides two variants and returns only the remainder"],variant_mul:["mixed variant_mul(mixed left, mixed right)","multiplies the values of the two variants and returns the result"],variant_neg:["mixed variant_neg(mixed left)","Performs logical negation on a variant"],variant_not:["mixed variant_not(mixed left)","Performs bitwise not negation on a variant"],variant_or:["mixed variant_or(mixed left, mixed right)","Performs a logical disjunction on two variants"],variant_pow:["mixed variant_pow(mixed left, mixed right)","Returns the result of performing the power function with two variants"],variant_round:["mixed variant_round(mixed left, int decimals)","Rounds a variant to the specified number of decimal places"],variant_set:["void variant_set(object variant, mixed value)","Assigns a new value for a variant object"],variant_set_type:["void variant_set_type(object variant, int type)",'Convert a variant into another type. Variant is modified "in-place"'],variant_sub:["mixed variant_sub(mixed left, mixed right)","subtracts the value of the right variant from the left variant value and returns the result"],variant_xor:["mixed variant_xor(mixed left, mixed right)","Performs a logical exclusion on two variants"],version_compare:["int version_compare(string ver1, string ver2 [, string oper])",'Compares two "PHP-standardized" version number strings'],vfprintf:["int vfprintf(resource stream, string format, array args)","Output a formatted string into a stream"],virtual:["bool virtual(string filename)","Perform an Apache sub-request"],vprintf:["int vprintf(string format, array args)","Output a formatted string"],vsprintf:["string vsprintf(string format, array args)","Return a formatted string"],wddx_add_vars:["int wddx_add_vars(resource packet_id, mixed var_names [, mixed ...])","Serializes given variables and adds them to packet given by packet_id"],wddx_deserialize:["mixed wddx_deserialize(mixed packet)","Deserializes given packet and returns a PHP value"],wddx_packet_end:["string wddx_packet_end(resource packet_id)","Ends specified WDDX packet and returns the string containing the packet"],wddx_packet_start:["resource wddx_packet_start([string comment])","Starts a WDDX packet with optional comment and returns the packet id"],wddx_serialize_value:["string wddx_serialize_value(mixed var [, string comment])","Creates a new packet and serializes the given value"],wddx_serialize_vars:["string wddx_serialize_vars(mixed var_name [, mixed ...])","Creates a new packet and serializes given variables into a struct"],wordwrap:["string wordwrap(string str [, int width [, string break [, boolean cut]]])","Wraps buffer to selected number of characters using string break char"],xml_error_string:["string xml_error_string(int code)","Get XML parser error string"],xml_get_current_byte_index:["int xml_get_current_byte_index(resource parser)","Get current byte index for an XML parser"],xml_get_current_column_number:["int xml_get_current_column_number(resource parser)","Get current column number for an XML parser"],xml_get_current_line_number:["int xml_get_current_line_number(resource parser)","Get current line number for an XML parser"],xml_get_error_code:["int xml_get_error_code(resource parser)","Get XML parser error code"],xml_parse:["int xml_parse(resource parser, string data [, int isFinal])","Start parsing an XML document"],xml_parse_into_struct:["int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])","Parsing a XML document"],xml_parser_create:["resource xml_parser_create([string encoding])","Create an XML parser"],xml_parser_create_ns:["resource xml_parser_create_ns([string encoding [, string sep]])","Create an XML parser"],xml_parser_free:["int xml_parser_free(resource parser)","Free an XML parser"],xml_parser_get_option:["int xml_parser_get_option(resource parser, int option)","Get options from an XML parser"],xml_parser_set_option:["int xml_parser_set_option(resource parser, int option, mixed value)","Set options in an XML parser"],xml_set_character_data_handler:["int xml_set_character_data_handler(resource parser, string hdl)","Set up character data handler"],xml_set_default_handler:["int xml_set_default_handler(resource parser, string hdl)","Set up default handler"],xml_set_element_handler:["int xml_set_element_handler(resource parser, string shdl, string ehdl)","Set up start and end element handlers"],xml_set_end_namespace_decl_handler:["int xml_set_end_namespace_decl_handler(resource parser, string hdl)","Set up character data handler"],xml_set_external_entity_ref_handler:["int xml_set_external_entity_ref_handler(resource parser, string hdl)","Set up external entity reference handler"],xml_set_notation_decl_handler:["int xml_set_notation_decl_handler(resource parser, string hdl)","Set up notation declaration handler"],xml_set_object:["int xml_set_object(resource parser, object &obj)","Set up object which should be used for callbacks"],xml_set_processing_instruction_handler:["int xml_set_processing_instruction_handler(resource parser, string hdl)","Set up processing instruction (PI) handler"],xml_set_start_namespace_decl_handler:["int xml_set_start_namespace_decl_handler(resource parser, string hdl)","Set up character data handler"],xml_set_unparsed_entity_decl_handler:["int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)","Set up unparsed entity declaration handler"],xmlrpc_decode:["array xmlrpc_decode(string xml [, string encoding])","Decodes XML into native PHP types"],xmlrpc_decode_request:["array xmlrpc_decode_request(string xml, string& method [, string encoding])","Decodes XML into native PHP types"],xmlrpc_encode:["string xmlrpc_encode(mixed value)","Generates XML for a PHP value"],xmlrpc_encode_request:["string xmlrpc_encode_request(string method, mixed params [, array output_options])","Generates XML for a method request"],xmlrpc_get_type:["string xmlrpc_get_type(mixed value)","Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings"],xmlrpc_is_fault:["bool xmlrpc_is_fault(array)","Determines if an array value represents an XMLRPC fault."],xmlrpc_parse_method_descriptions:["array xmlrpc_parse_method_descriptions(string xml)","Decodes XML into a list of method descriptions"],xmlrpc_server_add_introspection_data:["int xmlrpc_server_add_introspection_data(resource server, array desc)","Adds introspection documentation"],xmlrpc_server_call_method:["mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])","Parses XML requests and call methods"],xmlrpc_server_create:["resource xmlrpc_server_create(void)","Creates an xmlrpc server"],xmlrpc_server_destroy:["int xmlrpc_server_destroy(resource server)","Destroys server resources"],xmlrpc_server_register_introspection_callback:["bool xmlrpc_server_register_introspection_callback(resource server, string function)","Register a PHP function to generate documentation"],xmlrpc_server_register_method:["bool xmlrpc_server_register_method(resource server, string method_name, string function)","Register a PHP function to handle method matching method_name"],xmlrpc_set_type:["bool xmlrpc_set_type(string value, string type)","Sets xmlrpc type, base64 or datetime, for a PHP string value"],xmlwriter_end_attribute:["bool xmlwriter_end_attribute(resource xmlwriter)","End attribute - returns FALSE on error"],xmlwriter_end_cdata:["bool xmlwriter_end_cdata(resource xmlwriter)","End current CDATA - returns FALSE on error"],xmlwriter_end_comment:["bool xmlwriter_end_comment(resource xmlwriter)","Create end comment - returns FALSE on error"],xmlwriter_end_document:["bool xmlwriter_end_document(resource xmlwriter)","End current document - returns FALSE on error"],xmlwriter_end_dtd:["bool xmlwriter_end_dtd(resource xmlwriter)","End current DTD - returns FALSE on error"],xmlwriter_end_dtd_attlist:["bool xmlwriter_end_dtd_attlist(resource xmlwriter)","End current DTD AttList - returns FALSE on error"],xmlwriter_end_dtd_element:["bool xmlwriter_end_dtd_element(resource xmlwriter)","End current DTD element - returns FALSE on error"],xmlwriter_end_dtd_entity:["bool xmlwriter_end_dtd_entity(resource xmlwriter)","End current DTD Entity - returns FALSE on error"],xmlwriter_end_element:["bool xmlwriter_end_element(resource xmlwriter)","End current element - returns FALSE on error"],xmlwriter_end_pi:["bool xmlwriter_end_pi(resource xmlwriter)","End current PI - returns FALSE on error"],xmlwriter_flush:["mixed xmlwriter_flush(resource xmlwriter [,bool empty])","Output current buffer"],xmlwriter_full_end_element:["bool xmlwriter_full_end_element(resource xmlwriter)","End current element - returns FALSE on error"],xmlwriter_open_memory:["resource xmlwriter_open_memory()","Create new xmlwriter using memory for string output"],xmlwriter_open_uri:["resource xmlwriter_open_uri(resource xmlwriter, string source)","Create new xmlwriter using source uri for output"],xmlwriter_output_memory:["string xmlwriter_output_memory(resource xmlwriter [,bool flush])","Output current buffer as string"],xmlwriter_set_indent:["bool xmlwriter_set_indent(resource xmlwriter, bool indent)","Toggle indentation on/off - returns FALSE on error"],xmlwriter_set_indent_string:["bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)","Set string used for indenting - returns FALSE on error"],xmlwriter_start_attribute:["bool xmlwriter_start_attribute(resource xmlwriter, string name)","Create start attribute - returns FALSE on error"],xmlwriter_start_attribute_ns:["bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)","Create start namespaced attribute - returns FALSE on error"],xmlwriter_start_cdata:["bool xmlwriter_start_cdata(resource xmlwriter)","Create start CDATA tag - returns FALSE on error"],xmlwriter_start_comment:["bool xmlwriter_start_comment(resource xmlwriter)","Create start comment - returns FALSE on error"],xmlwriter_start_document:["bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)","Create document tag - returns FALSE on error"],xmlwriter_start_dtd:["bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)","Create start DTD tag - returns FALSE on error"],xmlwriter_start_dtd_attlist:["bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)","Create start DTD AttList - returns FALSE on error"],xmlwriter_start_dtd_element:["bool xmlwriter_start_dtd_element(resource xmlwriter, string name)","Create start DTD element - returns FALSE on error"],xmlwriter_start_dtd_entity:["bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)","Create start DTD Entity - returns FALSE on error"],xmlwriter_start_element:["bool xmlwriter_start_element(resource xmlwriter, string name)","Create start element tag - returns FALSE on error"],xmlwriter_start_element_ns:["bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)","Create start namespaced element tag - returns FALSE on error"],xmlwriter_start_pi:["bool xmlwriter_start_pi(resource xmlwriter, string target)","Create start PI tag - returns FALSE on error"],xmlwriter_text:["bool xmlwriter_text(resource xmlwriter, string content)","Write text - returns FALSE on error"],xmlwriter_write_attribute:["bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)","Write full attribute - returns FALSE on error"],xmlwriter_write_attribute_ns:["bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)","Write full namespaced attribute - returns FALSE on error"],xmlwriter_write_cdata:["bool xmlwriter_write_cdata(resource xmlwriter, string content)","Write full CDATA tag - returns FALSE on error"],xmlwriter_write_comment:["bool xmlwriter_write_comment(resource xmlwriter, string content)","Write full comment tag - returns FALSE on error"],xmlwriter_write_dtd:["bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)","Write full DTD tag - returns FALSE on error"],xmlwriter_write_dtd_attlist:["bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)","Write full DTD AttList tag - returns FALSE on error"],xmlwriter_write_dtd_element:["bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)","Write full DTD element tag - returns FALSE on error"],xmlwriter_write_dtd_entity:["bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])","Write full DTD Entity tag - returns FALSE on error"],xmlwriter_write_element:["bool xmlwriter_write_element(resource xmlwriter, string name[, string content])","Write full element tag - returns FALSE on error"],xmlwriter_write_element_ns:["bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])","Write full namesapced element tag - returns FALSE on error"],xmlwriter_write_pi:["bool xmlwriter_write_pi(resource xmlwriter, string target, string content)","Write full PI tag - returns FALSE on error"],xmlwriter_write_raw:["bool xmlwriter_write_raw(resource xmlwriter, string content)","Write text - returns FALSE on error"],xsl_xsltprocessor_get_parameter:["string xsl_xsltprocessor_get_parameter(string namespace, string name);",""],xsl_xsltprocessor_has_exslt_support:["bool xsl_xsltprocessor_has_exslt_support();",""],xsl_xsltprocessor_import_stylesheet:["void xsl_xsltprocessor_import_stylesheet(domdocument doc);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:"],xsl_xsltprocessor_register_php_functions:["void xsl_xsltprocessor_register_php_functions([mixed $restrict]);",""],xsl_xsltprocessor_remove_parameter:["bool xsl_xsltprocessor_remove_parameter(string namespace, string name);",""],xsl_xsltprocessor_set_parameter:["bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);",""],xsl_xsltprocessor_set_profiling:["bool xsl_xsltprocessor_set_profiling(string filename) */",'PHP_FUNCTION(xsl_xsltprocessor_set_profiling) { zval *id; xsl_object *intern; char *filename = NULL; int filename_len; DOM_GET_THIS(id); if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s!", &filename, &filename_len) == SUCCESS) { intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC); if (intern->profiling) { efree(intern->profiling); } if (filename != NULL) { intern->profiling = estrndup(filename,filename_len); } else { intern->profiling = NULL; } RETURN_TRUE; } else { WRONG_PARAM_COUNT; } } /* }}} end xsl_xsltprocessor_set_profiling'],xsl_xsltprocessor_transform_to_doc:["domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:"],xsl_xsltprocessor_transform_to_uri:["int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);",""],xsl_xsltprocessor_transform_to_xml:["string xsl_xsltprocessor_transform_to_xml(domdocument doc);",""],zend_logo_guid:["string zend_logo_guid(void)","Return the special ID used to request the Zend logo in phpinfo screens"],zend_version:["string zend_version(void)","Get the version of the Zend Engine"],zip_close:["void zip_close(resource zip)","Close a Zip archive"],zip_entry_close:["void zip_entry_close(resource zip_ent)","Close a zip entry"],zip_entry_compressedsize:["int zip_entry_compressedsize(resource zip_entry)","Return the compressed size of a ZZip entry"],zip_entry_compressionmethod:["string zip_entry_compressionmethod(resource zip_entry)","Return a string containing the compression method used on a particular entry"],zip_entry_filesize:["int zip_entry_filesize(resource zip_entry)","Return the actual filesize of a ZZip entry"],zip_entry_name:["string zip_entry_name(resource zip_entry)","Return the name given a ZZip entry"],zip_entry_open:["bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])","Open a Zip File, pointed by the resource entry"],zip_entry_read:["mixed zip_entry_read(resource zip_entry [, int len])","Read from an open directory entry"],zip_open:["resource zip_open(string filename)","Create new zip using source uri for output"],zip_read:["resource zip_read(resource zip)","Returns the next file in the archive"],zlib_get_coding_type:["string zlib_get_coding_type(void)","Returns the coding type used for output compression"]},i={$_COOKIE:{type:"array"},$_ENV:{type:"array"},$_FILES:{type:"array"},$_GET:{type:"array"},$_POST:{type:"array"},$_REQUEST:{type:"array"},$_SERVER:{type:"array",value:{DOCUMENT_ROOT:1,GATEWAY_INTERFACE:1,HTTP_ACCEPT:1,HTTP_ACCEPT_CHARSET:1,HTTP_ACCEPT_ENCODING:1,HTTP_ACCEPT_LANGUAGE:1,HTTP_CONNECTION:1,HTTP_HOST:1,HTTP_REFERER:1,HTTP_USER_AGENT:1,PATH_TRANSLATED:1,PHP_SELF:1,QUERY_STRING:1,REMOTE_ADDR:1,REMOTE_PORT:1,REQUEST_METHOD:1,REQUEST_URI:1,SCRIPT_FILENAME:1,SCRIPT_NAME:1,SERVER_ADMIN:1,SERVER_NAME:1,SERVER_PORT:1,SERVER_PROTOCOL:1,SERVER_SIGNATURE:1,SERVER_SOFTWARE:1}},$_SESSION:{type:"array"},$GLOBALS:{type:"array"}},o=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(i.type==="support.php_tag"&&i.value==="0){var o=t.getTokenAt(n.row,i.start);if(o.type==="support.php_tag")return this.getTagCompletions(e,t,n,r)}return this.getFunctionCompletions(e,t,n,r)}if(s(i,"variable"))return this.getVariableCompletions(e,t,n,r);var u=t.getLine(n.row).substr(0,n.column);return i.type==="string"&&/(\$[\w]*)\[["']([^'"]*)$/i.test(u)?this.getArrayKeyCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return[{caption:"php",value:"php",meta:"php tag",score:1e6},{caption:"=",value:"=",meta:"php tag",score:1e6}]},this.getFunctionCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+"($0)",meta:"php function",score:1e6,docHTML:r[e][1]}})},this.getVariableCompletions=function(e,t,n,r){var s=Object.keys(i);return s.map(function(e){return{caption:e,value:e,meta:"php variable",score:1e6}})},this.getArrayKeyCompletions=function(e,t,n,r){var s=t.getLine(n.row).substr(0,n.column),o=s.match(/(\$[\w]*)\[["']([^'"]*)$/i)[1];if(!i[o])return[];var u=[];return i[o].type==="array"&&i[o].value&&(u=Object.keys(i[o].value)),u.map(function(e){return{caption:e,value:e,meta:"php array key",score:1e6}})}}).call(o.prototype),t.PhpCompletions=o}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$quotes={'"':'"',"'":"'","`":"`"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(l.prototype),t.Mode=l}),define("ace/mode/css_completions",["require","exports","module"],function(e,t,n){"use strict";var r={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,"double":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{"default":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},"float":{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,"static":1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e){if(typeof e[t]!="string")continue;var n=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e==="ruleset"||t.$mode.$id=="ace/mode/scss"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+": $0;",meta:"property",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\w\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]=="object"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:"property value",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(/^(\s+[^;]|\s*$)/.test(f.substring(s.column)))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}}),this.add("!important","insertion",function(e,t,n,r,i){if(i==="!"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\s*(;|}|$)/.test(o.substring(s.column)))return{text:"!important",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./css_completions").CssCompletions,f=e("./behaviour/css").CssBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(c.prototype),t.Mode=c}),define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),a=function(){this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==""&&a!=="'"&&a!='"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,"attribute-value")||u(p,"string")))return{text:"",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,"tag-whitespace")||u(p,"whitespace"))p=h.stepBackward();var d=!c||c.match(/\s/);if(u(p,"attribute-equals")&&(d||c==">")||u(p,"decl-attribute-equals")&&(d||c=="?"))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,"tag-name")||u(f,"tag-whitespace")||u(f,"attribute-name")||u(f,"attribute-equals")||u(f,"attribute-value")))return;if(u(f,"reference.attribute-value"))return;if(u(f,"attribute-value")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,"tag-name")){f=a.stepBackward();if(f.value=="<"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),"end-tag-open"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf("tag-close")!==-1){if(f.value=="/>")return;while(f&&f.type.indexOf("tag-name")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value==="-1}var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t=="markbeginend"?"end":"":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?"":this._findEndTagInLine(e,n,r.tagName,r.end.column)?"":"start":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/";break}}return r}if(l(s,"tag-close"))return r.selfClosing=s.value=="/>",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,"tag-open"))return n.closing=l(t,"end-tag-open"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,"tag-name")?n.tagName=t.value:l(t,"tag-close")&&(n.selfClosing=t.value=="/>",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"tag-name"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"attribute-name"))i=n.stepBackward();if(i)return i.value}var r=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"],s=["onabort","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextmenu","oncuechange","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onload","onloadeddata","onloadedmetadata","onloadstart","onmousedown","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onpause","onplay","onplaying","onprogress","onratechange","onreset","onscroll","onseeked","onseeking","onselect","onshow","onstalled","onsubmit","onsuspend","ontimeupdate","onvolumechange","onwaiting"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{"accept-charset":1,action:1,autocomplete:1,enctype:{"multipart/form-data":1,"application/x-www-form-urlencoded":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{"allow-same-origin":1,"allow-top-navigation":1,"allow-forms":1,"allow-scripts":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,"datetime-local":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{"application/x-www-form-urlencoded":1,"multipart/form-data":1,"text/plain":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,"for":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{"text/css":1,"image/png":1,"image/jpeg":1,"image/gif":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{"http-equiv":{"content-type":1},name:{description:1,keywords:1},content:{"text/html; charset=UTF-8":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{"for":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{"text/javascript":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,"default":1},section:{},summary:{},u:{},ul:{},"var":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,"tag-name")||f(i,"tag-open")||f(i,"end-tag-open"))return this.getTagCompletions(e,t,n,r);if(f(i,"tag-whitespace")||f(i,"attribute-name"))return this.getAttributeCompletions(e,t,n,r);if(f(i,"attribute-value"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:"tag",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]=="object"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:"attribute value",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=["Aacute;","aacute;","Acirc;","acirc;","acute;","AElig;","aelig;","Agrave;","agrave;","alefsym;","Alpha;","alpha;","amp;","and;","ang;","Aring;","aring;","asymp;","Atilde;","atilde;","Auml;","auml;","bdquo;","Beta;","beta;","brvbar;","bull;","cap;","Ccedil;","ccedil;","cedil;","cent;","Chi;","chi;","circ;","clubs;","cong;","copy;","crarr;","cup;","curren;","Dagger;","dagger;","dArr;","darr;","deg;","Delta;","delta;","diams;","divide;","Eacute;","eacute;","Ecirc;","ecirc;","Egrave;","egrave;","empty;","emsp;","ensp;","Epsilon;","epsilon;","equiv;","Eta;","eta;","ETH;","eth;","Euml;","euml;","euro;","exist;","fnof;","forall;","frac12;","frac14;","frac34;","frasl;","Gamma;","gamma;","ge;","gt;","hArr;","harr;","hearts;","hellip;","Iacute;","iacute;","Icirc;","icirc;","iexcl;","Igrave;","igrave;","image;","infin;","int;","Iota;","iota;","iquest;","isin;","Iuml;","iuml;","Kappa;","kappa;","Lambda;","lambda;","lang;","laquo;","lArr;","larr;","lceil;","ldquo;","le;","lfloor;","lowast;","loz;","lrm;","lsaquo;","lsquo;","lt;","macr;","mdash;","micro;","middot;","minus;","Mu;","mu;","nabla;","nbsp;","ndash;","ne;","ni;","not;","notin;","nsub;","Ntilde;","ntilde;","Nu;","nu;","Oacute;","oacute;","Ocirc;","ocirc;","OElig;","oelig;","Ograve;","ograve;","oline;","Omega;","omega;","Omicron;","omicron;","oplus;","or;","ordf;","ordm;","Oslash;","oslash;","Otilde;","otilde;","otimes;","Ouml;","ouml;","para;","part;","permil;","perp;","Phi;","phi;","Pi;","pi;","piv;","plusmn;","pound;","Prime;","prime;","prod;","prop;","Psi;","psi;","quot;","radic;","rang;","raquo;","rArr;","rarr;","rceil;","rdquo;","real;","reg;","rfloor;","Rho;","rho;","rlm;","rsaquo;","rsquo;","sbquo;","Scaron;","scaron;","sdot;","sect;","shy;","Sigma;","sigma;","sigmaf;","sim;","spades;","sub;","sube;","sum;","sup;","sup1;","sup2;","sup3;","supe;","szlig;","Tau;","tau;","there4;","Theta;","theta;","thetasym;","thinsp;","THORN;","thorn;","tilde;","times;","trade;","Uacute;","uacute;","uArr;","uarr;","Ucirc;","ucirc;","Ugrave;","ugrave;","uml;","upsih;","Upsilon;","upsilon;","Uuml;","uuml;","weierp;","Xi;","xi;","Yacute;","yacute;","yen;","Yuml;","yuml;","Zeta;","zeta;","zwj;","zwnj;"];return i.map(function(e){return{caption:e,snippet:e,meta:"html entity",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text").Mode,o=e("./javascript").Mode,u=e("./css").Mode,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/xml").XmlBehaviour,l=e("./folding/html").FoldMode,c=e("./html_completions").HtmlCompletions,h=e("../worker/worker_client").WorkerClient,p=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],d=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({"js-":o,"css-":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:""},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/html"}.call(v.prototype),t.Mode=v}),define("ace/mode/php",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/php_highlight_rules","ace/mode/php_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/php_completions","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/unicode","ace/mode/html","ace/mode/javascript","ace/mode/css"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./php_highlight_rules").PhpHighlightRules,o=e("./php_highlight_rules").PhpLangHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./php_completions").PhpCompletions,c=e("./behaviour/cstyle").CstyleBehaviour,h=e("./folding/cstyle").FoldMode,p=e("../unicode"),d=e("./html").Mode,v=e("./javascript").Mode,m=e("./css").Mode,g=function(e){this.HighlightRules=o,this.$outdent=new u,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new h};r.inherits(g,i),function(){this.tokenRe=new RegExp("^["+p.wordChars+"_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+p.wordChars+"_]|\\s])+","g"),this.lineCommentStart=["//","#"],this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var u=t.match(/^.*[\{\(\[:]\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o!="doc-start")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.$id="ace/mode/php-inline"}.call(g.prototype);var y=function(e){if(e&&e.inline){var t=new g;return t.createWorker=this.createWorker,t.inlinePhp=!0,t}d.call(this),this.HighlightRules=s,this.createModeDelegates({"js-":v,"css-":m,"php-":g}),this.foldingRules.subModes["php-"]=new h};r.inherits(y,d),function(){this.createWorker=function(e){var t=new f(["ace"],"ace/mode/php_worker","PhpWorker");return t.attachToDocument(e.getDocument()),this.inlinePhp&&t.call("setOptions",[{inline:!0}]),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/php"}.call(y.prototype),t.Mode=y}); (function() { + window.require(["ace/mode/php"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-php_laravel_blade.js b/BTPanel/static/ace/mode-php_laravel_blade.js new file mode 100644 index 00000000..68b9b41c --- /dev/null +++ b/BTPanel/static/ace/mode-php_laravel_blade.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom",f=t.supportConstantColor="aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen",l=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"paren.rparen",regex:"\\}"},{token:"string",regex:"@(?!viewport)",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"keyword",regex:"%"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant.numeric",regex:c},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"start"},{token:"paren.rparen",regex:"\\}",next:"start"},{token:"string",regex:";",next:"start"},{token:"keyword",regex:"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)"}],comments:[{token:"comment",regex:"\\/\\*",push:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}]}],ruleset:[{regex:"-(webkit|ms|moz|o)-",token:"text"},{token:"punctuation.operator",regex:"[:;]"},{token:"paren.rparen",regex:"\\}",next:"start"},{include:["strings","url","comments"]},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{include:"url"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}],url:[{token:"support.function",regex:"(?:url(:?-prefix)?|domain|regexp)\\(",push:[{token:"support.function",regex:"\\)",next:"pop"},{defaultToken:"string"}]}],strings:[{token:"string.start",regex:"'",push:[{token:"string.end",regex:"'|$",next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]},{token:"string.start",regex:'"',push:[{token:"string.end",regex:'"|$',next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]}],escapes:[{token:"constant.language.escape",regex:/\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/,next:"start"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){var t="[_:a-zA-Z\u00c0-\uffff][-_:.a-zA-Z0-9\u00c0-\uffff]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.start.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.end.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_highlight_rules").XmlHighlightRules,a=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),f=function(){u.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:.]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var n=a[t];return["meta.tag.punctuation."+(e=="<"?"":"end-")+"tag-open.xml","meta.tag"+(n?"."+n:"")+".tag-name.xml"]},regex:"(",next:"start"}]}),this.embedTagRules(s,"css-","style"),this.embedTagRules((new o({jsx:!1})).getRules(),"js-","script"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define("ace/mode/php_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules","ace/mode/html_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=e("./html_highlight_rules").HtmlHighlightRules,a=function(){var e=s,t=i.arrayToMap("abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|get_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|mysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|mysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|mysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|mysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|mysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|mysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|mysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|mysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|mysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|mysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|mysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|mysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|mysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|mysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|mysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|mysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|mysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|mysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type".split("|")),n=i.arrayToMap("abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|final|finally|for|foreach|function|global|goto|if|implements|instanceof|insteadof|interface|namespace|new|or|private|protected|public|static|switch|throw|trait|try|use|var|while|xor|yield".split("|")),r=i.arrayToMap("__halt_compiler|die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset".split("|")),o=i.arrayToMap("true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__|__TRAIT__".split("|")),u=i.arrayToMap("$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv".split("|")),a=i.arrayToMap("key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase".split("|")),f=i.arrayToMap("cfunction|old_function".split("|")),l=i.arrayToMap([]);this.$rules={start:[{token:"comment",regex:/(?:#|\/\/)(?:[^?]|\?[^>])*/},e.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/][gimy]*\\s*(?=[).,;]|$)"},{token:"string",regex:'"',next:"qqstring"},{token:"string",regex:"'",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language",regex:"\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\b"},{token:["keyword","text","support.class"],regex:"\\b(new)(\\s+)(\\w+)"},{token:["support.class","keyword.operator"],regex:"\\b(\\w+)(::)"},{token:"constant.language",regex:"\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\b"},{token:function(e){return n.hasOwnProperty(e)?"keyword":o.hasOwnProperty(e)?"constant.language":u.hasOwnProperty(e)?"variable.language":l.hasOwnProperty(e)?"invalid.illegal":t.hasOwnProperty(e)?"support.function":e=="debugger"?"invalid.deprecated":e.match(/^(\$[a-zA-Z_\x7f-\uffff][a-zA-Z0-9_\x7f-\uffff]*|self|parent)$/)?"variable":"identifier"},regex:/[a-zA-Z_$\x7f-\uffff][a-zA-Z0-9_\x7f-\uffff]*/},{onMatch:function(e,t,n){e=e.substr(3);if(e[0]=="'"||e[0]=='"')e=e.slice(1,-1);return n.unshift(this.next,e),"markup.list"},regex:/<<<(?:\w+|'\w+'|"\w+")$/,next:"heredoc"},{token:"keyword.operator",regex:"::|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|\\.=|=|!|&&|\\|\\||\\?\\:|\\*=|/=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"punctuation.operator",regex:/[,;]/},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],heredoc:[{onMatch:function(e,t,n){return n[1]!=e?"string":(n.shift(),n.shift(),"markup.list")},regex:"^\\w+(?=;?$)",next:"start"},{token:"string",regex:".*"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],qqstring:[{token:"constant.language.escape",regex:'\\\\(?:[nrtvef\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},{token:"variable",regex:/\$[\w]+(?:\[[\w\]+]|[=\-]>\w+)?/},{token:"variable",regex:/\$\{[^"\}]+\}?/},{token:"string",regex:'"',next:"start"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:/\\['\\]/},{token:"string",regex:"'",next:"start"},{defaultToken:"string"}]},this.embedRules(s,"doc-",[s.getEndRule("start")])};r.inherits(a,o);var f=function(){u.call(this);var e=[{token:"support.php_tag",regex:"<\\?(?:php|=)?",push:"php-start"}],t=[{token:"support.php_tag",regex:"\\?>",next:"pop"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(a,"php-",t,["start"]),this.normalizeRules()};r.inherits(f,u),t.PhpHighlightRules=f,t.PhpLangHighlightRules=a}),define("ace/mode/php_laravel_blade_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/php_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./php_highlight_rules").PhpHighlightRules,s=function(){i.call(this);var e={start:[{include:"comments"},{include:"directives"},{include:"parenthesis"}],comments:[{token:"punctuation.definition.comment.blade",regex:"(\\/\\/(.)*)|(\\#(.)*)",next:"pop"},{token:"punctuation.definition.comment.begin.php",regex:"(?:\\/\\*)",push:[{token:"punctuation.definition.comment.end.php",regex:"(?:\\*\\/)",next:"pop"},{defaultToken:"comment.block.blade"}]},{token:"punctuation.definition.comment.begin.blade",regex:"(?:\\{\\{\\-\\-)",push:[{token:"punctuation.definition.comment.end.blade",regex:"(?:\\-\\-\\}\\})",next:"pop"},{defaultToken:"comment.block.blade"}]}],parenthesis:[{token:"parenthesis.begin.blade",regex:"\\(",push:[{token:"parenthesis.end.blade",regex:"\\)",next:"pop"},{include:"strings"},{include:"variables"},{include:"lang"},{include:"parenthesis"},{defaultToken:"source.blade"}]}],directives:[{token:["directive.declaration.blade","keyword.directives.blade"],regex:"(@)(endunless|endisset|endempty|endauth|endguest|endcomponent|endslot|endalert|endverbatim|endsection|show|php|endphp|endpush|endprepend|endenv|endforelse|isset|empty|component|slot|alert|json|verbatim|section|auth|guest|hasSection|forelse|includeIf|includeWhen|includeFirst|each|push|stack|prepend|inject|env|elseenv|unless|yield|extends|parent|include|acfrepeater|block|can|cannot|choice|debug|elsecan|elsecannot|embed|hipchat|lang|layout|macro|macrodef|minify|partial|render|servers|set|slack|story|task|unset|wpposts|acfend|after|append|breakpoint|endafter|endcan|endcannot|endembed|endmacro|endmarkdown|endminify|endpartial|endsetup|endstory|endtask|endunless|markdown|overwrite|setup|stop|wpempty|wpend|wpquery)"},{token:["directive.declaration.blade","keyword.control.blade"],regex:"(@)(if|else|elseif|endif|foreach|endforeach|switch|case|break|default|endswitch|for|endfor|while|endwhile|continue)"},{token:["directive.ignore.blade","injections.begin.blade"],regex:"(@?)(\\{\\{)",push:[{token:"injections.end.blade",regex:"\\}\\}",next:"pop"},{include:"strings"},{include:"variables"},{defaultToken:"source.blade"}]},{token:"injections.unescaped.begin.blade",regex:"\\{\\!\\!",push:[{token:"injections.unescaped.end.blade",regex:"\\!\\!\\}",next:"pop"},{include:"strings"},{include:"variables"},{defaultToken:"source.blade"}]}],lang:[{token:"keyword.operator.blade",regex:"(?:!=|!|<=|>=|<|>|===|==|=|\\+\\+|\\;|\\,|%|&&|\\|\\|)|\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod|as)\\b"},{token:"constant.language.blade",regex:"\\b(?:TRUE|FALSE|true|false)\\b"}],strings:[{token:"punctuation.definition.string.begin.blade",regex:'"',push:[{token:"punctuation.definition.string.end.blade",regex:'"',next:"pop"},{token:"string.character.escape.blade",regex:"\\\\."},{defaultToken:"string.quoted.single.blade"}]},{token:"punctuation.definition.string.begin.blade",regex:"'",push:[{token:"punctuation.definition.string.end.blade",regex:"'",next:"pop"},{token:"string.character.escape.blade",regex:"\\\\."},{defaultToken:"string.quoted.double.blade"}]}],variables:[{token:"variable.blade",regex:"\\$([a-zA-Z_][a-zA-Z0-9_]*)\\b"},{token:["keyword.operator.blade","constant.other.property.blade"],regex:"(->)([a-zA-Z_][a-zA-Z0-9_]*)\\b"},{token:["keyword.operator.blade","meta.function-call.object.blade","punctuation.definition.variable.blade","variable.blade","punctuation.definition.variable.blade"],regex:"(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\()(.*?)(\\))"}]},t=e.start;for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],t);Object.keys(e).forEach(function(t){this.$rules[t]||(this.$rules[t]=e[t])},this),this.normalizeRules()};r.inherits(s,i),t.PHPLaravelBladeHighlightRules=s}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/php_completions",["require","exports","module"],function(e,t,n){"use strict";function s(e,t){return e.type.lastIndexOf(t)>-1}var r={abs:["int abs(int number)","Return the absolute value of the number"],acos:["float acos(float number)","Return the arc cosine of the number in radians"],acosh:["float acosh(float number)","Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number"],addGlob:["bool addGlob(string pattern[,int flags [, array options]])","Add files matching the glob pattern. See php's glob for the pattern syntax."],addPattern:["bool addPattern(string pattern[, string path [, array options]])","Add files matching the pcre pattern. See php's pcre for the pattern syntax."],addcslashes:["string addcslashes(string str, string charlist)","Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\n', '\\r', '\\t' etc...)"],addslashes:["string addslashes(string str)","Escapes single quote, double quotes and backslash characters in a string with backslashes"],apache_child_terminate:["bool apache_child_terminate(void)","Terminate apache process after this request"],apache_get_modules:["array apache_get_modules(void)","Get a list of loaded Apache modules"],apache_get_version:["string apache_get_version(void)","Fetch Apache version"],apache_getenv:["bool apache_getenv(string variable [, bool walk_to_top])","Get an Apache subprocess_env variable"],apache_lookup_uri:["object apache_lookup_uri(string URI)","Perform a partial request of the given URI to obtain information about it"],apache_note:["string apache_note(string note_name [, string note_value])","Get and set Apache request notes"],apache_request_auth_name:["string apache_request_auth_name()",""],apache_request_auth_type:["string apache_request_auth_type()",""],apache_request_discard_request_body:["long apache_request_discard_request_body()",""],apache_request_err_headers_out:["array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])","* fetch all headers that go out in case of an error or a subrequest"],apache_request_headers:["array apache_request_headers(void)","Fetch all HTTP request headers"],apache_request_headers_in:["array apache_request_headers_in()","* fetch all incoming request headers"],apache_request_headers_out:["array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])","* fetch all outgoing request headers"],apache_request_is_initial_req:["bool apache_request_is_initial_req()",""],apache_request_log_error:["boolean apache_request_log_error(string message, [long facility])",""],apache_request_meets_conditions:["long apache_request_meets_conditions()",""],apache_request_remote_host:["int apache_request_remote_host([int type])",""],apache_request_run:["long apache_request_run()","This is a wrapper for ap_sub_run_req and ap_destory_sub_req. It takes sub_request, runs it, destroys it, and returns it's status."],apache_request_satisfies:["long apache_request_satisfies()",""],apache_request_server_port:["int apache_request_server_port()",""],apache_request_set_etag:["void apache_request_set_etag()",""],apache_request_set_last_modified:["void apache_request_set_last_modified()",""],apache_request_some_auth_required:["bool apache_request_some_auth_required()",""],apache_request_sub_req_lookup_file:["object apache_request_sub_req_lookup_file(string file)","Returns sub-request for the specified file. You would need to run it yourself with run()."],apache_request_sub_req_lookup_uri:["object apache_request_sub_req_lookup_uri(string uri)","Returns sub-request for the specified uri. You would need to run it yourself with run()"],apache_request_sub_req_method_uri:["object apache_request_sub_req_method_uri(string method, string uri)","Returns sub-request for the specified file. You would need to run it yourself with run()."],apache_request_update_mtime:["long apache_request_update_mtime([int dependency_mtime])",""],apache_reset_timeout:["bool apache_reset_timeout(void)","Reset the Apache write timer"],apache_response_headers:["array apache_response_headers(void)","Fetch all HTTP response headers"],apache_setenv:["bool apache_setenv(string variable, string value [, bool walk_to_top])","Set an Apache subprocess_env variable"],array_change_key_case:["array array_change_key_case(array input [, int case=CASE_LOWER])","Retuns an array with all string keys lowercased [or uppercased]"],array_chunk:["array array_chunk(array input, int size [, bool preserve_keys])","Split array into chunks"],array_combine:["array array_combine(array keys, array values)","Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values"],array_count_values:["array array_count_values(array input)","Return the value as key and the frequency of that value in input as value"],array_diff:["array array_diff(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have values which are not present in any of the others arguments."],array_diff_assoc:["array array_diff_assoc(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal"],array_diff_key:["array array_diff_key(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved."],array_diff_uassoc:["array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)","Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function."],array_diff_ukey:["array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)","Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved."],array_fill:["array array_fill(int start_key, int num, mixed val)","Create an array containing num elements starting with index start_key each initialized to val"],array_fill_keys:["array array_fill_keys(array keys, mixed val)","Create an array using the elements of the first parameter as keys each initialized to val"],array_filter:["array array_filter(array input [, mixed callback])","Filters elements from the array via the callback."],array_flip:["array array_flip(array input)","Return array with key <-> value flipped"],array_intersect:["array array_intersect(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have values which are present in all the other arguments"],array_intersect_assoc:["array array_intersect_assoc(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check"],array_intersect_key:["array array_intersect_key(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data."],array_intersect_uassoc:["array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)","Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback."],array_intersect_ukey:["array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)","Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data."],array_key_exists:["bool array_key_exists(mixed key, array search)","Checks if the given key or index exists in the array"],array_keys:["array array_keys(array input [, mixed search_value[, bool strict]])","Return just the keys from the input array, optionally only for the specified search_value"],array_map:["array array_map(mixed callback, array input1 [, array input2 ,...])","Applies the callback to the elements in given arrays."],array_merge:["array array_merge(array arr1, array arr2 [, array ...])","Merges elements from passed arrays into one array"],array_merge_recursive:["array array_merge_recursive(array arr1, array arr2 [, array ...])","Recursively merges elements from passed arrays into one array"],array_multisort:["bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])","Sort multiple arrays at once similar to how ORDER BY clause works in SQL"],array_pad:["array array_pad(array input, int pad_size, mixed pad_value)","Returns a copy of input array padded with pad_value to size pad_size"],array_pop:["mixed array_pop(array stack)","Pops an element off the end of the array"],array_product:["mixed array_product(array input)","Returns the product of the array entries"],array_push:["int array_push(array stack, mixed var [, mixed ...])","Pushes elements onto the end of the array"],array_rand:["mixed array_rand(array input [, int num_req])","Return key/keys for random entry/entries in the array"],array_reduce:["mixed array_reduce(array input, mixed callback [, mixed initial])","Iteratively reduce the array to a single value via the callback."],array_replace:["array array_replace(array arr1, array arr2 [, array ...])","Replaces elements from passed arrays into one array"],array_replace_recursive:["array array_replace_recursive(array arr1, array arr2 [, array ...])","Recursively replaces elements from passed arrays into one array"],array_reverse:["array array_reverse(array input [, bool preserve keys])","Return input as a new array with the order of the entries reversed"],array_search:["mixed array_search(mixed needle, array haystack [, bool strict])","Searches the array for a given value and returns the corresponding key if successful"],array_shift:["mixed array_shift(array stack)","Pops an element off the beginning of the array"],array_slice:["array array_slice(array input, int offset [, int length [, bool preserve_keys]])","Returns elements specified by offset and length"],array_splice:["array array_splice(array input, int offset [, int length [, array replacement]])","Removes the elements designated by offset and length and replace them with supplied array"],array_sum:["mixed array_sum(array input)","Returns the sum of the array entries"],array_udiff:["array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)","Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function."],array_udiff_assoc:["array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)","Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function."],array_udiff_uassoc:["array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)","Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions."],array_uintersect:["array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)","Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback."],array_uintersect_assoc:["array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)","Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback."],array_uintersect_uassoc:["array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)","Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks."],array_unique:["array array_unique(array input [, int sort_flags])","Removes duplicate values from array"],array_unshift:["int array_unshift(array stack, mixed var [, mixed ...])","Pushes elements onto the beginning of the array"],array_values:["array array_values(array input)","Return just the values from the input array"],array_walk:["bool array_walk(array input, string funcname [, mixed userdata])","Apply a user function to every member of an array"],array_walk_recursive:["bool array_walk_recursive(array input, string funcname [, mixed userdata])","Apply a user function recursively to every member of an array"],arsort:["bool arsort(array &array_arg [, int sort_flags])","Sort an array in reverse order and maintain index association"],asin:["float asin(float number)","Returns the arc sine of the number in radians"],asinh:["float asinh(float number)","Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number"],asort:["bool asort(array &array_arg [, int sort_flags])","Sort an array and maintain index association"],assert:["int assert(string|bool assertion)","Checks if assertion is false"],assert_options:["mixed assert_options(int what [, mixed value])","Set/get the various assert flags"],atan:["float atan(float number)","Returns the arc tangent of the number in radians"],atan2:["float atan2(float y, float x)","Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x"],atanh:["float atanh(float number)","Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number"],attachIterator:["void attachIterator(Iterator iterator[, mixed info])","Attach a new iterator"],base64_decode:["string base64_decode(string str[, bool strict])","Decodes string using MIME base64 algorithm"],base64_encode:["string base64_encode(string str)","Encodes string using MIME base64 algorithm"],base_convert:["string base_convert(string number, int frombase, int tobase)","Converts a number in a string from any base <= 36 to any base <= 36"],basename:["string basename(string path [, string suffix])","Returns the filename component of the path"],bcadd:["string bcadd(string left_operand, string right_operand [, int scale])","Returns the sum of two arbitrary precision numbers"],bccomp:["int bccomp(string left_operand, string right_operand [, int scale])","Compares two arbitrary precision numbers"],bcdiv:["string bcdiv(string left_operand, string right_operand [, int scale])","Returns the quotient of two arbitrary precision numbers (division)"],bcmod:["string bcmod(string left_operand, string right_operand)","Returns the modulus of the two arbitrary precision operands"],bcmul:["string bcmul(string left_operand, string right_operand [, int scale])","Returns the multiplication of two arbitrary precision numbers"],bcpow:["string bcpow(string x, string y [, int scale])","Returns the value of an arbitrary precision number raised to the power of another"],bcpowmod:["string bcpowmod(string x, string y, string mod [, int scale])","Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous"],bcscale:["bool bcscale(int scale)","Sets default scale parameter for all bc math functions"],bcsqrt:["string bcsqrt(string operand [, int scale])","Returns the square root of an arbitray precision number"],bcsub:["string bcsub(string left_operand, string right_operand [, int scale])","Returns the difference between two arbitrary precision numbers"],bin2hex:["string bin2hex(string data)","Converts the binary representation of data to hex"],bind_textdomain_codeset:["string bind_textdomain_codeset (string domain, string codeset)","Specify the character encoding in which the messages from the DOMAIN message catalog will be returned."],bindec:["int bindec(string binary_number)","Returns the decimal equivalent of the binary number"],bindtextdomain:["string bindtextdomain(string domain_name, string dir)","Bind to the text domain domain_name, looking for translations in dir. Returns the current domain"],birdstep_autocommit:["bool birdstep_autocommit(int index)",""],birdstep_close:["bool birdstep_close(int id)",""],birdstep_commit:["bool birdstep_commit(int index)",""],birdstep_connect:["int birdstep_connect(string server, string user, string pass)",""],birdstep_exec:["int birdstep_exec(int index, string exec_str)",""],birdstep_fetch:["bool birdstep_fetch(int index)",""],birdstep_fieldname:["string birdstep_fieldname(int index, int col)",""],birdstep_fieldnum:["int birdstep_fieldnum(int index)",""],birdstep_freeresult:["bool birdstep_freeresult(int index)",""],birdstep_off_autocommit:["bool birdstep_off_autocommit(int index)",""],birdstep_result:["mixed birdstep_result(int index, mixed col)",""],birdstep_rollback:["bool birdstep_rollback(int index)",""],bzcompress:["string bzcompress(string source [, int blocksize100k [, int workfactor]])","Compresses a string into BZip2 encoded data"],bzdecompress:["string bzdecompress(string source [, int small])","Decompresses BZip2 compressed data"],bzerrno:["int bzerrno(resource bz)","Returns the error number"],bzerror:["array bzerror(resource bz)","Returns the error number and error string in an associative array"],bzerrstr:["string bzerrstr(resource bz)","Returns the error string"],bzopen:["resource bzopen(string|int file|fp, string mode)","Opens a new BZip2 stream"],bzread:["string bzread(resource bz[, int length])","Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified"],cal_days_in_month:["int cal_days_in_month(int calendar, int month, int year)","Returns the number of days in a month for a given year and calendar"],cal_from_jd:["array cal_from_jd(int jd, int calendar)","Converts from Julian Day Count to a supported calendar and return extended information"],cal_info:["array cal_info([int calendar])","Returns information about a particular calendar"],cal_to_jd:["int cal_to_jd(int calendar, int month, int day, int year)","Converts from a supported calendar to Julian Day Count"],call_user_func:["mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])","Call a user function which is the first parameter"],call_user_func_array:["mixed call_user_func_array(string function_name, array parameters)","Call a user function which is the first parameter with the arguments contained in array"],call_user_method:["mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])","Call a user method on a specific object or class"],call_user_method_array:["mixed call_user_method_array(string method_name, mixed object, array params)","Call a user method on a specific object or class using a parameter array"],ceil:["float ceil(float number)","Returns the next highest integer value of the number"],chdir:["bool chdir(string directory)","Change the current directory"],checkdate:["bool checkdate(int month, int day, int year)","Returns true(1) if it is a valid date in gregorian calendar"],chgrp:["bool chgrp(string filename, mixed group)","Change file group"],chmod:["bool chmod(string filename, int mode)","Change file mode"],chown:["bool chown (string filename, mixed user)","Change file owner"],chr:["string chr(int ascii)","Converts ASCII code to a character"],chroot:["bool chroot(string directory)","Change root directory"],chunk_split:["string chunk_split(string str [, int chunklen [, string ending]])","Returns split line"],class_alias:["bool class_alias(string user_class_name , string alias_name [, bool autoload])","Creates an alias for user defined class"],class_exists:["bool class_exists(string classname [, bool autoload])","Checks if the class exists"],class_implements:["array class_implements(mixed what [, bool autoload ])","Return all classes and interfaces implemented by SPL"],class_parents:["array class_parents(object instance [, boolean autoload = true])","Return an array containing the names of all parent classes"],clearstatcache:["void clearstatcache([bool clear_realpath_cache[, string filename]])","Clear file stat cache"],closedir:["void closedir([resource dir_handle])","Close directory connection identified by the dir_handle"],closelog:["bool closelog(void)","Close connection to system logger"],collator_asort:["bool collator_asort( Collator $coll, array(string) $arr )","* Sort array using specified collator, maintaining index association."],collator_compare:["int collator_compare( Collator $coll, string $str1, string $str2 )","* Compare two strings."],collator_create:["Collator collator_create( string $locale )","* Create collator."],collator_get_attribute:["int collator_get_attribute( Collator $coll, int $attr )","* Get collation attribute value."],collator_get_error_code:["int collator_get_error_code( Collator $coll )","* Get collator's last error code."],collator_get_error_message:["string collator_get_error_message( Collator $coll )","* Get text description for collator's last error code."],collator_get_locale:["string collator_get_locale( Collator $coll, int $type )","* Gets the locale name of the collator."],collator_get_sort_key:["bool collator_get_sort_key( Collator $coll, string $str )","* Get a sort key for a string from a Collator. }}}"],collator_get_strength:["int collator_get_strength(Collator coll)","* Returns the current collation strength."],collator_set_attribute:["bool collator_set_attribute( Collator $coll, int $attr, int $val )","* Set collation attribute."],collator_set_strength:["bool collator_set_strength(Collator coll, int strength)","* Set the collation strength."],collator_sort:["bool collator_sort( Collator $coll, array(string) $arr [, int $sort_flags] )","* Sort array using specified collator."],collator_sort_with_sort_keys:["bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )","* Equivalent to standard PHP sort using Collator. * Uses ICU ucol_getSortKey for performance."],com_create_guid:["string com_create_guid()","Generate a globally unique identifier (GUID)"],com_event_sink:["bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])","Connect events from a COM object to a PHP object"],com_get_active_object:["object com_get_active_object(string progid [, int code_page ])","Returns a handle to an already running instance of a COM object"],com_load_typelib:["bool com_load_typelib(string typelib_name [, int case_insensitive])","Loads a Typelibrary and registers its constants"],com_message_pump:["bool com_message_pump([int timeoutms])","Process COM messages, sleeping for up to timeoutms milliseconds"],com_print_typeinfo:["bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)","Print out a PHP class definition for a dispatchable interface"],compact:["array compact(mixed var_names [, mixed ...])","Creates a hash containing variables and their values"],compose_locale:["static string compose_locale($array)","* Creates a locale by combining the parts of locale-ID passed * }}}"],confirm_extname_compiled:["string confirm_extname_compiled(string arg)","Return a string to confirm that the module is compiled in"],connection_aborted:["int connection_aborted(void)","Returns true if client disconnected"],connection_status:["int connection_status(void)","Returns the connection status bitfield"],constant:["mixed constant(string const_name)","Given the name of a constant this function will return the constant's associated value"],convert_cyr_string:["string convert_cyr_string(string str, string from, string to)","Convert from one Cyrillic character set to another"],convert_uudecode:["string convert_uudecode(string data)","decode a uuencoded string"],convert_uuencode:["string convert_uuencode(string data)","uuencode a string"],copy:["bool copy(string source_file, string destination_file [, resource context])","Copy a file"],cos:["float cos(float number)","Returns the cosine of the number in radians"],cosh:["float cosh(float number)","Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2"],count:["int count(mixed var [, int mode])","Count the number of elements in a variable (usually an array)"],count_chars:["mixed count_chars(string input [, int mode])","Returns info about what characters are used in input"],crc32:["string crc32(string str)","Calculate the crc32 polynomial of a string"],create_function:["string create_function(string args, string code)","Creates an anonymous function, and returns its name (funny, eh?)"],crypt:["string crypt(string str [, string salt])","Hash a string"],ctype_alnum:["bool ctype_alnum(mixed c)","Checks for alphanumeric character(s)"],ctype_alpha:["bool ctype_alpha(mixed c)","Checks for alphabetic character(s)"],ctype_cntrl:["bool ctype_cntrl(mixed c)","Checks for control character(s)"],ctype_digit:["bool ctype_digit(mixed c)","Checks for numeric character(s)"],ctype_graph:["bool ctype_graph(mixed c)","Checks for any printable character(s) except space"],ctype_lower:["bool ctype_lower(mixed c)","Checks for lowercase character(s)"],ctype_print:["bool ctype_print(mixed c)","Checks for printable character(s)"],ctype_punct:["bool ctype_punct(mixed c)","Checks for any printable character which is not whitespace or an alphanumeric character"],ctype_space:["bool ctype_space(mixed c)","Checks for whitespace character(s)"],ctype_upper:["bool ctype_upper(mixed c)","Checks for uppercase character(s)"],ctype_xdigit:["bool ctype_xdigit(mixed c)","Checks for character(s) representing a hexadecimal digit"],curl_close:["void curl_close(resource ch)","Close a cURL session"],curl_copy_handle:["resource curl_copy_handle(resource ch)","Copy a cURL handle along with all of it's preferences"],curl_errno:["int curl_errno(resource ch)","Return an integer containing the last error number"],curl_error:["string curl_error(resource ch)","Return a string contain the last error for the current session"],curl_exec:["bool curl_exec(resource ch)","Perform a cURL session"],curl_getinfo:["mixed curl_getinfo(resource ch [, int option])","Get information regarding a specific transfer"],curl_init:["resource curl_init([string url])","Initialize a cURL session"],curl_multi_add_handle:["int curl_multi_add_handle(resource mh, resource ch)","Add a normal cURL handle to a cURL multi handle"],curl_multi_close:["void curl_multi_close(resource mh)","Close a set of cURL handles"],curl_multi_exec:["int curl_multi_exec(resource mh, int &still_running)","Run the sub-connections of the current cURL handle"],curl_multi_getcontent:["string curl_multi_getcontent(resource ch)","Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set"],curl_multi_info_read:["array curl_multi_info_read(resource mh [, long msgs_in_queue])","Get information about the current transfers"],curl_multi_init:["resource curl_multi_init(void)","Returns a new cURL multi handle"],curl_multi_remove_handle:["int curl_multi_remove_handle(resource mh, resource ch)","Remove a multi handle from a set of cURL handles"],curl_multi_select:["int curl_multi_select(resource mh[, double timeout])",'Get all the sockets associated with the cURL extension, which can then be "selected"'],curl_setopt:["bool curl_setopt(resource ch, int option, mixed value)","Set an option for a cURL transfer"],curl_setopt_array:["bool curl_setopt_array(resource ch, array options)","Set an array of option for a cURL transfer"],curl_version:["array curl_version([int version])","Return cURL version information."],current:["mixed current(array array_arg)","Return the element currently pointed to by the internal array pointer"],date:["string date(string format [, long timestamp])","Format a local date/time"],date_add:["DateTime date_add(DateTime object, DateInterval interval)","Adds an interval to the current date in object."],date_create:["DateTime date_create([string time[, DateTimeZone object]])","Returns new DateTime object"],date_create_from_format:["DateTime date_create_from_format(string format, string time[, DateTimeZone object])","Returns new DateTime object formatted according to the specified format"],date_date_set:["DateTime date_date_set(DateTime object, long year, long month, long day)","Sets the date."],date_default_timezone_get:["string date_default_timezone_get()","Gets the default timezone used by all date/time functions in a script"],date_default_timezone_set:["bool date_default_timezone_set(string timezone_identifier)","Sets the default timezone used by all date/time functions in a script"],date_diff:["DateInterval date_diff(DateTime object [, bool absolute])","Returns the difference between two DateTime objects."],date_format:["string date_format(DateTime object, string format)","Returns date formatted according to given format"],date_get_last_errors:["array date_get_last_errors()","Returns the warnings and errors found while parsing a date/time string."],date_interval_create_from_date_string:["DateInterval date_interval_create_from_date_string(string time)","Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string"],date_interval_format:["string date_interval_format(DateInterval object, string format)","Formats the interval."],date_isodate_set:["DateTime date_isodate_set(DateTime object, long year, long week[, long day])","Sets the ISO date."],date_modify:["DateTime date_modify(DateTime object, string modify)","Alters the timestamp."],date_offset_get:["long date_offset_get(DateTime object)","Returns the DST offset."],date_parse:["array date_parse(string date)","Returns associative array with detailed info about given date"],date_parse_from_format:["array date_parse_from_format(string format, string date)","Returns associative array with detailed info about given date"],date_sub:["DateTime date_sub(DateTime object, DateInterval interval)","Subtracts an interval to the current date in object."],date_sun_info:["array date_sun_info(long time, float latitude, float longitude)","Returns an array with information about sun set/rise and twilight begin/end"],date_sunrise:["mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])","Returns time of sunrise for a given day and location"],date_sunset:["mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])","Returns time of sunset for a given day and location"],date_time_set:["DateTime date_time_set(DateTime object, long hour, long minute[, long second])","Sets the time."],date_timestamp_get:["long date_timestamp_get(DateTime object)","Gets the Unix timestamp."],date_timestamp_set:["DateTime date_timestamp_set(DateTime object, long unixTimestamp)","Sets the date and time based on an Unix timestamp."],date_timezone_get:["DateTimeZone date_timezone_get(DateTime object)","Return new DateTimeZone object relative to give DateTime"],date_timezone_set:["DateTime date_timezone_set(DateTime object, DateTimeZone object)","Sets the timezone for the DateTime object."],datefmt_create:["IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )","* Create formatter."],datefmt_format:["string datefmt_format( [mixed]int $args or array $args )","* Format the time value as a string. }}}"],datefmt_get_calendar:["string datefmt_get_calendar( IntlDateFormatter $mf )","* Get formatter calendar."],datefmt_get_datetype:["string datefmt_get_datetype( IntlDateFormatter $mf )","* Get formatter datetype."],datefmt_get_error_code:["int datefmt_get_error_code( IntlDateFormatter $nf )","* Get formatter's last error code."],datefmt_get_error_message:["string datefmt_get_error_message( IntlDateFormatter $coll )","* Get text description for formatter's last error code."],datefmt_get_locale:["string datefmt_get_locale(IntlDateFormatter $mf)","* Get formatter locale."],datefmt_get_pattern:["string datefmt_get_pattern( IntlDateFormatter $mf )","* Get formatter pattern."],datefmt_get_timetype:["string datefmt_get_timetype( IntlDateFormatter $mf )","* Get formatter timetype."],datefmt_get_timezone_id:["string datefmt_get_timezone_id( IntlDateFormatter $mf )","* Get formatter timezone_id."],datefmt_isLenient:["string datefmt_isLenient(IntlDateFormatter $mf)","* Get formatter locale."],datefmt_localtime:["integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])","* Parse the string $value to a localtime array }}}"],datefmt_parse:["integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )","* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}"],datefmt_setLenient:["string datefmt_setLenient(IntlDateFormatter $mf)","* Set formatter lenient."],datefmt_set_calendar:["bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )","* Set formatter calendar."],datefmt_set_pattern:["bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )","* Set formatter pattern."],datefmt_set_timezone_id:["boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)","* Set formatter timezone_id."],dba_close:["void dba_close(resource handle)","Closes database"],dba_delete:["bool dba_delete(string key, resource handle)","Deletes the entry associated with key If inifile: remove all other key lines"],dba_exists:["bool dba_exists(string key, resource handle)","Checks, if the specified key exists"],dba_fetch:["string dba_fetch(string key, [int skip ,] resource handle)","Fetches the data associated with key"],dba_firstkey:["string dba_firstkey(resource handle)","Resets the internal key pointer and returns the first key"],dba_handlers:["array dba_handlers([bool full_info])","List configured database handlers"],dba_insert:["bool dba_insert(string key, string value, resource handle)","If not inifile: Insert value as key, return false, if key exists already If inifile: Add vakue as key (next instance of key)"],dba_key_split:["array|false dba_key_split(string key)","Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null"],dba_list:["array dba_list()","List opened databases"],dba_nextkey:["string dba_nextkey(resource handle)","Returns the next key"],dba_open:["resource dba_open(string path, string mode [, string handlername, string ...])","Opens path using the specified handler in mode"],dba_optimize:["bool dba_optimize(resource handle)","Optimizes (e.g. clean up, vacuum) database"],dba_popen:["resource dba_popen(string path, string mode [, string handlername, string ...])","Opens path using the specified handler in mode persistently"],dba_replace:["bool dba_replace(string key, string value, resource handle)","Inserts value as key, replaces key, if key exists already If inifile: remove all other key lines"],dba_sync:["bool dba_sync(resource handle)","Synchronizes database"],dcgettext:["string dcgettext(string domain_name, string msgid, long category)","Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist"],dcngettext:["string dcngettext (string domain, string msgid1, string msgid2, int n, int category)","Plural version of dcgettext()"],debug_backtrace:["array debug_backtrace([bool provide_object])","Return backtrace as array"],debug_print_backtrace:["void debug_print_backtrace(void) */","ZEND_FUNCTION(debug_print_backtrace) { zend_execute_data *ptr, *skip; int lineno; char *function_name; char *filename; char *class_name = NULL; char *call_type; char *include_filename = NULL; zval *arg_array = NULL; int indent = 0; if (zend_parse_parameters_none() == FAILURE) { return; } ptr = EG(current_execute_data);","PHP_FUNCTION(dom_document_relaxNG_validate_file) { _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file"],dom_document_relaxNG_validate_xml:["boolean dom_document_relaxNG_validate_xml(string source); */","PHP_FUNCTION(dom_document_relaxNG_validate_xml) { _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml"],dom_document_rename_node:["DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3"],dom_document_save:["int dom_document_save(string file);","Convenience method to save to file"],dom_document_save_html:["string dom_document_save_html();","Convenience method to output as html"],dom_document_save_html_file:["int dom_document_save_html_file(string file);","Convenience method to save to file as html"],dom_document_savexml:["string dom_document_savexml([node n]);","URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3"],dom_document_schema_validate:["boolean dom_document_schema_validate(string source); */","PHP_FUNCTION(dom_document_schema_validate_xml) { _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate"],dom_document_schema_validate_file:["boolean dom_document_schema_validate_file(string filename); */","PHP_FUNCTION(dom_document_schema_validate_file) { _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file"],dom_document_validate:["boolean dom_document_validate();","Since: DOM extended"],dom_document_xinclude:["int dom_document_xinclude([int options])","Substitutues xincludes in a DomDocument"],dom_domconfiguration_can_set_parameter:["boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:"],dom_domconfiguration_get_parameter:["domdomuserdata dom_domconfiguration_get_parameter(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:"],dom_domconfiguration_set_parameter:["dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:"],dom_domerrorhandler_handle_error:["dom_boolean dom_domerrorhandler_handle_error(domerror error);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:"],dom_domimplementation_create_document:["DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2"],dom_domimplementation_create_document_type:["DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2"],dom_domimplementation_get_feature:["DOMNode dom_domimplementation_get_feature(string feature, string version);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3"],dom_domimplementation_has_feature:["boolean dom_domimplementation_has_feature(string feature, string version);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:"],dom_domimplementationlist_item:["domdomimplementation dom_domimplementationlist_item(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:"],dom_domimplementationsource_get_domimplementation:["domdomimplementation dom_domimplementationsource_get_domimplementation(string features);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:"],dom_domimplementationsource_get_domimplementations:["domimplementationlist dom_domimplementationsource_get_domimplementations(string features);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:"],dom_domstringlist_item:["domstring dom_domstringlist_item(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:"],dom_element_get_attribute:["string dom_element_get_attribute(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:"],dom_element_get_attribute_node:["DOMAttr dom_element_get_attribute_node(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:"],dom_element_get_attribute_node_ns:["DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2"],dom_element_get_attribute_ns:["string dom_element_get_attribute_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2"],dom_element_get_elements_by_tag_name:["DOMNodeList dom_element_get_elements_by_tag_name(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:"],dom_element_get_elements_by_tag_name_ns:["DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2"],dom_element_has_attribute:["boolean dom_element_has_attribute(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2"],dom_element_has_attribute_ns:["boolean dom_element_has_attribute_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2"],dom_element_remove_attribute:["void dom_element_remove_attribute(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:"],dom_element_remove_attribute_node:["DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:"],dom_element_remove_attribute_ns:["void dom_element_remove_attribute_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2"],dom_element_set_attribute:["void dom_element_set_attribute(string name, string value);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:"],dom_element_set_attribute_node:["DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:"],dom_element_set_attribute_node_ns:["DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2"],dom_element_set_attribute_ns:["void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2"],dom_element_set_id_attribute:["void dom_element_set_id_attribute(string name, boolean isId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3"],dom_element_set_id_attribute_node:["void dom_element_set_id_attribute_node(attr idAttr, boolean isId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3"],dom_element_set_id_attribute_ns:["void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3"],dom_import_simplexml:["somNode dom_import_simplexml(sxeobject node)","Get a simplexml_element object from dom to allow for processing"],dom_namednodemap_get_named_item:["DOMNode dom_namednodemap_get_named_item(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:"],dom_namednodemap_get_named_item_ns:["DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2"],dom_namednodemap_item:["DOMNode dom_namednodemap_item(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:"],dom_namednodemap_remove_named_item:["DOMNode dom_namednodemap_remove_named_item(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:"],dom_namednodemap_remove_named_item_ns:["DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2"],dom_namednodemap_set_named_item:["DOMNode dom_namednodemap_set_named_item(DOMNode arg);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:"],dom_namednodemap_set_named_item_ns:["DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2"],dom_namelist_get_name:["string dom_namelist_get_name(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:"],dom_namelist_get_namespace_uri:["string dom_namelist_get_namespace_uri(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:"],dom_node_append_child:["DomNode dom_node_append_child(DomNode newChild);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:"],dom_node_clone_node:["DomNode dom_node_clone_node(boolean deep);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:"],dom_node_compare_document_position:["short dom_node_compare_document_position(DomNode other);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3"],dom_node_get_feature:["DomNode dom_node_get_feature(string feature, string version);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3"],dom_node_get_user_data:["mixed dom_node_get_user_data(string key);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3"],dom_node_has_attributes:["boolean dom_node_has_attributes();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2"],dom_node_has_child_nodes:["boolean dom_node_has_child_nodes();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:"],dom_node_insert_before:["domnode dom_node_insert_before(DomNode newChild, DomNode refChild);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:"],dom_node_is_default_namespace:["boolean dom_node_is_default_namespace(string namespaceURI);","URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3"],dom_node_is_equal_node:["boolean dom_node_is_equal_node(DomNode arg);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3"],dom_node_is_same_node:["boolean dom_node_is_same_node(DomNode other);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3"],dom_node_is_supported:["boolean dom_node_is_supported(string feature, string version);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2"],dom_node_lookup_namespace_uri:["string dom_node_lookup_namespace_uri(string prefix);","URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3"],dom_node_lookup_prefix:["string dom_node_lookup_prefix(string namespaceURI);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3"],dom_node_normalize:["void dom_node_normalize();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:"],dom_node_remove_child:["DomNode dom_node_remove_child(DomNode oldChild);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:"],dom_node_replace_child:["DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:"],dom_node_set_user_data:["mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3"],dom_nodelist_item:["DOMNode dom_nodelist_item(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:"],dom_string_extend_find_offset16:["int dom_string_extend_find_offset16(int offset32);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:"],dom_string_extend_find_offset32:["int dom_string_extend_find_offset32(int offset16);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:"],dom_text_is_whitespace_in_element_content:["boolean dom_text_is_whitespace_in_element_content();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3"],dom_text_replace_whole_text:["DOMText dom_text_replace_whole_text(string content);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3"],dom_text_split_text:["DOMText dom_text_split_text(int offset);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:"],dom_userdatahandler_handle:["dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:"],dom_xpath_evaluate:["mixed dom_xpath_evaluate(string expr [,DOMNode context]); */","PHP_FUNCTION(dom_xpath_evaluate) { php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate"],dom_xpath_query:["DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */","PHP_FUNCTION(dom_xpath_query) { php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query"],dom_xpath_register_ns:["boolean dom_xpath_register_ns(string prefix, string uri); */",'PHP_FUNCTION(dom_xpath_register_ns) { zval *id; xmlXPathContextPtr ctxp; int prefix_len, ns_uri_len; dom_xpath_object *intern; unsigned char *prefix, *ns_uri; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) { return; } intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); ctxp = (xmlXPathContextPtr) intern->ptr; if (ctxp == NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid XPath Context"); RETURN_FALSE; } if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) { RETURN_FALSE } RETURN_TRUE; } /* }}}'],dom_xpath_register_php_functions:["void dom_xpath_register_php_functions() */",'PHP_FUNCTION(dom_xpath_register_php_functions) { zval *id; dom_xpath_object *intern; zval *array_value, **entry, *new_string; int name_len = 0; char *name; DOM_GET_THIS(id); if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "a", &array_value) == SUCCESS) { intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value)); while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) { SEPARATE_ZVAL(entry); convert_to_string_ex(entry); MAKE_STD_ZVAL(new_string); ZVAL_LONG(new_string,1); zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL); zend_hash_move_forward(Z_ARRVAL_P(array_value)); } intern->registerPhpFunctions = 2; RETURN_TRUE; } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == SUCCESS) { intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); MAKE_STD_ZVAL(new_string); ZVAL_LONG(new_string,1); zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL); intern->registerPhpFunctions = 2; } else { intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); intern->registerPhpFunctions = 1; } } /* }}} end dom_xpath_register_php_functions'],each:["array each(array arr)","Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element"],easter_date:["int easter_date([int year])","Return the timestamp of midnight on Easter of a given year (defaults to current year)"],easter_days:["int easter_days([int year, [int method]])","Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)"],echo:["void echo(string arg1 [, string ...])","Output one or more strings"],empty:["bool empty( mixed var )","Determine whether a variable is empty"],enchant_broker_describe:["array enchant_broker_describe(resource broker)","Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()"],enchant_broker_dict_exists:["bool enchant_broker_dict_exists(resource broker, string tag)","Whether a dictionary exists or not. Using non-empty tag"],enchant_broker_free:["boolean enchant_broker_free(resource broker)","Destroys the broker object and its dictionnaries"],enchant_broker_free_dict:["resource enchant_broker_free_dict(resource dict)","Free the dictionary resource"],enchant_broker_get_dict_path:["string enchant_broker_get_dict_path(resource broker, int dict_type)","Get the directory path for a given backend, works with ispell and myspell"],enchant_broker_get_error:["string enchant_broker_get_error(resource broker)","Returns the last error of the broker"],enchant_broker_init:["resource enchant_broker_init()","create a new broker object capable of requesting"],enchant_broker_list_dicts:["string enchant_broker_list_dicts(resource broker)","Lists the dictionaries available for the given broker"],enchant_broker_request_dict:["resource enchant_broker_request_dict(resource broker, string tag)",'create a new dictionary using tag, the non-empty language tag you wish to request a dictionary for ("en_US", "de_DE", ...)'],enchant_broker_request_pwl_dict:["resource enchant_broker_request_pwl_dict(resource broker, string filename)","creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call."],enchant_broker_set_dict_path:["bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)","Set the directory path for a given backend, works with ispell and myspell"],enchant_broker_set_ordering:["bool enchant_broker_set_ordering(resource broker, string tag, string ordering)","Declares a preference of dictionaries to use for the language described/referred to by 'tag'. The ordering is a comma delimited list of provider names. As a special exception, the \"*\" tag can be used as a language tag to declare a default ordering for any language that does not explictly declare an ordering."],enchant_dict_add_to_personal:["void enchant_dict_add_to_personal(resource dict, string word)","add 'word' to personal word list"],enchant_dict_add_to_session:["void enchant_dict_add_to_session(resource dict, string word)","add 'word' to this spell-checking session"],enchant_dict_check:["bool enchant_dict_check(resource dict, string word)","If the word is correctly spelled return true, otherwise return false"],enchant_dict_describe:["array enchant_dict_describe(resource dict)","Describes an individual dictionary 'dict'"],enchant_dict_get_error:["string enchant_dict_get_error(resource dict)","Returns the last error of the current spelling-session"],enchant_dict_is_in_session:["bool enchant_dict_is_in_session(resource dict, string word)","whether or not 'word' exists in this spelling-session"],enchant_dict_quick_check:["bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])","If the word is correctly spelled return true, otherwise return false, if suggestions variable is provided, fill it with spelling alternatives."],enchant_dict_store_replacement:["void enchant_dict_store_replacement(resource dict, string mis, string cor)","add a correction for 'mis' using 'cor'. Notes that you replaced @mis with @cor, so it's possibly more likely that future occurrences of @mis will be replaced with @cor. So it might bump @cor up in the suggestion list."],enchant_dict_suggest:["array enchant_dict_suggest(resource dict, string word)","Will return a list of values if any of those pre-conditions are not met."],end:["mixed end(array array_arg)","Advances array argument's internal pointer to the last element and return it"],ereg:["int ereg(string pattern, string string [, array registers])","Regular expression match"],ereg_replace:["string ereg_replace(string pattern, string replacement, string string)","Replace regular expression"],eregi:["int eregi(string pattern, string string [, array registers])","Case-insensitive regular expression match"],eregi_replace:["string eregi_replace(string pattern, string replacement, string string)","Case insensitive replace regular expression"],error_get_last:["array error_get_last()","Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet."],error_log:["bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])","Send an error message somewhere"],error_reporting:["int error_reporting([int new_error_level])","Return the current error_reporting level, and if an argument was passed - change to the new level"],escapeshellarg:["string escapeshellarg(string arg)","Quote and escape an argument for use in a shell command"],escapeshellcmd:["string escapeshellcmd(string command)","Escape shell metacharacters"],exec:["string exec(string command [, array &output [, int &return_value]])","Execute an external program"],exif_imagetype:["int exif_imagetype(string imagefile)","Get the type of an image"],exif_read_data:["array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])","Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails"],exif_tagname:["string exif_tagname(index)","Get headername for index or false if not defined"],exif_thumbnail:["string exif_thumbnail(string filename [, &width, &height [, &imagetype]])","Reads the embedded thumbnail"],exit:["void exit([mixed status])","Output a message and terminate the current script"],exp:["float exp(float number)","Returns e raised to the power of the number"],explode:["array explode(string separator, string str [, int limit])","Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned."],expm1:["float expm1(float number)","Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero"],extension_loaded:["bool extension_loaded(string extension_name)","Returns true if the named extension is loaded"],extract:["int extract(array var_array [, int extract_type [, string prefix]])","Imports variables into symbol table from an array"],ezmlm_hash:["int ezmlm_hash(string addr)","Calculate EZMLM list hash value."],fclose:["bool fclose(resource fp)","Close an open file pointer"],feof:["bool feof(resource fp)","Test for end-of-file on a file pointer"],fflush:["bool fflush(resource fp)","Flushes output"],fgetc:["string fgetc(resource fp)","Get a character from file pointer"],fgetcsv:["array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])","Get line from file pointer and parse for CSV fields"],fgets:["string fgets(resource fp[, int length])","Get a line from file pointer"],fgetss:["string fgetss(resource fp [, int length [, string allowable_tags]])","Get a line from file pointer and strip HTML tags"],file:["array file(string filename [, int flags[, resource context]])","Read entire file into an array"],file_exists:["bool file_exists(string filename)","Returns true if filename exists"],file_get_contents:["string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])","Read the entire file into a string"],file_put_contents:["int file_put_contents(string file, mixed data [, int flags [, resource context]])","Write/Create a file with contents data and return the number of bytes written"],fileatime:["int fileatime(string filename)","Get last access time of file"],filectime:["int filectime(string filename)","Get inode modification time of file"],filegroup:["int filegroup(string filename)","Get file group"],fileinode:["int fileinode(string filename)","Get file inode"],filemtime:["int filemtime(string filename)","Get last modification time of file"],fileowner:["int fileowner(string filename)","Get file owner"],fileperms:["int fileperms(string filename)","Get file permissions"],filesize:["int filesize(string filename)","Get file size"],filetype:["string filetype(string filename)","Get file type"],filter_has_var:["mixed filter_has_var(constant type, string variable_name)","* Returns true if the variable with the name 'name' exists in source."],filter_input:["mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])","* Returns the filtered variable 'name'* from source `type`."],filter_input_array:["mixed filter_input_array(constant type, [, mixed options]])","* Returns an array with all arguments defined in 'definition'."],filter_var:["mixed filter_var(mixed variable [, long filter [, mixed options]])","* Returns the filtered version of the vriable."],filter_var_array:["mixed filter_var_array(array data, [, mixed options]])","* Returns an array with all arguments defined in 'definition'."],finfo_buffer:["string finfo_buffer(resource finfo, char *string [, int options [, resource context]])","Return infromation about a string buffer."],finfo_close:["resource finfo_close(resource finfo)","Close fileinfo resource."],finfo_file:["string finfo_file(resource finfo, char *file_name [, int options [, resource context]])","Return information about a file."],finfo_open:["resource finfo_open([int options [, string arg]])","Create a new fileinfo resource."],finfo_set_flags:["bool finfo_set_flags(resource finfo, int options)","Set libmagic configuration options."],floatval:["float floatval(mixed var)","Get the float value of a variable"],flock:["bool flock(resource fp, int operation [, int &wouldblock])","Portable file locking"],floor:["float floor(float number)","Returns the next lowest integer value from the number"],flush:["void flush(void)","Flush the output buffer"],fmod:["float fmod(float x, float y)","Returns the remainder of dividing x by y as a float"],fnmatch:["bool fnmatch(string pattern, string filename [, int flags])","Match filename against pattern"],fopen:["resource fopen(string filename, string mode [, bool use_include_path [, resource context]])","Open a file or a URL and return a file pointer"],forward_static_call:["mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])","Call a user function which is the first parameter"],fpassthru:["int fpassthru(resource fp)","Output all remaining data from a file pointer"],fprintf:["int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])","Output a formatted string into a stream"],fputcsv:["int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])","Format line as CSV and write to file pointer"],fread:["string fread(resource fp, int length)","Binary-safe file read"],frenchtojd:["int frenchtojd(int month, int day, int year)","Converts a french republic calendar date to julian day count"],fscanf:["mixed fscanf(resource stream, string format [, string ...])","Implements a mostly ANSI compatible fscanf()"],fseek:["int fseek(resource fp, int offset [, int whence])","Seek on a file pointer"],fsockopen:["resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])","Open Internet or Unix domain socket connection"],fstat:["array fstat(resource fp)","Stat() on a filehandle"],ftell:["int ftell(resource fp)","Get file pointer's read/write position"],ftok:["int ftok(string pathname, string proj)","Convert a pathname and a project identifier to a System V IPC key"],ftp_alloc:["bool ftp_alloc(resource stream, int size[, &response])","Attempt to allocate space on the remote FTP server"],ftp_cdup:["bool ftp_cdup(resource stream)","Changes to the parent directory"],ftp_chdir:["bool ftp_chdir(resource stream, string directory)","Changes directories"],ftp_chmod:["int ftp_chmod(resource stream, int mode, string filename)","Sets permissions on a file"],ftp_close:["bool ftp_close(resource stream)","Closes the FTP stream"],ftp_connect:["resource ftp_connect(string host [, int port [, int timeout]])","Opens a FTP stream"],ftp_delete:["bool ftp_delete(resource stream, string file)","Deletes a file"],ftp_exec:["bool ftp_exec(resource stream, string command)","Requests execution of a program on the FTP server"],ftp_fget:["bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])","Retrieves a file from the FTP server and writes it to an open file"],ftp_fput:["bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])","Stores a file from an open file to the FTP server"],ftp_get:["bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])","Retrieves a file from the FTP server and writes it to a local file"],ftp_get_option:["mixed ftp_get_option(resource stream, int option)","Gets an FTP option"],ftp_login:["bool ftp_login(resource stream, string username, string password)","Logs into the FTP server"],ftp_mdtm:["int ftp_mdtm(resource stream, string filename)","Returns the last modification time of the file, or -1 on error"],ftp_mkdir:["string ftp_mkdir(resource stream, string directory)","Creates a directory and returns the absolute path for the new directory or false on error"],ftp_nb_continue:["int ftp_nb_continue(resource stream)","Continues retrieving/sending a file nbronously"],ftp_nb_fget:["int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])","Retrieves a file from the FTP server asynchronly and writes it to an open file"],ftp_nb_fput:["int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])","Stores a file from an open file to the FTP server nbronly"],ftp_nb_get:["int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])","Retrieves a file from the FTP server nbhronly and writes it to a local file"],ftp_nb_put:["int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])","Stores a file on the FTP server"],ftp_nlist:["array ftp_nlist(resource stream, string directory)","Returns an array of filenames in the given directory"],ftp_pasv:["bool ftp_pasv(resource stream, bool pasv)","Turns passive mode on or off"],ftp_put:["bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])","Stores a file on the FTP server"],ftp_pwd:["string ftp_pwd(resource stream)","Returns the present working directory"],ftp_raw:["array ftp_raw(resource stream, string command)","Sends a literal command to the FTP server"],ftp_rawlist:["array ftp_rawlist(resource stream, string directory [, bool recursive])","Returns a detailed listing of a directory as an array of output lines"],ftp_rename:["bool ftp_rename(resource stream, string src, string dest)","Renames the given file to a new path"],ftp_rmdir:["bool ftp_rmdir(resource stream, string directory)","Removes a directory"],ftp_set_option:["bool ftp_set_option(resource stream, int option, mixed value)","Sets an FTP option"],ftp_site:["bool ftp_site(resource stream, string cmd)","Sends a SITE command to the server"],ftp_size:["int ftp_size(resource stream, string filename)","Returns the size of the file, or -1 on error"],ftp_ssl_connect:["resource ftp_ssl_connect(string host [, int port [, int timeout]])","Opens a FTP-SSL stream"],ftp_systype:["string ftp_systype(resource stream)","Returns the system type identifier"],ftruncate:["bool ftruncate(resource fp, int size)","Truncate file to 'size' length"],func_get_arg:["mixed func_get_arg(int arg_num)","Get the $arg_num'th argument that was passed to the function"],func_get_args:["array func_get_args()","Get an array of the arguments that were passed to the function"],func_num_args:["int func_num_args(void)","Get the number of arguments that were passed to the function"],"function ":["",""],"foreach ":["",""],function_exists:["bool function_exists(string function_name)","Checks if the function exists"],fwrite:["int fwrite(resource fp, string str [, int length])","Binary-safe file write"],gc_collect_cycles:["int gc_collect_cycles(void)","Forces collection of any existing garbage cycles. Returns number of freed zvals"],gc_disable:["void gc_disable(void)","Deactivates the circular reference collector"],gc_enable:["void gc_enable(void)","Activates the circular reference collector"],gc_enabled:["void gc_enabled(void)","Returns status of the circular reference collector"],gd_info:["array gd_info()",""],getKeywords:["static array getKeywords(string $locale) {","* return an associative array containing keyword-value * pairs for this locale. The keys are keys to the array (doh!) * }}}"],get_browser:["mixed get_browser([string browser_name [, bool return_array]])","Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array."],get_called_class:["string get_called_class()",'Retrieves the "Late Static Binding" class name'],get_cfg_var:["mixed get_cfg_var(string option_name)","Get the value of a PHP configuration option"],get_class:["string get_class([object object])","Retrieves the class name"],get_class_methods:["array get_class_methods(mixed class)","Returns an array of method names for class or class instance."],get_class_vars:["array get_class_vars(string class_name)","Returns an array of default properties of the class."],get_current_user:["string get_current_user(void)","Get the name of the owner of the current PHP script"],get_declared_classes:["array get_declared_classes()","Returns an array of all declared classes."],get_declared_interfaces:["array get_declared_interfaces()","Returns an array of all declared interfaces."],get_defined_constants:["array get_defined_constants([bool categorize])","Return an array containing the names and values of all defined constants"],get_defined_functions:["array get_defined_functions(void)","Returns an array of all defined functions"],get_defined_vars:["array get_defined_vars(void)","Returns an associative array of names and values of all currently defined variable names (variables in the current scope)"],get_display_language:["static string get_display_language($locale[, $in_locale = null])","* gets the language for the $locale in $in_locale or default_locale"],get_display_name:["static string get_display_name($locale[, $in_locale = null])","* gets the name for the $locale in $in_locale or default_locale"],get_display_region:["static string get_display_region($locale, $in_locale = null)","* gets the region for the $locale in $in_locale or default_locale"],get_display_script:["static string get_display_script($locale, $in_locale = null)","* gets the script for the $locale in $in_locale or default_locale"],get_extension_funcs:["array get_extension_funcs(string extension_name)","Returns an array with the names of functions belonging to the named extension"],get_headers:["array get_headers(string url[, int format])","fetches all the headers sent by the server in response to a HTTP request"],get_html_translation_table:["array get_html_translation_table([int table [, int quote_style]])","Returns the internal translation table used by htmlspecialchars and htmlentities"],get_include_path:["string get_include_path()","Get the current include_path configuration option"],get_included_files:["array get_included_files(void)","Returns an array with the file names that were include_once()'d"],get_loaded_extensions:["array get_loaded_extensions([bool zend_extensions])","Return an array containing names of loaded extensions"],get_magic_quotes_gpc:["int get_magic_quotes_gpc(void)","Get the current active configuration setting of magic_quotes_gpc"],get_magic_quotes_runtime:["int get_magic_quotes_runtime(void)","Get the current active configuration setting of magic_quotes_runtime"],get_meta_tags:["array get_meta_tags(string filename [, bool use_include_path])","Extracts all meta tag content attributes from a file and returns an array"],get_object_vars:["array get_object_vars(object obj)","Returns an array of object properties"],get_parent_class:["string get_parent_class([mixed object])","Retrieves the parent class name for object or class or current scope."],get_resource_type:["string get_resource_type(resource res)","Get the resource type name for a given resource"],getallheaders:["array getallheaders(void)",""],getcwd:["mixed getcwd(void)","Gets the current directory"],getdate:["array getdate([int timestamp])","Get date/time information"],getenv:["string getenv(string varname)","Get the value of an environment variable"],gethostbyaddr:["string gethostbyaddr(string ip_address)","Get the Internet host name corresponding to a given IP address"],gethostbyname:["string gethostbyname(string hostname)","Get the IP address corresponding to a given Internet host name"],gethostbynamel:["array gethostbynamel(string hostname)","Return a list of IP addresses that a given hostname resolves to."],gethostname:["string gethostname()","Get the host name of the current machine"],getimagesize:["array getimagesize(string imagefile [, array info])","Get the size of an image as 4-element array"],getlastmod:["int getlastmod(void)","Get time of last page modification"],getmygid:["int getmygid(void)","Get PHP script owner's GID"],getmyinode:["int getmyinode(void)","Get the inode of the current script being parsed"],getmypid:["int getmypid(void)","Get current process ID"],getmyuid:["int getmyuid(void)","Get PHP script owner's UID"],getopt:["array getopt(string options [, array longopts])","Get options from the command line argument list"],getprotobyname:["int getprotobyname(string name)","Returns protocol number associated with name as per /etc/protocols"],getprotobynumber:["string getprotobynumber(int proto)","Returns protocol name associated with protocol number proto"],getrandmax:["int getrandmax(void)","Returns the maximum value a random number can have"],getrusage:["array getrusage([int who])","Returns an array of usage statistics"],getservbyname:["int getservbyname(string service, string protocol)",'Returns port associated with service. Protocol must be "tcp" or "udp"'],getservbyport:["string getservbyport(int port, string protocol)",'Returns service name associated with port. Protocol must be "tcp" or "udp"'],gettext:["string gettext(string msgid)","Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist"],gettimeofday:["array gettimeofday([bool get_as_float])","Returns the current time as array"],gettype:["string gettype(mixed var)","Returns the type of the variable"],glob:["array glob(string pattern [, int flags])","Find pathnames matching a pattern"],gmdate:["string gmdate(string format [, long timestamp])","Format a GMT date/time"],gmmktime:["int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])","Get UNIX timestamp for a GMT date"],gmp_abs:["resource gmp_abs(resource a)","Calculates absolute value"],gmp_add:["resource gmp_add(resource a, resource b)","Add a and b"],gmp_and:["resource gmp_and(resource a, resource b)","Calculates logical AND of a and b"],gmp_clrbit:["void gmp_clrbit(resource &a, int index)","Clears bit in a"],gmp_cmp:["int gmp_cmp(resource a, resource b)","Compares two numbers"],gmp_com:["resource gmp_com(resource a)","Calculates one's complement of a"],gmp_div_q:["resource gmp_div_q(resource a, resource b [, int round])","Divide a by b, returns quotient only"],gmp_div_qr:["array gmp_div_qr(resource a, resource b [, int round])","Divide a by b, returns quotient and reminder"],gmp_div_r:["resource gmp_div_r(resource a, resource b [, int round])","Divide a by b, returns reminder only"],gmp_divexact:["resource gmp_divexact(resource a, resource b)","Divide a by b using exact division algorithm"],gmp_fact:["resource gmp_fact(int a)","Calculates factorial function"],gmp_gcd:["resource gmp_gcd(resource a, resource b)","Computes greatest common denominator (gcd) of a and b"],gmp_gcdext:["array gmp_gcdext(resource a, resource b)","Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)"],gmp_hamdist:["int gmp_hamdist(resource a, resource b)","Calculates hamming distance between a and b"],gmp_init:["resource gmp_init(mixed number [, int base])","Initializes GMP number"],gmp_intval:["int gmp_intval(resource gmpnumber)","Gets signed long value of GMP number"],gmp_invert:["resource gmp_invert(resource a, resource b)","Computes the inverse of a modulo b"],gmp_jacobi:["int gmp_jacobi(resource a, resource b)","Computes Jacobi symbol"],gmp_legendre:["int gmp_legendre(resource a, resource b)","Computes Legendre symbol"],gmp_mod:["resource gmp_mod(resource a, resource b)","Computes a modulo b"],gmp_mul:["resource gmp_mul(resource a, resource b)","Multiply a and b"],gmp_neg:["resource gmp_neg(resource a)","Negates a number"],gmp_nextprime:["resource gmp_nextprime(resource a)","Finds next prime of a"],gmp_or:["resource gmp_or(resource a, resource b)","Calculates logical OR of a and b"],gmp_perfect_square:["bool gmp_perfect_square(resource a)","Checks if a is an exact square"],gmp_popcount:["int gmp_popcount(resource a)","Calculates the population count of a"],gmp_pow:["resource gmp_pow(resource base, int exp)","Raise base to power exp"],gmp_powm:["resource gmp_powm(resource base, resource exp, resource mod)","Raise base to power exp and take result modulo mod"],gmp_prob_prime:["int gmp_prob_prime(resource a[, int reps])",'Checks if a is "probably prime"'],gmp_random:["resource gmp_random([int limiter])","Gets random number"],gmp_scan0:["int gmp_scan0(resource a, int start)","Finds first zero bit"],gmp_scan1:["int gmp_scan1(resource a, int start)","Finds first non-zero bit"],gmp_setbit:["void gmp_setbit(resource &a, int index[, bool set_clear])","Sets or clear bit in a"],gmp_sign:["int gmp_sign(resource a)","Gets the sign of the number"],gmp_sqrt:["resource gmp_sqrt(resource a)","Takes integer part of square root of a"],gmp_sqrtrem:["array gmp_sqrtrem(resource a)","Square root with remainder"],gmp_strval:["string gmp_strval(resource gmpnumber [, int base])","Gets string representation of GMP number"],gmp_sub:["resource gmp_sub(resource a, resource b)","Subtract b from a"],gmp_testbit:["bool gmp_testbit(resource a, int index)","Tests if bit is set in a"],gmp_xor:["resource gmp_xor(resource a, resource b)","Calculates logical exclusive OR of a and b"],gmstrftime:["string gmstrftime(string format [, int timestamp])","Format a GMT/UCT time/date according to locale settings"],grapheme_extract:["string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])","Function to extract a sequence of default grapheme clusters"],grapheme_stripos:["int grapheme_stripos(string haystack, string needle [, int offset ])","Find position of first occurrence of a string within another, ignoring case differences"],grapheme_stristr:["string grapheme_stristr(string haystack, string needle[, bool part])","Finds first occurrence of a string within another"],grapheme_strlen:["int grapheme_strlen(string str)","Get number of graphemes in a string"],grapheme_strpos:["int grapheme_strpos(string haystack, string needle [, int offset ])","Find position of first occurrence of a string within another"],grapheme_strripos:["int grapheme_strripos(string haystack, string needle [, int offset])","Find position of last occurrence of a string within another, ignoring case"],grapheme_strrpos:["int grapheme_strrpos(string haystack, string needle [, int offset])","Find position of last occurrence of a string within another"],grapheme_strstr:["string grapheme_strstr(string haystack, string needle[, bool part])","Finds first occurrence of a string within another"],grapheme_substr:["string grapheme_substr(string str, int start [, int length])","Returns part of a string"],gregoriantojd:["int gregoriantojd(int month, int day, int year)","Converts a gregorian calendar date to julian day count"],gzcompress:["string gzcompress(string data [, int level])","Gzip-compress a string"],gzdeflate:["string gzdeflate(string data [, int level])","Gzip-compress a string"],gzencode:["string gzencode(string data [, int level [, int encoding_mode]])","GZ encode a string"],gzfile:["array gzfile(string filename [, int use_include_path])","Read und uncompress entire .gz-file into an array"],gzinflate:["string gzinflate(string data [, int length])","Unzip a gzip-compressed string"],gzopen:["resource gzopen(string filename, string mode [, int use_include_path])","Open a .gz-file and return a .gz-file pointer"],gzuncompress:["string gzuncompress(string data [, int length])","Unzip a gzip-compressed string"],hash:["string hash(string algo, string data[, bool raw_output = false])","Generate a hash of a given input string Returns lowercase hexits by default"],hash_algos:["array hash_algos(void)","Return a list of registered hashing algorithms"],hash_copy:["resource hash_copy(resource context)","Copy hash resource"],hash_file:["string hash_file(string algo, string filename[, bool raw_output = false])","Generate a hash of a given file Returns lowercase hexits by default"],hash_final:["string hash_final(resource context[, bool raw_output=false])","Output resulting digest"],hash_hmac:["string hash_hmac(string algo, string data, string key[, bool raw_output = false])","Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default"],hash_hmac_file:["string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])","Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default"],hash_init:["resource hash_init(string algo[, int options, string key])","Initialize a hashing context"],hash_update:["bool hash_update(resource context, string data)","Pump data into the hashing algorithm"],hash_update_file:["bool hash_update_file(resource context, string filename[, resource context])","Pump data into the hashing algorithm from a file"],hash_update_stream:["int hash_update_stream(resource context, resource handle[, integer length])","Pump data into the hashing algorithm from an open stream"],header:["void header(string header [, bool replace, [int http_response_code]])","Sends a raw HTTP header"],header_remove:["void header_remove([string name])","Removes an HTTP header previously set using header()"],headers_list:["array headers_list(void)","Return list of headers to be sent / already sent"],headers_sent:["bool headers_sent([string &$file [, int &$line]])","Returns true if headers have already been sent, false otherwise"],hebrev:["string hebrev(string str [, int max_chars_per_line])","Converts logical Hebrew text to visual text"],hebrevc:["string hebrevc(string str [, int max_chars_per_line])","Converts logical Hebrew text to visual text with newline conversion"],hexdec:["int hexdec(string hexadecimal_number)","Returns the decimal equivalent of the hexadecimal number"],highlight_file:["bool highlight_file(string file_name [, bool return] )","Syntax highlight a source file"],highlight_string:["bool highlight_string(string string [, bool return] )","Syntax highlight a string or optionally return it"],html_entity_decode:["string html_entity_decode(string string [, int quote_style][, string charset])","Convert all HTML entities to their applicable characters"],htmlentities:["string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])","Convert all applicable characters to HTML entities"],htmlspecialchars:["string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])","Convert special characters to HTML entities"],htmlspecialchars_decode:["string htmlspecialchars_decode(string string [, int quote_style])","Convert special HTML entities back to characters"],http_build_query:["string http_build_query(mixed formdata [, string prefix [, string arg_separator]])","Generates a form-encoded query string from an associative array or object."],hypot:["float hypot(float num1, float num2)","Returns sqrt(num1*num1 + num2*num2)"],ibase_add_user:["bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])","Add a user to security database"],ibase_affected_rows:["int ibase_affected_rows( [ resource link_identifier ] )","Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement"],ibase_backup:["mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])","Initiates a backup task in the service manager and returns immediately"],ibase_blob_add:["bool ibase_blob_add(resource blob_handle, string data)","Add data into created blob"],ibase_blob_cancel:["bool ibase_blob_cancel(resource blob_handle)","Cancel creating blob"],ibase_blob_close:["string ibase_blob_close(resource blob_handle)","Close blob"],ibase_blob_create:["resource ibase_blob_create([resource link_identifier])","Create blob for adding data"],ibase_blob_echo:["bool ibase_blob_echo([ resource link_identifier, ] string blob_id)","Output blob contents to browser"],ibase_blob_get:["string ibase_blob_get(resource blob_handle, int len)","Get len bytes data from open blob"],ibase_blob_import:["string ibase_blob_import([ resource link_identifier, ] resource file)","Create blob, copy file in it, and close it"],ibase_blob_info:["array ibase_blob_info([ resource link_identifier, ] string blob_id)","Return blob length and other useful info"],ibase_blob_open:["resource ibase_blob_open([ resource link_identifier, ] string blob_id)","Open blob for retrieving data parts"],ibase_close:["bool ibase_close([resource link_identifier])","Close an InterBase connection"],ibase_commit:["bool ibase_commit( resource link_identifier )","Commit transaction"],ibase_commit_ret:["bool ibase_commit_ret( resource link_identifier )","Commit transaction and retain the transaction context"],ibase_connect:["resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])","Open a connection to an InterBase database"],ibase_db_info:["string ibase_db_info(resource service_handle, string db, int action [, int argument])","Request statistics about a database"],ibase_delete_user:["bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])","Delete a user from security database"],ibase_drop_db:["bool ibase_drop_db([resource link_identifier])","Drop an InterBase database"],ibase_errcode:["int ibase_errcode(void)","Return error code"],ibase_errmsg:["string ibase_errmsg(void)","Return error message"],ibase_execute:["mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])","Execute a previously prepared query"],ibase_fetch_assoc:["array ibase_fetch_assoc(resource result [, int fetch_flags])","Fetch a row from the results of a query"],ibase_fetch_object:["object ibase_fetch_object(resource result [, int fetch_flags])","Fetch a object from the results of a query"],ibase_fetch_row:["array ibase_fetch_row(resource result [, int fetch_flags])","Fetch a row from the results of a query"],ibase_field_info:["array ibase_field_info(resource query_result, int field_number)","Get information about a field"],ibase_free_event_handler:["bool ibase_free_event_handler(resource event)","Frees the event handler set by ibase_set_event_handler()"],ibase_free_query:["bool ibase_free_query(resource query)","Free memory used by a query"],ibase_free_result:["bool ibase_free_result(resource result)","Free the memory used by a result"],ibase_gen_id:["int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])","Increments the named generator and returns its new value"],ibase_maintain_db:["bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])","Execute a maintenance command on the database server"],ibase_modify_user:["bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])","Modify a user in security database"],ibase_name_result:["bool ibase_name_result(resource result, string name)","Assign a name to a result for use with ... WHERE CURRENT OF statements"],ibase_num_fields:["int ibase_num_fields(resource query_result)","Get the number of fields in result"],ibase_num_params:["int ibase_num_params(resource query)","Get the number of params in a prepared query"],ibase_num_rows:["int ibase_num_rows( resource result_identifier )","Return the number of rows that are available in a result"],ibase_param_info:["array ibase_param_info(resource query, int field_number)","Get information about a parameter"],ibase_pconnect:["resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])","Open a persistent connection to an InterBase database"],ibase_prepare:["resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])","Prepare a query for later execution"],ibase_query:["mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])","Execute a query"],ibase_restore:["mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])","Initiates a restore task in the service manager and returns immediately"],ibase_rollback:["bool ibase_rollback( resource link_identifier )","Rollback transaction"],ibase_rollback_ret:["bool ibase_rollback_ret( resource link_identifier )","Rollback transaction and retain the transaction context"],ibase_server_info:["string ibase_server_info(resource service_handle, int action)","Request information about a database server"],ibase_service_attach:["resource ibase_service_attach(string host, string dba_username, string dba_password)","Connect to the service manager"],ibase_service_detach:["bool ibase_service_detach(resource service_handle)","Disconnect from the service manager"],ibase_set_event_handler:["resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])","Register the callback for handling each of the named events"],ibase_trans:["resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])","Start a transaction over one or several databases"],ibase_wait_event:["string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])","Waits for any one of the passed Interbase events to be posted by the database, and returns its name"],iconv:["string iconv(string in_charset, string out_charset, string str)","Returns str converted to the out_charset character set"],iconv_get_encoding:["mixed iconv_get_encoding([string type])","Get internal encoding and output encoding for ob_iconv_handler()"],iconv_mime_decode:["string iconv_mime_decode(string encoded_string [, int mode, string charset])","Decodes a mime header field"],iconv_mime_decode_headers:["array iconv_mime_decode_headers(string headers [, int mode, string charset])","Decodes multiple mime header fields"],iconv_mime_encode:["string iconv_mime_encode(string field_name, string field_value [, array preference])","Composes a mime header field with field_name and field_value in a specified scheme"],iconv_set_encoding:["bool iconv_set_encoding(string type, string charset)","Sets internal encoding and output encoding for ob_iconv_handler()"],iconv_strlen:["int iconv_strlen(string str [, string charset])","Returns the character count of str"],iconv_strpos:["int iconv_strpos(string haystack, string needle [, int offset [, string charset]])","Finds position of first occurrence of needle within part of haystack beginning with offset"],iconv_strrpos:["int iconv_strrpos(string haystack, string needle [, string charset])","Finds position of last occurrence of needle within part of haystack beginning with offset"],iconv_substr:["string iconv_substr(string str, int offset, [int length, string charset])","Returns specified part of a string"],idate:["int idate(string format [, int timestamp])","Format a local time/date as integer"],idn_to_ascii:["int idn_to_ascii(string domain[, int options])","Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC"],idn_to_utf8:["int idn_to_utf8(string domain[, int options])","Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC"],ignore_user_abort:["int ignore_user_abort([string value])","Set whether we want to ignore a user abort event or not"],image2wbmp:["bool image2wbmp(resource im [, string filename [, int threshold]])","Output WBMP image to browser or file"],image_type_to_extension:["string image_type_to_extension(int imagetype [, bool include_dot])","Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype"],image_type_to_mime_type:["string image_type_to_mime_type(int imagetype)","Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype"],imagealphablending:["bool imagealphablending(resource im, bool on)","Turn alpha blending mode on or off for the given image"],imageantialias:["bool imageantialias(resource im, bool on)","Should antialiased functions used or not"],imagearc:["bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)","Draw a partial ellipse"],imagechar:["bool imagechar(resource im, int font, int x, int y, string c, int col)","Draw a character"],imagecharup:["bool imagecharup(resource im, int font, int x, int y, string c, int col)","Draw a character rotated 90 degrees counter-clockwise"],imagecolorallocate:["int imagecolorallocate(resource im, int red, int green, int blue)","Allocate a color for an image"],imagecolorallocatealpha:["int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)","Allocate a color with an alpha level. Works for true color and palette based images"],imagecolorat:["int imagecolorat(resource im, int x, int y)","Get the index of the color of a pixel"],imagecolorclosest:["int imagecolorclosest(resource im, int red, int green, int blue)","Get the index of the closest color to the specified color"],imagecolorclosestalpha:["int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)","Find the closest matching colour with alpha transparency"],imagecolorclosesthwb:["int imagecolorclosesthwb(resource im, int red, int green, int blue)","Get the index of the color which has the hue, white and blackness nearest to the given color"],imagecolordeallocate:["bool imagecolordeallocate(resource im, int index)","De-allocate a color for an image"],imagecolorexact:["int imagecolorexact(resource im, int red, int green, int blue)","Get the index of the specified color"],imagecolorexactalpha:["int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)","Find exact match for colour with transparency"],imagecolormatch:["bool imagecolormatch(resource im1, resource im2)","Makes the colors of the palette version of an image more closely match the true color version"],imagecolorresolve:["int imagecolorresolve(resource im, int red, int green, int blue)","Get the index of the specified color or its closest possible alternative"],imagecolorresolvealpha:["int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)","Resolve/Allocate a colour with an alpha level. Works for true colour and palette based images"],imagecolorset:["void imagecolorset(resource im, int col, int red, int green, int blue)","Set the color for the specified palette index"],imagecolorsforindex:["array imagecolorsforindex(resource im, int col)","Get the colors for an index"],imagecolorstotal:["int imagecolorstotal(resource im)","Find out the number of colors in an image's palette"],imagecolortransparent:["int imagecolortransparent(resource im [, int col])","Define a color as transparent"],imageconvolution:["resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)","Apply a 3x3 convolution matrix, using coefficient div and offset"],imagecopy:["bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)","Copy part of an image"],imagecopymerge:["bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)","Merge one part of an image with another"],imagecopymergegray:["bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)","Merge one part of an image with another"],imagecopyresampled:["bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)","Copy and resize part of an image using resampling to help ensure clarity"],imagecopyresized:["bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)","Copy and resize part of an image"],imagecreate:["resource imagecreate(int x_size, int y_size)","Create a new image"],imagecreatefromgd:["resource imagecreatefromgd(string filename)","Create a new image from GD file or URL"],imagecreatefromgd2:["resource imagecreatefromgd2(string filename)","Create a new image from GD2 file or URL"],imagecreatefromgd2part:["resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)","Create a new image from a given part of GD2 file or URL"],imagecreatefromgif:["resource imagecreatefromgif(string filename)","Create a new image from GIF file or URL"],imagecreatefromjpeg:["resource imagecreatefromjpeg(string filename)","Create a new image from JPEG file or URL"],imagecreatefrompng:["resource imagecreatefrompng(string filename)","Create a new image from PNG file or URL"],imagecreatefromstring:["resource imagecreatefromstring(string image)","Create a new image from the image stream in the string"],imagecreatefromwbmp:["resource imagecreatefromwbmp(string filename)","Create a new image from WBMP file or URL"],imagecreatefromxbm:["resource imagecreatefromxbm(string filename)","Create a new image from XBM file or URL"],imagecreatefromxpm:["resource imagecreatefromxpm(string filename)","Create a new image from XPM file or URL"],imagecreatetruecolor:["resource imagecreatetruecolor(int x_size, int y_size)","Create a new true color image"],imagedashedline:["bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)","Draw a dashed line"],imagedestroy:["bool imagedestroy(resource im)","Destroy an image"],imageellipse:["bool imageellipse(resource im, int cx, int cy, int w, int h, int color)","Draw an ellipse"],imagefill:["bool imagefill(resource im, int x, int y, int col)","Flood fill"],imagefilledarc:["bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)","Draw a filled partial ellipse"],imagefilledellipse:["bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)","Draw an ellipse"],imagefilledpolygon:["bool imagefilledpolygon(resource im, array point, int num_points, int col)","Draw a filled polygon"],imagefilledrectangle:["bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)","Draw a filled rectangle"],imagefilltoborder:["bool imagefilltoborder(resource im, int x, int y, int border, int col)","Flood fill to specific color"],imagefilter:["bool imagefilter(resource src_im, int filtertype, [args] )","Applies Filter an image using a custom angle"],imagefontheight:["int imagefontheight(int font)","Get font height"],imagefontwidth:["int imagefontwidth(int font)","Get font width"],imageftbbox:["array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])","Give the bounding box of a text using fonts via freetype2"],imagefttext:["array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])","Write text to the image using fonts via freetype2"],imagegammacorrect:["bool imagegammacorrect(resource im, float inputgamma, float outputgamma)","Apply a gamma correction to a GD image"],imagegd:["bool imagegd(resource im [, string filename])","Output GD image to browser or file"],imagegd2:["bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])","Output GD2 image to browser or file"],imagegif:["bool imagegif(resource im [, string filename])","Output GIF image to browser or file"],imagegrabscreen:["resource imagegrabscreen()","Grab a screenshot"],imagegrabwindow:["resource imagegrabwindow(int window_handle [, int client_area])","Grab a window or its client area using a windows handle (HWND property in COM instance)"],imageinterlace:["int imageinterlace(resource im [, int interlace])","Enable or disable interlace"],imageistruecolor:["bool imageistruecolor(resource im)","return true if the image uses truecolor"],imagejpeg:["bool imagejpeg(resource im [, string filename [, int quality]])","Output JPEG image to browser or file"],imagelayereffect:["bool imagelayereffect(resource im, int effect)","Set the alpha blending flag to use the bundled libgd layering effects"],imageline:["bool imageline(resource im, int x1, int y1, int x2, int y2, int col)","Draw a line"],imageloadfont:["int imageloadfont(string filename)","Load a new font"],imagepalettecopy:["void imagepalettecopy(resource dst, resource src)","Copy the palette from the src image onto the dst image"],imagepng:["bool imagepng(resource im [, string filename])","Output PNG image to browser or file"],imagepolygon:["bool imagepolygon(resource im, array point, int num_points, int col)","Draw a polygon"],imagepsbbox:["array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])","Return the bounding box needed by a string if rasterized"],imagepscopyfont:["int imagepscopyfont(int font_index)","Make a copy of a font for purposes like extending or reenconding"],imagepsencodefont:["bool imagepsencodefont(resource font_index, string filename)","To change a fonts character encoding vector"],imagepsextendfont:["bool imagepsextendfont(resource font_index, float extend)","Extend or or condense (if extend < 1) a font"],imagepsfreefont:["bool imagepsfreefont(resource font_index)","Free memory used by a font"],imagepsloadfont:["resource imagepsloadfont(string pathname)","Load a new font from specified file"],imagepsslantfont:["bool imagepsslantfont(resource font_index, float slant)","Slant a font"],imagepstext:["array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])","Rasterize a string over an image"],imagerectangle:["bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)","Draw a rectangle"],imagerotate:["resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])","Rotate an image using a custom angle"],imagesavealpha:["bool imagesavealpha(resource im, bool on)","Include alpha channel to a saved image"],imagesetbrush:["bool imagesetbrush(resource image, resource brush)",'Set the brush image to $brush when filling $image with the "IMG_COLOR_BRUSHED" color'],imagesetpixel:["bool imagesetpixel(resource im, int x, int y, int col)","Set a single pixel"],imagesetstyle:["bool imagesetstyle(resource im, array styles)","Set the line drawing styles for use with imageline and IMG_COLOR_STYLED."],imagesetthickness:["bool imagesetthickness(resource im, int thickness)","Set line thickness for drawing lines, ellipses, rectangles, polygons etc."],imagesettile:["bool imagesettile(resource image, resource tile)",'Set the tile image to $tile when filling $image with the "IMG_COLOR_TILED" color'],imagestring:["bool imagestring(resource im, int font, int x, int y, string str, int col)","Draw a string horizontally"],imagestringup:["bool imagestringup(resource im, int font, int x, int y, string str, int col)","Draw a string vertically - rotated 90 degrees counter-clockwise"],imagesx:["int imagesx(resource im)","Get image width"],imagesy:["int imagesy(resource im)","Get image height"],imagetruecolortopalette:["void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)","Convert a true colour image to a palette based image with a number of colours, optionally using dithering."],imagettfbbox:["array imagettfbbox(float size, float angle, string font_file, string text)","Give the bounding box of a text using TrueType fonts"],imagettftext:["array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)","Write text to the image using a TrueType font"],imagetypes:["int imagetypes(void)","Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM"],imagewbmp:["bool imagewbmp(resource im [, string filename, [, int foreground]])","Output WBMP image to browser or file"],imagexbm:["int imagexbm(int im, string filename [, int foreground])","Output XBM image to browser or file"],imap_8bit:["string imap_8bit(string text)","Convert an 8-bit string to a quoted-printable string"],imap_alerts:["array imap_alerts(void)","Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called."],imap_append:["bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])","Append a new message to a specified mailbox"],imap_base64:["string imap_base64(string text)","Decode BASE64 encoded text"],imap_binary:["string imap_binary(string text)","Convert an 8bit string to a base64 string"],imap_body:["string imap_body(resource stream_id, int msg_no [, int options])","Read the message body"],imap_bodystruct:["object imap_bodystruct(resource stream_id, int msg_no, string section)","Read the structure of a specified body section of a specific message"],imap_check:["object imap_check(resource stream_id)","Get mailbox properties"],imap_clearflag_full:["bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])","Clears flags on messages"],imap_close:["bool imap_close(resource stream_id [, int options])","Close an IMAP stream"],imap_createmailbox:["bool imap_createmailbox(resource stream_id, string mailbox)","Create a new mailbox"],imap_delete:["bool imap_delete(resource stream_id, int msg_no [, int options])","Mark a message for deletion"],imap_deletemailbox:["bool imap_deletemailbox(resource stream_id, string mailbox)","Delete a mailbox"],imap_errors:["array imap_errors(void)","Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called."],imap_expunge:["bool imap_expunge(resource stream_id)","Permanently delete all messages marked for deletion"],imap_fetch_overview:["array imap_fetch_overview(resource stream_id, string sequence [, int options])","Read an overview of the information in the headers of the given message sequence"],imap_fetchbody:["string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])","Get a specific body section"],imap_fetchheader:["string imap_fetchheader(resource stream_id, int msg_no [, int options])","Get the full unfiltered header for a message"],imap_fetchstructure:["object imap_fetchstructure(resource stream_id, int msg_no [, int options])","Read the full structure of a message"],imap_gc:["bool imap_gc(resource stream_id, int flags)","This function garbage collects (purges) the cache of entries of a specific type."],imap_get_quota:["array imap_get_quota(resource stream_id, string qroot)","Returns the quota set to the mailbox account qroot"],imap_get_quotaroot:["array imap_get_quotaroot(resource stream_id, string mbox)","Returns the quota set to the mailbox account mbox"],imap_getacl:["array imap_getacl(resource stream_id, string mailbox)","Gets the ACL for a given mailbox"],imap_getmailboxes:["array imap_getmailboxes(resource stream_id, string ref, string pattern)","Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter"],imap_getsubscribed:["array imap_getsubscribed(resource stream_id, string ref, string pattern)","Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()"],imap_headerinfo:["object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])","Read the headers of the message"],imap_headers:["array imap_headers(resource stream_id)","Returns headers for all messages in a mailbox"],imap_last_error:["string imap_last_error(void)","Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call."],imap_list:["array imap_list(resource stream_id, string ref, string pattern)","Read the list of mailboxes"],imap_listscan:["array imap_listscan(resource stream_id, string ref, string pattern, string content)","Read list of mailboxes containing a certain string"],imap_lsub:["array imap_lsub(resource stream_id, string ref, string pattern)","Return a list of subscribed mailboxes"],imap_mail:["bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])","Send an email message"],imap_mail_compose:["string imap_mail_compose(array envelope, array body)","Create a MIME message based on given envelope and body sections"],imap_mail_copy:["bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])","Copy specified message to a mailbox"],imap_mail_move:["bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])","Move specified message to a mailbox"],imap_mailboxmsginfo:["object imap_mailboxmsginfo(resource stream_id)","Returns info about the current mailbox"],imap_mime_header_decode:["array imap_mime_header_decode(string str)","Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'"],imap_msgno:["int imap_msgno(resource stream_id, int unique_msg_id)","Get the sequence number associated with a UID"],imap_mutf7_to_utf8:["string imap_mutf7_to_utf8(string in)","Decode a modified UTF-7 string to UTF-8"],imap_num_msg:["int imap_num_msg(resource stream_id)","Gives the number of messages in the current mailbox"],imap_num_recent:["int imap_num_recent(resource stream_id)","Gives the number of recent messages in current mailbox"],imap_open:["resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])","Open an IMAP stream to a mailbox"],imap_ping:["bool imap_ping(resource stream_id)","Check if the IMAP stream is still active"],imap_qprint:["string imap_qprint(string text)","Convert a quoted-printable string to an 8-bit string"],imap_renamemailbox:["bool imap_renamemailbox(resource stream_id, string old_name, string new_name)","Rename a mailbox"],imap_reopen:["bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])","Reopen an IMAP stream to a new mailbox"],imap_rfc822_parse_adrlist:["array imap_rfc822_parse_adrlist(string address_string, string default_host)","Parses an address string"],imap_rfc822_parse_headers:["object imap_rfc822_parse_headers(string headers [, string default_host])","Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()"],imap_rfc822_write_address:["string imap_rfc822_write_address(string mailbox, string host, string personal)","Returns a properly formatted email address given the mailbox, host, and personal info"],imap_savebody:['bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = ""[, int options = 0]])',"Save a specific body section to a file"],imap_search:["array imap_search(resource stream_id, string criteria [, int options [, string charset]])","Return a list of messages matching the given criteria"],imap_set_quota:["bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)","Will set the quota for qroot mailbox"],imap_setacl:["bool imap_setacl(resource stream_id, string mailbox, string id, string rights)","Sets the ACL for a given mailbox"],imap_setflag_full:["bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])","Sets flags on messages"],imap_sort:["array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])","Sort an array of message headers, optionally including only messages that meet specified criteria."],imap_status:["object imap_status(resource stream_id, string mailbox, int options)","Get status info from a mailbox"],imap_subscribe:["bool imap_subscribe(resource stream_id, string mailbox)","Subscribe to a mailbox"],imap_thread:["array imap_thread(resource stream_id [, int options])","Return threaded by REFERENCES tree"],imap_timeout:["mixed imap_timeout(int timeout_type [, int timeout])","Set or fetch imap timeout"],imap_uid:["int imap_uid(resource stream_id, int msg_no)","Get the unique message id associated with a standard sequential message number"],imap_undelete:["bool imap_undelete(resource stream_id, int msg_no [, int flags])","Remove the delete flag from a message"],imap_unsubscribe:["bool imap_unsubscribe(resource stream_id, string mailbox)","Unsubscribe from a mailbox"],imap_utf7_decode:["string imap_utf7_decode(string buf)","Decode a modified UTF-7 string"],imap_utf7_encode:["string imap_utf7_encode(string buf)","Encode a string in modified UTF-7"],imap_utf8:["string imap_utf8(string mime_encoded_text)","Convert a mime-encoded text to UTF-8"],imap_utf8_to_mutf7:["string imap_utf8_to_mutf7(string in)","Encode a UTF-8 string to modified UTF-7"],implode:["string implode([string glue,] array pieces)","Joins array elements placing glue string between items and return one string"],import_request_variables:["bool import_request_variables(string types [, string prefix])","Import GET/POST/Cookie variables into the global scope"],in_array:["bool in_array(mixed needle, array haystack [, bool strict])","Checks if the given value exists in the array"],include:["bool include(string path)","Includes and evaluates the specified file"],include_once:["bool include_once(string path)","Includes and evaluates the specified file"],inet_ntop:["string inet_ntop(string in_addr)","Converts a packed inet address to a human readable IP address string"],inet_pton:["string inet_pton(string ip_address)","Converts a human readable IP address to a packed binary string"],ini_get:["string ini_get(string varname)","Get a configuration option"],ini_get_all:["array ini_get_all([string extension[, bool details = true]])","Get all configuration options"],ini_restore:["void ini_restore(string varname)","Restore the value of a configuration option specified by varname"],ini_set:["string ini_set(string varname, string newvalue)","Set a configuration option, returns false on error and the old value of the configuration option on success"],interface_exists:["bool interface_exists(string classname [, bool autoload])","Checks if the class exists"],intl_error_name:["string intl_error_name()","* Return a string for a given error code. * The string will be the same as the name of the error code constant."],intl_get_error_code:["int intl_get_error_code()","* Get code of the last occured error."],intl_get_error_message:["string intl_get_error_message()","* Get text description of the last occured error."],intl_is_failure:["bool intl_is_failure()","* Check whether the given error code indicates a failure. * Returns true if it does, and false if the code * indicates success or a warning."],intval:["int intval(mixed var [, int base])","Get the integer value of a variable using the optional base for the conversion"],ip2long:["int ip2long(string ip_address)","Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address"],iptcembed:["array iptcembed(string iptcdata, string jpeg_file_name [, int spool])","Embed binary IPTC data into a JPEG image."],iptcparse:["array iptcparse(string iptcdata)","Parse binary IPTC-data into associative array"],is_a:["bool is_a(object object, string class_name)","Returns true if the object is of this class or has this class as one of its parents"],is_array:["bool is_array(mixed var)","Returns true if variable is an array"],is_bool:["bool is_bool(mixed var)","Returns true if variable is a boolean"],is_callable:["bool is_callable(mixed var [, bool syntax_only [, string callable_name]])","Returns true if var is callable."],is_dir:["bool is_dir(string filename)","Returns true if file is directory"],is_executable:["bool is_executable(string filename)","Returns true if file is executable"],is_file:["bool is_file(string filename)","Returns true if file is a regular file"],is_finite:["bool is_finite(float val)","Returns whether argument is finite"],is_float:["bool is_float(mixed var)","Returns true if variable is float point"],is_infinite:["bool is_infinite(float val)","Returns whether argument is infinite"],is_link:["bool is_link(string filename)","Returns true if file is symbolic link"],is_long:["bool is_long(mixed var)","Returns true if variable is a long (integer)"],is_nan:["bool is_nan(float val)","Returns whether argument is not a number"],is_null:["bool is_null(mixed var)","Returns true if variable is null"],is_numeric:["bool is_numeric(mixed value)","Returns true if value is a number or a numeric string"],is_object:["bool is_object(mixed var)","Returns true if variable is an object"],is_readable:["bool is_readable(string filename)","Returns true if file can be read"],is_resource:["bool is_resource(mixed var)","Returns true if variable is a resource"],is_scalar:["bool is_scalar(mixed value)","Returns true if value is a scalar"],is_string:["bool is_string(mixed var)","Returns true if variable is a string"],is_subclass_of:["bool is_subclass_of(object object, string class_name)","Returns true if the object has this class as one of its parents"],is_uploaded_file:["bool is_uploaded_file(string path)","Check if file was created by rfc1867 upload"],is_writable:["bool is_writable(string filename)","Returns true if file can be written"],isset:["bool isset(mixed var [, mixed var])","Determine whether a variable is set"],iterator_apply:["int iterator_apply(Traversable it, mixed function [, mixed params])","Calls a function for every element in an iterator"],iterator_count:["int iterator_count(Traversable it)","Count the elements in an iterator"],iterator_to_array:["array iterator_to_array(Traversable it [, bool use_keys = true])","Copy the iterator into an array"],jddayofweek:["mixed jddayofweek(int juliandaycount [, int mode])","Returns name or number of day of week from julian day count"],jdmonthname:["string jdmonthname(int juliandaycount, int mode)","Returns name of month for julian day count"],jdtofrench:["string jdtofrench(int juliandaycount)","Converts a julian day count to a french republic calendar date"],jdtogregorian:["string jdtogregorian(int juliandaycount)","Converts a julian day count to a gregorian calendar date"],jdtojewish:["string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])","Converts a julian day count to a jewish calendar date"],jdtojulian:["string jdtojulian(int juliandaycount)","Convert a julian day count to a julian calendar date"],jdtounix:["int jdtounix(int jday)","Convert Julian Day to UNIX timestamp"],jewishtojd:["int jewishtojd(int month, int day, int year)","Converts a jewish calendar date to a julian day count"],join:["string join(array src, string glue)","An alias for implode"],jpeg2wbmp:["bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)","Convert JPEG image to WBMP image"],json_decode:["mixed json_decode(string json [, bool assoc [, long depth]])","Decodes the JSON representation into a PHP value"],json_encode:["string json_encode(mixed data [, int options])","Returns the JSON representation of a value"],json_last_error:["int json_last_error()","Returns the error code of the last json_decode()."],juliantojd:["int juliantojd(int month, int day, int year)","Converts a julian calendar date to julian day count"],key:["mixed key(array array_arg)","Return the key of the element currently pointed to by the internal array pointer"],krsort:["bool krsort(array &array_arg [, int sort_flags])","Sort an array by key value in reverse order"],ksort:["bool ksort(array &array_arg [, int sort_flags])","Sort an array by key"],lcfirst:["string lcfirst(string str)","Make a string's first character lowercase"],lcg_value:["float lcg_value()","Returns a value from the combined linear congruential generator"],lchgrp:["bool lchgrp(string filename, mixed group)","Change symlink group"],ldap_8859_to_t61:["string ldap_8859_to_t61(string value)","Translate 8859 characters to t61 characters"],ldap_add:["bool ldap_add(resource link, string dn, array entry)","Add entries to LDAP directory"],ldap_bind:["bool ldap_bind(resource link [, string dn [, string password]])","Bind to LDAP directory"],ldap_compare:["bool ldap_compare(resource link, string dn, string attr, string value)","Determine if an entry has a specific value for one of its attributes"],ldap_connect:["resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])","Connect to an LDAP server"],ldap_count_entries:["int ldap_count_entries(resource link, resource result)","Count the number of entries in a search result"],ldap_delete:["bool ldap_delete(resource link, string dn)","Delete an entry from a directory"],ldap_dn2ufn:["string ldap_dn2ufn(string dn)","Convert DN to User Friendly Naming format"],ldap_err2str:["string ldap_err2str(int errno)","Convert error number to error string"],ldap_errno:["int ldap_errno(resource link)","Get the current ldap error number"],ldap_error:["string ldap_error(resource link)","Get the current ldap error string"],ldap_explode_dn:["array ldap_explode_dn(string dn, int with_attrib)","Splits DN into its component parts"],ldap_first_attribute:["string ldap_first_attribute(resource link, resource result_entry)","Return first attribute"],ldap_first_entry:["resource ldap_first_entry(resource link, resource result)","Return first result id"],ldap_first_reference:["resource ldap_first_reference(resource link, resource result)","Return first reference"],ldap_free_result:["bool ldap_free_result(resource result)","Free result memory"],ldap_get_attributes:["array ldap_get_attributes(resource link, resource result_entry)","Get attributes from a search result entry"],ldap_get_dn:["string ldap_get_dn(resource link, resource result_entry)","Get the DN of a result entry"],ldap_get_entries:["array ldap_get_entries(resource link, resource result)","Get all result entries"],ldap_get_option:["bool ldap_get_option(resource link, int option, mixed retval)","Get the current value of various session-wide parameters"],ldap_get_values_len:["array ldap_get_values_len(resource link, resource result_entry, string attribute)","Get all values with lengths from a result entry"],ldap_list:["resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])","Single-level search"],ldap_mod_add:["bool ldap_mod_add(resource link, string dn, array entry)","Add attribute values to current"],ldap_mod_del:["bool ldap_mod_del(resource link, string dn, array entry)","Delete attribute values"],ldap_mod_replace:["bool ldap_mod_replace(resource link, string dn, array entry)","Replace attribute values with new ones"],ldap_next_attribute:["string ldap_next_attribute(resource link, resource result_entry)","Get the next attribute in result"],ldap_next_entry:["resource ldap_next_entry(resource link, resource result_entry)","Get next result entry"],ldap_next_reference:["resource ldap_next_reference(resource link, resource reference_entry)","Get next reference"],ldap_parse_reference:["bool ldap_parse_reference(resource link, resource reference_entry, array referrals)","Extract information from reference entry"],ldap_parse_result:["bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)","Extract information from result"],ldap_read:["resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])","Read an entry"],ldap_rename:["bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);","Modify the name of an entry"],ldap_sasl_bind:["bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])","Bind to LDAP directory using SASL"],ldap_search:["resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])","Search LDAP tree under base_dn"],ldap_set_option:["bool ldap_set_option(resource link, int option, mixed newval)","Set the value of various session-wide parameters"],ldap_set_rebind_proc:["bool ldap_set_rebind_proc(resource link, string callback)","Set a callback function to do re-binds on referral chasing."],ldap_sort:["bool ldap_sort(resource link, resource result, string sortfilter)","Sort LDAP result entries"],ldap_start_tls:["bool ldap_start_tls(resource link)","Start TLS"],ldap_t61_to_8859:["string ldap_t61_to_8859(string value)","Translate t61 characters to 8859 characters"],ldap_unbind:["bool ldap_unbind(resource link)","Unbind from LDAP directory"],leak:["void leak(int num_bytes=3)","Cause an intentional memory leak, for testing/debugging purposes"],levenshtein:["int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])","Calculate Levenshtein distance between two strings"],libxml_clear_errors:["void libxml_clear_errors()","Clear last error from libxml"],libxml_disable_entity_loader:["bool libxml_disable_entity_loader([boolean disable])","Disable/Enable ability to load external entities"],libxml_get_errors:["object libxml_get_errors()","Retrieve array of errors"],libxml_get_last_error:["object libxml_get_last_error()","Retrieve last error from libxml"],libxml_set_streams_context:["void libxml_set_streams_context(resource streams_context)","Set the streams context for the next libxml document load or write"],libxml_use_internal_errors:["bool libxml_use_internal_errors([boolean use_errors])","Disable libxml errors and allow user to fetch error information as needed"],link:["int link(string target, string link)","Create a hard link"],linkinfo:["int linkinfo(string filename)","Returns the st_dev field of the UNIX C stat structure describing the link"],litespeed_request_headers:["array litespeed_request_headers(void)","Fetch all HTTP request headers"],litespeed_response_headers:["array litespeed_response_headers(void)","Fetch all HTTP response headers"],locale_accept_from_http:["string locale_accept_from_http(string $http_accept)",null],locale_canonicalize:["static string locale_canonicalize(Locale $loc, string $locale)","* @param string $locale The locale string to canonicalize"],locale_filter_matches:["boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])","* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm"],locale_get_all_variants:["static array locale_get_all_variants($locale)","* gets an array containing the list of variants, or null"],locale_get_default:["static string locale_get_default( )","Get default locale"],locale_get_keywords:["static array locale_get_keywords(string $locale) {","* return an associative array containing keyword-value * pairs for this locale. The keys are keys to the array (doh!)"],locale_get_primary_language:["static string locale_get_primary_language($locale)","* gets the primary language for the $locale"],locale_get_region:["static string locale_get_region($locale)","* gets the region for the $locale"],locale_get_script:["static string locale_get_script($locale)","* gets the script for the $locale"],locale_lookup:["string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])","* Searchs the items in $langtag for the best match to the language * range"],locale_set_default:["static string locale_set_default( string $locale )","Set default locale"],localeconv:["array localeconv(void)","Returns numeric formatting information based on the current locale"],localtime:["array localtime([int timestamp [, bool associative_array]])","Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array"],log:["float log(float number, [float base])","Returns the natural logarithm of the number, or the base log if base is specified"],log10:["float log10(float number)","Returns the base-10 logarithm of the number"],log1p:["float log1p(float number)","Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero"],long2ip:["string long2ip(int proper_address)","Converts an (IPv4) Internet network address into a string in Internet standard dotted format"],lstat:["array lstat(string filename)","Give information about a file or symbolic link"],ltrim:["string ltrim(string str [, string character_mask])","Strips whitespace from the beginning of a string"],mail:["int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])","Send an email message"],max:["mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])","Return the highest value in an array or a series of arguments"],mb_check_encoding:["bool mb_check_encoding([string var[, string encoding]])","Check if the string is valid for the specified encoding"],mb_convert_case:["string mb_convert_case(string sourcestring, int mode [, string encoding])","Returns a case-folded version of sourcestring"],mb_convert_encoding:["string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])","Returns converted string in desired encoding"],mb_convert_kana:["string mb_convert_kana(string str [, string option] [, string encoding])","Conversion between full-width character and half-width character (Japanese)"],mb_convert_variables:["string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])","Converts the string resource in variables to desired encoding"],mb_decode_mimeheader:["string mb_decode_mimeheader(string string)",'Decodes the MIME "encoded-word" in the string'],mb_decode_numericentity:["string mb_decode_numericentity(string string, array convmap [, string encoding])","Converts HTML numeric entities to character code"],mb_detect_encoding:["string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])","Encodings of the given string is returned (as a string)"],mb_detect_order:["bool|array mb_detect_order([mixed encoding-list])","Sets the current detect_order or Return the current detect_order as a array"],mb_encode_mimeheader:["string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])",'Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?='],mb_encode_numericentity:["string mb_encode_numericentity(string string, array convmap [, string encoding])","Converts specified characters to HTML numeric entities"],mb_encoding_aliases:["array mb_encoding_aliases(string encoding)","Returns an array of the aliases of a given encoding name"],mb_ereg:["int mb_ereg(string pattern, string string [, array registers])","Regular expression match for multibyte string"],mb_ereg_match:["bool mb_ereg_match(string pattern, string string [,string option])","Regular expression match for multibyte string"],mb_ereg_replace:["string mb_ereg_replace(string pattern, string replacement, string string [, string option])","Replace regular expression for multibyte string"],mb_ereg_search:["bool mb_ereg_search([string pattern[, string option]])","Regular expression search for multibyte string"],mb_ereg_search_getpos:["int mb_ereg_search_getpos(void)","Get search start position"],mb_ereg_search_getregs:["array mb_ereg_search_getregs(void)","Get matched substring of the last time"],mb_ereg_search_init:["bool mb_ereg_search_init(string string [, string pattern[, string option]])","Initialize string and regular expression for search."],mb_ereg_search_pos:["array mb_ereg_search_pos([string pattern[, string option]])","Regular expression search for multibyte string"],mb_ereg_search_regs:["array mb_ereg_search_regs([string pattern[, string option]])","Regular expression search for multibyte string"],mb_ereg_search_setpos:["bool mb_ereg_search_setpos(int position)","Set search start position"],mb_eregi:["int mb_eregi(string pattern, string string [, array registers])","Case-insensitive regular expression match for multibyte string"],mb_eregi_replace:["string mb_eregi_replace(string pattern, string replacement, string string)","Case insensitive replace regular expression for multibyte string"],mb_get_info:["mixed mb_get_info([string type])","Returns the current settings of mbstring"],mb_http_input:["mixed mb_http_input([string type])","Returns the input encoding"],mb_http_output:["string mb_http_output([string encoding])","Sets the current output_encoding or returns the current output_encoding as a string"],mb_internal_encoding:["string mb_internal_encoding([string encoding])","Sets the current internal encoding or Returns the current internal encoding as a string"],mb_language:["string mb_language([string language])","Sets the current language or Returns the current language as a string"],mb_list_encodings:["mixed mb_list_encodings()","Returns an array of all supported entity encodings"],mb_output_handler:["string mb_output_handler(string contents, int status)","Returns string in output buffer converted to the http_output encoding"],mb_parse_str:["bool mb_parse_str(string encoded_string [, array result])","Parses GET/POST/COOKIE data and sets global variables"],mb_preferred_mime_name:["string mb_preferred_mime_name(string encoding)","Return the preferred MIME name (charset) as a string"],mb_regex_encoding:["string mb_regex_encoding([string encoding])","Returns the current encoding for regex as a string."],mb_regex_set_options:["string mb_regex_set_options([string options])","Set or get the default options for mbregex functions"],mb_send_mail:["int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])","* Sends an email message with MIME scheme"],mb_split:["array mb_split(string pattern, string string [, int limit])","split multibyte string into array by regular expression"],mb_strcut:["string mb_strcut(string str, int start [, int length [, string encoding]])","Returns part of a string"],mb_strimwidth:["string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])","Trim the string in terminal width"],mb_stripos:["int mb_stripos(string haystack, string needle [, int offset [, string encoding]])","Finds position of first occurrence of a string within another, case insensitive"],mb_stristr:["string mb_stristr(string haystack, string needle[, bool part[, string encoding]])","Finds first occurrence of a string within another, case insensitive"],mb_strlen:["int mb_strlen(string str [, string encoding])","Get character numbers of a string"],mb_strpos:["int mb_strpos(string haystack, string needle [, int offset [, string encoding]])","Find position of first occurrence of a string within another"],mb_strrchr:["string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])","Finds the last occurrence of a character in a string within another"],mb_strrichr:["string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])","Finds the last occurrence of a character in a string within another, case insensitive"],mb_strripos:["int mb_strripos(string haystack, string needle [, int offset [, string encoding]])","Finds position of last occurrence of a string within another, case insensitive"],mb_strrpos:["int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])","Find position of last occurrence of a string within another"],mb_strstr:["string mb_strstr(string haystack, string needle[, bool part[, string encoding]])","Finds first occurrence of a string within another"],mb_strtolower:["string mb_strtolower(string sourcestring [, string encoding])","* Returns a lowercased version of sourcestring"],mb_strtoupper:["string mb_strtoupper(string sourcestring [, string encoding])","* Returns a uppercased version of sourcestring"],mb_strwidth:["int mb_strwidth(string str [, string encoding])","Gets terminal width of a string"],mb_substitute_character:["mixed mb_substitute_character([mixed substchar])","Sets the current substitute_character or returns the current substitute_character"],mb_substr:["string mb_substr(string str, int start [, int length [, string encoding]])","Returns part of a string"],mb_substr_count:["int mb_substr_count(string haystack, string needle [, string encoding])","Count the number of substring occurrences"],mcrypt_cbc:["string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)","CBC crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_cfb:["string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)","CFB crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_create_iv:["string mcrypt_create_iv(int size, int source)","Create an initialization vector (IV)"],mcrypt_decrypt:["string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)","OFB crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_ecb:["string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)","ECB crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_enc_get_algorithms_name:["string mcrypt_enc_get_algorithms_name(resource td)","Returns the name of the algorithm specified by the descriptor td"],mcrypt_enc_get_block_size:["int mcrypt_enc_get_block_size(resource td)","Returns the block size of the cipher specified by the descriptor td"],mcrypt_enc_get_iv_size:["int mcrypt_enc_get_iv_size(resource td)","Returns the size of the IV in bytes of the algorithm specified by the descriptor td"],mcrypt_enc_get_key_size:["int mcrypt_enc_get_key_size(resource td)","Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td"],mcrypt_enc_get_modes_name:["string mcrypt_enc_get_modes_name(resource td)","Returns the name of the mode specified by the descriptor td"],mcrypt_enc_get_supported_key_sizes:["array mcrypt_enc_get_supported_key_sizes(resource td)","This function decrypts the crypttext"],mcrypt_enc_is_block_algorithm:["bool mcrypt_enc_is_block_algorithm(resource td)","Returns TRUE if the alrogithm is a block algorithms"],mcrypt_enc_is_block_algorithm_mode:["bool mcrypt_enc_is_block_algorithm_mode(resource td)","Returns TRUE if the mode is for use with block algorithms"],mcrypt_enc_is_block_mode:["bool mcrypt_enc_is_block_mode(resource td)","Returns TRUE if the mode outputs blocks"],mcrypt_enc_self_test:["int mcrypt_enc_self_test(resource td)","This function runs the self test on the algorithm specified by the descriptor td"],mcrypt_encrypt:["string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)","OFB crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_generic:["string mcrypt_generic(resource td, string data)","This function encrypts the plaintext"],mcrypt_generic_deinit:["bool mcrypt_generic_deinit(resource td)","This function terminates encrypt specified by the descriptor td"],mcrypt_generic_init:["int mcrypt_generic_init(resource td, string key, string iv)","This function initializes all buffers for the specific module"],mcrypt_get_block_size:["int mcrypt_get_block_size(string cipher, string module)","Get the key size of cipher"],mcrypt_get_cipher_name:["string mcrypt_get_cipher_name(string cipher)","Get the key size of cipher"],mcrypt_get_iv_size:["int mcrypt_get_iv_size(string cipher, string module)","Get the IV size of cipher (Usually the same as the blocksize)"],mcrypt_get_key_size:["int mcrypt_get_key_size(string cipher, string module)","Get the key size of cipher"],mcrypt_list_algorithms:["array mcrypt_list_algorithms([string lib_dir])",'List all algorithms in "module_dir"'],mcrypt_list_modes:["array mcrypt_list_modes([string lib_dir])",'List all modes "module_dir"'],mcrypt_module_close:["bool mcrypt_module_close(resource td)","Free the descriptor td"],mcrypt_module_get_algo_block_size:["int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])","Returns the block size of the algorithm"],mcrypt_module_get_algo_key_size:["int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])","Returns the maximum supported key size of the algorithm"],mcrypt_module_get_supported_key_sizes:["array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])","This function decrypts the crypttext"],mcrypt_module_is_block_algorithm:["bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])","Returns TRUE if the algorithm is a block algorithm"],mcrypt_module_is_block_algorithm_mode:["bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])","Returns TRUE if the mode is for use with block algorithms"],mcrypt_module_is_block_mode:["bool mcrypt_module_is_block_mode(string mode [, string lib_dir])","Returns TRUE if the mode outputs blocks of bytes"],mcrypt_module_open:["resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)","Opens the module of the algorithm and the mode to be used"],mcrypt_module_self_test:["bool mcrypt_module_self_test(string algorithm [, string lib_dir])",'Does a self test of the module "module"'],mcrypt_ofb:["string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)","OFB crypt/decrypt data using key key with cipher cipher starting with iv"],md5:["string md5(string str, [ bool raw_output])","Calculate the md5 hash of a string"],md5_file:["string md5_file(string filename [, bool raw_output])","Calculate the md5 hash of given filename"],mdecrypt_generic:["string mdecrypt_generic(resource td, string data)","This function decrypts the plaintext"],memory_get_peak_usage:["int memory_get_peak_usage([real_usage])","Returns the peak allocated by PHP memory"],memory_get_usage:["int memory_get_usage([real_usage])","Returns the allocated by PHP memory"],metaphone:["string metaphone(string text[, int phones])","Break english phrases down into their phonemes"],method_exists:["bool method_exists(object object, string method)","Checks if the class method exists"],mhash:["string mhash(int hash, string data [, string key])","Hash data with hash"],mhash_count:["int mhash_count(void)","Gets the number of available hashes"],mhash_get_block_size:["int mhash_get_block_size(int hash)","Gets the block size of hash"],mhash_get_hash_name:["string mhash_get_hash_name(int hash)","Gets the name of hash"],mhash_keygen_s2k:["string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)","Generates a key using hash functions"],microtime:["mixed microtime([bool get_as_float])","Returns either a string or a float containing the current time in seconds and microseconds"],mime_content_type:["string mime_content_type(string filename|resource stream)","Return content-type for file"],min:["mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])","Return the lowest value in an array or a series of arguments"],mkdir:["bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])","Create a directory"],mktime:["int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])","Get UNIX timestamp for a date"],money_format:["string money_format(string format , float value)","Convert monetary value(s) to string"],move_uploaded_file:["bool move_uploaded_file(string path, string new_path)","Move a file if and only if it was created by an upload"],msg_get_queue:["resource msg_get_queue(int key [, int perms])","Attach to a message queue"],msg_queue_exists:["bool msg_queue_exists(int key)","Check whether a message queue exists"],msg_receive:["mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])","Send a message of type msgtype (must be > 0) to a message queue"],msg_remove_queue:["bool msg_remove_queue(resource queue)","Destroy the queue"],msg_send:["bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])","Send a message of type msgtype (must be > 0) to a message queue"],msg_set_queue:["bool msg_set_queue(resource queue, array data)","Set information for a message queue"],msg_stat_queue:["array msg_stat_queue(resource queue)","Returns information about a message queue"],msgfmt_create:["MessageFormatter msgfmt_create( string $locale, string $pattern )","* Create formatter."],msgfmt_format:["mixed msgfmt_format( MessageFormatter $nf, array $args )","* Format a message."],msgfmt_format_message:["mixed msgfmt_format_message( string $locale, string $pattern, array $args )","* Format a message."],msgfmt_get_error_code:["int msgfmt_get_error_code( MessageFormatter $nf )","* Get formatter's last error code."],msgfmt_get_error_message:["string msgfmt_get_error_message( MessageFormatter $coll )","* Get text description for formatter's last error code."],msgfmt_get_locale:["string msgfmt_get_locale(MessageFormatter $mf)","* Get formatter locale."],msgfmt_get_pattern:["string msgfmt_get_pattern( MessageFormatter $mf )","* Get formatter pattern."],msgfmt_parse:["array msgfmt_parse( MessageFormatter $nf, string $source )","* Parse a message."],msgfmt_set_pattern:["bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )","* Set formatter pattern."],mssql_bind:["bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])","Adds a parameter to a stored procedure or a remote stored procedure"],mssql_close:["bool mssql_close([resource conn_id])","Closes a connection to a MS-SQL server"],mssql_connect:["int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])","Establishes a connection to a MS-SQL server"],mssql_data_seek:["bool mssql_data_seek(resource result_id, int offset)","Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number"],mssql_execute:["mixed mssql_execute(resource stmt [, bool skip_results = false])","Executes a stored procedure on a MS-SQL server database"],mssql_fetch_array:["array mssql_fetch_array(resource result_id [, int result_type])","Returns an associative array of the current row in the result set specified by result_id"],mssql_fetch_assoc:["array mssql_fetch_assoc(resource result_id)","Returns an associative array of the current row in the result set specified by result_id"],mssql_fetch_batch:["int mssql_fetch_batch(resource result_index)","Returns the next batch of records"],mssql_fetch_field:["object mssql_fetch_field(resource result_id [, int offset])","Gets information about certain fields in a query result"],mssql_fetch_object:["object mssql_fetch_object(resource result_id)","Returns a pseudo-object of the current row in the result set specified by result_id"],mssql_fetch_row:["array mssql_fetch_row(resource result_id)","Returns an array of the current row in the result set specified by result_id"],mssql_field_length:["int mssql_field_length(resource result_id [, int offset])","Get the length of a MS-SQL field"],mssql_field_name:["string mssql_field_name(resource result_id [, int offset])","Returns the name of the field given by offset in the result set given by result_id"],mssql_field_seek:["bool mssql_field_seek(resource result_id, int offset)","Seeks to the specified field offset"],mssql_field_type:["string mssql_field_type(resource result_id [, int offset])","Returns the type of a field"],mssql_free_result:["bool mssql_free_result(resource result_index)","Free a MS-SQL result index"],mssql_free_statement:["bool mssql_free_statement(resource result_index)","Free a MS-SQL statement index"],mssql_get_last_message:["string mssql_get_last_message(void)","Gets the last message from the MS-SQL server"],mssql_guid_string:["string mssql_guid_string(string binary [,bool short_format])","Converts a 16 byte binary GUID to a string"],mssql_init:["int mssql_init(string sp_name [, resource conn_id])","Initializes a stored procedure or a remote stored procedure"],mssql_min_error_severity:["void mssql_min_error_severity(int severity)","Sets the lower error severity"],mssql_min_message_severity:["void mssql_min_message_severity(int severity)","Sets the lower message severity"],mssql_next_result:["bool mssql_next_result(resource result_id)","Move the internal result pointer to the next result"],mssql_num_fields:["int mssql_num_fields(resource mssql_result_index)","Returns the number of fields fetched in from the result id specified"],mssql_num_rows:["int mssql_num_rows(resource mssql_result_index)","Returns the number of rows fetched in from the result id specified"],mssql_pconnect:["int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])","Establishes a persistent connection to a MS-SQL server"],mssql_query:["resource mssql_query(string query [, resource conn_id [, int batch_size]])","Perform an SQL query on a MS-SQL server database"],mssql_result:["string mssql_result(resource result_id, int row, mixed field)","Returns the contents of one cell from a MS-SQL result set"],mssql_rows_affected:["int mssql_rows_affected(resource conn_id)","Returns the number of records affected by the query"],mssql_select_db:["bool mssql_select_db(string database_name [, resource conn_id])","Select a MS-SQL database"],mt_getrandmax:["int mt_getrandmax(void)","Returns the maximum value a random number from Mersenne Twister can have"],mt_rand:["int mt_rand([int min, int max])","Returns a random number from Mersenne Twister"],mt_srand:["void mt_srand([int seed])","Seeds Mersenne Twister random number generator"],mysql_affected_rows:["int mysql_affected_rows([int link_identifier])","Gets number of affected rows in previous MySQL operation"],mysql_client_encoding:["string mysql_client_encoding([int link_identifier])","Returns the default character set for the current connection"],mysql_close:["bool mysql_close([int link_identifier])","Close a MySQL connection"],mysql_connect:["resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])","Opens a connection to a MySQL Server"],mysql_create_db:["bool mysql_create_db(string database_name [, int link_identifier])","Create a MySQL database"],mysql_data_seek:["bool mysql_data_seek(resource result, int row_number)","Move internal result pointer"],mysql_db_query:["resource mysql_db_query(string database_name, string query [, int link_identifier])","Sends an SQL query to MySQL"],mysql_drop_db:["bool mysql_drop_db(string database_name [, int link_identifier])","Drops (delete) a MySQL database"],mysql_errno:["int mysql_errno([int link_identifier])","Returns the number of the error message from previous MySQL operation"],mysql_error:["string mysql_error([int link_identifier])","Returns the text of the error message from previous MySQL operation"],mysql_escape_string:["string mysql_escape_string(string to_be_escaped)","Escape string for mysql query"],mysql_fetch_array:["array mysql_fetch_array(resource result [, int result_type])","Fetch a result row as an array (associative, numeric or both)"],mysql_fetch_assoc:["array mysql_fetch_assoc(resource result)","Fetch a result row as an associative array"],mysql_fetch_field:["object mysql_fetch_field(resource result [, int field_offset])","Gets column information from a result and return as an object"],mysql_fetch_lengths:["array mysql_fetch_lengths(resource result)","Gets max data size of each column in a result"],mysql_fetch_object:["object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])","Fetch a result row as an object"],mysql_fetch_row:["array mysql_fetch_row(resource result)","Gets a result row as an enumerated array"],mysql_field_flags:["string mysql_field_flags(resource result, int field_offset)","Gets the flags associated with the specified field in a result"],mysql_field_len:["int mysql_field_len(resource result, int field_offset)","Returns the length of the specified field"],mysql_field_name:["string mysql_field_name(resource result, int field_index)","Gets the name of the specified field in a result"],mysql_field_seek:["bool mysql_field_seek(resource result, int field_offset)","Sets result pointer to a specific field offset"],mysql_field_table:["string mysql_field_table(resource result, int field_offset)","Gets name of the table the specified field is in"],mysql_field_type:["string mysql_field_type(resource result, int field_offset)","Gets the type of the specified field in a result"],mysql_free_result:["bool mysql_free_result(resource result)","Free result memory"],mysql_get_client_info:["string mysql_get_client_info(void)","Returns a string that represents the client library version"],mysql_get_host_info:["string mysql_get_host_info([int link_identifier])","Returns a string describing the type of connection in use, including the server host name"],mysql_get_proto_info:["int mysql_get_proto_info([int link_identifier])","Returns the protocol version used by current connection"],mysql_get_server_info:["string mysql_get_server_info([int link_identifier])","Returns a string that represents the server version number"],mysql_info:["string mysql_info([int link_identifier])","Returns a string containing information about the most recent query"],mysql_insert_id:["int mysql_insert_id([int link_identifier])","Gets the ID generated from the previous INSERT operation"],mysql_list_dbs:["resource mysql_list_dbs([int link_identifier])","List databases available on a MySQL server"],mysql_list_fields:["resource mysql_list_fields(string database_name, string table_name [, int link_identifier])","List MySQL result fields"],mysql_list_processes:["resource mysql_list_processes([int link_identifier])","Returns a result set describing the current server threads"],mysql_list_tables:["resource mysql_list_tables(string database_name [, int link_identifier])","List tables in a MySQL database"],mysql_num_fields:["int mysql_num_fields(resource result)","Gets number of fields in a result"],mysql_num_rows:["int mysql_num_rows(resource result)","Gets number of rows in a result"],mysql_pconnect:["resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])","Opens a persistent connection to a MySQL Server"],mysql_ping:["bool mysql_ping([int link_identifier])","Ping a server connection. If no connection then reconnect."],mysql_query:["resource mysql_query(string query [, int link_identifier])","Sends an SQL query to MySQL"],mysql_real_escape_string:["string mysql_real_escape_string(string to_be_escaped [, int link_identifier])","Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection"],mysql_result:["mixed mysql_result(resource result, int row [, mixed field])","Gets result data"],mysql_select_db:["bool mysql_select_db(string database_name [, int link_identifier])","Selects a MySQL database"],mysql_set_charset:["bool mysql_set_charset(string csname [, int link_identifier])","sets client character set"],mysql_stat:["string mysql_stat([int link_identifier])","Returns a string containing status information"],mysql_thread_id:["int mysql_thread_id([int link_identifier])","Returns the thread id of current connection"],mysql_unbuffered_query:["resource mysql_unbuffered_query(string query [, int link_identifier])","Sends an SQL query to MySQL, without fetching and buffering the result rows"],mysqli_affected_rows:["mixed mysqli_affected_rows(object link)","Get number of affected rows in previous MySQL operation"],mysqli_autocommit:["bool mysqli_autocommit(object link, bool mode)","Turn auto commit on or of"],mysqli_cache_stats:["array mysqli_cache_stats(void)","Returns statistics about the zval cache"],mysqli_change_user:["bool mysqli_change_user(object link, string user, string password, string database)","Change logged-in user of the active connection"],mysqli_character_set_name:["string mysqli_character_set_name(object link)","Returns the name of the character set used for this connection"],mysqli_close:["bool mysqli_close(object link)","Close connection"],mysqli_commit:["bool mysqli_commit(object link)","Commit outstanding actions and close transaction"],mysqli_connect:["object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])","Open a connection to a mysql server"],mysqli_connect_errno:["int mysqli_connect_errno(void)","Returns the numerical value of the error message from last connect command"],mysqli_connect_error:["string mysqli_connect_error(void)","Returns the text of the error message from previous MySQL operation"],mysqli_data_seek:["bool mysqli_data_seek(object result, int offset)","Move internal result pointer"],mysqli_debug:["void mysqli_debug(string debug)",""],mysqli_dump_debug_info:["bool mysqli_dump_debug_info(object link)",""],mysqli_embedded_server_end:["void mysqli_embedded_server_end(void)",""],mysqli_embedded_server_start:["bool mysqli_embedded_server_start(bool start, array arguments, array groups)","initialize and start embedded server"],mysqli_errno:["int mysqli_errno(object link)","Returns the numerical value of the error message from previous MySQL operation"],mysqli_error:["string mysqli_error(object link)","Returns the text of the error message from previous MySQL operation"],mysqli_fetch_all:["mixed mysqli_fetch_all (object result [,int resulttype])","Fetches all result rows as an associative array, a numeric array, or both"],mysqli_fetch_array:["mixed mysqli_fetch_array (object result [,int resulttype])","Fetch a result row as an associative array, a numeric array, or both"],mysqli_fetch_assoc:["mixed mysqli_fetch_assoc (object result)","Fetch a result row as an associative array"],mysqli_fetch_field:["mixed mysqli_fetch_field (object result)","Get column information from a result and return as an object"],mysqli_fetch_field_direct:["mixed mysqli_fetch_field_direct (object result, int offset)","Fetch meta-data for a single field"],mysqli_fetch_fields:["mixed mysqli_fetch_fields (object result)","Return array of objects containing field meta-data"],mysqli_fetch_lengths:["mixed mysqli_fetch_lengths (object result)","Get the length of each output in a result"],mysqli_fetch_object:["mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])","Fetch a result row as an object"],mysqli_fetch_row:["array mysqli_fetch_row (object result)","Get a result row as an enumerated array"],mysqli_field_count:["int mysqli_field_count(object link)","Fetch the number of fields returned by the last query for the given link"],mysqli_field_seek:["int mysqli_field_seek(object result, int fieldnr)","Set result pointer to a specified field offset"],mysqli_field_tell:["int mysqli_field_tell(object result)","Get current field offset of result pointer"],mysqli_free_result:["void mysqli_free_result(object result)","Free query result memory for the given result handle"],mysqli_get_charset:["object mysqli_get_charset(object link)","returns a character set object"],mysqli_get_client_info:["string mysqli_get_client_info(void)","Get MySQL client info"],mysqli_get_client_stats:["array mysqli_get_client_stats(void)","Returns statistics about the zval cache"],mysqli_get_client_version:["int mysqli_get_client_version(void)","Get MySQL client info"],mysqli_get_connection_stats:["array mysqli_get_connection_stats(void)","Returns statistics about the zval cache"],mysqli_get_host_info:["string mysqli_get_host_info (object link)","Get MySQL host info"],mysqli_get_proto_info:["int mysqli_get_proto_info(object link)","Get MySQL protocol information"],mysqli_get_server_info:["string mysqli_get_server_info(object link)","Get MySQL server info"],mysqli_get_server_version:["int mysqli_get_server_version(object link)","Return the MySQL version for the server referenced by the given link"],mysqli_get_warnings:["object mysqli_get_warnings(object link) */",'PHP_FUNCTION(mysqli_get_warnings) { MY_MYSQL *mysql; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; MYSQLI_WARNING *w; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID); if (mysql_warning_count(mysql->mysql)) { w = php_get_warnings(mysql->mysql TSRMLS_CC); } else { RETURN_FALSE; } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = mysqli_resource->info = (void *)w; mysqli_resource->status = MYSQLI_STATUS_VALID; MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}'],mysqli_info:["string mysqli_info(object link)","Get information about the most recent query"],mysqli_init:["resource mysqli_init(void)","Initialize mysqli and return a resource for use with mysql_real_connect"],mysqli_insert_id:["mixed mysqli_insert_id(object link)","Get the ID generated from the previous INSERT operation"],mysqli_kill:["bool mysqli_kill(object link, int processid)","Kill a mysql process on the server"],mysqli_link_construct:["object mysqli_link_construct()",""],mysqli_more_results:["bool mysqli_more_results(object link)","check if there any more query results from a multi query"],mysqli_multi_query:["bool mysqli_multi_query(object link, string query)","allows to execute multiple queries"],mysqli_next_result:["bool mysqli_next_result(object link)","read next result from multi_query"],mysqli_num_fields:["int mysqli_num_fields(object result)","Get number of fields in result"],mysqli_num_rows:["mixed mysqli_num_rows(object result)","Get number of rows in result"],mysqli_options:["bool mysqli_options(object link, int flags, mixed values)","Set options"],mysqli_ping:["bool mysqli_ping(object link)","Ping a server connection or reconnect if there is no connection"],mysqli_poll:["int mysqli_poll(array read, array write, array error, long sec [, long usec])","Poll connections"],mysqli_prepare:["mixed mysqli_prepare(object link, string query)","Prepare a SQL statement for execution"],mysqli_query:["mixed mysqli_query(object link, string query [,int resultmode]) */",'PHP_FUNCTION(mysqli_query) { MY_MYSQL *mysql; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; MYSQL_RES *result; char *query = NULL; unsigned int query_len; unsigned long resultmode = MYSQLI_STORE_RESULT; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|l", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) { return; } if (!query_len) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty query"); RETURN_FALSE; } if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for resultmode"); RETURN_FALSE; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID); MYSQLI_DISABLE_MQ; #ifdef MYSQLI_USE_MYSQLND if (resultmode & MYSQLI_ASYNC) { if (mysqli_async_query(mysql->mysql, query, query_len)) { MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC; RETURN_TRUE; } #endif if (mysql_real_query(mysql->mysql, query, query_len)) { MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } if (!mysql_field_count(mysql->mysql)) { /* no result set - not a SELECT'],mysqli_real_connect:["bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])","Open a connection to a mysql server"],mysqli_real_escape_string:["string mysqli_real_escape_string(object link, string escapestr)","Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection"],mysqli_real_query:["bool mysqli_real_query(object link, string query)","Binary-safe version of mysql_query()"],mysqli_reap_async_query:["int mysqli_reap_async_query(object link)","Poll connections"],mysqli_refresh:["bool mysqli_refresh(object link, long options)","Flush tables or caches, or reset replication server information"],mysqli_report:["bool mysqli_report(int flags)","sets report level"],mysqli_rollback:["bool mysqli_rollback(object link)","Undo actions from current transaction"],mysqli_select_db:["bool mysqli_select_db(object link, string dbname)","Select a MySQL database"],mysqli_set_charset:["bool mysqli_set_charset(object link, string csname)","sets client character set"],mysqli_set_local_infile_default:["void mysqli_set_local_infile_default(object link)","unsets user defined handler for load local infile command"],mysqli_set_local_infile_handler:["bool mysqli_set_local_infile_handler(object link, callback read_func)","Set callback functions for LOAD DATA LOCAL INFILE"],mysqli_sqlstate:["string mysqli_sqlstate(object link)","Returns the SQLSTATE error from previous MySQL operation"],mysqli_ssl_set:["bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])",""],mysqli_stat:["mixed mysqli_stat(object link)","Get current system status"],mysqli_stmt_affected_rows:["mixed mysqli_stmt_affected_rows(object stmt)","Return the number of rows affected in the last query for the given link"],mysqli_stmt_attr_get:["int mysqli_stmt_attr_get(object stmt, long attr)",""],mysqli_stmt_attr_set:["int mysqli_stmt_attr_set(object stmt, long attr, long mode)",""],mysqli_stmt_bind_param:["bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])","Bind variables to a prepared statement as parameters"],mysqli_stmt_bind_result:["bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])","Bind variables to a prepared statement for result storage"],mysqli_stmt_close:["bool mysqli_stmt_close(object stmt)","Close statement"],mysqli_stmt_data_seek:["void mysqli_stmt_data_seek(object stmt, int offset)","Move internal result pointer"],mysqli_stmt_errno:["int mysqli_stmt_errno(object stmt)",""],mysqli_stmt_error:["string mysqli_stmt_error(object stmt)",""],mysqli_stmt_execute:["bool mysqli_stmt_execute(object stmt)","Execute a prepared statement"],mysqli_stmt_fetch:["mixed mysqli_stmt_fetch(object stmt)","Fetch results from a prepared statement into the bound variables"],mysqli_stmt_field_count:["int mysqli_stmt_field_count(object stmt) {","Return the number of result columns for the given statement"],mysqli_stmt_free_result:["void mysqli_stmt_free_result(object stmt)","Free stored result memory for the given statement handle"],mysqli_stmt_get_result:["object mysqli_stmt_get_result(object link)","Buffer result set on client"],mysqli_stmt_get_warnings:["object mysqli_stmt_get_warnings(object link) */",'PHP_FUNCTION(mysqli_stmt_get_warnings) { MY_STMT *stmt; zval *stmt_link; MYSQLI_RESOURCE *mysqli_resource; MYSQLI_WARNING *w; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &stmt_link, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, "mysqli_stmt", MYSQLI_STATUS_VALID); if (mysqli_stmt_warning_count(stmt->stmt)) { w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC); } else { RETURN_FALSE; } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = mysqli_resource->info = (void *)w; mysqli_resource->status = MYSQLI_STATUS_VALID; MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}'],mysqli_stmt_init:["mixed mysqli_stmt_init(object link)","Initialize statement object"],mysqli_stmt_insert_id:["mixed mysqli_stmt_insert_id(object stmt)","Get the ID generated from the previous INSERT operation"],mysqli_stmt_next_result:["bool mysqli_stmt_next_result(object link)","read next result from multi_query"],mysqli_stmt_num_rows:["mixed mysqli_stmt_num_rows(object stmt)","Return the number of rows in statements result set"],mysqli_stmt_param_count:["int mysqli_stmt_param_count(object stmt)","Return the number of parameter for the given statement"],mysqli_stmt_prepare:["bool mysqli_stmt_prepare(object stmt, string query)","prepare server side statement with query"],mysqli_stmt_reset:["bool mysqli_stmt_reset(object stmt)","reset a prepared statement"],mysqli_stmt_result_metadata:["mixed mysqli_stmt_result_metadata(object stmt)","return result set from statement"],mysqli_stmt_send_long_data:["bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)",""],mysqli_stmt_sqlstate:["string mysqli_stmt_sqlstate(object stmt)",""],mysqli_stmt_store_result:["bool mysqli_stmt_store_result(stmt)",""],mysqli_store_result:["object mysqli_store_result(object link)","Buffer result set on client"],mysqli_thread_id:["int mysqli_thread_id(object link)","Return the current thread ID"],mysqli_thread_safe:["bool mysqli_thread_safe(void)","Return whether thread safety is given or not"],mysqli_use_result:["mixed mysqli_use_result(object link)","Directly retrieve query results - do not buffer results on client side"],mysqli_warning_count:["int mysqli_warning_count (object link)","Return number of warnings from the last query for the given link"],natcasesort:["void natcasesort(array &array_arg)","Sort an array using case-insensitive natural sort"],natsort:["void natsort(array &array_arg)","Sort an array using natural sort"],next:["mixed next(array array_arg)","Move array argument's internal pointer to the next element and return it"],ngettext:["string ngettext(string MSGID1, string MSGID2, int N)","Plural version of gettext()"],nl2br:["string nl2br(string str [, bool is_xhtml])","Converts newlines to HTML line breaks"],nl_langinfo:["string nl_langinfo(int item)","Query language and locale information"],normalizer_is_normalize:["bool normalizer_is_normalize( string $input [, string $form = FORM_C] )","* Test if a string is in a given normalization form."],normalizer_normalize:["string normalizer_normalize( string $input [, string $form = FORM_C] )","* Normalize a string."],nsapi_request_headers:["array nsapi_request_headers(void)","Get all headers from the request"],nsapi_response_headers:["array nsapi_response_headers(void)","Get all headers from the response"],nsapi_virtual:["bool nsapi_virtual(string uri)","Perform an NSAPI sub-request"],number_format:["string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])","Formats a number with grouped thousands"],numfmt_create:["NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )","* Create number formatter."],numfmt_format:["mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )","* Format a number."],numfmt_format_currency:["mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )","* Format a number as currency."],numfmt_get_attribute:["mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )","* Get formatter attribute value."],numfmt_get_error_code:["int numfmt_get_error_code( NumberFormatter $nf )","* Get formatter's last error code."],numfmt_get_error_message:["string numfmt_get_error_message( NumberFormatter $nf )","* Get text description for formatter's last error code."],numfmt_get_locale:["string numfmt_get_locale( NumberFormatter $nf[, int type] )","* Get formatter locale."],numfmt_get_pattern:["string numfmt_get_pattern( NumberFormatter $nf )","* Get formatter pattern."],numfmt_get_symbol:["string numfmt_get_symbol( NumberFormatter $nf, int $attr )","* Get formatter symbol value."],numfmt_get_text_attribute:["string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )","* Get formatter attribute value."],numfmt_parse:["mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])","* Parse a number."],numfmt_parse_currency:["double numfmt_parse_currency( NumberFormatter $nf, string $str, string $¤cy[, int $&position] )","* Parse a number as currency."],numfmt_parse_message:["array numfmt_parse_message( string $locale, string $pattern, string $source )","* Parse a message."],numfmt_set_attribute:["bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )","* Get formatter attribute value."],numfmt_set_pattern:["bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )","* Set formatter pattern."],numfmt_set_symbol:["bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )","* Set formatter symbol value."],numfmt_set_text_attribute:["bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )","* Get formatter attribute value."],ob_clean:["bool ob_clean(void)","Clean (delete) the current output buffer"],ob_end_clean:["bool ob_end_clean(void)","Clean the output buffer, and delete current output buffer"],ob_end_flush:["bool ob_end_flush(void)","Flush (send) the output buffer, and delete current output buffer"],ob_flush:["bool ob_flush(void)","Flush (send) contents of the output buffer. The last buffer content is sent to next buffer"],ob_get_clean:["bool ob_get_clean(void)","Get current buffer contents and delete current output buffer"],ob_get_contents:["string ob_get_contents(void)","Return the contents of the output buffer"],ob_get_flush:["bool ob_get_flush(void)","Get current buffer contents, flush (send) the output buffer, and delete current output buffer"],ob_get_length:["int ob_get_length(void)","Return the length of the output buffer"],ob_get_level:["int ob_get_level(void)","Return the nesting level of the output buffer"],ob_get_status:["false|array ob_get_status([bool full_status])","Return the status of the active or all output buffers"],ob_gzhandler:["string ob_gzhandler(string str, int mode)","Encode str based on accept-encoding setting - designed to be called from ob_start()"],ob_iconv_handler:["string ob_iconv_handler(string contents, int status)","Returns str in output buffer converted to the iconv.output_encoding character set"],ob_implicit_flush:["void ob_implicit_flush([int flag])","Turn implicit flush on/off and is equivalent to calling flush() after every output call"],ob_list_handlers:["false|array ob_list_handlers()","* List all output_buffers in an array"],ob_start:["bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])","Turn on Output Buffering (specifying an optional output handler)."],oci_bind_array_by_name:["bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])","Bind a PHP array to an Oracle PL/SQL type by name"],oci_bind_by_name:["bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])","Bind a PHP variable to an Oracle placeholder by name"],oci_cancel:["bool oci_cancel(resource stmt)","Cancel reading from a cursor"],oci_close:["bool oci_close(resource connection)","Disconnect from database"],oci_collection_append:["bool oci_collection_append(string value)","Append an object to the collection"],oci_collection_assign:["bool oci_collection_assign(object from)","Assign a collection from another existing collection"],oci_collection_element_assign:["bool oci_collection_element_assign(int index, string val)","Assign element val to collection at index ndx"],oci_collection_element_get:["string oci_collection_element_get(int ndx)","Retrieve the value at collection index ndx"],oci_collection_max:["int oci_collection_max()","Return the max value of a collection. For a varray this is the maximum length of the array"],oci_collection_size:["int oci_collection_size()","Return the size of a collection"],oci_collection_trim:["bool oci_collection_trim(int num)","Trim num elements from the end of a collection"],oci_commit:["bool oci_commit(resource connection)","Commit the current context"],oci_connect:["resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])","Connect to an Oracle database and log on. Returns a new session."],oci_define_by_name:["bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])","Define a PHP variable to an Oracle column by name"],oci_error:["array oci_error([resource stmt|connection|global])","Return the last error of stmt|connection|global. If no error happened returns false."],oci_execute:["bool oci_execute(resource stmt [, int mode])","Execute a parsed statement"],oci_fetch:["bool oci_fetch(resource stmt)","Prepare a new row of data for reading"],oci_fetch_all:["int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])","Fetch all rows of result data into an array"],oci_fetch_array:["array oci_fetch_array( resource stmt [, int mode ])","Fetch a result row as an array"],oci_fetch_assoc:["array oci_fetch_assoc( resource stmt )","Fetch a result row as an associative array"],oci_fetch_object:["object oci_fetch_object( resource stmt )","Fetch a result row as an object"],oci_fetch_row:["array oci_fetch_row( resource stmt )","Fetch a result row as an enumerated array"],oci_field_is_null:["bool oci_field_is_null(resource stmt, int col)","Tell whether a column is NULL"],oci_field_name:["string oci_field_name(resource stmt, int col)","Tell the name of a column"],oci_field_precision:["int oci_field_precision(resource stmt, int col)","Tell the precision of a column"],oci_field_scale:["int oci_field_scale(resource stmt, int col)","Tell the scale of a column"],oci_field_size:["int oci_field_size(resource stmt, int col)","Tell the maximum data size of a column"],oci_field_type:["mixed oci_field_type(resource stmt, int col)","Tell the data type of a column"],oci_field_type_raw:["int oci_field_type_raw(resource stmt, int col)","Tell the raw oracle data type of a column"],oci_free_collection:["bool oci_free_collection()","Deletes collection object"],oci_free_descriptor:["bool oci_free_descriptor()","Deletes large object description"],oci_free_statement:["bool oci_free_statement(resource stmt)","Free all resources associated with a statement"],oci_internal_debug:["void oci_internal_debug(int onoff)","Toggle internal debugging output for the OCI extension"],oci_lob_append:["bool oci_lob_append( object lob )","Appends data from a LOB to another LOB"],oci_lob_close:["bool oci_lob_close()","Closes lob descriptor"],oci_lob_copy:["bool oci_lob_copy( object lob_to, object lob_from [, int length ] )","Copies data from a LOB to another LOB"],oci_lob_eof:["bool oci_lob_eof()","Checks if EOF is reached"],oci_lob_erase:["int oci_lob_erase( [ int offset [, int length ] ] )","Erases a specified portion of the internal LOB, starting at a specified offset"],oci_lob_export:["bool oci_lob_export([string filename [, int start [, int length]]])","Writes a large object into a file"],oci_lob_flush:["bool oci_lob_flush( [ int flag ] )","Flushes the LOB buffer"],oci_lob_import:["bool oci_lob_import( string filename )","Loads file into a LOB"],oci_lob_is_equal:["bool oci_lob_is_equal( object lob1, object lob2 )","Tests to see if two LOB/FILE locators are equal"],oci_lob_load:["string oci_lob_load()","Loads a large object"],oci_lob_read:["string oci_lob_read( int length )","Reads particular part of a large object"],oci_lob_rewind:["bool oci_lob_rewind()","Rewind pointer of a LOB"],oci_lob_save:["bool oci_lob_save( string data [, int offset ])","Saves a large object"],oci_lob_seek:["bool oci_lob_seek( int offset [, int whence ])","Moves the pointer of a LOB"],oci_lob_size:["int oci_lob_size()","Returns size of a large object"],oci_lob_tell:["int oci_lob_tell()","Tells LOB pointer position"],oci_lob_truncate:["bool oci_lob_truncate( [ int length ])","Truncates a LOB"],oci_lob_write:["int oci_lob_write( string string [, int length ])","Writes data to current position of a LOB"],oci_lob_write_temporary:["bool oci_lob_write_temporary(string var [, int lob_type])","Writes temporary blob"],oci_new_collection:["object oci_new_collection(resource connection, string tdo [, string schema])","Initialize a new collection"],oci_new_connect:["resource oci_new_connect(string user, string pass [, string db])","Connect to an Oracle database and log on. Returns a new session."],oci_new_cursor:["resource oci_new_cursor(resource connection)","Return a new cursor (Statement-Handle) - use this to bind ref-cursors!"],oci_new_descriptor:["object oci_new_descriptor(resource connection [, int type])","Initialize a new empty descriptor LOB/FILE (LOB is default)"],oci_num_fields:["int oci_num_fields(resource stmt)","Return the number of result columns in a statement"],oci_num_rows:["int oci_num_rows(resource stmt)","Return the row count of an OCI statement"],oci_parse:["resource oci_parse(resource connection, string query)","Parse a query and return a statement"],oci_password_change:["bool oci_password_change(resource connection, string username, string old_password, string new_password)","Changes the password of an account"],oci_pconnect:["resource oci_pconnect(string user, string pass [, string db [, string charset ]])","Connect to an Oracle database using a persistent connection and log on. Returns a new session."],oci_result:["string oci_result(resource stmt, mixed column)","Return a single column of result data"],oci_rollback:["bool oci_rollback(resource connection)","Rollback the current context"],oci_server_version:["string oci_server_version(resource connection)","Return a string containing server version information"],oci_set_action:["bool oci_set_action(resource connection, string value)","Sets the action attribute on the connection"],oci_set_client_identifier:["bool oci_set_client_identifier(resource connection, string value)","Sets the client identifier attribute on the connection"],oci_set_client_info:["bool oci_set_client_info(resource connection, string value)","Sets the client info attribute on the connection"],oci_set_edition:["bool oci_set_edition(string value)","Sets the edition attribute for all subsequent connections created"],oci_set_module_name:["bool oci_set_module_name(resource connection, string value)","Sets the module attribute on the connection"],oci_set_prefetch:["bool oci_set_prefetch(resource stmt, int prefetch_rows)","Sets the number of rows to be prefetched on execute to prefetch_rows for stmt"],oci_statement_type:["string oci_statement_type(resource stmt)","Return the query type of an OCI statement"],ocifetchinto:["int ocifetchinto(resource stmt, array &output [, int mode])","Fetch a row of result data into an array"],ocigetbufferinglob:["bool ocigetbufferinglob()","Returns current state of buffering for a LOB"],ocisetbufferinglob:["bool ocisetbufferinglob( boolean flag )","Enables/disables buffering for a LOB"],octdec:["int octdec(string octal_number)","Returns the decimal equivalent of an octal string"],odbc_autocommit:["mixed odbc_autocommit(resource connection_id [, int OnOff])","Toggle autocommit mode or get status"],odbc_binmode:["bool odbc_binmode(int result_id, int mode)","Handle binary column data"],odbc_close:["void odbc_close(resource connection_id)","Close an ODBC connection"],odbc_close_all:["void odbc_close_all(void)","Close all ODBC connections"],odbc_columnprivileges:["resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)","Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table"],odbc_columns:["resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])","Returns a result identifier that can be used to fetch a list of column names in specified tables"],odbc_commit:["bool odbc_commit(resource connection_id)","Commit an ODBC transaction"],odbc_connect:["resource odbc_connect(string DSN, string user, string password [, int cursor_option])","Connect to a datasource"],odbc_cursor:["string odbc_cursor(resource result_id)","Get cursor name"],odbc_data_source:["array odbc_data_source(resource connection_id, int fetch_type)","Return information about the currently connected data source"],odbc_error:["string odbc_error([resource connection_id])","Get the last error code"],odbc_errormsg:["string odbc_errormsg([resource connection_id])","Get the last error message"],odbc_exec:["resource odbc_exec(resource connection_id, string query [, int flags])","Prepare and execute an SQL statement"],odbc_execute:["bool odbc_execute(resource result_id [, array parameters_array])","Execute a prepared statement"],odbc_fetch_array:["array odbc_fetch_array(int result [, int rownumber])","Fetch a result row as an associative array"],odbc_fetch_into:["int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])","Fetch one result row into an array"],odbc_fetch_object:["object odbc_fetch_object(int result [, int rownumber])","Fetch a result row as an object"],odbc_fetch_row:["bool odbc_fetch_row(resource result_id [, int row_number])","Fetch a row"],odbc_field_len:["int odbc_field_len(resource result_id, int field_number)","Get the length (precision) of a column"],odbc_field_name:["string odbc_field_name(resource result_id, int field_number)","Get a column name"],odbc_field_num:["int odbc_field_num(resource result_id, string field_name)","Return column number"],odbc_field_scale:["int odbc_field_scale(resource result_id, int field_number)","Get the scale of a column"],odbc_field_type:["string odbc_field_type(resource result_id, int field_number)","Get the datatype of a column"],odbc_foreignkeys:["resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)","Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table"],odbc_free_result:["bool odbc_free_result(resource result_id)","Free resources associated with a result"],odbc_gettypeinfo:["resource odbc_gettypeinfo(resource connection_id [, int data_type])","Returns a result identifier containing information about data types supported by the data source"],odbc_longreadlen:["bool odbc_longreadlen(int result_id, int length)","Handle LONG columns"],odbc_next_result:["bool odbc_next_result(resource result_id)","Checks if multiple results are avaiable"],odbc_num_fields:["int odbc_num_fields(resource result_id)","Get number of columns in a result"],odbc_num_rows:["int odbc_num_rows(resource result_id)","Get number of rows in a result"],odbc_pconnect:["resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])","Establish a persistent connection to a datasource"],odbc_prepare:["resource odbc_prepare(resource connection_id, string query)","Prepares a statement for execution"],odbc_primarykeys:["resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)","Returns a result identifier listing the column names that comprise the primary key for a table"],odbc_procedurecolumns:["resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])","Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures"],odbc_procedures:["resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])","Returns a result identifier containg the list of procedure names in a datasource"],odbc_result:["mixed odbc_result(resource result_id, mixed field)","Get result data"],odbc_result_all:["int odbc_result_all(resource result_id [, string format])","Print result as HTML table"],odbc_rollback:["bool odbc_rollback(resource connection_id)","Rollback a transaction"],odbc_setoption:["bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)","Sets connection or statement options"],odbc_specialcolumns:["resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)","Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction"],odbc_statistics:["resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)","Returns a result identifier that contains statistics about a single table and the indexes associated with the table"],odbc_tableprivileges:["resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)","Returns a result identifier containing a list of tables and the privileges associated with each table"],odbc_tables:["resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])","Call the SQLTables function"],opendir:["mixed opendir(string path[, resource context])","Open a directory and return a dir_handle"],openlog:["bool openlog(string ident, int option, int facility)","Open connection to system logger"],openssl_csr_export:["bool openssl_csr_export(resource csr, string &out [, bool notext=true])","Exports a CSR to file or a var"],openssl_csr_export_to_file:["bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])","Exports a CSR to file"],openssl_csr_get_public_key:["mixed openssl_csr_get_public_key(mixed csr)","Returns the subject of a CERT or FALSE on error"],openssl_csr_get_subject:["mixed openssl_csr_get_subject(mixed csr)","Returns the subject of a CERT or FALSE on error"],openssl_csr_new:["bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])","Generates a privkey and CSR"],openssl_csr_sign:["resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])","Signs a cert with another CERT"],openssl_decrypt:["string openssl_decrypt(string data, string method, string password [, bool raw_input=false])","Takes raw or base64 encoded string and dectupt it using given method and key"],openssl_dh_compute_key:["string openssl_dh_compute_key(string pub_key, resource dh_key)","Computes shared sicret for public value of remote DH key and local DH key"],openssl_digest:["string openssl_digest(string data, string method [, bool raw_output=false])","Computes digest hash value for given data using given method, returns raw or binhex encoded string"],openssl_encrypt:["string openssl_encrypt(string data, string method, string password [, bool raw_output=false])","Encrypts given data with given method and key, returns raw or base64 encoded string"],openssl_error_string:["mixed openssl_error_string(void)","Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages"],openssl_get_cipher_methods:["array openssl_get_cipher_methods([bool aliases = false])","Return array of available cipher methods"],openssl_get_md_methods:["array openssl_get_md_methods([bool aliases = false])","Return array of available digest methods"],openssl_open:["bool openssl_open(string data, &string opendata, string ekey, mixed privkey)","Opens data"],openssl_pkcs12_export:["bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])","Creates and exports a PKCS12 to a var"],openssl_pkcs12_export_to_file:["bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])","Creates and exports a PKCS to file"],openssl_pkcs12_read:["bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)","Parses a PKCS12 to an array"],openssl_pkcs7_decrypt:["bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])","Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename. recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key"],openssl_pkcs7_encrypt:["bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])","Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile"],openssl_pkcs7_sign:["bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])","Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum"],openssl_pkcs7_verify:["bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])","Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers"],openssl_pkey_export:["bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])","Gets an exportable representation of a key into a string or file"],openssl_pkey_export_to_file:["bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)","Gets an exportable representation of a key into a file"],openssl_pkey_free:["void openssl_pkey_free(int key)","Frees a key"],openssl_pkey_get_details:["resource openssl_pkey_get_details(resource key)","returns an array with the key details (bits, pkey, type)"],openssl_pkey_get_private:["int openssl_pkey_get_private(string key [, string passphrase])","Gets private keys"],openssl_pkey_get_public:["int openssl_pkey_get_public(mixed cert)","Gets public key from X.509 certificate"],openssl_pkey_new:["resource openssl_pkey_new([array configargs])","Generates a new private key"],openssl_private_decrypt:["bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])","Decrypts data with private key"],openssl_private_encrypt:["bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])","Encrypts data with private key"],openssl_public_decrypt:["bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])","Decrypts data with public key"],openssl_public_encrypt:["bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])","Encrypts data with public key"],openssl_random_pseudo_bytes:["string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])","Returns a string of the length specified filled with random pseudo bytes"],openssl_seal:["int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)","Seals data"],openssl_sign:["bool openssl_sign(string data, &string signature, mixed key[, mixed method])","Signs data"],openssl_verify:["int openssl_verify(string data, string signature, mixed key[, mixed method])","Verifys data"],openssl_x509_check_private_key:["bool openssl_x509_check_private_key(mixed cert, mixed key)","Checks if a private key corresponds to a CERT"],openssl_x509_checkpurpose:["int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])","Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs"],openssl_x509_export:["bool openssl_x509_export(mixed x509, string &out [, bool notext = true])","Exports a CERT to file or a var"],openssl_x509_export_to_file:["bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])","Exports a CERT to file or a var"],openssl_x509_free:["void openssl_x509_free(resource x509)","Frees X.509 certificates"],openssl_x509_parse:["array openssl_x509_parse(mixed x509 [, bool shortnames=true])","Returns an array of the fields/values of the CERT"],openssl_x509_read:["resource openssl_x509_read(mixed cert)","Reads X.509 certificates"],ord:["int ord(string character)","Returns ASCII value of character"],output_add_rewrite_var:["bool output_add_rewrite_var(string name, string value)","Add URL rewriter values"],output_reset_rewrite_vars:["bool output_reset_rewrite_vars(void)","Reset(clear) URL rewriter values"],pack:["string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])","Takes one or more arguments and packs them into a binary string according to the format argument"],parse_ini_file:["array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])","Parse configuration file"],parse_ini_string:["array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])","Parse configuration string"],parse_locale:["static array parse_locale($locale)","* parses a locale-id into an array the different parts of it"],parse_str:["void parse_str(string encoded_string [, array result])","Parses GET/POST/COOKIE data and sets global variables"],parse_url:["mixed parse_url(string url, [int url_component])","Parse a URL and return its components"],passthru:["void passthru(string command [, int &return_value])","Execute an external program and display raw output"],pathinfo:["array pathinfo(string path[, int options])","Returns information about a certain string"],pclose:["int pclose(resource fp)","Close a file pointer opened by popen()"],pcnlt_sigwaitinfo:["int pcnlt_sigwaitinfo(array set[, array &siginfo])","Synchronously wait for queued signals"],pcntl_alarm:["int pcntl_alarm(int seconds)","Set an alarm clock for delivery of a signal"],pcntl_exec:["bool pcntl_exec(string path [, array args [, array envs]])","Executes specified program in current process space as defined by exec(2)"],pcntl_fork:["int pcntl_fork(void)","Forks the currently running process following the same behavior as the UNIX fork() system call"],pcntl_getpriority:["int pcntl_getpriority([int pid [, int process_identifier]])","Get the priority of any process"],pcntl_setpriority:["bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])","Change the priority of any process"],pcntl_signal:["bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])","Assigns a system signal handler to a PHP function"],pcntl_signal_dispatch:["bool pcntl_signal_dispatch()","Dispatch signals to signal handlers"],pcntl_sigprocmask:["bool pcntl_sigprocmask(int how, array set[, array &oldset])","Examine and change blocked signals"],pcntl_sigtimedwait:["int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])","Wait for queued signals"],pcntl_wait:["int pcntl_wait(int &status)","Waits on or returns the status of a forked child as defined by the waitpid() system call"],pcntl_waitpid:["int pcntl_waitpid(int pid, int &status, int options)","Waits on or returns the status of a forked child as defined by the waitpid() system call"],pcntl_wexitstatus:["int pcntl_wexitstatus(int status)","Returns the status code of a child's exit"],pcntl_wifexited:["bool pcntl_wifexited(int status)","Returns true if the child status code represents a successful exit"],pcntl_wifsignaled:["bool pcntl_wifsignaled(int status)","Returns true if the child status code represents a process that was terminated due to a signal"],pcntl_wifstopped:["bool pcntl_wifstopped(int status)","Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)"],pcntl_wstopsig:["int pcntl_wstopsig(int status)","Returns the number of the signal that caused the process to stop who's status code is passed"],pcntl_wtermsig:["int pcntl_wtermsig(int status)","Returns the number of the signal that terminated the process who's status code is passed"],pdo_drivers:["array pdo_drivers()","Return array of available PDO drivers"],pfsockopen:["resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])","Open persistent Internet or Unix domain socket connection"],pg_affected_rows:["int pg_affected_rows(resource result)","Returns the number of affected tuples"],pg_cancel_query:["bool pg_cancel_query(resource connection)","Cancel request"],pg_client_encoding:["string pg_client_encoding([resource connection])","Get the current client encoding"],pg_close:["bool pg_close([resource connection])","Close a PostgreSQL connection"],pg_connect:["resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)","Open a PostgreSQL connection"],pg_connection_busy:["bool pg_connection_busy(resource connection)","Get connection is busy or not"],pg_connection_reset:["bool pg_connection_reset(resource connection)","Reset connection (reconnect)"],pg_connection_status:["int pg_connection_status(resource connnection)","Get connection status"],pg_convert:["array pg_convert(resource db, string table, array values[, int options])","Check and convert values for PostgreSQL SQL statement"],pg_copy_from:["bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])","Copy table from array"],pg_copy_to:["array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])","Copy table to array"],pg_dbname:["string pg_dbname([resource connection])","Get the database name"],pg_delete:["mixed pg_delete(resource db, string table, array ids[, int options])","Delete records has ids (id=>value)"],pg_end_copy:["bool pg_end_copy([resource connection])","Sync with backend. Completes the Copy command"],pg_escape_bytea:["string pg_escape_bytea([resource connection,] string data)","Escape binary for bytea type"],pg_escape_string:["string pg_escape_string([resource connection,] string data)","Escape string for text/char type"],pg_execute:["resource pg_execute([resource connection,] string stmtname, array params)","Execute a prepared query"],pg_fetch_all:["array pg_fetch_all(resource result)","Fetch all rows into array"],pg_fetch_all_columns:["array pg_fetch_all_columns(resource result [, int column_number])","Fetch all rows into array"],pg_fetch_array:["array pg_fetch_array(resource result [, int row [, int result_type]])","Fetch a row as an array"],pg_fetch_assoc:["array pg_fetch_assoc(resource result [, int row])","Fetch a row as an assoc array"],pg_fetch_object:["object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])","Fetch a row as an object"],pg_fetch_result:["mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)","Returns values from a result identifier"],pg_fetch_row:["array pg_fetch_row(resource result [, int row [, int result_type]])","Get a row as an enumerated array"],pg_field_is_null:["int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)","Test if a field is NULL"],pg_field_name:["string pg_field_name(resource result, int field_number)","Returns the name of the field"],pg_field_num:["int pg_field_num(resource result, string field_name)","Returns the field number of the named field"],pg_field_prtlen:["int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)","Returns the printed length"],pg_field_size:["int pg_field_size(resource result, int field_number)","Returns the internal size of the field"],pg_field_table:["mixed pg_field_table(resource result, int field_number[, bool oid_only])","Returns the name of the table field belongs to, or table's oid if oid_only is true"],pg_field_type:["string pg_field_type(resource result, int field_number)","Returns the type name for the given field"],pg_field_type_oid:["string pg_field_type_oid(resource result, int field_number)","Returns the type oid for the given field"],pg_free_result:["bool pg_free_result(resource result)","Free result memory"],pg_get_notify:["array pg_get_notify([resource connection[, result_type]])","Get asynchronous notification"],pg_get_pid:["int pg_get_pid([resource connection)","Get backend(server) pid"],pg_get_result:["resource pg_get_result(resource connection)","Get asynchronous query result"],pg_host:["string pg_host([resource connection])","Returns the host name associated with the connection"],pg_insert:["mixed pg_insert(resource db, string table, array values[, int options])","Insert values (filed=>value) to table"],pg_last_error:["string pg_last_error([resource connection])","Get the error message string"],pg_last_notice:["string pg_last_notice(resource connection)","Returns the last notice set by the backend"],pg_last_oid:["string pg_last_oid(resource result)","Returns the last object identifier"],pg_lo_close:["bool pg_lo_close(resource large_object)","Close a large object"],pg_lo_create:["mixed pg_lo_create([resource connection],[mixed large_object_oid])","Create a large object"],pg_lo_export:["bool pg_lo_export([resource connection, ] int objoid, string filename)","Export large object direct to filesystem"],pg_lo_import:["int pg_lo_import([resource connection, ] string filename [, mixed oid])","Import large object direct from filesystem"],pg_lo_open:["resource pg_lo_open([resource connection,] int large_object_oid, string mode)","Open a large object and return fd"],pg_lo_read:["string pg_lo_read(resource large_object [, int len])","Read a large object"],pg_lo_read_all:["int pg_lo_read_all(resource large_object)","Read a large object and send straight to browser"],pg_lo_seek:["bool pg_lo_seek(resource large_object, int offset [, int whence])","Seeks position of large object"],pg_lo_tell:["int pg_lo_tell(resource large_object)","Returns current position of large object"],pg_lo_unlink:["bool pg_lo_unlink([resource connection,] string large_object_oid)","Delete a large object"],pg_lo_write:["int pg_lo_write(resource large_object, string buf [, int len])","Write a large object"],pg_meta_data:["array pg_meta_data(resource db, string table)","Get meta_data"],pg_num_fields:["int pg_num_fields(resource result)","Return the number of fields in the result"],pg_num_rows:["int pg_num_rows(resource result)","Return the number of rows in the result"],pg_options:["string pg_options([resource connection])","Get the options associated with the connection"],pg_parameter_status:["string|false pg_parameter_status([resource connection,] string param_name)","Returns the value of a server parameter"],pg_pconnect:["resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)","Open a persistent PostgreSQL connection"],pg_ping:["bool pg_ping([resource connection])","Ping database. If connection is bad, try to reconnect."],pg_port:["int pg_port([resource connection])","Return the port number associated with the connection"],pg_prepare:["resource pg_prepare([resource connection,] string stmtname, string query)","Prepare a query for future execution"],pg_put_line:["bool pg_put_line([resource connection,] string query)","Send null-terminated string to backend server"],pg_query:["resource pg_query([resource connection,] string query)","Execute a query"],pg_query_params:["resource pg_query_params([resource connection,] string query, array params)","Execute a query"],pg_result_error:["string pg_result_error(resource result)","Get error message associated with result"],pg_result_error_field:["string pg_result_error_field(resource result, int fieldcode)","Get error message field associated with result"],pg_result_seek:["bool pg_result_seek(resource result, int offset)","Set internal row offset"],pg_result_status:["mixed pg_result_status(resource result[, long result_type])","Get status of query result"],pg_select:["mixed pg_select(resource db, string table, array ids[, int options])","Select records that has ids (id=>value)"],pg_send_execute:["bool pg_send_execute(resource connection, string stmtname, array params)","Executes prevriously prepared stmtname asynchronously"],pg_send_prepare:["bool pg_send_prepare(resource connection, string stmtname, string query)","Asynchronously prepare a query for future execution"],pg_send_query:["bool pg_send_query(resource connection, string query)","Send asynchronous query"],pg_send_query_params:["bool pg_send_query_params(resource connection, string query, array params)","Send asynchronous parameterized query"],pg_set_client_encoding:["int pg_set_client_encoding([resource connection,] string encoding)","Set client encoding"],pg_set_error_verbosity:["int pg_set_error_verbosity([resource connection,] int verbosity)","Set error verbosity"],pg_trace:["bool pg_trace(string filename [, string mode [, resource connection]])","Enable tracing a PostgreSQL connection"],pg_transaction_status:["int pg_transaction_status(resource connnection)","Get transaction status"],pg_tty:["string pg_tty([resource connection])","Return the tty name associated with the connection"],pg_unescape_bytea:["string pg_unescape_bytea(string data)","Unescape binary for bytea type"],pg_untrace:["bool pg_untrace([resource connection])","Disable tracing of a PostgreSQL connection"],pg_update:["mixed pg_update(resource db, string table, array fields, array ids[, int options])","Update table using values (field=>value) and ids (id=>value)"],pg_version:["array pg_version([resource connection])","Returns an array with client, protocol and server version (when available)"],php_egg_logo_guid:["string php_egg_logo_guid(void)","Return the special ID used to request the PHP logo in phpinfo screens"],php_ini_loaded_file:["string php_ini_loaded_file(void)","Return the actual loaded ini filename"],php_ini_scanned_files:["string php_ini_scanned_files(void)","Return comma-separated string of .ini files parsed from the additional ini dir"],php_logo_guid:["string php_logo_guid(void)","Return the special ID used to request the PHP logo in phpinfo screens"],php_real_logo_guid:["string php_real_logo_guid(void)","Return the special ID used to request the PHP logo in phpinfo screens"],php_sapi_name:["string php_sapi_name(void)","Return the current SAPI module name"],php_snmpv3:["void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)","* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK snmp3_walk() - walk the mib and return a single dimensional array * containing the values. * st=SNMP_CMD_REALWALK snmp3_real_walk() - walk the mib and return an * array of oid,value pairs. * st=SNMP_CMD_SET snmp3_set() - query an agent and set a single value *"],php_strip_whitespace:["string php_strip_whitespace(string file_name)","Return source with stripped comments and whitespace"],php_uname:["string php_uname(void)","Return information about the system PHP was built on"],phpcredits:["void phpcredits([int flag])","Prints the list of people who've contributed to the PHP project"],phpinfo:["void phpinfo([int what])","Output a page of useful information about PHP and the current request"],phpversion:["string phpversion([string extension])","Return the current PHP version"],pi:["float pi(void)","Returns an approximation of pi"],png2wbmp:["bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)","Convert PNG image to WBMP image"],popen:["resource popen(string command, string mode)","Execute a command and open either a read or a write pipe to it"],posix_access:["bool posix_access(string file [, int mode])","Determine accessibility of a file (POSIX.1 5.6.3)"],posix_ctermid:["string posix_ctermid(void)","Generate terminal path name (POSIX.1, 4.7.1)"],posix_get_last_error:["int posix_get_last_error(void)","Retrieve the error number set by the last posix function which failed."],posix_getcwd:["string posix_getcwd(void)","Get working directory pathname (POSIX.1, 5.2.2)"],posix_getegid:["int posix_getegid(void)","Get the current effective group id (POSIX.1, 4.2.1)"],posix_geteuid:["int posix_geteuid(void)","Get the current effective user id (POSIX.1, 4.2.1)"],posix_getgid:["int posix_getgid(void)","Get the current group id (POSIX.1, 4.2.1)"],posix_getgrgid:["array posix_getgrgid(long gid)","Group database access (POSIX.1, 9.2.1)"],posix_getgrnam:["array posix_getgrnam(string groupname)","Group database access (POSIX.1, 9.2.1)"],posix_getgroups:["array posix_getgroups(void)","Get supplementary group id's (POSIX.1, 4.2.3)"],posix_getlogin:["string posix_getlogin(void)","Get user name (POSIX.1, 4.2.4)"],posix_getpgid:["int posix_getpgid(void)","Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)"],posix_getpgrp:["int posix_getpgrp(void)","Get current process group id (POSIX.1, 4.3.1)"],posix_getpid:["int posix_getpid(void)","Get the current process id (POSIX.1, 4.1.1)"],posix_getppid:["int posix_getppid(void)","Get the parent process id (POSIX.1, 4.1.1)"],posix_getpwnam:["array posix_getpwnam(string groupname)","User database access (POSIX.1, 9.2.2)"],posix_getpwuid:["array posix_getpwuid(long uid)","User database access (POSIX.1, 9.2.2)"],posix_getrlimit:["array posix_getrlimit(void)","Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)"],posix_getsid:["int posix_getsid(void)","Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)"],posix_getuid:["int posix_getuid(void)","Get the current user id (POSIX.1, 4.2.1)"],posix_initgroups:["bool posix_initgroups(string name, int base_group_id)","Calculate the group access list for the user specified in name."],posix_isatty:["bool posix_isatty(int fd)","Determine if filedesc is a tty (POSIX.1, 4.7.1)"],posix_kill:["bool posix_kill(int pid, int sig)","Send a signal to a process (POSIX.1, 3.3.2)"],posix_mkfifo:["bool posix_mkfifo(string pathname, int mode)","Make a FIFO special file (POSIX.1, 5.4.2)"],posix_mknod:["bool posix_mknod(string pathname, int mode [, int major [, int minor]])","Make a special or ordinary file (POSIX.1)"],posix_setegid:["bool posix_setegid(long uid)","Set effective group id"],posix_seteuid:["bool posix_seteuid(long uid)","Set effective user id"],posix_setgid:["bool posix_setgid(int uid)","Set group id (POSIX.1, 4.2.2)"],posix_setpgid:["bool posix_setpgid(int pid, int pgid)","Set process group id for job control (POSIX.1, 4.3.3)"],posix_setsid:["int posix_setsid(void)","Create session and set process group id (POSIX.1, 4.3.2)"],posix_setuid:["bool posix_setuid(long uid)","Set user id (POSIX.1, 4.2.2)"],posix_strerror:["string posix_strerror(int errno)","Retrieve the system error message associated with the given errno."],posix_times:["array posix_times(void)","Get process times (POSIX.1, 4.5.2)"],posix_ttyname:["string posix_ttyname(int fd)","Determine terminal device name (POSIX.1, 4.7.2)"],posix_uname:["array posix_uname(void)","Get system name (POSIX.1, 4.4.1)"],pow:["number pow(number base, number exponent)","Returns base raised to the power of exponent. Returns integer result when possible"],preg_filter:["mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])","Perform Perl-style regular expression replacement and only return matches."],preg_grep:["array preg_grep(string regex, array input [, int flags])","Searches array and returns entries which match regex"],preg_last_error:["int preg_last_error()","Returns the error code of the last regexp execution."],preg_match:["int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])","Perform a Perl-style regular expression match"],preg_match_all:["int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])","Perform a Perl-style global regular expression match"],preg_quote:["string preg_quote(string str [, string delim_char])","Quote regular expression characters plus an optional character"],preg_replace:["mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])","Perform Perl-style regular expression replacement."],preg_replace_callback:["mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])","Perform Perl-style regular expression replacement using replacement callback."],preg_split:["array preg_split(string pattern, string subject [, int limit [, int flags]])","Split string into an array using a perl-style regular expression as a delimiter"],prev:["mixed prev(array array_arg)","Move array argument's internal pointer to the previous element and return it"],print:["int print(string arg)","Output a string"],print_r:["mixed print_r(mixed var [, bool return])","Prints out or returns information about the specified variable"],printf:["int printf(string format [, mixed arg1 [, mixed ...]])","Output a formatted string"],proc_close:["int proc_close(resource process)","close a process opened by proc_open"],proc_get_status:["array proc_get_status(resource process)","get information about a process opened by proc_open"],proc_nice:["bool proc_nice(int priority)","Change the priority of the current process"],proc_open:["resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])","Run a process with more control over it's file descriptors"],proc_terminate:["bool proc_terminate(resource process [, long signal])","kill a process opened by proc_open"],property_exists:["bool property_exists(mixed object_or_class, string property_name)","Checks if the object or class has a property"],pspell_add_to_personal:["bool pspell_add_to_personal(int pspell, string word)","Adds a word to a personal list"],pspell_add_to_session:["bool pspell_add_to_session(int pspell, string word)","Adds a word to the current session"],pspell_check:["bool pspell_check(int pspell, string word)","Returns true if word is valid"],pspell_clear_session:["bool pspell_clear_session(int pspell)","Clears the current session"],pspell_config_create:["int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])","Create a new config to be used later to create a manager"],pspell_config_data_dir:["bool pspell_config_data_dir(int conf, string directory)","location of language data files"],pspell_config_dict_dir:["bool pspell_config_dict_dir(int conf, string directory)","location of the main word list"],pspell_config_ignore:["bool pspell_config_ignore(int conf, int ignore)","Ignore words <= n chars"],pspell_config_mode:["bool pspell_config_mode(int conf, long mode)","Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)"],pspell_config_personal:["bool pspell_config_personal(int conf, string personal)","Use a personal dictionary for this config"],pspell_config_repl:["bool pspell_config_repl(int conf, string repl)","Use a personal dictionary with replacement pairs for this config"],pspell_config_runtogether:["bool pspell_config_runtogether(int conf, bool runtogether)","Consider run-together words as valid components"],pspell_config_save_repl:["bool pspell_config_save_repl(int conf, bool save)","Save replacement pairs when personal list is saved for this config"],pspell_new:["int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])","Load a dictionary"],pspell_new_config:["int pspell_new_config(int config)","Load a dictionary based on the given config"],pspell_new_personal:["int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])","Load a dictionary with a personal wordlist"],pspell_save_wordlist:["bool pspell_save_wordlist(int pspell)","Saves the current (personal) wordlist"],pspell_store_replacement:["bool pspell_store_replacement(int pspell, string misspell, string correct)","Notify the dictionary of a user-selected replacement"],pspell_suggest:["array pspell_suggest(int pspell, string word)","Returns array of suggestions"],putenv:["bool putenv(string setting)","Set the value of an environment variable"],quoted_printable_decode:["string quoted_printable_decode(string str)","Convert a quoted-printable string to an 8 bit string"],quoted_printable_encode:["string quoted_printable_encode(string str) */",'PHP_FUNCTION(quoted_printable_encode) { char *str, *new_str; int str_len; size_t new_str_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) != SUCCESS) { return; } if (!str_len) { RETURN_EMPTY_STRING(); } new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len); RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}'],quotemeta:["string quotemeta(string str)","Quotes meta characters"],rad2deg:["float rad2deg(float number)","Converts the radian number to the equivalent number in degrees"],rand:["int rand([int min, int max])","Returns a random number"],range:["array range(mixed low, mixed high[, int step])","Create an array containing the range of integers or characters from low to high (inclusive)"],rawurldecode:["string rawurldecode(string str)","Decodes URL-encodes string"],rawurlencode:["string rawurlencode(string str)","URL-encodes string"],readdir:["string readdir([resource dir_handle])","Read directory entry from dir_handle"],readfile:["int readfile(string filename [, bool use_include_path[, resource context]])","Output a file or a URL"],readgzfile:["int readgzfile(string filename [, int use_include_path])","Output a .gz-file"],readline:["string readline([string prompt])","Reads a line"],readline_add_history:["bool readline_add_history(string prompt)","Adds a line to the history"],readline_callback_handler_install:["void readline_callback_handler_install(string prompt, mixed callback)","Initializes the readline callback interface and terminal, prints the prompt and returns immediately"],readline_callback_handler_remove:["bool readline_callback_handler_remove()","Removes a previously installed callback handler and restores terminal settings"],readline_callback_read_char:["void readline_callback_read_char()","Informs the readline callback interface that a character is ready for input"],readline_clear_history:["bool readline_clear_history(void)","Clears the history"],readline_completion_function:["bool readline_completion_function(string funcname)","Readline completion function?"],readline_info:["mixed readline_info([string varname [, string newvalue]])","Gets/sets various internal readline variables."],readline_list_history:["array readline_list_history(void)","Lists the history"],readline_on_new_line:["void readline_on_new_line(void)","Inform readline that the cursor has moved to a new line"],readline_read_history:["bool readline_read_history([string filename])","Reads the history"],readline_redisplay:["void readline_redisplay(void)","Ask readline to redraw the display"],readline_write_history:["bool readline_write_history([string filename])","Writes the history"],readlink:["string readlink(string filename)","Return the target of a symbolic link"],realpath:["string realpath(string path)","Return the resolved path"],realpath_cache_get:["bool realpath_cache_get()","Get current size of realpath cache"],realpath_cache_size:["bool realpath_cache_size()","Get current size of realpath cache"],recode_file:["bool recode_file(string request, resource input, resource output)","Recode file input into file output according to request"],recode_string:["string recode_string(string request, string str)","Recode string str according to request string"],register_shutdown_function:["void register_shutdown_function(string function_name)","Register a user-level function to be called on request termination"],register_tick_function:["bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])","Registers a tick callback function"],rename:["bool rename(string old_name, string new_name[, resource context])","Rename a file"],require:["bool require(string path)","Includes and evaluates the specified file, erroring if the file cannot be included"],require_once:["bool require_once(string path)","Includes and evaluates the specified file, erroring if the file cannot be included"],reset:["mixed reset(array array_arg)","Set array argument's internal pointer to the first element and return it"],restore_error_handler:["void restore_error_handler(void)","Restores the previously defined error handler function"],restore_exception_handler:["void restore_exception_handler(void)","Restores the previously defined exception handler function"],restore_include_path:["void restore_include_path()","Restore the value of the include_path configuration option"],rewind:["bool rewind(resource fp)","Rewind the position of a file pointer"],rewinddir:["void rewinddir([resource dir_handle])","Rewind dir_handle back to the start"],rmdir:["bool rmdir(string dirname[, resource context])","Remove a directory"],round:["float round(float number [, int precision [, int mode]])","Returns the number rounded to specified precision"],rsort:["bool rsort(array &array_arg [, int sort_flags])","Sort an array in reverse order"],rtrim:["string rtrim(string str [, string character_mask])","Removes trailing whitespace"],scandir:["array scandir(string dir [, int sorting_order [, resource context]])","List files & directories inside the specified path"],sem_acquire:["bool sem_acquire(resource id)","Acquires the semaphore with the given id, blocking if necessary"],sem_get:["resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])","Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously"],sem_release:["bool sem_release(resource id)","Releases the semaphore with the given id"],sem_remove:["bool sem_remove(resource id)","Removes semaphore from Unix systems"],serialize:["string serialize(mixed variable)","Returns a string representation of variable (which can later be unserialized)"],session_cache_expire:["int session_cache_expire([int new_cache_expire])","Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire"],session_cache_limiter:["string session_cache_limiter([string new_cache_limiter])","Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter"],session_decode:["bool session_decode(string data)","Deserializes data and reinitializes the variables"],session_destroy:["bool session_destroy(void)","Destroy the current session and all data associated with it"],session_encode:["string session_encode(void)","Serializes the current setup and returns the serialized representation"],session_get_cookie_params:["array session_get_cookie_params(void)","Return the session cookie parameters"],session_id:["string session_id([string newid])","Return the current session id. If newid is given, the session id is replaced with newid"],session_is_registered:["bool session_is_registered(string varname)","Checks if a variable is registered in session"],session_module_name:["string session_module_name([string newname])","Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname"],session_name:["string session_name([string newname])","Return the current session name. If newname is given, the session name is replaced with newname"],session_regenerate_id:["bool session_regenerate_id([bool delete_old_session])","Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session."],session_register:["bool session_register(mixed var_names [, mixed ...])","Adds varname(s) to the list of variables which are freezed at the session end"],session_save_path:["string session_save_path([string newname])","Return the current save path passed to module_name. If newname is given, the save path is replaced with newname"],session_set_cookie_params:["void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])","Set session cookie parameters"],session_set_save_handler:["void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)","Sets user-level functions"],session_start:["bool session_start(void)","Begin session - reinitializes freezed variables, registers browsers etc"],session_unregister:["bool session_unregister(string varname)","Removes varname from the list of variables which are freezed at the session end"],session_unset:["void session_unset(void)","Unset all registered variables"],session_write_close:["void session_write_close(void)","Write session data and end session"],set_error_handler:["string set_error_handler(string error_handler [, int error_types])","Sets a user-defined error handler function. Returns the previously defined error handler, or false on error"],set_exception_handler:["string set_exception_handler(callable exception_handler)","Sets a user-defined exception handler function. Returns the previously defined exception handler, or false on error"],set_include_path:["string set_include_path(string new_include_path)","Sets the include_path configuration option"],set_magic_quotes_runtime:["bool set_magic_quotes_runtime(int new_setting)","Set the current active configuration setting of magic_quotes_runtime and return previous"],set_time_limit:["bool set_time_limit(int seconds)","Sets the maximum time a script can run"],setcookie:["bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])","Send a cookie"],setlocale:["string setlocale(mixed category, string locale [, string ...])","Set locale information"],setrawcookie:["bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])","Send a cookie with no url encoding of the value"],settype:["bool settype(mixed var, string type)","Set the type of the variable"],sha1:["string sha1(string str [, bool raw_output])","Calculate the sha1 hash of a string"],sha1_file:["string sha1_file(string filename [, bool raw_output])","Calculate the sha1 hash of given filename"],shell_exec:["string shell_exec(string cmd)","Execute command via shell and return complete output as string"],shm_attach:["int shm_attach(int key [, int memsize [, int perm]])","Creates or open a shared memory segment"],shm_detach:["bool shm_detach(resource shm_identifier)","Disconnects from shared memory segment"],shm_get_var:["mixed shm_get_var(resource id, int variable_key)","Returns a variable from shared memory"],shm_has_var:["bool shm_has_var(resource id, int variable_key)","Checks whether a specific entry exists"],shm_put_var:["bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)","Inserts or updates a variable in shared memory"],shm_remove:["bool shm_remove(resource shm_identifier)","Removes shared memory from Unix systems"],shm_remove_var:["bool shm_remove_var(resource id, int variable_key)","Removes variable from shared memory"],shmop_close:["void shmop_close (int shmid)","closes a shared memory segment"],shmop_delete:["bool shmop_delete (int shmid)","mark segment for deletion"],shmop_open:["int shmop_open (int key, string flags, int mode, int size)","gets and attaches a shared memory segment"],shmop_read:["string shmop_read (int shmid, int start, int count)","reads from a shm segment"],shmop_size:["int shmop_size (int shmid)","returns the shm size"],shmop_write:["int shmop_write (int shmid, string data, int offset)","writes to a shared memory segment"],shuffle:["bool shuffle(array array_arg)","Randomly shuffle the contents of an array"],similar_text:["int similar_text(string str1, string str2 [, float percent])","Calculates the similarity between two strings"],simplexml_import_dom:["simplemxml_element simplexml_import_dom(domNode node [, string class_name])","Get a simplexml_element object from dom to allow for processing"],simplexml_load_file:["simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])","Load a filename and return a simplexml_element object to allow for processing"],simplexml_load_string:["simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])","Load a string and return a simplexml_element object to allow for processing"],sin:["float sin(float number)","Returns the sine of the number in radians"],sinh:["float sinh(float number)","Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2"],sleep:["void sleep(int seconds)","Delay for a given number of seconds"],smfi_addheader:["bool smfi_addheader(string headerf, string headerv)","Adds a header to the current message."],smfi_addrcpt:["bool smfi_addrcpt(string rcpt)","Add a recipient to the message envelope."],smfi_chgheader:["bool smfi_chgheader(string headerf, string headerv)","Changes a header's value for the current message."],smfi_delrcpt:["bool smfi_delrcpt(string rcpt)","Removes the named recipient from the current message's envelope."],smfi_getsymval:["string smfi_getsymval(string macro)","Returns the value of the given macro or NULL if the macro is not defined."],smfi_replacebody:["bool smfi_replacebody(string body)","Replaces the body of the current message. If called more than once, subsequent calls result in data being appended to the new body."],smfi_setflags:["void smfi_setflags(long flags)","Sets the flags describing the actions the filter may take."],smfi_setreply:["bool smfi_setreply(string rcode, string xcode, string message)","Directly set the SMTP error reply code for this connection. This code will be used on subsequent error replies resulting from actions taken by this filter."],smfi_settimeout:["void smfi_settimeout(long timeout)","Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket."],snmp2_get:["string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])","Fetch a SNMP object"],snmp2_getnext:["string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])","Fetch a SNMP object"],snmp2_real_walk:["array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])","Return all objects including their respective object id withing the specified one"],snmp2_set:["int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])","Set the value of a SNMP object"],snmp2_walk:["array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])","Return all objects under the specified object id"],snmp3_get:["int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp3_getnext:["int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp3_real_walk:["int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp3_set:["int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp3_walk:["int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp_get_quick_print:["bool snmp_get_quick_print(void)","Return the current status of quick_print"],snmp_get_valueretrieval:["int snmp_get_valueretrieval()","Return the method how the SNMP values will be returned"],snmp_read_mib:["int snmp_read_mib(string filename)","Reads and parses a MIB file into the active MIB tree."],snmp_set_enum_print:["void snmp_set_enum_print(int enum_print)","Return all values that are enums with their enum value instead of the raw integer"],snmp_set_oid_output_format:["void snmp_set_oid_output_format(int oid_format)","Set the OID output format."],snmp_set_quick_print:["void snmp_set_quick_print(int quick_print)","Return all objects including their respective object id withing the specified one"],snmp_set_valueretrieval:["void snmp_set_valueretrieval(int method)","Specify the method how the SNMP values will be returned"],snmpget:["string snmpget(string host, string community, string object_id [, int timeout [, int retries]])","Fetch a SNMP object"],snmpgetnext:["string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])","Fetch a SNMP object"],snmprealwalk:["array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])","Return all objects including their respective object id withing the specified one"],snmpset:["int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])","Set the value of a SNMP object"],snmpwalk:["array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])","Return all objects under the specified object id"],socket_accept:["resource socket_accept(resource socket)","Accepts a connection on the listening socket fd"],socket_bind:["bool socket_bind(resource socket, string addr [, int port])","Binds an open socket to a listening port, port is only specified in AF_INET family."],socket_clear_error:["void socket_clear_error([resource socket])","Clears the error on the socket or the last error code."],socket_close:["void socket_close(resource socket)","Closes a file descriptor"],socket_connect:["bool socket_connect(resource socket, string addr [, int port])","Opens a connection to addr:port on the socket specified by socket"],socket_create:["resource socket_create(int domain, int type, int protocol)","Creates an endpoint for communication in the domain specified by domain, of type specified by type"],socket_create_listen:["resource socket_create_listen(int port[, int backlog])","Opens a socket on port to accept connections"],socket_create_pair:["bool socket_create_pair(int domain, int type, int protocol, array &fd)","Creates a pair of indistinguishable sockets and stores them in fds."],socket_get_option:["mixed socket_get_option(resource socket, int level, int optname)","Gets socket options for the socket"],socket_getpeername:["bool socket_getpeername(resource socket, string &addr[, int &port])","Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type."],socket_getsockname:["bool socket_getsockname(resource socket, string &addr[, int &port])","Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type."],socket_last_error:["int socket_last_error([resource socket])","Returns the last socket error (either the last used or the provided socket resource)"],socket_listen:["bool socket_listen(resource socket[, int backlog])","Sets the maximum number of connections allowed to be waited for on the socket specified by fd"],socket_read:["string socket_read(resource socket, int length [, int type])","Reads a maximum of length bytes from socket"],socket_recv:["int socket_recv(resource socket, string &buf, int len, int flags)","Receives data from a connected socket"],socket_recvfrom:["int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])","Receives data from a socket, connected or not"],socket_select:["int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])","Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec"],socket_send:["int socket_send(resource socket, string buf, int len, int flags)","Sends data to a connected socket"],socket_sendto:["int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])","Sends a message to a socket, whether it is connected or not"],socket_set_block:["bool socket_set_block(resource socket)","Sets blocking mode on a socket resource"],socket_set_nonblock:["bool socket_set_nonblock(resource socket)","Sets nonblocking mode on a socket resource"],socket_set_option:["bool socket_set_option(resource socket, int level, int optname, int|array optval)","Sets socket options for the socket"],socket_shutdown:["bool socket_shutdown(resource socket[, int how])","Shuts down a socket for receiving, sending, or both."],socket_strerror:["string socket_strerror(int errno)","Returns a string describing an error"],socket_write:["int socket_write(resource socket, string buf[, int length])","Writes the buffer to the socket resource, length is optional"],solid_fetch_prev:["bool solid_fetch_prev(resource result_id)",""],sort:["bool sort(array &array_arg [, int sort_flags])","Sort an array"],soundex:["string soundex(string str)","Calculate the soundex key of a string"],spl_autoload:["void spl_autoload(string class_name [, string file_extensions])","Default implementation for __autoload()"],spl_autoload_call:["void spl_autoload_call(string class_name)","Try all registerd autoload function to load the requested class"],spl_autoload_extensions:["string spl_autoload_extensions([string file_extensions])","Register and return default file extensions for spl_autoload"],spl_autoload_functions:["false|array spl_autoload_functions()","Return all registered __autoload() functionns"],spl_autoload_register:['bool spl_autoload_register([mixed autoload_function = "spl_autoload" [, throw = true [, prepend]]])',"Register given function as __autoload() implementation"],spl_autoload_unregister:["bool spl_autoload_unregister(mixed autoload_function)","Unregister given function as __autoload() implementation"],spl_classes:["array spl_classes()","Return an array containing the names of all clsses and interfaces defined in SPL"],spl_object_hash:["string spl_object_hash(object obj)","Return hash id for given object"],split:["array split(string pattern, string string [, int limit])","Split string into array by regular expression"],spliti:["array spliti(string pattern, string string [, int limit])","Split string into array by regular expression case-insensitive"],sprintf:["string sprintf(string format [, mixed arg1 [, mixed ...]])","Return a formatted string"],sql_regcase:["string sql_regcase(string string)","Make regular expression for case insensitive match"],sqlite_array_query:["array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])","Executes a query against a given database and returns an array of arrays."],sqlite_busy_timeout:["void sqlite_busy_timeout(resource db, int ms)","Set busy timeout duration. If ms <= 0, all busy handlers are disabled."],sqlite_changes:["int sqlite_changes(resource db)","Returns the number of rows that were changed by the most recent SQL statement."],sqlite_close:["void sqlite_close(resource db)","Closes an open sqlite database."],sqlite_column:["mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])","Fetches a column from the current row of a result set."],sqlite_create_aggregate:["bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])","Registers an aggregate function for queries."],sqlite_create_function:["bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])",'Registers a "regular" function for queries.'],sqlite_current:["array sqlite_current(resource result [, int result_type [, bool decode_binary]])","Fetches the current row from a result set as an array."],sqlite_error_string:["string sqlite_error_string(int error_code)","Returns the textual description of an error code."],sqlite_escape_string:["string sqlite_escape_string(string item)","Escapes a string for use as a query parameter."],sqlite_exec:["boolean sqlite_exec(string query, resource db[, string &error_message])","Executes a result-less query against a given database"],sqlite_factory:["object sqlite_factory(string filename [, int mode [, string &error_message]])","Opens a SQLite database and creates an object for it. Will create the database if it does not exist."],sqlite_fetch_all:["array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])","Fetches all rows from a result set as an array of arrays."],sqlite_fetch_array:["array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])","Fetches the next row from a result set as an array."],sqlite_fetch_column_types:["resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])","Return an array of column types from a particular table."],sqlite_fetch_object:["object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])","Fetches the next row from a result set as an object."],sqlite_fetch_single:["string sqlite_fetch_single(resource result [, bool decode_binary])","Fetches the first column of a result set as a string."],sqlite_field_name:["string sqlite_field_name(resource result, int field_index)","Returns the name of a particular field of a result set."],sqlite_has_prev:["bool sqlite_has_prev(resource result)","* Returns whether a previous row is available."],sqlite_key:["int sqlite_key(resource result)","Return the current row index of a buffered result."],sqlite_last_error:["int sqlite_last_error(resource db)","Returns the error code of the last error for a database."],sqlite_last_insert_rowid:["int sqlite_last_insert_rowid(resource db)","Returns the rowid of the most recently inserted row."],sqlite_libencoding:["string sqlite_libencoding()","Returns the encoding (iso8859 or UTF-8) of the linked SQLite library."],sqlite_libversion:["string sqlite_libversion()","Returns the version of the linked SQLite library."],sqlite_next:["bool sqlite_next(resource result)","Seek to the next row number of a result set."],sqlite_num_fields:["int sqlite_num_fields(resource result)","Returns the number of fields in a result set."],sqlite_num_rows:["int sqlite_num_rows(resource result)","Returns the number of rows in a buffered result set."],sqlite_open:["resource sqlite_open(string filename [, int mode [, string &error_message]])","Opens a SQLite database. Will create the database if it does not exist."],sqlite_popen:["resource sqlite_popen(string filename [, int mode [, string &error_message]])","Opens a persistent handle to a SQLite database. Will create the database if it does not exist."],sqlite_prev:["bool sqlite_prev(resource result)","* Seek to the previous row number of a result set."],sqlite_query:["resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])","Executes a query against a given database and returns a result handle."],sqlite_rewind:["bool sqlite_rewind(resource result)","Seek to the first row number of a buffered result set."],sqlite_seek:["bool sqlite_seek(resource result, int row)","Seek to a particular row number of a buffered result set."],sqlite_single_query:["array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])","Executes a query and returns either an array for one single column or the value of the first row."],sqlite_udf_decode_binary:["string sqlite_udf_decode_binary(string data)","Decode binary encoding on a string parameter passed to an UDF."],sqlite_udf_encode_binary:["string sqlite_udf_encode_binary(string data)","Apply binary encoding (if required) to a string to return from an UDF."],sqlite_unbuffered_query:["resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])","Executes a query that does not prefetch and buffer all data."],sqlite_valid:["bool sqlite_valid(resource result)","Returns whether more rows are available."],sqrt:["float sqrt(float number)","Returns the square root of the number"],srand:["void srand([int seed])","Seeds random number generator"],sscanf:["mixed sscanf(string str, string format [, string ...])","Implements an ANSI C compatible sscanf"],stat:["array stat(string filename)","Give information about a file"],str_getcsv:["array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])","Parse a CSV string into an array"],str_ireplace:["mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])","Replaces all occurrences of search in haystack with replace / case-insensitive"],str_pad:["string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])","Returns input string padded on the left or right to specified length with pad_string"],str_repeat:["string str_repeat(string input, int mult)","Returns the input string repeat mult times"],str_replace:["mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])","Replaces all occurrences of search in haystack with replace"],str_rot13:["string str_rot13(string str)","Perform the rot13 transform on a string"],str_shuffle:["void str_shuffle(string str)","Shuffles string. One permutation of all possible is created"],str_split:["array str_split(string str [, int split_length])","Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long."],str_word_count:["mixed str_word_count(string str, [int format [, string charlist]])",'Counts the number of words inside a string. If format of 1 is specified, then the function will return an array containing all the words found inside the string. If format of 2 is specified, then the function will return an associated array where the position of the word is the key and the word itself is the value. For the purpose of this function, \'word\' is defined as a locale dependent string containing alphabetic characters, which also may contain, but not start with "\'" and "-" characters.'],strcasecmp:["int strcasecmp(string str1, string str2)","Binary safe case-insensitive string comparison"],strchr:["string strchr(string haystack, string needle)","An alias for strstr"],strcmp:["int strcmp(string str1, string str2)","Binary safe string comparison"],strcoll:["int strcoll(string str1, string str2)","Compares two strings using the current locale"],strcspn:["int strcspn(string str, string mask [, start [, len]])","Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)"],stream_bucket_append:["void stream_bucket_append(resource brigade, resource bucket)","Append bucket to brigade"],stream_bucket_make_writeable:["object stream_bucket_make_writeable(resource brigade)","Return a bucket object from the brigade for operating on"],stream_bucket_new:["resource stream_bucket_new(resource stream, string buffer)","Create a new bucket for use on the current stream"],stream_bucket_prepend:["void stream_bucket_prepend(resource brigade, resource bucket)","Prepend bucket to brigade"],stream_context_create:["resource stream_context_create([array options[, array params]])","Create a file context and optionally set parameters"],stream_context_get_default:["resource stream_context_get_default([array options])","Get a handle on the default file/stream context and optionally set parameters"],stream_context_get_options:["array stream_context_get_options(resource context|resource stream)","Retrieve options for a stream/wrapper/context"],stream_context_get_params:["array stream_context_get_params(resource context|resource stream)","Get parameters of a file context"],stream_context_set_default:["resource stream_context_set_default(array options)","Set default file/stream context, returns the context as a resource"],stream_context_set_option:["bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)","Set an option for a wrapper"],stream_context_set_params:["bool stream_context_set_params(resource context|resource stream, array options)","Set parameters for a file context"],stream_copy_to_stream:["long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])","Reads up to maxlen bytes from source stream and writes them to dest stream."],stream_filter_append:["resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])","Append a filter to a stream"],stream_filter_prepend:["resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])","Prepend a filter to a stream"],stream_filter_register:["bool stream_filter_register(string filtername, string classname)","Registers a custom filter handler class"],stream_filter_remove:["bool stream_filter_remove(resource stream_filter)","Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource"],stream_get_contents:["string stream_get_contents(resource source [, long maxlen [, long offset]])","Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string."],stream_get_filters:["array stream_get_filters(void)","Returns a list of registered filters"],stream_get_line:["string stream_get_line(resource stream, int maxlen [, string ending])","Read up to maxlen bytes from a stream or until the ending string is found"],stream_get_meta_data:["array stream_get_meta_data(resource fp)","Retrieves header/meta data from streams/file pointers"],stream_get_transports:["array stream_get_transports()","Retrieves list of registered socket transports"],stream_get_wrappers:["array stream_get_wrappers()","Retrieves list of registered stream wrappers"],stream_is_local:["bool stream_is_local(resource stream|string url)",""],stream_resolve_include_path:["string stream_resolve_include_path(string filename)","Determine what file will be opened by calls to fopen() with a relative path"],stream_select:["int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])","Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec"],stream_set_blocking:["bool stream_set_blocking(resource socket, int mode)","Set blocking/non-blocking mode on a socket or stream"],stream_set_timeout:["bool stream_set_timeout(resource stream, int seconds [, int microseconds])","Set timeout on stream read to seconds + microseonds"],stream_set_write_buffer:["int stream_set_write_buffer(resource fp, int buffer)","Set file write buffer"],stream_socket_accept:["resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])","Accept a client connection from a server socket"],stream_socket_client:["resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])","Open a client connection to a remote address"],stream_socket_enable_crypto:["int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])","Enable or disable a specific kind of crypto on the stream"],stream_socket_get_name:["string stream_socket_get_name(resource stream, bool want_peer)","Returns either the locally bound or remote name for a socket stream"],stream_socket_pair:["array stream_socket_pair(int domain, int type, int protocol)","Creates a pair of connected, indistinguishable socket streams"],stream_socket_recvfrom:["string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])","Receives data from a socket stream"],stream_socket_sendto:["long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])","Send data to a socket stream. If target_addr is specified it must be in dotted quad (or [ipv6]) format"],stream_socket_server:["resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])","Create a server socket bound to localaddress"],stream_socket_shutdown:["int stream_socket_shutdown(resource stream, int how)","causes all or part of a full-duplex connection on the socket associated with stream to be shut down. If how is SHUT_RD, further receptions will be disallowed. If how is SHUT_WR, further transmissions will be disallowed. If how is SHUT_RDWR, further receptions and transmissions will be disallowed."],stream_supports_lock:["bool stream_supports_lock(resource stream)","Tells whether the stream supports locking through flock()."],stream_wrapper_register:["bool stream_wrapper_register(string protocol, string classname[, integer flags])","Registers a custom URL protocol handler class"],stream_wrapper_restore:["bool stream_wrapper_restore(string protocol)","Restore the original protocol handler, overriding if necessary"],stream_wrapper_unregister:["bool stream_wrapper_unregister(string protocol)","Unregister a wrapper for the life of the current request."],strftime:["string strftime(string format [, int timestamp])","Format a local time/date according to locale settings"],strip_tags:["string strip_tags(string str [, string allowable_tags])","Strips HTML and PHP tags from a string"],stripcslashes:["string stripcslashes(string str)","Strips backslashes from a string. Uses C-style conventions"],stripos:["int stripos(string haystack, string needle [, int offset])","Finds position of first occurrence of a string within another, case insensitive"],stripslashes:["string stripslashes(string str)","Strips backslashes from a string"],stristr:["string stristr(string haystack, string needle[, bool part])","Finds first occurrence of a string within another, case insensitive"],strlen:["int strlen(string str)","Get string length"],strnatcasecmp:["int strnatcasecmp(string s1, string s2)","Returns the result of case-insensitive string comparison using 'natural' algorithm"],strnatcmp:["int strnatcmp(string s1, string s2)","Returns the result of string comparison using 'natural' algorithm"],strncasecmp:["int strncasecmp(string str1, string str2, int len)","Binary safe string comparison"],strncmp:["int strncmp(string str1, string str2, int len)","Binary safe string comparison"],strpbrk:["array strpbrk(string haystack, string char_list)","Search a string for any of a set of characters"],strpos:["int strpos(string haystack, string needle [, int offset])","Finds position of first occurrence of a string within another"],strptime:["string strptime(string timestamp, string format)","Parse a time/date generated with strftime()"],strrchr:["string strrchr(string haystack, string needle)","Finds the last occurrence of a character in a string within another"],strrev:["string strrev(string str)","Reverse a string"],strripos:["int strripos(string haystack, string needle [, int offset])","Finds position of last occurrence of a string within another string"],strrpos:["int strrpos(string haystack, string needle [, int offset])","Finds position of last occurrence of a string within another string"],strspn:["int strspn(string str, string mask [, start [, len]])","Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)"],strstr:["string strstr(string haystack, string needle[, bool part])","Finds first occurrence of a string within another"],strtok:["string strtok([string str,] string token)","Tokenize a string"],strtolower:["string strtolower(string str)","Makes a string lowercase"],strtotime:["int strtotime(string time [, int now ])","Convert string representation of date and time to a timestamp"],strtoupper:["string strtoupper(string str)","Makes a string uppercase"],strtr:["string strtr(string str, string from[, string to])","Translates characters in str using given translation tables"],strval:["string strval(mixed var)","Get the string value of a variable"],substr:["string substr(string str, int start [, int length])","Returns part of a string"],substr_compare:["int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])","Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters"],substr_count:["int substr_count(string haystack, string needle [, int offset [, int length]])","Returns the number of times a substring occurs in the string"],substr_replace:["mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])","Replaces part of a string with another string"],sybase_affected_rows:["int sybase_affected_rows([resource link_id])","Get number of affected rows in last query"],sybase_close:["bool sybase_close([resource link_id])","Close Sybase connection"],sybase_connect:["int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])","Open Sybase server connection"],sybase_data_seek:["bool sybase_data_seek(resource result, int offset)","Move internal row pointer"],sybase_deadlock_retry_count:["void sybase_deadlock_retry_count(int retry_count)","Sets deadlock retry count"],sybase_fetch_array:["array sybase_fetch_array(resource result)","Fetch row as array"],sybase_fetch_assoc:["array sybase_fetch_assoc(resource result)","Fetch row as array without numberic indices"],sybase_fetch_field:["object sybase_fetch_field(resource result [, int offset])","Get field information"],sybase_fetch_object:["object sybase_fetch_object(resource result [, mixed object])","Fetch row as object"],sybase_fetch_row:["array sybase_fetch_row(resource result)","Get row as enumerated array"],sybase_field_seek:["bool sybase_field_seek(resource result, int offset)","Set field offset"],sybase_free_result:["bool sybase_free_result(resource result)","Free result memory"],sybase_get_last_message:["string sybase_get_last_message(void)","Returns the last message from server (over min_message_severity)"],sybase_min_client_severity:["void sybase_min_client_severity(int severity)","Sets minimum client severity"],sybase_min_server_severity:["void sybase_min_server_severity(int severity)","Sets minimum server severity"],sybase_num_fields:["int sybase_num_fields(resource result)","Get number of fields in result"],sybase_num_rows:["int sybase_num_rows(resource result)","Get number of rows in result"],sybase_pconnect:["int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])","Open persistent Sybase connection"],sybase_query:["int sybase_query(string query [, resource link_id])","Send Sybase query"],sybase_result:["string sybase_result(resource result, int row, mixed field)","Get result data"],sybase_select_db:["bool sybase_select_db(string database [, resource link_id])","Select Sybase database"],sybase_set_message_handler:["bool sybase_set_message_handler(mixed error_func [, resource connection])","Set the error handler, to be called when a server message is raised. If error_func is NULL the handler will be deleted"],sybase_unbuffered_query:["int sybase_unbuffered_query(string query [, resource link_id])","Send Sybase query"],symlink:["int symlink(string target, string link)","Create a symbolic link"],sys_get_temp_dir:["string sys_get_temp_dir()","Returns directory path used for temporary files"],sys_getloadavg:["array sys_getloadavg()",""],syslog:["bool syslog(int priority, string message)","Generate a system log message"],system:["int system(string command [, int &return_value])","Execute an external program and display output"],tan:["float tan(float number)","Returns the tangent of the number in radians"],tanh:["float tanh(float number)","Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)"],tempnam:["string tempnam(string dir, string prefix)","Create a unique filename in a directory"],textdomain:["string textdomain(string domain)",'Set the textdomain to "domain". Returns the current domain'],tidy_access_count:["int tidy_access_count()","Returns the Number of Tidy accessibility warnings encountered for specified document."],tidy_clean_repair:["boolean tidy_clean_repair()","Execute configured cleanup and repair operations on parsed markup"],tidy_config_count:["int tidy_config_count()","Returns the Number of Tidy configuration errors encountered for specified document."],tidy_diagnose:["boolean tidy_diagnose()","Run configured diagnostics on parsed and repaired markup."],tidy_error_count:["int tidy_error_count()","Returns the Number of Tidy errors encountered for specified document."],tidy_get_body:["TidyNode tidy_get_body(resource tidy)","Returns a TidyNode Object starting from the tag of the tidy parse tree"],tidy_get_config:["array tidy_get_config()","Get current Tidy configuarion"],tidy_get_error_buffer:["string tidy_get_error_buffer([boolean detailed])","Return warnings and errors which occured parsing the specified document"],tidy_get_head:["TidyNode tidy_get_head()","Returns a TidyNode Object starting from the tag of the tidy parse tree"],tidy_get_html:["TidyNode tidy_get_html()","Returns a TidyNode Object starting from the tag of the tidy parse tree"],tidy_get_html_ver:["int tidy_get_html_ver()","Get the Detected HTML version for the specified document."],tidy_get_opt_doc:["string tidy_get_opt_doc(tidy resource, string optname)","Returns the documentation for the given option name"],tidy_get_output:["string tidy_get_output()","Return a string representing the parsed tidy markup"],tidy_get_release:["string tidy_get_release()","Get release date (version) for Tidy library"],tidy_get_root:["TidyNode tidy_get_root()","Returns a TidyNode Object representing the root of the tidy parse tree"],tidy_get_status:["int tidy_get_status()","Get status of specfied document."],tidy_getopt:["mixed tidy_getopt(string option)","Returns the value of the specified configuration option for the tidy document."],tidy_is_xhtml:["boolean tidy_is_xhtml()","Indicates if the document is a XHTML document."],tidy_is_xml:["boolean tidy_is_xml()","Indicates if the document is a generic (non HTML/XHTML) XML document."],tidy_parse_file:["boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])","Parse markup in file or URI"],tidy_parse_string:["bool tidy_parse_string(string input [, mixed config_options [, string encoding]])","Parse a document stored in a string"],tidy_repair_file:["boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])","Repair a file using an optionally provided configuration file"],tidy_repair_string:["boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])","Repair a string using an optionally provided configuration file"],tidy_warning_count:["int tidy_warning_count()","Returns the Number of Tidy warnings encountered for specified document."],time:["int time(void)","Return current UNIX timestamp"],time_nanosleep:["mixed time_nanosleep(long seconds, long nanoseconds)","Delay for a number of seconds and nano seconds"],time_sleep_until:["mixed time_sleep_until(float timestamp)","Make the script sleep until the specified time"],timezone_abbreviations_list:["array timezone_abbreviations_list()","Returns associative array containing dst, offset and the timezone name"],timezone_identifiers_list:["array timezone_identifiers_list([long what[, string country]])","Returns numerically index array with all timezone identifiers."],timezone_location_get:["array timezone_location_get()","Returns location information for a timezone, including country code, latitude/longitude and comments"],timezone_name_from_abbr:["string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])","Returns the timezone name from abbrevation"],timezone_name_get:["string timezone_name_get(DateTimeZone object)","Returns the name of the timezone."],timezone_offset_get:["long timezone_offset_get(DateTimeZone object, DateTime object)","Returns the timezone offset."],timezone_open:["DateTimeZone timezone_open(string timezone)","Returns new DateTimeZone object"],timezone_transitions_get:["array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])","Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone."],timezone_version_get:["array timezone_version_get()","Returns the Olson database version number."],tmpfile:["resource tmpfile(void)","Create a temporary file that will be deleted automatically after use"],token_get_all:["array token_get_all(string source)",""],token_name:["string token_name(int type)",""],touch:["bool touch(string filename [, int time [, int atime]])","Set modification time of file"],trigger_error:["void trigger_error(string messsage [, int error_type])","Generates a user-level error/warning/notice message"],trim:["string trim(string str [, string character_mask])","Strips whitespace from the beginning and end of a string"],uasort:["bool uasort(array array_arg, string cmp_function)","Sort an array with a user-defined comparison function and maintain index association"],ucfirst:["string ucfirst(string str)","Make a string's first character lowercase"],ucwords:["string ucwords(string str)","Uppercase the first character of every word in a string"],uksort:["bool uksort(array array_arg, string cmp_function)","Sort an array by keys using a user-defined comparison function"],umask:["int umask([int mask])","Return or change the umask"],uniqid:["string uniqid([string prefix [, bool more_entropy]])","Generates a unique ID"],unixtojd:["int unixtojd([int timestamp])","Convert UNIX timestamp to Julian Day"],unlink:["bool unlink(string filename[, context context])","Delete a file"],unpack:["array unpack(string format, string input)","Unpack binary string into named array elements according to format argument"],unregister_tick_function:["void unregister_tick_function(string function_name)","Unregisters a tick callback function"],unserialize:["mixed unserialize(string variable_representation)","Takes a string representation of variable and recreates it"],unset:["void unset (mixed var [, mixed var])","Unset a given variable"],urldecode:["string urldecode(string str)","Decodes URL-encoded string"],urlencode:["string urlencode(string str)","URL-encodes string"],usleep:["void usleep(int micro_seconds)","Delay for a given number of micro seconds"],usort:["bool usort(array array_arg, string cmp_function)","Sort an array by values using a user-defined comparison function"],utf8_decode:["string utf8_decode(string data)","Converts a UTF-8 encoded string to ISO-8859-1"],utf8_encode:["string utf8_encode(string data)","Encodes an ISO-8859-1 string to UTF-8"],var_dump:["void var_dump(mixed var)","Dumps a string representation of variable to output"],var_export:["mixed var_export(mixed var [, bool return])","Outputs or returns a string representation of a variable"],variant_abs:["mixed variant_abs(mixed left)","Returns the absolute value of a variant"],variant_add:["mixed variant_add(mixed left, mixed right)",'"Adds" two variant values together and returns the result'],variant_and:["mixed variant_and(mixed left, mixed right)","performs a bitwise AND operation between two variants and returns the result"],variant_cast:["object variant_cast(object variant, int type)","Convert a variant into a new variant object of another type"],variant_cat:["mixed variant_cat(mixed left, mixed right)","concatenates two variant values together and returns the result"],variant_cmp:["int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])","Compares two variants"],variant_date_from_timestamp:["object variant_date_from_timestamp(int timestamp)","Returns a variant date representation of a unix timestamp"],variant_date_to_timestamp:["int variant_date_to_timestamp(object variant)","Converts a variant date/time value to unix timestamp"],variant_div:["mixed variant_div(mixed left, mixed right)","Returns the result from dividing two variants"],variant_eqv:["mixed variant_eqv(mixed left, mixed right)","Performs a bitwise equivalence on two variants"],variant_fix:["mixed variant_fix(mixed left)","Returns the integer part ? of a variant"],variant_get_type:["int variant_get_type(object variant)","Returns the VT_XXX type code for a variant"],variant_idiv:["mixed variant_idiv(mixed left, mixed right)","Converts variants to integers and then returns the result from dividing them"],variant_imp:["mixed variant_imp(mixed left, mixed right)","Performs a bitwise implication on two variants"],variant_int:["mixed variant_int(mixed left)","Returns the integer portion of a variant"],variant_mod:["mixed variant_mod(mixed left, mixed right)","Divides two variants and returns only the remainder"],variant_mul:["mixed variant_mul(mixed left, mixed right)","multiplies the values of the two variants and returns the result"],variant_neg:["mixed variant_neg(mixed left)","Performs logical negation on a variant"],variant_not:["mixed variant_not(mixed left)","Performs bitwise not negation on a variant"],variant_or:["mixed variant_or(mixed left, mixed right)","Performs a logical disjunction on two variants"],variant_pow:["mixed variant_pow(mixed left, mixed right)","Returns the result of performing the power function with two variants"],variant_round:["mixed variant_round(mixed left, int decimals)","Rounds a variant to the specified number of decimal places"],variant_set:["void variant_set(object variant, mixed value)","Assigns a new value for a variant object"],variant_set_type:["void variant_set_type(object variant, int type)",'Convert a variant into another type. Variant is modified "in-place"'],variant_sub:["mixed variant_sub(mixed left, mixed right)","subtracts the value of the right variant from the left variant value and returns the result"],variant_xor:["mixed variant_xor(mixed left, mixed right)","Performs a logical exclusion on two variants"],version_compare:["int version_compare(string ver1, string ver2 [, string oper])",'Compares two "PHP-standardized" version number strings'],vfprintf:["int vfprintf(resource stream, string format, array args)","Output a formatted string into a stream"],virtual:["bool virtual(string filename)","Perform an Apache sub-request"],vprintf:["int vprintf(string format, array args)","Output a formatted string"],vsprintf:["string vsprintf(string format, array args)","Return a formatted string"],wddx_add_vars:["int wddx_add_vars(resource packet_id, mixed var_names [, mixed ...])","Serializes given variables and adds them to packet given by packet_id"],wddx_deserialize:["mixed wddx_deserialize(mixed packet)","Deserializes given packet and returns a PHP value"],wddx_packet_end:["string wddx_packet_end(resource packet_id)","Ends specified WDDX packet and returns the string containing the packet"],wddx_packet_start:["resource wddx_packet_start([string comment])","Starts a WDDX packet with optional comment and returns the packet id"],wddx_serialize_value:["string wddx_serialize_value(mixed var [, string comment])","Creates a new packet and serializes the given value"],wddx_serialize_vars:["string wddx_serialize_vars(mixed var_name [, mixed ...])","Creates a new packet and serializes given variables into a struct"],wordwrap:["string wordwrap(string str [, int width [, string break [, boolean cut]]])","Wraps buffer to selected number of characters using string break char"],xml_error_string:["string xml_error_string(int code)","Get XML parser error string"],xml_get_current_byte_index:["int xml_get_current_byte_index(resource parser)","Get current byte index for an XML parser"],xml_get_current_column_number:["int xml_get_current_column_number(resource parser)","Get current column number for an XML parser"],xml_get_current_line_number:["int xml_get_current_line_number(resource parser)","Get current line number for an XML parser"],xml_get_error_code:["int xml_get_error_code(resource parser)","Get XML parser error code"],xml_parse:["int xml_parse(resource parser, string data [, int isFinal])","Start parsing an XML document"],xml_parse_into_struct:["int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])","Parsing a XML document"],xml_parser_create:["resource xml_parser_create([string encoding])","Create an XML parser"],xml_parser_create_ns:["resource xml_parser_create_ns([string encoding [, string sep]])","Create an XML parser"],xml_parser_free:["int xml_parser_free(resource parser)","Free an XML parser"],xml_parser_get_option:["int xml_parser_get_option(resource parser, int option)","Get options from an XML parser"],xml_parser_set_option:["int xml_parser_set_option(resource parser, int option, mixed value)","Set options in an XML parser"],xml_set_character_data_handler:["int xml_set_character_data_handler(resource parser, string hdl)","Set up character data handler"],xml_set_default_handler:["int xml_set_default_handler(resource parser, string hdl)","Set up default handler"],xml_set_element_handler:["int xml_set_element_handler(resource parser, string shdl, string ehdl)","Set up start and end element handlers"],xml_set_end_namespace_decl_handler:["int xml_set_end_namespace_decl_handler(resource parser, string hdl)","Set up character data handler"],xml_set_external_entity_ref_handler:["int xml_set_external_entity_ref_handler(resource parser, string hdl)","Set up external entity reference handler"],xml_set_notation_decl_handler:["int xml_set_notation_decl_handler(resource parser, string hdl)","Set up notation declaration handler"],xml_set_object:["int xml_set_object(resource parser, object &obj)","Set up object which should be used for callbacks"],xml_set_processing_instruction_handler:["int xml_set_processing_instruction_handler(resource parser, string hdl)","Set up processing instruction (PI) handler"],xml_set_start_namespace_decl_handler:["int xml_set_start_namespace_decl_handler(resource parser, string hdl)","Set up character data handler"],xml_set_unparsed_entity_decl_handler:["int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)","Set up unparsed entity declaration handler"],xmlrpc_decode:["array xmlrpc_decode(string xml [, string encoding])","Decodes XML into native PHP types"],xmlrpc_decode_request:["array xmlrpc_decode_request(string xml, string& method [, string encoding])","Decodes XML into native PHP types"],xmlrpc_encode:["string xmlrpc_encode(mixed value)","Generates XML for a PHP value"],xmlrpc_encode_request:["string xmlrpc_encode_request(string method, mixed params [, array output_options])","Generates XML for a method request"],xmlrpc_get_type:["string xmlrpc_get_type(mixed value)","Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings"],xmlrpc_is_fault:["bool xmlrpc_is_fault(array)","Determines if an array value represents an XMLRPC fault."],xmlrpc_parse_method_descriptions:["array xmlrpc_parse_method_descriptions(string xml)","Decodes XML into a list of method descriptions"],xmlrpc_server_add_introspection_data:["int xmlrpc_server_add_introspection_data(resource server, array desc)","Adds introspection documentation"],xmlrpc_server_call_method:["mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])","Parses XML requests and call methods"],xmlrpc_server_create:["resource xmlrpc_server_create(void)","Creates an xmlrpc server"],xmlrpc_server_destroy:["int xmlrpc_server_destroy(resource server)","Destroys server resources"],xmlrpc_server_register_introspection_callback:["bool xmlrpc_server_register_introspection_callback(resource server, string function)","Register a PHP function to generate documentation"],xmlrpc_server_register_method:["bool xmlrpc_server_register_method(resource server, string method_name, string function)","Register a PHP function to handle method matching method_name"],xmlrpc_set_type:["bool xmlrpc_set_type(string value, string type)","Sets xmlrpc type, base64 or datetime, for a PHP string value"],xmlwriter_end_attribute:["bool xmlwriter_end_attribute(resource xmlwriter)","End attribute - returns FALSE on error"],xmlwriter_end_cdata:["bool xmlwriter_end_cdata(resource xmlwriter)","End current CDATA - returns FALSE on error"],xmlwriter_end_comment:["bool xmlwriter_end_comment(resource xmlwriter)","Create end comment - returns FALSE on error"],xmlwriter_end_document:["bool xmlwriter_end_document(resource xmlwriter)","End current document - returns FALSE on error"],xmlwriter_end_dtd:["bool xmlwriter_end_dtd(resource xmlwriter)","End current DTD - returns FALSE on error"],xmlwriter_end_dtd_attlist:["bool xmlwriter_end_dtd_attlist(resource xmlwriter)","End current DTD AttList - returns FALSE on error"],xmlwriter_end_dtd_element:["bool xmlwriter_end_dtd_element(resource xmlwriter)","End current DTD element - returns FALSE on error"],xmlwriter_end_dtd_entity:["bool xmlwriter_end_dtd_entity(resource xmlwriter)","End current DTD Entity - returns FALSE on error"],xmlwriter_end_element:["bool xmlwriter_end_element(resource xmlwriter)","End current element - returns FALSE on error"],xmlwriter_end_pi:["bool xmlwriter_end_pi(resource xmlwriter)","End current PI - returns FALSE on error"],xmlwriter_flush:["mixed xmlwriter_flush(resource xmlwriter [,bool empty])","Output current buffer"],xmlwriter_full_end_element:["bool xmlwriter_full_end_element(resource xmlwriter)","End current element - returns FALSE on error"],xmlwriter_open_memory:["resource xmlwriter_open_memory()","Create new xmlwriter using memory for string output"],xmlwriter_open_uri:["resource xmlwriter_open_uri(resource xmlwriter, string source)","Create new xmlwriter using source uri for output"],xmlwriter_output_memory:["string xmlwriter_output_memory(resource xmlwriter [,bool flush])","Output current buffer as string"],xmlwriter_set_indent:["bool xmlwriter_set_indent(resource xmlwriter, bool indent)","Toggle indentation on/off - returns FALSE on error"],xmlwriter_set_indent_string:["bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)","Set string used for indenting - returns FALSE on error"],xmlwriter_start_attribute:["bool xmlwriter_start_attribute(resource xmlwriter, string name)","Create start attribute - returns FALSE on error"],xmlwriter_start_attribute_ns:["bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)","Create start namespaced attribute - returns FALSE on error"],xmlwriter_start_cdata:["bool xmlwriter_start_cdata(resource xmlwriter)","Create start CDATA tag - returns FALSE on error"],xmlwriter_start_comment:["bool xmlwriter_start_comment(resource xmlwriter)","Create start comment - returns FALSE on error"],xmlwriter_start_document:["bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)","Create document tag - returns FALSE on error"],xmlwriter_start_dtd:["bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)","Create start DTD tag - returns FALSE on error"],xmlwriter_start_dtd_attlist:["bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)","Create start DTD AttList - returns FALSE on error"],xmlwriter_start_dtd_element:["bool xmlwriter_start_dtd_element(resource xmlwriter, string name)","Create start DTD element - returns FALSE on error"],xmlwriter_start_dtd_entity:["bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)","Create start DTD Entity - returns FALSE on error"],xmlwriter_start_element:["bool xmlwriter_start_element(resource xmlwriter, string name)","Create start element tag - returns FALSE on error"],xmlwriter_start_element_ns:["bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)","Create start namespaced element tag - returns FALSE on error"],xmlwriter_start_pi:["bool xmlwriter_start_pi(resource xmlwriter, string target)","Create start PI tag - returns FALSE on error"],xmlwriter_text:["bool xmlwriter_text(resource xmlwriter, string content)","Write text - returns FALSE on error"],xmlwriter_write_attribute:["bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)","Write full attribute - returns FALSE on error"],xmlwriter_write_attribute_ns:["bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)","Write full namespaced attribute - returns FALSE on error"],xmlwriter_write_cdata:["bool xmlwriter_write_cdata(resource xmlwriter, string content)","Write full CDATA tag - returns FALSE on error"],xmlwriter_write_comment:["bool xmlwriter_write_comment(resource xmlwriter, string content)","Write full comment tag - returns FALSE on error"],xmlwriter_write_dtd:["bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)","Write full DTD tag - returns FALSE on error"],xmlwriter_write_dtd_attlist:["bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)","Write full DTD AttList tag - returns FALSE on error"],xmlwriter_write_dtd_element:["bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)","Write full DTD element tag - returns FALSE on error"],xmlwriter_write_dtd_entity:["bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])","Write full DTD Entity tag - returns FALSE on error"],xmlwriter_write_element:["bool xmlwriter_write_element(resource xmlwriter, string name[, string content])","Write full element tag - returns FALSE on error"],xmlwriter_write_element_ns:["bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])","Write full namesapced element tag - returns FALSE on error"],xmlwriter_write_pi:["bool xmlwriter_write_pi(resource xmlwriter, string target, string content)","Write full PI tag - returns FALSE on error"],xmlwriter_write_raw:["bool xmlwriter_write_raw(resource xmlwriter, string content)","Write text - returns FALSE on error"],xsl_xsltprocessor_get_parameter:["string xsl_xsltprocessor_get_parameter(string namespace, string name);",""],xsl_xsltprocessor_has_exslt_support:["bool xsl_xsltprocessor_has_exslt_support();",""],xsl_xsltprocessor_import_stylesheet:["void xsl_xsltprocessor_import_stylesheet(domdocument doc);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:"],xsl_xsltprocessor_register_php_functions:["void xsl_xsltprocessor_register_php_functions([mixed $restrict]);",""],xsl_xsltprocessor_remove_parameter:["bool xsl_xsltprocessor_remove_parameter(string namespace, string name);",""],xsl_xsltprocessor_set_parameter:["bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);",""],xsl_xsltprocessor_set_profiling:["bool xsl_xsltprocessor_set_profiling(string filename) */",'PHP_FUNCTION(xsl_xsltprocessor_set_profiling) { zval *id; xsl_object *intern; char *filename = NULL; int filename_len; DOM_GET_THIS(id); if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s!", &filename, &filename_len) == SUCCESS) { intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC); if (intern->profiling) { efree(intern->profiling); } if (filename != NULL) { intern->profiling = estrndup(filename,filename_len); } else { intern->profiling = NULL; } RETURN_TRUE; } else { WRONG_PARAM_COUNT; } } /* }}} end xsl_xsltprocessor_set_profiling'],xsl_xsltprocessor_transform_to_doc:["domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:"],xsl_xsltprocessor_transform_to_uri:["int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);",""],xsl_xsltprocessor_transform_to_xml:["string xsl_xsltprocessor_transform_to_xml(domdocument doc);",""],zend_logo_guid:["string zend_logo_guid(void)","Return the special ID used to request the Zend logo in phpinfo screens"],zend_version:["string zend_version(void)","Get the version of the Zend Engine"],zip_close:["void zip_close(resource zip)","Close a Zip archive"],zip_entry_close:["void zip_entry_close(resource zip_ent)","Close a zip entry"],zip_entry_compressedsize:["int zip_entry_compressedsize(resource zip_entry)","Return the compressed size of a ZZip entry"],zip_entry_compressionmethod:["string zip_entry_compressionmethod(resource zip_entry)","Return a string containing the compression method used on a particular entry"],zip_entry_filesize:["int zip_entry_filesize(resource zip_entry)","Return the actual filesize of a ZZip entry"],zip_entry_name:["string zip_entry_name(resource zip_entry)","Return the name given a ZZip entry"],zip_entry_open:["bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])","Open a Zip File, pointed by the resource entry"],zip_entry_read:["mixed zip_entry_read(resource zip_entry [, int len])","Read from an open directory entry"],zip_open:["resource zip_open(string filename)","Create new zip using source uri for output"],zip_read:["resource zip_read(resource zip)","Returns the next file in the archive"],zlib_get_coding_type:["string zlib_get_coding_type(void)","Returns the coding type used for output compression"]},i={$_COOKIE:{type:"array"},$_ENV:{type:"array"},$_FILES:{type:"array"},$_GET:{type:"array"},$_POST:{type:"array"},$_REQUEST:{type:"array"},$_SERVER:{type:"array",value:{DOCUMENT_ROOT:1,GATEWAY_INTERFACE:1,HTTP_ACCEPT:1,HTTP_ACCEPT_CHARSET:1,HTTP_ACCEPT_ENCODING:1,HTTP_ACCEPT_LANGUAGE:1,HTTP_CONNECTION:1,HTTP_HOST:1,HTTP_REFERER:1,HTTP_USER_AGENT:1,PATH_TRANSLATED:1,PHP_SELF:1,QUERY_STRING:1,REMOTE_ADDR:1,REMOTE_PORT:1,REQUEST_METHOD:1,REQUEST_URI:1,SCRIPT_FILENAME:1,SCRIPT_NAME:1,SERVER_ADMIN:1,SERVER_NAME:1,SERVER_PORT:1,SERVER_PROTOCOL:1,SERVER_SIGNATURE:1,SERVER_SOFTWARE:1}},$_SESSION:{type:"array"},$GLOBALS:{type:"array"}},o=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(i.type==="support.php_tag"&&i.value==="0){var o=t.getTokenAt(n.row,i.start);if(o.type==="support.php_tag")return this.getTagCompletions(e,t,n,r)}return this.getFunctionCompletions(e,t,n,r)}if(s(i,"variable"))return this.getVariableCompletions(e,t,n,r);var u=t.getLine(n.row).substr(0,n.column);return i.type==="string"&&/(\$[\w]*)\[["']([^'"]*)$/i.test(u)?this.getArrayKeyCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return[{caption:"php",value:"php",meta:"php tag",score:1e6},{caption:"=",value:"=",meta:"php tag",score:1e6}]},this.getFunctionCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+"($0)",meta:"php function",score:1e6,docHTML:r[e][1]}})},this.getVariableCompletions=function(e,t,n,r){var s=Object.keys(i);return s.map(function(e){return{caption:e,value:e,meta:"php variable",score:1e6}})},this.getArrayKeyCompletions=function(e,t,n,r){var s=t.getLine(n.row).substr(0,n.column),o=s.match(/(\$[\w]*)\[["']([^'"]*)$/i)[1];if(!i[o])return[];var u=[];return i[o].type==="array"&&i[o].value&&(u=Object.keys(i[o].value)),u.map(function(e){return{caption:e,value:e,meta:"php array key",score:1e6}})}}).call(o.prototype),t.PhpCompletions=o}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$quotes={'"':'"',"'":"'","`":"`"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(l.prototype),t.Mode=l}),define("ace/mode/css_completions",["require","exports","module"],function(e,t,n){"use strict";var r={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,"double":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{"default":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},"float":{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,"static":1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e){if(typeof e[t]!="string")continue;var n=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e==="ruleset"||t.$mode.$id=="ace/mode/scss"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+": $0;",meta:"property",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\w\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]=="object"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:"property value",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(/^(\s+[^;]|\s*$)/.test(f.substring(s.column)))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}}),this.add("!important","insertion",function(e,t,n,r,i){if(i==="!"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\s*(;|}|$)/.test(o.substring(s.column)))return{text:"!important",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./css_completions").CssCompletions,f=e("./behaviour/css").CssBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(c.prototype),t.Mode=c}),define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),a=function(){this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==""&&a!=="'"&&a!='"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,"attribute-value")||u(p,"string")))return{text:"",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,"tag-whitespace")||u(p,"whitespace"))p=h.stepBackward();var d=!c||c.match(/\s/);if(u(p,"attribute-equals")&&(d||c==">")||u(p,"decl-attribute-equals")&&(d||c=="?"))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,"tag-name")||u(f,"tag-whitespace")||u(f,"attribute-name")||u(f,"attribute-equals")||u(f,"attribute-value")))return;if(u(f,"reference.attribute-value"))return;if(u(f,"attribute-value")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,"tag-name")){f=a.stepBackward();if(f.value=="<"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),"end-tag-open"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf("tag-close")!==-1){if(f.value=="/>")return;while(f&&f.type.indexOf("tag-name")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value==="-1}var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t=="markbeginend"?"end":"":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?"":this._findEndTagInLine(e,n,r.tagName,r.end.column)?"":"start":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/";break}}return r}if(l(s,"tag-close"))return r.selfClosing=s.value=="/>",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,"tag-open"))return n.closing=l(t,"end-tag-open"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,"tag-name")?n.tagName=t.value:l(t,"tag-close")&&(n.selfClosing=t.value=="/>",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"tag-name"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"attribute-name"))i=n.stepBackward();if(i)return i.value}var r=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"],s=["onabort","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextmenu","oncuechange","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onload","onloadeddata","onloadedmetadata","onloadstart","onmousedown","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onpause","onplay","onplaying","onprogress","onratechange","onreset","onscroll","onseeked","onseeking","onselect","onshow","onstalled","onsubmit","onsuspend","ontimeupdate","onvolumechange","onwaiting"],o=i.concat(s),u={a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},abbr:{},address:{},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},article:{pubdate:1},aside:{},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},b:{},base:{href:1,target:1},bdi:{},bdo:{},blockquote:{cite:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},br:{},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},canvas:{width:1,height:1},caption:{},cite:{},code:{},col:{span:1},colgroup:{span:1},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},data:{},datalist:{},dd:{},del:{cite:1,datetime:1},details:{open:1},dfn:{},dialog:{open:1},div:{},dl:{},dt:{},em:{},embed:{src:1,height:1,width:1,type:1},fieldset:{disabled:1,form:1,name:1},figcaption:{},figure:{},footer:{},form:{"accept-charset":1,action:1,autocomplete:1,enctype:{"multipart/form-data":1,"application/x-www-form-urlencoded":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{},header:{},hr:{},html:{manifest:1},i:{},iframe:{name:1,src:1,height:1,width:1,sandbox:{"allow-same-origin":1,"allow-top-navigation":1,"allow-forms":1,"allow-scripts":1},seamless:{seamless:1}},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,"datetime-local":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{"application/x-www-form-urlencoded":1,"multipart/form-data":1,"text/plain":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},ins:{cite:1,datetime:1},kbd:{},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},label:{form:1,"for":1},legend:{},li:{value:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{"text/css":1,"image/png":1,"image/jpeg":1,"image/gif":1},sizes:1},main:{},map:{name:1},mark:{},math:{},menu:{type:1,label:1},meta:{"http-equiv":{"content-type":1},name:{description:1,keywords:1},content:{"text/html; charset=UTF-8":1},charset:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},nav:{},noscript:{href:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},ol:{start:1,reversed:1},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},output:{"for":1,form:1,name:1},p:{},param:{name:1,value:1},pre:{},progress:{value:1,max:1},q:{cite:1},rp:{},rt:{},ruby:{},s:{},samp:{},script:{charset:1,type:{"text/javascript":1},src:1,defer:1,async:1},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},small:{},source:{src:1,type:1,media:1},span:{},strong:{},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},sub:{},sup:{},svg:{},table:{summary:1},tbody:{},td:{headers:1,rowspan:1,colspan:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},tfoot:{},th:{headers:1,rowspan:1,colspan:1,scope:1},thead:{},time:{datetime:1},title:{},tr:{},track:{kind:1,src:1,srclang:1,label:1,"default":1},section:{},summary:{},u:{},ul:{},"var":{},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},wbr:{}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,"tag-name")||f(i,"tag-open")||f(i,"end-tag-open"))return this.getTagCompletions(e,t,n,r);if(f(i,"tag-whitespace")||f(i,"attribute-name"))return this.getAttributeCompletions(e,t,n,r);if(f(i,"attribute-value"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:"tag",score:1e6}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:1e6}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]=="object"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:"attribute value",score:1e6}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=["Aacute;","aacute;","Acirc;","acirc;","acute;","AElig;","aelig;","Agrave;","agrave;","alefsym;","Alpha;","alpha;","amp;","and;","ang;","Aring;","aring;","asymp;","Atilde;","atilde;","Auml;","auml;","bdquo;","Beta;","beta;","brvbar;","bull;","cap;","Ccedil;","ccedil;","cedil;","cent;","Chi;","chi;","circ;","clubs;","cong;","copy;","crarr;","cup;","curren;","Dagger;","dagger;","dArr;","darr;","deg;","Delta;","delta;","diams;","divide;","Eacute;","eacute;","Ecirc;","ecirc;","Egrave;","egrave;","empty;","emsp;","ensp;","Epsilon;","epsilon;","equiv;","Eta;","eta;","ETH;","eth;","Euml;","euml;","euro;","exist;","fnof;","forall;","frac12;","frac14;","frac34;","frasl;","Gamma;","gamma;","ge;","gt;","hArr;","harr;","hearts;","hellip;","Iacute;","iacute;","Icirc;","icirc;","iexcl;","Igrave;","igrave;","image;","infin;","int;","Iota;","iota;","iquest;","isin;","Iuml;","iuml;","Kappa;","kappa;","Lambda;","lambda;","lang;","laquo;","lArr;","larr;","lceil;","ldquo;","le;","lfloor;","lowast;","loz;","lrm;","lsaquo;","lsquo;","lt;","macr;","mdash;","micro;","middot;","minus;","Mu;","mu;","nabla;","nbsp;","ndash;","ne;","ni;","not;","notin;","nsub;","Ntilde;","ntilde;","Nu;","nu;","Oacute;","oacute;","Ocirc;","ocirc;","OElig;","oelig;","Ograve;","ograve;","oline;","Omega;","omega;","Omicron;","omicron;","oplus;","or;","ordf;","ordm;","Oslash;","oslash;","Otilde;","otilde;","otimes;","Ouml;","ouml;","para;","part;","permil;","perp;","Phi;","phi;","Pi;","pi;","piv;","plusmn;","pound;","Prime;","prime;","prod;","prop;","Psi;","psi;","quot;","radic;","rang;","raquo;","rArr;","rarr;","rceil;","rdquo;","real;","reg;","rfloor;","Rho;","rho;","rlm;","rsaquo;","rsquo;","sbquo;","Scaron;","scaron;","sdot;","sect;","shy;","Sigma;","sigma;","sigmaf;","sim;","spades;","sub;","sube;","sum;","sup;","sup1;","sup2;","sup3;","supe;","szlig;","Tau;","tau;","there4;","Theta;","theta;","thetasym;","thinsp;","THORN;","thorn;","tilde;","times;","trade;","Uacute;","uacute;","uArr;","uarr;","Ucirc;","ucirc;","Ugrave;","ugrave;","uml;","upsih;","Upsilon;","upsilon;","Uuml;","uuml;","weierp;","Xi;","xi;","Yacute;","yacute;","yen;","Yuml;","yuml;","Zeta;","zeta;","zwj;","zwnj;"];return i.map(function(e){return{caption:e,snippet:e,meta:"html entity",score:1e6}})}}).call(h.prototype),t.HtmlCompletions=h}),define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text").Mode,o=e("./javascript").Mode,u=e("./css").Mode,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/xml").XmlBehaviour,l=e("./folding/html").FoldMode,c=e("./html_completions").HtmlCompletions,h=e("../worker/worker_client").WorkerClient,p=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],d=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({"js-":o,"css-":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:""},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/html"}.call(v.prototype),t.Mode=v}),define("ace/mode/php",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/php_highlight_rules","ace/mode/php_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/php_completions","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/unicode","ace/mode/html","ace/mode/javascript","ace/mode/css"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./php_highlight_rules").PhpHighlightRules,o=e("./php_highlight_rules").PhpLangHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./php_completions").PhpCompletions,c=e("./behaviour/cstyle").CstyleBehaviour,h=e("./folding/cstyle").FoldMode,p=e("../unicode"),d=e("./html").Mode,v=e("./javascript").Mode,m=e("./css").Mode,g=function(e){this.HighlightRules=o,this.$outdent=new u,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new h};r.inherits(g,i),function(){this.tokenRe=new RegExp("^["+p.wordChars+"_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+p.wordChars+"_]|\\s])+","g"),this.lineCommentStart=["//","#"],this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var u=t.match(/^.*[\{\(\[:]\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o!="doc-start")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.$id="ace/mode/php-inline"}.call(g.prototype);var y=function(e){if(e&&e.inline){var t=new g;return t.createWorker=this.createWorker,t.inlinePhp=!0,t}d.call(this),this.HighlightRules=s,this.createModeDelegates({"js-":v,"css-":m,"php-":g}),this.foldingRules.subModes["php-"]=new h};r.inherits(y,d),function(){this.createWorker=function(e){var t=new f(["ace"],"ace/mode/php_worker","PhpWorker");return t.attachToDocument(e.getDocument()),this.inlinePhp&&t.call("setOptions",[{inline:!0}]),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/php"}.call(y.prototype),t.Mode=y}),define("ace/mode/php_laravel_blade",["require","exports","module","ace/lib/oop","ace/mode/php_laravel_blade_highlight_rules","ace/mode/php","ace/mode/javascript","ace/mode/css","ace/mode/html"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./php_laravel_blade_highlight_rules").PHPLaravelBladeHighlightRules,s=e("./php").Mode,o=e("./javascript").Mode,u=e("./css").Mode,a=e("./html").Mode,f=function(){s.call(this),this.HighlightRules=i,this.createModeDelegates({"js-":o,"css-":u,"html-":a})};r.inherits(f,s),function(){this.$id="ace/mode/php_laravel_blade"}.call(f.prototype),t.Mode=f}); (function() { + window.require(["ace/mode/php_laravel_blade"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-powershell.js b/BTPanel/static/ace/mode-powershell.js new file mode 100644 index 00000000..f1e48651 --- /dev/null +++ b/BTPanel/static/ace/mode-powershell.js @@ -0,0 +1,8 @@ +define("ace/mode/powershell_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="begin|break|catch|continue|data|do|dynamicparam|else|elseif|end|exit|filter|finally|for|foreach|from|function|if|in|inlinescript|hidden|parallel|param|process|return|sequence|switch|throw|trap|try|until|while|workflow",t="Get-AppBackgroundTask|Start-AppBackgroundTask|Unregister-AppBackgroundTask|Disable-AppBackgroundTaskDiagnosticLog|Enable-AppBackgroundTaskDiagnosticLog|Set-AppBackgroundTaskResourcePolicy|Get-AppLockerFileInformation|Get-AppLockerPolicy|New-AppLockerPolicy|Set-AppLockerPolicy|Test-AppLockerPolicy|Get-AppxLastError|Get-AppxLog|Add-AppxPackage|Add-AppxVolume|Dismount-AppxVolume|Get-AppxDefaultVolume|Get-AppxPackage|Get-AppxPackageManifest|Get-AppxVolume|Mount-AppxVolume|Move-AppxPackage|Remove-AppxPackage|Remove-AppxVolume|Set-AppxDefaultVolume|Clear-AssignedAccess|Get-AssignedAccess|Set-AssignedAccess|Add-BitLockerKeyProtector|Backup-BitLockerKeyProtector|Clear-BitLockerAutoUnlock|Disable-BitLocker|Disable-BitLockerAutoUnlock|Enable-BitLocker|Enable-BitLockerAutoUnlock|Get-BitLockerVolume|Lock-BitLocker|Remove-BitLockerKeyProtector|Resume-BitLocker|Suspend-BitLocker|Unlock-BitLocker|Add-BitsFile|Complete-BitsTransfer|Get-BitsTransfer|Remove-BitsTransfer|Resume-BitsTransfer|Set-BitsTransfer|Start-BitsTransfer|Suspend-BitsTransfer|Add-BCDataCacheExtension|Clear-BCCache|Disable-BC|Disable-BCDowngrading|Disable-BCServeOnBattery|Enable-BCDistributed|Enable-BCDowngrading|Enable-BCHostedClient|Enable-BCHostedServer|Enable-BCLocal|Enable-BCServeOnBattery|Export-BCCachePackage|Export-BCSecretKey|Get-BCClientConfiguration|Get-BCContentServerConfiguration|Get-BCDataCache|Get-BCDataCacheExtension|Get-BCHashCache|Get-BCHostedCacheServerConfiguration|Get-BCNetworkConfiguration|Get-BCStatus|Import-BCCachePackage|Import-BCSecretKey|Publish-BCFileContent|Publish-BCWebContent|Remove-BCDataCacheExtension|Reset-BC|Set-BCAuthentication|Set-BCCache|Set-BCDataCacheEntryMaxAge|Set-BCMinSMBLatency|Set-BCSecretKey|Export-BinaryMiLog|Get-CimAssociatedInstance|Get-CimClass|Get-CimInstance|Get-CimSession|Import-BinaryMiLog|Invoke-CimMethod|New-CimInstance|New-CimSession|New-CimSessionOption|Register-CimIndicationEvent|Remove-CimInstance|Remove-CimSession|Set-CimInstance|ConvertFrom-CIPolicy|Add-SignerRule|Edit-CIPolicyRule|Get-CIPolicy|Get-CIPolicyInfo|Get-SystemDriver|Merge-CIPolicy|New-CIPolicy|New-CIPolicyRule|Remove-CIPolicyRule|Set-CIPolicyVersion|Set-HVCIOptions|Set-RuleOption|Add-MpPreference|Get-MpComputerStatus|Get-MpPreference|Get-MpThreat|Get-MpThreatCatalog|Get-MpThreatDetection|Remove-MpPreference|Remove-MpThreat|Set-MpPreference|Start-MpScan|Start-MpWDOScan|Update-MpSignature|Disable-DAManualEntryPointSelection|Enable-DAManualEntryPointSelection|Get-DAClientExperienceConfiguration|Get-DAEntryPointTableItem|New-DAEntryPointTableItem|Remove-DAEntryPointTableItem|Rename-DAEntryPointTableItem|Reset-DAClientExperienceConfiguration|Reset-DAEntryPointTableItem|Set-DAClientExperienceConfiguration|Set-DAEntryPointTableItem|Add-ProvisionedAppxPackage|Apply-WindowsUnattend|Get-ProvisionedAppxPackage|Remove-ProvisionedAppxPackage|Add-AppxProvisionedPackage|Add-WindowsCapability|Add-WindowsDriver|Add-WindowsImage|Add-WindowsPackage|Clear-WindowsCorruptMountPoint|Disable-WindowsOptionalFeature|Dismount-WindowsImage|Enable-WindowsOptionalFeature|Expand-WindowsCustomDataImage|Expand-WindowsImage|Export-WindowsDriver|Export-WindowsImage|Get-AppxProvisionedPackage|Get-WIMBootEntry|Get-WindowsCapability|Get-WindowsDriver|Get-WindowsEdition|Get-WindowsImage|Get-WindowsImageContent|Get-WindowsOptionalFeature|Get-WindowsPackage|Mount-WindowsImage|New-WindowsCustomImage|New-WindowsImage|Optimize-WindowsImage|Remove-AppxProvisionedPackage|Remove-WindowsCapability|Remove-WindowsDriver|Remove-WindowsImage|Remove-WindowsPackage|Repair-WindowsImage|Save-WindowsImage|Set-AppXProvisionedDataFile|Set-WindowsEdition|Set-WindowsProductKey|Split-WindowsImage|Update-WIMBootEntry|Use-WindowsUnattend|Add-DnsClientNrptRule|Clear-DnsClientCache|Get-DnsClient|Get-DnsClientCache|Get-DnsClientGlobalSetting|Get-DnsClientNrptGlobal|Get-DnsClientNrptPolicy|Get-DnsClientNrptRule|Get-DnsClientServerAddress|Register-DnsClient|Remove-DnsClientNrptRule|Set-DnsClient|Set-DnsClientGlobalSetting|Set-DnsClientNrptGlobal|Set-DnsClientNrptRule|Set-DnsClientServerAddress|Resolve-DnsName|Add-EtwTraceProvider|Get-AutologgerConfig|Get-EtwTraceProvider|Get-EtwTraceSession|New-AutologgerConfig|New-EtwTraceSession|Remove-AutologgerConfig|Remove-EtwTraceProvider|Remove-EtwTraceSession|Send-EtwTraceSession|Set-AutologgerConfig|Set-EtwTraceProvider|Set-EtwTraceSession|Get-WinAcceptLanguageFromLanguageListOptOut|Get-WinCultureFromLanguageListOptOut|Get-WinDefaultInputMethodOverride|Get-WinHomeLocation|Get-WinLanguageBarOption|Get-WinSystemLocale|Get-WinUILanguageOverride|Get-WinUserLanguageList|New-WinUserLanguageList|Set-Culture|Set-WinAcceptLanguageFromLanguageListOptOut|Set-WinCultureFromLanguageListOptOut|Set-WinDefaultInputMethodOverride|Set-WinHomeLocation|Set-WinLanguageBarOption|Set-WinSystemLocale|Set-WinUILanguageOverride|Set-WinUserLanguageList|Connect-IscsiTarget|Disconnect-IscsiTarget|Get-IscsiConnection|Get-IscsiSession|Get-IscsiTarget|Get-IscsiTargetPortal|New-IscsiTargetPortal|Register-IscsiSession|Remove-IscsiTargetPortal|Set-IscsiChapSecret|Unregister-IscsiSession|Update-IscsiTarget|Update-IscsiTargetPortal|Get-IseSnippet|Import-IseSnippet|New-IseSnippet|Add-KdsRootKey|Clear-KdsCache|Get-KdsConfiguration|Get-KdsRootKey|Set-KdsConfiguration|Test-KdsRootKey|Compress-Archive|Expand-Archive|Export-Counter|Get-Counter|Get-WinEvent|Import-Counter|New-WinEvent|Start-Transcript|Stop-Transcript|Add-Computer|Add-Content|Checkpoint-Computer|Clear-Content|Clear-EventLog|Clear-Item|Clear-ItemProperty|Clear-RecycleBin|Complete-Transaction|Convert-Path|Copy-Item|Copy-ItemProperty|Debug-Process|Disable-ComputerRestore|Enable-ComputerRestore|Get-ChildItem|Get-Clipboard|Get-ComputerRestorePoint|Get-Content|Get-ControlPanelItem|Get-EventLog|Get-HotFix|Get-Item|Get-ItemProperty|Get-ItemPropertyValue|Get-Location|Get-Process|Get-PSDrive|Get-PSProvider|Get-Service|Get-Transaction|Get-WmiObject|Invoke-Item|Invoke-WmiMethod|Join-Path|Limit-EventLog|Move-Item|Move-ItemProperty|New-EventLog|New-Item|New-ItemProperty|New-PSDrive|New-Service|New-WebServiceProxy|Pop-Location|Push-Location|Register-WmiEvent|Remove-Computer|Remove-EventLog|Remove-Item|Remove-ItemProperty|Remove-PSDrive|Remove-WmiObject|Rename-Computer|Rename-Item|Rename-ItemProperty|Reset-ComputerMachinePassword|Resolve-Path|Restart-Computer|Restart-Service|Restore-Computer|Resume-Service|Set-Clipboard|Set-Content|Set-Item|Set-ItemProperty|Set-Location|Set-Service|Set-WmiInstance|Show-ControlPanelItem|Show-EventLog|Split-Path|Start-Process|Start-Service|Start-Transaction|Stop-Computer|Stop-Process|Stop-Service|Suspend-Service|Test-ComputerSecureChannel|Test-Connection|Test-Path|Undo-Transaction|Use-Transaction|Wait-Process|Write-EventLog|Export-ODataEndpointProxy|ConvertFrom-SecureString|ConvertTo-SecureString|Get-Acl|Get-AuthenticodeSignature|Get-CmsMessage|Get-Credential|Get-ExecutionPolicy|Get-PfxCertificate|Protect-CmsMessage|Set-Acl|Set-AuthenticodeSignature|Set-ExecutionPolicy|Unprotect-CmsMessage|ConvertFrom-SddlString|Format-Hex|Get-FileHash|Import-PowerShellDataFile|New-Guid|New-TemporaryFile|Add-Member|Add-Type|Clear-Variable|Compare-Object|ConvertFrom-Csv|ConvertFrom-Json|ConvertFrom-String|ConvertFrom-StringData|Convert-String|ConvertTo-Csv|ConvertTo-Html|ConvertTo-Json|ConvertTo-Xml|Debug-Runspace|Disable-PSBreakpoint|Disable-RunspaceDebug|Enable-PSBreakpoint|Enable-RunspaceDebug|Export-Alias|Export-Clixml|Export-Csv|Export-FormatData|Export-PSSession|Format-Custom|Format-List|Format-Table|Format-Wide|Get-Alias|Get-Culture|Get-Date|Get-Event|Get-EventSubscriber|Get-FormatData|Get-Host|Get-Member|Get-PSBreakpoint|Get-PSCallStack|Get-Random|Get-Runspace|Get-RunspaceDebug|Get-TraceSource|Get-TypeData|Get-UICulture|Get-Unique|Get-Variable|Group-Object|Import-Alias|Import-Clixml|Import-Csv|Import-LocalizedData|Import-PSSession|Invoke-Expression|Invoke-RestMethod|Invoke-WebRequest|Measure-Command|Measure-Object|New-Alias|New-Event|New-Object|New-TimeSpan|New-Variable|Out-File|Out-GridView|Out-Printer|Out-String|Read-Host|Register-EngineEvent|Register-ObjectEvent|Remove-Event|Remove-PSBreakpoint|Remove-TypeData|Remove-Variable|Select-Object|Select-String|Select-Xml|Send-MailMessage|Set-Alias|Set-Date|Set-PSBreakpoint|Set-TraceSource|Set-Variable|Show-Command|Sort-Object|Start-Sleep|Tee-Object|Trace-Command|Unblock-File|Unregister-Event|Update-FormatData|Update-List|Update-TypeData|Wait-Debugger|Wait-Event|Write-Debug|Write-Error|Write-Host|Write-Information|Write-Output|Write-Progress|Write-Verbose|Write-Warning|Connect-WSMan|Disable-WSManCredSSP|Disconnect-WSMan|Enable-WSManCredSSP|Get-WSManCredSSP|Get-WSManInstance|Invoke-WSManAction|New-WSManInstance|New-WSManSessionOption|Remove-WSManInstance|Set-WSManInstance|Set-WSManQuickConfig|Test-WSMan|Debug-MMAppPrelaunch|Disable-MMAgent|Enable-MMAgent|Get-MMAgent|Set-MMAgent|Add-DtcClusterTMMapping|Get-Dtc|Get-DtcAdvancedHostSetting|Get-DtcAdvancedSetting|Get-DtcClusterDefault|Get-DtcClusterTMMapping|Get-DtcDefault|Get-DtcLog|Get-DtcNetworkSetting|Get-DtcTransaction|Get-DtcTransactionsStatistics|Get-DtcTransactionsTraceSession|Get-DtcTransactionsTraceSetting|Install-Dtc|Remove-DtcClusterTMMapping|Reset-DtcLog|Set-DtcAdvancedHostSetting|Set-DtcAdvancedSetting|Set-DtcClusterDefault|Set-DtcClusterTMMapping|Set-DtcDefault|Set-DtcLog|Set-DtcNetworkSetting|Set-DtcTransaction|Set-DtcTransactionsTraceSession|Set-DtcTransactionsTraceSetting|Start-Dtc|Start-DtcTransactionsTraceSession|Stop-Dtc|Stop-DtcTransactionsTraceSession|Test-Dtc|Uninstall-Dtc|Write-DtcTransactionsTraceSession|Complete-DtcDiagnosticTransaction|Join-DtcDiagnosticResourceManager|New-DtcDiagnosticTransaction|Receive-DtcDiagnosticTransaction|Send-DtcDiagnosticTransaction|Start-DtcDiagnosticResourceManager|Stop-DtcDiagnosticResourceManager|Undo-DtcDiagnosticTransaction|Disable-NetAdapter|Disable-NetAdapterBinding|Disable-NetAdapterChecksumOffload|Disable-NetAdapterEncapsulatedPacketTaskOffload|Disable-NetAdapterIPsecOffload|Disable-NetAdapterLso|Disable-NetAdapterPacketDirect|Disable-NetAdapterPowerManagement|Disable-NetAdapterQos|Disable-NetAdapterRdma|Disable-NetAdapterRsc|Disable-NetAdapterRss|Disable-NetAdapterSriov|Disable-NetAdapterVmq|Enable-NetAdapter|Enable-NetAdapterBinding|Enable-NetAdapterChecksumOffload|Enable-NetAdapterEncapsulatedPacketTaskOffload|Enable-NetAdapterIPsecOffload|Enable-NetAdapterLso|Enable-NetAdapterPacketDirect|Enable-NetAdapterPowerManagement|Enable-NetAdapterQos|Enable-NetAdapterRdma|Enable-NetAdapterRsc|Enable-NetAdapterRss|Enable-NetAdapterSriov|Enable-NetAdapterVmq|Get-NetAdapter|Get-NetAdapterAdvancedProperty|Get-NetAdapterBinding|Get-NetAdapterChecksumOffload|Get-NetAdapterEncapsulatedPacketTaskOffload|Get-NetAdapterHardwareInfo|Get-NetAdapterIPsecOffload|Get-NetAdapterLso|Get-NetAdapterPacketDirect|Get-NetAdapterPowerManagement|Get-NetAdapterQos|Get-NetAdapterRdma|Get-NetAdapterRsc|Get-NetAdapterRss|Get-NetAdapterSriov|Get-NetAdapterSriovVf|Get-NetAdapterStatistics|Get-NetAdapterVmq|Get-NetAdapterVmqQueue|Get-NetAdapterVPort|New-NetAdapterAdvancedProperty|Remove-NetAdapterAdvancedProperty|Rename-NetAdapter|Reset-NetAdapterAdvancedProperty|Restart-NetAdapter|Set-NetAdapter|Set-NetAdapterAdvancedProperty|Set-NetAdapterBinding|Set-NetAdapterChecksumOffload|Set-NetAdapterEncapsulatedPacketTaskOffload|Set-NetAdapterIPsecOffload|Set-NetAdapterLso|Set-NetAdapterPacketDirect|Set-NetAdapterPowerManagement|Set-NetAdapterQos|Set-NetAdapterRdma|Set-NetAdapterRsc|Set-NetAdapterRss|Set-NetAdapterSriov|Set-NetAdapterVmq|Get-NetConnectionProfile|Set-NetConnectionProfile|Add-NetEventNetworkAdapter|Add-NetEventPacketCaptureProvider|Add-NetEventProvider|Add-NetEventVmNetworkAdapter|Add-NetEventVmSwitch|Add-NetEventWFPCaptureProvider|Get-NetEventNetworkAdapter|Get-NetEventPacketCaptureProvider|Get-NetEventProvider|Get-NetEventSession|Get-NetEventVmNetworkAdapter|Get-NetEventVmSwitch|Get-NetEventWFPCaptureProvider|New-NetEventSession|Remove-NetEventNetworkAdapter|Remove-NetEventPacketCaptureProvider|Remove-NetEventProvider|Remove-NetEventSession|Remove-NetEventVmNetworkAdapter|Remove-NetEventVmSwitch|Remove-NetEventWFPCaptureProvider|Set-NetEventPacketCaptureProvider|Set-NetEventProvider|Set-NetEventSession|Set-NetEventWFPCaptureProvider|Start-NetEventSession|Stop-NetEventSession|Add-NetLbfoTeamMember|Add-NetLbfoTeamNic|Get-NetLbfoTeam|Get-NetLbfoTeamMember|Get-NetLbfoTeamNic|New-NetLbfoTeam|Remove-NetLbfoTeam|Remove-NetLbfoTeamMember|Remove-NetLbfoTeamNic|Rename-NetLbfoTeam|Set-NetLbfoTeam|Set-NetLbfoTeamMember|Set-NetLbfoTeamNic|Add-NetNatExternalAddress|Add-NetNatStaticMapping|Get-NetNat|Get-NetNatExternalAddress|Get-NetNatGlobal|Get-NetNatSession|Get-NetNatStaticMapping|New-NetNat|Remove-NetNat|Remove-NetNatExternalAddress|Remove-NetNatStaticMapping|Set-NetNat|Set-NetNatGlobal|Get-NetQosPolicy|New-NetQosPolicy|Remove-NetQosPolicy|Set-NetQosPolicy|Copy-NetFirewallRule|Copy-NetIPsecMainModeCryptoSet|Copy-NetIPsecMainModeRule|Copy-NetIPsecPhase1AuthSet|Copy-NetIPsecPhase2AuthSet|Copy-NetIPsecQuickModeCryptoSet|Copy-NetIPsecRule|Disable-NetFirewallRule|Disable-NetIPsecMainModeRule|Disable-NetIPsecRule|Enable-NetFirewallRule|Enable-NetIPsecMainModeRule|Enable-NetIPsecRule|Find-NetIPsecRule|Get-NetFirewallAddressFilter|Get-NetFirewallApplicationFilter|Get-NetFirewallInterfaceFilter|Get-NetFirewallInterfaceTypeFilter|Get-NetFirewallPortFilter|Get-NetFirewallProfile|Get-NetFirewallRule|Get-NetFirewallSecurityFilter|Get-NetFirewallServiceFilter|Get-NetFirewallSetting|Get-NetIPsecDospSetting|Get-NetIPsecMainModeCryptoSet|Get-NetIPsecMainModeRule|Get-NetIPsecMainModeSA|Get-NetIPsecPhase1AuthSet|Get-NetIPsecPhase2AuthSet|Get-NetIPsecQuickModeCryptoSet|Get-NetIPsecQuickModeSA|Get-NetIPsecRule|New-NetFirewallRule|New-NetIPsecDospSetting|New-NetIPsecMainModeCryptoSet|New-NetIPsecMainModeRule|New-NetIPsecPhase1AuthSet|New-NetIPsecPhase2AuthSet|New-NetIPsecQuickModeCryptoSet|New-NetIPsecRule|Open-NetGPO|Remove-NetFirewallRule|Remove-NetIPsecDospSetting|Remove-NetIPsecMainModeCryptoSet|Remove-NetIPsecMainModeRule|Remove-NetIPsecMainModeSA|Remove-NetIPsecPhase1AuthSet|Remove-NetIPsecPhase2AuthSet|Remove-NetIPsecQuickModeCryptoSet|Remove-NetIPsecQuickModeSA|Remove-NetIPsecRule|Rename-NetFirewallRule|Rename-NetIPsecMainModeCryptoSet|Rename-NetIPsecMainModeRule|Rename-NetIPsecPhase1AuthSet|Rename-NetIPsecPhase2AuthSet|Rename-NetIPsecQuickModeCryptoSet|Rename-NetIPsecRule|Save-NetGPO|Set-NetFirewallAddressFilter|Set-NetFirewallApplicationFilter|Set-NetFirewallInterfaceFilter|Set-NetFirewallInterfaceTypeFilter|Set-NetFirewallPortFilter|Set-NetFirewallProfile|Set-NetFirewallRule|Set-NetFirewallSecurityFilter|Set-NetFirewallServiceFilter|Set-NetFirewallSetting|Set-NetIPsecDospSetting|Set-NetIPsecMainModeCryptoSet|Set-NetIPsecMainModeRule|Set-NetIPsecPhase1AuthSet|Set-NetIPsecPhase2AuthSet|Set-NetIPsecQuickModeCryptoSet|Set-NetIPsecRule|Show-NetFirewallRule|Show-NetIPsecRule|Sync-NetIPsecRule|Update-NetIPsecRule|Get-DAPolicyChange|New-NetIPsecAuthProposal|New-NetIPsecMainModeCryptoProposal|New-NetIPsecQuickModeCryptoProposal|Add-NetSwitchTeamMember|Get-NetSwitchTeam|Get-NetSwitchTeamMember|New-NetSwitchTeam|Remove-NetSwitchTeam|Remove-NetSwitchTeamMember|Rename-NetSwitchTeam|Find-NetRoute|Get-NetCompartment|Get-NetIPAddress|Get-NetIPConfiguration|Get-NetIPInterface|Get-NetIPv4Protocol|Get-NetIPv6Protocol|Get-NetNeighbor|Get-NetOffloadGlobalSetting|Get-NetPrefixPolicy|Get-NetRoute|Get-NetTCPConnection|Get-NetTCPSetting|Get-NetTransportFilter|Get-NetUDPEndpoint|Get-NetUDPSetting|New-NetIPAddress|New-NetNeighbor|New-NetRoute|New-NetTransportFilter|Remove-NetIPAddress|Remove-NetNeighbor|Remove-NetRoute|Remove-NetTransportFilter|Set-NetIPAddress|Set-NetIPInterface|Set-NetIPv4Protocol|Set-NetIPv6Protocol|Set-NetNeighbor|Set-NetOffloadGlobalSetting|Set-NetRoute|Set-NetTCPSetting|Set-NetUDPSetting|Test-NetConnection|Get-DAConnectionStatus|Get-NCSIPolicyConfiguration|Reset-NCSIPolicyConfiguration|Set-NCSIPolicyConfiguration|Disable-NetworkSwitchEthernetPort|Disable-NetworkSwitchFeature|Disable-NetworkSwitchVlan|Enable-NetworkSwitchEthernetPort|Enable-NetworkSwitchFeature|Enable-NetworkSwitchVlan|Get-NetworkSwitchEthernetPort|Get-NetworkSwitchFeature|Get-NetworkSwitchGlobalData|Get-NetworkSwitchVlan|New-NetworkSwitchVlan|Remove-NetworkSwitchEthernetPortIPAddress|Remove-NetworkSwitchVlan|Restore-NetworkSwitchConfiguration|Save-NetworkSwitchConfiguration|Set-NetworkSwitchEthernetPortIPAddress|Set-NetworkSwitchPortMode|Set-NetworkSwitchPortProperty|Set-NetworkSwitchVlanProperty|Add-NetIPHttpsCertBinding|Disable-NetDnsTransitionConfiguration|Disable-NetIPHttpsProfile|Disable-NetNatTransitionConfiguration|Enable-NetDnsTransitionConfiguration|Enable-NetIPHttpsProfile|Enable-NetNatTransitionConfiguration|Get-Net6to4Configuration|Get-NetDnsTransitionConfiguration|Get-NetDnsTransitionMonitoring|Get-NetIPHttpsConfiguration|Get-NetIPHttpsState|Get-NetIsatapConfiguration|Get-NetNatTransitionConfiguration|Get-NetNatTransitionMonitoring|Get-NetTeredoConfiguration|Get-NetTeredoState|New-NetIPHttpsConfiguration|New-NetNatTransitionConfiguration|Remove-NetIPHttpsCertBinding|Remove-NetIPHttpsConfiguration|Remove-NetNatTransitionConfiguration|Rename-NetIPHttpsConfiguration|Reset-Net6to4Configuration|Reset-NetDnsTransitionConfiguration|Reset-NetIPHttpsConfiguration|Reset-NetIsatapConfiguration|Reset-NetTeredoConfiguration|Set-Net6to4Configuration|Set-NetDnsTransitionConfiguration|Set-NetIPHttpsConfiguration|Set-NetIsatapConfiguration|Set-NetNatTransitionConfiguration|Set-NetTeredoConfiguration|Find-Package|Find-PackageProvider|Get-Package|Get-PackageProvider|Get-PackageSource|Import-PackageProvider|Install-Package|Install-PackageProvider|Register-PackageSource|Save-Package|Set-PackageSource|Uninstall-Package|Unregister-PackageSource|Clear-PcsvDeviceLog|Get-PcsvDevice|Get-PcsvDeviceLog|Restart-PcsvDevice|Set-PcsvDeviceBootConfiguration|Set-PcsvDeviceNetworkConfiguration|Set-PcsvDeviceUserPassword|Start-PcsvDevice|Stop-PcsvDevice|AfterAll|AfterEach|Assert-MockCalled|Assert-VerifiableMocks|BeforeAll|BeforeEach|Context|Describe|Get-MockDynamicParameters|Get-TestDriveItem|In|InModuleScope|Invoke-Mock|Invoke-Pester|It|Mock|New-Fixture|Set-DynamicParameterVariables|Setup|Should|Add-CertificateEnrollmentPolicyServer|Export-Certificate|Export-PfxCertificate|Get-Certificate|Get-CertificateAutoEnrollmentPolicy|Get-CertificateEnrollmentPolicyServer|Get-CertificateNotificationTask|Get-PfxData|Import-Certificate|Import-PfxCertificate|New-CertificateNotificationTask|New-SelfSignedCertificate|Remove-CertificateEnrollmentPolicyServer|Remove-CertificateNotificationTask|Set-CertificateAutoEnrollmentPolicy|Switch-Certificate|Test-Certificate|Disable-PnpDevice|Enable-PnpDevice|Get-PnpDevice|Get-PnpDeviceProperty|Find-DscResource|Find-Module|Find-Script|Get-InstalledModule|Get-InstalledScript|Get-PSRepository|Install-Module|Install-Script|New-ScriptFileInfo|Publish-Module|Publish-Script|Register-PSRepository|Save-Module|Save-Script|Set-PSRepository|Test-ScriptFileInfo|Uninstall-Module|Uninstall-Script|Unregister-PSRepository|Update-Module|Update-ModuleManifest|Update-Script|Update-ScriptFileInfo|Add-Printer|Add-PrinterDriver|Add-PrinterPort|Get-PrintConfiguration|Get-Printer|Get-PrinterDriver|Get-PrinterPort|Get-PrinterProperty|Get-PrintJob|Read-PrinterNfcTag|Remove-Printer|Remove-PrinterDriver|Remove-PrinterPort|Remove-PrintJob|Rename-Printer|Restart-PrintJob|Resume-PrintJob|Set-PrintConfiguration|Set-Printer|Set-PrinterProperty|Suspend-PrintJob|Write-PrinterNfcTag|Configuration|Disable-DscDebug|Enable-DscDebug|Get-DscConfiguration|Get-DscConfigurationStatus|Get-DscLocalConfigurationManager|Get-DscResource|New-DscChecksum|Remove-DscConfigurationDocument|Restore-DscConfiguration|Stop-DscConfiguration|Invoke-DscResource|Publish-DscConfiguration|Set-DscLocalConfigurationManager|Start-DscConfiguration|Test-DscConfiguration|Update-DscConfiguration|Disable-PSTrace|Disable-PSWSManCombinedTrace|Disable-WSManTrace|Enable-PSTrace|Enable-PSWSManCombinedTrace|Enable-WSManTrace|Get-LogProperties|Set-LogProperties|Start-Trace|Stop-Trace|PSConsoleHostReadline|Get-PSReadlineKeyHandler|Get-PSReadlineOption|Remove-PSReadlineKeyHandler|Set-PSReadlineKeyHandler|Set-PSReadlineOption|Add-JobTrigger|Disable-JobTrigger|Disable-ScheduledJob|Enable-JobTrigger|Enable-ScheduledJob|Get-JobTrigger|Get-ScheduledJob|Get-ScheduledJobOption|New-JobTrigger|New-ScheduledJobOption|Register-ScheduledJob|Remove-JobTrigger|Set-JobTrigger|Set-ScheduledJob|Set-ScheduledJobOption|Unregister-ScheduledJob|New-PSWorkflowSession|New-PSWorkflowExecutionOption|Invoke-AsWorkflow|Disable-ScheduledTask|Enable-ScheduledTask|Export-ScheduledTask|Get-ClusteredScheduledTask|Get-ScheduledTask|Get-ScheduledTaskInfo|New-ScheduledTask|New-ScheduledTaskAction|New-ScheduledTaskPrincipal|New-ScheduledTaskSettingsSet|New-ScheduledTaskTrigger|Register-ClusteredScheduledTask|Register-ScheduledTask|Set-ClusteredScheduledTask|Set-ScheduledTask|Start-ScheduledTask|Stop-ScheduledTask|Unregister-ClusteredScheduledTask|Unregister-ScheduledTask|Confirm-SecureBootUEFI|Format-SecureBootUEFI|Get-SecureBootPolicy|Get-SecureBootUEFI|Set-SecureBootUEFI|Block-SmbShareAccess|Close-SmbOpenFile|Close-SmbSession|Disable-SmbDelegation|Enable-SmbDelegation|Get-SmbBandwidthLimit|Get-SmbClientConfiguration|Get-SmbClientNetworkInterface|Get-SmbConnection|Get-SmbDelegation|Get-SmbMapping|Get-SmbMultichannelConnection|Get-SmbMultichannelConstraint|Get-SmbOpenFile|Get-SmbServerConfiguration|Get-SmbServerNetworkInterface|Get-SmbSession|Get-SmbShare|Get-SmbShareAccess|Grant-SmbShareAccess|New-SmbMapping|New-SmbMultichannelConstraint|New-SmbShare|Remove-SmbBandwidthLimit|Remove-SmbMapping|Remove-SmbMultichannelConstraint|Remove-SmbShare|Revoke-SmbShareAccess|Set-SmbBandwidthLimit|Set-SmbClientConfiguration|Set-SmbPathAcl|Set-SmbServerConfiguration|Set-SmbShare|Unblock-SmbShareAccess|Update-SmbMultichannelConnection|Move-SmbClient|Get-SmbWitnessClient|Move-SmbWitnessClient|Get-StartApps|Export-StartLayout|Import-StartLayout|Disable-PhysicalDiskIndication|Disable-StorageDiagnosticLog|Enable-PhysicalDiskIndication|Enable-StorageDiagnosticLog|Flush-Volume|Get-DiskSNV|Get-PhysicalDiskSNV|Get-StorageEnclosureSNV|Initialize-Volume|Write-FileSystemCache|Add-InitiatorIdToMaskingSet|Add-PartitionAccessPath|Add-PhysicalDisk|Add-TargetPortToMaskingSet|Add-VirtualDiskToMaskingSet|Block-FileShareAccess|Clear-Disk|Clear-FileStorageTier|Clear-StorageDiagnosticInfo|Connect-VirtualDisk|Debug-FileShare|Debug-StorageSubSystem|Debug-Volume|Disable-PhysicalDiskIdentification|Disable-StorageEnclosureIdentification|Disable-StorageHighAvailability|Disconnect-VirtualDisk|Dismount-DiskImage|Enable-PhysicalDiskIdentification|Enable-StorageEnclosureIdentification|Enable-StorageHighAvailability|Format-Volume|Get-DedupProperties|Get-Disk|Get-DiskImage|Get-DiskStorageNodeView|Get-FileIntegrity|Get-FileShare|Get-FileShareAccessControlEntry|Get-FileStorageTier|Get-InitiatorId|Get-InitiatorPort|Get-MaskingSet|Get-OffloadDataTransferSetting|Get-Partition|Get-PartitionSupportedSize|Get-PhysicalDisk|Get-PhysicalDiskStorageNodeView|Get-ResiliencySetting|Get-StorageAdvancedProperty|Get-StorageDiagnosticInfo|Get-StorageEnclosure|Get-StorageEnclosureStorageNodeView|Get-StorageEnclosureVendorData|Get-StorageFaultDomain|Get-StorageFileServer|Get-StorageFirmwareInformation|Get-StorageHealthAction|Get-StorageHealthReport|Get-StorageHealthSetting|Get-StorageJob|Get-StorageNode|Get-StoragePool|Get-StorageProvider|Get-StorageReliabilityCounter|Get-StorageSetting|Get-StorageSubSystem|Get-StorageTier|Get-StorageTierSupportedSize|Get-SupportedClusterSizes|Get-SupportedFileSystems|Get-TargetPort|Get-TargetPortal|Get-VirtualDisk|Get-VirtualDiskSupportedSize|Get-Volume|Get-VolumeCorruptionCount|Get-VolumeScrubPolicy|Grant-FileShareAccess|Hide-VirtualDisk|Initialize-Disk|Mount-DiskImage|New-FileShare|New-MaskingSet|New-Partition|New-StorageFileServer|New-StoragePool|New-StorageSubsystemVirtualDisk|New-StorageTier|New-VirtualDisk|New-VirtualDiskClone|New-VirtualDiskSnapshot|New-Volume|Optimize-StoragePool|Optimize-Volume|Register-StorageSubsystem|Remove-FileShare|Remove-InitiatorId|Remove-InitiatorIdFromMaskingSet|Remove-MaskingSet|Remove-Partition|Remove-PartitionAccessPath|Remove-PhysicalDisk|Remove-StorageFileServer|Remove-StorageHealthSetting|Remove-StoragePool|Remove-StorageTier|Remove-TargetPortFromMaskingSet|Remove-VirtualDisk|Remove-VirtualDiskFromMaskingSet|Rename-MaskingSet|Repair-FileIntegrity|Repair-VirtualDisk|Repair-Volume|Reset-PhysicalDisk|Reset-StorageReliabilityCounter|Resize-Partition|Resize-StorageTier|Resize-VirtualDisk|Revoke-FileShareAccess|Set-Disk|Set-FileIntegrity|Set-FileShare|Set-FileStorageTier|Set-InitiatorPort|Set-Partition|Set-PhysicalDisk|Set-ResiliencySetting|Set-StorageFileServer|Set-StorageHealthSetting|Set-StoragePool|Set-StorageProvider|Set-StorageSetting|Set-StorageSubSystem|Set-StorageTier|Set-VirtualDisk|Set-Volume|Set-VolumeScrubPolicy|Show-VirtualDisk|Start-StorageDiagnosticLog|Stop-StorageDiagnosticLog|Stop-StorageJob|Unblock-FileShareAccess|Unregister-StorageSubsystem|Update-Disk|Update-HostStorageCache|Update-StorageFirmware|Update-StoragePool|Update-StorageProviderCache|Write-VolumeCache|Disable-TlsCipherSuite|Disable-TlsSessionTicketKey|Enable-TlsCipherSuite|Enable-TlsSessionTicketKey|Export-TlsSessionTicketKey|Get-TlsCipherSuite|New-TlsSessionTicketKey|Get-TroubleshootingPack|Invoke-TroubleshootingPack|Clear-Tpm|ConvertTo-TpmOwnerAuth|Disable-TpmAutoProvisioning|Enable-TpmAutoProvisioning|Get-Tpm|Get-TpmEndorsementKeyInfo|Get-TpmSupportedFeature|Import-TpmOwnerAuth|Initialize-Tpm|Set-TpmOwnerAuth|Unblock-Tpm|Add-VpnConnection|Add-VpnConnectionRoute|Add-VpnConnectionTriggerApplication|Add-VpnConnectionTriggerDnsConfiguration|Add-VpnConnectionTriggerTrustedNetwork|Get-VpnConnection|Get-VpnConnectionTrigger|New-EapConfiguration|New-VpnServerAddress|Remove-VpnConnection|Remove-VpnConnectionRoute|Remove-VpnConnectionTriggerApplication|Remove-VpnConnectionTriggerDnsConfiguration|Remove-VpnConnectionTriggerTrustedNetwork|Set-VpnConnection|Set-VpnConnectionIPsecConfiguration|Set-VpnConnectionProxy|Set-VpnConnectionTriggerDnsConfiguration|Set-VpnConnectionTriggerTrustedNetwork|Add-OdbcDsn|Disable-OdbcPerfCounter|Disable-WdacBidTrace|Enable-OdbcPerfCounter|Enable-WdacBidTrace|Get-OdbcDriver|Get-OdbcDsn|Get-OdbcPerfCounter|Get-WdacBidTrace|Remove-OdbcDsn|Set-OdbcDriver|Set-OdbcDsn|Get-WindowsDeveloperLicense|Show-WindowsDeveloperLicenseRegistration|Unregister-WindowsDeveloperLicense|Disable-WindowsErrorReporting|Enable-WindowsErrorReporting|Get-WindowsErrorReporting|Get-WindowsSearchSetting|Set-WindowsSearchSetting|Get-WindowsUpdateLog",n=this.createKeywordMapper({"support.function":t,keyword:e},"identifier"),r="eq|ne|gt|lt|le|ge|like|notlike|match|notmatch|contains|notcontains|in|notin|band|bor|bxor|bnot|ceq|cne|cgt|clt|cle|cge|clike|cnotlike|cmatch|cnotmatch|ccontains|cnotcontains|cin|cnotin|ieq|ine|igt|ilt|ile|ige|ilike|inotlike|imatch|inotmatch|icontains|inotcontains|iin|inotin|and|or|xor|not|split|join|replace|f|csplit|creplace|isplit|ireplace|is|isnot|as|shl|shr";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"comment.start",regex:"<#",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"[$](?:[Tt]rue|[Ff]alse)\\b"},{token:"constant.language",regex:"[$][Nn]ull\\b"},{token:"variable.instance",regex:"[$][a-zA-Z][a-zA-Z0-9_]*\\b"},{token:n,regex:"[a-zA-Z_$][a-zA-Z0-9_$\\-]*\\b"},{token:"keyword.operator",regex:"\\-(?:"+r+")"},{token:"keyword.operator",regex:"&|\\+|\\-|\\*|\\/|\\%|\\=|\\>|\\&|\\!|\\|"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment.end",regex:"#>",next:"start"},{token:"doc.comment.tag",regex:"^\\.\\w+"},{defaultToken:"comment"}]}};r.inherits(s,i),t.PowershellHighlightRules=s}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/powershell",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/powershell_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./powershell_highlight_rules").PowershellHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./behaviour/cstyle").CstyleBehaviour,a=e("./folding/cstyle").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a({start:"^\\s*(<#)",end:"^[#\\s]>\\s*$"})};r.inherits(f,i),function(){this.lineCommentStart="#",this.blockComment={start:"<#",end:"#>"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[]\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){return null},this.$id="ace/mode/powershell"}.call(f.prototype),t.Mode=f}); (function() { + window.require(["ace/mode/powershell"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-python.js b/BTPanel/static/ace/mode-python.js new file mode 100644 index 00000000..8d7dbdb2 --- /dev/null +++ b/BTPanel/static/ace/mode-python.js @@ -0,0 +1,8 @@ +define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield|async|await|nonlocal",t="True|False|None|NotImplemented|Ellipsis|__debug__",n="abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|apply|delattr|help|next|setattr|set|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|ascii|breakpoint|bytes",r=this.createKeywordMapper({"invalid.deprecated":"debugger","support.function":n,"variable.language":"self|cls","constant.language":t,keyword:e},"identifier"),i="[uU]?",s="[rR]",o="[fF]",u="(?:[rR][fF]|[fF][rR])",a="(?:(?:[1-9]\\d*)|(?:0))",f="(?:0[oO]?[0-7]+)",l="(?:0[xX][\\dA-Fa-f]+)",c="(?:0[bB][01]+)",h="(?:"+a+"|"+f+"|"+l+"|"+c+")",p="(?:[eE][+-]?\\d+)",d="(?:\\.\\d+)",v="(?:\\d+)",m="(?:(?:"+v+"?"+d+")|(?:"+v+"\\.))",g="(?:(?:"+m+"|"+v+")"+p+")",y="(?:"+g+"|"+m+")",b="\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:i+'"{3}',next:"qqstring3"},{token:"string",regex:i+'"(?=.)',next:"qqstring"},{token:"string",regex:i+"'{3}",next:"qstring3"},{token:"string",regex:i+"'(?=.)",next:"qstring"},{token:"string",regex:s+'"{3}',next:"rawqqstring3"},{token:"string",regex:s+'"(?=.)',next:"rawqqstring"},{token:"string",regex:s+"'{3}",next:"rawqstring3"},{token:"string",regex:s+"'(?=.)",next:"rawqstring"},{token:"string",regex:o+'"{3}',next:"fqqstring3"},{token:"string",regex:o+'"(?=.)',next:"fqqstring"},{token:"string",regex:o+"'{3}",next:"fqstring3"},{token:"string",regex:o+"'(?=.)",next:"fqstring"},{token:"string",regex:u+'"{3}',next:"rfqqstring3"},{token:"string",regex:u+'"(?=.)',next:"rfqqstring"},{token:"string",regex:u+"'{3}",next:"rfqstring3"},{token:"string",regex:u+"'(?=.)",next:"rfqstring"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|@|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"punctuation",regex:",|:|;|\\->|\\+=|\\-=|\\*=|\\/=|\\/\\/=|%=|@=|&=|\\|=|^=|>>=|<<=|\\*\\*="},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"},{include:"constants"}],qqstring3:[{token:"constant.language.escape",regex:b},{token:"string",regex:'"{3}',next:"start"},{defaultToken:"string"}],qstring3:[{token:"constant.language.escape",regex:b},{token:"string",regex:"'{3}",next:"start"},{defaultToken:"string"}],qqstring:[{token:"constant.language.escape",regex:b},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:b},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"start"},{defaultToken:"string"}],rawqqstring3:[{token:"string",regex:'"{3}',next:"start"},{defaultToken:"string"}],rawqstring3:[{token:"string",regex:"'{3}",next:"start"},{defaultToken:"string"}],rawqqstring:[{token:"string",regex:"\\\\$",next:"rawqqstring"},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],rawqstring:[{token:"string",regex:"\\\\$",next:"rawqstring"},{token:"string",regex:"'|$",next:"start"},{defaultToken:"string"}],fqqstring3:[{token:"constant.language.escape",regex:b},{token:"string",regex:'"{3}',next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],fqstring3:[{token:"constant.language.escape",regex:b},{token:"string",regex:"'{3}",next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],fqqstring:[{token:"constant.language.escape",regex:b},{token:"string",regex:"\\\\$",next:"fqqstring"},{token:"string",regex:'"|$',next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],fqstring:[{token:"constant.language.escape",regex:b},{token:"string",regex:"'|$",next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],rfqqstring3:[{token:"string",regex:'"{3}',next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],rfqstring3:[{token:"string",regex:"'{3}",next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],rfqqstring:[{token:"string",regex:"\\\\$",next:"rfqqstring"},{token:"string",regex:'"|$',next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],rfqstring:[{token:"string",regex:"'|$",next:"start"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"},{defaultToken:"string"}],fqstringParRules:[{token:"paren.lparen",regex:"[\\[\\(]"},{token:"paren.rparen",regex:"[\\]\\)]"},{token:"string",regex:"\\s+"},{token:"string",regex:"'(.)*'"},{token:"string",regex:'"(.)*"'},{token:"function.support",regex:"(!s|!r|!a)"},{include:"constants"},{token:"paren.rparen",regex:"}",next:"pop"},{token:"paren.lparen",regex:"{",push:"fqstringParRules"}],constants:[{token:"constant.numeric",regex:"(?:"+y+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:y},{token:"constant.numeric",regex:h+"[lL]\\b"},{token:"constant.numeric",regex:h+"\\b"},{token:["punctuation","function.support"],regex:"(\\.)([a-zA-Z_]+)\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"}]},this.normalizeRules()};r.inherits(s,i),t.PythonHighlightRules=s}),define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){this.foldingStartMarker=new RegExp("([\\[{])(?:\\s*)$|("+e+")(?:\\s*)(?:#.*)?$")};r.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(s.prototype)}),define("ace/mode/python",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/python_highlight_rules","ace/mode/folding/pythonic","ace/range"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./python_highlight_rules").PythonHighlightRules,o=e("./folding/pythonic").FoldMode,u=e("../range").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o("\\:"),this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart="#",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[:]\s*$/);o&&(r+=n)}return r};var e={pass:1,"return":1,raise:1,"break":1,"continue":1};this.checkOutdent=function(t,n,r){if(r!=="\r\n"&&r!=="\r"&&r!=="\n")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type=="comment"||s.type=="text"&&s.value.match(/^\s+$/)));return s?s.type=="keyword"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))},this.$id="ace/mode/python"}.call(a.prototype),t.Mode=a}); (function() { + window.require(["ace/mode/python"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-r.js b/BTPanel/static/ace/mode-r.js new file mode 100644 index 00000000..4e1301ec --- /dev/null +++ b/BTPanel/static/ace/mode-r.js @@ -0,0 +1,8 @@ +define("ace/mode/tex_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(e){e||(e="text"),this.$rules={start:[{token:"comment",regex:"%.*$"},{token:e,regex:"\\\\[$&%#\\{\\}]"},{token:"keyword",regex:"\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b",next:"nospell"},{token:"keyword",regex:"\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])}]"},{token:e,regex:"\\s+"}],nospell:[{token:"comment",regex:"%.*$",next:"start"},{token:"nospell."+e,regex:"\\\\[$&%#\\{\\}]"},{token:"keyword",regex:"\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b"},{token:"keyword",regex:"\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])",next:"start"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])]"},{token:"paren.keyword.operator",regex:"}",next:"start"},{token:"nospell."+e,regex:"\\s+"},{token:"nospell."+e,regex:"\\w+"}]}};r.inherits(o,s),t.TexHighlightRules=o}),define("ace/mode/r_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/tex_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=e("./tex_highlight_rules").TexHighlightRules,u=function(){var e=i.arrayToMap("function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass".split("|")),t=i.arrayToMap("NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|NA_complex_".split("|"));this.$rules={start:[{token:"comment.sectionhead",regex:"#+(?!').*(?:----|====|####)\\s*$"},{token:"comment",regex:"#+'",next:"rd-start"},{token:"comment",regex:"#.*$"},{token:"string",regex:'["]',next:"qqstring"},{token:"string",regex:"[']",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+[Li]?\\b"},{token:"constant.numeric",regex:"\\d+L\\b"},{token:"constant.numeric",regex:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b"},{token:"constant.numeric",regex:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b"},{token:"constant.language.boolean",regex:"(?:TRUE|FALSE|T|F)\\b"},{token:"identifier",regex:"`.*?`"},{onMatch:function(n){return e[n]?"keyword":t[n]?"constant.language":n=="..."||n.match(/^\.\.\d+$/)?"variable.language":"identifier"},regex:"[a-zA-Z.][a-zA-Z0-9._]*\\b"},{token:"keyword.operator",regex:"%%|>=|<=|==|!=|\\->|<\\-|\\|\\||&&|=|\\+|\\-|\\*|/|\\^|>|<|!|&|\\||~|\\$|:"},{token:"keyword.operator",regex:"%.*?%"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",regex:".+"}]};var n=(new o("comment")).getRules();for(var r=0;r"},{stateName:"heredoc",onMatch:function(e,t,n){var r=e[2]=="-"?"indentedHeredoc":"heredoc",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:"constant",value:i[1]},{type:"string",value:i[2]},{type:"support.class",value:i[3]},{type:"string",value:i[4]}]},regex:"(<<-?)(['\"`]?)([\\w]+)(['\"`]?)",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||"start","support.class"):(this.next="","string")},regex:".*$",next:"start"}],indentedHeredoc:[{token:"string",regex:"^ +"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||"start","support.class"):(this.next="","string")},regex:".*$",next:"start"}]}},{regex:"$",token:"empty",next:function(e,t){return t[0]==="heredoc"||t[0]==="indentedHeredoc"?t[0]:e}},{token:"string.character",regex:"\\B\\?."},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"^=end(?:$|\\s.*$)",next:"start"},{token:"comment",regex:".+"}]},this.normalizeRules()};r.inherits(h,i),t.RubyHighlightRules=h}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++nl){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u=n[1]?(e.length>n[1]&&(r="invalid"),n.shift(),n.shift(),this.next=n.shift()):this.next="",r},regex:/"#*/,next:"start"},{defaultToken:"string.quoted.raw.source.rust"}]},{token:"string.quoted.double.source.rust",regex:'"',push:[{token:"string.quoted.double.source.rust",regex:'"',next:"pop"},{token:"constant.character.escape.source.rust",regex:s},{defaultToken:"string.quoted.double.source.rust"}]},{token:["keyword.source.rust","text","entity.name.function.source.rust"],regex:"\\b(fn)(\\s+)((?:r#)?[a-zA-Z_][a-zA-Z0-9_]*)"},{token:"support.constant",regex:"\\b[a-zA-Z_][\\w\\d]*::"},{token:"keyword.source.rust",regex:"\\b(?:abstract|alignof|as|become|box|break|catch|continue|const|crate|default|do|dyn|else|enum|extern|for|final|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\b"},{token:"storage.type.source.rust",regex:"\\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|u128|f16|f32|f64|i8|i16|i32|i64|i128|str|option|either|c_float|c_double|c_void|FILE|fpos_t|DIR|dirent|c_char|c_schar|c_uchar|c_short|c_ushort|c_int|c_uint|c_long|c_ulong|size_t|ptrdiff_t|clock_t|time_t|c_longlong|c_ulonglong|intptr_t|uintptr_t|off_t|dev_t|ino_t|pid_t|mode_t|ssize_t)\\b"},{token:"variable.language.source.rust",regex:"\\bself\\b"},{token:"comment.line.doc.source.rust",regex:"//!.*$"},{token:"comment.line.double-dash.source.rust",regex:"//.*$"},{token:"comment.start.block.source.rust",regex:"/\\*",stateName:"comment",push:[{token:"comment.start.block.source.rust",regex:"/\\*",push:"comment"},{token:"comment.end.block.source.rust",regex:"\\*/",next:"pop"},{defaultToken:"comment.block.source.rust"}]},{token:"keyword.operator",regex:/\$|[-=]>|[-+%^=!&|<>]=?|[*/](?![*/])=?/},{token:"punctuation.operator",regex:/[?:,;.]/},{token:"paren.lparen",regex:/[\[({]/},{token:"paren.rparen",regex:/[\])}]/},{token:"constant.language.source.rust",regex:"\\b(?:true|false|Some|None|Ok|Err)\\b"},{token:"support.constant.source.rust",regex:"\\b(?:EXIT_FAILURE|EXIT_SUCCESS|RAND_MAX|EOF|SEEK_SET|SEEK_CUR|SEEK_END|_IOFBF|_IONBF|_IOLBF|BUFSIZ|FOPEN_MAX|FILENAME_MAX|L_tmpnam|TMP_MAX|O_RDONLY|O_WRONLY|O_RDWR|O_APPEND|O_CREAT|O_EXCL|O_TRUNC|S_IFIFO|S_IFCHR|S_IFBLK|S_IFDIR|S_IFREG|S_IFMT|S_IEXEC|S_IWRITE|S_IREAD|S_IRWXU|S_IXUSR|S_IWUSR|S_IRUSR|F_OK|R_OK|W_OK|X_OK|STDIN_FILENO|STDOUT_FILENO|STDERR_FILENO)\\b"},{token:"meta.preprocessor.source.rust",regex:"\\b\\w\\(\\w\\)*!|#\\[[\\w=\\(\\)_]+\\]\\b"},{token:"constant.numeric.source.rust",regex:/\b(?:0x[a-fA-F0-9_]+|0o[0-7_]+|0b[01_]+|[0-9][0-9_]*(?!\.))(?:[iu](?:size|8|16|32|64|128))?\b/},{token:"constant.numeric.source.rust",regex:/\b(?:[0-9][0-9_]*)(?:\.[0-9][0-9_]*)?(?:[Ee][+-][0-9][0-9_]*)?(?:f32|f64)?\b/}]},this.normalizeRules()};o.metaData={fileTypes:["rs","rc"],foldingStartMarker:"^.*\\bfn\\s*(\\w+\\s*)?\\([^\\)]*\\)(\\s*\\{[^\\}]*)?\\s*$",foldingStopMarker:"^\\s*\\}",name:"Rust",scopeName:"source.rust"},r.inherits(o,i),t.RustHighlightRules=o}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/rust",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/rust_highlight_rules","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./rust_highlight_rules").RustHighlightRules,o=e("./folding/cstyle").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/",nestable:!0},this.$quotes={'"':'"'},this.$id="ace/mode/rust"}.call(u.prototype),t.Mode=u}); (function() { + window.require(["ace/mode/rust"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-sass.js b/BTPanel/static/ace/mode-sass.js new file mode 100644 index 00000000..266c5d26 --- /dev/null +++ b/BTPanel/static/ace/mode-sass.js @@ -0,0 +1,8 @@ +define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom",f=t.supportConstantColor="aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen",l=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"paren.rparen",regex:"\\}"},{token:"string",regex:"@(?!viewport)",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"keyword",regex:"%"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant.numeric",regex:c},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"start"},{token:"paren.rparen",regex:"\\}",next:"start"},{token:"string",regex:";",next:"start"},{token:"keyword",regex:"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)"}],comments:[{token:"comment",regex:"\\/\\*",push:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}]}],ruleset:[{regex:"-(webkit|ms|moz|o)-",token:"text"},{token:"punctuation.operator",regex:"[:;]"},{token:"paren.rparen",regex:"\\}",next:"start"},{include:["strings","url","comments"]},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{include:"url"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}],url:[{token:"support.function",regex:"(?:url(:?-prefix)?|domain|regexp)\\(",push:[{token:"support.function",regex:"\\)",next:"pop"},{defaultToken:"string"}]}],strings:[{token:"string.start",regex:"'",push:[{token:"string.end",regex:"'|$",next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]},{token:"string.start",regex:'"',push:[{token:"string.end",regex:'"|$',next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]}],escapes:[{token:"constant.language.escape",regex:/\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define("ace/mode/scss_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/css_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=e("./css_highlight_rules"),u=function(){var e=i.arrayToMap(o.supportType.split("|")),t=i.arrayToMap("hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unquote".split("|")),n=i.arrayToMap(o.supportConstant.split("|")),r=i.arrayToMap(o.supportConstantColor.split("|")),s=i.arrayToMap("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare".split("|")),u=i.arrayToMap("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp".split("|")),a="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:a+"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:"constant.numeric",regex:a},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?"support.type":s.hasOwnProperty(i)?"keyword":n.hasOwnProperty(i)?"constant.language":t.hasOwnProperty(i)?"support.function":r.hasOwnProperty(i.toLowerCase())?"support.constant.color":u.hasOwnProperty(i.toLowerCase())?"variable.language":"text"},regex:"\\-?[@a-z_][@a-z0-9_\\-]*"},{token:"variable",regex:"[a-z_\\-$][a-z0-9_\\-$]*\\b"},{token:"variable.language",regex:"#[a-z0-9-_]+"},{token:"variable.language",regex:"\\.[a-z0-9-_]+"},{token:"variable.language",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{token:"keyword.operator",regex:"<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",regex:".+"}]}};r.inherits(u,s),t.ScssHighlightRules=u}),define("ace/mode/sass_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/scss_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./scss_highlight_rules").ScssHighlightRules,o=function(){s.call(this);var e=this.$rules.start;e[1].token=="comment"&&(e.splice(1,1,{onMatch:function(e,t,n){return n.unshift(this.next,-1,e.length-2,t),"comment"},regex:/^\s*\/\*/,next:"comment"},{token:"error.invalid",regex:"/\\*|[{;}]"},{token:"support.type",regex:/^\s*:[\w\-]+\s/}),this.$rules.comment=[{regex:/^\s*/,onMatch:function(e,t,n){return n[1]===-1&&(n[1]=Math.max(n[2],e.length-1)),e.length<=n[1]?(n.shift(),n.shift(),n.shift(),this.next=n.shift(),"text"):(this.next="","comment")},next:"start"},{defaultToken:"comment"}])};r.inherits(o,s),t.SassHighlightRules=o}),define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++nl){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",regex:".+"}]}};r.inherits(u,s),t.ScssHighlightRules=u}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"&&n.selection.isEmpty()){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(/^(\s+[^;]|\s*$)/.test(f.substring(s.column)))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}}),this.add("!important","insertion",function(e,t,n,r,i){if(i==="!"&&n.selection.isEmpty()){var s=n.getCursorPosition(),o=r.doc.getLine(s.row);if(/^\s*(;|}|$)/.test(o.substring(s.column)))return{text:"!important",selection:[10,10]}}})};r.inherits(u,s),t.CssBehaviour=u}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/css_completions",["require","exports","module"],function(e,t,n){"use strict";var r={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,"double":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{"default":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},"float":{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,"static":1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e){if(typeof e[t]!="string")continue;var n=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();if(e==="ruleset"||t.$mode.$id=="ace/mode/scss"){var i=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+": $0;",meta:"property",score:1e6}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\w\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]=="object"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:"property value",score:1e6}})}}).call(i.prototype),t.CssCompletions=i}),define("ace/mode/scss",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/scss_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/css","ace/mode/folding/cstyle","ace/mode/css_completions"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./scss_highlight_rules").ScssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./behaviour/css").CssBehaviour,a=e("./folding/cstyle").FoldMode,f=e("./css_completions").CssCompletions,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.$completer=new f,this.foldingRules=new a};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.$id="ace/mode/scss"}.call(l.prototype),t.Mode=l}); (function() { + window.require(["ace/mode/scss"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-sh.js b/BTPanel/static/ace/mode-sh.js new file mode 100644 index 00000000..49fec9f7 --- /dev/null +++ b/BTPanel/static/ace/mode-sh.js @@ -0,0 +1,8 @@ +define("ace/mode/sh_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=t.reservedKeywords="!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set|function|declare|readonly",o=t.languageConstructs="[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait",u=function(){var e=this.createKeywordMapper({keyword:s,"support.function.builtin":o,"invalid.deprecated":"debugger"},"identifier"),t="(?:(?:[1-9]\\d*)|(?:0))",n="(?:\\.\\d+)",r="(?:\\d+)",i="(?:(?:"+r+"?"+n+")|(?:"+r+"\\.))",u="(?:(?:"+i+"|"+r+")"+")",a="(?:"+u+"|"+i+")",f="(?:&"+r+")",l="[a-zA-Z_][a-zA-Z0-9_]*",c="(?:"+l+"(?==))",h="(?:\\$(?:SHLVL|\\$|\\!|\\?))",p="(?:"+l+"\\s*\\(\\))";this.$rules={start:[{token:"constant",regex:/\\./},{token:["text","comment"],regex:/(^|\s)(#.*)$/},{token:"string.start",regex:'"',push:[{token:"constant.language.escape",regex:/\\(?:[$`"\\]|$)/},{include:"variables"},{token:"keyword.operator",regex:/`/},{token:"string.end",regex:'"',next:"pop"},{defaultToken:"string"}]},{token:"string",regex:"\\$'",push:[{token:"constant.language.escape",regex:/\\(?:[abeEfnrtv\\'"]|x[a-fA-F\d]{1,2}|u[a-fA-F\d]{4}([a-fA-F\d]{4})?|c.|\d{1,3})/},{token:"string",regex:"'",next:"pop"},{defaultToken:"string"}]},{regex:"<<<",token:"keyword.operator"},{stateName:"heredoc",regex:"(<<-?)(\\s*)(['\"`]?)([\\w\\-]+)(['\"`]?)",onMatch:function(e,t,n){var r=e[2]=="-"?"indentedHeredoc":"heredoc",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:"constant",value:i[1]},{type:"text",value:i[2]},{type:"string",value:i[3]},{type:"support.class",value:i[4]},{type:"string",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||"start","support.class"):(this.next="","string")},regex:".*$",next:"start"}],indentedHeredoc:[{token:"string",regex:"^ +"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||"start","support.class"):(this.next="","string")},regex:".*$",next:"start"}]}},{regex:"$",token:"empty",next:function(e,t){return t[0]==="heredoc"||t[0]==="indentedHeredoc"?t[0]:e}},{token:["keyword","text","text","text","variable"],regex:/(declare|local|readonly)(\s+)(?:(-[fixar]+)(\s+))?([a-zA-Z_][a-zA-Z0-9_]*\b)/},{token:"variable.language",regex:h},{token:"variable",regex:c},{include:"variables"},{token:"support.function",regex:p},{token:"support.function",regex:f},{token:"string",start:"'",end:"'"},{token:"constant.numeric",regex:a},{token:"constant.numeric",regex:t+"\\b"},{token:e,regex:"[a-zA-Z_][a-zA-Z0-9_]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!=|[%&|`]"},{token:"punctuation.operator",regex:";"},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]]"},{token:"paren.rparen",regex:"[\\)\\}]",next:"pop"}],variables:[{token:"variable",regex:/(\$)(\w+)/},{token:["variable","paren.lparen"],regex:/(\$)(\()/,push:"start"},{token:["variable","paren.lparen","keyword.operator","variable","keyword.operator"],regex:/(\$)(\{)([#!]?)(\w+|[*@#?\-$!0_])(:[?+\-=]?|##?|%%?|,,?\/|\^\^?)?/,push:"start"},{token:"variable",regex:/\$[*@#?\-$!0_]/},{token:["variable","paren.lparen"],regex:/(\$)(\{)/,push:"start"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/sh",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sh_highlight_rules","ace/range","ace/mode/folding/cstyle","ace/mode/behaviour/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./sh_highlight_rules").ShHighlightRules,o=e("../range").Range,u=e("./folding/cstyle").FoldMode,a=e("./behaviour/cstyle").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart="#",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[:]\s*$/);o&&(r+=n)}return r};var e={pass:1,"return":1,raise:1,"break":1,"continue":1};this.checkOutdent=function(t,n,r){if(r!=="\r\n"&&r!=="\r"&&r!=="\n")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type=="comment"||s.type=="text"&&s.value.match(/^\s+$/)));return s?s.type=="keyword"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id="ace/mode/sh"}.call(f.prototype),t.Mode=f}); (function() { + window.require(["ace/mode/sh"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-sql.js b/BTPanel/static/ace/mode-sql.js new file mode 100644 index 00000000..a7a04340 --- /dev/null +++ b/BTPanel/static/ace/mode-sql.js @@ -0,0 +1,8 @@ +define("ace/mode/sql_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|foreign|not|references|default|null|inner|cross|natural|database|drop|grant",t="true|false",n="avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nvl",r="int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|money|real|number|integer",i=this.createKeywordMapper({"support.function":n,keyword:e,"constant.language":t,"storage.type":r},"identifier",!0);this.$rules={start:[{token:"comment",regex:"--.*$"},{token:"comment",start:"/\\*",end:"\\*/"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"},{token:"string",regex:"`.*?`"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:i,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\(]"},{token:"paren.rparen",regex:"[\\)]"},{token:"text",regex:"\\s+"}]},this.normalizeRules()};r.inherits(s,i),t.SqlHighlightRules=s}),define("ace/mode/sql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sql_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./sql_highlight_rules").SqlHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart="--",this.$id="ace/mode/sql"}.call(o.prototype),t.Mode=o}); (function() { + window.require(["ace/mode/sql"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-sqlserver.js b/BTPanel/static/ace/mode-sqlserver.js new file mode 100644 index 00000000..24ba40f2 --- /dev/null +++ b/BTPanel/static/ace/mode-sqlserver.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/sqlserver_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e="ALL|AND|ANY|BETWEEN|EXISTS|IN|LIKE|NOT|OR|SOME";e+="|NULL|IS|APPLY|INNER|OUTER|LEFT|RIGHT|JOIN|CROSS";var t="OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|AVG|CHECKSUM_AGG|COUNT|COUNT_BIG|GROUPING|GROUPING_ID|MAX|MIN|STDEV|STDEVP|SUM|VAR|VARP|DENSE_RANK|NTILE|RANK|ROW_NUMBER@@DATEFIRST|@@DBTS|@@LANGID|@@LANGUAGE|@@LOCK_TIMEOUT|@@MAX_CONNECTIONS|@@MAX_PRECISION|@@NESTLEVEL|@@OPTIONS|@@REMSERVER|@@SERVERNAME|@@SERVICENAME|@@SPID|@@TEXTSIZE|@@VERSION|CAST|CONVERT|PARSE|TRY_CAST|TRY_CONVERT|TRY_PARSE@@CURSOR_ROWS|@@FETCH_STATUS|CURSOR_STATUS|@@DATEFIRST|@@LANGUAGE|CURRENT_TIMESTAMP|DATEADD|DATEDIFF|DATEFROMPARTS|DATENAME|DATEPART|DATETIME2FROMPARTS|DATETIMEFROMPARTS|DATETIMEOFFSETFROMPARTS|DAY|EOMONTH|GETDATE|GETUTCDATE|ISDATE|MONTH|SET DATEFIRST|SET DATEFORMAT|SET LANGUAGE|SMALLDATETIMEFROMPARTS|SP_HELPLANGUAGE|SWITCHOFFSET|SYSDATETIME|SYSDATETIMEOFFSET|SYSUTCDATETIME|TIMEFROMPARTS|TODATETIMEOFFSET|YEAR|CHOOSE|IIF|ABS|ACOS|ASIN|ATAN|ATN2|CEILING|COS|COT|DEGREES|EXP|FLOOR|LOG|LOG10|PI|POWER|RADIANS|RAND|ROUND|SIGN|SIN|SQRT|SQUARE|TAN|@@PROCID|APPLOCK_MODE|APPLOCK_TEST|APP_NAME|ASSEMBLYPROPERTY|COLUMNPROPERTY|COL_LENGTH|COL_NAME|DATABASEPROPERTYEX|DATABASE_PRINCIPAL_ID|DB_ID|DB_NAME|FILEGROUPPROPERTY|FILEGROUP_ID|FILEGROUP_NAME|FILEPROPERTY|FILE_ID|FILE_IDEX|FILE_NAME|FULLTEXTCATALOGPROPERTY|FULLTEXTSERVICEPROPERTY|INDEXKEY_PROPERTY|INDEXPROPERTY|INDEX_COL|OBJECTPROPERTY|OBJECTPROPERTYEX|OBJECT_DEFINITION|OBJECT_ID|OBJECT_NAME|OBJECT_SCHEMA_NAME|ORIGINAL_DB_NAME|PARSENAME|SCHEMA_ID|SCHEMA_NAME|SCOPE_IDENTITY|SERVERPROPERTY|STATS_DATE|TYPEPROPERTY|TYPE_ID|TYPE_NAME|CERTENCODED|CERTPRIVATEKEY|CURRENT_USER|DATABASE_PRINCIPAL_ID|HAS_PERMS_BY_NAME|IS_MEMBER|IS_ROLEMEMBER|IS_SRVROLEMEMBER|ORIGINAL_LOGIN|PERMISSIONS|PWDCOMPARE|PWDENCRYPT|SCHEMA_ID|SCHEMA_NAME|SESSION_USER|SUSER_ID|SUSER_NAME|SUSER_SID|SUSER_SNAME|SYS.FN_BUILTIN_PERMISSIONS|SYS.FN_GET_AUDIT_FILE|SYS.FN_MY_PERMISSIONS|SYSTEM_USER|USER_ID|USER_NAME|ASCII|CHAR|CHARINDEX|CONCAT|DIFFERENCE|FORMAT|LEN|LOWER|LTRIM|NCHAR|PATINDEX|QUOTENAME|REPLACE|REPLICATE|REVERSE|RTRIM|SOUNDEX|SPACE|STR|STUFF|SUBSTRING|UNICODE|UPPER|$PARTITION|@@ERROR|@@IDENTITY|@@PACK_RECEIVED|@@ROWCOUNT|@@TRANCOUNT|BINARY_CHECKSUM|CHECKSUM|CONNECTIONPROPERTY|CONTEXT_INFO|CURRENT_REQUEST_ID|ERROR_LINE|ERROR_MESSAGE|ERROR_NUMBER|ERROR_PROCEDURE|ERROR_SEVERITY|ERROR_STATE|FORMATMESSAGE|GETANSINULL|GET_FILESTREAM_TRANSACTION_CONTEXT|HOST_ID|HOST_NAME|ISNULL|ISNUMERIC|MIN_ACTIVE_ROWVERSION|NEWID|NEWSEQUENTIALID|ROWCOUNT_BIG|XACT_STATE|@@CONNECTIONS|@@CPU_BUSY|@@IDLE|@@IO_BUSY|@@PACKET_ERRORS|@@PACK_RECEIVED|@@PACK_SENT|@@TIMETICKS|@@TOTAL_ERRORS|@@TOTAL_READ|@@TOTAL_WRITE|FN_VIRTUALFILESTATS|PATINDEX|TEXTPTR|TEXTVALID|COALESCE|NULLIF",n="BIGINT|BINARY|BIT|CHAR|CURSOR|DATE|DATETIME|DATETIME2|DATETIMEOFFSET|DECIMAL|FLOAT|HIERARCHYID|IMAGE|INTEGER|INT|MONEY|NCHAR|NTEXT|NUMERIC|NVARCHAR|REAL|SMALLDATETIME|SMALLINT|SMALLMONEY|SQL_VARIANT|TABLE|TEXT|TIME|TIMESTAMP|TINYINT|UNIQUEIDENTIFIER|VARBINARY|VARCHAR|XML",r="sp_addextendedproc|sp_addextendedproperty|sp_addmessage|sp_addtype|sp_addumpdevice|sp_add_data_file_recover_suspect_db|sp_add_log_file_recover_suspect_db|sp_altermessage|sp_attach_db|sp_attach_single_file_db|sp_autostats|sp_bindefault|sp_bindrule|sp_bindsession|sp_certify_removable|sp_clean_db_file_free_space|sp_clean_db_free_space|sp_configure|sp_control_plan_guide|sp_createstats|sp_create_plan_guide|sp_create_plan_guide_from_handle|sp_create_removable|sp_cycle_errorlog|sp_datatype_info|sp_dbcmptlevel|sp_dbmmonitoraddmonitoring|sp_dbmmonitorchangealert|sp_dbmmonitorchangemonitoring|sp_dbmmonitordropalert|sp_dbmmonitordropmonitoring|sp_dbmmonitorhelpalert|sp_dbmmonitorhelpmonitoring|sp_dbmmonitorresults|sp_db_increased_partitions|sp_delete_backuphistory|sp_depends|sp_describe_first_result_set|sp_describe_undeclared_parameters|sp_detach_db|sp_dropdevice|sp_dropextendedproc|sp_dropextendedproperty|sp_dropmessage|sp_droptype|sp_execute|sp_executesql|sp_getapplock|sp_getbindtoken|sp_help|sp_helpconstraint|sp_helpdb|sp_helpdevice|sp_helpextendedproc|sp_helpfile|sp_helpfilegroup|sp_helpindex|sp_helplanguage|sp_helpserver|sp_helpsort|sp_helpstats|sp_helptext|sp_helptrigger|sp_indexoption|sp_invalidate_textptr|sp_lock|sp_monitor|sp_prepare|sp_prepexec|sp_prepexecrpc|sp_procoption|sp_recompile|sp_refreshview|sp_releaseapplock|sp_rename|sp_renamedb|sp_resetstatus|sp_sequence_get_range|sp_serveroption|sp_setnetname|sp_settriggerorder|sp_spaceused|sp_tableoption|sp_unbindefault|sp_unbindrule|sp_unprepare|sp_updateextendedproperty|sp_updatestats|sp_validname|sp_who|sys.sp_merge_xtp_checkpoint_files|sys.sp_xtp_bind_db_resource_pool|sys.sp_xtp_checkpoint_force_garbage_collection|sys.sp_xtp_control_proc_exec_stats|sys.sp_xtp_control_query_exec_stats|sys.sp_xtp_unbind_db_resource_pool",s="ABSOLUTE|ACTION|ADA|ADD|ADMIN|AFTER|AGGREGATE|ALIAS|ALL|ALLOCATE|ALTER|AND|ANY|ARE|ARRAY|AS|ASC|ASENSITIVE|ASSERTION|ASYMMETRIC|AT|ATOMIC|AUTHORIZATION|BACKUP|BEFORE|BEGIN|BETWEEN|BIT_LENGTH|BLOB|BOOLEAN|BOTH|BREADTH|BREAK|BROWSE|BULK|BY|CALL|CALLED|CARDINALITY|CASCADE|CASCADED|CASE|CATALOG|CHARACTER|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CHECKPOINT|CLASS|CLOB|CLOSE|CLUSTERED|COALESCE|COLLATE|COLLATION|COLLECT|COLUMN|COMMIT|COMPLETION|COMPUTE|CONDITION|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONSTRUCTOR|CONTAINS|CONTAINSTABLE|CONTINUE|CORR|CORRESPONDING|COVAR_POP|COVAR_SAMP|CREATE|CROSS|CUBE|CUME_DIST|CURRENT|CURRENT_CATALOG|CURRENT_DATE|CURRENT_DEFAULT_TRANSFORM_GROUP|CURRENT_PATH|CURRENT_ROLE|CURRENT_SCHEMA|CURRENT_TIME|CURRENT_TRANSFORM_GROUP_FOR_TYPE|CYCLE|DATA|DATABASE|DBCC|DEALLOCATE|DEC|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DENY|DEPTH|DEREF|DESC|DESCRIBE|DESCRIPTOR|DESTROY|DESTRUCTOR|DETERMINISTIC|DIAGNOSTICS|DICTIONARY|DISCONNECT|DISK|DISTINCT|DISTRIBUTED|DOMAIN|DOUBLE|DROP|DUMP|DYNAMIC|EACH|ELEMENT|ELSE|END|END-EXEC|EQUALS|ERRLVL|ESCAPE|EVERY|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXISTS|EXIT|EXTERNAL|EXTRACT|FETCH|FILE|FILLFACTOR|FILTER|FIRST|FOR|FOREIGN|FORTRAN|FOUND|FREE|FREETEXT|FREETEXTTABLE|FROM|FULL|FULLTEXTTABLE|FUNCTION|FUSION|GENERAL|GET|GLOBAL|GO|GOTO|GRANT|GROUP|HAVING|HOLD|HOLDLOCK|HOST|HOUR|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IGNORE|IMMEDIATE|IN|INCLUDE|INDEX|INDICATOR|INITIALIZE|INITIALLY|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INTEGER|INTERSECT|INTERSECTION|INTERVAL|INTO|IS|ISOLATION|ITERATE|JOIN|KEY|KILL|LANGUAGE|LARGE|LAST|LATERAL|LEADING|LESS|LEVEL|LIKE|LIKE_REGEX|LIMIT|LINENO|LN|LOAD|LOCAL|LOCALTIME|LOCALTIMESTAMP|LOCATOR|MAP|MATCH|MEMBER|MERGE|METHOD|MINUTE|MOD|MODIFIES|MODIFY|MODULE|MULTISET|NAMES|NATIONAL|NATURAL|NCLOB|NEW|NEXT|NO|NOCHECK|NONCLUSTERED|NONE|NORMALIZE|NOT|NULL|NULLIF|OBJECT|OCCURRENCES_REGEX|OCTET_LENGTH|OF|OFF|OFFSETS|OLD|ON|ONLY|OPEN|OPERATION|OPTION|OR|ORDER|ORDINALITY|OUT|OUTER|OUTPUT|OVER|OVERLAPS|OVERLAY|PAD|PARAMETER|PARAMETERS|PARTIAL|PARTITION|PASCAL|PATH|PERCENT|PERCENTILE_CONT|PERCENTILE_DISC|PERCENT_RANK|PIVOT|PLAN|POSITION|POSITION_REGEX|POSTFIX|PRECISION|PREFIX|PREORDER|PREPARE|PRESERVE|PRIMARY|PRINT|PRIOR|PRIVILEGES|PROC|PROCEDURE|PUBLIC|RAISERROR|RANGE|READ|READS|READTEXT|RECONFIGURE|RECURSIVE|REF|REFERENCES|REFERENCING|REGR_AVGX|REGR_AVGY|REGR_COUNT|REGR_INTERCEPT|REGR_R2|REGR_SLOPE|REGR_SXX|REGR_SXY|REGR_SYY|RELATIVE|RELEASE|REPLICATION|RESTORE|RESTRICT|RESULT|RETURN|RETURNS|REVERT|REVOKE|ROLE|ROLLBACK|ROLLUP|ROUTINE|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SAVEPOINT|SCHEMA|SCOPE|SCROLL|SEARCH|SECOND|SECTION|SECURITYAUDIT|SELECT|SEMANTICKEYPHRASETABLE|SEMANTICSIMILARITYDETAILSTABLE|SEMANTICSIMILARITYTABLE|SENSITIVE|SEQUENCE|SESSION|SET|SETS|SETUSER|SHUTDOWN|SIMILAR|SIZE|SOME|SPECIFIC|SPECIFICTYPE|SQL|SQLCA|SQLCODE|SQLERROR|SQLEXCEPTION|SQLSTATE|SQLWARNING|START|STATE|STATEMENT|STATIC|STATISTICS|STDDEV_POP|STDDEV_SAMP|STRUCTURE|SUBMULTISET|SUBSTRING_REGEX|SYMMETRIC|SYSTEM|TABLESAMPLE|TEMPORARY|TERMINATE|TEXTSIZE|THAN|THEN|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TOP|TRAILING|TRAN|TRANSACTION|TRANSLATE|TRANSLATE_REGEX|TRANSLATION|TREAT|TRIGGER|TRIM|TRUNCATE|TSEQUAL|UESCAPE|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNPIVOT|UPDATE|UPDATETEXT|USAGE|USE|USER|USING|VALUE|VALUES|VARIABLE|VARYING|VAR_POP|VAR_SAMP|VIEW|WAITFOR|WHEN|WHENEVER|WHERE|WHILE|WIDTH_BUCKET|WINDOW|WITH|WITHIN|WITHIN GROUP|WITHOUT|WORK|WRITE|WRITETEXT|XMLAGG|XMLATTRIBUTES|XMLBINARY|XMLCAST|XMLCOMMENT|XMLCONCAT|XMLDOCUMENT|XMLELEMENT|XMLEXISTS|XMLFOREST|XMLITERATE|XMLNAMESPACES|XMLPARSE|XMLPI|XMLQUERY|XMLSERIALIZE|XMLTABLE|XMLTEXT|XMLVALIDATE|ZONE";s+="|KEEPIDENTITY|KEEPDEFAULTS|IGNORE_CONSTRAINTS|IGNORE_TRIGGERS|XLOCK|FORCESCAN|FORCESEEK|HOLDLOCK|NOLOCK|NOWAIT|PAGLOCK|READCOMMITTED|READCOMMITTEDLOCK|READPAST|READUNCOMMITTED|REPEATABLEREAD|ROWLOCK|SERIALIZABLE|SNAPSHOT|SPATIAL_WINDOW_MAX_CELLS|TABLOCK|TABLOCKX|UPDLOCK|XLOCK|IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX|EXPAND|VIEWS|FAST|FORCE|KEEP|KEEPFIXED|MAXDOP|MAXRECURSION|OPTIMIZE|PARAMETERIZATION|SIMPLE|FORCED|RECOMPILE|ROBUST|PLAN|SPATIAL_WINDOW_MAX_CELLS|NOEXPAND|HINT",s+="|LOOP|HASH|MERGE|REMOTE",s+="|TRY|CATCH|THROW",s+="|TYPE",s=s.split("|"),s=s.filter(function(r,i,s){return e.split("|").indexOf(r)===-1&&t.split("|").indexOf(r)===-1&&n.split("|").indexOf(r)===-1}),s=s.sort().join("|");var o=this.createKeywordMapper({"constant.language":e,"storage.type":n,"support.function":t,"support.storedprocedure":r,keyword:s},"identifier",!0),u="SET ANSI_DEFAULTS|SET ANSI_NULLS|SET ANSI_NULL_DFLT_OFF|SET ANSI_NULL_DFLT_ON|SET ANSI_PADDING|SET ANSI_WARNINGS|SET ARITHABORT|SET ARITHIGNORE|SET CONCAT_NULL_YIELDS_NULL|SET CURSOR_CLOSE_ON_COMMIT|SET DATEFIRST|SET DATEFORMAT|SET DEADLOCK_PRIORITY|SET FIPS_FLAGGER|SET FMTONLY|SET FORCEPLAN|SET IDENTITY_INSERT|SET IMPLICIT_TRANSACTIONS|SET LANGUAGE|SET LOCK_TIMEOUT|SET NOCOUNT|SET NOEXEC|SET NUMERIC_ROUNDABORT|SET OFFSETS|SET PARSEONLY|SET QUERY_GOVERNOR_COST_LIMIT|SET QUOTED_IDENTIFIER|SET REMOTE_PROC_TRANSACTIONS|SET ROWCOUNT|SET SHOWPLAN_ALL|SET SHOWPLAN_TEXT|SET SHOWPLAN_XML|SET STATISTICS IO|SET STATISTICS PROFILE|SET STATISTICS TIME|SET STATISTICS XML|SET TEXTSIZE|SET XACT_ABORT".split("|"),a="READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SNAPSHOP|SERIALIZABLE".split("|");for(var f=0;f|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=|\\*"},{token:"paren.lparen",regex:"[\\(]"},{token:"paren.rparen",regex:"[\\)]"},{token:"punctuation",regex:",|;"},{token:"text",regex:"\\s+"}],comment:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}]};for(var f=0;ff)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/folding/sqlserver",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./cstyle").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\bCASE\b|\bBEGIN\b)|^\s*(\/\*)/i,this.startRegionRe=/^\s*(\/\*|--)#?region\b/,this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.getBeginEndBlock(e,n,o,s[1]);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;return},this.getBeginEndBlock=function(e,t,n,r){var s={row:t,column:n+r.length},o=e.getLength(),u,a=1,f=/(\bCASE\b|\bBEGIN\b)|(\bEND\b)/i;while(++ts.row)return new i(s.row,s.column,c,u.length)}}.call(o.prototype)}),define("ace/mode/sqlserver",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sqlserver_highlight_rules","ace/mode/folding/sqlserver"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./sqlserver_highlight_rules").SqlHighlightRules,o=e("./folding/sqlserver").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart="--",this.blockComment={start:"/*",end:"*/"},this.getCompletions=function(e,t,n,r){return t.$mode.$highlightRules.completions},this.$id="ace/mode/sql"}.call(u.prototype),t.Mode=u}); (function() { + window.require(["ace/mode/sqlserver"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-swift.js b/BTPanel/static/ace/mode-swift.js new file mode 100644 index 00000000..b010f871 --- /dev/null +++ b/BTPanel/static/ace/mode-swift.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/swift_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=function(){function t(e,t){var n=t.nestable||t.interpolation,r=t.interpolation&&t.interpolation.nextState||"start",s={regex:e+(t.multiline?"":"(?=.)"),token:"string.start"},o=[t.escape&&{regex:t.escape,token:"character.escape"},t.interpolation&&{token:"paren.quasi.start",regex:i.escapeRegExp(t.interpolation.lead+t.interpolation.open),push:r},t.error&&{regex:t.error,token:"error.invalid"},{regex:e+(t.multiline?"":"|$"),token:"string.end",next:n?"pop":"start"},{defaultToken:"string"}].filter(Boolean);n?s.push=o:s.next=o;if(!t.interpolation)return s;var u=t.interpolation.open,a=t.interpolation.close,f={regex:"["+i.escapeRegExp(u+a)+"]",onMatch:function(e,t,n){this.next=e==u?this.nextState:"";if(e==u&&n.length)return n.unshift("start",t),"paren";if(e==a&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1)return"paren.quasi.end"}return e==u?"paren.lparen":"paren.rparen"},nextState:r};return[f,s]}function n(){return[{token:"comment",regex:"\\/\\/(?=.)",next:[s.getTagRule(),{token:"comment",regex:"$|^",next:"start"},{defaultToken:"comment",caseInsensitive:!0}]},s.getStartRule("doc-start"),{token:"comment.start",regex:/\/\*/,stateName:"nested_comment",push:[s.getTagRule(),{token:"comment.start",regex:/\/\*/,push:"nested_comment"},{token:"comment.end",regex:"\\*\\/",next:"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var e=this.createKeywordMapper({"variable.language":"",keyword:"__COLUMN__|__FILE__|__FUNCTION__|__LINE__|as|associativity|break|case|class|continue|default|deinit|didSet|do|dynamicType|else|enum|extension|fallthrough|for|func|get|if|import|in|infix|init|inout|is|left|let|let|mutating|new|none|nonmutating|operator|override|postfix|precedence|prefix|protocol|return|right|safe|Self|self|set|struct|subscript|switch|Type|typealias|unowned|unsafe|var|weak|where|while|willSet|convenience|dynamic|final|infix|lazy|mutating|nonmutating|optional|override|postfix|prefix|required|static|guard|defer","storage.type":"bool|double|Double|extension|float|Float|int|Int|open|internal|fileprivate|private|public|string|String","constant.language":"false|Infinity|NaN|nil|no|null|null|off|on|super|this|true|undefined|yes","support.function":""},"identifier");this.$rules={start:[t('"',{escape:/\\(?:[0\\tnr"']|u{[a-fA-F1-9]{0,8}})/,interpolation:{lead:"\\",open:"(",close:")"},error:/\\./,multiline:!1}),n(),{regex:/@[a-zA-Z_$][a-zA-Z_$\d\u0080-\ufffe]*/,token:"variable.parameter"},{regex:/[a-zA-Z_$][a-zA-Z_$\d\u0080-\ufffe]*/,token:e},{token:"constant.numeric",regex:/[+-]?(?:0(?:b[01]+|o[0-7]+|x[\da-fA-F])|\d+(?:(?:\.\d*)?(?:[PpEe][+-]?\d+)?)\b)/},{token:"keyword.operator",regex:/--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/}]},this.embedRules(s,"doc-",[s.getEndRule("start")]),this.normalizeRules()};r.inherits(u,o),t.HighlightRules=u}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/swift",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/swift_highlight_rules","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./swift_highlight_rules").HighlightRules,o=e("./behaviour/cstyle").CstyleBehaviour,u=e("./folding/cstyle").FoldMode,a=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(a,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/",nestable:!0},this.$id="ace/mode/swift"}.call(a.prototype),t.Mode=a}); (function() { + window.require(["ace/mode/swift"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-text.js b/BTPanel/static/ace/mode-text.js new file mode 100644 index 00000000..fa24e3be --- /dev/null +++ b/BTPanel/static/ace/mode-text.js @@ -0,0 +1,8 @@ +; (function() { + window.require(["ace/mode/text"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-typescript.js b/BTPanel/static/ace/mode-typescript.js new file mode 100644 index 00000000..8385b779 --- /dev/null +++ b/BTPanel/static/ace/mode-typescript.js @@ -0,0 +1,8 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/,next:"start"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$quotes={'"':'"',"'":"'","`":"`"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(l.prototype),t.Mode=l}),define("ace/mode/typescript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/javascript_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./javascript_highlight_rules").JavaScriptHighlightRules,s=function(e){var t=[{token:["storage.type","text","entity.name.function.ts"],regex:"(function)(\\s+)([a-zA-Z0-9$_\u00a1-\uffff][a-zA-Z0-9d$_\u00a1-\uffff]*)"},{token:"keyword",regex:"(?:\\b(constructor|declare|interface|as|AS|public|private|extends|export|super|readonly|module|namespace|abstract|implements)\\b)"},{token:["keyword","storage.type.variable.ts"],regex:"(class|type)(\\s+[a-zA-Z0-9_?.$][\\w?.$]*)"},{token:"keyword",regex:"\\b(?:super|export|import|keyof|infer)\\b"},{token:["storage.type.variable.ts"],regex:"(?:\\b(this\\.|string\\b|bool\\b|boolean\\b|number\\b|true\\b|false\\b|undefined\\b|any\\b|null\\b|(?:unique )?symbol\\b|object\\b|never\\b|enum\\b))"}],n=(new i({jsx:(e&&e.jsx)==1})).getRules();n.no_regex=t.concat(n.no_regex),this.$rules=n};r.inherits(s,i),t.TypeScriptHighlightRules=s}),define("ace/mode/typescript",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/mode/typescript_highlight_rules","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/mode/matching_brace_outdent"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./javascript").Mode,s=e("./typescript_highlight_rules").TypeScriptHighlightRules,o=e("./behaviour/cstyle").CstyleBehaviour,u=e("./folding/cstyle").FoldMode,a=e("./matching_brace_outdent").MatchingBraceOutdent,f=function(){this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new o,this.foldingRules=new u};r.inherits(f,i),function(){this.createWorker=function(e){return null},this.$id="ace/mode/typescript"}.call(f.prototype),t.Mode=f}); (function() { + window.require(["ace/mode/typescript"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-vbscript.js b/BTPanel/static/ace/mode-vbscript.js new file mode 100644 index 00000000..2cf92609 --- /dev/null +++ b/BTPanel/static/ace/mode-vbscript.js @@ -0,0 +1,8 @@ +define("ace/mode/vbscript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e=this.createKeywordMapper({"keyword.control.asp":"If|Then|Else|ElseIf|End|While|Wend|For|To|Each|Case|Select|Return|Continue|Do|Until|Loop|Next|With|Exit|Function|Property|Type|Enum|Sub|IIf","storage.type.asp":"Dim|Call|Class|Const|Dim|Redim|Set|Let|Get|New|Randomize|Option|Explicit","storage.modifier.asp":"Private|Public|Default","keyword.operator.asp":"Mod|And|Not|Or|Xor|as","constant.language.asp":"Empty|False|Nothing|Null|True","support.class.asp":"Application|ObjectContext|Request|Response|Server|Session","support.class.collection.asp":"Contents|StaticObjects|ClientCertificate|Cookies|Form|QueryString|ServerVariables","support.constant.asp":"TotalBytes|Buffer|CacheControl|Charset|ContentType|Expires|ExpiresAbsolute|IsClientConnected|PICS|Status|ScriptTimeout|CodePage|LCID|SessionID|Timeout","support.function.asp":"Lock|Unlock|SetAbort|SetComplete|BinaryRead|AddHeader|AppendToLog|BinaryWrite|Clear|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon|Convert|Regex","support.function.event.asp":"Application_OnEnd|Application_OnStart|OnTransactionAbort|OnTransactionCommit|Session_OnEnd|Session_OnStart","support.function.vb.asp":"Array|Add|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng|Conversions|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial|DateValue|Day|Derived|Math|Escape|Eval|Exists|Exp|Filter|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent|GetLocale|GetObject|GetRef|Hex|Hour|InputBox|InStr|InStrRev|Int|Fix|IsArray|IsDate|IsEmpty|IsNull|IsNumeric|IsObject|Item|Items|Join|Keys|LBound|LCase|Left|Len|LoadPicture|Log|LTrim|RTrim|Trim|Maths|Mid|Minute|Month|MonthName|MsgBox|Now|Oct|Remove|RemoveAll|Replace|RGB|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion|ScriptEngineMinorVersion|Second|SetLocale|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse|Tan|Time|Timer|TimeSerial|TimeValue|TypeName|UBound|UCase|Unescape|VarType|Weekday|WeekdayName|Year","support.type.vb.asp":"vbtrue|vbfalse|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|int32|vbtab|vbverticaltab|vbbinarycompare|vbtextcomparevbsunday|vbmonday|vbtuesday|vbwednesday|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbEmpty|vbNull|vbInteger|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant|vbDataObject|vbDecimal|vbByte|vbArray"},"identifier",!0);this.$rules={start:[{token:["meta.ending-space"],regex:"$"},{token:[null],regex:"^(?=\\t)",next:"state_3"},{token:[null],regex:"^(?= )",next:"state_4"},{token:["text","storage.type.function.asp","text","entity.name.function.asp","text","punctuation.definition.parameters.asp","variable.parameter.function.asp","punctuation.definition.parameters.asp"],regex:"^(\\s*)(Function|Sub)(\\s+)([a-zA-Z_]\\w*)(\\s*)(\\()([^)]*)(\\))"},{token:"punctuation.definition.comment.asp",regex:"'|REM(?=\\s|$)",next:"comment",caseInsensitive:!0},{token:"storage.type.asp",regex:"On Error Resume Next|On Error GoTo",caseInsensitive:!0},{token:"punctuation.definition.string.begin.asp",regex:'"',next:"string"},{token:["punctuation.definition.variable.asp"],regex:"(\\$)[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\b\\s*"},{token:"constant.numeric.asp",regex:"-?\\b(?:(?:0(?:x|X)[0-9a-fA-F]*)|(?:(?:[0-9]+\\.?[0-9]*)|(?:\\.[0-9]+))(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\b"},{regex:"\\w+",token:e},{token:["entity.name.function.asp"],regex:"(?:(\\b[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\b)(?=\\(\\)?))"},{token:["keyword.operator.asp"],regex:"\\-|\\+|\\*\\/|\\>|\\<|\\=|\\&"}],state_3:[{token:["meta.odd-tab.tabs","meta.even-tab.tabs"],regex:"(\\t)(\\t)?"},{token:"meta.leading-space",regex:"(?=[^\\t])",next:"start"},{token:"meta.leading-space",regex:".",next:"state_3"}],state_4:[{token:["meta.odd-tab.spaces","meta.even-tab.spaces"],regex:"( )( )?"},{token:"meta.leading-space",regex:"(?=[^ ])",next:"start"},{defaultToken:"meta.leading-space"}],comment:[{token:"comment.line.apostrophe.asp",regex:"$|(?=(?:%>))",next:"start"},{defaultToken:"comment.line.apostrophe.asp"}],string:[{token:"constant.character.escape.apostrophe.asp",regex:'""'},{token:"string.quoted.double.asp",regex:'"',next:"start"},{defaultToken:"string.quoted.double.asp"}]}};r.inherits(s,i),t.VBScriptHighlightRules=s}),define("ace/mode/vbscript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/vbscript_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./vbscript_highlight_rules").VBScriptHighlightRules,o=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(o,i),function(){this.lineCommentStart=["'","REM"],this.$id="ace/mode/vbscript"}.call(o.prototype),t.Mode=o}); (function() { + window.require(["ace/mode/vbscript"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-verilog.js b/BTPanel/static/ace/mode-verilog.js new file mode 100644 index 00000000..127e1f96 --- /dev/null +++ b/BTPanel/static/ace/mode-verilog.js @@ -0,0 +1,8 @@ +define("ace/mode/verilog_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="always|and|assign|automatic|begin|buf|bufif0|bufif1|case|casex|casez|cell|cmos|config|deassign|default|defparam|design|disable|edge|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|event|for|force|forever|fork|function|generate|genvar|highz0|highz1|if|ifnone|incdir|include|initial|inout|input|instance|integer|join|large|liblist|library|localparam|macromodule|medium|module|nand|negedge|nmos|nor|noshowcancelled|not|notif0|notif1|or|output|parameter|pmos|posedge|primitive|pull0|pull1|pulldown|pullup|pulsestyle_onevent|pulsestyle_ondetect|rcmos|real|realtime|reg|release|repeat|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|showcancelled|signed|small|specify|specparam|strong0|strong1|supply0|supply1|table|task|time|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|unsigned|use|vectored|wait|wand|weak0|weak1|while|wire|wor|xnor|xorbegin|bufif0|bufif1|case|casex|casez|config|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|for|forever|function|generate|if|ifnone|macromodule|module|primitive|repeat|specify|table|task|while",t="true|false|null",n="count|min|max|avg|sum|rank|now|coalesce|main",r=this.createKeywordMapper({"support.function":n,keyword:e,"constant.language":t},"identifier",!0);this.$rules={start:[{token:"comment",regex:"//.*$"},{token:"comment.start",regex:"/\\*",next:[{token:"comment.end",regex:"\\*/",next:"start"},{defaultToken:"comment"}]},{token:"string.start",regex:'"',next:[{token:"constant.language.escape",regex:/\\(?:[ntvfa\\"]|[0-7]{1,3}|\x[a-fA-F\d]{1,2}|)/,consumeLineEnd:!0},{token:"string.end",regex:'"|$',next:"start"},{defaultToken:"string"}]},{token:"string",regex:"'^[']'"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\(]"},{token:"paren.rparen",regex:"[\\)]"},{token:"text",regex:"\\s+"}]},this.normalizeRules()};r.inherits(s,i),t.VerilogHighlightRules=s}),define("ace/mode/verilog",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/verilog_highlight_rules","ace/range"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./verilog_highlight_rules").VerilogHighlightRules,o=e("../range").Range,u=function(){this.HighlightRules=s,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$quotes={'"':'"'},this.$id="ace/mode/verilog"}.call(u.prototype),t.Mode=u}); (function() { + window.require(["ace/mode/verilog"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-xml.js b/BTPanel/static/ace/mode-xml.js new file mode 100644 index 00000000..5415d10d --- /dev/null +++ b/BTPanel/static/ace/mode-xml.js @@ -0,0 +1,8 @@ +define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){var t="[_:a-zA-Z\u00c0-\uffff][-_:.a-zA-Z0-9\u00c0-\uffff]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.start.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.end.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),a=function(){this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==""&&a!=="'"&&a!='"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,"attribute-value")||u(p,"string")))return{text:"",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,"tag-whitespace")||u(p,"whitespace"))p=h.stepBackward();var d=!c||c.match(/\s/);if(u(p,"attribute-equals")&&(d||c==">")||u(p,"decl-attribute-equals")&&(d||c=="?"))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,"tag-name")||u(f,"tag-whitespace")||u(f,"attribute-name")||u(f,"attribute-equals")||u(f,"attribute-value")))return;if(u(f,"reference.attribute-value"))return;if(u(f,"attribute-value")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,"tag-name")){f=a.stepBackward();if(f.value=="<"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),"end-tag-open"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf("tag-close")!==-1){if(f.value=="/>")return;while(f&&f.type.indexOf("tag-name")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value==="-1}var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t=="markbeginend"?"end":"":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?"":this._findEndTagInLine(e,n,r.tagName,r.end.column)?"":"start":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/";break}}return r}if(l(s,"tag-close"))return r.selfClosing=s.value=="/>",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,"tag-open"))return n.closing=l(t,"end-tag-open"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,"tag-name")?n.tagName=t.value:l(t,"tag-close")&&(n.selfClosing=t.value=="/>",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column"},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/xml_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/xml"}.call(l.prototype),t.Mode=l}); (function() { + window.require(["ace/mode/xml"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/BTPanel/static/ace/mode-yaml.js b/BTPanel/static/ace/mode-yaml.js new file mode 100644 index 00000000..ecd927fe --- /dev/null +++ b/BTPanel/static/ace/mode-yaml.js @@ -0,0 +1,8 @@ +define("ace/mode/yaml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"list.markup",regex:/^(?:-{3}|\.{3})\s*(?=#|$)/},{token:"list.markup",regex:/^\s*[\-?](?:$|\s)/},{token:"constant",regex:"!![\\w//]+"},{token:"constant.language",regex:"[&\\*][a-zA-Z0-9-_]+"},{token:["meta.tag","keyword"],regex:/^(\s*\w.*?)(:(?=\s|$))/},{token:["meta.tag","keyword"],regex:/(\w+?)(\s*:(?=\s|$))/},{token:"keyword.operator",regex:"<<\\w*:\\w*"},{token:"keyword.operator",regex:"-\\s*(?=[{])"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:/[|>][-+\d]*(?:$|\s+(?:$|#))/,onMatch:function(e,t,n,r){r=r.replace(/ #.*/,"");var i=/^ *((:\s*)?-(\s*[^|>])?)?/.exec(r)[0].replace(/\S\s*$/,"").length,s=parseInt(/\d+[\s+-]*$/.exec(r));return s?(i+=s-1,this.next="mlString"):this.next="mlStringPre",n.length?(n[0]=this.next,n[1]=i):(n.push(this.next),n.push(i)),this.token},next:"mlString"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:/(\b|[+\-\.])[\d_]+(?:(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)(?=[^\d-\w]|$)/},{token:"constant.numeric",regex:/[+\-]?\.inf\b|NaN\b|0x[\dA-Fa-f_]+|0b[10_]+/},{token:"constant.language.boolean",regex:"\\b(?:true|false|TRUE|FALSE|True|False|yes|no)\\b"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:/[^\s,:\[\]\{\}]+/}],mlStringPre:[{token:"indent",regex:/^ *$/},{token:"indent",regex:/^ */,onMatch:function(e,t,n){var r=n[1];return r>=e.length?(this.next="start",n.shift(),n.shift()):(n[1]=e.length-1,this.next=n[0]="mlString"),this.token},next:"mlString"},{defaultToken:"string"}],mlString:[{token:"indent",regex:/^ *$/},{token:"indent",regex:/^ */,onMatch:function(e,t,n){var r=n[1];return r>=e.length?(this.next="start",n.splice(0)):this.next="mlString",this.token},next:"mlString"},{token:"string",regex:".+"}]},this.normalizeRules()};r.inherits(s,i),t.YamlHighlightRules=s}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++nl){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u\n ${2}\n \nsnippet header\n

\n ${1}\n
\nsnippet header.\n
\n ${2}\n
\nsnippet header#\n
\n ${2}\n
\nsnippet hgroup\n
\n ${1}\n
\nsnippet hgroup.\n
\n ${1}\n \nsnippet html5\n \n \n \n \n ${1:`substitute(Filename(\'\', \'Page Title\'), \'^.\', \'\\u&\', \'\')`}\n ${2:meta}\n \n \n ${3:body}\n \n \nsnippet xhtml5\n \n \n \n \n ${1:`substitute(Filename(\'\', \'Page Title\'), \'^.\', \'\\u&\', \'\')`}\n ${2:meta}\n \n \n ${3:body}\n \n \nsnippet i\n ${1}\nsnippet iframe\n ${2}\nsnippet iframe.\n ${3}\nsnippet iframe#\n ${3}\nsnippet img\n ${2}${3}\nsnippet img.\n ${3}${4}\nsnippet img#\n ${3}${4}\nsnippet input\n ${5}\nsnippet input.\n ${6}\nsnippet input:text\n ${4}\nsnippet input:submit\n ${4}\nsnippet input:hidden\n ${4}\nsnippet input:button\n ${4}\nsnippet input:image\n ${5}\nsnippet input:checkbox\n ${3}\nsnippet input:radio\n ${3}\nsnippet input:color\n ${4}\nsnippet input:date\n ${4}\nsnippet input:datetime\n ${4}\nsnippet input:datetime-local\n ${4}\nsnippet input:email\n ${4}\nsnippet input:file\n ${4}\nsnippet input:month\n ${4}\nsnippet input:number\n ${4}\nsnippet input:password\n ${4}\nsnippet input:range\n ${4}\nsnippet input:reset\n ${4}\nsnippet input:search\n ${4}\nsnippet input:time\n ${4}\nsnippet input:url\n ${4}\nsnippet input:week\n ${4}\nsnippet ins\n ${1}\nsnippet kbd\n ${1}\nsnippet keygen\n ${1}\nsnippet label\n \nsnippet label:i\n \n ${7}\nsnippet label:s\n \n \nsnippet legend\n ${1}\nsnippet legend+\n ${1}\nsnippet li\n
  • ${1}
  • \nsnippet li.\n
  • ${2}
  • \nsnippet li+\n
  • ${1}
  • \n li+${2}\nsnippet lia\n
  • ${1}
  • \nsnippet lia+\n
  • ${1}
  • \n lia+${3}\nsnippet link\n ${5}\nsnippet link:atom\n ${2}\nsnippet link:css\n ${4}\nsnippet link:favicon\n ${2}\nsnippet link:rss\n ${2}\nsnippet link:touch\n ${2}\nsnippet map\n \n ${2}\n \nsnippet map.\n \n ${3}\n \nsnippet map#\n \n ${5}${6}\n ${7}\nsnippet mark\n ${1}\nsnippet menu\n \n ${1}\n \nsnippet menu:c\n \n ${1}\n \nsnippet menu:t\n \n ${1}\n \nsnippet meta\n ${3}\nsnippet meta:compat\n ${3}\nsnippet meta:refresh\n ${3}\nsnippet meta:utf\n ${3}\nsnippet meter\n ${1}\nsnippet nav\n \nsnippet nav.\n \nsnippet nav#\n \nsnippet noscript\n \nsnippet object\n \n ${3}\n ${4}\n# Embed QT Movie\nsnippet movie\n \n \n \n \n \n ${6}\nsnippet ol\n
      \n ${1}\n
    \nsnippet ol.\n
      \n ${2}\n
    \nsnippet ol+\n
      \n
    1. ${1}
    2. \n li+${2}\n
    \nsnippet opt\n \nsnippet opt+\n \n opt+${3}\nsnippet optt\n \nsnippet optgroup\n \n \n opt+${3}\n \nsnippet output\n ${1}\nsnippet p\n

    ${1}

    \nsnippet param\n ${3}\nsnippet pre\n
    \n		${1}\n	
    \nsnippet progress\n ${1}\nsnippet q\n ${1}\nsnippet rp\n ${1}\nsnippet rt\n ${1}\nsnippet ruby\n \n ${1}\n \nsnippet s\n ${1}\nsnippet samp\n \n ${1}\n \nsnippet script\n + + + + + + + + \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/Temmoku_MVC.png b/BTPanel/static/img/dep_ico/Temmoku_MVC.png new file mode 100644 index 0000000000000000000000000000000000000000..79c801fc2846ad2a50fa28a54b65ca36c849df85 GIT binary patch literal 9297 zcmaKS1yEei_U7OO4^DtEKyY^tGXxLr?t>3AxH|-Q4-!HkxVw9BhoHd|G&sRw$@{t+g10r)cL+X-F>S2^tm@eMM(x5;}r$~0Kk@$l~jAqE&e{}sLyZsW{SphM&=@= zkv9+J6`%A-Hqp2Cp)kTcvS=0X+0u=rqS_kKUPt)^+ad?=*Ik?z4{|@ONK}E&?zbF*? zA8BV7HOT+g_y0-ktlNyaEB`Tjh{Ln3 zJ3SjUZaTFL00112lLTvcEFBuY(9n=+sW7s3BedYjOK4(or2b~T0{Wu58Pt?$!JBcI zWMRb3F*Wq2)?z$UP|lK`C*yEPAvIz%kxM#8zt0efT^5-T?>VW2ICy<-Tt0qUW@co+ zT0KHd8WO2I$P#Yc`}MuNtWP6C9oq?AYwp%mbJZT6^5X42@uploK7Op2#D@;rTiHEq}Kqc(6>@#zf zWs~M^xdHMW#q z0~p^_NJTW3dEWe4ZoL1qJ*1WsfQQb6cs7hnmXP9#2d);%w#@_HI#}rp9YS> zsSas&$J$$os^2>>Zh^{$Q-ZFx^*o?*Vv_*&w)uS*TP%Kk;H(L$PWa*m`iC79A0s`z z&eoQe$bA4sbTHz^Ns%bs?a=Va;OchG;{8-xw#Ztb_?XIa(-1*;G^t3l#fw+3OX-#m ze`Nabo6{Hbzgk1(j2`4wQKWb&jQuq@JRq`+P!Iak z?IN2LB3a-0EVJK|D_0AQ_93CfbgfB7fX8Cy=zHmy3xU?jOUPY_Hkq$5f>N|HDG*#4 zTsAl9W$5_0^zg)S!0|i$COaffPG!kXyvcgkN@hDym~yr-oe({Jt+L8wot@UfV%CQb z&u6ytg@XW# za!(gYp#PbL+H{STOk4vJuoQ-D#d)AO)S}M3z8s(AMCjui+h?$$MguIzClxytw}tq; z;PqT%X6=e2NICj}LH|VqOh7>Ocy*y(Y#&RF$fLetfQ)OKdUU9y& ztFlkQTS1??^9zR@(Sy|NxD&$xKVIS~%9sTOlWzqDXWk*BWd=w<*Rz@rPbi{#KcfVp z^DfzgO(an3g|Y*48TmLJ>$||xwumB4C5g^WZ7T7jCDZU zt|#K%Q_{9j737b5SZojG;Z9_W$TOtFQz^cv#0*kV(>UwTsdpmx(!msRd>BZ{XlY%9 z#o)}ZC{jT&-zrkMyiss1VeXL)JliU5Uc<;Qq;y_&$nLa6=N!4_&QGl?XO&ap4xO@H?@kY$zv~z+q^wtYJUD3>CE;u5}?r? z)g1||PJZKJs+_LuUPJ`4i^|QNloZLI(af}vRN{|y*PW!{$aGJm6`tpLes0$%pEzD& z@vDY+OCwA=1uQgGMZIJCwOwp-{qQw@Qgj`a2QH22gr2^+3)JhvYGe`ou#h�T1W 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/ThinkPHP-5.0.png b/BTPanel/static/img/dep_ico/ThinkPHP-5.0.png new file mode 100644 index 0000000000000000000000000000000000000000..a05a9c514da0d7e0fdd757bdbb1655655f1ed094 GIT binary patch literal 7222 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 Ef?e9rjQ{`u literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/URLshorting.png b/BTPanel/static/img/dep_ico/URLshorting.png new file mode 100644 index 0000000000000000000000000000000000000000..671865735fd04183c6d92d8618d7a1873afe0419 GIT binary patch literal 70907 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 Ds-7c8 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/YoungxjTools.png b/BTPanel/static/img/dep_ico/YoungxjTools.png new file mode 100644 index 0000000000000000000000000000000000000000..41084e188f73482838f770cc15e58fd8f9a143b8 GIT binary patch literal 165662 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 YDX`jf->6HEE1AS4W-6a9vGlwD2T|Dcr~m)} literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/ZFAKA.png b/BTPanel/static/img/dep_ico/ZFAKA.png new file mode 100644 index 00000000..37a9c0a9 --- /dev/null +++ b/BTPanel/static/img/dep_ico/ZFAKA.png @@ -0,0 +1,562 @@ + + + + + + + + + + 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 + + + + + + + + + + +
    + + + + + + +
    +
    宝塔邀请大使赠送您
    +
    3188元礼包
    +
    立即领取
    +
    +
    +
    + +
    +
    +
    + +
    +
    +

    免费加入宝塔邀请大使,帮助他人同时还能赚钱

    立即免费加入
    +
    +
    + 尊云,价格厚道的云服务器,6核10G,99元 +
    + +
    +
    +
    +

    远程桌面连接工具

    +

    下载

    +
    +
    +
    +
    +

    Linux面板命令大全

    +

    查看

    +
    +
    +
    +
    +

    IDC推荐

    +

    查看

    +
    +
    +
    +
    +
    +
    +
    +

    宝塔币商城

    +

    查看

    +
    +
    +
    +
    +

    宝塔跑分排行榜

    +

    查看

    +
    +
    +
    +
    + +
    + 宝塔运维 + 付费运维已停止接单,论坛可免费求助 +
    + 点击查看 +
    +
    + +
    + 开发者中心 + 诚邀开发者入驻,让创作更有价值 +
    + 点击查看 +
    +
    +
    +
    +
    + +
    +
    +

    合作伙伴

    +

    申请IDC定制版合作

    +
    +
    + 尊云 + 唯一网络 + DNS + + 亚洲诚信 + 阿里云 + 京东云 + 又拍云 + 网堤安全 +
    +
    + + + +
    + + +
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/bfz.png b/BTPanel/static/img/dep_ico/bfz.png new file mode 100644 index 00000000..1ed88c89 --- /dev/null +++ b/BTPanel/static/img/dep_ico/bfz.png @@ -0,0 +1,561 @@ + + + + + + + + + + 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 + + + + + + + + + + +
    + + + + + + +
    +
    宝塔邀请大使赠送您
    +
    3188元礼包
    +
    立即领取
    +
    +
    +
    +

    免费加入宝塔邀请大使,帮助他人同时还能赚钱

    立即免费加入
    + +
    +
    +
    + +
    +
    +
    +
    + 尊云,价格厚道的云服务器,6核10G,99元 +
    + +
    +
    +
    +

    远程桌面连接工具

    +

    下载

    +
    +
    +
    +
    +

    Linux面板命令大全

    +

    查看

    +
    +
    +
    +
    +

    IDC推荐

    +

    查看

    +
    +
    +
    +
    +
    +
    +
    +

    宝塔币商城

    +

    查看

    +
    +
    +
    +
    +

    宝塔跑分排行榜

    +

    查看

    +
    +
    +
    +
    + +
    + 宝塔运维 + 付费运维已停止接单,论坛可免费求助 +
    + 点击查看 +
    +
    + +
    + 开发者中心 + 诚邀开发者入驻,让创作更有价值 +
    + 点击查看 +
    +
    +
    +
    +
    + +
    +
    +

    合作伙伴

    +

    申请IDC定制版合作

    +
    +
    + 尊云 + 唯一网络 + DNS + + 亚洲诚信 + 阿里云 + 京东云 + 又拍云 + 网堤安全 +
    +
    + + + +
    + + +
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/bty.png b/BTPanel/static/img/dep_ico/bty.png new file mode 100644 index 0000000000000000000000000000000000000000..9a3521045d81d078a4a77bc63650bc1d75a6045e GIT binary patch literal 67646 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/chengxuxia.png b/BTPanel/static/img/dep_ico/chengxuxia.png new file mode 100644 index 0000000000000000000000000000000000000000..f8bd87f44e46be5d3dee7381a887804eb547f6b0 GIT binary patch literal 6047 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 V{0Y%Mmnr%S-NMv{QoPY4=0EGJ#0CHW literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/codeigniter.png b/BTPanel/static/img/dep_ico/codeigniter.png new file mode 100644 index 0000000000000000000000000000000000000000..a61f163022b70ae20a247aaebe0ef4aa0cb533f1 GIT binary patch literal 7760 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 U6 + + + + + + + + + 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 + + + + + + + + + + +
    + + + + + + +
    +
    宝塔邀请大使赠送您
    +
    3188元礼包
    +
    立即领取
    +
    +
    +
    + +
    +
    +
    + +
    +
    +

    免费加入宝塔邀请大使,帮助他人同时还能赚钱

    立即免费加入
    +
    +
    + 尊云,价格厚道的云服务器,6核10G,99元 +
    + +
    +
    +
    +

    远程桌面连接工具

    +

    下载

    +
    +
    +
    +
    +

    Linux面板命令大全

    +

    查看

    +
    +
    +
    +
    +

    IDC推荐

    +

    查看

    +
    +
    +
    +
    +
    +
    +
    +

    宝塔币商城

    +

    查看

    +
    +
    +
    +
    +

    宝塔跑分排行榜

    +

    查看

    +
    +
    +
    +
    + +
    + 宝塔运维 + 付费运维已停止接单,论坛可免费求助 +
    + 点击查看 +
    +
    + +
    + 开发者中心 + 诚邀开发者入驻,让创作更有价值 +
    + 点击查看 +
    +
    +
    +
    +
    + +
    +
    +

    合作伙伴

    +

    申请IDC定制版合作

    +
    +
    + 尊云 + 唯一网络 + DNS + + 亚洲诚信 + 阿里云 + 京东云 + 又拍云 + 网堤安全 +
    +
    + + + +
    + + +
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/ecshop.png b/BTPanel/static/img/dep_ico/ecshop.png new file mode 100644 index 0000000000000000000000000000000000000000..2d7e9a5d5875353f3ffa3be9cef42ff70954cbdc GIT binary patch literal 3327 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/jtbc3.png b/BTPanel/static/img/dep_ico/jtbc3.png new file mode 100644 index 0000000000000000000000000000000000000000..d872fed9c98be17dfd15d17b4b5a5fd77f4e740b GIT binary patch literal 1486 zcmeAS@N?(olHy`uVBq!ia0vp^20*OA!2~4DpT1KAQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?_nZLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ2+zz*$uBR~ z1grP;werj>E=kNwPW5!LRRWrzmzkMjATTyALtl;P{bldG)xGXdO%EgvITPB2|qOtnA(eg$=W|`V*&#Mlar^5V@SoV zq?8Zq6D52aIuj=}2D0~BWn6Jw%qLZPA)#D=Td(uK^sM;3zcuDvVNQH(*krgsEcop8 z_xAetYAh=ME)*4)U$k=ma$;VP&{CD1iz~hc z3duaVxK&E?$(IW*6C6)9*%p-LuP6=N;-0$Yc31aiMJ0jjGP?`33m@%@e!ri|b&iP3 z@6Akp_p6-xO;|o|Y2mPMnVq|sv*hev_4R9{#hhc9S$@myxu!q6S7xnAiGV>c|gwcxqao=d09^dDj9;*95?wFH?be7o#4PUE$e^-Q`cjDm8hkP3)UXE z!@{$Kqnx|r#9Vj%#wA;q>1^zjnxwfQO~8x6T-~~5W6pU=g_#d>d$sKsS#U&n%$Xg= zp`v)FM4VZn^7lnL1b$ta#)q+|HaJWLN)K@q+gZPl@`c vrz~z2%a&eP(d;H`@@fG%k<75>P&mM_{?}XMUGjZ*K_#rGtDnm{r-UW|;xiCF literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/lovewall.png b/BTPanel/static/img/dep_ico/lovewall.png new file mode 100644 index 0000000000000000000000000000000000000000..9a7188b36fe49e65fa1edb2a81ec7d9dc721a473 GIT binary patch literal 1609 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 V5ZbO`Cy)RD002ovPDHLkV1muL`d0t| literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/qrpay.png b/BTPanel/static/img/dep_ico/qrpay.png new file mode 100644 index 0000000000000000000000000000000000000000..3df06a42b4b5d312510724871498ce08fbb6e2f7 GIT binary patch literal 1935 zcmb_d`8(TN6OU?%rD@BpwPLI4y_Cf6T55@{wX}9hDnV=|cDX^hL~K!_wU<6Y-CB!C z?L}<0Rw!4hmR2n{sHI$6@qYWu`v<(wd!Csy&p9*CnK|>!%qRJtrO8EZ5pEC&bkWQd zVGYPfKN-vc?CBVX5kQ;|F)*_Q11k#bkp!H%0!^JlKp;r>PiE`KzVZMr1wxG+Lk)vH zQK3HA00~=z|dNi-(9pwZ&i;I9n6ahqsUZ+z9qYv;^rDb3R#EEV`J9P-^aUl(fqO~wx`C&`W1 zLo@pIv+9OMS5ZD*x=I}dI;oiH`O$TC<@ramZ$&px*)Iqq`DZ~!f80d%+@mK^2v-cb zq=|gSyfP%AJ3{bhF!cYbs51;@uSo9yX8g4G&31&ZPW<85%uWG2@p^g-P2oUH7q=b& zkjl3P_-l)moiD|HaPu|PIN#dMLL{Tgl7vqjn++z&y%LgR+L8KY;m{X^qG*?1fhi~- zU8R!WJ#mymWjgH57bRJJ9zT&Yt@f%oouTRBQ6+PdBwV~|wRGXo!k`P7lGy0$Y^9oE z@A$NrSRfvi&i=3c1gmsxru3KPy4IlYtF+8{8^Fh~Yz}XHvVog53w!H&4ji}ntYN&A z-@c+MR3Uz>dq##60&NxTdc(HcicdkxQB}$bSxUSD2-m!0O7ZX9WDGornk>Yz330GB zxm6xh(y`>nNV~Z;8<{iqkDEyx&wwZIoLFB2w5I8atwOwy4vC526{m$#D066BAttOC z5|(rWef4iUo>HfL)>O+DC7j@-TVevkZQ4#QTQF!*mz+%%lwS*Pb9`RW)|1LG`1zew zPLtdvz^x_mz5Pj{(hC>*z?M^K$ojn49>k6|x*?TN8(VoPvO1D?$iBW(Ls<6#wPkPJ z{o7`Q+VSPUy{W3xV6uT@?S=+*-F!EAq=dHW%JFo)QV>?cHCW5v0zoXDb`#1qox4nT}P!}E7I?$Fj;!J-)ei3t;vR~^R*RG_%(pg@q5={BH!z67%`|#<>?`+4b zESDiT$(V;K^cB=Z`m|QtOjcikm2g)jR*Ts;iD-f$p}pam8amF~XB*~lmA-eKeLkk0`Uc+1=hV2)`H?>k^6^pKBsl9M9 z@ZMI#?1GW6u?zoNP94HP8YgQG)`Xn`vawJ`2jkY1dY*a{WiBqDnkVs^*cdgP;&ph} z$O@_5-2m-FL~*yur+Hqi1gf*C?nj8zhB|vWf$i`RVkMFxuFGD7ymo{Y{*_jwpF+*7 zVLtbsX2d?3-S`BxlQ>iTvvNs&?tJNwP)6RWC+H>~(oAJGlJWKj+GK|6k~P@aLlnZ6 z90!q(JLU|eEH>00#kdTMKX%YJN$x4q?Ic0<*J>IEk(dgOx3e1upH8@tr-g>=|FBQ2 zsT=sB^mGG-(yh=kttsKhT6QDO`4&A}p1Y!@A;JgYjiShjd)ThyQOhV6i=D;Viey=} z{qSq|^}i`to`{fcq16=2@oSGa^OlJlU3PAxEr~5f9Ke=uKMei$CeyVS$m-Qe*NgAC zW=Qj&<2#z&7rV3bC!3duiq~_+c_|4tnhq8>@mwZ=mUh(UaYGIybi@x5CBC_G-7% o%z?S@YkK|vf&l*o6H*LYWU^0NZoP*T0F59sBTGb$fm_^v0EK6fDgXcg literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/sentcms.png b/BTPanel/static/img/dep_ico/sentcms.png new file mode 100644 index 0000000000000000000000000000000000000000..bd70f30f621bbb75dc228624809c9a221c132e0e GIT binary patch literal 14500 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 Kyj8gy{=Wc6KFxUm literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/skm.png b/BTPanel/static/img/dep_ico/skm.png new file mode 100644 index 00000000..74a38b79 --- /dev/null +++ b/BTPanel/static/img/dep_ico/skm.png @@ -0,0 +1,563 @@ + + + + + + + + + + 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 + + + + + + + + + + +
    + + + + + + +
    +
    宝塔邀请大使赠送您
    +
    3188元礼包
    +
    立即领取
    +
    +
    +
    + +
    +
    +
    + +
    +
    +

    免费加入宝塔邀请大使,帮助他人同时还能赚钱

    立即免费加入
    +
    +
    + 尊云,价格厚道的云服务器,6核10G,99元 +
    + +
    +
    +
    +

    远程桌面连接工具

    +

    下载

    +
    +
    +
    +
    +

    Linux面板命令大全

    +

    查看

    +
    +
    +
    +
    +

    IDC推荐

    +

    查看

    +
    +
    +
    +
    +
    +
    +
    +

    宝塔币商城

    +

    查看

    +
    +
    +
    +
    +

    宝塔跑分排行榜

    +

    查看

    +
    +
    +
    +
    + +
    + 宝塔运维 + 付费运维已停止接单,论坛可免费求助 +
    + 点击查看 +
    +
    + +
    + 开发者中心 + 诚邀开发者入驻,让创作更有价值 +
    + 点击查看 +
    +
    +
    +
    +
    + +
    +
    +

    合作伙伴

    +

    申请IDC定制版合作

    +
    +
    + 尊云 + 唯一网络 + DNS + + 亚洲诚信 + 阿里云 + 京东云 + 又拍云 + 网堤安全 +
    +
    + + + +
    + + +
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/test.png b/BTPanel/static/img/dep_ico/test.png new file mode 100644 index 00000000..37a9c0a9 --- /dev/null +++ b/BTPanel/static/img/dep_ico/test.png @@ -0,0 +1,562 @@ + + + + + + + + + + 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 + + + + + + + + + + +
    + + + + + + +
    +
    宝塔邀请大使赠送您
    +
    3188元礼包
    +
    立即领取
    +
    +
    +
    + +
    +
    +
    + +
    +
    +

    免费加入宝塔邀请大使,帮助他人同时还能赚钱

    立即免费加入
    +
    +
    + 尊云,价格厚道的云服务器,6核10G,99元 +
    + +
    +
    +
    +

    远程桌面连接工具

    +

    下载

    +
    +
    +
    +
    +

    Linux面板命令大全

    +

    查看

    +
    +
    +
    +
    +

    IDC推荐

    +

    查看

    +
    +
    +
    +
    +
    +
    +
    +

    宝塔币商城

    +

    查看

    +
    +
    +
    +
    +

    宝塔跑分排行榜

    +

    查看

    +
    +
    +
    +
    + +
    + 宝塔运维 + 付费运维已停止接单,论坛可免费求助 +
    + 点击查看 +
    +
    + +
    + 开发者中心 + 诚邀开发者入驻,让创作更有价值 +
    + 点击查看 +
    +
    +
    +
    +
    + +
    +
    +

    合作伙伴

    +

    申请IDC定制版合作

    +
    +
    + 尊云 + 唯一网络 + DNS + + 亚洲诚信 + 阿里云 + 京东云 + 又拍云 + 网堤安全 +
    +
    + + + +
    + + +
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/test2.png b/BTPanel/static/img/dep_ico/test2.png new file mode 100644 index 00000000..37a9c0a9 --- /dev/null +++ b/BTPanel/static/img/dep_ico/test2.png @@ -0,0 +1,562 @@ + + + + + + + + + + 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 + + + + + + + + + + +
    + + + + + + +
    +
    宝塔邀请大使赠送您
    +
    3188元礼包
    +
    立即领取
    +
    +
    +
    + +
    +
    +
    + +
    +
    +

    免费加入宝塔邀请大使,帮助他人同时还能赚钱

    立即免费加入
    +
    +
    + 尊云,价格厚道的云服务器,6核10G,99元 +
    + +
    +
    +
    +

    远程桌面连接工具

    +

    下载

    +
    +
    +
    +
    +

    Linux面板命令大全

    +

    查看

    +
    +
    +
    +
    +

    IDC推荐

    +

    查看

    +
    +
    +
    +
    +
    +
    +
    +

    宝塔币商城

    +

    查看

    +
    +
    +
    +
    +

    宝塔跑分排行榜

    +

    查看

    +
    +
    +
    +
    + +
    + 宝塔运维 + 付费运维已停止接单,论坛可免费求助 +
    + 点击查看 +
    +
    + +
    + 开发者中心 + 诚邀开发者入驻,让创作更有价值 +
    + 点击查看 +
    +
    +
    +
    +
    + +
    +
    +

    合作伙伴

    +

    申请IDC定制版合作

    +
    +
    + 尊云 + 唯一网络 + DNS + + 亚洲诚信 + 阿里云 + 京东云 + 又拍云 + 网堤安全 +
    +
    + + + +
    + + +
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/tipask.png b/BTPanel/static/img/dep_ico/tipask.png new file mode 100644 index 0000000000000000000000000000000000000000..922705e3aa33579a7d086e8066aa7cb7e7004a2b GIT binary patch literal 1186 zcmaJ>TWHfz7|y1SITR=E!5eyv6E<0!rk9Lntsad66&(1WS#s8fE;%tdTf6$; zg^G$ksCy86P$ue&7rZc=_Bgj7gDeGtSoDGifQQigX; z!T?3hYgALcxL54tWu!SJo8!!DhHXLxHs=jV&O!|OU|Q9K^oOx=8mLN;-sTfsq7i`^ zwY^}%o=fjmzPG>9dT*9LTp&j;yQU!JV(Fhhe`3eE=UUq$tbT_A!? z2z*YDLw2z&;5aAi^>G~A0^Bav&A7vY*Im58GFf2yXH*%nU1-}U~}*h&o>kV!%d4Vp4Jxc>EaDua)h zP{PPeAv93h#jXs($jTrCM0z;TBucWX+kxg;g(&iI-NKSC!?+NniHB2F72YGbePK^D z=J9b6mW^^@FH1t6)>bd;4uxEvl2$Rvq|y{Ky1aOC>oqctN3kKOJ0xaR)M!j|OF$XG}7aWOtx4D5RxJGcAG z_peslt2aNU@U!!J+l8qPu(x*USr9JPcGs^97n=?doIbK){L84xZ*PY*{`BtM?OUhs z9C&nT`qYC$vHswV*Bh6wO6O=HR4gm^bOjo>zKLBo{}VTre#Za+ literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/ttttt.png b/BTPanel/static/img/dep_ico/ttttt.png new file mode 100644 index 00000000..141ead24 --- /dev/null +++ b/BTPanel/static/img/dep_ico/ttttt.png @@ -0,0 +1,562 @@ + + + + + + + + + + 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 + + + + + + + + + + +
    + + + + + + +
    +
    宝塔邀请大使赠送您
    +
    3188元礼包
    +
    立即领取
    +
    +
    +
    + +
    +
    +
    + +
    +
    +

    免费加入宝塔邀请大使,帮助他人同时还能赚钱

    立即免费加入
    +
    +
    + 尊云,价格厚道的云服务器,6核10G,99元 +
    + +
    +
    +
    +

    远程桌面连接工具

    +

    下载

    +
    +
    +
    +
    +

    Linux面板命令大全

    +

    查看

    +
    +
    +
    +
    +

    IDC推荐

    +

    查看

    +
    +
    +
    +
    +
    +
    +
    +

    宝塔币商城

    +

    查看

    +
    +
    +
    +
    +

    宝塔跑分排行榜

    +

    查看

    +
    +
    +
    +
    + +
    + 宝塔运维 + 付费运维已停止接单,论坛可免费求助 +
    + 点击查看 +
    +
    + +
    + 开发者中心 + 诚邀开发者入驻,让创作更有价值 +
    + 点击查看 +
    +
    +
    +
    +
    + +
    +
    +

    合作伙伴

    +

    申请IDC定制版合作

    +
    +
    + 尊云 + 唯一网络 + DNS + + 亚洲诚信 + 阿里云 + 京东云 + 又拍云 + 网堤安全 +
    +
    + + + +
    + + +
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/wdja.png b/BTPanel/static/img/dep_ico/wdja.png new file mode 100644 index 00000000..74a38b79 --- /dev/null +++ b/BTPanel/static/img/dep_ico/wdja.png @@ -0,0 +1,563 @@ + + + + + + + + + + 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 + + + + + + + + + + +
    + + + + + + +
    +
    宝塔邀请大使赠送您
    +
    3188元礼包
    +
    立即领取
    +
    +
    +
    + +
    +
    +
    + +
    +
    +

    免费加入宝塔邀请大使,帮助他人同时还能赚钱

    立即免费加入
    +
    +
    + 尊云,价格厚道的云服务器,6核10G,99元 +
    + +
    +
    +
    +

    远程桌面连接工具

    +

    下载

    +
    +
    +
    +
    +

    Linux面板命令大全

    +

    查看

    +
    +
    +
    +
    +

    IDC推荐

    +

    查看

    +
    +
    +
    +
    +
    +
    +
    +

    宝塔币商城

    +

    查看

    +
    +
    +
    +
    +

    宝塔跑分排行榜

    +

    查看

    +
    +
    +
    +
    + +
    + 宝塔运维 + 付费运维已停止接单,论坛可免费求助 +
    + 点击查看 +
    +
    + +
    + 开发者中心 + 诚邀开发者入驻,让创作更有价值 +
    + 点击查看 +
    +
    +
    +
    +
    + +
    +
    +

    合作伙伴

    +

    申请IDC定制版合作

    +
    +
    + 尊云 + 唯一网络 + DNS + + 亚洲诚信 + 阿里云 + 京东云 + 又拍云 + 网堤安全 +
    +
    + + + +
    + + +
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/wee7.png b/BTPanel/static/img/dep_ico/wee7.png new file mode 100644 index 0000000000000000000000000000000000000000..b81fad384dfbf32a8dabb6874e1c556cee7f5cb1 GIT binary patch literal 555 zcmV+`0@VG9P)K+$i%sPBWn|Nhg(2h2>2nEs-Q2*hOC z#{s5em!|3g1ts{|(WEjLUjvHVdifPdvax_%wkks(Nb+*907+yp_wW-Sck{*9K$5;b zfP|VD9~-iB;B09@ke?tvuu%~JvN7F0eg7k%_?ojX;j;AgfhaG??M#f=)0K=M2T&FQ zJoQ9jOelTv@n;}wE!geIQuOtKBu2_Xb_+xnlDZ7#_>iT5?Byq)14&TcMFsTrfjCC` zdHeM@&_Tl7tUyv490wjcB0x4Imfn8@$#S!SO3m|+KLJThKyM$Q=iZa|J^&r%r3*?k zkW?fFPH7OAp1SuD$S?rM$DhBL;SW+pUmqan;eY=@E;@Z5I^u+IIO3P+SO{KOjzywUP!hTDRPVaN#6=05clrA{uby8NLqUI z4ipp0qFg}o<_l1bcJ%gpAQ@vR1tcLrQG^r5M4@T!14jSJ=YTeT{sC$oQ5Qh!JDU4| t1=9YauG=A|(W_+#DPd^QzN1s?8UO~@gMtC#eg^;m002ovPDHLkV1lvS`LO^1 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/wordpress.png b/BTPanel/static/img/dep_ico/wordpress.png new file mode 100644 index 0000000000000000000000000000000000000000..d22715ea6acc91353ad7104114822f2445f3b625 GIT binary patch literal 23042 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 BUn>9r literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/dep_ico/wp.png b/BTPanel/static/img/dep_ico/wp.png new file mode 100644 index 00000000..8daf9e16 --- /dev/null +++ b/BTPanel/static/img/dep_ico/wp.png @@ -0,0 +1,562 @@ + + + + + + + + + + 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 + + + + + + + + + + +
    + + + + + + +
    +
    宝塔邀请大使赠送您
    +
    3188元礼包
    +
    立即领取
    +
    +
    +
    +

    免费加入宝塔邀请大使,帮助他人同时还能赚钱

    立即免费加入
    + +
    +
    +
    + +
    +
    +
    +
    + 尊云,价格厚道的云服务器,6核10G,99元 +
    + +
    +
    +
    +

    远程桌面连接工具

    +

    下载

    +
    +
    +
    +
    +

    Linux面板命令大全

    +

    查看

    +
    +
    +
    +
    +

    IDC推荐

    +

    查看

    +
    +
    +
    +
    +
    +
    +
    +

    宝塔币商城

    +

    查看

    +
    +
    +
    +
    +

    宝塔跑分排行榜

    +

    查看

    +
    +
    +
    +
    + +
    + 宝塔运维 + 付费运维已停止接单,论坛可免费求助 +
    + 点击查看 +
    +
    + +
    + 开发者中心 + 诚邀开发者入驻,让创作更有价值 +
    + 点击查看 +
    +
    +
    +
    +
    + +
    +
    +

    合作伙伴

    +

    申请IDC定制版合作

    +
    +
    + 尊云 + 唯一网络 + DNS + + 亚洲诚信 + 阿里云 + 京东云 + 又拍云 + 网堤安全 +
    +
    + + + +
    + + +
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/z-blog.png b/BTPanel/static/img/dep_ico/z-blog.png new file mode 100644 index 00000000..82f877e9 --- /dev/null +++ b/BTPanel/static/img/dep_ico/z-blog.png @@ -0,0 +1,561 @@ + + + + + + + + + + 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 + + + + + + + + + + +
    + + + + + + +
    +
    宝塔邀请大使赠送您
    +
    3188元礼包
    +
    立即领取
    +
    +
    +
    +

    免费加入宝塔邀请大使,帮助他人同时还能赚钱

    立即免费加入
    + +
    +
    +
    + +
    +
    +
    +
    + 尊云,价格厚道的云服务器,6核10G,99元 +
    + +
    +
    +
    +

    远程桌面连接工具

    +

    下载

    +
    +
    +
    +
    +

    Linux面板命令大全

    +

    查看

    +
    +
    +
    +
    +

    IDC推荐

    +

    查看

    +
    +
    +
    +
    +
    +
    +
    +

    宝塔币商城

    +

    查看

    +
    +
    +
    +
    +

    宝塔跑分排行榜

    +

    查看

    +
    +
    +
    +
    + +
    + 宝塔运维 + 付费运维已停止接单,论坛可免费求助 +
    + 点击查看 +
    +
    + +
    + 开发者中心 + 诚邀开发者入驻,让创作更有价值 +
    + 点击查看 +
    +
    +
    +
    +
    + +
    +
    +

    合作伙伴

    +

    申请IDC定制版合作

    +
    +
    + 尊云 + 唯一网络 + DNS + + 亚洲诚信 + 阿里云 + 京东云 + 又拍云 + 网堤安全 +
    +
    + + + +
    + + +
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/zfaka-zlkb.png b/BTPanel/static/img/dep_ico/zfaka-zlkb.png new file mode 100644 index 0000000000000000000000000000000000000000..c07aab248742229c8d5a059f25dbe117186ef55c GIT binary patch literal 1578 zcmZuxdpOg382?2w984}nNg8Dl1x(%cPQWn`?Sp zqK2}$+gT2t6`Hw+M`XD+mz~4;t@E7c{B!+(xc-BtO9!Z_5f$gX%1t_^#+7k|+tn z{U5Aq+~CPa+}fB$HZJic#ilSl!`)@P*AEPR^ui0q=_vU10Ycs_*Oo-d$Cc{%Y4)e8 zEjEtf5vnLI(oe{C?Xqp!qS82{8=Fey{nUdD)Y8z{tvk5Y`qiUhzYfMc-&&uEK(F?{ zBpgepUFx7GoY1ge9cce+_PT&mGh>HYXwI3d&AVAdH;3%ztLJgzl<%3G4G+5LOgX@+ znzwi78x6m>x%CxSE}$M%L&E*E*|p? zWJ7N_-35B7kp*wF?{?&ZRk{2 zwA51?mbH-1?rb*B)+rq&cO`c8Ob1FLlbJY?t^@upf=HBdzObDc79{}6bNKpaYcrvH zM2S;mY`9aq8HrHVY(AIc%I}%zl~)2MA}7PLWH8={(KBX}u;9~h?b4`V#MElJqV@>b zO;g@^7b9K$;G#*5J;v*#(~a!ZYTMBDB3Bisb zmOG-?15)a>`F7vGS&Hn3-&J6itxEuIkxB96H{hJcOeNo^YTl*KiQ}=B3F5M)wnt?-lD=66|cBZZ(h%$z9()z!8=%$5sKKC>l?j)22x z%tRMUT!4IJw1(S+B_l`DC0(jhW_w=GSk>3*`)dq(7ZtB9!7VO9i`^MsW-@#Ahf4q9 z)MV|7vp*)sKc@sw_MB*7R^c-p9_5&K%CfL^oM|vm(wUkp89Y=u)%$KiD;aao#0B&H zg3T;tWb<+94DlV2cV5xM$x47-IEk>>wBAw7blAmX6cWakr7OdGva6mCI* zx?n{9&XlH+%>xW@M3t7-4f$t6mR#=jtvOoru{Sq-Tk<~#2yHxJ^yimdm-7;A=GCM- zT|KpQwYx<)|cK~1zbAKTZtleb#MNW+3_ml)rvP@pd%pUQ}l zqsUsjtzsvziv@sU5`^Xv|X3KX*1xg(`X1z2>rQQeA1SiGu>)Uv1}3S&@gEnv1q zxu}pO;aPgH33FmKM%chBwx#N2N(+7V!21TEkH_yb9*=SO!-;F!ki#8V%LjXuH?J^c o9M>x5-Y(QuHGs2n!T%j_#<-&^kDsId4G#1PFaQ7m literal 0 HcmV?d00001 diff --git "a/BTPanel/static/img/dep_ico/\345\270\235\345\233\275CMS.png" "b/BTPanel/static/img/dep_ico/\345\270\235\345\233\275CMS.png" new file mode 100644 index 0000000000000000000000000000000000000000..aaa29eb1f13a6ad4c5d75009c4fb54325dd2778e GIT binary patch literal 12629 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 literal 0 HcmV?d00001 diff --git "a/BTPanel/static/img/dep_ico/\345\276\256\346\223\216.png" "b/BTPanel/static/img/dep_ico/\345\276\256\346\223\216.png" new file mode 100644 index 0000000000000000000000000000000000000000..b81fad384dfbf32a8dabb6874e1c556cee7f5cb1 GIT binary patch literal 555 zcmV+`0@VG9P)K+$i%sPBWn|Nhg(2h2>2nEs-Q2*hOC z#{s5em!|3g1ts{|(WEjLUjvHVdifPdvax_%wkks(Nb+*907+yp_wW-Sck{*9K$5;b zfP|VD9~-iB;B09@ke?tvuu%~JvN7F0eg7k%_?ojX;j;AgfhaG??M#f=)0K=M2T&FQ zJoQ9jOelTv@n;}wE!geIQuOtKBu2_Xb_+xnlDZ7#_>iT5?Byq)14&TcMFsTrfjCC` zdHeM@&_Tl7tUyv490wjcB0x4Imfn8@$#S!SO3m|+KLJThKyM$Q=iZa|J^&r%r3*?k zkW?fFPH7OAp1SuD$S?rM$DhBL;SW+pUmqan;eY=@E;@Z5I^u+IIO3P+SO{KOjzywUP!hTDRPVaN#6=05clrA{uby8NLqUI z4ipp0qFg}o<_l1bcJ%gpAQ@vR1tcLrQG^r5M4@T!14jSJ=YTeT{sC$oQ5Qh!JDU4| t1=9YauG=A|(W_+#DPd^QzN1s?8UO~@gMtC#eg^;m002ovPDHLkV1lvS`LO^1 literal 0 HcmV?d00001 diff --git a/BTPanel/static/js/bt_upload.js b/BTPanel/static/js/bt_upload.js index 52b54de4..555ed310 100644 --- a/BTPanel/static/js/bt_upload.js +++ b/BTPanel/static/js/bt_upload.js @@ -1,2 +1,2 @@ /* ! 宝塔文件上传组件 License https://www.bt.cn By 黄文良 <287962566@qq.com> */ -var bt_upload_file = { f: null, f_total: 0, f_path: null, split_size: 1024 * 1024 * 2, _files: [], _error: 0, _start_time: 0, _t_start_time: 0, collback_to: null, upload_url: '/files?action=upload', _loadT: null, open: function (path, is_exts, ps, collback_to) { bt_upload_file.f_path = path.replace('//', '/'); user_agent = navigator.userAgent.toLowerCase(); var btn_dir = ''; var accept_ext = ''; if (!is_exts) { if (user_agent.indexOf('chrome') !== -1 || user_agent.indexOf('firefox') !== -1) { btn_dir = '' } } else { accept_ext = 'accept="' + is_exts + '"' } var other_ps = ''; if (ps) { other_ps = ' --- ' + ps + '' } else { other_ps = ' --- Support for breakpoints' } if (collback_to) { bt_upload_file.collback_to = collback_to } bt_upload_file._loadT = layer.open({ type: 1, title: 'Upload files to[' + bt_upload_file.f_path + ']' + other_ps, area: ['550px', '500px'], shadeClose: false, closeBtn: 2, content: '
    ' + btn_dir + '
      ' }) }, list: function (_files) { bt_upload_file._files = _files; var up_box = $("#up_box"); $("#up_box").html(''); var loadT = layer.msg('Loading file list...', { time: 0, icon: 16, shade: 0.3 }); for (var i = 0; i < _files.length; i += 1) { var f_name = _files[i].name; if (_files[i].webkitRelativePath) { f_name = _files[i].webkitRelativePath } up_box.append('
    • ' + f_name + '' + bt_upload_file.to_size(_files[i].size) + 'Waiting for upload
    • ') } layer.close(loadT) }, to_size: function (a) { var d = [" B", " KB", " MB", " GB", " TB", " PB"]; var e = 1024; for (var b = 0; b < d.length; b += 1) { if (a < e) { return (b === 0 ? a : a.toFixed(2)) + d[b] } a /= e } }, start: function (i) { var len = bt_upload_file._files.length; if (len === 0) { layer.msg('Please select a file!', { icon: 2 }); return false } if (i === 0) { bt_upload_file._t_start_time = new Date() } $("#filesClose,#up,#opt").attr("disabled", "disabled"); var total_time = bt_upload_file.diff_time(bt_upload_file._t_start_time, new Date()); $("#totalProgress").html('

      Uploaded(' + i + '/' + len + '),' + total_time + '

      '); if (len <= i) { $("#totalProgress").html('

      Uploaded completed(' + i + '/' + len + '), ' + total_time + '

      '); bt_upload_file._files = []; $("#filesClose,#up,#opt").removeAttr("disabled"); if (bt_upload_file.collback_to) { bt_upload_file.collback_to(bt_upload_file.f_path) } return false } if (i > 10) { $("#up_box").scrollTop(35 * (i - 10) + 50) } bt_upload_file._start_time = new Date(); bt_upload_file._error = 0; bt_upload_file.f = bt_upload_file._files[i]; bt_upload_file.f_total = Math.ceil(bt_upload_file.f.size / bt_upload_file.split_size); bt_upload_file.upload(0, i) }, upload: function (start, i) { var end = Math.min(bt_upload_file.f.size, start + bt_upload_file.split_size); var len = bt_upload_file._files.length; var f_path = bt_upload_file.f_path; if (bt_upload_file.f.webkitRelativePath) { f_path = bt_upload_file.f_path + '/' + bt_upload_file.f.webkitRelativePath.replace('/' + bt_upload_file.f.name, '') } var form = new FormData(); form.append("f_path", f_path.replace('//', '/')); form.append("f_name", bt_upload_file.f.name); form.append("f_size", bt_upload_file.f.size); form.append("f_start", start); form.append("blob", bt_upload_file.f.slice(start, end));$.ajax({ url: bt_upload_file.upload_url, type: "POST", data: form, async: true, processData: false, contentType: false, success: function (data) { if (typeof (data) === "number") { var progress = parseInt(data / bt_upload_file.f.size * 100); var total_time = bt_upload_file.diff_time(bt_upload_file._t_start_time, new Date()); $("#totalProgress").html('

      Uploaded(' + i + '/' + len + '),' + total_time + '

      '); $("#up_box li em")[i].outerHTML = 'Upload progress:' + progress + '%'; $("#up_box li .filesize")[i].outerHTML = '' + bt_upload_file.to_size(data) + '/' + bt_upload_file.to_size(bt_upload_file.f.size) + ''; $("#up_box li em")[i].focus(); bt_upload_file.upload(data, i) } else { if (data.status) { var f_time = bt_upload_file.diff_time(bt_upload_file._start_time, new Date()); $("#up_box li em")[i].outerHTML = 'Completed(' + f_time + ')'; $("#up_box li .filesize")[i].outerHTML = '' + bt_upload_file.to_size(bt_upload_file.f.size) + '/' + bt_upload_file.to_size(bt_upload_file.f.size) + '' } else { $("#up_box li em")[i].outerHTML = '' + data.msg + '' } bt_upload_file.start(i + 1) } }, error: function (e) { if (bt_upload_file._error > 5) { $("#up_box li em")[i].outerHTML = 'Upload failed'; bt_upload_file.start(i + 1); return } bt_upload_file._error += 1; bt_upload_file.upload(start, i) } }) }, diff_time: function (start_date, end_date) { var diff = end_date.getTime() - start_date.getTime(); var minutes = Math.floor(diff / (60 * 1000)); var leave3 = diff % (60 * 1000); var seconds = (leave3 / 1000).toFixed(2); var result = seconds + 'sec'; if (minutes > 0) { result = minutes + "min" + result } return result } }; \ No newline at end of file +var bt_upload_file = { f: null, f_total: 0, f_path: null, split_size: 1024 * 1024 * 2, _files: [], _error: 0, _start_time: 0, _t_start_time: 0, collback_to: null, upload_url: '/files?action=upload', _loadT: null, open: function (path, is_exts, ps, collback_to) { bt_upload_file.f_path = path.replace('//', '/'); user_agent = navigator.userAgent.toLowerCase(); var btn_dir = ''; var accept_ext = ''; if (!is_exts) { if (user_agent.indexOf('chrome') !== -1 || user_agent.indexOf('firefox') !== -1) { btn_dir = '' } } else { accept_ext = 'accept="' + is_exts + '"' } var other_ps = ''; if (ps) { other_ps = ' --- ' + ps + '' } else { other_ps = ' Support for breakpoints' } if (collback_to) { bt_upload_file.collback_to = collback_to } bt_upload_file._loadT = layer.open({ type: 1, title: 'Upload files to [' + bt_upload_file.f_path + ']' + other_ps, area: ['550px', '500px'], shadeClose: false, closeBtn: 2, content: '
      ' + btn_dir + '
        ' }) }, list: function (_files) { bt_upload_file._files = _files; var up_box = $("#up_box"); $("#up_box").html(''); var loadT = layer.msg('Loading file list...', { time: 0, icon: 16, shade: 0.3 }); for (var i = 0; i < _files.length; i += 1) { var f_name = _files[i].name; if (_files[i].webkitRelativePath) { f_name = _files[i].webkitRelativePath } up_box.append('
      • ' + f_name + '' + bt_upload_file.to_size(_files[i].size) + 'Waiting for upload
      • ') } layer.close(loadT) }, to_size: function (a) { var d = [" B", " KB", " MB", " GB", " TB", " PB"]; var e = 1024; for (var b = 0; b < d.length; b += 1) { if (a < e) { return (b === 0 ? a : a.toFixed(2)) + d[b] } a /= e } }, start: function (i) { var len = bt_upload_file._files.length; if (len === 0) { layer.msg('Please select a file!', { icon: 2 }); return false } if (i === 0) { bt_upload_file._t_start_time = new Date() } $("#filesClose,#up,#opt").attr("disabled", "disabled"); var total_time = bt_upload_file.diff_time(bt_upload_file._t_start_time, new Date()); $("#totalProgress").html('

        Uploaded(' + i + '/' + len + '),' + total_time + '

        '); if (len <= i) { $("#totalProgress").html('

        Uploaded completed(' + i + '/' + len + '), ' + total_time + '

        '); bt_upload_file._files = []; $("#filesClose,#up,#opt").removeAttr("disabled"); if (bt_upload_file.collback_to) { bt_upload_file.collback_to(bt_upload_file.f_path) } return false } if (i > 10) { $("#up_box").scrollTop(35 * (i - 10) + 50) } bt_upload_file._start_time = new Date(); bt_upload_file._error = 0; bt_upload_file.f = bt_upload_file._files[i]; bt_upload_file.f_total = Math.ceil(bt_upload_file.f.size / bt_upload_file.split_size); bt_upload_file.upload(0, i) }, upload: function (start, i) { var end = Math.min(bt_upload_file.f.size, start + bt_upload_file.split_size); var len = bt_upload_file._files.length; var f_path = bt_upload_file.f_path; if (bt_upload_file.f.webkitRelativePath) { f_path = bt_upload_file.f_path + '/' + bt_upload_file.f.webkitRelativePath.replace('/' + bt_upload_file.f.name, '') } var form = new FormData(); form.append("f_path", f_path.replace('//', '/')); form.append("f_name", bt_upload_file.f.name); form.append("f_size", bt_upload_file.f.size); form.append("f_start", start); form.append("blob", bt_upload_file.f.slice(start, end));$.ajax({ url: bt_upload_file.upload_url, type: "POST", data: form, async: true, processData: false, contentType: false, success: function (data) { if (typeof (data) === "number") { var progress = parseInt(data / bt_upload_file.f.size * 100); var total_time = bt_upload_file.diff_time(bt_upload_file._t_start_time, new Date()); $("#totalProgress").html('

        Uploaded(' + i + '/' + len + '),' + total_time + '

        '); $("#up_box li em")[i].outerHTML = 'Upload progress:' + progress + '%'; $("#up_box li .filesize")[i].outerHTML = '' + bt_upload_file.to_size(data) + '/' + bt_upload_file.to_size(bt_upload_file.f.size) + ''; $("#up_box li em")[i].focus(); bt_upload_file.upload(data, i) } else { if (data.status) { var f_time = bt_upload_file.diff_time(bt_upload_file._start_time, new Date()); $("#up_box li em")[i].outerHTML = 'Completed(' + f_time + ')'; $("#up_box li .filesize")[i].outerHTML = '' + bt_upload_file.to_size(bt_upload_file.f.size) + '/' + bt_upload_file.to_size(bt_upload_file.f.size) + '' } else { $("#up_box li em")[i].outerHTML = '' + data.msg + '' } bt_upload_file.start(i + 1) } }, error: function (e) { if (bt_upload_file._error > 5) { $("#up_box li em")[i].outerHTML = 'Upload failed'; bt_upload_file.start(i + 1); return } bt_upload_file._error += 1; bt_upload_file.upload(start, i) } }) }, diff_time: function (start_date, end_date) { var diff = end_date.getTime() - start_date.getTime(); var minutes = Math.floor(diff / (60 * 1000)); var leave3 = diff % (60 * 1000); var seconds = (leave3 / 1000).toFixed(2); var result = seconds + 'sec'; if (minutes > 0) { result = minutes + "min" + result } return result } }; \ No newline at end of file diff --git a/BTPanel/static/js/config.js b/BTPanel/static/js/config.js index c3ab5174..50b5f990 100644 --- a/BTPanel/static/js/config.js +++ b/BTPanel/static/js/config.js @@ -611,7 +611,7 @@ function SetPanelApi(t_type) { if (t_type == 1) { if (rdata.status) { $("input[name='panel_token_value']").val(rdata.msg); - layer.msg(lan.config.create_int_key_success, { icon: 1 }); + layer.msg(lan.config.create_int_key_success, { icon: 1, time: 0, shade: 0.3, shadeClose:true }); return; } } @@ -654,14 +654,45 @@ function modify_basic_auth() { var loadT = layer.msg(lan.config.setting_basicauth, { icon: 16, time: 0, shade: [0.3, '#000'] }); $.post('/config?action=get_basic_auth_stat', {}, function (rdata) { layer.close(loadT); - layer.open({ - type: 1, - area: "500px", - title: lan.config.set_basicauth, - closeBtn: 2, - shift: 5, - shadeClose: false, - content: '
        \ + if (rdata.open) { + show_basic_auth(rdata); + } else { + m_html = '
        ' + + '

        Danger! This feature does not know how to open!

        ' + + '
          ' + + '
        • You must use and understand this feature to decide if you want to open it!
        • ' + + '
        • After opening, access the panel in any way, you will be asked to enter the BasicAuth username and password first.
        • ' + + '
        • After being turned on, it can effectively prevent the panel from being scanned and found, but it cannot replace the account password of the panel itself.
        • ' + + '
        • Please remember the BasicAuth password, but forget that you will not be able to access the panel.
        • ' + + '
        • If you forget your password, you can disable BasicAuth authentication by using the bt command in SSH.
        • ' + + '
        ' + + '
        ' + + '' + + 'What is BasicAuth authentication?

        ' + var loadT = layer.confirm(m_html, { title: "Risk reminder", area: "600px" }, function () { + if (!$("#check_basic").prop("checked")) { + layer.msg("Please read the precautions carefully and check to agree to take risks!"); + setTimeout(function () { modify_basic_auth();},3000) + return; + } + layer.close(loadT) + show_basic_auth(rdata); + }); + + } + }); +} + + +function show_basic_auth(rdata) { + layer.open({ + type: 1, + area: "500px", + title: "配置BasicAuth认证", + closeBtn: 2, + shift: 5, + shadeClose: false, + content: '
        \
        \ '+lan.public.server_status+'\
        \ @@ -674,13 +705,13 @@ function modify_basic_auth() {
        \ '+lan.public.username+'\
        \ - \ + \
        \
        \
        \ '+lan.public.pass+'\
        \ - \ + \
        \
        \ \ @@ -690,6 +721,5 @@ function modify_basic_auth() {
      • '+lan.config.basic_auth_tips3+'
      • \ \
        ' - }) - }); + }) } diff --git a/BTPanel/static/js/crontab.js b/BTPanel/static/js/crontab.js index ea98564a..733c31b1 100644 --- a/BTPanel/static/js/crontab.js +++ b/BTPanel/static/js/crontab.js @@ -821,7 +821,7 @@ function toBackup(type){
        '; if (sType == 'sites') { sBody += '

        \ -

        '+lan.public.exclusion_rule+'
        \ +
        '+lan.crontab.exclusion_rule+'
        \ \ diff --git a/BTPanel/static/js/database.js b/BTPanel/static/js/database.js index 30ef8085..e45ccb64 100644 --- a/BTPanel/static/js/database.js +++ b/BTPanel/static/js/database.js @@ -383,7 +383,7 @@ var database = { type: 1, skin: 'demo-class', area: '600px', - title: lan.database.input_title_file, + title: lan.database.input_title_file+'['+name+']', closeBtn: 2, shift: 5, shadeClose: false, diff --git a/BTPanel/static/js/files.js b/BTPanel/static/js/files.js index 4c68ad9b..d9279181 100644 --- a/BTPanel/static/js/files.js +++ b/BTPanel/static/js/files.js @@ -500,7 +500,7 @@ function GetFiles(Path,sort) {
        "; } } - var dirInfo = '(' + lan.files.get_size.replace('{1}', rdata.DIR.length + '').replace('{2}', rdata.FILES.length + '') + '' + (ToSize(totalSize)) + '' + lan.files.get + ')'; + var dirInfo = '( ' + lan.files.get_size.replace('{1}', rdata.DIR.length + '').replace('{2}', rdata.FILES.length + '') + '' + (ToSize(totalSize)) + '' + lan.files.get + ' )'; $("#DirInfo").html(dirInfo); if (getCookie("rank") === "a") { var sort_icon = ''; @@ -556,13 +556,42 @@ function GetFiles(Path,sort) { } setCookie('Path',rdata.PATH); BarTools += ' '; - var copyName = getCookie('copyFileName'); - var cutName = getCookie('cutFileName'); - var isPaste = (copyName == 'null') ? cutName : copyName; - if (isPaste != 'null' && isPaste != undefined) { - BarTools += ' '; - } - + + + //收藏夹 + var shtml = '
        \ + \ +
        ' + + BarTools += shtml; + + var copyName = getCookie('copyFileName'); + var cutName = getCookie('cutFileName'); + var isPaste = (copyName == 'null') ? cutName : copyName; + if (isPaste != 'null' && isPaste != undefined) { + BarTools += ' '; + } + $("#Batch").html(''); var BatchTools = ''; var isBatch = getCookie('BatchSelected'); @@ -584,7 +613,19 @@ function GetFiles(Path,sort) { $(this).parents("tr").removeClass("ui-selected"); } showSeclect() - }); + }); + + // 鼠标移入移出事件 + $('.file-types').hover(function () { + // 鼠标移入时添加hover类 + $('.dropdown-menu-li').hide(); + $(this).find('.dropdown-menu-li').show(); + + }, function () { + $('.dropdown-menu-li').hide(); + // 鼠标移出时移出hover类 + + }); $("#setBox").click(function() { if ($(this).prop("checked")) { @@ -624,7 +665,7 @@ function GetFiles(Path,sort) { if(e.which == 3) { if(count <= 1){ var a = $(this); - a.contextify(RClick(a.attr("filetype"),a.attr("data-path"),a.find("input").val())); + a.contextify(RClick(a.attr("filetype"),a.attr("data-path"),a.find("input").val(),rdata)); } else{ RClickAll(e); @@ -884,15 +925,10 @@ function BackDir() { function CreateFile(type, path) { if (type == 1) { var fileName = $("#newFileName").val(); - layer.msg(lan.public.the, { - icon: 16, - time: 10000 - }); + layer.msg(lan.public.the, { icon: 16, time: 10000 }); $.post('/files?action=CreateFile', 'path=' + encodeURIComponent(path + '/' + fileName), function(rdata) { - layer.closeAll(); - layer.msg(rdata.msg, { - icon: rdata.status ? 1 : 2 - }); + layer.close(getCookie('layers')); + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2}); if(rdata.status){ GetFiles($("#DirPathPlace input").val()); openEditorView(0,path + '/' + fileName); @@ -900,7 +936,7 @@ function CreateFile(type, path) { }); return; } - layer.open({ + var layers = layer.open({ type: 1, shift: 5, closeBtn: 2, @@ -911,11 +947,17 @@ function CreateFile(type, path) { \
        \
        \ - \ + \ \
        \ -
        ' +
        ', + success:function(layers,index){ + $('.layer_close').click(function(){ + layer.close(index); + }); + } }); + setCookie('layers',layers); $("#newFileName").focus().keyup(function(e){ if(e.keyCode == 13) $("#CreateFileBtn").click(); }); @@ -928,15 +970,13 @@ function CreateDir(type, path) { time: 10000 }); $.post('/files?action=CreateDir', 'path=' + encodeURIComponent(path + '/' + dirName), function(rdata) { - layer.closeAll(); - layer.msg(rdata.msg, { - icon: rdata.status ? 1 : 2 - }); + layer.close(getCookie('layers')); + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); GetFiles($("#DirPathPlace input").val()); }); return; } - layer.open({ + var layers = layer.open({ type: 1, shift: 5, closeBtn: 2, @@ -947,45 +987,48 @@ function CreateDir(type, path) { \
        \
        \ - \ + \ \
        \ -
        ' +
        ', + success:function(layers,index){ + $('.layer_close').click(function(){ + layer.close(index); + }); + } }); + setCookie('layers',layers); $("#newDirName").focus().keyup(function(e){ if(e.keyCode == 13) $("#CreateDirBtn").click(); }); } +// 删除文件 function DeleteFile(fileName){ - layer.confirm(lan.get('recycle_bin_confirm',[fileName]),{title:lan.files.del_file,closeBtn:2,icon:3},function(){ + layer.confirm(lan.get('recycle_bin_confirm',[fileName]),{title:lan.files.del_file,closeBtn:2,icon:3},function(index){ layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']}); $.post('/files?action=DeleteFile', 'path=' + encodeURIComponent(fileName), function(rdata) { - layer.closeAll(); - layer.msg(rdata.msg, { - icon: rdata.status ? 1 : 2 - }); + layer.close(index); + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); GetFiles($("#DirPathPlace input").val()); }); }); } function DeleteDir(dirName){ - layer.confirm(lan.get('recycle_bin_confirm_dir',[dirName]),{title:lan.files.del_dir,closeBtn:2,icon:3},function(){ + layer.confirm(lan.get('recycle_bin_confirm_dir',[dirName]),{title:lan.files.del_dir,closeBtn:2,icon:3},function(index){ layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']}); $.post('/files?action=DeleteDir', 'path=' + encodeURIComponent(dirName), function(rdata) { - layer.closeAll(); - layer.msg(rdata.msg, { - icon: rdata.status ? 1 : 2 - }); + layer.close(index); + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); GetFiles($("#DirPathPlace input").val()); }); }); } function AllDeleteFileSub(data,path){ - layer.confirm(lan.files.del_all_msg,{title:lan.files.del_all_file,closeBtn:2,icon:3},function(){ + layer.confirm(lan.files.del_all_msg,{title:lan.files.del_all_file,closeBtn:2,icon:3},function(index){ layer.msg("
        "+lan.public.the+"
        ",{icon:16,time:0,shade: [0.3, '#000']}); setTimeout(function(){getSpeed('.myspeed');},1000); $.post('files?action=SetBatchData',data,function(rdata){ - layer.closeAll(); + layer.close(index); GetFiles(path); layer.msg(rdata.msg,{icon:1}); }); @@ -998,7 +1041,6 @@ function ReloadFiles(){ },3000); } function DownloadFile(action){ - if(action == 1){ var fUrl = $("#mUrl").val(); fUrl = encodeURIComponent(fUrl); @@ -1014,19 +1056,18 @@ function DownloadFile(action){ return; } } - layer.closeAll(); + layer.close(getCookie('layers')) layer.msg(lan.files.down_task,{time:0,icon:16,shade: [0.3, '#000']}); $.post('/files?action=DownloadFile','path='+fpath+'&url='+fUrl+'&filename='+fname,function(rdata){ - layer.closeAll(); + layer.msg(rdata.msg,{icon:rdata.status?1:2}); GetFiles(fpath); GetTaskCount(); task_stat(); - layer.msg(rdata.msg,{icon:rdata.status?1:2}); }); return; } var path = $("#DirPathPlace input").val(); - layer.open({ + var layers = layer.open({ type: 1, shift: 5, closeBtn: 2, @@ -1043,11 +1084,17 @@ function DownloadFile(action){ '+lan.files.file_name+':\
        \
        \ - \ + \ \
        \ - ' + ', + success:function(layers,index){ + $('.layer_close').click(function(){ + layer.close(index) + }); + } }); + setCookie('layers',layers); //fly("dlok"); $("#mUrl").change(function () { durl = $(this).val() @@ -1112,35 +1159,36 @@ function ReName(type, fileName) { var path = $("#DirPathPlace input").val(); var newFileName = encodeURIComponent(path + '/' + $("#newFileName").val()); var oldFileName = encodeURIComponent(path + '/' + fileName); - layer.msg(lan.public.the, { - icon: 16, - time: 10000 - }); + layer.msg(lan.public.the, {icon: 16,time: 10000}); $.post('/files?action=MvFile', 'sfile=' + oldFileName + '&dfile=' + newFileName + '&rename=true', function(rdata) { - layer.closeAll(); - layer.msg(rdata.msg, { - icon: rdata.status ? 1 : 2 - }); + layer.close(getCookie('layers')); + layer.msg(rdata.msg, {icon: rdata.status ? 1 : 2}); GetFiles(path); }); return; } - layer.open({ + var layers = layer.open({ type: 1, shift: 5, closeBtn: 2, area: '320px', title: lan.files.file_menu_rename, content: '
        \ -
        \ - \ -
        \ -
        \ - \ - \ -
        \ -
        ' +
        \ + \ +
        \ +
        \ + \ + \ +
        \ +
        ', + success:function (layers,index){ + $('.layers_close').click(function(){ + layer.close(index); + }); + } }); + setCookie('layers',layers); $("#newFileName").focus().keyup(function(e){ if(e.keyCode == 13) $("#ReNameBtn").click(); }); @@ -1149,20 +1197,14 @@ function CutFile(fileName) { var path = $("#DirPathPlace input").val(); setCookie('cutFileName', fileName); setCookie('copyFileName', null); - layer.msg(lan.files.mv_ok, { - icon: 1, - time: 1 - }); + layer.msg(lan.files.mv_ok, {icon: 1,time: 1000}); GetFiles(path); } function CopyFile(fileName) { var path = $("#DirPathPlace input").val(); setCookie('copyFileName', fileName); setCookie('cutFileName', null); - layer.msg(lan.files.copy_ok, { - icon: 1, - time: 1 - }); + layer.msg(lan.files.copy_ok, {icon: 1,time: 1000}); GetFiles(path); } function PasteFile(fileName) { @@ -1225,6 +1267,7 @@ function PasteTo(path,copyName,cutName,fileName){ setCookie('cutFileName', null); } } +// 压缩文件 function Zip(dirName,submits) { var path = $("#DirPathPlace input").val(); if(submits != undefined){ @@ -1234,14 +1277,13 @@ function Zip(dirName,submits) { }else{ sfile = encodeURIComponent(dirName); } - dfile = encodeURIComponent($("#dfile").val()); var z_type = $("select[name='z_type']").val(); if (!z_type) z_type = 'tar.gz'; - layer.closeAll(); - layer.msg(lan.files.zip_the, {icon: 16,time: 0,shade: [0.3, '#000']}); + layer.close(getCookie('layers')); + var layers = layer.msg(lan.files.zip_the, {icon: 16,time: 0,shade: [0.3, '#000']}); $.post('/files?action=Zip', 'sfile=' + sfile + '&dfile=' + dfile + '&z_type='+z_type+'&path='+encodeURIComponent(path), function(rdata) { - layer.closeAll(); + layer.close(layers); if(rdata == null || rdata == undefined){ layer.msg(lan.files.zip_ok,{icon:1}); GetFiles(path) @@ -1263,7 +1305,7 @@ function Zip(dirName,submits) { dirName = path + '/' + tmp[tmp.length-1] } - layer.open({ + var layers = layer.open({ type: 1, shift: 5, closeBtn: 2, @@ -1276,12 +1318,17 @@ function Zip(dirName,submits) { +''+lan.files.zip_to+'' + '
        ' +'
        ' - +'' + +'' +'' +'
        ' - +'
        ' + +'
        ', + success:function(layers,index){ + $('.layer_close').click(function(){ + layer.close(index); + }); + } }); - + setCookie('layers',layers); setTimeout(function (){ $("select[name='z_type']").change(function(){ var z_type = $(this).val(); @@ -1298,12 +1345,11 @@ function UnZip(fileName,type) { var dfile = encodeURIComponent($("#dfile").val()); var password = encodeURIComponent($("#unpass").val()); coding = $("select[name='coding']").val(); - layer.closeAll(); + layer.close(getCookie('layers')); layer.msg(lan.files.unzip_the, {icon: 16,time: 0,shade: [0.3, '#000']}); $.post('/files?action=UnZip', 'sfile=' + sfile + '&dfile=' + dfile +'&type=' + type + '&coding=' + coding + '&password=' + password, function(rdata) { - layer.closeAll(); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); - task_stat() + task_stat(); GetFiles(path); }); return @@ -1314,7 +1360,7 @@ function UnZip(fileName,type) { if(type == 'zip'){ umpass = '
        '+lan.files.zip_pass_title+'
        ' } - layer.open({ + var layers = layer.open({ type: 1, shift: 5, closeBtn: 2, @@ -1330,11 +1376,17 @@ function UnZip(fileName,type) { +'' +'
        ' +'
        ' - +'' + +'' +'' +'
        ' - +'
        ' + +'
        ', + success:function(layers,index){ + $('.layer_close').click(function(){ + layer.close(index); + }); + } }); + setCookie('layers',layers); } function isZip(fileName){ var ext = fileName.split('.'); @@ -1427,6 +1479,8 @@ function UploadFiles() { }); UploadStart();*/ } + +// 设置权限 function SetChmod(action,fileName){ if(action == 1){ var chmod = $("#access").val(); @@ -1436,7 +1490,7 @@ function SetChmod(action,fileName){ var loadT = layer.msg(lan.public.config,{icon:16,time:0,shade: [0.3, '#000']}); $.post('files?action=SetFileAccess',data,function(rdata){ layer.close(loadT); - if(rdata.status) layer.closeAll(); + if(rdata.status) layer.close(getCookie('layers')); layer.msg(rdata.msg,{icon:rdata.status?1:2}); var path = $("#DirPathPlace input").val(); GetFiles(path) @@ -1447,11 +1501,11 @@ function SetChmod(action,fileName){ var toExec = fileName == lan.files.all?'Batch(3,1)':'SetChmod(1,\''+fileName+'\')'; $.post('/files?action=GetFileAccess','filename='+encodeURIComponent(fileName),function(rdata){ - layer.open({ + var layers = layer.open({ type:1, closeBtn: 2, title: lan.files.set_auth + '['+fileName+']', - area: '400px', + area: '430px', shadeClose:false, content:'
        \
        \ @@ -1482,12 +1536,18 @@ function SetChmod(action,fileName){ \
        \
        \ - \ + \ \
        \ - ' + ', + success:function(layers,index){ + $('.layer_close').click(function(){ + layer.close(index); + }) + } }); - + setCookie('layers',layers); + onAccess(); $("#access").keyup(function(){ onAccess(); @@ -1552,7 +1612,7 @@ function onAccess(){ } } } -function RClick(type,path,name){ +function RClick(type, path, name, file_store){ var displayZip = isZip(type); var options = {items:[ {text: lan.files.file_menu_copy, onclick: function() {CopyFile(path)}}, @@ -1581,7 +1641,43 @@ function RClick(type,path,name){ } else{ options.items.push({text: lan.files.file_menu_down, onclick: function() {GetFileBytes(path)}},{text: lan.files.file_menu_del, onclick: function() {DeleteFile(path)}}); - } + } + + options.items.push({ + text: "Favorites", onclick: function () { + + var datas = [] + for (var i = 0; i < file_store.STORE.length; i++) { + datas.push({ title: file_store.STORE[i].name, value: file_store.STORE[i].name }) + } + var file_data = { + title: 'Add to favorites', + area: '500px', + list: [ + { name: 'path', disabled: true, width: '300px', value: path }, + { name: 'file_type', type: 'select', width: '300px', items: datas } + ], + btns: [ + bt.form.btn.close(), + { + title: 'Add', name: 'submit', css: 'btn-success', callback: function (rdata, load) { + var loading = bt.load(); + bt.send('add_files_store', 'files/add_files_store', rdata, function (rRet) { + loading.close(); + bt.msg(rRet); + if (rRet.status) { + load.close(); + GetFiles(file_store.PATH) + } + }) + } + } + ] + } + var bs = bt.render_form(file_data); + $(".bt-form" + bs).find(".info-r").css("margin-left", "15px") + } + }) return options; } @@ -1658,6 +1754,129 @@ function PathLeft(){ $("#PathPlaceBtn ul").css("left",0) } } + +var store_type_index = 0 +//删除分类或者文件 +function del_files_store(path, obj, parent_name) { + var _item = $(obj).parents('tr').data('item') + var action = '', msg = ''; + var data = {} + if (parent_name != undefined) { + action = 'del_files_store'; + data['file_type'] = parent_name + data['path'] = _item.path; + msg = "Are you sure to delete the path [" + _item.path + "]?" + } + else { + action = 'del_files_store_types'; + data['file_type'] = _item.name; + msg = "Are you sure to delete the category [" + _item.name + "]?" + } + bt.confirm({ msg: msg, title: '提示' }, function () { + var loading = bt.load(); + bt.send(action, 'files/' + action, data, function (rRet) { + loading.close(); + if (parent_name) { + store_type_index.close(); + } + + if (rRet.status) { + set_file_store(path) + GetFiles(getCookie('Path')) + } + bt.msg(rRet); + }) + }) +} + +function set_file_store(path) { + + var loading = bt.load(); + bt.send('get_files_store', 'files/get_files_store', {}, function (rRet) { + loading.close(); + if ($('#stroe_tab_list').length <= 0) { + bt.open({ + type: 1, + skin: 'demo-class', + area: '510px', + title: "Manage favorites", + closeBtn: 2, + shift: 5, + shadeClose: false, + content: "
        ", + success: function () { + $('#btn_data_store_add').click(function () { + bt.send('add_files_store_types', 'files/add_files_store_types', { file_type: $(".type_name").val() }, function (rRet) { + loading.close(); + + if (rRet.status) { + set_file_store(path) + + GetFiles(path) + } + bt.msg(rRet); + }) + }) + reload_sort_data(path) + } + }); + } + else { + reload_sort_data(path) + } + + function reload_sort_data(path) { + var _tab = bt.render({ + table: '#stroe_tab_list', + columns: [ + { field: 'name', title: 'Category Name' }, + { + field: 'opt', align: 'right', title: 'Operating', templet: function (item) { + var opt = ' View' + if (item.name != 'Default category') { + opt += ' | Del'; + } + return opt; + } + }, + ], + data: rRet + }); + + $(".show_file_store_detail").click(function () { + var _item = $(this).parents('tr').data('item') + store_type_index = bt.open({ + type: 1, + skin: 'demo-class', + area: '710px', + title: "Manage [" + _item['name'] + ']', + closeBtn: 2, + shift: 5, + shadeClose: false, + content: "
        ", + success: function () { + var _tab = bt.render({ + table: '#stroe_tab_list_detail', + columns: [ + { field: 'path', title: 'Path name' }, + { + field: 'opt', align: 'right', title: 'Operating', templet: function (item) { + var opt = ' Del' + return opt; + } + }, + ], + data: _item.data + }); + } + }); + }) + } + }) +} + + + $("#PathPlaceBtn").on("click", function(e){ if($("#DirPathPlace").is(":hidden")){ $("#DirPathPlace").css("display","inline"); diff --git a/BTPanel/static/js/public.js b/BTPanel/static/js/public.js index 9eaaf53b..ddfa2b0a 100644 --- a/BTPanel/static/js/public.js +++ b/BTPanel/static/js/public.js @@ -4,118 +4,6 @@ $(document).ready(function() { }); }); -function openEditorView(type,path){ - var paths = path.split('/'),_fileName = paths[paths.length -1], _aceTmplate = document.getElementById("aceTmplate").innerHTML; - _aceTmplate = _aceTmplate.replace(/\<\\\/script\>/g,''); - if(aceEditor.editor !== null){ - if(aceEditor.isAceView == false){ - aceEditor.isAceView = true; - $('.aceEditors .layui-layer-max').click() - } - for(var i=0;i\ -
        \ -
        Detected that the file was not saved, did you save the file change?
        \ -
        If you don\'t save, the changes will be lost!
        \ -
        \ - \ - \ - \ -
        \ - ', - success: function (layers, indexs) { - $('.ace-clear-btn button').click(function(){ - var _type = $(this).attr('data-type'); - switch(_type){ - case '2': - aceEditor.editor = null; - layer.closeAll(); - break; - case '1': - layer.close(indexs); - break; - case '0': - var _arry = [],editor = aceEditor['editor']; - for(var item in editor){ - _arry.push({ - path: editor[item]['path'], - data: editor[item]['ace'].getValue(), - encoding: editor[item]['encoding'], - }) - } - aceEditor.saveAllFileBody(_arry,function(){ - $('.ace_conter_menu>.item').each(function (el,indexx) { - var _id = $(this).attr('data-id'); - $(this).find('i').removeClass('glyphicon-exclamation-sign').addClass('glyphicon-remove').attr('data-file-state','0') - aceEditor.editor['ace_editor_'+_id].fileType = 0; - }); - aceEditor.editor = null; - aceEditor.pathAarry = []; - layer.closeAll(); - }); - break; - } - }); - } - }); - return false; - } - } - aceEditor.editor = null; - aceEditor.pathAarry = []; - aceEditor.editorLength = 0; - } - }); -} - var aceEditor = { layer_view:'', editor: null, @@ -175,17 +63,13 @@ var aceEditor = { encodingList: ['UTF-8', 'GBK', 'GB2312', 'BIG5'], themeList: [ 'chrome', - 'clouds', - 'crimson_editor', - 'ambiance', - 'chaos', 'monokai' ], + fontSize:'13px', editorTheme: 'monokai', // 编辑器主题 editorLength: 0, isAceView:true, ace_active:'', - // aceEditor:'', // 事件编辑器-方法,事件绑定 eventEditor: function () { var _this = this; @@ -266,7 +150,6 @@ var aceEditor = { var _type = $(this).attr('data-type'); switch (_type) { case '0': //保存文件 - console.log() _this.saveFileBody({ path:_path, data:editor_item.ace.getValue(), @@ -339,18 +222,8 @@ var aceEditor = { case 'lang': $('.ace_toolbar_menu').hide(); layer.msg('Switching language mode is not supported at this time, so stay tuned!',{icon:6}); - // $('.ace_toolbar_menu .menu-files').show().siblings().hide(); - // _this.getRelevanceList(_item.fileName); break; } - $('.ace_toolbar_menu').click(function(e){ - e.stopPropagation(); - e.preventDefault(); - }); - $(document).click(function(e){ - $('.ace_toolbar_menu').hide(); - $('.ace_toolbar_menu .menu-tabs,.ace_toolbar_menu .menu-encoding,.ace_toolbar_menu .menu-files').hide(); - }) e.stopPropagation(); e.preventDefault(); }); @@ -372,8 +245,8 @@ var aceEditor = { }); // 状态 - $('.ace_header span').click(function () { - var type = $(this).attr('class'),editor_item = _this.editor['ace_editor_'+ _this.ace_active ]; + $('.ace_header span').click(function (e) { + var type = $(this).attr('class'),editor_item = _this.editor['ace_editor_'+ _this.ace_active]; switch(type){ case 'saveFile': //保存当时文件 _this.saveFileBody({ @@ -474,25 +347,103 @@ var aceEditor = { break; // 字体 case 'fontSize': - layer.open({ - type:1, - area:['400px','300px'], - title:'Tips', - btn:['Save','Cancel'], - content:'
        \ -
        Font style
        \ -
        font size
        px
        \ -
        ', - yes:function(layers,index){ - - }, - btn1:function(layers,index){ - + $('.ace_toolbar_menu').show().find('.menu-fontSize').show().siblings().hide(); + $('.menu-fontSize .menu-conter .set_font_size input').val(_this.fontSize.match(/([0-9]*)px/)[1]); + $('.menu-fontSize .menu-conter .set_font_size input').unbind('keyup').keyup(function (e){ + var _val = $(this).val(); + if(_val == ''){ + $(this).css('border','1px solid red'); + $(this).next('.tips').text('Font setting range 12-45'); + }else if(!isNaN(_val)){ + $(this).removeAttr('style'); + if(parseInt(_val) > 11 && parseInt(_val) <45){ + $('.ace_conter_editor .ace_editors').css('fontSize', _val +'px') + }else{ + $('.ace_conter_editor .ace_editors').css('fontSize', '13px'); + $(this).css('border','1px solid red'); + $(this).next('.tips').text('Font setting range 12-45'); + } + }else{ + $(this).css('border','1px solid red'); + $(this).next('.tips').text('Font setting range 12-45'); } }); + $('.menu-fontSize .menu-conter .set_font_size input').unbind('change').change(function (){ + var _val = $(this).val(); + $('.ace_conter_editor .ace_editors').css('fontSize',_val+'px') + }); + $('.set_font_size .btn-save').unbind('click').click(function(){ + var _fontSize = $('.set_font_size input').val(), + _theme = JSON.parse(getCookie('aceEditor')).theme, + _data = JSON.stringify({"fontSize": _fontSize +"px","theme":_theme}); + _this.saveFileBody({ + path:'/www/server/panel/BTPanel/static/ace/editor.config.json', + data:_data, + encoding:'utf-8' + },function(res){ + if(res.status){ + _this.fontSize = _fontSize +'px' + setCookie('aceEditor',_data); + layer.msg('Successful setup', {icon: 1}); + return false; + } + layer.msg(res.msg, {icon: 2}); + }); + }); + $('.ace_toolbar_menu').unbind('click').click(function(e){ + e.stopPropagation(); + e.preventDefault(); + }); + $(document).unbind('click').click(function(e){ + $('.ace_toolbar_menu').hide(); + $('.ace_conter_editor .ace_editors').css('fontSize', _this.fontSize); + $('.ace_toolbar_menu .menu-tabs,.ace_toolbar_menu .menu-encoding,.ace_toolbar_menu .menu-files').hide(); + }); break; + //主题 case 'themes': - layer.msg('The theme feature is under development, so stay tuned!',{icon:6}); + $('.ace_toolbar_menu').show().find('.menu-themes').show().siblings().hide(); + var _html = '',_arry = ['White','Black'],_icon = ''; + for(var i=0;i<_this.themeList.length;i++){ + if(_this.themeList[i] != _this.editorTheme){ + _html += '
      • '+ _this.themeList[i] +'【'+ _arry[i] +'】
      • '; + }else{ + _html += '
      • '+ _this.themeList[i] +'【'+ _arry[i] +'】'+ _icon +'
      • '; + } + } + $('.menu-themes ul').html(_html); + $('.menu-themes ul li').click(function(){ + var _theme = $(this).attr('data-value'); + $(this).addClass('active').append(_icon).siblings().removeClass('active').find('.icon').remove(); + var _fontSize = JSON.parse(getCookie('aceEditor')).fontSize.match(/([0-9]*)px/)[1], + _data = JSON.stringify({"fontSize": _fontSize +"px","theme":_theme}); + for(var item in _this.editor){ + _this.editor[item].ace.setTheme("ace/theme/"+_theme); + } + _this.saveFileBody({ + path:'/www/server/panel/BTPanel/static/ace/editor.config.json', + data:_data, + encoding:'utf-8' + },function(res){ + if(res.status){ + _this.editorTheme = _theme; + $('#ace_conter').removeAttr('class').addClass(_theme); + setCookie('aceEditor',_data); + layer.msg('Successful setup', {icon: 1}); + return false; + } + layer.msg(res.msg, {icon: 2}); + }); + }); + $('.ace_toolbar_menu').unbind('click').click(function(e){ + e.stopPropagation(); + e.preventDefault(); + }); + $(document).unbind('click').click(function(e){ + $('#ace_conter').removeAttr('class').addClass(_this.editorTheme); + $('.ace_toolbar_menu').hide(); + $('.ace_toolbar_menu .menu-tabs,.ace_toolbar_menu .menu-encoding,.ace_toolbar_menu .menu-files').hide(); + }); break; case 'helps': layer.open({ @@ -556,10 +507,18 @@ var aceEditor = { }); break; } + e.stopPropagation(); + e.preventDefault(); }); - + $('.ace_toolbar_menu').click(function(e){ + e.stopPropagation(); + e.preventDefault(); + }); + $(document).click(function(e){ + $('.ace_toolbar_menu').hide(); + $('.ace_toolbar_menu .menu-tabs,.ace_toolbar_menu .menu-encoding,.ace_toolbar_menu .menu-files').hide(); + }) // 选择语言 - this.setEditorView(); }, // 设置搜索视图 @@ -646,10 +605,11 @@ var aceEditor = { creationEditor: function (obj, callabck) { var _this = this; $('#ace_editor_' + obj.id).text(obj.data || ''); - if(this.editor == null) this.editor = {} + $('.ace_conter_editor .ace_editors').css('fontSize', _this.fontSize); + if(this.editor == null) this.editor = {}; this.editor['ace_editor_' + obj.id] = { ace: ace.edit("ace_editor_" + obj.id, { - theme: "ace/theme/monokai", //主题 + theme: "ace/theme/"+_this.editorTheme, //主题 mode: "ace/mode/" + (obj.fileName != undefined ? obj.mode : 'text'), // 语言类型 wrap: true, showInvisibles:false, @@ -698,7 +658,6 @@ var aceEditor = { readOnly: false // 如果不需要使用只读模式,这里设置false }); - // 获取光标位置 ACE.ace.getSession().selection.on('changeCursor', function(e) { var _cursor = ACE.ace.selection.getCursor(); @@ -714,18 +673,17 @@ var aceEditor = { }, // 获取文件模型 getFileType: function (fileName) { - var filenames = fileName.split('.')[1],modesByName = {}; + var filenames = fileName.match(/\.([0-9A-z]*)$/); + filenames = (filenames == null?'text':filenames[1]); for (var name in this.supportedModes) { - var data = this.supportedModes[name]; - var suffixs = data[0].split('|'); - var filename = name.toLowerCase() + var data = this.supportedModes[name],suffixs = data[0].split('|'),filename = name.toLowerCase(); for (var i = 0; i < suffixs.length; i++) { if (filenames == suffixs[i]){ - return { name: name,mode: filename } + return { name: name,mode: filename }; } } } - return {name:'Text',mode:'text'} + return {name:'Text',mode:'text'}; }, // 新建编辑器视图-方法 addEditor: function () { @@ -780,7 +738,7 @@ var aceEditor = { $('.ace_conter_menu .item').removeClass('active'); $('.ace_conter_editor .ace_editors').removeClass('active'); $('.ace_conter_menu .ace_editor_add').before('
        \ - ' + _fileName + '\ + ' + _fileName + '\ \
        '); $('.ace_conter_editor').append('
        '); @@ -820,6 +778,12 @@ var aceEditor = { if (callback) callback(res) }); }, + // 获取配置文件 + getEditorConfig:function(callback) { + $.get('/static/ace/editor.config.json?'+ RandomStrPwd(5),function (res){ + if(callback) callback(res); + }); + }, // 递归保存文件 saveAllFileBody:function(arry,num,callabck) { var _this = this; @@ -844,6 +808,155 @@ var aceEditor = { } } +function openEditorView(type,path){ + var paths = path.split('/'),_fileName = paths[paths.length -1], _aceTmplate = document.getElementById("aceTmplate").innerHTML; + _aceTmplate = _aceTmplate.replace(/\<\\\/script\>/g,''); + if(aceEditor.editor !== null){ + if(aceEditor.isAceView == false){ + aceEditor.isAceView = true; + $('.aceEditors .layui-layer-max').click() + } + for(var i=0;i\ +
        \ +
        Detected that the file was not saved, did you save the file change?
        \ +
        If you don\'t save, the changes will be lost!
        \ +
        \ + \ + \ + \ +
        \ + ', + success: function (layers, indexs) { + $('.ace-clear-btn button').click(function(){ + var _type = $(this).attr('data-type'); + switch(_type){ + case '2': + aceEditor.editor = null; + layer.closeAll(); + break; + case '1': + layer.close(indexs); + break; + case '0': + var _arry = [],editor = aceEditor['editor']; + for(var item in editor){ + _arry.push({ + path: editor[item]['path'], + data: editor[item]['ace'].getValue(), + encoding: editor[item]['encoding'], + }) + } + aceEditor.saveAllFileBody(_arry,function(){ + $('.ace_conter_menu>.item').each(function (el,indexx) { + var _id = $(this).attr('data-id'); + $(this).find('i').removeClass('glyphicon-exclamation-sign').addClass('glyphicon-remove').attr('data-file-state','0') + aceEditor.editor['ace_editor_'+_id].fileType = 0; + }); + aceEditor.editor = null; + aceEditor.pathAarry = []; + layer.closeAll(); + }); + break; + } + }); + } + }); + return false; + } + } + aceEditor.editor = null; + aceEditor.pathAarry = []; + aceEditor.editorLength = 0; + } + }); +} + var my_headers = {}; var request_token_ele = document.getElementById("request_token_head"); if (request_token_ele) { @@ -2255,7 +2368,7 @@ function messagebox() { layer.open({ type: 1, title: lan.bt.task_title, - area: "700px", + area: "750px", closeBtn: 2, shadeClose: false, content: '
        \ @@ -2298,7 +2411,7 @@ function remind(a){ task_count++; continue; } - e += '
        '+g.data[d].name+'【'+lan.bt.task_ok+'】'+ lan.bt.time + (g.data[d].end - g.data[d].start) + lan.bt.s+'
        '+g.data[d].addtime+'' + e += '
        '+g.data[d].name+'【'+lan.bt.task_ok+'】'+ lan.bt.time+ ' ' + (g.data[d].end - g.data[d].start) +' ' + lan.bt.s+'
        '+g.data[d].addtime+'' } var con = '
        \ \ @@ -2461,7 +2574,7 @@ function scroll_handle(e){ var scrollTop = this.scrollTop; $(this).find("thead").css({"transform":"translateY("+scrollTop+"px)","position":"relative","z-index":"1"}); } -var clipboard, interval, socket, gterm, ssh_login; +var clipboard, interval, socket, gterm, ssh_login,term_box; var pdata_socket = { x_http_token: document.getElementById("request_token_head").getAttribute('token') @@ -2527,7 +2640,7 @@ function web_shell() { if (data.data == '\r\n'+lan.public.logout+'\r\n' || data.data == lan.public.logout+'\r\n' || data.data == '\r\nlogout\r\n' || data.data == 'logout\r\n') { setTimeout(function () { - layer.closeAll(); + layer.close(term_box); }, 500); } }); @@ -2545,7 +2658,7 @@ function web_shell() { }); - var term_box = layer.open({ + term_box = layer.open({ type: 1, title: lan.public.bt_terminal, area: ['920px','640px'], @@ -2672,7 +2785,6 @@ function web_shell() { term.focus(); }) $("textarea[name='ssh_copy']").keydown(function (e) { - if (e.ctrlKey && e.keyCode == 13) { $(".shell_btn_1").click(); } else if (e.altKey && e.keyCode == 13) { @@ -2681,8 +2793,6 @@ function web_shell() { }); }, 100) - - } function shell_translate_text() { diff --git a/BTPanel/static/js/public_backup.js b/BTPanel/static/js/public_backup.js index d5ea5a7f..a5c0d262 100644 --- a/BTPanel/static/js/public_backup.js +++ b/BTPanel/static/js/public_backup.js @@ -3771,9 +3771,9 @@ bt.soft = { if(pluginName) qlen = qlen-1; //折扣列表 for(var i=0;i'+bt.soft.pro.conver_unit(j)+''+(c==1?"":''+c*10+lan.public_backup.discount+'')+''; } @@ -4868,6 +4868,36 @@ bt.site = { loading.close(); if(callback) callback(rdata); }) + }, + get_dir_auth:function(id,callback){ + var loading = bt.load(); + bt.send('get_dir_auth','site/get_dir_auth',{id:id},function(rdata){ + loading.close(); + if(callback) callback(rdata); + }) + }, + create_dir_guard:function(data,callback){ + var loading = bt.load(); + bt.send('set_dir_auth','site/set_dir_auth',{id:data.id,name:data.name,site_dir:data.site_dir,username:data.username,password:data.password},function(rdata){ + loading.close(); + if(callback) callback(rdata); + }) + }, + edit_dir_account:function(data,callback){ + var loading = bt.load(); + bt.send('modify_dir_auth_pass','site/modify_dir_auth_pass',{id:data.id,name:data.name,username:data.username,password:data.password},function(rdata){ + loading.close(); + if(callback) callback(rdata); + }) + }, + delete_dir_guard:function(id,data,callback){ + var loading = bt.load(); + bt.show_confirm(lan.public_backup.del+'['+ data +']',lan.public_backup.del_dir,function(){ + bt.send('delete_dir_auth','site/delete_dir_auth',{id:id,name:data},function(rdata){ + loading.close(); + if(callback) callback(rdata); + }) + }) } } diff --git a/BTPanel/static/js/site.js b/BTPanel/static/js/site.js index 751525c6..a41ac8eb 100644 --- a/BTPanel/static/js/site.js +++ b/BTPanel/static/js/site.js @@ -110,6 +110,15 @@ var site = { } }, + html_encode: function (html) { + var temp = document.createElement("div"); + //2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐,google支持) + (temp.textContent != undefined) ? (temp.textContent = html) : (temp.innerText = html); + //3.最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了 + var output = temp.innerHTML; + temp = null; + return output; + }, get_types: function (callback) { bt.site.get_type(function (rdata) { var optionList = ''; @@ -723,7 +732,7 @@ var site = { { field: 'port', width: '70px', title: lan.site.port }, { field: 'path', width: '100px', title: lan.site.subdirectories }, { - field: 'opt', width: '100px', align: 'right', title: lan.site.operate, templet: function (item) { + field: 'opt', width: '150px', align: 'right', title: lan.site.operate, templet: function (item) { return ''+lan.site.site_menu_4+' | '+lan.site.del+''; } } @@ -917,6 +926,50 @@ var site = { }) }) }, + set_dirguard: function(web){ + String.prototype.myReplace = function (f, e) {//吧f替换成e + var reg = new RegExp(f, "g"); //创建正则RegExp对象 + return this.replace(reg, e); + } + bt.site.get_dir_auth(web.id,function(res) { + var datas = { + items: [{ name: 'add_dir_guard',text:lan.site.add_dir_guard,type: 'button',callback: function(data){site.edit.template_Dir(web.id,true)}}] + } + var form_line = bt.render_form_line(datas); + $('#webedit-con').append(form_line.html); + bt.render_clicks(form_line.clicks); + $('#webedit-con').addClass('divtable').append('
        '+lan.bt.task_name+''+lan.bt.task_time+'
        '); + setTimeout(function() { + var data = []; + var _tab = bt.render({ + table: '#dir_guard', + columns: [ + { + field: 'name', title: lan.site.name, template: function(item) { + return ''+ item.name +'' + } + }, + { + field: 'site_dir', title: lan.public.dir_name, template: function(item) { + return ''+ item.site_dir +'' + } + }, + { + field: 'dname', title: lan.site.operate, align: 'right', templet: function (item) { + var dirName = item.name + item = JSON.stringify(item).myReplace('"', '\''); + var conter = ''+lan.site.edit+' ' + + '| '+lan.site.del+''; + return conter + } + } + ], + data:res[web.name] || [] + }) + + }) + }); + }, limit_network: function (web) { bt.site.get_limitnet(web.id, function (rdata) { var limits = [ @@ -1453,6 +1506,26 @@ var site = { site.create_let(ddata, function (res) { if (res.status === true) { site.reload(); + } else { + var area_size = '500px'; + console.log(res.msg[1]) + var err_info = ""; + if (res.msg[1].status === 'invalid') { + area_size = '600px'; + var check_url = "http://" + res.msg[1].identifier.value + '/.well-known/acme-challenge/' + res.msg[1].challenges[0].token + err_info += "

        Verify domain name:" + res.msg[1].identifier.value + "

        " + err_info += "

        Verify URL:Click to view

        " + err_info += "

        Verify content:" + res.msg[1].challenges[0].token + "

        " + err_info += "

        Verify results: Verification failed

        " + err_info += "

        Error code:" + site.html_encode(res.msg[1].challenges[0].error.detail) + "

        " + } + + layer.msg('
        ' + res.msg[0]+ '' + err_info + '
        ', { + icon: 2, time: 0, + shade:0.3, + shadeClose: true, + area: area_size + }); } }); @@ -1504,14 +1577,67 @@ var site = { if (ldata.status) { b_load.close(); site.ssl.reload(1); + } else { + var area_size = '500px'; + var err_info = ""; + + if (ldata.msg[1].status === 'invalid') { + area_size = '600px'; + var trs = $("#dns_txt_jx tbody tr"); + var dns_value = ""; + for (var imd = 0; imd < trs.length; imd++) { + if (trs[imd].outerText.indexOf(ldata.msg[1].identifier.value) == -1) continue; + var s_tmp = trs[imd].outerText.split("\t") + if (s_tmp.length > 1) { + dns_value = s_tmp[1] + break; + } + } + var check_url = "_acme-challenge." + ldata.msg[1].identifier.value + err_info += "

        Verify domain name:" + ldata.msg[1].identifier.value + "

        " + err_info += "

        Verify resolve:"+check_url+"

        " + err_info += "

        Verify content:" + dns_value + "

        " + err_info += "

        Verify results: verification failed

        " + err_info += "

        Error code:" + site.html_encode(ldata.msg[1].challenges[1].error.detail) + "

        " + } + + layer.msg('
        ' + ldata.msg[0] + '' + err_info + '
        ', { + icon: 2, time: 0, + shade: 0.3, + shadeClose: true, + area: area_size + }); } }); }) }, 100) } else { - site.reload(); - bt.msg(ret); + if (ret.status) { + site.reload(); + bt.msg(ret); + } else { + var area_size = '500px'; + var err_info = ""; + + if (ret.msg[1].status === 'invalid') { + area_size = '600px'; + var check_url = "_acme-challenge." + ret.msg[1].identifier.value + err_info += "

        Verify domain name:" + ret.msg[1].identifier.value + "

        " + err_info += "

        Verify resolve:" + check_url + "

        " + err_info += "

        Verify results: verification failed

        " + err_info += "

        Error code:" + site.html_encode(ret.msg[1].challenges[1].error.detail) + "

        " + } + + layer.msg('
        ' + ret.msg[0] + '' + err_info + '
        ', { + icon: 2, time: 0, + shade: 0.3, + shadeClose: true, + area: area_size + }); + } + + } }) } @@ -1700,6 +1826,24 @@ var site = { _html.append(bt.render_help([lan.site.switch_php_help1, lan.site.switch_php_help2, lan.site.switch_php_help3])); $('#webedit-con').append(_html); bt.render_clicks(_form_data.clicks); + $('#webedit-con').append('
        '+lan.site.session_off+'
        '+bt.render_help([lan.site.independent_storage])); + function get_session_status(){ + var loading = bt.load('Getting session status...'); + bt.send('get_php_session_path','config/get_php_session_path',{id:web.id},function(tdata){ + loading.close(); + $('#session_switch').prop("checked",tdata); + }) + }; + get_session_status() + $('#session_switch').click(function() { + var val = $(this).prop('checked'); + bt.send('set_php_session_path','config/set_php_session_path',{id:web.id,act:val? 1:0},function(rdata){ + bt.msg(rdata) + }) + setTimeout(function () { + get_session_status(); + }, 500) + }) }) }) }, @@ -1851,6 +1995,79 @@ var site = { }, 100); }); + }, + template_Dir: function(id,type,obj){ + if(type){ + obj = {"name":"","sitedir": "", "username":"","password":""}; + }else{ + obj = {"name":obj.name,"sitedir": obj.site_dir, "username":"","password":""}; + } + var form_directory = bt.open({ + type: 1, + skin: 'demo-class', + area: '550px', + title: type ? lan.bt.adddir : lan.bt.editdir, + closeBtn: 2, + shift: 5, + shadeClose: false, + content: "
        " + + "
        " + + ""+lan.bt.task_name+"" + + "
        " + + "
        " + + "
        " + + ""+lan.bt.sitedir+"" + + "
        " + + "
        " + + "
        " + + ""+lan.bt.panel_user+"" + + "
        " + + "
        " + + "
        " + + ""+lan.bt.panel_pass+"" + + "
        " + + "
        "+ + "
          "+ + "
        • After the directory setting is protected, you need to enter the account password to access it.
        • "+ + "
        • For example, if I set the protection directory /test/ , then I need to enter the account password to access http://aaa.com/test/
        • "+ + "
        "+ + "
        " + }); + $('.btn-colse-guard').click(function () { + form_directory.close(); + }); + $('.btn-submit-guard').click(function() { + var guardData = {}; + guardData['id'] = id; + guardData['name'] = $('input[name="dir_name"]').val(); + guardData['site_dir'] = $('input[name="dir_sitedir"]').val(); + guardData['username'] = $('input[name="dir_username"]').val(); + guardData['password'] = $('input[name="dir_password"]').val(); + if(type){ + bt.site.create_dir_guard(guardData, function (rdata) { + if (rdata.status) { + form_directory.close(); + site.reload() + } + bt.msg(rdata); + }); + }else{ + bt.site.edit_dir_account(guardData, function (rdata) { + if (rdata.status) { + form_directory.close(); + site.reload() + } + bt.msg(rdata); + }); + } + }); + setTimeout(function(){ + if(!type){ + $('input[name="dir_name"]').attr('disabled', 'disabled'); + $('input[name="dir_sitedir"]').attr('disabled', 'disabled'); + } + },500) + }, set_301_old:function(web){ bt.site.get_domains(web.id,function(rdata){ @@ -1912,7 +2129,7 @@ var site = { }, { field: 'type', title: lan.site.status, index: true, templet: function (item) { - return '' + (item.type == 1 ? ''+lan.site.running_text+'' : ''+lan.site.already_stop+'') + '' + return '' + (item.type == 1 ? ''+lan.site.running_text+'' : ''+lan.site.already_stop+'') + '' } }, { @@ -2213,11 +2430,11 @@ var site = { } : '', { field: 'type', title: lan.site.status, index: true, templet: function (item) { - return '' + (item.type == 1 ? ''+lan.site.running_text+'' : ''+lan.site.already_stop+'') + '' + return '' + (item.type == 1 ? ''+lan.site.running_text+'' : ''+lan.site.already_stop+'') + '' } }, { - field: 'dname', title: lan.site.operate, align: 'right', templet: function (item) { + field: 'dname', title: lan.site.operate, align: 'right', templet: function (item) { var proxyname = item.proxyname; var sitename = item.sitename; item = JSON.stringify(item).myReplace('"', '\''); @@ -2382,7 +2599,16 @@ var site = { return; } } else { + if (ret.msg) { + if (typeof (ret.msg) == 'string') { + ret.msg = [ret.msg, ""]; + } + } if (!ret.out) { + if (callback) { + callback(ret); + return; + } bt.msg(ret); return; } @@ -2398,7 +2624,7 @@ var site = { if (index == undefined) index = 0 var _sel = $('.site-menu p.bgw'); - if (_sel.length == 0) _sel = $('.site-menu p:eq(0)'); + if (_sel.length == 0) _sel = $('.site-menu p:eq(0)'); _sel.trigger('click'); }, plugin_firewall: function () { @@ -2447,6 +2673,7 @@ var site = { { title: lan.site.domain_man, callback: site.edit.set_domains }, { title: lan.site.site_menu_1, callback: site.edit.set_dirbind }, { title: lan.site.site_menu_2, callback: site.edit.set_dirpath }, + { title: lan.site.site_menu_13, callback: site.edit.set_dirguard }, { title: lan.site.site_menu_3, callback: site.edit.limit_network }, { title: lan.site.site_menu_4, callback: site.edit.get_rewrite_list }, { title: lan.site.site_menu_5, callback: site.edit.set_default_index }, diff --git a/BTPanel/static/js/soft.js b/BTPanel/static/js/soft.js index c4833ad0..58c4edb4 100644 --- a/BTPanel/static/js/soft.js +++ b/BTPanel/static/js/soft.js @@ -216,7 +216,7 @@ var soft = { option = '' + lan.soft.uninstall + ''; } else { - option = '\' + lan.not_comp + \''; + option = '' + lan.soft.not_comp + ''; } } else if (rdata.apache24 && item.name == 'php-5.2') { @@ -224,7 +224,7 @@ var soft = { option = '' + lan.soft.uninstall + ''; } else { - option = '\' + lan.not_comp + \''; + option = '' + lan.soft.not_comp + ''; } } else { @@ -598,7 +598,7 @@ var soft = { title: name + lan.soft.admin, closeBtn: 2, shift: 0, - content: '
        ' + content: '
        ' }); var menu = $('.bt-soft-menu').data("data", rdata); setTimeout(function () { @@ -703,7 +703,7 @@ var soft = { matchBrackets: true, }); editor.focus(); - $(".CodeMirror-scroll").css({ "height": "350px", "margin": 0, "padding": 0 }); + $(".CodeMirror-scroll").css({ "height": "510px", "margin": 0, "padding": 0 }); $("#OnlineEditFileBtn").click(function () { $("#textBody").text(editor.getValue()); bt.soft.save_config(fileName, editor.getValue()) @@ -1015,7 +1015,7 @@ var soft = { '+ lan.soft.mysql_log_bin + ' ' + ToSize(rdata.msg) + '\ \

        '+ lan.soft.mysql_log_err + '

        \ - \ + \

        ' $(".soft-man-con").html(limitCon); @@ -1058,7 +1058,7 @@ var soft = { logs.msg = ''; } if (logs.msg == '') logs.msg = lan.soft.no_slow_log; - var phpCon = ''; + var phpCon = ''; $(".soft-man-con").html(phpCon); var ob = document.getElementById('error_log'); ob.scrollTop = ob.scrollHeight; @@ -1269,12 +1269,23 @@ var soft = { }) break; case 'phpmyadmin_safe': - var sdata = $('.bt-soft-menu').data('data'); - var con = '
        \ - '+ lan.soft.pma_port + '\ + var sdata = $('.bt-soft-menu').data('data'),sslPortNum =''; + var con = '
        \ + '+ lan.soft.pma_port + '\ \ \
        \ +
        \ + Open SSL\ + \ + \ + \ +
        \ +
        \ + SSL port\ + \ + \ +
        \
        \ '+ lan.soft.pma_pass + '\ \ @@ -1288,22 +1299,53 @@ var soft = {

        \
        \
        • '+ lan.soft.pma_ps + '
        '; + $(".soft-man-con").html(con); if (sdata.ext.port) { $(".user_pw").show(); } + + function get_phpmyadmin_ssl(){ + var loading = bt.load('Getting SSL Status...'); + bt.send('get_phpmyadmin_ssl','ajax/get_phpmyadmin_ssl',{},function(tdata){ + loading.close(); + $('#ssl_safe_checkbox').prop("checked",tdata.status); + $('#sslport').val(tdata.port) + }) + } + get_phpmyadmin_ssl() $('.phpmyadmin_port').click(function () { var pmport = $("#pmport").val(); - if (!bt.check_port(pmport)) { - layer.msg(lan.firewall.port_err, { icon: 2 }); - return; - } var loadT = bt.load(lan.public.the); bt.send('setPHPMyAdmin', 'ajax/setPHPMyAdmin', { port: pmport }, function (rdata) { loadT.close(); bt.msg(rdata); }) }) + $('.ssl_safe_label').click(function (){ + var stat = $('#ssl_safe_checkbox').prop("checked"); + bt.send('set_phpmyadmin_ssl','ajax/set_phpmyadmin_ssl',{v: !stat? 1:0},function(rdata){ + bt.msg(rdata) + }) + setTimeout(function () { + get_phpmyadmin_ssl(); + }, 500) + + }) + $('.ssl_port_button').click(function (){ + var sslPort = $('#sslport').val(); + if (!bt.check_port(sslPort)) { + layer.msg(lan.firewall.port_err, { icon: 2 }); + return; + } + var loadTo = bt.load(lan.public.the); + if(sslPort > 0){ + bt.send('change_phpmyadmin_ssl_port','ajax/change_phpmyadmin_ssl_port',{port: sslPort},function(rdata) { + loadTo.close(); + bt.msg(rdata); + }) + } + }) $('.phpmyadmin_safe').click(function () { var stat = $("#phpmyadminsafe").prop("checked"); if (stat) { @@ -1316,7 +1358,7 @@ var soft = { $('.phpmyadmin_safe_save').click(function () { set_phpmyadmin('get'); }) - + function set_phpmyadmin(msg) { var type = 'password'; if (msg == 'close') { @@ -1351,7 +1393,7 @@ var soft = { case 'set_php_config': bt.soft.php.get_config(version, function (rdata) { - $(".soft-man-con").empty().append('
        '); + $(".soft-man-con").empty().append('
        '); var list = []; for (var i = 0; i < rdata.libs.length; i++) { @@ -1548,7 +1590,7 @@ var soft = { if (disable_functions[i] == '') continue; list.push({ name: disable_functions[i] }) } - var _bt_form = $("
        ") + var _bt_form = $("
        ") var tabCon = $(".soft-man-con").empty().append(_bt_form); var _line = bt.render_form_line({ title: '', items: [ @@ -1568,7 +1610,7 @@ var soft = { }, '', _bt_form) bt.render_clicks(_line.clicks); - _bt_form.append("
        ") + _bt_form.append("
        ") var _tab = bt.render({ table: '#blacktable', data: list, @@ -1731,6 +1773,7 @@ var soft = { ''+ (version != '52'?'':'') + (version != '73'?'':'')+ + ''+ ''+ '
        '+ '
        '+ @@ -1794,6 +1837,10 @@ var soft = { $('[name="ip"]').val('127.0.0.1'); $('[name="port"]').val('11211'); break; + case 'memcached': + $('[name="ip"]').val('127.0.0.1'); + $('[name="port"]').val('11211'); + break; } }); $('.btn_conf_save').click(function(){ @@ -1827,13 +1874,18 @@ var soft = { $('[name="port"]').attr('disabled',false); $('[name="passwd"]').attr('disabled','disabled').val(''); break; + case 'memcached': + $('[name="ip"]').attr('disabled',false); + $('[name="port"]').attr('disabled',false); + $('[name="passwd"]').attr('disabled','disabled').val(''); + break; } } }); break case 'get_fpm_logs': bt.soft.php.get_fpm_logs(version, function (logs) { - var phpCon = ''; + var phpCon = ''; $(".soft-man-con").html(phpCon); var ob = document.getElementById('error_log'); ob.scrollTop = ob.scrollHeight; @@ -1841,7 +1893,7 @@ var soft = { break; case 'get_slow_logs': bt.soft.php.get_slow_logs(version, function (logs) { - var phpCon = ''; + var phpCon = ''; $(".soft-man-con").html(phpCon); var ob = document.getElementById('error_log'); ob.scrollTop = ob.scrollHeight; diff --git a/BTPanel/static/language/English/public.json b/BTPanel/static/language/English/public.json index 1e9d956d..d49356cb 100644 --- a/BTPanel/static/language/English/public.json +++ b/BTPanel/static/language/English/public.json @@ -490,7 +490,7 @@ "INPUT_REPLACE_CONTENT": "Please enter the content to be replaced", "REP_CON_CANT_SAMEAS_BEREP_CON": "The content to replace cannot be the same as the content to be replaced", "CLEAR_CACHE":"#Clear cache", - "NGINX_PROXY_REP": "Referenced reverse proxy rule, if commented, the configured reverse proxy will be invalid", + "NGINX_PROXY_REP": "#Referenced reverse proxy rule, if commented, the configured reverse proxy will be invalid", "NGINX_PROXY_EXIST_ERR": "A global reverse proxy already exists in the rewrite/nginx master configuration/vhost file", "PROXY_WAS_STOP": "Proxy suspended", "NGINX_PERSISTENCE": "#Persistent connection related configuration", diff --git a/BTPanel/static/language/English/template.json b/BTPanel/static/language/English/template.json index a193fb49..719764c7 100644 --- a/BTPanel/static/language/English/template.json +++ b/BTPanel/static/language/English/template.json @@ -355,7 +355,7 @@ "N3":"Account", "N4":"Password", "N5":"Password", - "N6":"Passowrd", + "N6":"Password", "N7":"Verification Code", "N8":"Verification Code Error", "N9":"Verification Error", diff --git a/BTPanel/templates/default/files.html b/BTPanel/templates/default/files.html index daaafe28..e43be537 100644 --- a/BTPanel/templates/default/files.html +++ b/BTPanel/templates/default/files.html @@ -31,7 +31,7 @@ - +
        ";function c(v,w,x){v.operation(function(){for(var z=b(v,w);z.findNext();){if(typeof w!="string"){var y=v.getRange(z.from(),z.to()).match(w);z.replace(x.replace(/\$(\d)/g,function(A,B){return y[B]}))}else{z.replace(x)}}})}function r(v,x){if(v.getOption("readOnly")){return}var y=v.getSelection()||s(v).lastQuery;var w=x?"全部替换:":"替换:";p(v,w+a,w,y,function(z){if(!z){return}z=h(z);p(v,g,"更换:","",function(D){D=i(D);if(x){c(v,z,D)}else{q(v);var C=b(v,z,v.getCursor("from"));var B=function(){var F=C.from(),E;if(!(E=C.findNext())){C=b(v,z);if(!(E=C.findNext())||(F&&C.from().line==F.line&&C.from().ch==F.ch)){return}}v.setSelection(C.from(),C.to());v.scrollIntoView({from:C.from(),to:C.to()});l(v,o,"替换?",[function(){A(E)},B,function(){c(v,z,D)}])};var A=function(E){C.replace(typeof z=="string"?D:D.replace(/\$(\d)/g,function(F,G){return E[G]}));B()};B()}})})}n.commands.find=function(v){q(v);m(v)};n.commands.findPersistent=function(v){q(v);m(v,false,true)};n.commands.findPersistentNext=function(v){m(v,false,true,true)};n.commands.findPersistentPrev=function(v){m(v,true,true,true)};n.commands.findNext=m;n.commands.findPrev=function(v){m(v,true)};n.commands.clearSearch=q;n.commands.replace=r;n.commands.replaceAll=function(v){r(v,true)}});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror"],a)}else{a(CodeMirror)}}})(function(a){var b=a.Pos;function c(k,i,l,g){this.atOccurrence=false;this.doc=k;if(g==null&&typeof i=="string"){g=false}l=l?k.clipPos(l):b(0,0);this.pos={from:l,to:l};if(typeof i!="string"){if(!i.global){i=new RegExp(i.source,i.ignoreCase?"ig":"g")}this.matches=function(p,t){if(p){i.lastIndex=0;var m=k.getLine(t.line).slice(0,t.ch),r=0,o,s;for(;;){i.lastIndex=r;var q=i.exec(m);if(!q){break}o=q;s=o.index;r=o.index+(o[0].length||1);if(r==m.length){break}}var n=(o&&o[0].length)||0;if(!n){if(s==0&&m.length==0){o=undefined}else{if(s!=k.getLine(t.line).length){n++}}}}else{i.lastIndex=t.ch;var m=k.getLine(t.line),o=i.exec(m);var n=(o&&o[0].length)||0;var s=o&&o.index;if(s+n!=m.length&&!n){n=1}}if(o&&n){return{from:b(t.line,s),to:b(t.line,s+n),match:o}}}}else{var e=i;if(g){i=i.toLowerCase()}var f=g?function(m){return m.toLowerCase()}:function(m){return m};var j=i.split("\n");if(j.length==1){if(!i.length){this.matches=function(){}}else{this.matches=function(o,q){if(o){var p=k.getLine(q.line).slice(0,q.ch),m=f(p);var n=m.lastIndexOf(i);if(n>-1){n=d(p,m,n);return{from:b(q.line,n),to:b(q.line,n+e.length)}}}else{var p=k.getLine(q.line).slice(q.ch),m=f(p);var n=m.indexOf(i);if(n>-1){n=d(p,m,n)+q.ch;return{from:b(q.line,n),to:b(q.line,n+e.length)}}}}}}else{var h=e.split("\n");this.matches=function(n,p){var t=j.length-1;if(n){if(p.line-(j.length-1)=1;--m,--o){if(j[m]!=f(k.getLine(o))){return}}var u=k.getLine(o),q=u.length-h[0].length;if(f(u.slice(q))!=j[0]){return}return{from:b(o,q),to:s}}else{if(p.line+(j.length-1)>k.lastLine()){return}var u=k.getLine(p.line),q=u.length-h[0].length;if(f(u.slice(q))!=j[0]){return}var r=b(p.line,q);for(var o=p.line+1,m=1;mh){--f}else{return f}}}}a.defineExtension("getSearchCursor",function(f,g,e){return new c(this.doc,f,g,e)});a.defineDocExtension("getSearchCursor",function(f,g,e){return new c(this,f,g,e)});a.defineExtension("selectMatches",function(g,f){var e=[];var h=this.getSearchCursor(g,this.getCursor("from"),f);while(h.findNext()){if(a.cmpPos(h.to(),this.getCursor("to"))>0){break}e.push({anchor:h.from(),head:h.to()})}if(e.length){this.setSelections(e,0)}})});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"),require("../dialog/dialog"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror","../dialog/dialog"],a)}else{a(CodeMirror)}}})(function(a){function b(e,i,g,j,h){if(e.openDialog){e.openDialog(i,h,{value:j,selectValueOnOpen:true})}else{h(prompt(g,j))}}var d='Jump to line: (Use line:column or scroll% syntax)';function c(e,g){var f=Number(g);if(/^[-+]/.test(g)){return e.getCursor().line+f}else{return f-1}}a.commands.jumpToLine=function(e){var f=e.getCursor();b(e,d,"Jump to line:",(f.line+1)+":"+f.ch,function(i){if(!i){return}var h;if(h=/^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(i)){e.setCursor(c(e,h[1]),Number(h[2]))}else{if(h=/^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(i)){var g=Math.round(e.lineCount()*Number(h[1])/100);if(/^[-+]/.test(h[1])){g=f.line+g+1}e.setCursor(g-1,f.ch)}else{if(h=/^\s*\:?\s*([\+\-]?\d+)\s*/.exec(i)){e.setCursor(c(e,h[1]),f.ch)}}}})};a.keyMap["default"]["Alt-G"]="jumpToLine"});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"),require("./searchcursor"),require("../scroll/annotatescrollbar"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror","./searchcursor","../scroll/annotatescrollbar"],a)}else{a(CodeMirror)}}})(function(b){b.defineExtension("showMatchesOnScrollbar",function(g,f,e){if(typeof e=="string"){e={className:e}}if(!e){e={}}return new c(this,g,f,e)});function c(e,j,i,h){this.cm=e;this.options=h;var f={listenForChanges:false};for(var k in h){f[k]=h[k]}if(!f.className){f.className="CodeMirror-search-match"}this.annotation=e.annotateScrollbar(f);this.query=j;this.caseFold=i;this.gap={from:e.firstLine(),to:e.lastLine()+1};this.matches=[];this.update=null;this.findMatches();this.annotation.update(this.matches);var g=this;e.on("change",this.changeHandler=function(l,m){g.onChange(m)})}var d=1000;c.prototype.findMatches=function(){if(!this.gap){return}for(var g=0;g=this.gap.to){break}if(f.to.line>=this.gap.from){this.matches.splice(g--,1)}}var h=this.cm.getSearchCursor(this.query,b.Pos(this.gap.from,0),this.caseFold);var e=this.options&&this.options.maxMatches||d;while(h.findNext()){var f={from:h.from(),to:h.to()};if(f.from.line>=this.gap.to){break}this.matches.splice(g++,0,f);if(this.matches.length>e){break}}this.gap=null};function a(e,g,f){if(e<=g){return e}return Math.max(g,e+f)}c.prototype.onChange=function(k){var l=k.from.line;var e=b.changeEnd(k).line;var f=e-k.to.line;if(this.gap){this.gap.from=Math.min(a(this.gap.from,l,f),k.from.line);this.gap.to=Math.max(a(this.gap.to,l,f),k.from.line)}else{this.gap={from:k.from.line,to:e+1}}if(f){for(var h=0;h=n.options.minChars){b(m,q,false,n.options.style)}})}function g(m,r,q){var o=m.getRange(r,q);if(o.match(/^\w+$/)!==null){if(r.ch>0){var p={line:r.line,ch:r.ch-1};var n=m.getRange(p,r);if(n.match(/\W/)===null){return false}}if(q.chv.cursorCoords(H,"window").top){(w=G).style.opacity=0.4}})};d(v,u,B,A,function(E,G){var D=n.keyName(E);var F=n.keyMap[v.getOption("keyMap")][D];if(!F){F=v.getOption("extraKeys")[D]}if(F=="findNext"||F=="findPrev"||F=="findPersistentNext"||F=="findPersistentPrev"){n.e_stop(E);t(v,s(v),G);v.execCommand(F)}else{if(F=="find"||F=="findPersistent"){n.e_stop(E);A(G,E)}}});if(z&&B){t(v,C,B);f(v,y)}}else{p(v,u,"Search for:",B,function(D){if(D&&!C.query){v.operation(function(){t(v,C,D);C.posFrom=C.posTo=v.getCursor();f(v,y)})}})}}function f(v,w,x){v.operation(function(){var y=s(v);var z=b(v,y.query,w?y.posFrom:y.posTo);if(!z.find(w)){z=b(v,y.query,w?n.Pos(v.lastLine()):n.Pos(v.firstLine(),0));if(!z.find(w)){return}}v.setSelection(z.from(),z.to());v.scrollIntoView({from:z.from(),to:z.to()},20);y.posFrom=z.from();y.posTo=z.to();if(x){x(z.from(),z.to())}})}function q(v){v.operation(function(){var w=s(v);w.lastQuery=w.query;if(!w.query){return}w.query=w.queryText=null;v.removeOverlay(w.overlay);if(w.annotate){w.annotate.clear();w.annotate=null}})}var a=' (Use /re/ syntax for regexp search)';var g='To: ';var o="replace? ";function c(v,w,x){v.operation(function(){for(var z=b(v,w);z.findNext();){if(typeof w!="string"){var y=v.getRange(z.from(),z.to()).match(w);z.replace(x.replace(/\$(\d)/g,function(A,B){return y[B]}))}else{z.replace(x)}}})}function r(v,x){if(v.getOption("readOnly")){return}var y=v.getSelection()||s(v).lastQuery;var w=x?"Replace all:":"replace:";p(v,w+a,w,y,function(z){if(!z){return}z=h(z);p(v,g,"Change:","",function(D){D=i(D);if(x){c(v,z,D)}else{q(v);var C=b(v,z,v.getCursor("from"));var B=function(){var F=C.from(),E;if(!(E=C.findNext())){C=b(v,z);if(!(E=C.findNext())||(F&&C.from().line==F.line&&C.from().ch==F.ch)){return}}v.setSelection(C.from(),C.to());v.scrollIntoView({from:C.from(),to:C.to()});l(v,o,"replace?",[function(){A(E)},B,function(){c(v,z,D)}])};var A=function(E){C.replace(typeof z=="string"?D:D.replace(/\$(\d)/g,function(F,G){return E[G]}));B()};B()}})})}n.commands.find=function(v){q(v);m(v)};n.commands.findPersistent=function(v){q(v);m(v,false,true)};n.commands.findPersistentNext=function(v){m(v,false,true,true)};n.commands.findPersistentPrev=function(v){m(v,true,true,true)};n.commands.findNext=m;n.commands.findPrev=function(v){m(v,true)};n.commands.clearSearch=q;n.commands.replace=r;n.commands.replaceAll=function(v){r(v,true)}});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror"],a)}else{a(CodeMirror)}}})(function(a){var b=a.Pos;function c(k,i,l,g){this.atOccurrence=false;this.doc=k;if(g==null&&typeof i=="string"){g=false}l=l?k.clipPos(l):b(0,0);this.pos={from:l,to:l};if(typeof i!="string"){if(!i.global){i=new RegExp(i.source,i.ignoreCase?"ig":"g")}this.matches=function(p,t){if(p){i.lastIndex=0;var m=k.getLine(t.line).slice(0,t.ch),r=0,o,s;for(;;){i.lastIndex=r;var q=i.exec(m);if(!q){break}o=q;s=o.index;r=o.index+(o[0].length||1);if(r==m.length){break}}var n=(o&&o[0].length)||0;if(!n){if(s==0&&m.length==0){o=undefined}else{if(s!=k.getLine(t.line).length){n++}}}}else{i.lastIndex=t.ch;var m=k.getLine(t.line),o=i.exec(m);var n=(o&&o[0].length)||0;var s=o&&o.index;if(s+n!=m.length&&!n){n=1}}if(o&&n){return{from:b(t.line,s),to:b(t.line,s+n),match:o}}}}else{var e=i;if(g){i=i.toLowerCase()}var f=g?function(m){return m.toLowerCase()}:function(m){return m};var j=i.split("\n");if(j.length==1){if(!i.length){this.matches=function(){}}else{this.matches=function(o,q){if(o){var p=k.getLine(q.line).slice(0,q.ch),m=f(p);var n=m.lastIndexOf(i);if(n>-1){n=d(p,m,n);return{from:b(q.line,n),to:b(q.line,n+e.length)}}}else{var p=k.getLine(q.line).slice(q.ch),m=f(p);var n=m.indexOf(i);if(n>-1){n=d(p,m,n)+q.ch;return{from:b(q.line,n),to:b(q.line,n+e.length)}}}}}}else{var h=e.split("\n");this.matches=function(n,p){var t=j.length-1;if(n){if(p.line-(j.length-1)=1;--m,--o){if(j[m]!=f(k.getLine(o))){return}}var u=k.getLine(o),q=u.length-h[0].length;if(f(u.slice(q))!=j[0]){return}return{from:b(o,q),to:s}}else{if(p.line+(j.length-1)>k.lastLine()){return}var u=k.getLine(p.line),q=u.length-h[0].length;if(f(u.slice(q))!=j[0]){return}var r=b(p.line,q);for(var o=p.line+1,m=1;mh){--f}else{return f}}}}a.defineExtension("getSearchCursor",function(f,g,e){return new c(this.doc,f,g,e)});a.defineDocExtension("getSearchCursor",function(f,g,e){return new c(this,f,g,e)});a.defineExtension("selectMatches",function(g,f){var e=[];var h=this.getSearchCursor(g,this.getCursor("from"),f);while(h.findNext()){if(a.cmpPos(h.to(),this.getCursor("to"))>0){break}e.push({anchor:h.from(),head:h.to()})}if(e.length){this.setSelections(e,0)}})});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"),require("../dialog/dialog"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror","../dialog/dialog"],a)}else{a(CodeMirror)}}})(function(a){function b(e,i,g,j,h){if(e.openDialog){e.openDialog(i,h,{value:j,selectValueOnOpen:true})}else{h(prompt(g,j))}}var d='Jump to line: (Use line:column or scroll% syntax)';function c(e,g){var f=Number(g);if(/^[-+]/.test(g)){return e.getCursor().line+f}else{return f-1}}a.commands.jumpToLine=function(e){var f=e.getCursor();b(e,d,"Jump to line:",(f.line+1)+":"+f.ch,function(i){if(!i){return}var h;if(h=/^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(i)){e.setCursor(c(e,h[1]),Number(h[2]))}else{if(h=/^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(i)){var g=Math.round(e.lineCount()*Number(h[1])/100);if(/^[-+]/.test(h[1])){g=f.line+g+1}e.setCursor(g-1,f.ch)}else{if(h=/^\s*\:?\s*([\+\-]?\d+)\s*/.exec(i)){e.setCursor(c(e,h[1]),f.ch)}}}})};a.keyMap["default"]["Alt-G"]="jumpToLine"});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"),require("./searchcursor"),require("../scroll/annotatescrollbar"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror","./searchcursor","../scroll/annotatescrollbar"],a)}else{a(CodeMirror)}}})(function(b){b.defineExtension("showMatchesOnScrollbar",function(g,f,e){if(typeof e=="string"){e={className:e}}if(!e){e={}}return new c(this,g,f,e)});function c(e,j,i,h){this.cm=e;this.options=h;var f={listenForChanges:false};for(var k in h){f[k]=h[k]}if(!f.className){f.className="CodeMirror-search-match"}this.annotation=e.annotateScrollbar(f);this.query=j;this.caseFold=i;this.gap={from:e.firstLine(),to:e.lastLine()+1};this.matches=[];this.update=null;this.findMatches();this.annotation.update(this.matches);var g=this;e.on("change",this.changeHandler=function(l,m){g.onChange(m)})}var d=1000;c.prototype.findMatches=function(){if(!this.gap){return}for(var g=0;g=this.gap.to){break}if(f.to.line>=this.gap.from){this.matches.splice(g--,1)}}var h=this.cm.getSearchCursor(this.query,b.Pos(this.gap.from,0),this.caseFold);var e=this.options&&this.options.maxMatches||d;while(h.findNext()){var f={from:h.from(),to:h.to()};if(f.from.line>=this.gap.to){break}this.matches.splice(g++,0,f);if(this.matches.length>e){break}}this.gap=null};function a(e,g,f){if(e<=g){return e}return Math.max(g,e+f)}c.prototype.onChange=function(k){var l=k.from.line;var e=b.changeEnd(k).line;var f=e-k.to.line;if(this.gap){this.gap.from=Math.min(a(this.gap.from,l,f),k.from.line);this.gap.to=Math.max(a(this.gap.to,l,f),k.from.line)}else{this.gap={from:k.from.line,to:e+1}}if(f){for(var h=0;h=n.options.minChars){b(m,q,false,n.options.style)}})}function g(m,r,q){var o=m.getRange(r,q);if(o.match(/^\w+$/)!==null){if(r.ch>0){var p={line:r.line,ch:r.ch-1};var n=m.getRange(p,r);if(n.match(/\W/)===null){return false}}if(q.chTo display the panel API key, click the reset button to regain the new API key.
        Note: After the key is reset, the associated key product will be invalid. Please re-add the new key to the product.',{icon:0,time:0,shadeClose:true,shade:0.1}); +} -function SetPanelApi(t_type) { +function SetPanelApi(t_type,index) { var pdata = {} pdata['t_type'] = t_type if (t_type == 3) { pdata['limit_addr'] = $("textarea[name='api_limit_addr']").val() } - var loadT = layer.msg(lan.config.is_submitting, { icon: 16, time: 0, shade: [0.3, '#000'] }); - $.post('/config?action=set_token', pdata, function (rdata) { - if (t_type == 1) { - if (rdata.status) { - $("input[name='panel_token_value']").val(rdata.msg); - layer.msg(lan.config.create_int_key_success, { icon: 1, time: 0, shade: 0.3, shadeClose:true }); - return; - } - } - - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + if(t_type == 1){ + var bdinding = layer.confirm('Are you sure you want to reset your current key?
        After the key is reset, the associated key product will be invalid. Please re-add the new key to the product.',{ + btn:['Confirm','Cancel'], + icon:3, + closeBtn: 2, + title:'Reset key' + },function(){ + var loadT = layer.msg(lan.config.is_submitting, { icon: 16, time: 0, shade: [0.3, '#000'] }); + set_token_req(pdata,function(rdata){ + if (rdata.status) { + $("input[name='panel_token_value']").val(rdata.msg); + layer.msg(lan.config.create_int_key_success, { icon: 1, time: 0, shade: 0.3, shadeClose:true,closeBtn:2}); + }else{ + layer.msg(rdata.msg, { icon: 2}); + } + return false; + }); + }); + return false + } + set_token_req(pdata,function(rdata){ + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); if (rdata.msg == lan.config.open_successfully) { - GetPanelApi(); + if(t_type == 2 && index != '0') GetPanelApi(); } - }) + }); } +function set_token_req(pdata,callback){ + $.post('/config?action=set_token', pdata, function (rdata) { + if(callback) callback(rdata); + }); +} + + + function SetIPv6() { var loadT = layer.msg(lan.config.setting_up, { icon: 16, time: 0, shade: [0.3, '#000'] }); $.post('/config?action=set_ipv6_status', {}, function (rdata) { diff --git a/BTPanel/static/js/crontab.js b/BTPanel/static/js/crontab.js index 9b450fd1..be587558 100644 --- a/BTPanel/static/js/crontab.js +++ b/BTPanel/static/js/crontab.js @@ -819,7 +819,7 @@ function toBackup(type){ \ '+lan.crontab.save_num+'\
        '; - if (sType == 'sites') { + if (sType == 'sites' && sMsg !== lan.crontab.backup_log) { sBody += '

        \

        '+lan.crontab.exclusion_rule+'
        \
        '; - $("#fileCon").removeClass("fileList").html(tablehtml); - $("#tipTools").width($("#fileCon").width()); - } - else{ - $("#fileCon").addClass("fileList").html(Body); - $("#tipTools").width($("#fileCon").width()); - } - $("#DirPathPlace input").val(rdata.PATH); - var BarTools = '
        \ + $("#fileCon").removeClass("fileList").html(tablehtml); + $("#tipTools").width($("#fileCon")[0].clientWidth - 20); + } + else { + $("#fileCon").addClass("fileList").html(Body); + $("#tipTools").width($("#fileCon")[0].clientWidth - 20); + } + $("#DirPathPlace input").val(rdata.PATH); + var BarTools = '
        \ \ @@ -600,9 +600,9 @@ function GetFiles(Path,sort) { } $("#Batch").html(BatchTools); $("#setBox").prop("checked", false); - + $("#BarTools").html(BarTools); - + $("input[name=id]").click(function(){ if($(this).prop("checked")) { $(this).prop("checked", true); @@ -631,7 +631,7 @@ function GetFiles(Path,sort) { if ($(this).prop("checked")) { $("input[name=id]").prop("checked", true); $("#filesBody > tr").addClass("ui-selected"); - + } else { $("input[name=id]").prop("checked", false); $("#filesBody > tr").removeClass("ui-selected"); @@ -690,13 +690,13 @@ function auto_table_width(){ }); if(oldTable_heigth > oldTable){ $('.oldTableShadow,.newTableShadow').show(); - $('.oldTable').css('marginTop','-8px') + $('.oldTable').css('marginTop','0') }else{ $('.oldTableShadow,.newTableShadow').hide(); $('.oldTable').css('marginTop','0') } $('.oldTable').height(oldTable); - $('.oldTable table').css({'marginTop':'-39px'}) + $('.oldTable table').css({ 'marginTop': '-36px' }) } @@ -757,22 +757,22 @@ function showSeclect(){ $("#Batch").html(BatchTools); } } -$("#tipTools").width($(".file-box").width()); -$("#PathPlaceBtn").width($(".file-box").width()-700); -$("#DirPathPlace input").width($(".file-box").width()-700); -if($(window).width()<1160){ - $("#PathPlaceBtn").width(290); +$("#tipTools").width($(".file-box")[0].clientWidth); +$("#PathPlaceBtn").width($(".file-box").width() - 700); +$("#DirPathPlace input").width($(".file-box").width() - 700); +if ($(window).width() < 1160) { + $("#PathPlaceBtn").width(290); } -window.onresize = function(){ - $("#tipTools").width($(".file-box").width()-30); - $("#PathPlaceBtn").width($(".file-box").width()-700); - $("#DirPathPlace input").width($(".file-box").width()-700); - if($(window).width()<1160){ - $("#PathPlaceBtn,#DirPathPlace input").width(290); - } - PathLeft(); - IsDiskWidth() - auto_table_width(); +window.onresize = function () { + $("#tipTools").width($(".file-box")[0].clientWidth); + $("#PathPlaceBtn").width($(".file-box").width() - 700); + $("#DirPathPlace input").width($(".file-box").width() - 700); + if ($(window).width() < 1160) { + $("#PathPlaceBtn,#DirPathPlace input").width(290); + } + PathLeft(); + IsDiskWidth() + auto_table_width(); } function Batch(type,access){ var path = $("#DirPathPlace input").val(); @@ -781,9 +781,9 @@ function Batch(type,access){ var data='path='+path+'&type='+type; var name = 'data'; var datas = [] - + var oldType = getCookie('BatchPaste'); - + for(var i=0;i"+lan.public.the+"
        ",{icon:16,time:0,shade: [0.3, '#000']}); setTimeout(function(){getSpeed('.myspeed');},1000); $.post('/files?action=SetBatchData',data,function(rdata){ @@ -835,14 +836,14 @@ function BatchPaste(){ var path = $("#DirPathPlace input").val(); var type = getCookie('BatchPaste'); var data = 'type='+type+'&path='+path; - + $.post('/files?action=CheckExistsFiles',{dfile:path},function(result){ if(result.length > 0){ var tbody = ''; for(var i=0;i'+ToSize(result[i].size)+''+getLocalTime(result[i].mtime)+''; } - var mbody = '
        \ + var mbody = '
        '+lan.files.file_name+''+lan.files.file_size+''+lan.files.last_edit_time+'
        \ '+tbody+'\
        '+lan.files.file_name+''+lan.files.file_size+''+lan.files.last_edit_time+'
        '; SafeMessage(lan.files.will_cover_this_file,mbody,function(){ @@ -854,7 +855,7 @@ function BatchPaste(){ } }); } - + function BatchPasteTo(data,path){ myloadT = layer.msg("
        "+lan.public.the+"
        ",{icon:16,time:0,shade: [0.3, '#000']}); setTimeout(function(){getSpeed('.myspeed');},1000); @@ -866,7 +867,7 @@ function BatchPasteTo(data,path){ }); } function GetExtName(fileName){ - var extArr = fileName.split("."); + var extArr = fileName.split("."); var exts = ['folder','folder-unempty','sql','c','cpp','cs','flv','css','js','htm','html','java','log','mht','php','url','xml','ai','bmp','cdr','gif','ico','jpeg','jpg','JPG','png','psd','webp','ape','avi','flv','mkv','mov','mp3','mp4','mpeg','mpg','rm','rmvb','swf','wav','webm','wma','wmv','rtf','docx','fdf','potm','pptx','txt','xlsb','xlsx','7z','cab','iso','bz2','rar','zip','gz','bt','file','apk','bookfolder','folder','folder-empty','folder-unempty','fromchromefolder','documentfolder','fromphonefolder','mix','musicfolder','picturefolder','videofolder','sefolder','access','mdb','accdb','sql','c','cpp','cs','js','fla','flv','htm','html','java','log','mht','php','url','xml','ai','bmp','cdr','gif','ico','jpeg','jpg','JPG','png','psd','webp','ape','avi','flv','mkv','mov','mp3','mp4','mpeg','mpg','rm','rmvb','swf','wav','webm','wma','wmv','doc','docm','dotx','dotm','dot','rtf','docx','pdf','fdf','ppt','pptm','pot','potm','pptx','txt','xls','csv','xlsm','xlsb','xlsx','7z','gz','cab','iso','rar','zip','bt','file','apk','css']; var extLastName = extArr[extArr.length - 1]; for(var i=0; i\
        \ @@ -1114,7 +1115,7 @@ function ExecShell(action){ else{ layer.msg(rdata.msg,{icon:rdata.status?1:2}); } - + }); return; } @@ -1122,7 +1123,7 @@ function ExecShell(action){ type: 1, shift: 5, closeBtn: 2, - area: ['70%','600px'], + area: ['70%','600px'], title: lan.files.shell_title, content: '
        \
        \ @@ -1134,7 +1135,7 @@ function ExecShell(action){ setTimeout(function(){ outTimeGet(); },1000); - + } var outTime = null; @@ -1171,7 +1172,7 @@ function ReName(type, fileName) { type: 1, shift: 5, closeBtn: 2, - area: '320px', + area: '320px', title: lan.files.file_menu_rename, content: '
        \
        \ @@ -1250,7 +1251,7 @@ function PasteTo(path,copyName,cutName,fileName){ setCookie('cutFileName', null); return; } - + if (cutName != 'null' && cutName != undefined) { layer.msg(lan.files.mv_the, { icon: 16, @@ -1298,13 +1299,13 @@ function Zip(dirName,submits) { }); return } - + param = dirName; if(dirName.indexOf(',') != -1){ tmp = path.split('/') dirName = path + '/' + tmp[tmp.length-1] } - + var layers = layer.open({ type: 1, shift: 5, @@ -1336,7 +1337,7 @@ function Zip(dirName,submits) { $("#dfile").val(dirName + '.' + z_type); }); },100); - + } function UnZip(fileName,type) { var path = $("#DirPathPlace input").val(); @@ -1354,7 +1355,7 @@ function UnZip(fileName,type) { }); return } - + type = (type == 1) ? 'tar':'zip' var umpass = ''; if(type == 'zip'){ @@ -1459,7 +1460,7 @@ function UploadFiles() { type:1, closeBtn: 2, title:lan.files.up_title, - area: ['500px','500px'], + area: ['500px','500px'], shadeClose:false, content:'
        \ \ @@ -1497,9 +1498,9 @@ function SetChmod(action,fileName){ }); return; } - + var toExec = fileName == lan.files.all?'Batch(3,1)':'SetChmod(1,\''+fileName+'\')'; - + $.post('/files?action=GetFileAccess','filename='+encodeURIComponent(fileName),function(rdata){ var layers = layer.open({ type:1, @@ -1552,7 +1553,7 @@ function SetChmod(action,fileName){ $("#access").keyup(function(){ onAccess(); }); - + $("input[type=checkbox]").change(function(){ var idName = ['owner','group','public']; var onacc = ''; @@ -1564,15 +1565,15 @@ function SetChmod(action,fileName){ onacc += access; } $("#access").val(onacc); - + }); }) - + } function onAccess(){ var access = $("#access").val(); - var idName = ['owner','group','public']; + var idName = ['owner','group','public']; for(var n=0;n':' | '); } - layer.tips(d[3] +"
        "+ crs, _this.find('.cicle'), { time: 0, tips: [1, '#999'] }); + layer.tips(d[3] + "
        " + d[5] + " CPU, " + d[4] + " Core, " + d[4]+" Thread
        "+ crs, _this.find('.cicle'), { time: 0, tips: [1, '#999'] }); }, function () { layer.closeAll('tips'); }); @@ -230,7 +230,7 @@ var index = { var load_arr = [{ title: lan.index.run_block, val: 100, color: '#dd2f00' }, { title: lan.index.run_slow, val: 90, color: '#ff9900' }, { title: lan.index.run_normal, val: 70, color: '#20a53a' }, { title: lan.index.run_fluent, val: 30, color: '#20a53a' }]; var _cpubox = $('.cpubox'), _membox = $('.membox'), _loadbox = $('.loadbox') - index.set_val(_cpubox, { usage: net.cpu[0], title: net.cpu[1] + ' ' + lan.index.cpu_core, items: pub_arr }) + index.set_val(_cpubox, { usage: net.cpu[0], title: net.cpu[1]+' '+lan.index.cpu_core, items: pub_arr }) index.set_val(_membox, { usage: (net.mem.memRealUsed * 100 / net.mem.memTotal).toFixed(1), items: pub_arr, title: net.mem.memRealUsed + '/' + net.mem.memTotal + '(MB)' }) bt.set_cookie('memSize', net.mem.memTotal) @@ -262,6 +262,11 @@ var index = { $("#messageError").show(); $("#messageError").append('

        ' + lan.index.user_warning + ' ['+lan.index.cant_ignore+'] ['+lan.index.edit_now+']

        ') } + + if (info.isport === true) { + $("#messageError").show(); + $("#messageError").append('

        '+lan.index.panel_port_tips+' ['+lan.index.panel_port_tip2+'] ['+lan.index.panel_port_tip3+']

        ') + } var _system = info.system; $("#info").html(_system); $("#running").html(info.time); @@ -302,6 +307,11 @@ var index = { arr.push({ title: lan.index.already_use, value: item.inodes[1] }) arr.push({ title: lan.index.available, value: item.inodes[2] }) arr.push({ title: lan.index.inode_percent, value: item.inodes[3] }) + arr.push({ title: 'Capacity information', value: '' }) + arr.push({ title: 'Capacity', value: item.size[0] }) + arr.push({ title: 'Used', value: item.size[1] }) + arr.push({ title: 'Available', value: item.size[2] }) + arr.push({ title: 'Usage rate', value: item.size[3] }) obj.masks = arr; data.items.push(obj) } @@ -446,7 +456,9 @@ var index = { }) }, check_update: function () { + var _load = bt.load('Getting updates, please wait...'); bt.system.check_update(function (rdata) { + _load.close(); if (rdata.status === false) { if (!rdata.msg.beta) { bt.msg(rdata); diff --git a/BTPanel/static/js/public.js b/BTPanel/static/js/public.js index ddfa2b0a..12bd73c0 100644 --- a/BTPanel/static/js/public.js +++ b/BTPanel/static/js/public.js @@ -339,11 +339,11 @@ var aceEditor = { break; // 搜索 case 'searchs': - + editor_item.ace.execCommand('find'); break; // 替换 case 'replaces': - + editor_item.ace.execCommand('replace'); break; // 字体 case 'fontSize': @@ -2574,254 +2574,204 @@ function scroll_handle(e){ var scrollTop = this.scrollTop; $(this).find("thead").css({"transform":"translateY("+scrollTop+"px)","position":"relative","z-index":"1"}); } -var clipboard, interval, socket, gterm, ssh_login,term_box; +var clipboard, interval, socket, term, ssh_login,term_box; var pdata_socket = { x_http_token: document.getElementById("request_token_head").getAttribute('token') } -function ssh_login_def() { - pdata_socket['data'] = {}; - pdata_socket['data']['ssh_user'] = $("input[name='ssh_user']").val(); - pdata_socket['data']['ssh_passwd'] = $("input[name='ssh_passwd']").val(); - if (!pdata_socket.data.ssh_user || !pdata_socket.data.ssh_passwd) { - layer.msg('The SSH username and password cannot be empty!'); - return; - } - - layer.close(ssh_login); - socket.emit('webssh', pdata_socket); - gterm.focus(); -} - function web_shell() { var termCols = 100; - var termRows = 29; - var sendTotal = 0; - if(!socket)socket = io.connect(); - var term = new Terminal({ cols: termCols, rows: termRows, screenKeys: true, useStyle: true}); - term.open(); - gterm = term + var termRows = 34; + if (!socket) connect_io() + term = new Terminal({ cols: termCols, rows: termRows, screenKeys: true, useStyle: true }); term.setOption('cursorBlink', true); - socket.on('server_response', function (data) { - if (data.data == "Failed to connect to SSH service!\r\n") { - if ($("input[name='ssh_user']").attr('autocomplete')) return; - var s_body = '
        \ -
        Username
        \ -
        Password
        \ -
        '; - ssh_login = layer.open({ - type: 1, - title: 'Please enter the SSH login account and password', - area: "500px", - closeBtn: 0, - shadeClose: false, - content: s_body - }); - - setTimeout(function removeReadonly() { - $("input[name='ssh_user']").removeAttr('readonly'); - $("input[name='ssh_passwd']").removeAttr('readonly'); - $("input[name='ssh_user']").focus(); - - $("input[name='ssh_passwd']").keydown(function (e) { - if (e.keyCode == 13) { - $('.ssh-login').click(); - } - }); - - }, 500); - return; - } - - term.write(data.data); - - if (data.data == '\r\n'+lan.public.logout+'\r\n' || data.data == lan.public.logout+'\r\n' || data.data == '\r\nlogout\r\n' || data.data == 'logout\r\n') { - setTimeout(function () { - layer.close(term_box); - }, 500); - } - }); - - if (socket) { - socket.emit('connect_event', ''); - interval = setInterval(function () { - socket.emit('connect_event', ''); - }, 1000); - } - - term.on('data', function (data) { - pdata_socket['data'] = data; - socket.emit('webssh', pdata_socket); - }); - - term_box = layer.open({ type: 1, - title: lan.public.bt_terminal, - area: ['920px','640px'], + title: 'aaPanel terminal', + area: ['920px', '630px'], closeBtn: 2, shadeClose: false, - content: '
        \ -
        \ -
        \ +
        \ +

        Only support login to this server

        \ +
        '; + ssh_login = layer.open({ + type: 1, + title: is_config?'Please fill in the SSH connection configuration':'Please enter the SSH login account and password', + area: "500px", + closeBtn: 0, + shadeClose: false, + content: s_body + }); - $(".shellbutton").click(function () { - var tobj = $("textarea[name='ssh_copy']"); - var ptext = tobj.val(); - tobj.val(''); - if ($(this).text().indexOf('Alt') != -1) { - ptext +="\n"; - } - pdata_socket['data'] = ptext; - socket.emit('webssh', pdata_socket); - term.focus(); - }) - $("textarea[name='ssh_copy']").keydown(function (e) { - if (e.ctrlKey && e.keyCode == 13) { - $(".shell_btn_1").click(); - } else if (e.altKey && e.keyCode == 13) { - $(".shell_btn_1").click(); + setTimeout(function removeReadonly() { + $("input[name='ssh_user']").removeAttr('readonly'); + $("input[name='ssh_passwd']").removeAttr('readonly'); + $("input[name='ssh_passwd']").focus(); + + $("input[name='ssh_passwd']").keydown(function (e) { + if (e.keyCode == 13) { + $('.ssh-login').click(); } }); - }, 100) + }, 500); } -function shell_translate_text() { - remove_ssh_menu(); - var selectText = getCookie('ssh_selection'); - var loadT = layer.msg(lan.public.translate_now, { icon: 16, time: 1000 * 60, }); - $.get('https://www.bt.cn/api/index/fanyi', { query: selectText }, function (rdata) { - layer.close(loadT); - layer.msg(lan.public.original + rdata.src + '
        '+ lan.public.translation + rdata.dst, { time: 1000 * 10, shadeClose: true, shade: 0.01 }); - }, 'JSONP'); - gterm.focus(); + +function pass_check() { + $("#pass_check").attr("class", "ssh_check_s2"); + $("#rsa_check").attr("class", "ssh_check_s1"); + $(".ssh_pkey").hide(); + $(".ssh_passwd").show(); } -function shell_to_baidu() { - var selectText = getCookie('ssh_selection'); - remove_ssh_menu(); - window.open('https://www.baidu.com/s?wd=' + selectText) - gterm.focus(); +function rsa_check() { + $("#pass_check").attr("class", "ssh_check_s1"); + $("#rsa_check").attr("class", "ssh_check_s2"); + $(".ssh_pkey").show(); + $(".ssh_passwd").hide(); } -function shell_paste_text() { - pdata_socket['data'] = getCookie('ssh_selection') - socket.emit('webssh', pdata_socket); - remove_ssh_menu(); - gterm.focus(); -} +function send_ssh_info() { + pdata = { + host: $("input[name='ssh_host']").val(), + port: Number($("input[name='ssh_port']").val()), + password: $("input[name='ssh_passwd']").val(), + username: $("input[name='ssh_user']").val(), + pkey: $("textarea[name='ssh_pkey']").val() + } + if (pdata['host'] !== '127.0.0.1' && pdata['host'] !== 'localhost') { + layer.msg("Connection address can only be [ 127.0.0.1 or localhost ]"); + $("input[name='ssh_host']").focus(); + return; + } + if (pdata['port'] < 1 || pdata['port'] > 65535) { + layer.msg("Port range is incorrect [1-65535]"); + $("input[name='ssh_port']").focus(); + return; + } + if (!pdata['username']) { + layer.msg("Username can not be empty!"); + $("input[name='ssh_user']").focus(); + return; + } + + if ($("#rsa_check").attr("class") === "ssh_check_s2") { + pdata['c_type'] = 'True' + if (!pdata['pkey']) { + layer.msg("Private key cannot be empty!"); + $("input[name='ssh_pkey']").focus(); + return; + } + } else { + if (!pdata['password']) { + layer.msg("Password can not be blank!"); + $("input[name='ssh_passwd']").focus(); + return; + } + } + if ($("#ssh_is_save").prop("checked")) { + pdata['is_save'] = '1'; + } + + var loadT = layer.msg('Trying to log in to SSH...', { icon: 16, time: 0, shade: 0.3 }); + $.post("/term_open", { data: JSON.stringify(pdata) }, function () { + layer.close(loadT) + socket.emit('webssh', pdata); + layer.close(ssh_login) + term.focus(); + }) + -function remove_ssh_menu() { - $(".contextmenu").remove(); } + diff --git a/BTPanel/static/js/public_backup.js b/BTPanel/static/js/public_backup.js index 9b6be90d..aa6f6ceb 100644 --- a/BTPanel/static/js/public_backup.js +++ b/BTPanel/static/js/public_backup.js @@ -463,13 +463,15 @@ var bt = //会话失效时自动跳转到登录页面 if (typeof (rdata) == 'string') { - if (rdata.indexOf('/static/favicon.ico') != -1 && rdata.indexOf('/static/img/qrCode.png') != -1) { + if ((rdata.indexOf('/static/favicon.ico') != -1 && rdata.indexOf('/static/img/qrCode.png') != -1) || rdata.indexOf('') === 0) { window.location.href = "/login" return } } + if(callback) callback(rdata); - }).error(function () { + }).error(function (e, f) { + // console.log(e,f) if(callback) callback('error'); }); } @@ -3975,10 +3977,11 @@ bt.soft = {
        ' }); }, - update_soft: function (name,title, version, min_version) { + update_soft: function (name,title, version, min_version,update_msg) { var _this = this; var msg = "
      • "+lan.public_backup.update_tips+"
      • "; if(name == 'mysql') msg = "
        • "+lan.public_backup.db_update_tips+"
        • "+lan.public_backup.update_tips1+"
        • "+lan.public_backup.update_tips+"
        "; + if (update_msg) msg += '
        Update description:
        ' + update_msg.replace(/(_bt_)/g, "\n") +'

        '; bt.show_confirm(lan.public_backup.update+'[' + title + ']', lan.public_backup.update_tips2.replace('{1}',title).replace('{2}',version).replace('{3}',min_version),function(){ var loadT = bt.load(lan.public_backup.update_tips3.replace('{1}',title).replace('{2}',version).replace('{3}',min_version)); bt.send('install_plugin', 'plugin/install_plugin', { sName: name, version: version, upgrade: version }, function (rdata) { diff --git a/BTPanel/static/js/site.js b/BTPanel/static/js/site.js index a41ac8eb..68f19910 100644 --- a/BTPanel/static/js/site.js +++ b/BTPanel/static/js/site.js @@ -6,6 +6,7 @@ var site = { if (type == '-1' || type == undefined) { type = $('.site_type select').val(); } + if (!search) search = $("#SearchValue").val(); bt.site.get_list(page, search, type, function (rdata) { $('.dataTables_paginate').html(rdata.page); var data = rdata.data; @@ -1581,6 +1582,12 @@ var site = { var area_size = '500px'; var err_info = ""; + if (!new_data.msg[1].challenges[1]) { + if (new_data.msg[1].challenges[0]) { + new_data.msg[1].challenges[1] = new_data.msg[1].challenges[0] + } + } + if (ldata.msg[1].status === 'invalid') { area_size = '600px'; var trs = $("#dns_txt_jx tbody tr"); @@ -1617,6 +1624,11 @@ var site = { site.reload(); bt.msg(ret); } else { + if (!ret.msg[1].challenges[1]) { + if (ret.msg[1].challenges[0]) { + ret.msg[1].challenges[1] = ret.msg[1].challenges[0] + } + } var area_size = '500px'; var err_info = ""; diff --git a/BTPanel/static/js/soft.js b/BTPanel/static/js/soft.js index b36c352b..4587e0b5 100644 --- a/BTPanel/static/js/soft.js +++ b/BTPanel/static/js/soft.js @@ -1,9 +1,10 @@ var soft = { is_install: false, get_list: function (page, type, search) { - if (page == undefined) page = 0; - if (type == undefined) type = 0; - + if (page == undefined || page == 'null' || page == 'undefined') page = 0; + if (type == undefined || type == 'null' || type == 'undefined') type = 0; + if (!search) search = $("#SearchValue").val(); + if (search == undefined || search == 'null' || search == 'undefined' || search == '') search = undefined; var _this = this; var istype = getCookie('softType'); if (istype == 'undefined' || istype == 'null' || !istype) { @@ -235,7 +236,8 @@ var soft = { var min_version = item.versions[i] var ret = bt.check_version(item.version, min_version.m_version + '.' + min_version.version); if (ret > 0) { - if (ret == 2) option += '' + lan.soft.update + ' | '; + if (!min_version.update_msg) min_version.update_msg = ''; + if (ret == 2) option += '' + lan.soft.update + ' | '; break; } } @@ -243,7 +245,8 @@ var soft = { else { var min_version = item.versions[0]; var cloud_version = min_version.m_version + '.' + min_version.version; - if (item.version != cloud_version) option += '' + lan.soft.update + ' | '; + if (!min_version.update_msg) min_version.update_msg = ''; + if (item.version != cloud_version) option += '' + lan.soft.update + ' | '; } if (item.admin) { option += '' + lan.soft.setup + ' | '; @@ -288,7 +291,7 @@ var soft = { bt.set_cookie('load_search', search) if (soft.is_install) { setTimeout(function () { - soft.get_list(page + 'not_load', type, search); + soft.get_list(bt.get_cookie('load_page') + 'not_load', bt.get_cookie('load_type'), bt.get_cookie('load_search')); }, 3000); } }) diff --git a/BTPanel/static/language/English/template.json b/BTPanel/static/language/English/template.json index 719764c7..df3d2373 100644 --- a/BTPanel/static/language/English/template.json +++ b/BTPanel/static/language/English/template.json @@ -170,7 +170,9 @@ "BASICAUTH":"BasicAuth", "BASICAUTH_TIPS1":"Used for BasicAuth authentication configuration", "CONFIG":"Set", - "BASICAUTH_TIPS2":"Add a BasicAuth-based authentication service to the panel to prevent the panel from being swept" + "BASICAUTH_TIPS2":"Add a BasicAuth-based authentication service to the panel to prevent the panel from being swept", + "S_PORT_TIPS":"Note: For servers with security groups, please release the new port in the security group in advance." + }, "close":{ diff --git a/BTPanel/templates/default/config.html b/BTPanel/templates/default/config.html index e7af4f35..46442406 100644 --- a/BTPanel/templates/default/config.html +++ b/BTPanel/templates/default/config.html @@ -53,7 +53,7 @@
        - Google authentication + Google authentication
        @@ -79,7 +79,7 @@

        {{data['lan']['C1']}}

        {{data['lan']['CT2']}} - {{data['lan']['CY2']}} + {{data['lan']['CY2']}}, {{data['lan']['S_PORT_TIPS']}}
        {{data['lan']['concurrent_thread']}} diff --git a/BTPanel/templates/default/database.html b/BTPanel/templates/default/database.html index b1cc5296..3a15be76 100644 --- a/BTPanel/templates/default/database.html +++ b/BTPanel/templates/default/database.html @@ -56,7 +56,7 @@ {% if not data['isSetup'] %} layer.msg('{{data["lan"]["JS1"]}}{{data["lan"]["JS2"]}}',{icon:7,shade: [0.3, '#000'],time:0}); - $(".layui-layer-shade").css("margin-left", "200px"); + $(".layui-layer-shade").css("margin-left", "180px"); {% else %} database.get_list(); {% endif %} diff --git a/BTPanel/templates/default/files.html b/BTPanel/templates/default/files.html index e43be537..bb406e53 100644 --- a/BTPanel/templates/default/files.html +++ b/BTPanel/templates/default/files.html @@ -64,8 +64,8 @@ Save Save All Refresh - + Search + Replace Font Theme Help diff --git a/BTPanel/templates/default/firewall.html b/BTPanel/templates/default/firewall.html index f0de1522..80d4f22f 100644 --- a/BTPanel/templates/default/firewall.html +++ b/BTPanel/templates/default/firewall.html @@ -229,7 +229,8 @@

        {{data['lan']['H4']}}

        }) }, get_list:function(page,search){ - if(page==undefined) page=1; + if (page == undefined) page = 1; + if (!search) search = $("#SearchValue").val(); bt.firewall.get_list(page, search, function (rdata) { $('.firewallBody').html(rdata.page); var ports_ps = {"80": lan.firewall.site_default_port, "3306": lan.firewall.mysql_default_port, "888": lan.firewall.phpmmyadmin_default_port, "22": lan.firewall.ssh_default_port, "20": lan.firewall.ftp1_default_port, "21": lan.firewall.ftp_default_port, "39000-40000": lan.firewall.ftp2_default_port, "30000-40000": lan.firewall.ftp2_default_port,"11211":lan.firewall.mem_default_port,"873":lan.firewall.rsync_default_port,"8888":lan.firewall.bt_default_port} diff --git a/BTPanel/templates/default/ftp.html b/BTPanel/templates/default/ftp.html index 0d3fd396..44f5716b 100644 --- a/BTPanel/templates/default/ftp.html +++ b/BTPanel/templates/default/ftp.html @@ -42,7 +42,8 @@ var ftp = { get_list:function(page,search){ - if(page==undefined) page=1; + if (page == undefined) page = 1; + if (!search) search = $("#SearchValue").val(); bt.ftp.get_list(page,search,function(rdata){ $('.dataTables_paginate').html(rdata.page); var _tab = bt.render({ @@ -165,7 +166,7 @@ bt.set_cookie('sites_path',"{{session['config']['sites_path']}}"); {% if not data['isSetup'] %} layer.msg('{{data["lan"]["JS1"]}}{{data["lan"]["JS2"]}}',{icon:7,time:0,shade: [0.3, '#000']}); - $(".layui-layer-shade").css("margin-left", "200px"); + $(".layui-layer-shade").css("margin-left", "180px"); {% else %} ftp.get_list(); {% endif %} diff --git a/BTPanel/templates/default/index.html b/BTPanel/templates/default/index.html index ad873c40..2e722a7a 100644 --- a/BTPanel/templates/default/index.html +++ b/BTPanel/templates/default/index.html @@ -22,7 +22,7 @@ {{data['lan']['RESTART']}}
        -
        +
        @@ -76,7 +76,7 @@

        {{data['lan']['S2']}}

        -
        +
        {{data['lan']['Overview']}}
        @@ -99,7 +99,7 @@

        {{data['lan']['S2']}}

        -
        +
        {{data['lan']['P4']}}
        @@ -112,7 +112,7 @@

        {{data['lan']['S2']}}

        -
        +
        {{data['lan']['FLOW']}}

        {{data['lan']['UPLOAD']}}

        {{data['lan']['S2']}}
        diff --git a/BTPanel/templates/default/layout.html b/BTPanel/templates/default/layout.html index 3644c515..fad8d4d0 100644 --- a/BTPanel/templates/default/layout.html +++ b/BTPanel/templates/default/layout.html @@ -8,7 +8,7 @@ {{g.title}} - + + + + +
        {{data['lan']['TIMEOUT']}} diff --git a/BTPanel/templates/default/error.html b/BTPanel/templates/default/error.html index 6a213b36..4242784b 100644 --- a/BTPanel/templates/default/error.html +++ b/BTPanel/templates/default/error.html @@ -8,6 +8,6 @@

        {1}

        {2}


        -
        {3} 6.x {4}
        +
        {3} {4}
        \ No newline at end of file diff --git a/BTPanel/templates/default/error2.html b/BTPanel/templates/default/error2.html index 9f80547c..16933b20 100644 --- a/BTPanel/templates/default/error2.html +++ b/BTPanel/templates/default/error2.html @@ -10,6 +10,6 @@

        {1}

        {3}

        {4}


        -
        {5} 6.x {6}
        +
        {5} {6}
        \ No newline at end of file diff --git a/BTPanel/templates/default/files.html b/BTPanel/templates/default/files.html index bb406e53..254ad2b7 100644 --- a/BTPanel/templates/default/files.html +++ b/BTPanel/templates/default/files.html @@ -68,6 +68,7 @@ Replace Font Theme + Set Help
        @@ -77,13 +78,14 @@
        Favorites
          +
        • Back to previous
        • - +
          • - +
        @@ -182,15 +183,15 @@ - + - + - - - - - - - - \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/Temmoku_MVC.png b/BTPanel/static/img/dep_ico/Temmoku_MVC.png deleted file mode 100644 index 79c801fc2846ad2a50fa28a54b65ca36c849df85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9297 zcmaKS1yEei_U7OO4^DtEKyY^tGXxLr?t>3AxH|-Q4-!HkxVw9BhoHd|G&sRw$@{t+g10r)cL+X-F>S2^tm@eMM(x5;}r$~0Kk@$l~jAqE&e{}sLyZsW{SphM&=@= zkv9+J6`%A-Hqp2Cp)kTcvS=0X+0u=rqS_kKUPt)^+ad?=*Ik?z4{|@ONK}E&?zbF*? zA8BV7HOT+g_y0-ktlNyaEB`Tjh{Ln3 zJ3SjUZaTFL00112lLTvcEFBuY(9n=+sW7s3BedYjOK4(or2b~T0{Wu58Pt?$!JBcI zWMRb3F*Wq2)?z$UP|lK`C*yEPAvIz%kxM#8zt0efT^5-T?>VW2ICy<-Tt0qUW@co+ zT0KHd8WO2I$P#Yc`}MuNtWP6C9oq?AYwp%mbJZT6^5X42@uploK7Op2#D@;rTiHEq}Kqc(6>@#zf zWs~M^xdHMW#q z0~p^_NJTW3dEWe4ZoL1qJ*1WsfQQb6cs7hnmXP9#2d);%w#@_HI#}rp9YS> zsSas&$J$$os^2>>Zh^{$Q-ZFx^*o?*Vv_*&w)uS*TP%Kk;H(L$PWa*m`iC79A0s`z z&eoQe$bA4sbTHz^Ns%bs?a=Va;OchG;{8-xw#Ztb_?XIa(-1*;G^t3l#fw+3OX-#m ze`Nabo6{Hbzgk1(j2`4wQKWb&jQuq@JRq`+P!Iak z?IN2LB3a-0EVJK|D_0AQ_93CfbgfB7fX8Cy=zHmy3xU?jOUPY_Hkq$5f>N|HDG*#4 zTsAl9W$5_0^zg)S!0|i$COaffPG!kXyvcgkN@hDym~yr-oe({Jt+L8wot@UfV%CQb z&u6ytg@XW# za!(gYp#PbL+H{STOk4vJuoQ-D#d)AO)S}M3z8s(AMCjui+h?$$MguIzClxytw}tq; z;PqT%X6=e2NICj}LH|VqOh7>Ocy*y(Y#&RF$fLetfQ)OKdUU9y& ztFlkQTS1??^9zR@(Sy|NxD&$xKVIS~%9sTOlWzqDXWk*BWd=w<*Rz@rPbi{#KcfVp z^DfzgO(an3g|Y*48TmLJ>$||xwumB4C5g^WZ7T7jCDZU zt|#K%Q_{9j737b5SZojG;Z9_W$TOtFQz^cv#0*kV(>UwTsdpmx(!msRd>BZ{XlY%9 z#o)}ZC{jT&-zrkMyiss1VeXL)JliU5Uc<;Qq;y_&$nLa6=N!4_&QGl?XO&ap4xO@H?@kY$zv~z+q^wtYJUD3>CE;u5}?r? z)g1||PJZKJs+_LuUPJ`4i^|QNloZLI(af}vRN{|y*PW!{$aGJm6`tpLes0$%pEzD& z@vDY+OCwA=1uQgGMZIJCwOwp-{qQw@Qgj`a2QH22gr2^+3)JhvYGe`ou#h�T1W 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 diff --git a/BTPanel/static/img/dep_ico/ThinkPHP-5.0.png b/BTPanel/static/img/dep_ico/ThinkPHP-5.0.png deleted file mode 100644 index a05a9c514da0d7e0fdd757bdbb1655655f1ed094..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7222 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 Ef?e9rjQ{`u diff --git a/BTPanel/static/img/dep_ico/URLshorting.png b/BTPanel/static/img/dep_ico/URLshorting.png deleted file mode 100644 index 671865735fd04183c6d92d8618d7a1873afe0419..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70907 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 Ds-7c8 diff --git a/BTPanel/static/img/dep_ico/YoungxjTools.png b/BTPanel/static/img/dep_ico/YoungxjTools.png deleted file mode 100644 index 41084e188f73482838f770cc15e58fd8f9a143b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165662 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 YDX`jf->6HEE1AS4W-6a9vGlwD2T|Dcr~m)} diff --git a/BTPanel/static/img/dep_ico/ZFAKA.png b/BTPanel/static/img/dep_ico/ZFAKA.png deleted file mode 100644 index 37a9c0a9..00000000 --- a/BTPanel/static/img/dep_ico/ZFAKA.png +++ /dev/null @@ -1,562 +0,0 @@ - - - - - - - - - - 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 - - - - - - - - - - -
        - - - - - - -
        -
        宝塔邀请大使赠送您
        -
        3188元礼包
        -
        立即领取
        -
        -
        -
        - -
        -
        -
        - -
        -
        -

        免费加入宝塔邀请大使,帮助他人同时还能赚钱

        立即免费加入
        -
        -
        - 尊云,价格厚道的云服务器,6核10G,99元 -
        - -
        -
        -
        -

        远程桌面连接工具

        -

        下载

        -
        -
        -
        -
        -

        Linux面板命令大全

        -

        查看

        -
        -
        -
        -
        -

        IDC推荐

        -

        查看

        -
        -
        -
        -
        -
        -
        -
        -

        宝塔币商城

        -

        查看

        -
        -
        -
        -
        -

        宝塔跑分排行榜

        -

        查看

        -
        -
        -
        -
        - -
        - 宝塔运维 - 付费运维已停止接单,论坛可免费求助 -
        - 点击查看 -
        -
        - -
        - 开发者中心 - 诚邀开发者入驻,让创作更有价值 -
        - 点击查看 -
        -
        -
        -
        -
        - -
        -
        -

        合作伙伴

        -

        申请IDC定制版合作

        -
        -
        - 尊云 - 唯一网络 - DNS - - 亚洲诚信 - 阿里云 - 京东云 - 又拍云 - 网堤安全 -
        -
        - - - -
        - - -
        - - -
        - - -
        - - - - - - - - - \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/bfz.png b/BTPanel/static/img/dep_ico/bfz.png deleted file mode 100644 index 1ed88c89..00000000 --- a/BTPanel/static/img/dep_ico/bfz.png +++ /dev/null @@ -1,561 +0,0 @@ - - - - - - - - - - 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 - - - - - - - - - - -
        - - - - - - -
        -
        宝塔邀请大使赠送您
        -
        3188元礼包
        -
        立即领取
        -
        -
        -
        -

        免费加入宝塔邀请大使,帮助他人同时还能赚钱

        立即免费加入
        - -
        -
        -
        - -
        -
        -
        -
        - 尊云,价格厚道的云服务器,6核10G,99元 -
        - -
        -
        -
        -

        远程桌面连接工具

        -

        下载

        -
        -
        -
        -
        -

        Linux面板命令大全

        -

        查看

        -
        -
        -
        -
        -

        IDC推荐

        -

        查看

        -
        -
        -
        -
        -
        -
        -
        -

        宝塔币商城

        -

        查看

        -
        -
        -
        -
        -

        宝塔跑分排行榜

        -

        查看

        -
        -
        -
        -
        - -
        - 宝塔运维 - 付费运维已停止接单,论坛可免费求助 -
        - 点击查看 -
        -
        - -
        - 开发者中心 - 诚邀开发者入驻,让创作更有价值 -
        - 点击查看 -
        -
        -
        -
        -
        - -
        -
        -

        合作伙伴

        -

        申请IDC定制版合作

        -
        -
        - 尊云 - 唯一网络 - DNS - - 亚洲诚信 - 阿里云 - 京东云 - 又拍云 - 网堤安全 -
        -
        - - - -
        - - -
        - - -
        - - -
        - - - - - - - - - \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/bty.png b/BTPanel/static/img/dep_ico/bty.png deleted file mode 100644 index 9a3521045d81d078a4a77bc63650bc1d75a6045e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67646 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 diff --git a/BTPanel/static/img/dep_ico/chengxuxia.png b/BTPanel/static/img/dep_ico/chengxuxia.png deleted file mode 100644 index f8bd87f44e46be5d3dee7381a887804eb547f6b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6047 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 V{0Y%Mmnr%S-NMv{QoPY4=0EGJ#0CHW diff --git a/BTPanel/static/img/dep_ico/codeigniter.png b/BTPanel/static/img/dep_ico/codeigniter.png deleted file mode 100644 index a61f163022b70ae20a247aaebe0ef4aa0cb533f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7760 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 U6 - - - - - - - - - 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 - - - - - - - - - - -
        - - - - - - -
        -
        宝塔邀请大使赠送您
        -
        3188元礼包
        -
        立即领取
        -
        -
        -
        - -
        -
        -
        - -
        -
        -

        免费加入宝塔邀请大使,帮助他人同时还能赚钱

        立即免费加入
        -
        -
        - 尊云,价格厚道的云服务器,6核10G,99元 -
        - -
        -
        -
        -

        远程桌面连接工具

        -

        下载

        -
        -
        -
        -
        -

        Linux面板命令大全

        -

        查看

        -
        -
        -
        -
        -

        IDC推荐

        -

        查看

        -
        -
        -
        -
        -
        -
        -
        -

        宝塔币商城

        -

        查看

        -
        -
        -
        -
        -

        宝塔跑分排行榜

        -

        查看

        -
        -
        -
        -
        - -
        - 宝塔运维 - 付费运维已停止接单,论坛可免费求助 -
        - 点击查看 -
        -
        - -
        - 开发者中心 - 诚邀开发者入驻,让创作更有价值 -
        - 点击查看 -
        -
        -
        -
        -
        - -
        -
        -

        合作伙伴

        -

        申请IDC定制版合作

        -
        -
        - 尊云 - 唯一网络 - DNS - - 亚洲诚信 - 阿里云 - 京东云 - 又拍云 - 网堤安全 -
        -
        - - - -
        - - -
        - - -
        - - -
        - - - - - - - - - \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/ecshop.png b/BTPanel/static/img/dep_ico/ecshop.png deleted file mode 100644 index 2d7e9a5d5875353f3ffa3be9cef42ff70954cbdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3327 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 diff --git a/BTPanel/static/img/dep_ico/jtbc3.png b/BTPanel/static/img/dep_ico/jtbc3.png deleted file mode 100644 index d872fed9c98be17dfd15d17b4b5a5fd77f4e740b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1486 zcmeAS@N?(olHy`uVBq!ia0vp^20*OA!2~4DpT1KAQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?_nZLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ2+zz*$uBR~ z1grP;werj>E=kNwPW5!LRRWrzmzkMjATTyALtl;P{bldG)xGXdO%EgvITPB2|qOtnA(eg$=W|`V*&#Mlar^5V@SoV zq?8Zq6D52aIuj=}2D0~BWn6Jw%qLZPA)#D=Td(uK^sM;3zcuDvVNQH(*krgsEcop8 z_xAetYAh=ME)*4)U$k=ma$;VP&{CD1iz~hc z3duaVxK&E?$(IW*6C6)9*%p-LuP6=N;-0$Yc31aiMJ0jjGP?`33m@%@e!ri|b&iP3 z@6Akp_p6-xO;|o|Y2mPMnVq|sv*hev_4R9{#hhc9S$@myxu!q6S7xnAiGV>c|gwcxqao=d09^dDj9;*95?wFH?be7o#4PUE$e^-Q`cjDm8hkP3)UXE z!@{$Kqnx|r#9Vj%#wA;q>1^zjnxwfQO~8x6T-~~5W6pU=g_#d>d$sKsS#U&n%$Xg= zp`v)FM4VZn^7lnL1b$ta#)q+|HaJWLN)K@q+gZPl@`c vrz~z2%a&eP(d;H`@@fG%k<75>P&mM_{?}XMUGjZ*K_#rGtDnm{r-UW|;xiCF diff --git a/BTPanel/static/img/dep_ico/lovewall.png b/BTPanel/static/img/dep_ico/lovewall.png deleted file mode 100644 index 9a7188b36fe49e65fa1edb2a81ec7d9dc721a473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1609 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 V5ZbO`Cy)RD002ovPDHLkV1muL`d0t| diff --git a/BTPanel/static/img/dep_ico/qrpay.png b/BTPanel/static/img/dep_ico/qrpay.png deleted file mode 100644 index 3df06a42b4b5d312510724871498ce08fbb6e2f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1935 zcmb_d`8(TN6OU?%rD@BpwPLI4y_Cf6T55@{wX}9hDnV=|cDX^hL~K!_wU<6Y-CB!C z?L}<0Rw!4hmR2n{sHI$6@qYWu`v<(wd!Csy&p9*CnK|>!%qRJtrO8EZ5pEC&bkWQd zVGYPfKN-vc?CBVX5kQ;|F)*_Q11k#bkp!H%0!^JlKp;r>PiE`KzVZMr1wxG+Lk)vH zQK3HA00~=z|dNi-(9pwZ&i;I9n6ahqsUZ+z9qYv;^rDb3R#EEV`J9P-^aUl(fqO~wx`C&`W1 zLo@pIv+9OMS5ZD*x=I}dI;oiH`O$TC<@ramZ$&px*)Iqq`DZ~!f80d%+@mK^2v-cb zq=|gSyfP%AJ3{bhF!cYbs51;@uSo9yX8g4G&31&ZPW<85%uWG2@p^g-P2oUH7q=b& zkjl3P_-l)moiD|HaPu|PIN#dMLL{Tgl7vqjn++z&y%LgR+L8KY;m{X^qG*?1fhi~- zU8R!WJ#mymWjgH57bRJJ9zT&Yt@f%oouTRBQ6+PdBwV~|wRGXo!k`P7lGy0$Y^9oE z@A$NrSRfvi&i=3c1gmsxru3KPy4IlYtF+8{8^Fh~Yz}XHvVog53w!H&4ji}ntYN&A z-@c+MR3Uz>dq##60&NxTdc(HcicdkxQB}$bSxUSD2-m!0O7ZX9WDGornk>Yz330GB zxm6xh(y`>nNV~Z;8<{iqkDEyx&wwZIoLFB2w5I8atwOwy4vC526{m$#D066BAttOC z5|(rWef4iUo>HfL)>O+DC7j@-TVevkZQ4#QTQF!*mz+%%lwS*Pb9`RW)|1LG`1zew zPLtdvz^x_mz5Pj{(hC>*z?M^K$ojn49>k6|x*?TN8(VoPvO1D?$iBW(Ls<6#wPkPJ z{o7`Q+VSPUy{W3xV6uT@?S=+*-F!EAq=dHW%JFo)QV>?cHCW5v0zoXDb`#1qox4nT}P!}E7I?$Fj;!J-)ei3t;vR~^R*RG_%(pg@q5={BH!z67%`|#<>?`+4b zESDiT$(V;K^cB=Z`m|QtOjcikm2g)jR*Ts;iD-f$p}pam8amF~XB*~lmA-eKeLkk0`Uc+1=hV2)`H?>k^6^pKBsl9M9 z@ZMI#?1GW6u?zoNP94HP8YgQG)`Xn`vawJ`2jkY1dY*a{WiBqDnkVs^*cdgP;&ph} z$O@_5-2m-FL~*yur+Hqi1gf*C?nj8zhB|vWf$i`RVkMFxuFGD7ymo{Y{*_jwpF+*7 zVLtbsX2d?3-S`BxlQ>iTvvNs&?tJNwP)6RWC+H>~(oAJGlJWKj+GK|6k~P@aLlnZ6 z90!q(JLU|eEH>00#kdTMKX%YJN$x4q?Ic0<*J>IEk(dgOx3e1upH8@tr-g>=|FBQ2 zsT=sB^mGG-(yh=kttsKhT6QDO`4&A}p1Y!@A;JgYjiShjd)ThyQOhV6i=D;Viey=} z{qSq|^}i`to`{fcq16=2@oSGa^OlJlU3PAxEr~5f9Ke=uKMei$CeyVS$m-Qe*NgAC zW=Qj&<2#z&7rV3bC!3duiq~_+c_|4tnhq8>@mwZ=mUh(UaYGIybi@x5CBC_G-7% o%z?S@YkK|vf&l*o6H*LYWU^0NZoP*T0F59sBTGb$fm_^v0EK6fDgXcg diff --git a/BTPanel/static/img/dep_ico/sentcms.png b/BTPanel/static/img/dep_ico/sentcms.png deleted file mode 100644 index bd70f30f621bbb75dc228624809c9a221c132e0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14500 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 Kyj8gy{=Wc6KFxUm diff --git a/BTPanel/static/img/dep_ico/skm.png b/BTPanel/static/img/dep_ico/skm.png deleted file mode 100644 index 74a38b79..00000000 --- a/BTPanel/static/img/dep_ico/skm.png +++ /dev/null @@ -1,563 +0,0 @@ - - - - - - - - - - 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 - - - - - - - - - - -
        - - - - - - -
        -
        宝塔邀请大使赠送您
        -
        3188元礼包
        -
        立即领取
        -
        -
        -
        - -
        -
        -
        - -
        -
        -

        免费加入宝塔邀请大使,帮助他人同时还能赚钱

        立即免费加入
        -
        -
        - 尊云,价格厚道的云服务器,6核10G,99元 -
        - -
        -
        -
        -

        远程桌面连接工具

        -

        下载

        -
        -
        -
        -
        -

        Linux面板命令大全

        -

        查看

        -
        -
        -
        -
        -

        IDC推荐

        -

        查看

        -
        -
        -
        -
        -
        -
        -
        -

        宝塔币商城

        -

        查看

        -
        -
        -
        -
        -

        宝塔跑分排行榜

        -

        查看

        -
        -
        -
        -
        - -
        - 宝塔运维 - 付费运维已停止接单,论坛可免费求助 -
        - 点击查看 -
        -
        - -
        - 开发者中心 - 诚邀开发者入驻,让创作更有价值 -
        - 点击查看 -
        -
        -
        -
        -
        - -
        -
        -

        合作伙伴

        -

        申请IDC定制版合作

        -
        -
        - 尊云 - 唯一网络 - DNS - - 亚洲诚信 - 阿里云 - 京东云 - 又拍云 - 网堤安全 -
        -
        - - - -
        - - -
        - - -
        - - -
        - - - - - - - - - \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/test.png b/BTPanel/static/img/dep_ico/test.png deleted file mode 100644 index 37a9c0a9..00000000 --- a/BTPanel/static/img/dep_ico/test.png +++ /dev/null @@ -1,562 +0,0 @@ - - - - - - - - - - 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 - - - - - - - - - - -
        - - - - - - -
        -
        宝塔邀请大使赠送您
        -
        3188元礼包
        -
        立即领取
        -
        -
        -
        - -
        -
        -
        - -
        -
        -

        免费加入宝塔邀请大使,帮助他人同时还能赚钱

        立即免费加入
        -
        -
        - 尊云,价格厚道的云服务器,6核10G,99元 -
        - -
        -
        -
        -

        远程桌面连接工具

        -

        下载

        -
        -
        -
        -
        -

        Linux面板命令大全

        -

        查看

        -
        -
        -
        -
        -

        IDC推荐

        -

        查看

        -
        -
        -
        -
        -
        -
        -
        -

        宝塔币商城

        -

        查看

        -
        -
        -
        -
        -

        宝塔跑分排行榜

        -

        查看

        -
        -
        -
        -
        - -
        - 宝塔运维 - 付费运维已停止接单,论坛可免费求助 -
        - 点击查看 -
        -
        - -
        - 开发者中心 - 诚邀开发者入驻,让创作更有价值 -
        - 点击查看 -
        -
        -
        -
        -
        - -
        -
        -

        合作伙伴

        -

        申请IDC定制版合作

        -
        -
        - 尊云 - 唯一网络 - DNS - - 亚洲诚信 - 阿里云 - 京东云 - 又拍云 - 网堤安全 -
        -
        - - - -
        - - -
        - - -
        - - -
        - - - - - - - - - \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/test2.png b/BTPanel/static/img/dep_ico/test2.png deleted file mode 100644 index 37a9c0a9..00000000 --- a/BTPanel/static/img/dep_ico/test2.png +++ /dev/null @@ -1,562 +0,0 @@ - - - - - - - - - - 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 - - - - - - - - - - -
        - - - - - - -
        -
        宝塔邀请大使赠送您
        -
        3188元礼包
        -
        立即领取
        -
        -
        -
        - -
        -
        -
        - -
        -
        -

        免费加入宝塔邀请大使,帮助他人同时还能赚钱

        立即免费加入
        -
        -
        - 尊云,价格厚道的云服务器,6核10G,99元 -
        - -
        -
        -
        -

        远程桌面连接工具

        -

        下载

        -
        -
        -
        -
        -

        Linux面板命令大全

        -

        查看

        -
        -
        -
        -
        -

        IDC推荐

        -

        查看

        -
        -
        -
        -
        -
        -
        -
        -

        宝塔币商城

        -

        查看

        -
        -
        -
        -
        -

        宝塔跑分排行榜

        -

        查看

        -
        -
        -
        -
        - -
        - 宝塔运维 - 付费运维已停止接单,论坛可免费求助 -
        - 点击查看 -
        -
        - -
        - 开发者中心 - 诚邀开发者入驻,让创作更有价值 -
        - 点击查看 -
        -
        -
        -
        -
        - -
        -
        -

        合作伙伴

        -

        申请IDC定制版合作

        -
        -
        - 尊云 - 唯一网络 - DNS - - 亚洲诚信 - 阿里云 - 京东云 - 又拍云 - 网堤安全 -
        -
        - - - -
        - - -
        - - -
        - - -
        - - - - - - - - - \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/tipask.png b/BTPanel/static/img/dep_ico/tipask.png deleted file mode 100644 index 922705e3aa33579a7d086e8066aa7cb7e7004a2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1186 zcmaJ>TWHfz7|y1SITR=E!5eyv6E<0!rk9Lntsad66&(1WS#s8fE;%tdTf6$; zg^G$ksCy86P$ue&7rZc=_Bgj7gDeGtSoDGifQQigX; z!T?3hYgALcxL54tWu!SJo8!!DhHXLxHs=jV&O!|OU|Q9K^oOx=8mLN;-sTfsq7i`^ zwY^}%o=fjmzPG>9dT*9LTp&j;yQU!JV(Fhhe`3eE=UUq$tbT_A!? z2z*YDLw2z&;5aAi^>G~A0^Bav&A7vY*Im58GFf2yXH*%nU1-}U~}*h&o>kV!%d4Vp4Jxc>EaDua)h zP{PPeAv93h#jXs($jTrCM0z;TBucWX+kxg;g(&iI-NKSC!?+NniHB2F72YGbePK^D z=J9b6mW^^@FH1t6)>bd;4uxEvl2$Rvq|y{Ky1aOC>oqctN3kKOJ0xaR)M!j|OF$XG}7aWOtx4D5RxJGcAG z_peslt2aNU@U!!J+l8qPu(x*USr9JPcGs^97n=?doIbK){L84xZ*PY*{`BtM?OUhs z9C&nT`qYC$vHswV*Bh6wO6O=HR4gm^bOjo>zKLBo{}VTre#Za+ diff --git a/BTPanel/static/img/dep_ico/ttttt.png b/BTPanel/static/img/dep_ico/ttttt.png deleted file mode 100644 index 141ead24..00000000 --- a/BTPanel/static/img/dep_ico/ttttt.png +++ /dev/null @@ -1,562 +0,0 @@ - - - - - - - - - - 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 - - - - - - - - - - -
        - - - - - - -
        -
        宝塔邀请大使赠送您
        -
        3188元礼包
        -
        立即领取
        -
        -
        -
        - -
        -
        -
        - -
        -
        -

        免费加入宝塔邀请大使,帮助他人同时还能赚钱

        立即免费加入
        -
        -
        - 尊云,价格厚道的云服务器,6核10G,99元 -
        - -
        -
        -
        -

        远程桌面连接工具

        -

        下载

        -
        -
        -
        -
        -

        Linux面板命令大全

        -

        查看

        -
        -
        -
        -
        -

        IDC推荐

        -

        查看

        -
        -
        -
        -
        -
        -
        -
        -

        宝塔币商城

        -

        查看

        -
        -
        -
        -
        -

        宝塔跑分排行榜

        -

        查看

        -
        -
        -
        -
        - -
        - 宝塔运维 - 付费运维已停止接单,论坛可免费求助 -
        - 点击查看 -
        -
        - -
        - 开发者中心 - 诚邀开发者入驻,让创作更有价值 -
        - 点击查看 -
        -
        -
        -
        -
        - -
        -
        -

        合作伙伴

        -

        申请IDC定制版合作

        -
        -
        - 尊云 - 唯一网络 - DNS - - 亚洲诚信 - 阿里云 - 京东云 - 又拍云 - 网堤安全 -
        -
        - - - -
        - - -
        - - -
        - - -
        - - - - - - - - - \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/wdja.png b/BTPanel/static/img/dep_ico/wdja.png deleted file mode 100644 index 74a38b79..00000000 --- a/BTPanel/static/img/dep_ico/wdja.png +++ /dev/null @@ -1,563 +0,0 @@ - - - - - - - - - - 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 - - - - - - - - - - -
        - - - - - - -
        -
        宝塔邀请大使赠送您
        -
        3188元礼包
        -
        立即领取
        -
        -
        -
        - -
        -
        -
        - -
        -
        -

        免费加入宝塔邀请大使,帮助他人同时还能赚钱

        立即免费加入
        -
        -
        - 尊云,价格厚道的云服务器,6核10G,99元 -
        - -
        -
        -
        -

        远程桌面连接工具

        -

        下载

        -
        -
        -
        -
        -

        Linux面板命令大全

        -

        查看

        -
        -
        -
        -
        -

        IDC推荐

        -

        查看

        -
        -
        -
        -
        -
        -
        -
        -

        宝塔币商城

        -

        查看

        -
        -
        -
        -
        -

        宝塔跑分排行榜

        -

        查看

        -
        -
        -
        -
        - -
        - 宝塔运维 - 付费运维已停止接单,论坛可免费求助 -
        - 点击查看 -
        -
        - -
        - 开发者中心 - 诚邀开发者入驻,让创作更有价值 -
        - 点击查看 -
        -
        -
        -
        -
        - -
        -
        -

        合作伙伴

        -

        申请IDC定制版合作

        -
        -
        - 尊云 - 唯一网络 - DNS - - 亚洲诚信 - 阿里云 - 京东云 - 又拍云 - 网堤安全 -
        -
        - - - -
        - - -
        - - -
        - - -
        - - - - - - - - - \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/wee7.png b/BTPanel/static/img/dep_ico/wee7.png deleted file mode 100644 index b81fad384dfbf32a8dabb6874e1c556cee7f5cb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VG9P)K+$i%sPBWn|Nhg(2h2>2nEs-Q2*hOC z#{s5em!|3g1ts{|(WEjLUjvHVdifPdvax_%wkks(Nb+*907+yp_wW-Sck{*9K$5;b zfP|VD9~-iB;B09@ke?tvuu%~JvN7F0eg7k%_?ojX;j;AgfhaG??M#f=)0K=M2T&FQ zJoQ9jOelTv@n;}wE!geIQuOtKBu2_Xb_+xnlDZ7#_>iT5?Byq)14&TcMFsTrfjCC` zdHeM@&_Tl7tUyv490wjcB0x4Imfn8@$#S!SO3m|+KLJThKyM$Q=iZa|J^&r%r3*?k zkW?fFPH7OAp1SuD$S?rM$DhBL;SW+pUmqan;eY=@E;@Z5I^u+IIO3P+SO{KOjzywUP!hTDRPVaN#6=05clrA{uby8NLqUI z4ipp0qFg}o<_l1bcJ%gpAQ@vR1tcLrQG^r5M4@T!14jSJ=YTeT{sC$oQ5Qh!JDU4| t1=9YauG=A|(W_+#DPd^QzN1s?8UO~@gMtC#eg^;m002ovPDHLkV1lvS`LO^1 diff --git a/BTPanel/static/img/dep_ico/wordpress.png b/BTPanel/static/img/dep_ico/wordpress.png deleted file mode 100644 index d22715ea6acc91353ad7104114822f2445f3b625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23042 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 BUn>9r diff --git a/BTPanel/static/img/dep_ico/wp.png b/BTPanel/static/img/dep_ico/wp.png deleted file mode 100644 index 8daf9e16..00000000 --- a/BTPanel/static/img/dep_ico/wp.png +++ /dev/null @@ -1,562 +0,0 @@ - - - - - - - - - - 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 - - - - - - - - - - -
        - - - - - - -
        -
        宝塔邀请大使赠送您
        -
        3188元礼包
        -
        立即领取
        -
        -
        -
        -

        免费加入宝塔邀请大使,帮助他人同时还能赚钱

        立即免费加入
        - -
        -
        -
        - -
        -
        -
        -
        - 尊云,价格厚道的云服务器,6核10G,99元 -
        - -
        -
        -
        -

        远程桌面连接工具

        -

        下载

        -
        -
        -
        -
        -

        Linux面板命令大全

        -

        查看

        -
        -
        -
        -
        -

        IDC推荐

        -

        查看

        -
        -
        -
        -
        -
        -
        -
        -

        宝塔币商城

        -

        查看

        -
        -
        -
        -
        -

        宝塔跑分排行榜

        -

        查看

        -
        -
        -
        -
        - -
        - 宝塔运维 - 付费运维已停止接单,论坛可免费求助 -
        - 点击查看 -
        -
        - -
        - 开发者中心 - 诚邀开发者入驻,让创作更有价值 -
        - 点击查看 -
        -
        -
        -
        -
        - -
        -
        -

        合作伙伴

        -

        申请IDC定制版合作

        -
        -
        - 尊云 - 唯一网络 - DNS - - 亚洲诚信 - 阿里云 - 京东云 - 又拍云 - 网堤安全 -
        -
        - - - -
        - - -
        - - -
        - - -
        - - - - - - - - - \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/z-blog.png b/BTPanel/static/img/dep_ico/z-blog.png deleted file mode 100644 index 82f877e9..00000000 --- a/BTPanel/static/img/dep_ico/z-blog.png +++ /dev/null @@ -1,561 +0,0 @@ - - - - - - - - - - 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 - - - - - - - - - - -
        - - - - - - -
        -
        宝塔邀请大使赠送您
        -
        3188元礼包
        -
        立即领取
        -
        -
        -
        -

        免费加入宝塔邀请大使,帮助他人同时还能赚钱

        立即免费加入
        - -
        -
        -
        - -
        -
        -
        -
        - 尊云,价格厚道的云服务器,6核10G,99元 -
        - -
        -
        -
        -

        远程桌面连接工具

        -

        下载

        -
        -
        -
        -
        -

        Linux面板命令大全

        -

        查看

        -
        -
        -
        -
        -

        IDC推荐

        -

        查看

        -
        -
        -
        -
        -
        -
        -
        -

        宝塔币商城

        -

        查看

        -
        -
        -
        -
        -

        宝塔跑分排行榜

        -

        查看

        -
        -
        -
        -
        - -
        - 宝塔运维 - 付费运维已停止接单,论坛可免费求助 -
        - 点击查看 -
        -
        - -
        - 开发者中心 - 诚邀开发者入驻,让创作更有价值 -
        - 点击查看 -
        -
        -
        -
        -
        - -
        -
        -

        合作伙伴

        -

        申请IDC定制版合作

        -
        -
        - 尊云 - 唯一网络 - DNS - - 亚洲诚信 - 阿里云 - 京东云 - 又拍云 - 网堤安全 -
        -
        - - - -
        - - -
        - - -
        - - -
        - - - - - - - - - \ No newline at end of file diff --git a/BTPanel/static/img/dep_ico/zfaka-zlkb.png b/BTPanel/static/img/dep_ico/zfaka-zlkb.png deleted file mode 100644 index c07aab248742229c8d5a059f25dbe117186ef55c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1578 zcmZuxdpOg382?2w984}nNg8Dl1x(%cPQWn`?Sp zqK2}$+gT2t6`Hw+M`XD+mz~4;t@E7c{B!+(xc-BtO9!Z_5f$gX%1t_^#+7k|+tn z{U5Aq+~CPa+}fB$HZJic#ilSl!`)@P*AEPR^ui0q=_vU10Ycs_*Oo-d$Cc{%Y4)e8 zEjEtf5vnLI(oe{C?Xqp!qS82{8=Fey{nUdD)Y8z{tvk5Y`qiUhzYfMc-&&uEK(F?{ zBpgepUFx7GoY1ge9cce+_PT&mGh>HYXwI3d&AVAdH;3%ztLJgzl<%3G4G+5LOgX@+ znzwi78x6m>x%CxSE}$M%L&E*E*|p? zWJ7N_-35B7kp*wF?{?&ZRk{2 zwA51?mbH-1?rb*B)+rq&cO`c8Ob1FLlbJY?t^@upf=HBdzObDc79{}6bNKpaYcrvH zM2S;mY`9aq8HrHVY(AIc%I}%zl~)2MA}7PLWH8={(KBX}u;9~h?b4`V#MElJqV@>b zO;g@^7b9K$;G#*5J;v*#(~a!ZYTMBDB3Bisb zmOG-?15)a>`F7vGS&Hn3-&J6itxEuIkxB96H{hJcOeNo^YTl*KiQ}=B3F5M)wnt?-lD=66|cBZZ(h%$z9()z!8=%$5sKKC>l?j)22x z%tRMUT!4IJw1(S+B_l`DC0(jhW_w=GSk>3*`)dq(7ZtB9!7VO9i`^MsW-@#Ahf4q9 z)MV|7vp*)sKc@sw_MB*7R^c-p9_5&K%CfL^oM|vm(wUkp89Y=u)%$KiD;aao#0B&H zg3T;tWb<+94DlV2cV5xM$x47-IEk>>wBAw7blAmX6cWakr7OdGva6mCI* zx?n{9&XlH+%>xW@M3t7-4f$t6mR#=jtvOoru{Sq-Tk<~#2yHxJ^yimdm-7;A=GCM- zT|KpQwYx<)|cK~1zbAKTZtleb#MNW+3_ml)rvP@pd%pUQ}l zqsUsjtzsvziv@sU5`^Xv|X3KX*1xg(`X1z2>rQQeA1SiGu>)Uv1}3S&@gEnv1q zxu}pO;aPgH33FmKM%chBwx#N2N(+7V!21TEkH_yb9*=SO!-;F!ki#8V%LjXuH?J^c o9M>x5-Y(QuHGs2n!T%j_#<-&^kDsId4G#1PFaQ7m diff --git "a/BTPanel/static/img/dep_ico/\345\270\235\345\233\275CMS.png" "b/BTPanel/static/img/dep_ico/\345\270\235\345\233\275CMS.png" deleted file mode 100644 index aaa29eb1f13a6ad4c5d75009c4fb54325dd2778e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12629 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 diff --git "a/BTPanel/static/img/dep_ico/\345\276\256\346\223\216.png" "b/BTPanel/static/img/dep_ico/\345\276\256\346\223\216.png" deleted file mode 100644 index b81fad384dfbf32a8dabb6874e1c556cee7f5cb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VG9P)K+$i%sPBWn|Nhg(2h2>2nEs-Q2*hOC z#{s5em!|3g1ts{|(WEjLUjvHVdifPdvax_%wkks(Nb+*907+yp_wW-Sck{*9K$5;b zfP|VD9~-iB;B09@ke?tvuu%~JvN7F0eg7k%_?ojX;j;AgfhaG??M#f=)0K=M2T&FQ zJoQ9jOelTv@n;}wE!geIQuOtKBu2_Xb_+xnlDZ7#_>iT5?Byq)14&TcMFsTrfjCC` zdHeM@&_Tl7tUyv490wjcB0x4Imfn8@$#S!SO3m|+KLJThKyM$Q=iZa|J^&r%r3*?k zkW?fFPH7OAp1SuD$S?rM$DhBL;SW+pUmqan;eY=@E;@Z5I^u+IIO3P+SO{KOjzywUP!hTDRPVaN#6=05clrA{uby8NLqUI z4ipp0qFg}o<_l1bcJ%gpAQ@vR1tcLrQG^r5M4@T!14jSJ=YTeT{sC$oQ5Qh!JDU4| t1=9YauG=A|(W_+#DPd^QzN1s?8UO~@gMtC#eg^;m002ovPDHLkV1lvS`LO^1 diff --git a/BTPanel/static/img/file_menu_icon.png b/BTPanel/static/img/file_menu_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..71da15bf8c5feb2ab71d36b7c0cb80765fb01ce0 GIT binary patch literal 7972 zcmY*ebx_pb*Zyo!OP7R53W$KD0-~^VD6n*?EGQu@jnvX0Eq+C$OF&YP7FbHUBqf)S zl2}-pUH0|&=R0%fJkLEbXXc(i&NFjk5xN@GFm@OK0MuHVss{g%8vr0Ea>zgCj0mm! z2T*$@9VGzxmPCoSCixcx5KoQNmNA%L(oQe_zBw2pG1+!PI<8|o0lkpl!mfpau|0~b z#{JWa^r2lFovNlS$o)1zH?VZS`z8O-!?R!hty3GAY+W)fH!m-*LMiUMHh$8QLY|)P zC6C@H z9k_t*^We^%Zw)O8@v#{p%Jj&B*#9!P?F+oR)>Hrc&%(|sC^D!Jp#E20B={@(Kfkhj zhMx^Q{RGt7MVy>ui>!jBN*8O@oh>~+W<2pKi~caNI$vMrbb8>SF^79>?9LL7S<^X!^pq+QwR8n$E z-S{q_SAF=mnWg1L!g5GNWF!iO;t%N^7#Ogv+%!t5_3`l$7!t|M%ycTcME@bi#U~5{ zbe)}Do1JP>QT>fgO`p=!iEGhfezh9_!^wo(_%2a0ZHu_ya5SPr+{v%4tvx(C>RLG- z-aN)H_$s8Y5H~;U_G#5(h>tV33Kvg^8!5y;36Zh!C#R>xtxtG7;bF!Wkw`2mDw6rU zb$NMpc7Be-^{4+Eo4c2RuHi;Z+DQmLJi0t>a>TFhq`M~`Q?^PtAk>}5E=;bDsnt3J zU1R!2v1o%UyzF=wACr(6B5d0 zGeSH(?L-Y6uJkNb!oqoS#d7cja>g9M_$7@u0NgaxQdKhYo7>BxfHP?{_inbf)?_%3 z*zXT-n5?C5y%qTBM=5Zpq#H_3${Ho^(%zu4-~CKL!tv2+)~=meg8K9D{9ImM8g|un zaeB4H(Ay>Pus#SW>!;sUmHS_JvUxH-4etj83QTkbwqKu_TA7-9o6a1Y8TGe~Q4?MA zax|!@DA-s-QMgUC&)(cg9uU9h|95?RLOl}X?&|iYV`;SPE0jBbGd#6eQDLuNpFS63 z{yUhvtZ{Zbek?S!`g%<&J8-8zG#7K31L1td9Q%+?^5XC{CgkmgDnKLFchrb}B*y_K zNC5D_9-w-7Oy_CF;p7A+M~;q#5k&TA5Nqd(&5G8gn zIXQlQ-NNMU*Y$LY^__mM#rzDBflu5eab-Wa9)!Q!?r$jR_*$AbEWNqO0;jSsnVOj) z(lpJ{a`c6XD6?n9%1+sj@H#1(B%vS`Lq8s(7Dc_8%+AIix;-#+qJdb5>(9i5mQN=s zSZv}h0~M-h=oBH-6_(L>1)b0f3dF(=i3+MA0{Gk>3%)wt!>zE&0$2Aj=L%fK2wKD#iImGHjE$b1eOEy5hxsc7LjuiEu{?#ojeuc#& zAuXnw8vGBuqyblVyLpgVPFh-h_9WS%n+ezSrl_u^RWaytnLYXA$JVwK$n3JSZFBAlP1_a| z+AjU~mmrwm=J+Kl{FzSJ?GuQw13Z-uQppvjoC?joOffae10lN*fn5&Cjlr@{VD1Fu zqLMP$%GhIKVsNnRe4m@=ah4!VKDS?Z6BXg%0A3@2VMh(#?h(-2A7r>ue5y!oe+bA+ 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-apache.png b/BTPanel/static/img/soft_ico/ico-apache.png index ea3aacfb530849b15d29ac5198ee4623d44f5c30..b0235822aeadd70f45082186d80b1b97054890cb 100644 GIT binary patch literal 1790 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB7Xh}ptRA>e5S!qxcXBghy>~8KQ z1QJ9+IZFksbT|qsEnZWtt+h_;Op0-=f_7|a?H}419m`a$ojU$#wPmX1uvQs$YPE;s zs1&7$Rk7ZnMFW&0U_uB98**&+EBO&7E}I*yohET-!1>N`$A;m9E&Rd?~r8b5wB^Zq8V9!&P_494ByAFhJ<^`U_5dqOTvO&8{7j zqbFZ+-4z^dngb)GtKmtIucQ=hYs*oN?ZRDg7n6#vsdwql<< z-$ypRJ0~Wt$yXNl4sr@%!a&;x2zut7>IF<6SKV!ku1>CUV?y!$USN_&3*kuvI-xqV zrD}<*olR!_08RBB#>(m=nhnZyVbgv6Pa?@4-7|1RW_j@-GvB?x=+ZEk#z~=;x#9ou6#FKpr zRkQ5-s8j(2kdl!EKe($nU_3D~an?6YO<2W=264b7-U2f-Gcj*IA^ZPy0{UBT4`_+vR!>TAen)!S*y;sBl_M9z9?RH{!k9n&eZ+xq$Oi@UH>3wYD$Ed)()aw zOhPu@uZ7nXDAwZ`ji@Bu_l7K}?dfIlud|UdF`tt(Wv;`_R%A{2u*x`>E5*rS41&wb zXeJ?>?(>>B-ZwNPhmMk1agzzNr(WN`kd2TH^Qn`@q~a|a0~S|qZ4NUU@i5YiZD%8M zhxycrcJ7zYT-U!+39y{56tajeQ?gr`c(lw`Lve%;72*w3Vic2W_^5|K= zc9Y+UnQx+g6NCan69`S<|1<%wNAN@s1KceYTWIbl29q_04`5iF{h3dXKg_y39`j7+ z@zyUU7nK`z*e_RZJ&Y4`a0w>B&jgy|Us;j9{K6`e1)14lfxD$IL&&r~P6Bvfu9Vc( z>fpDb{qVoexN%ajYP#~s7bJpUKUnYb1xX~$I{5HjG_WA zYTZOy5vfpOCJ$nhQ2ZVZ7u^MJ>fVivMW^t%NjL|X1zfs0{_=P4yNeGNAD0`Vp+GUG z?IB)42q+O{ha@{}Hw7E98GOhrK=ejTHDJPeq821=2)0;H@j-8`KaxraK2BCfMVe!E z2Hf^-R9x69?;=0O>`5E9)rFi_77q*f^Yx(IH?|9hD`;S1(Dk*dI*L&>Sv}e zUIZUqVfQl3aWMzAwd(5X&^!GgrE14VaeRtid`yzeA31VkNE6na+xqPX<5HoIBtbRe z$dQ+q$JeOUweRh!I0+zFEHTDvlZTkhguj~EZ?|Gm5zQ5;ruJ=1n@N`?M zy;>WBpr!boSRb&Pfn}ko2A-b%^wCZK`a&m8xYRVOBHgFN(Cg~9H^dfyLrvMSggzJ%ySR| z+KikJJV90^0eory;KDl)=H}i2p~_12T~$^onJ5*E4vU(*xwY;5%u-Ve6OaN9z+5I6 zle{jJb+&WjS^ty^1$-Ir#k)6ef$DAjgRYccYZLQShCsMbC+Kc=v=f*BKBx!OJoZzz zlKH74;IHabRgaRxFP|Fvd8E64q%y4{t)MG5gX0soFrS6FsfHjCH3I*46Ze1+)ITyh z0P2yxX#fu6{H*D2;pA(kq&;`I=cu$b{{7QTP^YxI2J|>x7xuWJzNeljxK9_{x!+j+ zhq%O>o8LH*!>+$)FUVzn$oYPb9STOl&x}!IIJI5h#b@mTJ-%f5D$e@XXMWv(HnRU5 zLBa6kF_H%uEM-SAUMVRlf)g%-vEChY=J1i@jYmrOkv=7{=88b~0qRyB`Pkdwt2A`*R#+z{URE_ANY&FFBYzV&~f8=$uB_ z_|eL~07IKW*zzr%no#y*2;|gy^x%da&k*=Z#GZLQ+jj=v-bEn6l}JRJh*oTRzRK;R zhW+nryk_8AM4C>#W$2#eb^;A&1%w9koP^oFRYNx~L%oJOWayLIG(5O!jv~l(7~0mh z*!cwv$AwHEse9xt`?d>07B4j`g!|ovJLhQn)kBzC$R^~P#SAYA%nx=PuLIygQ9&riIDDJ*sx&( zS_$lD?A{#?KnFOdM1~Rtf1^r;me1h+3!?u(d1?QL@SY(>f&W|U$WDK-FUwLcm_{0r z3l8<8aemRRw6Kt9YQ$k<67^6Rw0VmS5@mzjCO@5202phP3}QrhG(ChC208x_u`kSc z2bC5^kDwilGIk|?Gg@7G0fH7K;IYmm+l!&WIfk39CNy=4BdvJe62E(K@}#md`8axUWI^eV8E=;#W zT~`tjIvj`ULxPkYS?0G}<7wma+w^>y*s-Jd^e$b>G%G6KIzBE^GJ4-^yiyPO3z-u= zRyXTqV2$b7pGfo`oeZcr{BS;crXw-1mR3o!ERLm3jIhZSHi7n6Th4b{wDr-y44Rb> z)=3M62Y|t?>|+c;@9drQi0yleE)r9HdNbW#2F*W+nwp7OoW(SZ@~n2ZZ?L5d9927k@Gc1^@s69zTe&00001b5ch_0Itp)=>Px#L}ge>W=%~1DgXcg z2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@1ONa40RR91GN1zh1ONa4 z0RR91G5`Po0Cmf+s{jB7=Sf6CRA>e5SzBmSM;M;jOE$5FB7anDB4V^wTYRu8CJoUN z=~DwLf+l2Rp&&L7o5Z#h+EQDw_|%KExfFu<)S9%ZP@)i@S|c%DQqtOjV6B)Hsf!P4 zB~i24%k=w>=jhqvIcN8*2_-+=Q`zqB?y`71 zz8O3>pe{r$*MBP-ab2%}qa6x`LPwjMn_~n_M|omH+S}VhN~t%clwl}Tg?Y0LcI`E;f{`uFxvf~s~|0uyN0G8?SS9!zXGpc z-??+=IAMnl9V*3Ym8VjvrJ$+9)E2ah2t$d2W>0HtYk!Y!;DcEYzj+zb)z!5K3LSwW zmAb3}D6p@st!>1EY=PCR1dqL-p<#5y2pq625{b|uo{DEfIy*b7VZ@J+vH*3|=kvV_ zPY!yLYC*=z)~3_x&oR9g^#+XD+S1Z;#)9TL^kfJGZiffIK@Gus2N60EY}kaWgdBlL z6hVYu7k_x~0`EBL>u}HyIg*Q<4dF__YbU@sfcg%?s6AI9UhoiZZNNW(n#5{v%yngQ zGK6~~nN0oy<_qAd-7{r`VK9xs%6x_KjX)rm$HEFu}DhWy9Dyv<$BfE8G}6t_Tl+ zAg)BchRx^ci)}E!pGwxjh!XG^vKXPEaDQ+3q@M<0>!@u8ow=oK>VUZ_>STtQ`;Lb2 z6wCMqa=)3tQ(vjY#K(e+I?)CE!SfnSO5@yRhuTkF^pmw6TsRs6>HFDgI8mTKEN6b zxKq2Lzos;PSA2qy*&&4-56R#jCtT`~NF)f>bh5*93$1c2>4b5gup>rlZA=OEE7EH% zT#5}PM}1O$XNPOdJ=eQ_>yn2E0!8m#s2|jBgBggHK{~A(lu%U&rG%1l&@V*GO6-S1r7+^iSom}#7bD0AN0K*!L9yCD@9ENLczEOG@PBYtBd7y) z0l8zCyR8U`mh*awmdBKgf|Ynxn~>7eab8aZ4^nOhN9TdA0}&hzaa$3-b_kq4m$J1M zgvLD1`Gh}eg&AXf>)y&3vOy>;Ek8Tq{@2U;%W8P_|5Y;@I4Rs?>-^lFAh94a!*Xm zS4q);Z2Tc$MM%l5V@<=I&QjbV`b*0>$T$lfs-3VMSA+yGqDOD{T7MagZaQ`k-~DY6 za0z&;QYwA?ZeskVN~nt<+=rzM;(YVvmGG%9E3KC?cx$o^U7ToL4dDwQ2&1TVyyT$G zD7*|UE(@-L*FQ!YK8b_IKWP8L_x zc^{xG%FN|Wi#lfABSbO^Hs9=jGBu2usYh&t(ihwlkTdg-*mQ<5|BJsB3}fKE+5bn6 zVGLVrPVKKZbeph2`NvJhzQde$*}^>U6AugKF{PN+5C5lsy*<>()Zx1m^8aQ`@wI~w z1-#1`*HhjlSa}qm_CG_xvrq~iD0raYfm!5%e*s}2B#b##2;m)V+V_vwd!FZ<-{tvyKHuBtc}}*!pO4{+ zbt@1EgdvB`2^sf>m@-MPd=yRJi4a2JWax5N$TPSG}$mRZjs6_Gw z4Z%F{?|lEKFcgp=2eCX5k|`Ae&ETSJ7edLYUJ8&8%M<}JS?ppL{i9{D42qV?0WUAW zK3FUj%2bfUCpec&g1Q$FBk7v2kNfZLzg-CSq zVz7vGGI5d1lnIm)Pzo<{g@1D?OL7;SAdzb#GeLzo9u#^jWD?+0#Z>XqxsaCB`^*(C zoeOzME>@Eac44mnHRr`Ejd>QfUtFs>eDOUf)tFtOakV^N>plXZGst1m1Jr}hcBLu? zgI1@^=$v!b?WEDWd?kb8xbClVw)-b)m3^I2hM3Yp+u_Q9XF5TC{+;Ir)`@O?(6e~y zd$j-2$QF(#&V=DHD8A&8WAO7p%1nIwY`kukeOre1oVh0=qWWgr^lWS7{h&iytfM2t z=Ub~!g{PU@N3b8OBvr%nQyuSbl3p(#EYZok(K$=4jPA28s?9rVk*E8|j^@<2^;+GN zZMEsR66mh&aR0tF<*>0F=aAY^Tt7eEbnS5CY4*3o-KC=mFP1T~Uwr6H`5n2upnb@# z2(TP!Z_4ViLhfm5`gQdKV>In~-*wxXxVbs=v1FVtvWpwngiClEZ#=Ii^lT4JF)}hM zIiA!BRI-ecdlH1(lAAH91=>m7HU9T}hCPG9JDyAI4v&wWGR zq{|nJ;ND~Pxh5-}>WrG#4*%I~GSR=u^8B(WQJJN@cXjsFarOpM9-|)a?XJyGJ3E9E z&pdp=8{NG7oqC7&;5y0IOB|e!m=2nT{?Z>gU^2;Fh(G>%crtu|~&qI-G z!sg$!g>@?~o;>m05LvL%trB+EN15DIgz&DOqVgSvbKXuq&glvM;gs;9n@H^X{I!jF z$|KmXvh5Y6G);fZIn~d(!FuC4f^#fxCEoJY^7zF>X9bdLcJ>R0)k0=h!Qv zz4drkhU&$(S<yL9HtlpY`IL4Q(w9a+?lM}gF zKiVER7HT&64&_v$yS{W};688KD=5r$|DLq94nFoZLzgYkVh=mg5x+}jWUG0rmXvhJ z=4W_s1V*ouyychFjRqYSK3|0fXSEg{c>RF>AWHNQO`R|uO)5Ztf2FruXObrG+-Pj7 zx6h^k%f)*Y;~2b1;|^F$X@PRs%Xc_kb1r~^9?^0`ZZl-WwwRnbYY;0jDP*?#+GLxs zqihQiR$A$)$(v#c*QNr0zjCM!x%Ku*qqvuox zJi_)@jVxoyp87f%@IP1)A5{I;Y5~WUcy< z8}ZYo%4cIOb$%+?aeeGmaVO)pEvn-nRPK$)zmXdVg=9DGxP>JL4j8znHa=0*Un{;* z<#(+9QohAl!!uLg%wL6ZttPQ8g#o>`NrY!uvwbn@-p{F_bh)jD=3p4u|e;7{&-(q(P+``jE_Z+ zhaB=xA8;cNe4p(_I@-KOr4I8E*-uqR73p+vs`*CDl$Jm#t7NuUb!&`Qns~6V3&M!Z zqmO3}n8Xm1!$ZkPHkdW5CZwa^zc26G@3P-c+0Z*aUBP{N;a=G0m*#HFZg}rMs^kXj z3Kgd>)c(!-b#l=*!HI+uuU2hOuc0;w#xR+xG&^*uiQ9W~8sr&US#j}@WMIr%d8+pE zonzFzK$c@>&A(H^4;k>n>jbG!;>*|EMGRF4Z%;9q!2J2AN0z;9LTDo@9rc6Nh4RdW OA3ulX$E;&Sr2hv6o@S;1 diff --git a/BTPanel/static/img/soft_ico/ico-backup.png b/BTPanel/static/img/soft_ico/ico-backup.png index cae3b9ffdcaab825a702b8f7e51618a12bd4a0e9..d674a9d3e4b5e548362a504592310a484830a2a3 100644 GIT binary patch delta 1753 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 literal 2501 zcmaJ@c|4T+9v-{I$p}TNF-a1$n6V9$n6V5d+gKvE#>|T`W-&9e4M#;nn?m+2OACdT zbIMv-O0MN#6xVW!EG4Qb*>XlFo%_e_zMs$g{+7@4Jm2m4<4trvXsaNnE(ZdE6bN>B zSJ7%9dUa%_Mc-P^HAm5+#6~`VjhkW2`~U284}J2W^ys%Sm-xhjA*}h4TnO$L3ng5^zWp+ zh|UlkivvImVTSq?1QHD~HiaP#k!Ta79>f5FM8Od#I1;6gG{7KCF-Swm_XjG9#-aLS zT=6#FV~I{!XdsWr#=zlWVPUW^6pY0QfFn&!P2mUwxPgJb2%*o7VDiY}`b_Swbp<@Y zrEq9$9*xC>tSOTHSfM;DRFvu8B{0}OWSQLWZ4xyM9!_S%kubzsN$Wr&@&7{^j2~z& z&lUJ5-~TDhB}K3SxGTVAg>opO!TIl63&qCZH~^W);*eOZ;Poy#2eNo9ZXk;d!Qmh} zo-`(v6~^8B4NfFt2uv=I%%lJWJQgYvfYE4Fi~-6BZ-c-Yqb+d=B+}Z%#MsKl)EZ@j zvqIyIZA{SXTs(^s$^e+WbuRTEuE|fiYffOWMUn9Uhjt90+HhD5$hV3yw4di<_*1>_ zT5AK{q~X!tvNSLuS&DCytho7W<8xA~y5@-{Mexar zBy&7;zpnlDDyX|3o&OO5wl7u%)1@{}{_*Zh?hCh!cOCZzhib-|F<9>Gf9_A@ESa45 z84S_5ahvmSK;!bjJqF=Oc0MJyIHtL$%tCl9ORmvu6x%gsoSu5=RlIlYtNtzg?rS-F zJveQqqsTd=mw1PCGWeFsKfqt4B!}$=VNUt*hemTs(b{t{zjV%@_%v$D7Ls(Ka>~1UNpViE z7TleG`D`-<&;A-Ewz98azK{>DxNm+-lHQn-M;be<@)G86Y#krI`R$vQt!Et@#p{o3 zh>q>SO2ohGR*6)&qve)jISN+JI1LgTtU6LyFZR~ysQa%nMb1*`LFz{3idQ^hU9+j% zPBb{`a*(mdu`hB%TY*Yd^ft6|1NqpNswEF{W|><wg zoVe#zk}L%KrmqAoq|g0(hz}R?7!F=3eMxzGt!We6N85@Q!2M=#^zsX)D~85S*RTE$F-i?;S;&kkYce1~MPTl`}4OAX2)aALm0;{pHJ{6;+|AB@keLSW{E zvxDqM)#n>Zmn1V@KK$+E&H>z(W>1LE(kB7IA=p}R5+TD@Ql({LO3=ndq2&&W{EUur zyIkv$ZI2(Ng6|NO$dhJy6a96y*8)C{A02+$v^;gLFR#?g<7D15ijZztbysku$#qi2 zPLCX+e%QvU`J#M00VCYGRc=Ni<~=`Z?p@tkwo_Dl-!f0SmUR1`)uwB zRO1#TB1;7u$pXn-@y^?a)xGam-Pttu-e;!&@}i`>pXMy;+Low$1ZS{wTxuomtKBnz zZ`>$HJo+dJjjC+_dbiM*I?|XwdtmoWjn)oV&1$mlgnz=~$&lXGIWJ0rM`6|?V`j6} zYW;)N-ODNZo`n}kqnPn%%@u0ee1f}S?o7`YsO<&vh)NMiG^&FXZ*yA|c%6OnMMCkESV69Zhd zWCTjjqYG9NexIsf^moVDDHqJ|i0gc5=EC0JDW(#WJZ4mXswJe!t~jgx1sx=A3dq9* z9oqqe)as`tT+hXv&zxc`vpu~Vmd#hlP@ymd3Nyj-EXC}0#D2K9>Xe+nZ6~a*%`7Feti0v+ zsOP@~+72lmlHuwtIK$aV#{Oq_ccz)?f6<%n2zy`rAXKCNMHVh~Yp3=u4i0t(~1ln;E#F3cWErnLr<4adq=rlsOSbyaBa534EN89j$& z_qlL#v$}5xnL*{lS4nS@l;2EOR6hvW%UrAsdp+FtbZQtVP4+5`aIQLFVP)%T(bk4N zS2W&rQv1I4n^Kn#mrGx1~4 IR!2|#1tw1_;s5{u diff --git a/BTPanel/static/img/soft_ico/ico-btwaf_httpd.png b/BTPanel/static/img/soft_ico/ico-btwaf_httpd.png index 55dabc43d782b232437a2efee3bbaa696aa4ec5a..47bce9a2b50db3913fda7529789394c1748a14ab 100644 GIT binary patch delta 2003 zcmV;^2Q2u-6Vwlo7k@Gc1^@s69zTe&00001b5ch_0Itp)=>Px#L}ge>W=%~1DgXcg z2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@1ONa40RR91GN1zh1ONa4 z0RR91G5`Po0Cmf+s{jB8K1oDDRA>e5S$j}aRTw|_-d%R7L4R_PLUWu*CaWQzm4+H_ z=BP|gnKK)>>5K#_1HxzzE3^LSVOIVjh~$)M6c4ea?V!? zg0L$pD(cx~%YT+R!`10aUh>ru4js;madB~lsMkWz5Y&@hE>}ugTG~F8f5Or2OLo9B zvSrJbQQh6$+u^(gnP?V8(I(6CI%Xd!rvWwgGS$r~`qv z8VrW>M1MzrJYXa;dnhX_>k`p?6~BQL78ce+(Kw&Ng5X9Ujb;S`s6+tmzIZ+9+qP{p zU%q_V3i?vmpaBs*c{J^MWNm_`eI07Jj-nx`L147jgB*vp1pE)+=TLu#g?kLnU(tx@ zMwcvE(go&H0<57}tf6VZCqVD5urmz!72xNQp?@{N#{)ty8#iv`1fgpPUsA6R{?Zw~ z7lWuF638G9wk}hVjOZGsL1c<#WDo~im#P0vM*QyV-i9KvZ0b)qzg}ut=t!adJIYgj zWSreCh{EH|8ICU!%cokgGw(2nqUCgky&AZXSU#;0C#OV%BuzSOG$vKNv z+kaGJH-Djdq2paGO%EPQM(l8W!ldI%jbkdNj-VhELtIFu8jej71lAKT4L?flq>5Av z1pyD;F3z)vrY&&1hDq!R6-0w^m$qLo9&|>KjT(6SOvkSc<2V!Ufs-;EKft*>Loq7g zRLq3BZ>>A&n9gM8&V;kAobdyK%x#nQ%zt~XZr+~%Zi%3uX-Ti$t;mM)6LdxlBDa%0 zF0&~JXeQ8lOo-1=k58(a9?!TiQRMs^;<>Zx(O5Y8q`-s<#-vgl+JoXa2rLDeyO-!xkg>XETWtYBldbl}UTW{J z#;)Rrw$Bsy8wloh8wuc6n4lHJBY%mVrV098X3?mOKGqIBDA4WkRQ>$w&e4@KlEL$U zD2VS!Qq+9}A`@qk9+yk*mldsUEsi_Nh`#n&E!`XLHxLLYf%NqB^b15{taqI-eyqV- ztz4|c-swd{tOVwEJ2Nr;I5V)~#`Nk_1Wh*kK}3&dD4-{u)Y8(@n*%8u$bQ`8 zhamuZlyJqw#E>6;i{C)-B7b-h${ZLOQ%6Tfre941+}YLDl@GgEj_hkZRCESX?>7(< zhO!NPN><}}DBuDOWKd5(y{BOS>FtZ*rAF7eD_|gaPudNo*aO(@sF&+;BwQXmc(1_# z(&xPfFO~t<2iXf42r)tF+P?ZNJdxsjb>j-2RcFH9O0s}QznAq|(ti~QvhpQH=R+8{ z38Phcqox@2#$)gJ1kPhdiSOa@PuZ{Z1fweuQk0O8kdNvIz*q!ScI3#BKzk60=`MIe zr9EXYU^oV?HaR)@CEdbc)E$V`YQ1VS8m%yL5poMoo;Su7TpFMe-Zs|6U6@Wg!9Nzz zgjfHWIXO8kdgWC<-5F5@VB{1slZy857{R%4;(Pp8I796ZriR?pc%-J|4h8Wuf_ONT zAjoFW86hDm__CpWqdYA1Ah%p*-+DTrG>g5>!%D^I)r=09896bpjp5J{{<)N5AYRj`8&_Gn>eg8l$Ksy8QAc8uIAU?%T{duVW laH+Z@bz}r0BM{mM{0mbN^Ynpb^WOjf002ovPDHLkV1fuNrX>IX literal 2501 zcmaJ@c|4T+9v-{I$p}TNF-a1$n6V9$n6V5d+gKvE#>|T`W-&9e4M#;nn?m+2OACdT zbIMv-O0MN#6xVW!EG4Qb*>XlFo%_e_zMs$g{+7@4Jm2m4<4trvXsaNnE(ZdE6bN>B zSJ7%9dUa%_Mc-P^HAm5+#6~`VjhkW2`~U284}J2W^ys%Sm-xhjA*}h4TnO$L3ng5^zWp+ zh|UlkivvImVTSq?1QHD~HiaP#k!Ta79>f5FM8Od#I1;6gG{7KCF-Swm_XjG9#-aLS zT=6#FV~I{!XdsWr#=zlWVPUW^6pY0QfFn&!P2mUwxPgJb2%*o7VDiY}`b_Swbp<@Y zrEq9$9*xC>tSOTHSfM;DRFvu8B{0}OWSQLWZ4xyM9!_S%kubzsN$Wr&@&7{^j2~z& z&lUJ5-~TDhB}K3SxGTVAg>opO!TIl63&qCZH~^W);*eOZ;Poy#2eNo9ZXk;d!Qmh} zo-`(v6~^8B4NfFt2uv=I%%lJWJQgYvfYE4Fi~-6BZ-c-Yqb+d=B+}Z%#MsKl)EZ@j zvqIyIZA{SXTs(^s$^e+WbuRTEuE|fiYffOWMUn9Uhjt90+HhD5$hV3yw4di<_*1>_ zT5AK{q~X!tvNSLuS&DCytho7W<8xA~y5@-{Mexar zBy&7;zpnlDDyX|3o&OO5wl7u%)1@{}{_*Zh?hCh!cOCZzhib-|F<9>Gf9_A@ESa45 z84S_5ahvmSK;!bjJqF=Oc0MJyIHtL$%tCl9ORmvu6x%gsoSu5=RlIlYtNtzg?rS-F zJveQqqsTd=mw1PCGWeFsKfqt4B!}$=VNUt*hemTs(b{t{zjV%@_%v$D7Ls(Ka>~1UNpViE z7TleG`D`-<&;A-Ewz98azK{>DxNm+-lHQn-M;be<@)G86Y#krI`R$vQt!Et@#p{o3 zh>q>SO2ohGR*6)&qve)jISN+JI1LgTtU6LyFZR~ysQa%nMb1*`LFz{3idQ^hU9+j% zPBb{`a*(mdu`hB%TY*Yd^ft6|1NqpNswEF{W|><wg zoVe#zk}L%KrmqAoq|g0(hz}R?7!F=3eMxzGt!We6N85@Q!2M=#^zsX)D~85S*RTE$F-i?;S;&kkYce1~MPTl`}4OAX2)aALm0;{pHJ{6;+|AB@keLSW{E zvxDqM)#n>Zmn1V@KK$+E&H>z(W>1LE(kB7IA=p}R5+TD@Ql({LO3=ndq2&&W{EUur zyIkv$ZI2(Ng6|NO$dhJy6a96y*8)C{A02+$v^;gLFR#?g<7D15ijZztbysku$#qi2 zPLCX+e%QvU`J#M00VCYGRc=Ni<~=`Z?p@tkwo_Dl-!f0SmUR1`)uwB zRO1#TB1;7u$pXn-@y^?a)xGam-Pttu-e;!&@}i`>pXMy;+Low$1ZS{wTxuomtKBnz zZ`>$HJo+dJjjC+_dbiM*I?|XwdtmoWjn)oV&1$mlgnz=~$&lXGIWJ0rM`6|?V`j6} zYW;)N-ODNZo`n}kqnPn%%@u0ee1f}S?o7`YsO<&vh)NMiG^&FXZ*yA|c%6OnMMCkESV69Zhd zWCTjjqYG9NexIsf^moVDDHqJ|i0gc5=EC0JDW(#WJZ4mXswJe!t~jgx1sx=A3dq9* z9oqqe)as`tT+hXv&zxc`vpu~Vmd#hlP@ymd3Nyj-EXC}0#D2K9>Xe+nZ6~a*%`7Feti0v+ zsOP@~+72lmlHuwtIK$aV#{Oq_ccz)?f6<%n2zy`rAXKCNMHVh~Yp3=u4i0t(~1ln;E#F3cWErnLr<4adq=rlsOSbyaBa534EN89j$& z_qlL#v$}5xnL*{lS4nS@l;2EOR6hvW%UrAsdp+FtbZQtVP4+5`aIQLFVP)%T(bk4N zS2W&rQv1I4n^Kn#mrGx1~4 IR!2|#1tw1_;s5{u diff --git a/BTPanel/static/img/soft_ico/ico-clear.png b/BTPanel/static/img/soft_ico/ico-clear.png index 17c205b7fd6e2cf00d12d60a81c2e1f8261df867..7b0d59402b83eaf4fd984c9d7d0f252cd3853874 100644 GIT binary patch delta 1889 zcmV-n2cG!<5$Fz(9Df06IJhSO0004VQb$4nuFf3k0000)WmrjOO-%qQ0000800D<- z00aO40096102%-Q00003paB2_0000100961paK8{000010000opaTE|000010000o z00000b<3}-000KkNkl1f#9DjTCppD4UmOFIY1%Co9NJ$maQYk1VU>Zn3 zpjJ&uNGfbwV!#impi%ULK_bO)B!1vr%2}cYAwe{>E#~ zitZPypl9);=FQQf;e~8^)>KAiv*FQ`eG2$eY$){=gnz0?R2H8TBWZ+;HbyZ-e&7;u zOUwm1G^-He3Q`Wlfa^AZ07^fZ=+&!N+bs73DUdRM3`63=1l=d*4J0MQAwmM@I(}!j zf}JdU=iWw;wUPp#T_l8>-*kCrmR;y(O`xk`dm^%CYQEv-=5#y-Mv_DBq=HB*s4{l&L=yP-y(i>ex?05`&up{;fj@k zxReR42$F;jlH)B}6p6AU>SieJ^;P^LI##zyw13%hRi0TxRnmNN4wSqq83dBh=yDw@ zo-lWG340jwv;A!i?5mbtw0^LvpVx`DBauj*+)1ypY~8wbBouzbZ?s&HaEHTDR$X2F z9pSG1B`*-vdQwx_<%^5XUejvp=lzc=pcq}4*`qMC>Bw=#Y7J;KCMPEkTe)&&hgw&$ zK!1ipp(dx(S>o|{8r6bk=-5*4Qp+kPBcd6LEUv1BEYR6nvI-|!0)4@IB2E;2B9B_W z8XGN|W>#!nCvs&uE)PVFqd$Xc9?_3nt{s2ui{9zF8_hjfQj865fR+>8OyZS`XIC|; zLbMweA}fG2S#pBZ*K!5mA7Xe*S%Z%7Hh(ivHxs1(1vdcvV~!^Rb)CdB=JFQ(iOq1F z%UjGvD}k3g1`W*mYyS85IFn#PPT*iudwJ71xuF=Il5=3@E#OJ=HmS~XrU|@6Po`jK zUa!CtbuyKltZ&{V`YJryb2wRc+QSMm@_YGD$O-x)nJn$YNrj$UU3Wwn40o~TGk>Ru zxcrYIH4M!?f*>r%=}~c{AqAXN0@wl`aAkgJL2z)&v*IPj$h2W>8Zx0HlW$2=E08_3m=hkc- zD{1$dg{{%rd$ihEd^&=4tsQ=T1b_ShJLS#zDm@a0iC~S~1EX)+?e+~dH8r1@HTo!W zJ9q9(3I>DgVPid#*@a}5o3UrOl~5971kh{7SYOCgRaJ$s&~HEzXW+NetWCp2xDmXq zC@vm3|1m>LK20U^m;>$;^NIt68H>0M`3zl7_pfyrzwdJ$%%{(RuSJ{Tyno~JF&M%8 z+l=}5u8L2j6+6~nOAx4Lmt#zem*pA(8L{lRNE&V=V7AS2kHmUG>Iv>BR#mOaauH29 zwV`wnKKXcurVJ^2C_K2{B?#~NDjE;t2Dq~PTa zu=Y=q(`IqMpuAE@P4H{4saMkdcLQlcC}Qgf{KM=vhkvNj73s!$6-^!Q zEzNk&nb~=G$>DH3Thwm2#PRDOjO$$7_G^9&G2?{Gxa*5&2ocseYxs1>$aK9=BV4)% zw%@x<-{}teDw>ulTa?rj?U8VVtt-r!?ASG1x+Fw6qFMV4swiRUL(aCk5q^N-yCW0mQZ_)u2uN^e>O|$%VySOyx51An9 zT=REG_ael&>c7Eg#Twx3`G1nD{_AX1de5dmJ*$93=H?xGOsBF*j#2d^)8w;e^Z0^?brboHbH|womuD=5R bxeELXB2R%)WeJ-(00000NkvXXu0mjfP9<<_ delta 2299 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 literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sW!VDxA&b#jjq?n7HJVQ7*IBq}me*okf1o(uw z{{R2Km=ths!Al#UUV)MzzhDMIC1aP+wDOLbt9GBc`|f|)R7O#t9A|+?WHAE+w-5+3 zUb-L1;Fyx1l&avCS(I9yUzA;};2doBV$Y@?1_nkSPZ!4! zi{8>nzJ7-d1X`CfGG#@S^oD4PFGxDgR>Y{1$6%h}=Wt`wW45OpcNTcaENHcL(GpSwe<;Pb?=RH5yoT(03 z?{X(lkI)+#QOkN**n*wW4WKl2CauRVvkIi zIK9qPt_XiA-Pod_`Jj2r@`B0I`-T(dlfq|p;ST4$bZ4ciLxgg_-5a* z4^U`b`Td#0BQcc-dGE{px=S`Vu?F4ne5)!kL)+do?481*)i>A=g_ B-RA%R diff --git a/BTPanel/static/img/soft_ico/ico-docker.png b/BTPanel/static/img/soft_ico/ico-docker.png index db39a8cab424e563990d76e0253c47376cbfccbf..6261e776c1f30a8b31fc75fc63e675aac871a2a1 100644 GIT binary patch literal 2294 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:i$f0ZLGJ)#V0#|`qRh@9AsQ5lFKHq}SugD`mM(PTBatwg= z(MjgJ%>$ZQxOI{r0EY!${JnMV5y82nsB{a4-hVg}{I*al0}xEp4ZPs(S1%54Nj?>C zowqjC^~Id{-OVeSwxw=E^_JoiE&$4-u}D>3ZNZIG3%}v$U=5hJL2mZelpPrV9<0-Z z+J)qr6qgu+uKF!f_1J{%N3Lu)Z2fDRvA&HUSCk~X;@}ASWRU*He~#3R`3TMzqh@Jc z3u?N-w~YV3*X>8SQwIK6Sxj+|V{an7CAk3AH9&<25*%PFj^oKEOJiwg#Dc^Tp|Cm2uBBN!B?lE z3q{RMh|WZr3IxV6v%pU(vKO`ABkU8^0|e8@W7pM|eLh=Ifg=%)rfM)YC}}4MW~vnv z2HS|}AXZL@(LN*6qgH!VOt0hf4IR1OU-1pmzX5jNGC2hP4c`C&002ovPDHLkV1gx{ ByUzds diff --git a/BTPanel/static/img/soft_ico/ico-ftp.png b/BTPanel/static/img/soft_ico/ico-ftp.png index e28ebe0b646fc89b8b15040d6249ab6364eb7504..6f27b365ff316266fde99c80790f63536a496c32 100644 GIT binary patch literal 1646 zcmV-!29f!RP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB6*hxe|RA>e5T3bl1MHHT`BIG6X zWTp=X!ER`Q#rA@ts8CS!ppbN=4q{0!auf|g;b0eh=poT#7-XHu)HsGhFQO3Qh4PwG zNDtL9MG^DC%JA0lw)@tcJ=6TR{r`J&ETn(nch;=+ty#0yteJo2-!c|z@d!n)*XtwN zZ*K-ii#pg$o~*gR#wKK!7?*5sdV3$`$+`dJFM{DS{4E8ok(%?F4{jert?fC~=$P!q84DtIE-Qd3hO9vB!n)$uKxmPWAm z{D3{^2`f!HcFfGo(9U36OpRn^WxaHEcJ_sxHav=0Sy_1>xZm&sd(#SUYQ(?YTj^Nx z#i36R&}{X3VX$osuF*`#V5Fd+;6XE>Lmt1-=&_pj3FhMUgM)*Q1ZZ$@kdsG8M{Iw8 zpT)<=^EO`3tg5Ptb$55O)YL>retwf}ZEaO=wH<8yPNmF(7;M6LE2IjBZ;9p(b3V|uwIC{ zp}U|gGF<^sBEG&b0a;0U`3C#Yj139u&JpjJJ>((ahw>v zI5BF@K;hxxbOy8S#0;R$i}Yk}ZjLhJwyF@S0c6>yYCqBlF=72NRG+JW5a^pY^t~2> zo~zR<#0XG5{G6M3T66)x4b8|1@Wm<;g!3*f)Nz@PFeRT)*ZPfJs`zj_T=GMf- z#7U?&oalw*2z_$KQG5`CEplQ+!3=@Ef_Lvd|7ahyBRE_Q!-40O!39lXrf%T?@N&?K z0ThCA1jo*w(buB^`g1ITGd}@*h@d>BQ=*SYAI8SUzJYZ7ODD5zI(7u-@CKyQdzL-j zdx0-3EG*|+6enG4&W(W-;Kb8`fjLl`ei7FX!{ZG7?386q@*M^G(@k4yJc)_jJ373iKcB`US7`V5oKvWtW7g&e8=Drkcvrn?pv*=Iu0tfsZG zzP_$mA7(hpe_A*A7XyuWZEcOOm*wSU4c}oy`&+1A$#jj73{%(-@2@!Q{NI9EzFSOZ zghqutq~v`BkLJS%$^N7AHT?=>^@6mV5&dB4H$W`5SHOQ3&t=TkCDe}f_5Inj_mSQk surY@EV+8d(8@wxaBj85h{}O?}0e);I8o^X(x&QzG07*qoM6N<$f`b?d(EtDd literal 515 zcmeAS@N?(olHy`uVBq!ia0vp^RzR%A!VDzS8>jvTQq09po*^6@9Je3(KLBzK0(?ST z|NsAQOf�em%8Q4yae4B*-tAK~TxqB{Z$PW9F*eXYRiHUpAFd6e!18;1OBOz`*qy zgc+NS17DRP%Ik z46*1yOl)%qp>gdD*OThYcd_CJ~?R?p_?BYN|Nt{XMY+<8t|sZ+E$M(!BRJ zH?#TNv}<`I%;Wj2n&akm9>LX7fhjxhDK_dU-0RU<{hN<>kEz3?Ugznx+XZ(oUhqJ2 z(i6(9Ts`n6%t;SUKdGk(i=-2czK z=)1zT+e-r?UzV@flyGf#xo`jzSE&Alt4t>x8Mg>4ac>h}CMi~Ju=oFeW$W2*Wq0k} zz`!VZw$c0BT;`xN$)}nosjH_s>~*&2W?ue=ZGn!q-%VDB$Ya$zQlvMiOKTV$n5D4r z!B&Q%f(6a$J1)r_ii)YL;_Ut}qcf?a=S)birlsUW4au`wRsjyx0ueF{ZujSjtvfKc Q8W^$+p00i_>zopr0BYIAZU6uP diff --git a/BTPanel/static/img/soft_ico/ico-gitlab.png b/BTPanel/static/img/soft_ico/ico-gitlab.png index 1b3c0abe26a117276bbbee47e353b51b6e42ef34..21cccf7d1e68e73e4a41cfe01cac769b56de518b 100644 GIT binary patch literal 2038 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB8U`a$lRA>e58Cz^rMfA*Wx7+7Z zX`$OK4~okwsSjs_th=L53=)d=e*CHGjnIo+zar?&AZIK+iZjp zfq!2$A5KAn!GCjmL5LRg(uBB;%n<-Ik>Rr(VRn^R1| zdRMqts6offi^`BN*Yp#<2KN?;8w%cKbw`QFIXC7>3TdE!En$Nx-Y}d%YVsCLW|^2NSDCns zf8$)=o@g1Xas<;Jr7mqVKcSPr^L3?Yd<_YsvzXOvHsEQjUye(-QplQiP$?U;+9i>H zwV)Z=CqFCk@I$@jUVCt*#MNHB5h|hHvz;|{>`_T^PWb*gUL0A45Ne%Drs%T=kBJxLX$s*+pHgkQ;Fe*y*yd=b9q|#z$Pb*rsbPH2awlaNlK6+j*7XirS(W z2gQ~4lfr?Ohv+~z99T;WR0pIR7YPy7#t+Q7gu6*K{8{-xAGCOUZGnZvAK5rCYH)## z)v(vD{iW)S8^#@~yZeQPoBaKiH*pKwK5j!<#cT$ikPM{Sy3HY`I}+ly6=^_c{7ZBF zBYEbYj)Y{jEy*Tzf?ItK*Y$&DgJxWwH~kN_@60@jCv@UjUbj^UaNL*Dw65j#pOT0? ze-eo&biz37mBQ&#MyZmr$x@ck38hLZrb?Mim6YudXx~a$?G0m+$Pdij24@@+rQYS? zqgO4J5q@)ZOU%hw)twJ`+cLNKNVvX-%2!p8%32kdu&vlKdL$QyZ$RsG($)xKE**YslwU4Su8fM0sm5TNs#YHZPX zO#X;8X+gn-C=Z|RyHpEA8-o%F%09*k+t_g!oUVMygqio30G;93#F=g|@Rn=0h%4Sm z4G^`%*cYtndQ2@qDltxofJHz^)bNb`N;n!3O2t#{QKLw*=Cb>OH#N|LgP12^tE~dB zA#VxT^oVmJ`KYiCtd@lWci;75){T`oX<@M!a`gw`>Z6IjLW5!(uK1*`xldcIkOCGE ze(1|@A3WiJfBy-sl2;tCT3==xuKr>+I&Pe*6RJ`~wSrZP`9&PJVY4D#qqGkf?J(1` zcs2vs3}iEq%>ZVAYAfH0`sh{qF=m8pCac@hxk-8`rc$JmSJU*vkMlSoTVyj;Ih|@u z83#gTI6B48I=oVr*{K|il^3=sMYYQp${{ z7vHfWnqdP66)tq-I42xE-7{8u8O;byyBY*Jp(_Q_GD?U#IH4Pfy~$y%Ys++rjX99f zC8Z97A_13gdHfG9lT=bvE-AAB2AI(j8&f9vCr_8$KjQp>Yok@L*>P@u&NlynVLudx4KwxwqY+$lK)UB$~1$^gt6 zI2$g(r8Xv;%wma5m}SQS+RGB!t9W<{ru8-gv(q2FB?)B|V%nvJA2)a5?LTU0TJJKb z>%4{Y(x=#vVA-VVf-@3H*N@1?2SK*U2l=AL`C`0 z_rz6ZUf}ld>7XyvV5X~hku&eKV|s49%*>u~f_S+%3WDFY!vaoyMS z{Rqxi6{9fgfs4)o2<1#Mcnm`Rw&1W9(c>=SBxB971j=iRaxp>TiYxT;BArm6|xNO0kdpPH3OksdYBGNJQpEHTO74v`5c_icj)Vi zv^k#skpoek@*k_qVKBT8cbc_ud*T`HEh_0c+c%eFDwa;@V6I>{s<41%9l7r~}~#=2b(4?HW8bF_-B1FZK-MXQUl$L&qgmE(>Qfkj+3g0~uxDKe|J| U2_|w$(f|Me07*qoM6N<$f*y#tmH+?% literal 1235 zcmb7C3sX}^6uzm-1V<_eZK)NisVp}E@*shN<0B>)k}weh2?DkZLJ1^73?$((iaH{Q z0URyr3<%{RCOj+%h@&lNRh(ceAe2I@R2vc=Vv5oN(;^G$4fqH8&DnFl`ObG{cXn4R z3gtPh-@G0{5C;Jti@+-#Unp@6p3lW-xp-Nl<_IK2B5`Ci%!nWau}CNhvRbXMA!y;+ z&ZT-btlJ6ecTC3YnT)oP3CWHLalm+lKh*m{9TVzUP)CP4Dr}?_=gu&B5NdG8t;~*t)e|u#sZpwO%$uu(y%zV^eC;cgo6$k>i6a z@47ZK3L9_(I(rD6m7{NB$tH{f>j2b&l|ejvz#0H60sIEQa$qe35RXd$UI0ty0W1dA zA^`Ew0;?9l0s!*?JPF`&0CNC50$?V98emler~=DrVEHhBsbDb`z(WAaz+y6(Pw<>O z=s6$f`6dQ^9feLyP)h{*N{CK{pyPbUr-EX8j-T@w*1 zMx0hb!og%RF)T7NG6_f4D$blKD=TYULB}e3dU~Eef4u_yY5qT|M$`%T=Jsj)7&U^t z-(_2bZe@KUE^g5TMQg;$Bu!SlN{Z}FR3=Eb2Fq2_ETt+%y_GBWf7#hqjQc*c`M4@+ zyhg4(yj3DsND+Dfjn1MmKKGzqZbOjwL;`HDB;f3&62%vTbk}?@)9HV6H((WoJ)>K$ zkS;KE@~*KABB_fo%_p>?S3Q=kVS2%VXYEgQlOvVtzM)0UP`hX$>y}^s>&{;3m%L71 z;{&F0yLrdaNbv`UqK4)e*B4(@=RWE>vU^`1gGxD5e<`W)=WDqQ!A((rGwKFY{0FOf zKC#Ec2u_AD2`1N5I+A>cNM7iuQX`nRUppdlWx}ucJ0!M*x zTezK=(Pk13VlST@{cdJk`=hz}R^`AFS>qr07fY}G@kW38M~hb;%rq+O-EOb##(qE5 z-x^g=%UPEi7)!Nm51$G1jt?lW-ZZiJiQ}Jzr=Q=M`D&r)aOofGTGF{L?rfQ>+je)S zWKwfB^2*hYRe;rO*tYg@rkxl|JZ8s|Oe~aVxUz=B3&|voWv}~ipxEB`q=J{UUR&XF zk4cM;ue8$HBVU&iJyp+08z*B%Ulhyk9eY?xU0Un(N>n7DXpWBc4g4jfMBw=JF(gdP zT9mc@#PKe11r?$XypmrFkW_Gw)n zY#C-xeQJ{A=MOUs-A(!KDHk?pFU|jRohH8XEAV?eWqx_$VS~ZoVu1 OhX{f~v1ZP}-2VXX5nlxW diff --git a/BTPanel/static/img/soft_ico/ico-linuxsys.png b/BTPanel/static/img/soft_ico/ico-linuxsys.png index 9182d12052d48dec8aec63c1086f1fce16828f8f..48dc1d22fdb3339668992ad6d43e0c6464ef3f3d 100644 GIT binary patch literal 1887 zcmV-l2cYPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB7$w@>(RA>e5S!-+*RTRFnJKd#g zqeKM}L|Z6nBARGG4dr1(BrzsLBw&D~(KM1mDUHS-#NZzzKH?u2wl&rM@kc8z8Xk#> zj{v1e)dYlS5EY?_DS{MJ#RYbEX0G3v?w#J5y|XWLfuxhn-1EHWoO{oG4r4hUP4G5t z+H{0-emCK*t*tiQ{($it7;gwcP17Rl)~$QX#y4-?{A6`kJtstz1PAEj_t@1&qfrx8 zeIkTlA_BV$1YTl^YB{|^UD#?C1S(;t&B1H8)K4X(rhE2JZEbC}j_Z|X;7?nM^Pi~{ zt+CT4W60=i>5v!+$g-^|!cjS^?wKxzpa>K1D^x4&iJ=LqkHvlW94PAk)Igmdmn&0zQQeLe|XSsIzq_ea0=0qYvhmY5bsnjbQi^aY- zO>?hI&(|liY{_t0j5y8ZbrZ+4uhFRw*>tQ(Cs*{j9IB1a9cQG?KZKrVZ4qR<%rYXD z-iyXSHMX=HLb~3aOdBTzU1(nloVEv`Se^y{()qL=GF|?R?6Zf=p+E(zu-A1_5jITI zc_3h?Gp+XyT>%LGj>;akG&SEP;Y2bvIMzzAgtMg9bl0C@T)SwbjQdH$+Z@y4_4lRI z?2y<42>y$)*gTUJnq8cI&KYmCxYdo^Kj(4{$fR+hA8i^pd%Qd^?nL5c^snq|0F7Sd z)AL9VO`NX5tP}*%-9vs-S4c055m&f0ccJ}z;CSIjRZo-{TaTlT?=W}G5G+?DV2%fa zI++e(rM??w1H#Z~IoblFEpWA4z%{3o;tbBwld(1Fz+Cbe^nIsvpSmqfF}*l3t!ip& zI_4u&5c!G%!KK0y%d$QqOK|8-1oK%zR!4;D0lrEo^jBfNdvAnQ98_!zdTY0remKz& zC)RtJ1>k$IvMh!itq68q1?VV6Tq}uE;yNMvrWVp>5z=PIwG>A%7<>j7Xz#0hQU=n| z(Gf`|lm8&+iT@nVDxE6ja?x<|dkVgMO!jaaIH{$j<+RtfGPMx-m`o6)n7PUJs+JFz zeE=L$Syl$361>)FCCyrOAIzSZV*Ck>nie>Ge0gu5MDhivcFmcA#2r2(W~40K zaBAW3r~ONI|LUvg!zd|`6zAXKH^psSgJHT}#T61g2qdkrmp)Ju2ansz6*_(q}yt>OO@`0q7H-s84_{#QIpJn`IN z-C75jE{}a5nqIS>%oWjjVqlh7jOlK>EJTNTN-dct;GnJ*m|E^~6wRzVShZk1gvvd`sOuAz7E; zaD_g_8-#E)Uzs3%*1j>r zertM}eDO6S`w)pllsgUOV5b`KSE0@@jD6UujPtcnUd9m2Ex^9dGlQ1biBW5#EpWZI Zz`u#~is9^IQZ)bo002ovPDHLkV1jG7Xw(1z literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^20*OA!VDz6R;D-sDdu7)&kzm{j@u9Y9{{-q0X`wF z|AAmH1Mx^ebUV)MzzhDMIC1aP+wDOLbt9GBc`|f|)R7O#t9A|+?WHAE+*I^K5 zG|^O94HT3qag8Vm&QB{TPb^Aha7@WhN>y;nEJ`iUFUl@fa1J(mv1d~c0|R4)r;B5V z#>AzQZ2b;92(%vGsOymtq_C=?h(TznV@LzHiq#q3OAfqF7n=MXTzXqX^#q*UMJ*g% zEE>8M6fdn|Q91JS)8~`W z1&OjIjrJLvTJ+5XE{kg(Tq$-s0VVPASxVPM!E^p2m+;3>O61ZPp0B z=!(sXt$*KW5W=#eYU)$&Bl>cxJR7=f+tu3`rl%MvJ;*SAfZUpm0RS2<2vcG=)apDUL(YxA<7w!~{=xz^6y>`fe y>D%s*?b-ER7MCZ#3b=jgrP{g5ry~EB#WVbWVq;#q{U9)|7(8A5T-G@yGywq3OZ&J0 diff --git a/BTPanel/static/img/soft_ico/ico-load_leveling.png b/BTPanel/static/img/soft_ico/ico-load_leveling.png index 227ea6e8a109cd00fc2b22510d6caa48d4cdf217..f7aab18cc8525dd831cd546c1da2b7977ece2afb 100644 GIT binary patch literal 1137 zcmV-%1djWOP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB4+et)0RA>e5Sxrb(Q51e}<~d3c zjv^#T5TW*C7!mEnBnZkNTbM|MEdnJ+XLhY~6Gf|0CvY`o8=FW<$Ts~*o1ld#Bw^XF z7y~LaNIK>F={r+b-aN;-@8KJoV@4XpG5=CS{WI$x#f69RDma|nu z_4`##9Wf-S(vD3GJfnD(Gw)kpzO{qrVLUv5UHz)Awc8DXY!a3@cJ1?U3J+jcFB`@- zI47Oj)gT3GE@q`grtU~jX2&GrWCc12` znz3Bt#f;=S!%pps8F8AiT;tulM`TH*>w4(Ji1gsoXjZ>hb@h*)I4%{}0x=Blh%D>v zx}hsSwO?HKWLZ`vkMW2Lv~giVxGquqnEJ1FOf}8<<``Ifq{XtWHLEVa*xMT(cRts&5CiWzhzD>TQkz%-(RomdK0o& z=p=*K2SwmrA`WIGY8b|{L;eal_k+RUYaWjqNMB!H1DttAzVM9YNUti2ax@SKOk}gq zJ+%RatxqjOv$TZ zDDLR;MVZQWO{J#f!oUZ)>EsV6adY@ zDDQ+i2uwM$SOv-iX5uvJLU1+6c`sX(bsGCDp5cXsg?*+VRv_E3z`h4qN>;NOlokj8 zY=)Xcq0pomXl;kXVGS}en%ZZWdId{?U_;>2k-cF7_Xd<#@TA5EkNKg4ySA(|8NjMJ z1o;HU^_ultX0wYx%+s0=Z80PHFbifM#Eh7;kq>Qley90@Gx`M1Yr5#N6?#Qqr-!Tr z+{5b>CIK)zP2IF6kBj?iFWw;1IMhiC1h*!AGtl?L%}h?NV?zML-$@QU`}%7{yD<~i zDq|d0Lr)j%xD{vavmoFr8!x4{?vcxozQOa+#xso|u6A~I5|&D88x=89?jeGTWIrf$brYTM-Z(}VKO4cx#J-+wm2AAVI?VcYhr+&R~ zEx*9MaLez^pg4}541W)ET{#`cGBIB8*ZDQB&kr*-EPh~fI5*LW!*VIl`pH)7I3ta= zsif$#M^;U0=8a!f?YrB1@$@S)Qq?yr9Evih;9#c0Q654gBqKeLhY-Xk1$yZyYS;eFYen44$rjF6*2UngH-w4PyWR diff --git a/BTPanel/static/img/soft_ico/ico-masterslave.png b/BTPanel/static/img/soft_ico/ico-masterslave.png index 67940a142f3f0ec3484978e51a93b575434f40e1..8ca97572d20bc24ed3d8c017a37609c6d2681fcb 100644 GIT binary patch literal 2061 zcmV+o2=e!dP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB8cS%G+RA>e5nR`stRUE*7_rXI! z5Vex*0i;#8hTx_kVsF;c5B;ZLvlVogFCySQn3)l9l={nS)~qR0VQ!RW+qP{9$k>dGMCRJ5FU6SmRrq){ z1je&r@+BZk{|-x@!IIll82d}Z7Pg!_cWx`jtc8bc-MKjKfG>VlZv=ScZ5YZ*e2Qn* zd!y~IF_)v(u@j<@Jx_Fiw@*X#L*`Zw7|B7D@cFu1f*aVW%hYx7CCaNI`eeLvTCd+M zY*ePIA(L;G0lFLvF(gyT5W?e|atL)HHyVp9k!eJZk|8jRCz9;V$;k;d!rUKPks-1~ zrjhwdhOo@(9J;w=j7Q`2DP+=7xZ(8N%GfT4$>i2_UF zJHXhh6DCafLN1QTGqmc;h9JmUT-TGb{QUg2EiEmxP$(Y7;}~4Pwg?s?`n1cJFFWbw zr?s`UyAF-qr8?+11wIJ=9tZ4SwQAKL-9&y=lnmLkXOC>btF9)gsi_y}`^W`aUS3{6 zM@L6A-X4Y_Ls2q5i=d12UjiCwpTQw*V2`Dwq{L8^R5GN#zCIR-KY5hO!1CqG z#mm2YqcJj8Sy?&W2))u_XFF^#!nB`g`~R@B9Tswls~tIVuD1IFH4C8l;vkcDfCRf^8P|K4~tv<^o zuzz?Eu!a=MiO8ZaD2sz6@SY7{wPX@u!o;QShgpD zE`>f}T)?k#PvP{(Yz`am0}kiyz#S8lX8NIe@zDp}jj2YhOs>~*H@acPu62?CJsTl{ z9hzf`Ck2!YVQYl)ELz6lU)J9rSh5n)g$e1rW=#ZG3ocUE>- zt*>dFj_sOByURUcPp^_8gi47d&KS=Jk6ay&kxSN-OJ-t}td!)EDd-#qjHW&s4C*Sq z>(T?iR@abQ#LQb++E~qQi=#f8Q|_}U8N!FrR5>b9)_>$_G$=9eTz4zqQn-WRk63H zerV-$Rlf3ke(CX1cAX+bE&fLE<$9CHmGo)|-_YyH)+HD-j%f8Y`+EWRpugN`(dVwf z5N&sRv&0I=psShbVcAh?)-0#49_wlOj4~YF`H+8%F#&kJ5!f6a9-g&i$&%(CHvZS5 zcO{&zUR*ZD6Nj!G!~b>8$mWTP_4GW{GeV@A%*qtfGgf*rMqU>7Vcc%^{1F}wnxx;K z616L_+@v}Gb96u5WC~&>og;ou3jZWgj8Zb2Be_;MnFQSv(P7x5+~`C@LWy% zEV!O_3w7tJQI|hPLxBj+TMSsDS_uyjA2^xx!;i8dx-5Au;S%{ciX@}Z6W}m?%m`-g zKhTdMKlQvD8DVe@tzkoY&&LQe0U#Eo67lqSa5Urc_jCkxIkW;c+7hZSx}cgMQbk>^ r@`w0)x{>-o8Sub>2L?Q#=7IkJ0XuI`U6F6Y00000NkvXXu0mjf+`7C} literal 1095 zcmV-N1i1T&P)NV<^i$Wek0eQX4>wm-^t=76@;`jTz?v5Alo-6{ErA!-5m#-p_xZN?V>4{Qt&KbCr+);0+5V&B=3j=O0BQ5hg>JPvXF zw_i2Wh;e5dppBW)(wQ3BX7o~S2;8<#!?0oAlWT6@0Z?0QeMa{#`oLK@)~l{e~5Q zk^^|L@OyUp(s85IS=EA?>+AqVolOvJ>F8byYY$=ws)Bac2@% z&X%{BS7q;;W-frQbJ%+aY6*Z<>Gy@&yh7uzBlb0qTy^7Gs8PmTfZ(!j#0^gGIv*hN z*1UI%h{UL~1){w&ftLaB^Snp932~O$fiI-vmP%$33%4o&V%$|4s}IH{2p@|e5&$Be zWkREsK*Iq*x|?FY#Ld-kUh%2}5E?(Tp#&lX$cQr~iP_tfUrr`fg0?C^#`rl9K7ejW za2g$Y{TyEfpwRdd2n~=BXE>D3bh*l@$Jf{bWR2%PVdtizVb(9C!ikcn-<&wJ0mvHf zttYy*>%VXDd|{FYL8(TfF>z)JkY~K==+f)`)Sd&O0Pdu^ngC?Gx~Lz{Tc3ddUyvAe zf6sD$m3&=TgbeF|7AGxvpcI5E zZYqQ>^=)S<9e1&A_6dzL^gvw?ChkC$5Yk!9Yo|vkr6=f*W0W8)p8uG7FqwrcHNIA= zIMR2>FoqMeq~al#1wgC{Gf(82`_VLvtg}dZ5LVLF83X7_+&v46gtZsa(>Z;rnLKV` zyp}g+a$HLZHQsBrjF2e`gkPlFXg zSQuXmz+bH9_qR0ACBF1|pV#VTny4gd%cc&h>53nbI`#9yYJs!OW{sT}3a*O4rOdkLM N002ovPDHLkV1l;Y07L)) diff --git a/BTPanel/static/img/soft_ico/ico-memcached.png b/BTPanel/static/img/soft_ico/ico-memcached.png index 2183430fdead232dc1dd81e5e151b1783e2eb531..ebe679986258ad0afe48a0e2fa7ce69757ebba5c 100644 GIT binary patch literal 1678 zcmV;9266d`P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB6_(?=TRA>e5T4{(JMHGIoXE$rm zH8G3PXzrc)mk8b<7%x2k30}Vf@kBNXyE_4IK~Pb5b_Ekb5fdYdh>E`yyg>AiNAQOR ze@xG2HS4OYQR4=(GtNx;UUye@RabS-5&sybV7A`zz4z+X-Q5e&ZNb2BqAY^CFLw#l z8=nSrv4EcPN=%^OIx4YJN}P46yco!zo!$adJ`2!GeW#qmN#X>)nDp!DLexyQ1eI7Sj8ia~IYO4qg1_sVl zMiCJk=^76EfbAo zT5m}W)ohGN;}R|`O#|kbAiPb=g#aK#7+pq-tV{y|`>8o6#~yQ6#dJuS1^`zZfa1mv z4W5{!!G$3J4=Z4)vQyDSxRWmCmn)EHjwqT4EdtIf#gu<-K+9SwdPFBZ5YJg@wd=s? zaJ2rjWWySpP|W8{8F3|lD^1f^3^~GYFkV=x%j_XPTK9E8NDD7qB)E@)od++7epv8p zu5~~g->FG^ZJH?6iHc$Z@$;A$=LW$zfL_qsrL#%e6(q(WJ`Usgi($}rv^7qkSd$(YnfQz`&OZ!3C>PV#u{G1}h zIl7YsZJtM@%np(~jQEl#pRuH8#Lpy|R%Zv{!^m;{*PJcTp|*wg&v!JLMP>(KIB)ZO z0=mke7w*Ui-@DXO);b6yMeYV^VAOnKauI^2a(Zbmh~p}39LI>O(nGWw_$*5l4=J?} zXDQl2WM^WW-P)PXj>Zc6HGk2aUXy5Kc95#rp|DF%i7yqPJs>DRI^kZm5+6P=gmITCJni;r*n2DY&}`oOt+Euh+3^ZJRVfM5H~YS z6%U_ObVS&h1(>AZin&p-z0Pv z+d7d_`F?8r6PBe@K<{`EZlk;29;aFgCo9{aDPE$++oz1g=rzIv^iIM$qD+X+x#*IA zfUa%pU8)S(A;>Mc07lnM8tWF^72?1Oy)%t_~+*4-z9_!jLd0!CIIp@qngr;l|SJg{L~_QAdo`O`yJ zrTavL_{)e`EIdjL*<;AE7{;=VUWE8lXFH+0PXsZ!?*ptEzMURQ;;$yDEg?*RO#oaz z6Oc5v`$Rz4+u=?0V1?qrv|vik7{*$~;nTvn1>Gki;2K)Q_O3UUf1W}ea)%=+!teBT zlQCuqeT84BOif!{_lW=u!lZA%|KLUIdGWKj)ePJbEbOFw%D<7$i<6S#cKKsTgbpfv z#2IL8csDh68|l8F5%@Cr1vJUht}jh|*y*cHp*=N{h7ns1i1OHrKVqJQ+WgpokyA5R9 zdTMzCchfYP$%r!qQ`7vf2>=c8BK=(*{6dQK$!8;-MT+O zL75WQh?3y^w370~qErUQl>DSr1-Hzi)bjkI>|zDyV6zu{HuW$tFi!DwaSXBOy*v4K z*dYS}*X3eb;iqL)ZfI$6Nhor4Uj6@Hzc_dDfm5GCKTj!6E3-D9%k*dYYw5Ap=%D@x)X74=;RThPYJB&sRy9EkPuYVu*&yeZG>eo+{EN&IJY=f;aUGT#|g|{;6S` zvFGm@_E)p5%u9&o2J@uIZ~(4jpybrD1jY|KaEC YZ#b4~Uc4L`2#iMtPgg&ebxsLQ086=EvH$=8 diff --git a/BTPanel/static/img/soft_ico/ico-mongodb.png b/BTPanel/static/img/soft_ico/ico-mongodb.png index 238632ca71914ee79015fcc299f56105f256c6a4..be7b00a959f2ecf0f7b216eea4bb03c7b97605a3 100644 GIT binary patch literal 2067 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 literal 1240 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 diff --git a/BTPanel/static/img/soft_ico/ico-openlitespeed.png b/BTPanel/static/img/soft_ico/ico-openlitespeed.png new file mode 100644 index 0000000000000000000000000000000000000000..9c73ed202e90ec3f2a911cd077433f05af3e1336 GIT binary patch literal 3200 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 literal 3350 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 VN&V!B_FMW>u_ZbZu3GxV{Re|wv#S6A diff --git a/BTPanel/static/img/soft_ico/ico-php.png b/BTPanel/static/img/soft_ico/ico-php.png index 63a624fdd1df9eaeea6a39751826c3bd3f9b2599..760ca4a4f915aadd4ea9ee37e86c62ed222684e7 100644 GIT binary patch literal 1537 zcmV+c2LAbpP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB6Ye_^wRA>e5S#4}nRTw_+ZMVUS zB*utCO^gPONMP%TMiPFA{vm!OBoYEqU|H5NnZ%DDM%K<$(oU4bC5xYHH-(_a8Gjgz z{xNYHKhPiThE5Swei+#%Q@6p!cGuqH^PcY9-F9s=mQADHleF*WIqyBs`MU49LM&cs zYEMZ1afGmxMkwC%m>sPtmiR&o+DXg*I3@iA!B{dWrK}=Bze$oQt^Ze1yEo3Ke!lCM zr9;C*Z<66@jn=LE)M;bhuEc|5l$NZLX6h3u|`<_DhXuZ;HBN?(D`=8Hfg| zR|ezBz0#5|YCop19fxg0ZXIPSGp>#9uKJaEwFa5t5{xCDR18swciz$x?`kPU1?zMG zrC(BZ9qWjUu3)@pr{aZifNh4yb2H1rl|& z+3eKu*$}Q<^CJgfy(Ps<0!}@{$=4wgj^kEjT92|#7a}@?^W+9C=N?)rfI9t*vMboh zl;&sJnGA}t4W(P_fM0-lXB`B+UfY>w1#uei^nb8SQvB2$JF#Bbq|wO~johK+jNsF} zuA^m5v*6OoXFE<_HfoJG0u`~$=ehU%SV|qs(Lm*K?Su0;Ydpe7PcJtoE;KTp80aC} z4~*TD=8h8^v|%JYKB~@puV?-K2iE3IevZw0a^g%d(ryp zE47}fJ-aY~uL6d8{o>$sD#T;PwP8Z+^HE7fFtB#8ke}TX0KL7CQz1QaclA0{EI^^U zuHHq!MZiVCMZiVCMZiVie}aJhQn!%(v?gYmwIwC;!X}*V>d8iDh-s_2eKz{O-uXJgsY4_^iwNEhCdpj=e zzSMGFN^}b8;EtBs$^_d(vBXy78F{bc_zM|aP63RMy%j4ChVQ#NJExcqP;^9q?4D`A zEP^>wj@-hJ#HHcFZnT9(Px0orpF{9%(MIRtrzDLW> zIIP1;+XC{iwrg5&L@+&Sv=dVVaG)+ks(&z~?O4aH%ukI>)qs>RkDjN!6%~gSkH26? z@BNIfmXV>W&A?1iz1As8#w$*FYH(n`Q$}LjmL*RM0D5*gbfnieJYkI@aKVmdYSAQl z#huYwzxpnXuVc9DmbbDE9e)GJKB!wq+WHX&<1Qr=ecKZ7uMOh^w;Asl#gO{6UqMPV zM&!9W-*;E8leZ&Sd=IHhlT51@F-7(ADD=idHlJ;QKGtH4W8wvQISg5w$ nc3cEp1Y87M1Y86z1%bZ+h#(abLEqZv00000NkvXXu0mjf{RYa5 literal 987 zcmeAS@N?(olHy`uVBq!ia0vp^CP1vg!3-qZHfdS{Ddu7)&kzm{j@u9Y9{{<30(?ST z|Ns9VU$!m2WJ_Gprud?bF~yq`iZ;g-Z;L6~7+<(CK7T_@{`#2w%|He5C7Xe2z_Ocx zQn3Xa;tDpz6l?}6K$Zm>5(m}`G$F2VGf)j&BSai1h#~?r79y;nEJ`iU zFUl@fa1J(mv1d~c0|Vn3PZ!4!kIuItH-jD<2+WyqppC_2hxtPeX+38dg#+t$o>9y{ zv#8^w%Af!H6;5tTIX6XqTNnE;$JEkN|K6%)JRf@3H;U<{nj5Z4Gv}OmcXNkhS@7gr zH+}WynwVzo>{r=3+hL*f5BIYjA2l5#!oPd2U#;4BzffUf2S?D8>8gRx4wZ_;@E3*( z{r-|6k{CGq-S6O^9Mb?V zv93#6ePONcX6uaAY%BWq-Zt|``(}plss&P(7bjc!96g=E8nW-> zJBQ49FBuE-iXx6>FEvR0oL+U~Q{uw&CUPGBIW-x(3q$hcY+abdlnlS_>6A<4Irt^| z*u{6v&D;#Jt2ttQ!!_3&IdRgM+=ls?QiPi{=S5J~W$<+Mb6Mw<&;$TX CKC*8B diff --git a/BTPanel/static/img/soft_ico/ico-phpguard.png b/BTPanel/static/img/soft_ico/ico-phpguard.png index b4fc27b134ed228f760fcd1c26b8983626940b0a..09d62a430ce7a6316978e8f3006d725e34d118c1 100644 GIT binary patch literal 2241 zcmV;y2tN0TP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB9D@jB_RA>e5T7OJcRUE(fz8`>~ zi7rLwoTypL<GQq5^Sr;`L(p>LZugzm;6l`LT;jyUok_0~%v(-3wVO9@eo;p(EG#S{0@}+uMz;|)T#8H- z#bUuU{P1x-C;6foji4{G5gNt~i6>{wG~y_i^@bRs}F$U)#wSHPT&`ts0kNX3R&o(Vj3!9vv_kA!H1p~!U z%+(4z!3bs+CdEPMx-7=NUX`i_NAKvVkz-a>*Ub&1sWBBPbBQL3(&dKqnx6@8%&0v? zG=dc-UYA5RNN|bmjV~XqBf8ZU8tqn0nJEWVqhg?KRC)3Z!V}Ar-=dpfL6AQpet)m) ztm&DeG3b~Hmupy7-v~IK44u!c+emc4?{WUgMTc7fo9fH?CMPKPL=^8N1lH4X!Ud_- z;#!!?pq3v(SK&Bsbw)T5Q#T#CtLwtAmW*I5$$kJL#yC{F)=SM?~I1l z2R_vvK&PpZ^)??bLt3+|7mV+?g0Z&hnk#Vyhp)c6{MzdNfRpj;Pt$rx=k>~)vU2`R$~&DiUhh;uO!kLjds5M=CXZf>US z?;ZxS6x9pXa}#W zGx2RRxf!?~FEioMSWiNAv;Wd@=4T5$w>k!?M%y~Zio&fFg|T(Z)1RwizJE51-kCa6 zHUMnRn zt+ceXzt88p1X{(aRjdBe@;GeigqX3hv4aua0yz4G3maQ(vR8C;bhKeq?L}ajMn1<) zO8{q38(hNGi3mekSi-jv9gZJI0Ca3{qlUB5#kO;VaC?J=pSj3C7)qse1vZn7_Mg zGn{<46Tx~i0yADXSs80r%~# zP*4*NFChtfEk+yhdaPj=gRE{fB_$<8Z~#t)tyxf9gm#G50BrBWo_wv{d6mmLCSq9S zw5Kcs!k9b z$>o?xBnIw>42GBE$e|ei*NGs0?TB#fGsn%mon~Ui%%P0kGHop3_!_o7S%M;rWCGh9 z6YUy)ZpqPRZfESS)X4!^J|T(1ON4RPwXs>%*5lLD@@9p@F zBubdV_A*h4(?($jBk@|UOReN~O~M4v8(opYxB2(BBB8((<$b*6d>bR!jUIjouN-}n zAmUSu7>|kwKA&7Osv=3<+mcQ|k)uPpw}Gk9=g*6H#UFsWu&XisXo;9{rwB;y4q`CC z(YqR2Tv?E$H*tctkKp&<=C7>3nlNF) zvgy;Ohn8)vydB)_M7W_HJ9fmjwzhtW0G=lrDs%(zyJ+c)XD64lYH1=v_G8@Y_e97j z(A$XJbpbY}vXxFa+Fd82HH^TL5!5HRpW<``M#&roZ69FjUHTtG=$Qc;1-uR4#@69= z75%rNM^~>TqKyEPH3~RYi2|R2mVf=DJ=ZQAlD1%8H306r`g-6&=z)I$uKI9=>vgq! P00000NkvXXu0mjf^q~aG literal 1438 zcmV;P1!4M$P)n=XXc(cb0(9|=cxvnOa>LGI-m~70FA(n zz|FvIz_q|JU?1=q&~rl^ z03GUiz#?D`@_m&=5`ip2;9cw6-2fRf)mdB~jsizjpc;|DFi}ddEsO( zNCm1132j;H+d&nm)xfazZEuYHYWLVw9XI$}}H5^4hW1NQ?TAZz}K2$@%adw~(4Lj`JiN*%GNCJN=OZ`T5-Kn(+T zx>k&lLKISg>H!|FKu0X9nSse^j+ye|8t8~cH3V7<{}e5YkqfOOX$cj!@~B*-MFr{^ z#EXTc5vCcu3>}3eu4GD)L|~fxdp_b_4tSvG`3SHzL0?)O1;>@NGl{@B!agdU9RwZ) zJmh2SDS9`6M4oKXZ*L(HX8;MKNjl)4@LMvSP9pHDlUWe;()xB736uZ+JqPqg$PNRz z*dMFIq1}!DQz-+JKH?!KbBhYp1v$wSpaNBo%v1&`%S0k+2KtdILlbZf@D1X{ZKRJl z#VAL|LgY-GC5Axkq23+1_X2kSUDmge2kWVT3e;v`E$|`GX*?5YXzUVlfaJ;aIK6?z(c@X;B}-pRuYK>+$`)tDrI-8 zK;53t=b5Ue0<{9ri1&9J&*bBld0DB1@yz$g1~UWLs6%~KIsMW?hq?pU$z|Od0ZW45;+kxkiYIi@d&UohQa{H%BrybdkkeN7% zM5XOI)NN_>6re+WE8>hLi03z0-e4IkZ8YGcx0rmpB ztZ#?X+EWn$XFvwYRn{Rp^$)wb`TKwefh&P?zy=_+zRgu?M^yxh3~NNf>w2Ubmqo6Yx`9uT8R|rC zcV+?a06T!=#xrBpj9n7~Fd3m{BUObbfh&+Zvr%MYnu%nyn}L1CGiPfuZmkFuphI1U sT;44M9zkOJC%{hR9&NN#W?2dT29qlzWLAXj`2YX_07*qoM6N<$g6{`>DF6Tf diff --git a/BTPanel/static/img/soft_ico/ico-phpmyadmin.png b/BTPanel/static/img/soft_ico/ico-phpmyadmin.png index 63585a13752bdf4362a13f045b97bc8d7e9b4e4c..be105c6732408565ac5bb00afce64d432f99a0c5 100644 GIT binary patch literal 2691 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 literal 2329 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 literal 1017 zcmeAS@N?(olHy`uVBq!ia0vp^20*OA!3-q(BRide6mzkYX9x!e$L)vy4}jdC0X`wF z|NsB*J?_l&QrC^0Y9Qpk@AkSs}>8M9V_dbfA zs(EHAonB$Le@@(SFyZpkqJKJ9MZB&!)qCfO*PMG>nwLASSPZ#DM5wtz^bkt-3@ncNG*?9{NlY^ z`+}p(SJujF>wn{lOGur{t#^2zaKUZ)btU(+nJ2~@xLntl_Vk1osIQ+JCxZaDO!SCiGO_q)Y0v*Oj8mxtOZrCc}DuQ|5OqxX$k{apw3 znuMUvCH46QYdFVdQ&MBb@0Om*0 A6aWAK diff --git a/BTPanel/static/img/soft_ico/ico-pureftpd.png b/BTPanel/static/img/soft_ico/ico-pureftpd.png index ac1207e74d626e5df3e76b6f0838019caaaf5c02..dd675777508feaa215e861b1b145c456f5480d2e 100644 GIT binary patch literal 1210 zcmV;r1V#IaP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB5BuPX;RA>e5SxszIRTTd2o8d=? zAFW1PLTD*2NCp!yCgMVqh7cnNg_3sC5W-HwP8SLbAlPsefu=L>UB5GWUhaFDzobKf=iKw%pLzEV@aRf^fB%?x zC$&Ot2JZ?@6jeq6Dn<$AV{LF`ugU;)gjEN_oPMsVcp8L~S)owa?vAzLJh*T$`}Z1l zaJ_qe(FnNs*WxuupbQNwThVFDZqse~eqs{qc@;yu7SF4rID!hQQ8SCbZGib|Ixq7G zv;qO+I&oL9E3d&%2SKoNWMpKbn%-v7g8)-z0h0-Rtst(v7VkRZA$o?pv9W2DyOhUxuQ6tNcz8HQf=)y3@PL9F%wWKj@SEEw=G{@oLNc!0<<*7( zigp>^UaZq)MU&bhkP7$I9qU6Z?)hJB`#!{&y;vK59U08`b_>%1xSP!UN zXd)9r@IC7{QeC4If1mB%TrT$v2XaAl#Q&Hr;vv~CX0eA^Bz_eWnb7$-zdr6r$2w(! z&f~dYfRAYVVGzNPpD+fy(|r?}q?Jv!k8%~YGr$xl`*&t>mcRGg+`fwsV(@Y0`q7O} zUPxZ6@DV!PAT8zXN_5&BUT&#V@603M5%36j1Uv#B0gr%3V961%c`Q!{jW1ZP!ns(5 zu3UM3XJ=_s);6hp<%%zPFppR(<$t@%Bf83z@|%91*P1tJb6I7Ls9l3L%;5^{Uc$3j zZ|3l)_DNhARH&4fx{ZAJt9pTuL8=`ubDwZfpRs*{@=sOnQp#h{1_uW>m&@fz>c?4| z`eL@rv4u%U(hFFDSKK5d&f@P2;-$&LWDS$ZGl^5ug|i~)HY~j4yl%_5O2Z;Hpv^oa zO_dncl)Tam!?4IDlu$AF&e74)a|vM+4Oy<7Ikmh;Kl|zDvikD=AEWRZzSneELnO;1ZY69M8Nxd;pk737_L_Y^DA>>l72pQvLz!AGnY1xSzv38Hx1a z5Es{ZCh{ELE>?3H^_hz(Q#Qky>c9j3a}nScUphKCV@)5|PM)6i2zUfM0v-X6KwSj> Y1;#gHt{#bwApigX07*qoM6N<$g2s&_dH?_b literal 45433 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 Pn)ftxZWrCMeEz=xH+@TM diff --git a/BTPanel/static/img/soft_ico/ico-pythonmamager.png b/BTPanel/static/img/soft_ico/ico-pythonmamager.png index 3ee82d951cffafd274934ec22ac34adfebcb85ca..59877a64d5353b8622cac26dfa6b7b40350793a5 100644 GIT binary patch literal 1660 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 diff --git a/BTPanel/static/img/soft_ico/ico-rsync.png b/BTPanel/static/img/soft_ico/ico-rsync.png index d59fa198dbd255072f955ac5664484072656f672..a41a2f315caaf945c47411fbc99749242d8452dc 100644 GIT binary patch literal 1133 zcmV-z1d{uSP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB4*GWV{RA>e5SzSm|Q5-*K(^44Z zOZ4?nt6qY7Fw4q(7#KZPP)SZ$>>*+}=R-mw_+q{F5Yr)%#SCeFWM5P-N*SaHkp_K0 zQDjDH(L+TGOWnQw&fJxI@20!E_iR(R2M+g~^Z)w&{{M5f-7`YWW@f<5fSCa^16jxb zRmThj0%d|AG>W2F2wA>buAWm$zhJGky1M!t#-duDskwqkQ&ZCc1nvb1#kxi?muhNi zJQ{Vmt0@43$Ph^EMHCl6wI_=P{gu%1!{&5M_XzCnCbLV2+@f;IwiD4pg6a8uzJCP; z1!rR0i{N=N7!2kyS*DwU2r|nuoKkbSTz^2ImKnj`9u9}krsRN=vVw?SpE&4UAk)w6 zL8h*`x!JDQmtMOZy@qPL+}vE>^z`%#5Mf*ECC<;3TF2o07wktY7Rwc{*W0J|#ib(5 zsmJ4ajj9CL7-Vedt2y_r@K+v*M0!#23oMSjajOV(YPDJ$@Evqd9)Q;vNwR`S5&YMq z*MiI-w)7pzKUX4ERaId)ek3_h!?Oy@9RFE5Af|EbCiJ= ziMS)(;N||gRKy-CTk~~x{INuWQqr?7XMLkQP`by4E3&22v0aEv-N%c_Mh2D=I&7gd zG%1W9+|*f;6h9R#f=wg?uPO(ABvoES!7!1CFvC8}qa;`yY^kD%Al_Oera~kVf&8ZA zEf%*a1Sw7oZ!NqNK1Uf)5S?w#c1Wl7yqV#Oj8+bwfH&5&+6-4DtLSCHO(L>nEQz7v zGh)BKzgwi@F&uZrMTTZ}bBDd_lk;hXW}5_x9JZENteXS_6ioo#od8=(ONJ}5!a_@C z3EhLLXsd`IQb8p3K)I74h0&Omki#jVPM~a<$h(Tc3HZI8z<1n|qu-G?HaT+*WtbyD z$unGL9{S*X_$^L3#RU#qOMAr66SH;rJyy;v@M3gxZO#VACqy9HtI!-{nd zak#mVut``Y#|pqu8eszbM-u&1k(8Fwv!$h_D28WPj!QuVEUz*l2({tLvshv;H^|nQ zVPTkX(-@3ljAE7W#GN?5-`@t|Nl9TTK9TS?{H5WRV~Zoggt*OfA_J!|EW}fBeLQ`)8l>rriOqhNbq;VQZ1kAlHF?WLK%pDNLK$SoIQ+eo=O@f^)Fhi#?lqfa=6R>YR&G z6H7Al^Atidb5j`%O!bY7^$jhI1A46(7#Kf#x;Tbd^zNPdwtljK!10xr)^4*(**tsA zgB#4%0ng5u%wDOuBqn!T+yDRX4SBBf^Si&j_oJ5aNzwj-osXMR|K`6b^hjG!lv^?3 zWNyOxuY4UnoE?>Nbuk%!+@2#@_gNqM2c^y@`$Q4v2Sk=DHR_4~blc{IY zyf%7r}%KS63`?mRMZ++OOwL4@?SeG>xojmlM?bI~hP2c2xEo&4h z_;tm>eg6KMqE%mRF`X{*&sf@crGlGtubROgZK;l+V2e}htj_Q0T5u|1vUyJ5gs&Sf zFWCChV*T9q|9-D0JX4Ze+s2+Q`e%0Pv+YT*=AS=nSSDWi?%WE)tEa=}hxXp(4x4iB zPheNPSE@Dlo&5;{0($cEUa39J`n%?`{L<|i$M;*-GaRlhaQvqE${UzG7(8A5T-G@y GGywpVFTffA diff --git a/BTPanel/static/img/soft_ico/ico-score.png b/BTPanel/static/img/soft_ico/ico-score.png index 67d4eb1dadf3c9c560c25806999a269f3af4aba9..ee0916fcf6f6f5ebd60c5a18a29c103ba9f805cb 100644 GIT binary patch literal 2017 zcmV<72Oju|P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB8OG!jQRA>e5SqW?uRT!R`cAIW# zs-cQp!fwlDJDQciDTZ_Mo z<36`TM&Nyqhz1|lp_{j6&6*rj`$nPK>odP&`2hW@sW2l@I>xwWJvO0Shv0z5liF;8n@3s)Xi|{ zx6s&7Ko;ajY{L_D@gM=qNFZL3lB5#qS@Yzz**y#h^>FD?4iy9MbOv;5Hj;9zsI{Qa z$1@c(a|?YtrnCa*%@LBb*JqTu^V+It%r{dbQ0juRTqybkiVAr_2B+80&It;EW!OBX zJd9WEvFxi2H;>BEH^6oXV3i+Z7|50MD+})r;JL>N||c_jH@m<94(?z|*ua3=}6MBs{Cd>Bf{#9KU%wWE4P1z90&b7;7v8 z_d^CA+dn7O%n#F3SSwIdQ!~D|w|66OQ?Z+E=+EJ4z!CI5dcpqr?Ah)m$JB$8aM~8O z--!Sg2ZZj?7lav)&7yTM}^Np*E~vfuB&3A#TqF)_WU zsOSi0y&+>RJCzwJB-_Yf*6Zd3%9{{@H_~-Wf>}*j@p3@;3YUjc zNit;?i)ApPS=7|jq|1=b2pF>B;^K6#2uy*t_jLMv1lxvLrfBi2SFgSf*wfL`aY&0- zE$-N{V`(4|5K2l){?an=W2#)?3<4IfHD@>bdAcM?xv0{A(&E)fK*)#Sk6I!>w(p&_ z2nL=ee6lQ#VwxYzgkq^s|;S2ekIDkDI!Q72DYIqr7>%2x7Z*qT0f!|;0>UP8jUKd95?cdxV`&6-1CeaOhpmuN2TZ? zQu_Y6LjvAgN3HRe8AeqWCmsggRv;*3>BV6av{|VXMDqc5p`?2YRl?V(|NjiLq(OjJ zYHVy&ZQJTIHw3-6-X0Whv7K7n9I>p_sL>7kEjt)@U0vO%o}QjB;lzXx?j#E4C8edM zzcHR@`-!fsq1}GpNqngpBF2l4yBD{fAszH#xwEs=g<0ExSvxThz5ND)04xaLFapRS zg;4%3l)pC+<&k*o&Wue6U_J4~i$cb^yteNdKdK!n)*Apzuy@{SwPqF;7G7a=qdsCF zcx9Y|SH|{`!XuL=O?oanJ3H(x!AP+gZk#J;M6bW+1QMgX{z!4s{0mE4zA)m)3tKJl zuMrK)b`D+?jvDb1&NL7xSpfP0g-H}Y#4MP8Vk4e`w6yw}n}c#tc_Al$QIM9q9W8qz z$-<9Spw|%(mhuWL4wo(PvLN(p)o=A6PjS2Sp+Jmy7 z`(%vFZNA`WrK3CA_ALbH2m@mp*!}FU3vMa>+ z{LY;_$MQn`!EkuiFw2M}Oz8@mg+wXAj$cn7^e1OVr^^^gT}X83W4`Iw4NooNz)8^# z;b{;&kMnyhdS%n-r0)>`U+DMC1o&_Q8-JRSS<^s}g(TeQXP{st1TUqeq>Rtc&-WTB zxm!4@D!g8A2lS7}b0s-Bd2B&J0e#aAYlf#5aiQ?*Mi8S=F6;&P6oR7v$Y+UmuNv;M zG|WOA{Md(?Sd6j$ThqOABxWa;fmjCapA7sBZyDB8FWGBr00000NkvXXu0mjfn0=ZU literal 608 zcmeAS@N?(olHy`uVBq!ia0vp^RzR%5!VDy1yT5b;Ddu7)&kzm{j@u9Y9{{pXbm3W`M*fl@zhDMIC1aP+wDOLbt9GBc`_4`4>r9{&XMsm#F#`kF91v#w za_PPhP*AMIHKN41C^fMpGe1uuBr`Xa!N64C&_LhN{M#?rsX!GnAQi#+X(i=}MX3yq zDfvmM3T~N2spa`a*~JRZ!DcV^Z0ccPU`+LNaSXBOeL88k7qg>C+j%wVKN=Z`rD^j$YRc8O3fAHqqlWEsJ zvL3m7=H}D)c9`MsOaZYfY9(bNQ=Ep=B9!wwhY? zyU$dy;RsGKj;)w2?>=vX@;T!|$=cu;+bInN!LDbgU43!t=}n#t>xDI2^Jmt6ImR}x zS>^ORrCDkDn~v{Xp#D(cO{lcTGiIGX=7+vp3!Z(XYLm_~McUWce$nBsb6mfc?keGx z@~O_eptyAQmnk`GiZ?CH%lP%sD|FB8j!Q{?s=?>ZpPJvDf5>KWu;hdqHekdsc)I$z JtaD0e0swNH_pJZ` diff --git a/BTPanel/static/img/soft_ico/ico-syssafe.png b/BTPanel/static/img/soft_ico/ico-syssafe.png index 3252487d4d923defe0dadca962a570f6d3493b40..f5cc61b192299efc4291e7d5a66ccb6336d708da 100644 GIT binary patch literal 1721 zcmV;q21fabP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB7BS}O-RA>e5nQLqmRTRf(w%Z3% z9>#=rAu1GKF&dv3q%A7(gS;eyRzX7oO)P!T`iRJ7ng}fc zRK7^kV8CbsR2opk(o(jY?#_@n(=I!LVgl8Qt>h8JL;ygvalvw%rWgYH8qX#csvggpgd|m zI5Q*I_znF!Qg0hFDxs)Es;jFz0l(ew2C!b*yBrS3p0Q)cwk=({^r|ryuiUa_OGaN` z-*ecLpuGTInt_Sk-2`co(T^m}QY0|fAOX-R6l=4yvs()a3i=}f#j9JkY?%j)R;djQ z4HL+O670T#5983yx5AG~BxLa+BC<22e_fl!#l?SNU=0}|*{~ckQ8P!Jkx$|cUwAVA z4-U=5q|@Sdl~U-tO!%}7uG{nWw(mxfKSP>@o#H_7Wl0V;WBQJ2JI7cedvDA0w2IP-VwHhG&*X#H`axj!vIEF)iDns%zQjRbAEV?rE82wyTen6Q$J}kaBd3)|ONY3_oJpZSkBLlViTjDH(bqV>Y(5xB6~C@cQY3;T(A1qXuN`d+ zhjm3ukpmOkn@h$sQXJl23feCi<7Sd4W4VvSO=R2G2X52+T4$&e9Ca%d-B%f^3v288 z98LFix^?9Q`Uk_tV(i3CM0bu-6>nd_Jb}At&kvm+U5cEctjh58G+7Zh5!KfpFa`-9 zU#JNtcEZ$?cjP~%C|Y}%GR{syU-meCFmngiP+vmAY?@(@beNt zJ1=HPd=k^-y&EG)NXwT#>dOwmkC4a(Yp(ppE-Wm(63xXYTV5I!ZQK~U;O|P;HKP|< zZr!?dba!|6yx{1O$g>8uRz&37Bt*uz-R|Ycs==k+Sq$NJv{}iHlD~P zE2OBYm6es%48WfPf}^WiT3XB^E-4s8HNP3b-s@tQtmw|n%-kjIXvOlg#_#600o@=V zfUf4Z`$y3L6ERj*RV7d3E5X8MH8v}(aHBpES)87pE~nJ4AW$VYjXA;gbrD<(jmLQ- zg|DWjrhaP2kR=hWFD36w1&k+i3)iKak(TT17>_ikx3_l#_}MZBp?A1ZITLB#P@OG@ zDk>`W0=iokV`LWT7D%WgHjTP0S74>k0{Q=aI^7cGic^88H!A zOavEVa2w6QzJdetoiButTyong{8f?1hvN$-=L8r0gM2X-60$xfBC-%NPe5iL%`E9d zhASU^J-76=!3$|o4=b#jit+>I%3fiVBTlDtNoi@R{I3#IiJ6F4BhBt4%|6GeSs~WD zAXSfJ`%6knIt)Do@@bb*7coC2sF&N74_z+T``q$doW6o9OhjBn3`_{kgV4t~c%PvY z388a{!_?`FO%a_@7;A;>YRLX-=;DzHAtDa6wY51rIy#DQP>wWVP8$v~CQ;wZ_$Ryz zKN$K%$b=CIb%wLj4EhUjJP)TIL7qhJ;*ZYlBmJy~;wIb42qYtrjDYel&0AwkW@+y5 P00000NkvXXu0mjf^hp?v literal 1007 zcmeAS@N?(olHy`uVBq!ia0vp^20*OA!3-q(BRide6mzkYX9x!e$L)vy4}jdO0X`wF z|NsA2SY{=++(K@tg#rj!DJ(IUU1}uAB@&HTDaX})LhDJtiMtB@BjHN zleQcT+w|qHQ1rEAPrFAKJ3LSLOg&~*;FiB%Z+VT)g*Ub9bSG>OGwt{_@!apd`sSy0 z+`1kaoK>5Cr%@}k?A#vt)td^`>>LDM7sRUr)=(-jQ&?&M7aO(dqJu=m$IbeeOKe$;@c^y*@9Pt3i|T zY;MfIi(Z;m7uNk-wWaVudS+hWPw^IU+fbek-d7b2Gqkrn%-!j#%-+yp_Q?^L__xht zz9hHGK7)0K9K$+>8@*HbuD+>j2rCt3S}b&DCi?}y>eX)9N%M^qnD>0NF?n@D{)y@p z>xXuK-mC53TXCLemo{HW>g*-SYrl%`W^}uHD(T~@^Y!k*bHDLs9C@@UdG4hBzb{Gu zoWk*WqNJ*1?6vt?f+mswE^M}mjCQG>Uq4mv@AA`M0Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB5M@d9MRA>e5SzBlmK@^?YP1+(p zs)AJfFhP8w{wONe2Q5nLhoB;j(*78$jkIYh*dL!%5&iJPwrL9W0SX!=iU>Zj+JdzT zK0vJ22WrI+K}CwyDlw1o%$mgA&88)`Nmto{&CI>`%*;9WPSRvbh|!D;7#T1!@GoV6 zYLRuj-Gz)XJ7P2OjMBoS(dP%3XOz+_IXO9pZ8lp-YwtKAb#--30G4Tib>MqwGMVx! zDk{FIxtQdR`uh6yP+tc1J?M90QXAraIVRoXP$+l;s#z$RBRdSazPNB zm6et6aSZ2R&MrW=yIihL#3y0w0VbQzAB=|eFJbL{SnFkEy%F8r-4if=CtqJ71Ob5u zF*(fpa5%gQT@lJzgT50_0iM+$+KB!=1T6w)CGZz`9Q|zAg%}T7!(L;s*gmW)WtcCF zvBXopiCTy}MzXT9HbKPR^78T*Jdl~0xg!t=oNzjwPq~fW-O$j`g8m7z#_e;Bjg9jL zvmzk3>r;rs;rNaPBoTZe*a38s2yRCz*MVckO>Xn7-It6szi0|U77pROe@Qc! z{I>X7XZ&W1NjHMcHR3z0IPImqOrXq>Hq9mJ; zl;d%K@BzP#JbWXw+1#VvPsRPI_iUq;zP zREhwz2iV#!TYKytA&S$55Ef+DK*%DIVr+HXFY}m#ZDv8T95}0lmA&Xf2(oRVlsut= zuuaA-Zpgyn1N?}^1>n$!kl)Nczgc(tk`~FR&+5&sj*iv6o`l4>)vy}jxVQNRp)7mk z*x`#G7hdm;1rrPuLU2nFJBp%Cdvh$IWC@O(`2BOQ1)Ih$1rrfaeEi}X=xqcz zInji4_+Q!DK8ZvupaNa_s<^#h5uB5vA`o&FMajcs$4&b^e7`xP^-q;_hmP575M#r7l3vMnu=b5Q7`b9wy2mV(1W=C-irNJDEuk|3Gm~+b5P}$ zOhrZ10EjZfH%#pxsEs2VE-fwnI?#2D`9=ne3>X>scQfz{mELv^h~*V!00000NkvXX Hu0mjf9WEnJ literal 556 zcmeAS@N?(olHy`uVBq!ia0vp^T0pGI!3-psy}S2-sA4D25DpHG+YkL80J+HlJ|V9E z|NlRH_|pFU=lAYCwtf3?hD{6*#`f)}fm|R7JfOZ)kBo;EFR)g$zhVaDG}zd16s2gJVj5 zQmTSmW>IQ+eo=O@f^)Fhi#?lqfa+d)x;Tbd^uE3NkgrKWg!RGVwA9F1Gn^u)f3H7v z!0F`EsaxyHmicV&FWi~Op>XTz=aWJ`D?83x7Hv}5we54@F{@Q8Sf)R5yZL&e#=%=_ zHX6F-CMEoi(+UVS40y0iAh7$!nyqs~qGs%!BDYq{c;}n<6+zi{3v+5tm0Vr+?M0Fs zkbd?nc5VGH>sjHy1FX^}E?d6La;c)p+miHkCJkJ*EPYWd7oO!EuNHP#Dsyc9#csKx z#1*y;TSV4-oV_r0>7l)xeQtfFVdQ&MBb@0G~Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB4aY;l$RA>e5SWie)K^UKTyFSr~ zZh{d+wb4=fb1>Iz=~6f8P>R}lLu93chl-*@6cI$O|M1c&!K8vtMOI3>ksy*pgrzP9 zt#-?TYPX%4zIpA)bDOujZ(wIl-h*Yn`QG>E_xon%dv6~?-sM%mtAJO5|EU5v7uaYt zdIauwF~$zTSe?tZi1(H;#?ui0W+W1saLVII1V~%}r>j81(Z(rgk@OS@T>>)KWbvgS z`APtRad0rec@^Y)ATP@TXwX#yh9QdW0Wv)*~5bEZH7uj;?0w@5aX~djwLR%Og;gD|FmD5 z=CFH2wC|lf3B47`Qy}fPmAV$ZQscl#L)})>_wLQf@vj1PXe{Lav_g&|%#_-%fpB8J zd16Myb2BOt*)v=prj!k=5^^7soe~L`5~({3p)+FccBJ62dnnkp*cuyh>#KG~DEyDd zm>`73e}unzFW0J0j0Lxzv`}+F!6GHg+*6l*Cc}xI->5h&LrI$&~SiN*> z709`@gjIKU_X&_|#a#3Fy0f!0@0XdpM0$IBcS7rn^YfyafRzq96@!+$3(m+=uKd!j zWp}8ms^ZU&DZ5UyJe9$qIjxt@tAJMluL8xaz#mBr3kSd`#+U#A002ovPDHLkV1jvn B%~k*a literal 455 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 literal 2788 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 literal 6738 zcmV-Y8m;AtP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000ktNklS9Y0*Uj>EO`4kU_L< zSJSA_EjU4oh$tX3sVMZK0TGo!5z}@PZ7~rEi3lNcLLfy*C8@dIt9sMD=j{IDRmvnp zjoM4s@~m~%dF#G+?>^t%`|Q2H?}@7Nmofr?ReSy6-ypDjqq1z1AxxCnN5MJAD4TX0 zc8|iE9iBJM&^a4>&GAc5kZU*gI);iuYet#bA$;ovbJbBbZv8+1wfHBu%2w}T&Q#^+ zo0K&@hNi4CcN#1{&fERj-RfAh>AGen><%lYejdH0sxEL!`j^6bmD>Ov}jfC<0@ zF&L+9%LYx`vJG&07psmrk{`~Wq2D#a{eM<4#sI>HuX|i>UB1~9dxgLtHHtV7YVm3& zP%C0VLy!bil$9?!p4kyBdZkYn9e<=WS;K9A7BC_ZpdWes8GFmFUWGc3U{M8)6|H!{ zKnTsXp7FA$TnNBSSXChiEr}}2Hz*tX#BY#zFV>OD;>2wwXj>r#ki7#mH6-xjN!}P{hoWHdPEPH`!dv_rh|(gTf@zL zd%>m@5swzioH7G0K3%UC%X?H=5j$L=f-A+f{Ptal@-?Tp7R&_t55D$;&OsB z5E|&sIi6UjH>+~708q7?SH1y8>u z(5QGkT87i+SiZ2td~EqvcT?>4y`tYfVh52i*M4eAsrZFusT-f#YKWs4Qifmdu-x;s zUU2Sw`9Z$SfK1pIt!}ujN%2jNR%`bU{t3_QhcG3EO%!-Go1?KQrYQx@S?H{T@rs`G z_&VN#3L>DfrMua3>byW zvS}p87Mbb`j7 zlo6Jkp!bEybz@~{j0`gx3|cXiQ!oHa6lD3o2D_`Dz_ahoBvvS;rct*Fgf+eUhj;Za z9-bQ-QVyIVBWdd9(77XW|+3tF_xX2t$R9aH+T8s_A`U7TRh?nha+H*?=Q+CB6Fx zJ2<5f`}#eV7?L!21u2tCr?0(tD@?6Z-acJdi^v7Qmcs%QibM_8zVAE3`K#9E%Tw_& zNQjsSTd=q=CQc&6IP#K^9}DYy#tUcul?!&ZHHKeK8M*v$vRTSNUxAyS?emwd+&fXk z#DGLt>+x0zND)^&yD{u8I-VcU1>KF|PhNktUK<$h;h=8YOaLGhq0UHVW4Zj$SBLuU zTsxkdDh5m_h$yOM5(h4_sFEdj0Q;Z7WdrTz}&Wa@opW zi3F9HVjW<1@2Cw#J%=`V)SB zC?L*r%cC!wkMtK68!1L1_SLF5t6rH>D`WygF&1_fJTH%XRKbWqB&;8FT(K%R`?iz# zWLGU$rR=`OT$Ss04v`U={@6(V$4}-8vy4ljsS+An+CpJ|ZE8h(%75kJ_BOi08g^9@ z9v&FLnc$0$^o`EgT`pt70L6nUX&>-`DGjA}v_|i&i2tvj^L=_~l-A zi2 zyG~(gXGS)3Mxp_L2EOLylK;D3B5$@XTGb{F18K431UhY~yR>>gX43NMDZH>7l z&5fUF2n?NJL}L)(4^el$Ldo;MXQxiN=-ut z|1k;X$D_j?v0||nPe3*WZ*R`rUUWL*5#HP0!ihCCl>DJp9H)wfd(%eVxUezv$R(Xk zKbo6KpMOj?b>{bX>Dq0>TwZh#gj752SUG#9;a`uJ^UIEV-EUA~iVhYu!#{SJDnS(; zSv6pxB+sl(GxLFXxpV4^}*+EljHsZruPaDJVN7_Hsa&c{Oy_ zIL?@+ zhiZXR7S;|5PrPDi7DJnt^qRf;iF|p&t?CH^^rR_vd@`F^<1X&1F-6p1B_S}%*Y=Jz zJeAL1^UPR*9mSabI3^G|Bvr@;ob|O0^4LA=U53zMyr538D2t}+@=wm?y?kmBoV?r?&R_-y^+`Yv$h?$TkRGC?$10KC-63k$suzhYOydJS=VlY-2 zsw8stj=f9o=o^@qGJ+L(O_iyJ7K?A(oIL!^7d@oG65vEgdBdzGz8(g=t?YRqZG>zn zlPb?)Y1sQXRfN1+%dJ zfgrZX&Nw(4BddCX((;->ZmqM11}kKZ*_|~qP#bXO^_%oRzqcJrV6chcZ9=`k>7Dk8 zv!-*+U7MBrU)HuO=gHjBgLHw05F*2KX-g&+d}GLQ`xNQ`s0*PsgpH$o^pO|+;?eR1 z2~xo)FuU38Jf)TQOiQzUveEqSy(O%`sPi{`xVQIXyNe!c42Z$u5C^mCLb@{nZ6?KV zk{=w3^_9%fv=f%^Fc<@Bf-1f6md+aCq-M5_#ZuXx*XKL4dfZ7Ja>BtPM`U14KdUnV zwO+)%zDeg69jJ$bdPWKX+s6_%7X&JT4F&H(T|!6J@bB~F#`%q0ku~u8Hd6(&ZK&$^ ztVq)nmBRP0+PVA9yULzWK?8>aRBg2&gbsWJ{jD%sOArWdKcUBZkH_LQ0S6KpG^x^v zea!P9q2bquFJV$-2S1?$>%L-%SB2QpQlorvfmv~CgDx438TP=b9TV9sRwY&?=l$@! zY-Z5~?G0B?2^oq_OyW{#5@4KQ(w+c=9cYJKBPJA_2+Bk|kKnBVt6(jXs%~Da!2|}0 z1c{hfCqCOMpeo4}h^nDv0)q*CwK%H9I|Ck0>`?AJU02L$&_$y$!~5%Huc6JcYJS}N zYfr3C{m;?qmT!G$U}R>&LxF@!A&u{EhtVt;ts0mh^-cuvc$JB3f~wh15!Hi^_P$jn zzLf*6dkiE(D&CD1-A9l*kvd-D+$#y7Cv~ z$sPLc;J2m4iYh6wkA)%)0TP_umO8bPre@ee$yc>qJwR?hxB~s*YeULY2jd$?_(o_+ oLc?gqA6opIwD_0wZ}a~R04So5TONQ{2LJ#707*qoM6N<$f|6d-lK=n! diff --git a/BTPanel/static/img/soft_ico/ico-upyun.png b/BTPanel/static/img/soft_ico/ico-upyun.png index a5a30321bd1476b0191fa884c55827b0370bdc78..7af043a9d716d825ca16d20f0d51d0813711f3eb 100644 GIT binary patch literal 2126 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 Dx`1TB diff --git a/BTPanel/static/img/soft_ico/ico-webssh.png b/BTPanel/static/img/soft_ico/ico-webssh.png index 462b3206ff19582513c79e42a5b46287a4349617..d75b3b9f1d011c2caa72cffbe66dd05a0a336655 100644 GIT binary patch literal 1459 zcmV;k1x)&hP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB69Z5t%RA>e5SzTybRUE%JH?1A% zI;Nsd5Rwc9S1A)gG|5V*^Mm;y!klZOF#A#v+JYh?f()O0*h~8)LUjz1=wg`)GP=%M z>)NpwKL!ICmc+@_m%6z&sV2?6{{A5++;cxpZckc`a4#JG=ls7v&R0$pMewOa8y_Dx ztUP05V>Ox;zrk@h6U&oGI1^uIqFZ3oQKh#K;Gxbuvq5q@l8&7uLJKx*dIg9^*6UR% zc6D{_86Fc|uZ^H6+IuH+v%OYRuuv1= zVi@>pAUL;w?rUO>eB9q}RI9VpFC-Tle2oqfz}#5)`4{Hrf#T@IQ$xVoXHHX`7}$px zSl5RhGf=A`<7Ej(vQHqHM}aS(^`PB~mO)FRdHT%TtF5HaFomYW&<76MoNzWaI5=cO zG6ai+jb-7)#Kf9e)?s;=$(Z$-_)0h(|BlCsM~H;e>y$1|Lq55%oeJ^F!jYQM&gFQSE~o6tx;bw1Z~dv|wP(U&6G_&bgoJRpTeNdD4OXNz>?8oKe8tf8hx z$PkX;-?2;!`N4&^X}r_AbilH7aq!wOhwCJe=J9;|Sxi$9vb91i8 zvCv4dQkhY;z~20k^FJ^H1oic`q>gl|~{X0eq@ZEz}MXLmZ!CiG+KLrNdWqPk99PZ_B{@cNNstBB< z<7WbG5a->|x|8oCz)y5te-$`-JEd#-8wlbGaL3WVx6Zezz^x+OxofqE0F0555qcG7 zr}bIzylml{v5aZ>xdW~x6s9^oC~tF9(sXK>f^gH(7Wk%tw1t;&0tt0p2IQk~YKelN zH~F7`EnmZ&y8~uU?CQAtl?#V++_R=gUV#cxR{Dc|V+b__xZn5}sPG z;}!H72`8J1(B)jjBwZ1v^h$E>NAzodt%S3QQA4ku#;;_&JE~`bJA01cRkh_yJK3VC zW&MS~d>|-Y5wjB3@6CKVapXEWsywcHAOMrEm!^uB5^aJ zj_tQyK0N)0+0a(^r32}kelm1(xp+}Aj9$agOPZp+w3PbhBR7Y4XZjzj8tY%W(HS0z zn8LpfhuGLFln#X6SoWSCNRT1X>jQISDLFrjzHq@ZUKuDI2pRJdfQ(ZzGMl>CWgPG# zgWZb!4A92q#_w8cyw#SW0NZH$dxsC}aGJ@GT(XFw_g{{X!plDvGR N002ovPDHLkV1gnlm81Xw literal 659 zcmeAS@N?(olHy`uVBq!ia0vp^20*OA!3-q(BRide6mzkYX9x!e$L)vy4}jeH0X`wF z|NsA&TWY1S#6n@Ih2m0Exuq5gi>+iAn?nR4Tom>abGgM93d=0vf^tBSrB)!7Kyx7C zU!v!H4OLaGG1Ul8UB*-tAK@b9zfWR0GTtFZ+G&C(O ztsDqCI%dvXwQAMw-Mh~K!QH!e-@W_qEyPv;G=Q_fBeIx*fm;ZK886+f`vVk|DRGS` z3C>R|DNig)WpGT%PfAsA%PdMQ&o9a@R&WkBd$DIz4+8_ElBbJfh(+(-sj=lv20U%? zrNMXZi2FUCv4Qb$qv+d=fB*BNA0!#6U8p$sEpEx)6UCFvGP@i)w>Y^ez1?8Vu5swV z2O(D0iQj52b5|VbI>8>Z$nwJ-#uZ#U7-gKx4_ugVc$@j5<0)UxmD%ugK05eftGL2i z?b-6*Z5#G#IV_zPw2Y}JLVG&X&Hc;=W7rD3_jEM42aE0E&bW8UYo zyZbCLb!TtC=KHU9;Jakm&glpKxqEH=zISe`DetX@S=YV>8g6BXsSUB)#_;Cc2k{0g z^`?0@e%+VuJ0KjLK27Tszv?vK_ac5uKTEft)@R^fU>42Wxd0fd44$rjF6*2UngB$$ B|GNMH diff --git a/BTPanel/static/js/bt_upload.js b/BTPanel/static/js/bt_upload.js index 555ed310..2acc8629 100644 --- a/BTPanel/static/js/bt_upload.js +++ b/BTPanel/static/js/bt_upload.js @@ -1,2 +1 @@ -/* ! 宝塔文件上传组件 License https://www.bt.cn By 黄文良 <287962566@qq.com> */ -var bt_upload_file = { f: null, f_total: 0, f_path: null, split_size: 1024 * 1024 * 2, _files: [], _error: 0, _start_time: 0, _t_start_time: 0, collback_to: null, upload_url: '/files?action=upload', _loadT: null, open: function (path, is_exts, ps, collback_to) { bt_upload_file.f_path = path.replace('//', '/'); user_agent = navigator.userAgent.toLowerCase(); var btn_dir = ''; var accept_ext = ''; if (!is_exts) { if (user_agent.indexOf('chrome') !== -1 || user_agent.indexOf('firefox') !== -1) { btn_dir = '' } } else { accept_ext = 'accept="' + is_exts + '"' } var other_ps = ''; if (ps) { other_ps = ' --- ' + ps + '' } else { other_ps = ' Support for breakpoints' } if (collback_to) { bt_upload_file.collback_to = collback_to } bt_upload_file._loadT = layer.open({ type: 1, title: 'Upload files to [' + bt_upload_file.f_path + ']' + other_ps, area: ['550px', '500px'], shadeClose: false, closeBtn: 2, content: '
        ' + btn_dir + '
          ' }) }, list: function (_files) { bt_upload_file._files = _files; var up_box = $("#up_box"); $("#up_box").html(''); var loadT = layer.msg('Loading file list...', { time: 0, icon: 16, shade: 0.3 }); for (var i = 0; i < _files.length; i += 1) { var f_name = _files[i].name; if (_files[i].webkitRelativePath) { f_name = _files[i].webkitRelativePath } up_box.append('
        • ' + f_name + '' + bt_upload_file.to_size(_files[i].size) + 'Waiting for upload
        • ') } layer.close(loadT) }, to_size: function (a) { var d = [" B", " KB", " MB", " GB", " TB", " PB"]; var e = 1024; for (var b = 0; b < d.length; b += 1) { if (a < e) { return (b === 0 ? a : a.toFixed(2)) + d[b] } a /= e } }, start: function (i) { var len = bt_upload_file._files.length; if (len === 0) { layer.msg('Please select a file!', { icon: 2 }); return false } if (i === 0) { bt_upload_file._t_start_time = new Date() } $("#filesClose,#up,#opt").attr("disabled", "disabled"); var total_time = bt_upload_file.diff_time(bt_upload_file._t_start_time, new Date()); $("#totalProgress").html('

          Uploaded(' + i + '/' + len + '),' + total_time + '

          '); if (len <= i) { $("#totalProgress").html('

          Uploaded completed(' + i + '/' + len + '), ' + total_time + '

          '); bt_upload_file._files = []; $("#filesClose,#up,#opt").removeAttr("disabled"); if (bt_upload_file.collback_to) { bt_upload_file.collback_to(bt_upload_file.f_path) } return false } if (i > 10) { $("#up_box").scrollTop(35 * (i - 10) + 50) } bt_upload_file._start_time = new Date(); bt_upload_file._error = 0; bt_upload_file.f = bt_upload_file._files[i]; bt_upload_file.f_total = Math.ceil(bt_upload_file.f.size / bt_upload_file.split_size); bt_upload_file.upload(0, i) }, upload: function (start, i) { var end = Math.min(bt_upload_file.f.size, start + bt_upload_file.split_size); var len = bt_upload_file._files.length; var f_path = bt_upload_file.f_path; if (bt_upload_file.f.webkitRelativePath) { f_path = bt_upload_file.f_path + '/' + bt_upload_file.f.webkitRelativePath.replace('/' + bt_upload_file.f.name, '') } var form = new FormData(); form.append("f_path", f_path.replace('//', '/')); form.append("f_name", bt_upload_file.f.name); form.append("f_size", bt_upload_file.f.size); form.append("f_start", start); form.append("blob", bt_upload_file.f.slice(start, end));$.ajax({ url: bt_upload_file.upload_url, type: "POST", data: form, async: true, processData: false, contentType: false, success: function (data) { if (typeof (data) === "number") { var progress = parseInt(data / bt_upload_file.f.size * 100); var total_time = bt_upload_file.diff_time(bt_upload_file._t_start_time, new Date()); $("#totalProgress").html('

          Uploaded(' + i + '/' + len + '),' + total_time + '

          '); $("#up_box li em")[i].outerHTML = 'Upload progress:' + progress + '%'; $("#up_box li .filesize")[i].outerHTML = '' + bt_upload_file.to_size(data) + '/' + bt_upload_file.to_size(bt_upload_file.f.size) + ''; $("#up_box li em")[i].focus(); bt_upload_file.upload(data, i) } else { if (data.status) { var f_time = bt_upload_file.diff_time(bt_upload_file._start_time, new Date()); $("#up_box li em")[i].outerHTML = 'Completed(' + f_time + ')'; $("#up_box li .filesize")[i].outerHTML = '' + bt_upload_file.to_size(bt_upload_file.f.size) + '/' + bt_upload_file.to_size(bt_upload_file.f.size) + '' } else { $("#up_box li em")[i].outerHTML = '' + data.msg + '' } bt_upload_file.start(i + 1) } }, error: function (e) { if (bt_upload_file._error > 5) { $("#up_box li em")[i].outerHTML = 'Upload failed'; bt_upload_file.start(i + 1); return } bt_upload_file._error += 1; bt_upload_file.upload(start, i) } }) }, diff_time: function (start_date, end_date) { var diff = end_date.getTime() - start_date.getTime(); var minutes = Math.floor(diff / (60 * 1000)); var leave3 = diff % (60 * 1000); var seconds = (leave3 / 1000).toFixed(2); var result = seconds + 'sec'; if (minutes > 0) { result = minutes + "min" + result } return result } }; \ No newline at end of file +var bt_upload_file={f:null,f_total:0,f_path:null,split_size:1024*1024*2,_files:[],_error:0,_start_time:0,_t_start_time:0,collback_to:null,upload_url:'/files?action=upload',_loadT:null,open:function(path,is_exts,ps,collback_to){bt_upload_file.f_path=path.replace('//','/');user_agent=navigator.userAgent.toLowerCase();var btn_dir='';var accept_ext='';if(!is_exts){if(user_agent.indexOf('chrome')!==-1||user_agent.indexOf('firefox')!==-1){btn_dir=''}}else{accept_ext='accept="'+is_exts+'"'}var other_ps='';if(ps){other_ps=' --- '+ps+''}else{other_ps=' Support for breakpoints'}if(collback_to){bt_upload_file.collback_to=collback_to}bt_upload_file._loadT=layer.open({type:1,title:'Upload files to ['+bt_upload_file.f_path+']'+other_ps,area:['550px','500px'],shadeClose:false,closeBtn:2,content:'
          '+btn_dir+'
          • You can drag the files here.
          '});bt_upload_file._files=[];document.addEventListener("drop",function(e){e.preventDefault()});document.addEventListener("dragleave",function(e){e.preventDefault()});document.addEventListener("dragenter",function(e){e.preventDefault()});document.addEventListener("dragover",function(e){e.preventDefault()});var area=document.getElementById("up_box");area.addEventListener("drop",function(e){e.preventDefault();var fileList=e.dataTransfer.files;if(fileList.length==0){return false}bt_upload_file.list(fileList)})},list:function(_files){$("#totalProgress").html("");$("#tipsUpdataText").remove();if(_files.length==0){return false}var file_data=$.extend(true,{},_files);for(var i=0;i'+f_name+''+bt_upload_file.to_size(fileList[i].size)+"Waiting for upload")}layer.close(loadT)},to_size:function(a){var d=[" B"," KB"," MB"," GB"," TB"," PB"];var e=1024;for(var b=0;bUploaded('+i+'/'+len+'),'+total_time+'

          ');if(len<=i){$("#totalProgress").html('

          Uploaded completed('+i+'/'+len+'), '+total_time+'

          ');bt_upload_file._files=[];$("#filesClose,#up,#opt").removeAttr("disabled");if(bt_upload_file.collback_to){bt_upload_file.collback_to(bt_upload_file.f_path)}return false}if(i>10){$("#up_box").scrollTop(35*(i-10)+50)}bt_upload_file._start_time=new Date();bt_upload_file._error=0;bt_upload_file.f=bt_upload_file._files[i];bt_upload_file.f_total=Math.ceil(bt_upload_file.f.size/bt_upload_file.split_size);bt_upload_file.upload(0,i)},upload:function(start,i){var end=Math.min(bt_upload_file.f.size,start+bt_upload_file.split_size);var len=bt_upload_file._files.length;var f_path=bt_upload_file.f_path;if(bt_upload_file.f.webkitRelativePath){f_path=bt_upload_file.f_path+'/'+bt_upload_file.f.webkitRelativePath.replace('/'+bt_upload_file.f.name,'')}var form=new FormData();form.append("f_path",f_path.replace('//','/'));form.append("f_name",bt_upload_file.f.name);form.append("f_size",bt_upload_file.f.size);form.append("f_start",start);form.append("blob",bt_upload_file.f.slice(start,end));$.ajax({url:bt_upload_file.upload_url,type:"POST",data:form,async:true,processData:false,contentType:false,success:function(data){if(typeof(data)==="number"){var progress=parseInt(data/bt_upload_file.f.size*100);var total_time=bt_upload_file.diff_time(bt_upload_file._t_start_time,new Date());$("#totalProgress").html('

          Uploaded('+i+'/'+len+'),'+total_time+'

          ');$("#up_box li em")[i].outerHTML='Upload progress:'+progress+'%';$("#up_box li .filesize")[i].outerHTML=''+bt_upload_file.to_size(data)+'/'+bt_upload_file.to_size(bt_upload_file.f.size)+'';$("#up_box li em")[i].focus();bt_upload_file.upload(data,i)}else{if(data.status){var f_time=bt_upload_file.diff_time(bt_upload_file._start_time,new Date());$("#up_box li em")[i].outerHTML='Completed('+f_time+')';$("#up_box li .filesize")[i].outerHTML=''+bt_upload_file.to_size(bt_upload_file.f.size)+'/'+bt_upload_file.to_size(bt_upload_file.f.size)+''}else{$("#up_box li em")[i].outerHTML=''+data.msg+''}bt_upload_file.start(i+1)}},error:function(e){if(bt_upload_file._error>5){$("#up_box li em")[i].outerHTML='Upload failed';bt_upload_file.start(i+1);return}bt_upload_file._error+=1;bt_upload_file.upload(start,i)}})},diff_time:function(start_date,end_date){var diff=end_date.getTime()-start_date.getTime();var minutes=Math.floor(diff/(60*1000));var leave3=diff%(60*1000);var seconds=(leave3/1000).toFixed(2);var result=seconds+'sec';if(minutes>0){result=minutes+"min"+result}return result}}; \ No newline at end of file diff --git a/BTPanel/static/js/config.js b/BTPanel/static/js/config.js index 9c4ff571..065ee5e3 100644 --- a/BTPanel/static/js/config.js +++ b/BTPanel/static/js/config.js @@ -233,8 +233,16 @@ $('.open_two_verify_view').click(function(){ check_two_step(function(res){ $('#panel_verification').prop('checked',res.status); }); + get_three_channel(function(res){ + $('#channel_auth').val(!res.user_mail.user_name && !res.dingding.dingding ? 'Email is not set':(res.user_mail.user_name? 'Email is set':(res.dingding.dingding? 'dingding is set': ''))) + }); })() +function get_three_channel(callback){ + $.post('/config?action=get_settings',function(res){ + if(callback) callback(res); + }); +} function check_two_step(callback){ $.post('/config?action=check_two_step',function(res){ @@ -780,7 +788,7 @@ $(function () { function bt_init() { var btName = $("input[name='btusername']").val(); - console.log(btName); + //console.log(btName); if (!btName) { $('.wxapp_p .inputtxt').val(lan.config.no_bind_bt_account); $('.wxapp_p .modify').attr("onclick", ""); @@ -938,12 +946,285 @@ function modify_basic_auth() { } }); } +function open_three_channel_auth(){ + get_channel_settings(function(rdata){ + var isOpen = rdata.dingding.info.msg.isAtAll == 'True' ? 'checked': ''; + var isDing = rdata.dingding.info.msg == 'No information'? '': rdata.dingding.info.msg.dingding_url; + layer.open({ + type: 1, + area: "600px", + title: "Setting up a message channel", + closeBtn: 2, + shift: 5, + shadeClose: false, + content: '
          \ +
          \ +
          \ +

          Email

          \ +
          \ +
          \ +
          \ +
          \ +
          \ +
          \ + \ + \ +
          \ +
          \ +
          \ +
          EmailOperating
          \ +
          \ +
          \ +
          \ +
          \ +
          \ + \ +
          \ +
          \ +
          \ +
          ' + }) + $(".bt-w-menu p").click(function () { + var index = $(this).index(); + $(this).addClass('bgw').siblings().removeClass('bgw'); + $('.conter_box').eq(index).show().siblings().hide(); + }); + get_receive_list(); + }) +} +function sender_info_edit(){ + var loadT = layer.msg('Getting profile, please wait...', { icon: 16, time: 0, shade: [0.3, '#000'] }); + $.post('/config?action=get_settings',function(rdata){ + layer.close(loadT); + var qq_mail = rdata.user_mail.info.msg.qq_mail == undefined ? '' : rdata.user_mail.info.msg.qq_mail, + qq_stmp_pwd = rdata.user_mail.info.msg.qq_stmp_pwd == undefined? '' : rdata.user_mail.info.msg.qq_stmp_pwd, + hosts = rdata.user_mail.info.msg.hosts == undefined? '' : rdata.user_mail.info.msg.hosts, + port = rdata.user_mail.info.msg.port == undefined? '' : rdata.user_mail.info.msg.port; + layer.open({ + type: 1, + area: "485px", + title: "Set sender email information", + closeBtn: 2, + shift: 5, + shadeClose: false, + content: '
          \ +
          \ + Sender email\ +
          \ + \ +
          \ +
          \ +
          \ + smtp password\ +
          \ + \ +
          \ +
          \ +
          \ + smtp server\ +
          \ + \ +
          \ +
          \ +
          \ + smtp port\ +
          \ + \ + \ +
          \ +
          \ +
            \ +
          • 465 port is recommended, the protocol is SSL/TLS
          • \ +
          • Port 25 is SMTP protocol, port 587 is STARTTLS protocol
          • \ +
          \ +
          \ + \ +
          \ +
          ', + success:function(layers,index){ + var _option = ''; + if(select_port(port)){ + if(port == '465' || port == ''){ + _option = '' + }else if(port == '25'){ + _option = '' + }else{ + _option = '' + } + }else{ + _option = '' + } + $("#port_select").html(_option) + $("#port_select").change(function(e){ + if(e.target.value == 'other'){ + $("#port_select").css("width","100px"); + $('input[name=channel_email_port]').css("display","inline-block"); + }else{ + $("#port_select").css("width","300px"); + $('input[name=channel_email_port]').css("display","none"); + } + }) + $(".SetChannelEmail").click(function(){ + var _email = $('input[name=channel_email_value]').val(); + var _passW = $('input[name=channel_email_password]').val(); + var _server = $('input[name=channel_email_server]').val(); + if($('#port_select').val() == 'other'){ + _port = $('input[name=channel_email_port]').val(); + }else{ + _port = $('#port_select').val() + } + if(_email == ''){ + return layer.msg('Email address cannot be empty!',{icon:2}); + }else if(_passW == ''){ + return layer.msg('STMP password cannot be empty!',{icon:2}); + }else if(_server == ''){ + return layer.msg('STMP server address cannot be empty!',{icon:2}); + }else if(_port == ''){ + return layer.msg('STMP server port cannot be empty!',{icon:2}); + } + var loadT = layer.msg('Please wait while generating mailbox channel...', { icon: 16, time: 0, shade: [0.3, '#000'] }); + layer.close(index) + $.post('/config?action=user_mail_send',{email:_email,stmp_pwd:_passW,hosts:_server,port:_port},function(rdata){ + layer.close(loadT); + layer.msg(rdata.msg,{icon:rdata.status?1:2}) + }) + }) + $(".smtp_closeBtn").click(function(){ + layer.close(index) + }) + } + }) + }); +} +function select_port(port){ + switch(port){ + case '25': + return true; + case '465': + return true; + case '587': + return true; + case '': + return true; + default: + return false + } +} +function get_channel_settings(callback){ + var loadT = layer.msg('Getting profile, please wait...', { icon: 16, time: 0, shade: [0.3, '#000'] }); + $.post('/config?action=get_settings',function(rdata){ + layer.close(loadT); + if (callback) callback(rdata); + }) +} +function add_receive_info(){ + layer.open({ + type: 1, + area: "400px", + title: "Add recipient email", + closeBtn: 2, + shift: 5, + shadeClose: false, + content: '
          \ +
          \ + Recipient mailbox\ +
          \ + \ +
          \ +
          \ +
          \ + \ + \ +
          \ +
          ', + success:function(layers,index){ + $(".CreaterReceive").click(function(){ + var _receive = $('input[name=creater_email_value]').val(),_that = this; + if(_receive != ''){ + var loadT = layer.msg('Please wait while creating recipient list...', { icon: 16, time: 0, shade: [0.3, '#000'] }); + layer.close(index) + $.post('/config?action=add_mail_address',{email:_receive},function(rdata){ + layer.close(loadT); + // 刷新收件列表 + get_receive_list(); + layer.msg(rdata.msg,{icon:rdata.status?1:2}); + }) + }else{ + layer.msg('Recipient mailbox cannot be empty!',{icon:2}); + } + }) + + $(".smtp_closeBtn").click(function(){ + layer.close(index) + }) + } + }) +} +function get_receive_list(){ + $.post('/config?action=get_settings',function(rdata){ + var _html = '',_list = rdata.user_mail.mail_list; + if(_list.length > 0){ + for(var i= 0; i<_list.length;i++){ + _html += '\ + '+ _list[i] +'\ +
          Del\ + ' + } + }else{ + _html = 'No Data' + } + $('#receive_table').html(_html); + }) + +} + +function del_email(mail){ + var loadT = layer.msg('Deleting ['+ mail +'], please wait...', { icon: 16, time: 0, shade: [0.3, '#000'] }),_this = this; + $.post('/config?action=del_mail_list',{email:mail},function(rdata){ + layer.close(loadT); + layer.msg(rdata.msg,{icon:rdata.status?1:2}) + _this.get_receive_list() + }) +} +// 设置钉钉 +function SetChannelDing(){ + var _url = $('textarea[name=channel_dingding_value]').val(); + var _all = $('#panel_alert_all').prop("checked"); + if(_url != ''){ + var loadT = layer.msg('Please wait while generating dingding channel...', { icon: 16, time: 0, shade: [0.3, '#000'] }); + $.post('/config?action=set_dingding',{url:_url,atall:_all == true? 'True':'False'},function(rdata){ + layer.close(loadT); + layer.msg(rdata.msg,{icon:rdata.status?1:2}) + }) + }else{ + layer.msg('Please enter the dingding URL',{icon:2}) + } +} + + function show_basic_auth(rdata) { layer.open({ type: 1, area: "500px", - title: "配置BasicAuth认证", + title: "Configure BasicAuth authentication", closeBtn: 2, shift: 5, shadeClose: false, diff --git a/BTPanel/static/js/crontab.js b/BTPanel/static/js/crontab.js index be587558..06b130b4 100644 --- a/BTPanel/static/js/crontab.js +++ b/BTPanel/static/js/crontab.js @@ -135,6 +135,9 @@ function edit_task_info(id){ if(obj.from['backupTo'] == obj['backupsArray'][i]['value']) backupsName = obj['backupsArray'][i]['name']; backupsDom += '
        • '+ obj['backupsArray'][i]['name'] +'
        • '; } + if(obj.from.sType == 'webshell'){ + edit_message_channel(obj.from.urladdress) + } callback(); }); }else{ @@ -146,7 +149,7 @@ function edit_task_info(id){ layer.open({ type:1, title:lan.crontab.crontab_edit+'-['+rdata.name+']', - area: ['850px','450px'], + area: ['866px','500px'], skin:'layer-create-content', shadeClose:false, closeBtn:2, @@ -214,8 +217,8 @@ function edit_task_info(id){
          \
          \
          \ - '+lan.crontab.shell_content+'\ -
          \ + '+ (obj.from.sType == "toShell" ?'Script content':'Exclusion rule')+'\ +
          \
          \
          \ '+lan.crontab.tips+'\ @@ -228,6 +231,23 @@ function edit_task_info(id){
          \
          '+lan.crontab.edit_save+'
          \
          \ +
          \ +
          \ + Scan site\ + \ +

          \ +

          Message channel
          \ + \ +

          \ +
          \ +
          '+lan.crontab.edit_save+'
          \ +
          \
          ' }); setTimeout(function(){ @@ -237,6 +257,8 @@ function edit_task_info(id){ $('.site_list').hide(); }else if( obj.from.sType == 'toUrl'){ $('.site_list').hide(); + }else if( obj.from.sType == 'webshell'){ + $('.site_list').hide(); }else{ $('.site_list').show(); } @@ -361,6 +383,8 @@ function edit_task_info(id){ }else if(obj.from.type == 'minute-n'){ obj.from.where1 = obj.from.minute; obj.from.minute = ''; + }else if(obj.from.sType == 'webshell'){ + obj.from.urladdress = $(".message_start input:checked").val() } layer.msg(lan.crontab.saving,{icon:16,time:0,shade: [0.3, '#000']}); $.post('/crontab?action=modify_crond',obj.from,function(rdata){ @@ -373,13 +397,40 @@ function edit_task_info(id){ }); }); +} +// 修改木马查杀 消息通道 +function edit_message_channel(type){ + $.post('/config?action=get_settings',function(res){ + var tMess = ""; + if(res.user_mail.user_name && !res.dingding.dingding){ + tMess = '
          \ + \ + \ +
          ' + }else if(!res.user_mail.user_name && res.dingding.dingding){ + tMess = '
          \ + \ + \ +
          ' + }else{ + tMess ='
          \ + \ + \ +
          \ +
          \ + \ + \ +
          ' + } + $(".message_start").html(tMess); + }) + } // 设置计划任务状态 function set_task_status(id,status){ var confirm = layer.confirm(status == '0'?lan.crontab.crontab_stop_will:lan.crontab.disable_change_crontab_start, {title:lan.crontab.tips,icon:3,closeBtn:2},function(index) { if (index > 0) { - var loadT = layer.msg(lan.crontab.setting_status,{icon:16,time:0,shade: [0.3, '#000']}); $.post('/crontab?action=set_cron_status',{id:id},function(rdata){ layer.closeAll(); layer.close(confirm); @@ -442,6 +493,25 @@ function allDeleteCron(){ syncDeleteCron(dataList,0,''); }); } +//批量执行和批量清除日志 +function allCron(type){ + var message = type=='log' ? 'Confirm to delete the logs of the selected task?' : 'Confirm to execute the selected task?', + tit = type=='log' ? 'Confirm Delete' : 'Confirm Execute', + url = type=='log' ? '/crontab?action=DelLogs' : '/crontab?action=StartTask', + confirm = layer.confirm(message, {title:tit,icon:3,closeBtn:2},function() { + var checkList = $("input[name=id]"); + for(var i=0;i -1){ data = data.replace('&sName=&','&sName='+ encodeURIComponent($('#inputPath').val()) +'&') + }else if(data.indexOf('sType=webshell') > -1){ + data = $("#set-Config").serialize() + '&urladdress=' + _radiox; + data = data.replace('&sName=&','&sName='+ encodeURIComponent($('#filePath').val()) +'&') } $.post('/crontab?action=AddCrontab',data,function(rdata){ @@ -735,6 +808,9 @@ $(".dropdown ul li a").click(function(){ toUrl(); $(".controls").html(lan.crontab.url_address); break; + case 'webshell': + webShell(); + break; } }) @@ -767,6 +843,7 @@ function toBackup(type){ if(type != 'path'){ var sOpt = "",sOptBody = ''; if(rdata.data.length == 0){ + $(".planname input[name='name']").val(''); layer.msg(lan.public.list_empty,{icon:2}) return } @@ -821,9 +898,9 @@ function toBackup(type){
          '; if (sType == 'sites' && sMsg !== lan.crontab.backup_log) { sBody += '

          \ -

          '+lan.crontab.exclusion_rule+'
          \ +
          '+lan.crontab.exclusion_rule+'
          \ \

          '; } @@ -837,11 +914,24 @@ function toBackup(type){ if(type == "path"){ $('.planname input').attr('readonly',false).removeAttr('style'); } + $("#exclude").focus(function(){ + var _this = $(this), tips = _this.attr('placeholder'), + tipss = ''+lan.crontab.exclusion_rule_tips+'
          data/config.php
          static/upload
          *.log
          '; + _this.attr('placeholder', ''); + var loadT = layer.tips(tipss, _this, { + tips: [1, '#20a53a'], + time: 0, + area: _this[0].clientWidth + 'px' + }); + $(this).one('blur', function () { + $(this).attr('placeholder', tips); + layer.close(loadT); + }); + }); }); } - //下拉菜单名称 function getselectname(){ $(".dropdown ul li a").click(function(){ @@ -910,13 +1000,116 @@ function toFile(){ //从脚本 function toShell(){ - var tBody = ""; + var shell_body = ''; + var shell_name = ''; + if($("b[val='toShell']").text() === 'synchronised time'){ + shell_name = 'Periodically synchronize server time'; + shell_body = 'echo "|-Trying to synchronize time from 0.pool.bt.cn..";\n\ +ntpdate -u 0.pool.bt.cn\n\ +if [ $? = 1 ];then\n\ + echo "|-Trying to synchronize time from 1.pool.bt.cn..";\n\ + ntpdate -u 1.pool.bt.cn\n\ +fi\n\ +if [ $? = 1 ];then\n\ + echo "|-Trying to sync time from 0.asia.pool.ntp.org..";\n\ + ntpdate -u 0.asia.pool.ntp.org\n\ +fi\n\ +if [ $? = 1 ];then\n\ + echo "|-Trying to sync time from www.bt.cn..";\n\ + getBtTime=$(curl -sS --connect-timeout 3 -m 60 http://www.bt.cn/api/index/get_time)\n\ + if [ "${getBtTime}" ];then \n\ + date -s "$(date -d @$getBtTime +"%Y-%m-%d %H:%M:%S")"\n\ + fi\n\ +fi\n\ +echo "|-Trying to write current system time to hardware..";\n\ +hwclock -w\n\ +date\n\ +echo "|-Time synchronization completed!";' + } + var tBody = ""; $("#implement").html(tBody); - $(".planname input[name='name']").removeAttr('readonly style').val(""); + $(".planname input[name='name']").removeAttr('readonly style').val(shell_name); } function toPath() { +} +//木马查杀 +function webShell(){ + var sOpt = "",sOptBody = ''; + $.post('/crontab?action=GetDataList&type=sites',function(rdata){ + $(".planname input[name='name']").attr('readonly','true').css({"background-color":"#f6f6f6","color":"#666"}); + if(rdata.data.length == 0){ + layer.msg(lan.public.list_empty,{icon:2}) + return + } + for(var i=0;i'+rdata.data[i].name+'['+rdata.data[i].ps+']'; + } + sOptBody ='' + setCookie('default_dir_path','/www/wwwroot/'); + setCookie('path_dir_change','/www/wwwroot/'); + setInterval(function(){ + if(getCookie('path_dir_change') != getCookie('default_dir_path')){ + var path_dir_change = getCookie('path_dir_change') + $(".planname input").val('Trojan kill ['+getCookie('path_dir_change')+']'); + setCookie('default_dir_path',path_dir_change); + } + $(".check_alert").click(function(){ + _radiox = $(this).find("input[name=alert]").val(); + }) + },500); + sOptBody += '

          \ +

          Message channel
          \ + \ +

          '; + $("#implement").html(sOptBody); + message_channel_start(); + $("#implement").siblings(".controls").html("Scan site"); + getselectname(); + $(".dropdown ul li a").click(function(){ + var sName = $("#sName").attr("val"); + if(!sName) return; + $(".planname input[name='name']").val("Trojan kill "+'['+sName+']'); + }); + }) +} +function message_channel_start(){ + $.post('/config?action=get_settings',function(res){ + var wBody = ""; + if(!res.user_mail.user_name && !res.dingding.dingding){ + wBody = 'No message channel is set, please go to panel settings to add a message channel configuration?'; + $(".plan-submit").css({"pointer-events":"none","background-color":"#e6e6e6","color":"#333"}); + }else if(res.user_mail.user_name && !res.dingding.dingding){ + wBody = '
          \ + \ + \ +
          ' + }else if(!res.user_mail.user_name && res.dingding.dingding){ + wBody = '
          \ + \ + \ +
          ' + }else{ + wBody ='
          \ + \ + \ +
          \ +
          \ + \ + \ +
          ' + } + $(".message_start").html(wBody); + }) } //从url function toUrl(){ diff --git a/BTPanel/static/js/database.js b/BTPanel/static/js/database.js index 39acc29f..714c60a3 100644 --- a/BTPanel/static/js/database.js +++ b/BTPanel/static/js/database.js @@ -100,12 +100,12 @@ var database = { layer.open({ type: 1, title: lan.database.mysql_tools_box+"【" + db_name + "】", - area: ['780px', '580px'], + area: ['824px', '580px'], closeBtn: 2, shadeClose: false, - content: '
          \ + content: '
          \ \ @@ -118,7 +118,7 @@ var database = { '+lan.database.tb_name+'\ '+lan.database.engine+'\ '+lan.database.character+'\ - '+lan.database.row_num+'\ + '+lan.database.row_num+'\ '+lan.database.size+'\ '+lan.database.operation+'\ \ @@ -324,6 +324,7 @@ var database = { $('#btn_data_backup').unbind('click').click(function () { bt.database.backup_data(id, dataname, function (rdata) { if (rdata.status) database.database_detail(id, dataname); + database.get_list(); }) }) }, 100) diff --git a/BTPanel/static/js/files.js b/BTPanel/static/js/files.js index 13eed165..2ff41371 100644 --- a/BTPanel/static/js/files.js +++ b/BTPanel/static/js/files.js @@ -2,15 +2,19 @@ function IsDiskWidth() { var comlistWidth = $("#comlist").width(); var bodyWidth = $(".file-box").width(); if (comlistWidth + 530 > bodyWidth) { - $("#comlist").css({ "width": bodyWidth - 530 + "px", "height": "34px", "overflow": "auto" }); - } - else { + $("#comlist").css({ + "width": bodyWidth - 530 + "px", + "height": "34px", + "overflow": "auto" + }); + } else { $("#comlist").removeAttr("style"); } } + function Recycle_bin(type) { $.post('/files?action=Get_Recycle_bin', '', function (rdata) { - var body = '' + var body = ''; switch (type) { case 1: for (var i = 0; i < rdata.dirs.length; i++) { @@ -19,10 +23,10 @@ function Recycle_bin(type) { if (shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "..."; if (shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "..."; body += '\ - ' + shortwebname + '\ - ' + shortpath + '\ - '+ ToSize(rdata.dirs[i].size) + '\ - '+ getLocalTime(rdata.dirs[i].time) + '\ + ' + shortwebname + '\ + ' + shortpath + '\ + ' + ToSize(rdata.dirs[i].size) + '\ + ' + getLocalTime(rdata.dirs[i].time) + '\ \ ' + lan.files.recycle_bin_re + '\ | ' + lan.files.recycle_bin_del + '\ @@ -36,10 +40,10 @@ function Recycle_bin(type) { if (shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "..."; if (shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "..."; body += '\ - ' + shortwebname.replace('BTDB_', '') + '\ - mysql://' + shortpath.replace('BTDB_', '') + '\ + ' + shortwebname.replace('BTDB_', '') + '\ + mysql://' + shortpath.replace('BTDB_', '') + '\ -\ - '+ getLocalTime(rdata.files[i].time) + '\ + ' + getLocalTime(rdata.files[i].time) + '\ \ ' + lan.files.recycle_bin_re + '\ | ' + lan.files.recycle_bin_del + '\ @@ -53,10 +57,10 @@ function Recycle_bin(type) { if (shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "..."; if (shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "..."; body += '\ - ' + shortwebname + '\ - ' + shortpath + '\ - '+ ToSize(rdata.files[i].size) + '\ - '+ getLocalTime(rdata.files[i].time) + '\ + ' + shortwebname + '\ + ' + shortpath + '\ + ' + ToSize(rdata.files[i].size) + '\ + ' + getLocalTime(rdata.files[i].time) + '\ \ ' + lan.files.recycle_bin_re + '\ | ' + lan.files.recycle_bin_del + '\ @@ -73,10 +77,10 @@ function Recycle_bin(type) { if (shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "..."; if (shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "..."; body += '\ - ' + shortwebname + '\ - ' + shortpath + '\ - '+ ToSize(rdata.dirs[i].size) + '\ - '+ getLocalTime(rdata.dirs[i].time) + '\ + ' + shortwebname + '\ + ' + shortpath + '\ + ' + ToSize(rdata.dirs[i].size) + '\ + ' + getLocalTime(rdata.dirs[i].time) + '\ \ ' + lan.files.recycle_bin_re + '\ | ' + lan.files.recycle_bin_del + '\ @@ -94,10 +98,10 @@ function Recycle_bin(type) { if (shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "..."; if (shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "..."; body += '\ - ' + shortwebname + '\ - ' + shortpath + '\ - '+ ToSize(rdata.files[i].size) + '\ - '+ getLocalTime(rdata.files[i].time) + '\ + ' + shortwebname + '\ + ' + shortpath + '\ + ' + ToSize(rdata.files[i].size) + '\ + ' + getLocalTime(rdata.files[i].time) + '\ \ ' + lan.files.recycle_bin_re + '\ | ' + lan.files.recycle_bin_del + '\ @@ -115,10 +119,10 @@ function Recycle_bin(type) { if (shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "..."; if (shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "..."; body += '\ - ' + shortwebname + '\ - ' + shortpath + '\ - '+ ToSize(rdata.files[i].size) + '\ - '+ getLocalTime(rdata.files[i].time) + '\ + ' + shortwebname + '\ + ' + shortpath + '\ + ' + ToSize(rdata.files[i].size) + '\ + ' + getLocalTime(rdata.files[i].time) + '\ \ ' + lan.files.recycle_bin_re + '\ | ' + lan.files.recycle_bin_del + '\ @@ -138,10 +142,10 @@ function Recycle_bin(type) { if (shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "..."; if (shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "..."; body += '\ - ' + shortwebname + '\ - ' + shortpath + '\ - '+ ToSize(rdata.files[i].size) + '\ - '+ getLocalTime(rdata.files[i].time) + '\ + ' + shortwebname + '\ + ' + shortpath + '\ + ' + ToSize(rdata.files[i].size) + '\ + ' + getLocalTime(rdata.files[i].time) + '\ \ ' + lan.files.recycle_bin_re + '\ | ' + lan.files.recycle_bin_del + '\ @@ -159,10 +163,10 @@ function Recycle_bin(type) { if (shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "..."; if (shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "..."; body += '\ - ' + shortwebname.replace('BTDB_', '') + '\ - mysql://' + shortpath.replace('BTDB_', '') + '\ + ' + shortwebname.replace('BTDB_', '') + '\ + mysql://' + shortpath.replace('BTDB_', '') + '\ -\ - '+ getLocalTime(rdata.files[i].time) + '\ + ' + getLocalTime(rdata.files[i].time) + '\ \ ' + lan.files.recycle_bin_re + '\ | ' + lan.files.recycle_bin_del + '\ @@ -178,42 +182,42 @@ function Recycle_bin(type) { var tablehtml = '
          \
          \ - '+ lan.files.recycle_bin_on + '\ + ' + lan.files.recycle_bin_on + '\
          \ - \ + \ \
          \ - '+ lan.files.recycle_bin_on_db + '\ + ' + lan.files.recycle_bin_on_db + '\
          \ - \ + \ \
          \
          \ - '+ lan.files.recycle_bin_ps + '\ - \ + ' + lan.files.recycle_bin_ps + '\ + \
          \
          \
          \ -

          '+ lan.files.recycle_bin_type1 + '

          \ -

          '+ lan.files.recycle_bin_type2 + '

          \ -

          '+ lan.files.recycle_bin_type3 + '

          \ -

          '+ lan.files.recycle_bin_type4 + '

          \ -

          '+ lan.files.recycle_bin_type5 + '

          \ -

          '+ lan.files.recycle_bin_type6 + '

          \ +

          ' + lan.files.recycle_bin_type1 + '

          \ +

          ' + lan.files.recycle_bin_type2 + '

          \ +

          ' + lan.files.recycle_bin_type3 + '

          \ +

          ' + lan.files.recycle_bin_type4 + '

          \ +

          ' + lan.files.recycle_bin_type5 + '

          \ +

          ' + lan.files.recycle_bin_type6 + '

          \
          \
          \
          \ \ \ \ - \ - \ - \ - \ - \ + \ + \ + \ + \ + \ \ \ - '+ body + '\ + ' + body + '\
          '+ lan.files.recycle_bin_th1 + ''+ lan.files.recycle_bin_th2 + ''+ lan.files.recycle_bin_th3 + ''+ lan.files.recycle_bin_th4 + ''+ lan.files.recycle_bin_th5 + '' + lan.files.recycle_bin_th1 + '' + lan.files.recycle_bin_th2 + '' + lan.files.recycle_bin_th3 + '' + lan.files.recycle_bin_th4 + '' + lan.files.recycle_bin_th5 + '
          '; if (type == "open") { layer.open({ @@ -237,12 +241,14 @@ function Recycle_bin(type) { }) }); } + function getFileName(name) { var text = name.split("."); var n = text.length - 1; text = text[n]; return text; } + function ReisImage(fileName) { var exts = ['jpg', 'jpeg', 'png', 'bmp', 'gif', 'tiff', 'ico']; for (var i = 0; i < exts.length; i++) { @@ -250,54 +256,102 @@ function ReisImage(fileName) { } return false; } + function ReRecycleBin(path, obj) { - layer.confirm(lan.files.recycle_bin_re_msg, { title: lan.files.recycle_bin_re_title, closeBtn: 2, icon: 3 }, function () { - var loadT = layer.msg(lan.files.recycle_bin_re_the, { icon: 16, time: 0, shade: [0.3, '#000'] }); + layer.confirm(lan.files.recycle_bin_re_msg, { + title: lan.files.recycle_bin_re_title, + closeBtn: 2, + icon: 3 + }, function () { + var loadT = layer.msg(lan.files.recycle_bin_re_the, { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); $.post('/files?action=Re_Recycle_bin', 'path=' + encodeURIComponent(path), function (rdata) { layer.close(loadT); - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 5 + }); $(obj).parents('tr').remove(); }); }); } + function DelRecycleBin(path, obj) { - layer.confirm(lan.files.recycle_bin_del_msg, { title: lan.files.recycle_bin_del_title, closeBtn: 2, icon: 3 }, function () { - var loadT = layer.msg(lan.files.recycle_bin_del_the, { icon: 16, time: 0, shade: [0.3, '#000'] }); + layer.confirm(lan.files.recycle_bin_del_msg, { + title: lan.files.recycle_bin_del_title, + closeBtn: 2, + icon: 3 + }, function () { + var loadT = layer.msg(lan.files.recycle_bin_del_the, { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); $.post('/files?action=Del_Recycle_bin', 'path=' + encodeURIComponent(path), function (rdata) { layer.close(loadT); - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 5 + }); $(obj).parents('tr').remove(); }); }); } + function CloseRecycleBin() { - layer.confirm(lan.files.recycle_bin_close_msg, { title: lan.files.recycle_bin_close, closeBtn: 2, icon: 3 }, function () { - var loadT = layer.msg("
          " + lan.files.recycle_bin_close_the + "
          ", { icon: 16, time: 0, shade: [0.3, '#000'] }); + layer.confirm(lan.files.recycle_bin_close_msg, { + title: lan.files.recycle_bin_close, + closeBtn: 2, + icon: 3 + }, function () { + var loadT = layer.msg("
          " + lan.files.recycle_bin_close_the + "
          ", { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); setTimeout(function () { getSpeed('.myspeed'); }, 1000); $.post('/files?action=Close_Recycle_bin', '', function (rdata) { layer.close(loadT); - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 5 + }); $("#RecycleBody").html(''); }); }); } + function Set_Recycle_bin(db) { - var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); + var loadT = layer.msg(lan.public.the, { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); var data = {} if (db == 1) { - data = { db: db }; + data = { + db: db + }; } $.post('/files?action=Recycle_bin', data, function (rdata) { layer.close(loadT); - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 5 + }); }); } function get_path_size(path) { - var loadT = layer.msg(lan.files.calc_size, { icon: 16, time: 0, shade: [0.3, '#000'] }); - $.post('/files?action=get_path_size', { path: path }, function (rdata) { + var loadT = layer.msg(lan.files.calc_size, { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); + $.post('/files?action=get_path_size', { + path: path + }, function (rdata) { layer.close(loadT); var myclass = '.' + rdata.path.replace(/[^\w]/g, '-'); console.log(myclass) @@ -334,6 +388,11 @@ function GetFiles(Path, sort) { } } + var old_scroll_top = 0; + if (getCookie('Path') === Path) { + old_scroll_top = $(".oldTable").scrollTop(); + } + var sorted = ''; var reverse = ''; if (!sort) { @@ -362,13 +421,19 @@ function GetFiles(Path, sort) { if (searchV) { - var loadT = layer.msg(lan.files.search_now, { icon: 16, time: 0, shade: [0.3, '#000']}); + var loadT = layer.msg(lan.files.search_now, { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); } var totalSize = 0; $.post('/files?action=GetDir&tojs=GetFiles&p=' + p + '&showRow=' + showRow + search, data, function (rdata) { if (searchV) layer.close(loadT); if (rdata.status === false) { - layer.msg(rdata.msg, { icon: 2 }); + layer.msg(rdata.msg, { + icon: 2 + }); return; } @@ -381,7 +446,7 @@ function GetFiles(Path, sort) { } $("#filePage").html(rdata.PAGE); - $("#filePage div").append(""+lan.files.per_page+""+lan.files.piece+""); + $("#filePage div").append("" + lan.files.per_page + "" + lan.files.piece + ""); $("#filePage .Pcount").css("left", "16px"); if (rdata.DIR == null) rdata.DIR = []; for (var i = 0; i < rdata.DIR.length; i++) { @@ -404,30 +469,30 @@ function GetFiles(Path, sort) { fileMsg = '' + fileMsg + ''; } var timetext = '--'; + //" + lan.files.dir_menu_webshell + " |---在下一行的 if (getCookie("rank") == "a") { $("#set_list").addClass("active"); $("#set_icon").removeClass("active"); - Body += "\ - \ + Body += "\ + \ " + cnametext + fileMsg + "\ - "+lan.files.calc_click+"\ - "+ getLocalTime(fmp[2]) + "\ - "+ fmp[3] + "\ - "+ fmp[4] + "\ + " + lan.files.calc_click + "\ + " + getLocalTime(fmp[2]) + "\ + " + fmp[3] + "\ + " + fmp[4] + "\ \ " + lan.files.file_menu_copy + " | \ " + lan.files.file_menu_mv + " | \ " + lan.files.file_menu_rename + " | \ - " + lan.files.file_menu_auth + " | \ + " + lan.files.file_menu_auth + " | \ " + lan.files.file_menu_zip + " | \ " + lan.files.file_menu_del + "\ "; - } - else { + } else { $("#set_icon").addClass("active"); $("#set_list").removeClass("active"); Body += ""; @@ -439,6 +504,7 @@ function GetFiles(Path, sort) { var displayZip = isZip(fmp[0]); var bodyZip = ''; var download = ''; + var file_webshell = ''; var cnametext = fmp[0] + fmp[5]; fmp[0] = fmp[0].replace(/'/, "\\'"); if (cnametext.length > 48) { @@ -449,6 +515,9 @@ function GetFiles(Path, sort) { cnametext = cnametext.substring(0, 16) + '...' } } + if (isPhp(fmp[0])) { + file_webshell = "" + lan.files.file_menu_webshell + " | "; + } if (displayZip != -1) { bodyZip = "" + lan.files.file_menu_unzip + " | "; } @@ -483,26 +552,25 @@ function GetFiles(Path, sort) { if (fileMsg != '') { fileMsg = '' + fileMsg + ''; } - Body += "\ - " + cnametext + fileMsg + "\ + Body += "\ + " + cnametext + fileMsg + "\ " + (ToSize(fmp[1])) + "\ " + ((fmp[2].length > 11) ? fmp[2] : getLocalTime(fmp[2])) + "\ - "+ fmp[3] + "\ - "+ fmp[4] + "\ + " + fmp[3] + "\ + " + fmp[4] + "\ \ " + lan.files.file_menu_copy + " | \ " + lan.files.file_menu_mv + " | \ " + lan.files.file_menu_rename + " | \ - " + lan.files.file_menu_auth + " | \ + " + lan.files.file_menu_auth + " | \ " + lan.files.file_menu_zip + " | \ - "+ bodyZip + download + "\ + " + bodyZip + download + "\ " + lan.files.file_menu_del + "\ "; - } - else { + } else { Body += ""; } @@ -515,12 +583,12 @@ function GetFiles(Path, sort) { \ \ \ - ' + lan.files.file_name + ((data['sort'] === 'name' || !data['sort']) ? sort_icon : '') + '\ - ' + lan.files.file_size + ((data['sort'] === 'size') ? sort_icon : '') + '\ - ' + lan.files.file_etime + ((data['sort'] === 'mtime') ? sort_icon : '') + '\ - ' + lan.files.file_auth + ((data['sort'] === 'accept') ? sort_icon : '') + '\ - ' + lan.files.file_own + ((data['sort'] === 'user') ? sort_icon : '') + '\ - '+ lan.files.file_act + '\ + ' + lan.files.file_name + ((data['sort'] === 'name' || !data['sort']) ? sort_icon : '') + '\ + ' + lan.files.file_size + ((data['sort'] === 'size') ? sort_icon : '') + '\ + ' + lan.files.file_etime + ((data['sort'] === 'mtime') ? sort_icon : '') + '\ + ' + lan.files.file_auth + ((data['sort'] === 'accept') ? sort_icon : '') + '\ + ' + lan.files.file_own + ((data['sort'] === 'user') ? sort_icon : '') + '\ + ' + lan.files.file_act + '\ \ \ \ @@ -531,27 +599,26 @@ function GetFiles(Path, sort) { \ \ \ - ' + lan.files.file_name + ((data['sort'] === 'name' || !data['sort']) ? sort_icon : '') + '\ - ' + lan.files.file_size + ((data['sort'] === 'size') ? sort_icon : '') + '\ - ' + lan.files.file_etime + ((data['sort'] === 'mtime') ? sort_icon : '') + '\ - ' + lan.files.file_auth + ((data['sort'] === 'accept') ? sort_icon : '') + '\ - ' + lan.files.file_own + ((data['sort'] === 'user') ? sort_icon : '') + '\ - '+ lan.files.file_act + '\ + ' + lan.files.file_name + ((data['sort'] === 'name' || !data['sort']) ? sort_icon : '') + '\ + ' + lan.files.file_size + ((data['sort'] === 'size') ? sort_icon : '') + '\ + ' + lan.files.file_etime + ((data['sort'] === 'mtime') ? sort_icon : '') + '\ + ' + lan.files.file_auth + ((data['sort'] === 'accept') ? sort_icon : '') + '\ + ' + lan.files.file_own + ((data['sort'] === 'user') ? sort_icon : '') + '\ + ' + lan.files.file_act + '\ \ \ - '+ Body + '\ + ' + Body + '\
          '; $("#fileCon").removeClass("fileList").html(tablehtml); $("#tipTools").width($("#fileCon")[0].clientWidth - 30); - } - else { + } else { $("#fileCon").addClass("fileList").html(Body); $("#tipTools").width($("#fileCon")[0].clientWidth - 30); } $("#DirPathPlace input").val(rdata.PATH); var BarTools = '
          \ \ \
          '; if (rdata.PATH != '/') { - BarTools += ' '; + BarTools += ' '; } setCookie('Path', rdata.PATH); - BarTools += ' '; + BarTools += ' '; //收藏夹 @@ -572,7 +639,7 @@ function GetFiles(Path, sort) {
          ' @@ -595,13 +662,12 @@ function GetFiles(Path, sort) { $("#setBox").prop("checked", false); $("#BarTools").html(BarTools); - + $(".oldTable").scrollTop(old_scroll_top); $("input[name=id]").click(function () { if ($(this).prop("checked")) { $(this).prop("checked", true); $(this).parents("tr").addClass("ui-selected"); - } - else { + } else { $(this).prop("checked", false); $(this).parents("tr").removeClass("ui-selected"); } @@ -647,8 +713,7 @@ function GetFiles(Path, sort) { if (e.which == 3) { if (count > 1) { RClickAll(e); - } - else { + } else { return } } @@ -658,9 +723,8 @@ function GetFiles(Path, sort) { if (e.which == 3) { if (count <= 1) { var a = $(this); - a.contextify(RClick(a.attr("filetype"), a.attr("data-path"), a.find("input").val(), rdata)); - } - else { + a.contextify(RClick(a.attr("filetype"), a.attr("data-path"), a.find("input").val(), rdata, a.attr('fileshare'),a.attr('data-composer'))); + } else { RClickAll(e); } } @@ -673,6 +737,41 @@ function GetFiles(Path, sort) { auto_table_width(); }); } + +function webshell_dir(path) { + layer.confirm('Directory scan will include php files in subdirectories, whether to operate?', { + title: lan.files.dir_menu_webshell, + closeBtn: 2, + icon: 3 + }, function (index) { + layer.msg(lan.public.the, { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); + $.post('/files?action=dir_webshell_check', 'path=' + path, function (rdata) { + layer.close(index); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 2 + }); + }); + }); +} + +function php_file_webshell(file) { + var loadT = layer.msg('Scanning files, please wait ...', { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); + $.post('/files?action=file_webshell_check', 'filename=' + file, function (rdata) { + layer.close(loadT); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 2 + }); + }) +} + function auto_table_width() { var oldTable = $(window).height() - $('#tipTools')[0].getBoundingClientRect().height - $('#filePage')[0].getBoundingClientRect().height - $('.footer')[0].getBoundingClientRect().height - 111; var oldTable_heigth = $('.oldTable table').height(); @@ -689,7 +788,9 @@ function auto_table_width() { $('.oldTable').css('marginTop', '0') } $('.oldTable').height(oldTable); - $('.oldTable table').css({ 'marginTop': '-36px' }) + $('.oldTable table').css({ + 'marginTop': '-36px' + }) } @@ -705,6 +806,7 @@ function totalFile() { } return count; } + function bindselect() { $("#filesBody").selectable({ autoRefresh: false, @@ -736,28 +838,29 @@ function bindselect() { showSeclect(); }) } + function showSeclect() { var count = totalFile(); var BatchTools = ''; if (count > 1) { BatchTools = '\ - \ - \ - \ - ' + \ + \ + \ + ' $("#Batch").html(BatchTools); } else { $("#Batch").html(BatchTools); } } -$("#tipTools").width($(".file-box")[0].clientWidth-30); +$("#tipTools").width($(".file-box")[0].clientWidth - 30); $("#PathPlaceBtn").width($(".file-box").width() - 700); $("#DirPathPlace input").width($(".file-box").width() - 700); if ($(window).width() < 1160) { $("#PathPlaceBtn").width(290); } window.onresize = function () { - $("#tipTools").width($(".file-box")[0].clientWidth-30); + $("#tipTools").width($(".file-box")[0].clientWidth - 30); $("#PathPlaceBtn").width($(".file-box").width() - 700); $("#DirPathPlace input").width($(".file-box").width() - 700); if ($(window).width() < 1160) { @@ -767,6 +870,7 @@ window.onresize = function () { IsDiskWidth() auto_table_width(); } + function Batch(type, access) { var path = $("#DirPathPlace input").val(); var el = document.getElementsByTagName('input'); @@ -816,30 +920,44 @@ function Batch(type, access) { Zip(names); return; } + if (type == 6) { + webshell_dir() + } - myloadT = layer.msg("
          " + lan.public.the + "
          ", { icon: 16, time: 0, shade: [0.3, '#000'] }); - setTimeout(function () { getSpeed('.myspeed'); }, 1000); + myloadT = layer.msg("
          " + lan.public.the + "
          ", { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); + setTimeout(function () { + getSpeed('.myspeed'); + }, 1000); $.post('/files?action=SetBatchData', data, function (rdata) { layer.close(myloadT); GetFiles(path); - layer.msg(rdata.msg, { icon: 1 }); + layer.msg(rdata.msg, { + icon: 1 + }); }); } + function BatchPaste() { var path = $("#DirPathPlace input").val(); var type = getCookie('BatchPaste'); var data = 'type=' + type + '&path=' + path; - $.post('/files?action=CheckExistsFiles', { dfile: path }, function (result) { + $.post('/files?action=CheckExistsFiles', { + dfile: path + }, function (result) { if (result.length > 0) { var tbody = ''; for (var i = 0; i < result.length; i++) { tbody += '' + result[i].filename + '' + ToSize(result[i].size) + '' + getLocalTime(result[i].mtime) + ''; } - var mbody = '
          \ - '+tbody+'\ + var mbody = '
          '+lan.files.file_name+''+lan.files.file_size+''+lan.files.last_edit_time+'
          \ + ' + tbody + '\
          ' + lan.files.file_name + '' + lan.files.file_size + '' + lan.files.last_edit_time + '
          '; - SafeMessage(lan.files.will_cover_this_file,mbody,function(){ + SafeMessage(lan.files.will_cover_this_file, mbody, function () { BatchPasteTo(data, path); }); $(".layui-layer-page").css("width", "500px"); @@ -850,15 +968,24 @@ function BatchPaste() { } function BatchPasteTo(data, path) { - myloadT = layer.msg("
          " + lan.public.the + "
          ", { icon: 16, time: 0, shade: [0.3, '#000'] }); - setTimeout(function () { getSpeed('.myspeed'); }, 1000); + myloadT = layer.msg("
          " + lan.public.the + "
          ", { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); + setTimeout(function () { + getSpeed('.myspeed'); + }, 1000); $.post('files?action=BatchPaste', data, function (rdata) { layer.close(myloadT); setCookie('BatchSelected', null); GetFiles(path); - layer.msg(rdata.msg, { icon: 1 }); + layer.msg(rdata.msg, { + icon: 1 + }); }); } + function GetExtName(fileName) { var extArr = fileName.split("."); var exts = ['folder', 'folder-unempty', 'sql', 'c', 'cpp', 'cs', 'flv', 'css', 'js', 'htm', 'html', 'java', 'log', 'mht', 'php', 'url', 'xml', 'ai', 'bmp', 'cdr', 'gif', 'ico', 'jpeg', 'jpg', 'JPG', 'png', 'psd', 'webp', 'ape', 'avi', 'flv', 'mkv', 'mov', 'mp3', 'mp4', 'mpeg', 'mpg', 'rm', 'rmvb', 'swf', 'wav', 'webm', 'wma', 'wmv', 'rtf', 'docx', 'fdf', 'potm', 'pptx', 'txt', 'xlsb', 'xlsx', '7z', 'cab', 'iso', 'bz2', 'rar', 'zip', 'gz', 'bt', 'file', 'apk', 'bookfolder', 'folder', 'folder-empty', 'folder-unempty', 'fromchromefolder', 'documentfolder', 'fromphonefolder', 'mix', 'musicfolder', 'picturefolder', 'videofolder', 'sefolder', 'access', 'mdb', 'accdb', 'sql', 'c', 'cpp', 'cs', 'js', 'fla', 'flv', 'htm', 'html', 'java', 'log', 'mht', 'php', 'url', 'xml', 'ai', 'bmp', 'cdr', 'gif', 'ico', 'jpeg', 'jpg', 'JPG', 'png', 'psd', 'webp', 'ape', 'avi', 'flv', 'mkv', 'mov', 'mp3', 'mp4', 'mpeg', 'mpg', 'rm', 'rmvb', 'swf', 'wav', 'webm', 'wma', 'wmv', 'doc', 'docm', 'dotx', 'dotm', 'dot', 'rtf', 'docx', 'pdf', 'fdf', 'ppt', 'pptm', 'pot', 'potm', 'pptx', 'txt', 'xls', 'csv', 'xlsm', 'xlsb', 'xlsx', '7z', 'gz', 'cab', 'iso', 'rar', 'zip', 'bt', 'file', 'apk', 'css']; @@ -870,6 +997,7 @@ function GetExtName(fileName) { } return 'file'; } + function ShowEditMenu() { $("#filesBody > tr").hover(function () { $(this).addClass("hover"); @@ -879,10 +1007,12 @@ function ShowEditMenu() { $(this).addClass("on").siblings().removeClass("on"); }) } + function GetFileName(fileNameFull) { var pName = fileNameFull.split('/'); return pName[pName.length - 1]; } + function GetDisk() { var LBody = ''; $.get('/system?action=GetDiskInfo', function (rdata) { @@ -890,10 +1020,12 @@ function GetDisk() { LBody += " " + (rdata[i].path == '/' ? lan.files.path_root : rdata[i].path) + "(" + rdata[i].size[2] + ")"; } var trash = ' ' + lan.files.recycle_bin_title + ''; - $("#comlist").html(LBody + trash); + var backups = ''; + $("#comlist").html(LBody + trash + backups); IsDiskWidth(); }); } + function BackDir() { var str = $("#DirPathPlace input").val().replace('//', '/'); if (str.substr(str.length - 1, 1) == '/') { @@ -916,13 +1048,19 @@ function BackDir() { } setTimeout('PathPlaceBtn(getCookie("Path"));', 200); } + function CreateFile(type, path) { if (type == 1) { var fileName = $("#newFileName").val(); - layer.msg(lan.public.the, { icon: 16, time: 10000 }); + layer.msg(lan.public.the, { + icon: 16, + time: 10000 + }); $.post('/files?action=CreateFile', 'path=' + encodeURIComponent(path + '/' + fileName), function (rdata) { layer.close(getCookie('layers')); - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 2 + }); if (rdata.status) { GetFiles($("#DirPathPlace input").val()); openEditorView(0, path + '/' + fileName); @@ -938,10 +1076,10 @@ function CreateFile(type, path) { title: lan.files.new_empty_file, content: '
          \
          \ - \ + \
          \
          \ - \ + \ \
          \
          ', @@ -956,6 +1094,7 @@ function CreateFile(type, path) { if (e.keyCode == 13) $("#CreateFileBtn").click(); }); } + function CreateDir(type, path) { if (type == 1) { var dirName = $("#newDirName").val(); @@ -965,7 +1104,9 @@ function CreateDir(type, path) { }); $.post('/files?action=CreateDir', 'path=' + encodeURIComponent(path + '/' + dirName), function (rdata) { layer.close(getCookie('layers')); - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 2 + }); GetFiles($("#DirPathPlace input").val()); }); return; @@ -978,10 +1119,10 @@ function CreateDir(type, path) { title: lan.files.new_dir, content: '
          \
          \ - \ + \
          \
          \ - \ + \ \
          \
          ', @@ -998,42 +1139,78 @@ function CreateDir(type, path) { } // 删除文件 function DeleteFile(fileName) { - layer.confirm(lan.get('recycle_bin_confirm', [fileName]), { title: lan.files.del_file, closeBtn: 2, icon: 3 }, function (index) { - layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); + layer.confirm(lan.get('recycle_bin_confirm', [fileName]), { + title: lan.files.del_file, + closeBtn: 2, + icon: 3 + }, function (index) { + layer.msg(lan.public.the, { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); $.post('/files?action=DeleteFile', 'path=' + encodeURIComponent(fileName), function (rdata) { layer.close(index); - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 2 + }); GetFiles($("#DirPathPlace input").val()); }); }); } + function DeleteDir(dirName) { - layer.confirm(lan.get('recycle_bin_confirm_dir', [dirName]), { title: lan.files.del_dir, closeBtn: 2, icon: 3 }, function (index) { - layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); + layer.confirm(lan.get('recycle_bin_confirm_dir', [dirName]), { + title: lan.files.del_dir, + closeBtn: 2, + icon: 3 + }, function (index) { + layer.msg(lan.public.the, { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); $.post('/files?action=DeleteDir', 'path=' + encodeURIComponent(dirName), function (rdata) { layer.close(index); - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 2 + }); GetFiles($("#DirPathPlace input").val()); }); }); } + function AllDeleteFileSub(data, path) { - layer.confirm(lan.files.del_all_msg, { title: lan.files.del_all_file, closeBtn: 2, icon: 3 }, function (index) { - layer.msg("
          " + lan.public.the + "
          ", { icon: 16, time: 0, shade: [0.3, '#000'] }); - setTimeout(function () { getSpeed('.myspeed'); }, 1000); + layer.confirm(lan.files.del_all_msg, { + title: lan.files.del_all_file, + closeBtn: 2, + icon: 3 + }, function (index) { + layer.msg("
          " + lan.public.the + "
          ", { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); + setTimeout(function () { + getSpeed('.myspeed'); + }, 1000); $.post('files?action=SetBatchData', data, function (rdata) { layer.close(index); GetFiles(path); - layer.msg(rdata.msg, { icon: 1 }); + layer.msg(rdata.msg, { + icon: 1 + }); }); }); } + function ReloadFiles() { setInterval(function () { var path = $("#DirPathPlace input").val(); GetFiles(path); }, 3000); } + function DownloadFile(action) { if (action == 1) { var fUrl = $("#mUrl").val(); @@ -1051,9 +1228,15 @@ function DownloadFile(action) { } } layer.close(getCookie('layers')) - layer.msg(lan.files.down_task, { time: 0, icon: 16, shade: [0.3, '#000'] }); + layer.msg(lan.files.down_task, { + time: 0, + icon: 16, + shade: [0.3, '#000'] + }); $.post('/files?action=DownloadFile', 'path=' + fpath + '&url=' + fUrl + '&filename=' + fname, function (rdata) { - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 2 + }); GetFiles(fpath); GetTaskCount(); task_stat(); @@ -1069,17 +1252,17 @@ function DownloadFile(action) { title: lan.files.down_title, content: '
          \
          \ - '+ lan.files.down_url + ':\ + ' + lan.files.down_url + ':\
          \
          \ - '+ lan.files.down_to + ':\ + ' + lan.files.down_to + ':\
          \
          \ - '+ lan.files.file_name + ':\ + ' + lan.files.file_name + ':\
          \
          \ - \ - \ + \ + \
          \
          ', success: function (layers, index) { @@ -1096,6 +1279,7 @@ function DownloadFile(action) { $("#dfilename").val(tmp[tmp.length - 1]) }); } + function ExecShell(action) { if (action == 1) { var path = $("#DirPathPlace input").val(); @@ -1104,9 +1288,10 @@ function ExecShell(action) { if (rdata.status) { $("#mExec").val(''); GetShellEcho(); - } - else { - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + } else { + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 2 + }); } }); @@ -1121,7 +1306,7 @@ function ExecShell(action) { content: '
          \
          \
          \ - ' + lan.files.shell_go + '\ + ' + lan.files.shell_go + '\
          \
          ' }); @@ -1132,6 +1317,7 @@ function ExecShell(action) { } var outTime = null; + function outTimeGet() { outTime = setInterval(function () { if (!$("#mExec").attr('name')) { @@ -1148,15 +1334,21 @@ function GetShellEcho() { $(".shellcode").scrollTop($(".shellcode")[0].scrollHeight); }); } + function ReName(type, fileName) { if (type == 1) { var path = $("#DirPathPlace input").val(); var newFileName = encodeURIComponent(path + '/' + $("#newFileName").val()); var oldFileName = encodeURIComponent(path + '/' + fileName); - layer.msg(lan.public.the, { icon: 16, time: 10000 }); + layer.msg(lan.public.the, { + icon: 16, + time: 10000 + }); $.post('/files?action=MvFile', 'sfile=' + oldFileName + '&dfile=' + newFileName + '&rename=true', function (rdata) { layer.close(getCookie('layers')); - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 2 + }); GetFiles(path); }); return; @@ -1172,7 +1364,7 @@ function ReName(type, fileName) { \
          \
          \ - \ + \ \
          \
          ', @@ -1187,20 +1379,29 @@ function ReName(type, fileName) { if (e.keyCode == 13) $("#ReNameBtn").click(); }); } + function CutFile(fileName) { var path = $("#DirPathPlace input").val(); setCookie('cutFileName', fileName); setCookie('copyFileName', null); - layer.msg(lan.files.mv_ok, { icon: 1, time: 1000 }); + layer.msg(lan.files.mv_ok, { + icon: 1, + time: 1000 + }); GetFiles(path); } + function CopyFile(fileName) { var path = $("#DirPathPlace input").val(); setCookie('copyFileName', fileName); setCookie('cutFileName', null); - layer.msg(lan.files.copy_ok, { icon: 1, time: 1000 }); + layer.msg(lan.files.copy_ok, { + icon: 1, + time: 1000 + }); GetFiles(path); } + function PasteFile(fileName) { var path = $("#DirPathPlace input").val(); var copyName = getCookie('copyFileName'); @@ -1208,16 +1409,19 @@ function PasteFile(fileName) { var filename = copyName; if (cutName != 'null' && cutName != undefined) filename = cutName; filename = filename.split('/').pop(); - $.post('/files?action=CheckExistsFiles', { dfile: path, filename: filename }, function (result) { + $.post('/files?action=CheckExistsFiles', { + dfile: path, + filename: filename + }, function (result) { if (result.length > 0) { var tbody = ''; for (var i = 0; i < result.length; i++) { tbody += '' + result[i].filename + '' + ToSize(result[i].size) + '' + getLocalTime(result[i].mtime) + ''; } - var mbody = '
          \ - '+tbody+'\ + var mbody = '
          '+lan.files.file_name+''+lan.files.file_size+''+lan.files.last_edit_time+'
          \ + ' + tbody + '\
          ' + lan.files.file_name + '' + lan.files.file_size + '' + lan.files.last_edit_time + '
          '; - SafeMessage(lan.files.will_cover_this_file,mbody,function(){ + SafeMessage(lan.files.will_cover_this_file, mbody, function () { PasteTo(path, copyName, cutName, fileName); }); } else { @@ -1231,7 +1435,8 @@ function PasteTo(path, copyName, cutName, fileName) { if (copyName != 'null' && copyName != undefined) { layer.msg(lan.files.copy_the, { icon: 16, - time: 0, shade: [0.3, '#000'] + time: 0, + shade: [0.3, '#000'] }); $.post('/files?action=CopyFile', 'sfile=' + encodeURIComponent(copyName) + '&dfile=' + encodeURIComponent(path + '/' + fileName), function (rdata) { layer.closeAll(); @@ -1248,7 +1453,8 @@ function PasteTo(path, copyName, cutName, fileName) { if (cutName != 'null' && cutName != undefined) { layer.msg(lan.files.mv_the, { icon: 16, - time: 0, shade: [0.3, '#000'] + time: 0, + shade: [0.3, '#000'] }); $.post('/files?action=MvFile', 'sfile=' + encodeURIComponent(cutName) + '&dfile=' + encodeURIComponent(path + '/' + fileName), function (rdata) { layer.closeAll(); @@ -1275,16 +1481,24 @@ function Zip(dirName, submits) { var z_type = $("select[name='z_type']").val(); if (!z_type) z_type = 'tar.gz'; layer.close(getCookie('layers')); - var layers = layer.msg(lan.files.zip_the, { icon: 16, time: 0, shade: [0.3, '#000'] }); + var layers = layer.msg(lan.files.zip_the, { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); $.post('/files?action=Zip', 'sfile=' + sfile + '&dfile=' + dfile + '&z_type=' + z_type + '&path=' + encodeURIComponent(path), function (rdata) { layer.close(layers); if (rdata == null || rdata == undefined) { - layer.msg(lan.files.zip_ok, { icon: 1 }); + layer.msg(lan.files.zip_ok, { + icon: 1 + }); GetFiles(path) ReloadFiles(); return; } - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 2 + }); if (rdata.status) { task_stat() GetFiles(path); @@ -1305,17 +1519,17 @@ function Zip(dirName, submits) { closeBtn: 2, area: '650px', title: lan.files.zip_title, - content: '
          ' - + '
          ' - + '' - + '

          '+lan.files.comp_type+'

          ' - + '' + lan.files.zip_to + '' - + '
          ' - + '
          ' - + '' - + '' - + '
          ' - + '
          ', + content: '
          ' + + '
          ' + + '' + + '

          ' + lan.files.comp_type + '

          ' + + '' + lan.files.zip_to + '' + + '
          ' + + '
          ' + + '' + + '' + + '
          ' + + '
          ', success: function (layers, index) { $('.layer_close').click(function () { layer.close(index); @@ -1332,6 +1546,7 @@ function Zip(dirName, submits) { }, 100); } + function UnZip(fileName, type) { var path = $("#DirPathPlace input").val(); if (type.length == 3) { @@ -1340,9 +1555,15 @@ function UnZip(fileName, type) { var password = encodeURIComponent($("#unpass").val()); coding = $("select[name='coding']").val(); layer.close(getCookie('layers')); - layer.msg(lan.files.unzip_the, { icon: 16, time: 0, shade: [0.3, '#000'] }); + layer.msg(lan.files.unzip_the, { + icon: 16, + time: 0, + shade: [0.3, '#000'] + }); $.post('/files?action=UnZip', 'sfile=' + sfile + '&dfile=' + dfile + '&type=' + type + '&coding=' + coding + '&password=' + password, function (rdata) { - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 2 + }); task_stat(); GetFiles(path); }); @@ -1360,20 +1581,20 @@ function UnZip(fileName, type) { closeBtn: 2, area: '490px', title: lan.files.unzip_title, - content: '
          ' - + '
          ' - + '' + lan.files.unzip_name + '
          ' - + '
          ' + lan.files.unzip_to + '
          ' + umpass - + '
          ' + lan.files.unzip_coding + '' - + '
          ' - + '
          ' - + '' - + '' - + '
          ' - + '
          ', + content: '
          ' + + '
          ' + + '' + lan.files.unzip_name + '
          ' + + '
          ' + lan.files.unzip_to + '
          ' + umpass + + '
          ' + lan.files.unzip_coding + '' + + '
          ' + + '
          ' + + '' + + '' + + '
          ' + + '
          ', success: function (layers, index) { $('.layer_close').click(function () { layer.close(index); @@ -1382,6 +1603,7 @@ function UnZip(fileName, type) { }); setCookie('layers', layers); } + function isZip(fileName) { var ext = fileName.split('.'); var extName = ext[ext.length - 1].toLowerCase(); @@ -1389,18 +1611,27 @@ function isZip(fileName) { if (extName == 'gz' || extName == 'tgz' || extName == 'bz2') return 1; return -1; } + function isText(fileName) { var exts = ['rar', 'war', 'zip', 'tar.gz', 'gz', 'iso', 'xsl', 'doc', 'xdoc', 'jpeg', 'jpg', 'png', 'gif', 'bmp', 'tiff', 'exe', 'so', '7z', 'bz', 'bz2']; return isExts(fileName, exts) ? false : true; } + function isImage(fileName) { var exts = ['jpg', 'jpeg', 'png', 'bmp', 'gif', 'tiff', 'ico']; return isExts(fileName, exts); } + function isVideo(fileName) { var exts = ['mp4', 'mpeg', 'mpg', 'mov', 'avi', 'webm', 'mkv']; return isExts(fileName, exts); } + +function isPhp(fileName) { + var exts = ['php']; + return isExts(fileName, exts); +} + function isExts(fileName, exts) { var ext = fileName.split('.'); if (ext.length < 2) return false; @@ -1410,6 +1641,7 @@ function isExts(fileName, exts) { } return false; } + function GetImage(fileName) { var imgUrl = '/download?filename=' + fileName; layer.open({ @@ -1428,18 +1660,20 @@ function GetPlay(fileName) { layer.open({ type: 1, closeBtn: 2, - title: 'Play [' + fileName+']', + title: 'Play [' + fileName + ']', area: '500px', shadeClose: false, - content: '
          @@ -178,7 +187,7 @@

          {{data['lan']['H4']}}

          {% endblock %} {% block scripts %} - + + \ No newline at end of file diff --git a/BTPanel/templates/default/files.html b/BTPanel/templates/default/files.html index 254ad2b7..4e0ea2a7 100644 --- a/BTPanel/templates/default/files.html +++ b/BTPanel/templates/default/files.html @@ -1,5 +1,4 @@ {% extends "layout.html" %} - {% block content %}
          @@ -20,7 +19,7 @@
          - + @@ -64,70 +63,75 @@ Save Save All Refresh - Search - Replace + Search + Replace + JumpLine Font Theme Set Help
          -
          +
          -
          Favorites
          +
          Directory
          +
          +
          + + Back +
          +
          + + Search +
          +
          + + New +
            +
          • New Folder
          • +
          • New File
          • +
          +
          +
          + + ReFresh +
          + +
          - +
            +
              +
            • Refresh
            • +
            • Subdirectory
            • +
            • New Folder
            • +
            • New File
            • +
            • Rename
            • +
            • Download
            • +
            • Delete
            • +
            +
            +
            + +
            +
            -
            +
            -
            - +
            +
            + @@ -173,20 +177,49 @@
            + + +
            +{% endblock %} +{% block scripts %} + - - - - + + + + + + {% endblock %} diff --git a/BTPanel/templates/default/firewall.html b/BTPanel/templates/default/firewall.html index 80d4f22f..1c77a3c4 100644 --- a/BTPanel/templates/default/firewall.html +++ b/BTPanel/templates/default/firewall.html @@ -22,6 +22,55 @@ .firewall-port-box{ margin-bottom:15px; } + .ssl_login_config_view span{ + vertical-align: 5px; + margin-right: 10px; + } + .ssl_login_config_view .btswitch-ios+.btswitch-btn{ + display: inline-block; + margin: 5px 0 0 0; + } + .overflow_hide_style{ + overflow: hidden; + text-overflow:ellipsis; + white-space:nowrap; + display: inline-block; + cursor: default; + } + .detail.security_detail { + padding: 20px; + } + .detail_block { + padding: 10px 0; + border-bottom: 1px #ececec dashed; + } + .detail_title { + font-weight: 600; + margin-bottom: 5px; + color: #333; + } + pre.layui-code { + position: relative; + margin: 10px 0; + padding: 15px; + line-height: 20px; + border: 1px solid #ddd; + border-left-width: 6px; + background-color: #F2F2F2; + color: red; + font-family: Courier New; + font-size: 12px; + } + .security_detail pre { + white-space: pre-wrap; + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + word-wrap: break-word; + } + .detail_tips { + margin-top: 15px; + }
            @@ -54,7 +103,8 @@
            - + +
            @@ -78,7 +128,7 @@

            {{data['lan']['H3']}}

            - @@ -123,6 +173,7 @@

            {{data['lan']['H4']}}

            - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - {% block content %}{% endblock %} - + {% block content %}{% endblock %} +
            -
            - - - + + + + + + + {% block scripts %}{% endblock %} + - + loadScript([ + '/static/laydate/laydate.js', + '/static/js/jquery.qrcode.min.js', + '/static/js/clipboard.min.js' + ], function(e) { + + }); + task_stat(); + + -{% block scripts %}{% endblock %} \ No newline at end of file + \ No newline at end of file diff --git a/BTPanel/templates/default/license.html b/BTPanel/templates/default/license.html new file mode 100644 index 00000000..91583293 --- /dev/null +++ b/BTPanel/templates/default/license.html @@ -0,0 +1,251 @@ + + + + + + + + 宝塔用户协议 + + + + +
            +
            +

            欢迎您使用宝塔面板

            +

            首次登录阅读并同意《用户协议》即可进入面板首页

            +
            +
            +
            宝塔开源许可协议
            +
            + 重要须知:在此特别提醒用户认真阅读、充分理解本协议,用户应认真阅读、充分理解本协议中各条款,包括免除或限制的免责条款以及对用户的权利限制条款。用户需审慎阅读并选择接受或不接受本协议,除非用户接受本协议所有条款,否则用户无权安装或使用本软件及相关服务。用户的安装、使用、登录等行为将视为对本协议的接受,并同意接受本协议各项条款的约束。 +
            +
            名词定义:
            +
            用户:通过宝塔授权获得宝塔面板及使用宝塔相关服务的自然人、法人及其他组织
            +
            宝塔:宝塔面板(主体: 东莞市百塔网络科技有限公司)
            +
            用户许可定义:用户在基于明显的用途说明后主动安装、使用、注册、管理软件,以及同意宝塔提供相关服务所订立的协议
            +
            一、宝塔需遵守的约定
            +
            1.1 除付费插件外,确保所有代码用户皆可阅读。
            +
            1.2 确保用户在完成所有环境部署后,在不依赖宝塔云端支持下也可永久运行。
            +
            1.3 除付费插件外,禁止对源代码进行加密和混淆。
            +
            1.4 禁止不经用户许可的情况下以任何方式自动安装加密代码。
            +
            1.5 禁止不经用户许可的情况下以任何方式收集用户数据。
            +
            1.6 禁止不经用户许可的情况下以任何方式远程控制用户面板。
            +
            1.7 禁止在用户面板上插入与宝塔无关的广告。
            +
            1.8 即日起,禁止将宝塔官方提供的免费功能改为付费功能。
            +
            二、用户需遵守的约定
            +
            2.1 以自用为目的,可将宝塔用于盈利或非盈利项目上,且不受任何限制。
            +
            2.2 以自用为目的,在保留版权标识的前提下可任意修改程序源码,但不得公开发行。
            +
            2.3 禁止以任何方式破坏宝塔的商业授权机制(包括但不限于收集宝塔源码后经营与宝塔同类型、同性质服务等)。
            +
            2.4 用户禁止利用宝塔发表、传送、传播、储存违反国家法律、危害国家安全、社会稳定、公序良俗的内容,或任何不当的、侮辱诽谤的、淫秽的、暴力的及任何违反国家法律法规政策的内容。 +
            +
            2.5 用户禁止利用宝塔制作、发布、传播用户窃取相关或其他软件及他人专属信息、财产的软件。
            +
            三、API使用约定
            +
            3.1 宝塔欢迎并感谢您为该软件开发基于API的各种应用,且可自行免费或收费发布。
            +
            3.2 用户基于宝塔API机制开发的应用,不得包含有破坏或修改宝塔代码。
            +
            四、无改动发布或集成宝塔
            +
            4.1 宝塔欢迎并感谢您将宝塔发布在您的个人网站、企业官网或者其他的第三方网站。
            +
            4.2 宝塔欢迎并感谢您将宝塔集成在其他系统中一起发布,包括云服务镜像、操作系统发行版等。
            +
            4.3 用户在发布或者集成宝塔的时候,不得对宝塔源码做任何改动。
            +
            五、知识产权声明
            +
            + 宝塔是由东莞市百塔网络科技有限公司开发,宝塔的知识产权以及与宝塔相关的所有信息内容,包括但不限于:文字、图形、界面设计、版面框架、有关数据均受中华人民共和国相关知识产权法律法规的保护,除涉及第三方授权的内容外,宝塔公司享有上述知识产权。 +
            +
            六、免责声明
            +
            6.1 + 用户出于自愿而使用宝塔,您必须了解使用本软件的风险,宝塔不作任何类型的担保,不论是明示的、默示的,包括但不限于用户在任何情况下因使用或不能使用宝塔所产生的直接、间接、偶然、特殊及后续的损害及风险,百塔公司不承担任何责任。 +
            +
            6.2 + 用户清楚互联网软件的特殊性,宝塔与大多数互联网软件一样,受包括但不限于用户原因、网络服务质量、社会环境等因素的影响,可能收到各种安全问题的侵扰,如用户下载安装的其他软件或访问的其他网站中含有“木马”等病毒,威胁到用户的计算机信息和数据的安全,继而影响宝塔的正常使用等,用户应加强信息安全及使用资料的保护,以免遭受损失 +
            +
            6.3 + 宝塔界面中“第三方应用”是宝塔获得了第三方合法授权的,如因用户使用第三方软件或技术引发的任何纠纷,由第三方负责解决,宝塔不对第三方软件或技术提供服务,若用户需要获得支持,请与该第三方联系。
            +
            6.4 用户因使用宝塔违反国家法律法规的,
            +
            七、授权例外
            +
            7.1 如果上述条款无法满足您使用该软件的要求,可联系宝塔签署额外的合同以获得更灵活的授权许可。
            +
            八、合同终止
            +
            8.1 如果用户违反了本协议的任一条款,本授权协议将自动终止,用户行为损害宝塔或其他任意第三方权利的,宝塔保留通过法律手段追究责任的权利。
            +
            九、其他条款
            +
            9.1 本协议约定的任何条款部分或完全无效的,不影响其他条款的效力。
            +
            9.2 + 协议的解释、效力及纠纷的解决使用中华人民共和国法律,若用户和宝塔发生任何纠纷或争议,首先应当友好协商解决,协商不成的,用户完全同意将该纠纷或争议提交至宝塔所在地即东莞市有管辖权的法院管辖。
            +
            9.3 本协议宝塔保留一切解释权利
            +
            +
            +
            + 我已同意“《用户协议》” +
            +
            + +
            +
            + + + + \ No newline at end of file diff --git a/BTPanel/templates/default/login.html b/BTPanel/templates/default/login.html index 964bbe15..6678acbc 100644 --- a/BTPanel/templates/default/login.html +++ b/BTPanel/templates/default/login.html @@ -153,7 +153,8 @@
            Google authentication
            \
            \
            \ -
            * Please use the Google Authenticator app to get the verification code.
            Unable to verify, click help
            \ +
            * Please use the Google Authenticator app to get the verification code.
            \ + Unable to verify, click help
            \ ', success:function(){ // 点击验证登录 diff --git a/BTPanel/templates/default/site.html b/BTPanel/templates/default/site.html index 64368b80..2100667b 100644 --- a/BTPanel/templates/default/site.html +++ b/BTPanel/templates/default/site.html @@ -17,7 +17,7 @@
            -

            {{data['lan']['PS']}}

            +

            {{data['lan']['PS']}}After the site is successfully established, please[Cron]Add scheduled backup tasks to the page!

              @@ -48,7 +48,8 @@ {% block scripts %} - + + - + + + + + + + +
            + +

            + xterm.js: socket attach +

            +

            + Attach the terminal to a WebSocket terminal stream with ease. Perfect for attaching to your + Docker containers. +

            +

            + Socket information +

            +
            + + + +
            + +
            + + + \ No newline at end of file diff --git a/BTPanel/static/build/addons/attach/package.json b/BTPanel/static/build/addons/attach/package.json new file mode 100644 index 00000000..9e45068b --- /dev/null +++ b/BTPanel/static/build/addons/attach/package.json @@ -0,0 +1,5 @@ +{ + "name": "xterm.attach", + "main": "attach.js", + "private": true +} diff --git a/BTPanel/static/build/addons/fit/fit.js b/BTPanel/static/build/addons/fit/fit.js new file mode 100644 index 00000000..c82039ab --- /dev/null +++ b/BTPanel/static/build/addons/fit/fit.js @@ -0,0 +1,81 @@ +/** + * Copyright (c) 2014 The xterm.js authors. All rights reserved. + * @license MIT + * + * Fit terminal columns and rows to the dimensions of its DOM element. + * + * ## Approach + * + * Rows: Truncate the division of the terminal parent element height by the + * terminal row height. + * Columns: Truncate the division of the terminal parent element width by the + * terminal character width (apply display: inline at the terminal + * row and truncate its width with the current number of columns). + */ + +(function (fit) { + if (typeof exports === 'object' && typeof module === 'object') { + /* + * CommonJS environment + */ + module.exports = fit(require('../../Terminal').Terminal); + } else if (typeof define == 'function') { + /* + * Require.js is available + */ + define(['../../xterm'], fit); + } else { + /* + * Plain browser environment + */ + fit(window.Terminal); + } +})(function (Terminal) { + var exports = {}; + + exports.proposeGeometry = function (term) { + if (!term.element.parentElement) { + return null; + } + var parentElementStyle = window.getComputedStyle(term.element.parentElement); + var parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height')); + var parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width')) - 17); + var elementStyle = window.getComputedStyle(term.element); + var elementPaddingVer = parseInt(elementStyle.getPropertyValue('padding-top')) + parseInt(elementStyle.getPropertyValue('padding-bottom')); + var elementPaddingHor = parseInt(elementStyle.getPropertyValue('padding-right')) + parseInt(elementStyle.getPropertyValue('padding-left')); + var availableHeight = parentElementHeight - elementPaddingVer; + var availableWidth = parentElementWidth - elementPaddingHor; + var geometry = { + cols: Math.floor(availableWidth / term.charMeasure.width), + rows: Math.floor(availableHeight / Math.floor(term.charMeasure.height * term.getOption('lineHeight'))) + }; + + return geometry; + }; + + exports.fit = function (term) { + // Wrap fit in a setTimeout as charMeasure needs time to get initialized + // after calling Terminal.open + setTimeout(function () { + var geometry = exports.proposeGeometry(term); + + if (geometry) { + // Force a full render + if (term.rows !== geometry.rows || term.cols !== geometry.cols) { + term.renderer.clear(); + term.resize(geometry.cols, geometry.rows); + } + } + }, 0); + }; + + Terminal.prototype.proposeGeometry = function () { + return exports.proposeGeometry(this); + }; + + Terminal.prototype.fit = function () { + return exports.fit(this); + }; + + return exports; +}); diff --git a/BTPanel/static/build/addons/fit/fit.min.js b/BTPanel/static/build/addons/fit/fit.min.js new file mode 100644 index 00000000..2f4bbd5a --- /dev/null +++ b/BTPanel/static/build/addons/fit/fit.min.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).fit=e()}}(function(){return function i(l,u,f){function p(t,e){if(!u[t]){if(!l[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(a)return a(t,!0);var o=new Error("Cannot find module '"+t+"'");throw o.code="MODULE_NOT_FOUND",o}var n=u[t]={exports:{}};l[t][0].call(n.exports,function(e){return p(l[t][1][e]||e)},n,n.exports,i,l,u,f)}return u[t].exports}for(var a="function"==typeof require&&require,e=0;e= 0; y--) { + result = this._findInLine(term, y); + if (result) { + break; + } + } + if (!result) { + for (var y = this._terminal.buffer.ybase + this._terminal.rows - 1; y > startRow; y--) { + result = this._findInLine(term, y); + if (result) { + break; + } + } + } + return this._selectResult(result); + }; + SearchHelper.prototype._findInLine = function (term, y) { + var lowerStringLine = this._terminal.buffer.translateBufferLineToString(y, true).toLowerCase(); + var lowerTerm = term.toLowerCase(); + var searchIndex = lowerStringLine.indexOf(lowerTerm); + if (searchIndex >= 0) { + return { + term: term, + col: searchIndex, + row: y + }; + } + }; + SearchHelper.prototype._selectResult = function (result) { + if (!result) { + return false; + } + this._terminal.selectionManager.setSelection(result.col, result.row, result.term.length); + this._terminal.scrollLines(result.row - this._terminal.buffer.ydisp, false); + return true; + }; + return SearchHelper; +}()); +exports.SearchHelper = SearchHelper; + + + +},{}],2:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var SearchHelper_1 = require("./SearchHelper"); +(function (addon) { + if (typeof window !== 'undefined' && 'Terminal' in window) { + addon(window.Terminal); + } + else if (typeof exports === 'object' && typeof module === 'object') { + module.exports = addon(require('../../Terminal').Terminal); + } + else if (typeof define === 'function') { + define(['../../xterm'], addon); + } +})(function (Terminal) { + Terminal.prototype.findNext = function (term) { + if (!this._searchHelper) { + this.searchHelper = new SearchHelper_1.SearchHelper(this); + } + return this.searchHelper.findNext(term); + }; + Terminal.prototype.findPrevious = function (term) { + if (!this._searchHelper) { + this.searchHelper = new SearchHelper_1.SearchHelper(this); + } + return this.searchHelper.findPrevious(term); + }; +}); + + + +},{"../../Terminal":undefined,"./SearchHelper":1}]},{},[2]) +//# sourceMappingURL=search.js.map diff --git a/BTPanel/static/build/addons/search/search.js.map b/BTPanel/static/build/addons/search/search.js.map new file mode 100644 index 00000000..baa06e88 --- /dev/null +++ b/BTPanel/static/build/addons/search/search.js.map @@ -0,0 +1 @@ +{"version":3,"file":"search.js","sources":["../../../src/addons/search/search.ts","../../../src/addons/search/SearchHelper.ts","../../../node_modules/browser-pack/_prelude.js"],"sourcesContent":["/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { SearchHelper } from './SearchHelper';\n\ndeclare var exports: any;\ndeclare var module: any;\ndeclare var define: any;\ndeclare var require: any;\ndeclare var window: any;\n\n(function (addon) {\n if (typeof window !== 'undefined' && 'Terminal' in window) {\n /**\n * Plain browser environment\n */\n addon(window.Terminal);\n } else if (typeof exports === 'object' && typeof module === 'object') {\n /**\n * CommonJS environment\n */\n module.exports = addon(require('../../Terminal').Terminal);\n } else if (typeof define === 'function') {\n /**\n * Require.js is available\n */\n define(['../../xterm'], addon);\n }\n})((Terminal: any) => {\n /**\n * Find the next instance of the term, then scroll to and select it. If it\n * doesn't exist, do nothing.\n * @param term Tne search term.\n * @return Whether a result was found.\n */\n Terminal.prototype.findNext = function(term: string): boolean {\n if (!this._searchHelper) {\n this.searchHelper = new SearchHelper(this);\n }\n return (this.searchHelper).findNext(term);\n };\n\n /**\n * Find the previous instance of the term, then scroll to and select it. If it\n * doesn't exist, do nothing.\n * @param term Tne search term.\n * @return Whether a result was found.\n */\n Terminal.prototype.findPrevious = function(term: string): boolean {\n if (!this._searchHelper) {\n this.searchHelper = new SearchHelper(this);\n }\n return (this.searchHelper).findPrevious(term);\n };\n});\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// import { ITerminal } from '../../Interfaces';\n// import { translateBufferLineToString } from '../../utils/BufferLine';\n\ninterface ISearchResult {\n term: string;\n col: number;\n row: number;\n}\n\n/**\n * A class that knows how to search the terminal and how to display the results.\n */\nexport class SearchHelper {\n constructor(private _terminal: any) {\n // TODO: Search for multiple instances on 1 line\n // TODO: Don't use the actual selection, instead use a \"find selection\" so multiple instances can be highlighted\n // TODO: Highlight other instances in the viewport\n // TODO: Support regex, case sensitivity, etc.\n }\n\n /**\n * Find the next instance of the term, then scroll to and select it. If it\n * doesn't exist, do nothing.\n * @param term Tne search term.\n * @return Whether a result was found.\n */\n public findNext(term: string): boolean {\n if (!term || term.length === 0) {\n return false;\n }\n\n let result: ISearchResult;\n\n let startRow = this._terminal.buffer.ydisp;\n if (this._terminal.selectionManager.selectionEnd) {\n // Start from the selection end if there is a selection\n startRow = this._terminal.selectionManager.selectionEnd[1];\n }\n\n // Search from ydisp + 1 to end\n for (let y = startRow + 1; y < this._terminal.buffer.ybase + this._terminal.rows; y++) {\n result = this._findInLine(term, y);\n if (result) {\n break;\n }\n }\n\n // Search from the top to the current ydisp\n if (!result) {\n for (let y = 0; y < startRow; y++) {\n result = this._findInLine(term, y);\n if (result) {\n break;\n }\n }\n }\n\n // Set selection and scroll if a result was found\n return this._selectResult(result);\n }\n\n /**\n * Find the previous instance of the term, then scroll to and select it. If it\n * doesn't exist, do nothing.\n * @param term Tne search term.\n * @return Whether a result was found.\n */\n public findPrevious(term: string): boolean {\n if (!term || term.length === 0) {\n return false;\n }\n\n let result: ISearchResult;\n\n let startRow = this._terminal.buffer.ydisp;\n if (this._terminal.selectionManager.selectionStart) {\n // Start from the selection end if there is a selection\n startRow = this._terminal.selectionManager.selectionStart[1];\n }\n\n // Search from ydisp + 1 to end\n for (let y = startRow - 1; y >= 0; y--) {\n result = this._findInLine(term, y);\n if (result) {\n break;\n }\n }\n\n // Search from the top to the current ydisp\n if (!result) {\n for (let y = this._terminal.buffer.ybase + this._terminal.rows - 1; y > startRow; y--) {\n result = this._findInLine(term, y);\n if (result) {\n break;\n }\n }\n }\n\n // Set selection and scroll if a result was found\n return this._selectResult(result);\n }\n\n /**\n * Searches a line for a search term.\n * @param term Tne search term.\n * @param y The line to search.\n * @return The search result if it was found.\n */\n private _findInLine(term: string, y: number): ISearchResult {\n const lowerStringLine = this._terminal.buffer.translateBufferLineToString(y, true).toLowerCase();\n const lowerTerm = term.toLowerCase();\n const searchIndex = lowerStringLine.indexOf(lowerTerm);\n if (searchIndex >= 0) {\n return {\n term,\n col: searchIndex,\n row: y\n };\n }\n }\n\n /**\n * Selects and scrolls to a result.\n * @param result The result to select.\n * @return Whethera result was selected.\n */\n private _selectResult(result: ISearchResult): boolean {\n if (!result) {\n return false;\n }\n this._terminal.selectionManager.setSelection(result.col, result.row, result.term.length);\n this._terminal.scrollLines(result.row - this._terminal.buffer.ydisp, false);\n return true;\n }\n}\n",null],"names":[],"mappings":"AEAA;;;ADiBA;AACA;AAAA;AAKA;AAQA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAQA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA1Ha;;;;;;;ADZb;AAQA;AACA;AAIA;AACA;AAAA;AAIA;AACA;AAAA;AAIA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;;;"} \ No newline at end of file diff --git a/BTPanel/static/build/addons/search/search.min.js b/BTPanel/static/build/addons/search/search.min.js new file mode 100644 index 00000000..501da7ce --- /dev/null +++ b/BTPanel/static/build/addons/search/search.min.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).search=e()}}(function(){return function s(o,l,a){function h(i,e){if(!l[i]){if(!o[i]){var t="function"==typeof require&&require;if(!e&&t)return t(i,!0);if(f)return f(i,!0);var r=new Error("Cannot find module '"+i+"'");throw r.code="MODULE_NOT_FOUND",r}var n=l[i]={exports:{}};o[i][0].call(n.exports,function(e){return h(o[i][1][e]||e)},n,n.exports,s,o,l,a)}return l[i].exports}for(var f="function"==typeof require&&require,e=0;e?",n=(s.prototype.findNext=function(e,i){var t,r=i.incremental;if(!e||0===e.length)return this._terminal.clearSelection(),!1;var n=0,s=this._terminal.buffer.viewportY;if(this._terminal.hasSelection()){var o=this._terminal.getSelectionPosition();s=r?o.startRow:o.endRow,n=r?o.startColumn:o.endColumn}this._initLinesCache();for(var l=s,a=n;this._terminal.buffer.getLine(l).isWrapped;)l--,a+=this._terminal.cols;if(!(t=this._findInLine(e,l,a,i)))for(var h=s+1;h=this._terminal.cols&&(i+=Math.floor(a/this._terminal.cols),a%=this._terminal.cols),r.wholeWord&&!this._isWholeWord(a,l,e))return;for(var c=this._terminal.buffer.getLine(i),u=0;u= 0; + if (!isWindows) { + return; + } + this.on('lineFeed', function () { + var line = _this.buffer.lines.get(_this.buffer.ybase + _this.buffer.y - 1); + var lastChar = line[_this.cols - 1]; + if (lastChar[3] !== 32) { + var nextLine = _this.buffer.lines.get(_this.buffer.ybase + _this.buffer.y); + nextLine.isWrapped = true; + } + }); + }; +}); + +//# sourceMappingURL=winptyCompat.js.map diff --git a/BTPanel/static/build/addons/winptyCompat/winptyCompat.js.map b/BTPanel/static/build/addons/winptyCompat/winptyCompat.js.map new file mode 100644 index 00000000..826e6971 --- /dev/null +++ b/BTPanel/static/build/addons/winptyCompat/winptyCompat.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../../src/addons/winptyCompat/winptyCompat.ts"],"names":[],"mappings":"AAQA,CAAC,UAAU,KAAK;IACd,EAAE,CAAC,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC;QAI1D,KAAK,CAAO,MAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC;QAIrE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC;QAIxC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC,CAAC,UAAC,QAAa;IACf,QAAQ,CAAC,SAAS,CAAC,gBAAgB,GAAG;QAAA,iBAyBrC;QAvBC,IAAM,SAAS,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1F,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,CAAC;QACT,CAAC;QAYD,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;YAClB,IAAM,IAAI,GAAG,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YACrC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAY,CAAC,CAAC,CAAC;gBACjC,IAAM,QAAQ,GAAG,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpE,QAAS,CAAC,SAAS,GAAG,IAAI,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","file":"winptyCompat.js","sourceRoot":"."} \ No newline at end of file diff --git a/BTPanel/static/build/addons/zmodem/demo/app.js b/BTPanel/static/build/addons/zmodem/demo/app.js new file mode 100644 index 00000000..31ecd7d2 --- /dev/null +++ b/BTPanel/static/build/addons/zmodem/demo/app.js @@ -0,0 +1,87 @@ +var express = require('express'); +var app = express(); +var expressWs = require('express-ws')(app); +var os = require('os'); +var pty = require('node-pty'); + +var terminals = {}, + logs = {}; + +app.use('/build', express.static(__dirname + '/../../../../build')); +app.use('/demo', express.static(__dirname + '/../../../../demo')); +app.use('/zmodemjs', express.static(__dirname + '/../../../../node_modules/zmodem.js/dist')); + +app.get('/', function(req, res){ + res.sendFile(__dirname + '/index.html'); +}); + +app.get('/style.css', function(req, res){ + res.sendFile(__dirname + '/style.css'); +}); + +app.get('/main.js', function(req, res){ + res.sendFile(__dirname + '/main.js'); +}); + +app.post('/terminals', function (req, res) { + var cols = parseInt(req.query.cols), + rows = parseInt(req.query.rows), + term = pty.spawn(process.platform === 'win32' ? 'cmd.exe' : 'bash', [], { + encoding: null, + name: 'xterm-color', + cols: cols || 80, + rows: rows || 24, + cwd: process.env.PWD, + env: process.env + }); + + console.log('Created terminal with PID: ' + term.pid); + terminals[term.pid] = term; + logs[term.pid] = ''; + term.on('data', function(data) { + logs[term.pid] += data; + }); + res.send(term.pid.toString()); + res.end(); +}); + +app.post('/terminals/:pid/size', function (req, res) { + var pid = parseInt(req.params.pid), + cols = parseInt(req.query.cols), + rows = parseInt(req.query.rows), + term = terminals[pid]; + + term.resize(cols, rows); + console.log('Resized terminal ' + pid + ' to ' + cols + ' cols and ' + rows + ' rows.'); + res.end(); +}); + +app.ws('/terminals/:pid', function (ws, req) { + var term = terminals[parseInt(req.params.pid)]; + console.log('Connected to terminal ' + term.pid); + ws.send(logs[term.pid]); + + term.on('data', function(data) { + try { + ws.send(data); + } catch (ex) { + // The WebSocket is not open, ignore + } + }); + ws.on('message', function(msg) { + term.write(msg); + }); + ws.on('close', function () { + term.kill(); + console.log('Closed terminal ' + term.pid); + // Clean things up + delete terminals[term.pid]; + delete logs[term.pid]; + }); +}); + +var port = process.env.PORT || 3000, + host = os.platform() === 'win32' ? '127.0.0.1' : '0.0.0.0'; + +console.log('App listening to http://' + host + ':' + port); +app.listen(port, host); diff --git a/BTPanel/static/build/addons/zmodem/demo/index.html b/BTPanel/static/build/addons/zmodem/demo/index.html new file mode 100644 index 00000000..aee7742a --- /dev/null +++ b/BTPanel/static/build/addons/zmodem/demo/index.html @@ -0,0 +1,128 @@ + + + + xterm.js demo + + + + + + + + + + + + + + + + +

            xterm.js: xterm, in the browser

            + +
            + +
            + + ZMODEM detected: Start ZMODEM session? + +   + + + + + +

            ZMODEM File offered!

            + + +   + + + + + + + +
            % ( bytes) received
            + + + + + + +
            + +
            +

            Actions

            +

            + + +

            +
            +
            +

            Options

            +

            + +

            +

            + +

            +

            + +

            +

            + +

            +

            + +

            +

            + +

            +
            +

            Size

            +
            +
            + + +
            +
            + + +
            +
            +
            +
            +

            Attention: The demo is a barebones implementation and is designed for xterm.js evaluation purposes only. Exposing the demo to the public as is would introduce security risks for the host.

            +

            * ZMODEM file transfers are supported via an addon. To try it out, install lrzsz onto the remote peer, then run rz to send from your browser or sz <file> to send from the remote peer.

            + + + diff --git a/BTPanel/static/build/addons/zmodem/demo/main.js b/BTPanel/static/build/addons/zmodem/demo/main.js new file mode 100644 index 00000000..2a153fb5 --- /dev/null +++ b/BTPanel/static/build/addons/zmodem/demo/main.js @@ -0,0 +1,383 @@ +"use strict"; + +var term, + protocol, + socketURL, + socket, + pid; + +var terminalContainer = document.getElementById('terminal-container'), + actionElements = { + findNext: document.querySelector('#find-next'), + findPrevious: document.querySelector('#find-previous') + }, + optionElements = { + cursorBlink: document.querySelector('#option-cursor-blink'), + cursorStyle: document.querySelector('#option-cursor-style'), + scrollback: document.querySelector('#option-scrollback'), + tabstopwidth: document.querySelector('#option-tabstopwidth'), + bellStyle: document.querySelector('#option-bell-style') + }, + colsElement = document.getElementById('cols'), + rowsElement = document.getElementById('rows'); + +function setTerminalSize() { + var cols = parseInt(colsElement.value, 10); + var rows = parseInt(rowsElement.value, 10); + var viewportElement = document.querySelector('.xterm-viewport'); + var scrollBarWidth = viewportElement.offsetWidth - viewportElement.clientWidth; + var width = (cols * term.charMeasure.width + 20 /*room for scrollbar*/).toString() + 'px'; + var height = (rows * term.charMeasure.height).toString() + 'px'; + + terminalContainer.style.width = width; + terminalContainer.style.height = height; + term.resize(cols, rows); +} + +colsElement.addEventListener('change', setTerminalSize); +rowsElement.addEventListener('change', setTerminalSize); + +actionElements.findNext.addEventListener('keypress', function (e) { + if (e.key === "Enter") { + e.preventDefault(); + term.findNext(actionElements.findNext.value); + } +}); +actionElements.findPrevious.addEventListener('keypress', function (e) { + if (e.key === "Enter") { + e.preventDefault(); + term.findPrevious(actionElements.findPrevious.value); + } +}); + +optionElements.cursorBlink.addEventListener('change', function () { + term.setOption('cursorBlink', optionElements.cursorBlink.checked); +}); +optionElements.cursorStyle.addEventListener('change', function () { + term.setOption('cursorStyle', optionElements.cursorStyle.value); +}); +optionElements.bellStyle.addEventListener('change', function () { + term.setOption('bellStyle', optionElements.bellStyle.value); +}); +optionElements.scrollback.addEventListener('change', function () { + term.setOption('scrollback', parseInt(optionElements.scrollback.value, 10)); +}); +optionElements.tabstopwidth.addEventListener('change', function () { + term.setOption('tabStopWidth', parseInt(optionElements.tabstopwidth.value, 10)); +}); + +createTerminal(); + +function createTerminal() { + // Clean terminal + while (terminalContainer.children.length) { + terminalContainer.removeChild(terminalContainer.children[0]); + } + term = new Terminal({ + cursorBlink: optionElements.cursorBlink.checked, + scrollback: parseInt(optionElements.scrollback.value, 10), + tabStopWidth: parseInt(optionElements.tabstopwidth.value, 10) + }); + term.on('resize', function (size) { + if (!pid) { + return; + } + var cols = size.cols, + rows = size.rows, + url = '/terminals/' + pid + '/size?cols=' + cols + '&rows=' + rows; + + fetch(url, {method: 'POST'}); + }); + protocol = (location.protocol === 'https:') ? 'wss://' : 'ws://'; + socketURL = protocol + location.hostname + ((location.port) ? (':' + location.port) : '') + '/terminals/'; + + term.open(terminalContainer); + term.fit(); + + // fit is called within a setTimeout, cols and rows need this. + setTimeout(function () { + colsElement.value = term.cols; + rowsElement.value = term.rows; + + // Set terminal size again to set the specific dimensions on the demo + setTerminalSize(); + + fetch('/terminals?cols=' + term.cols + '&rows=' + term.rows, {method: 'POST'}).then(function (res) { + + res.text().then(function (pid) { + window.pid = pid; + socketURL += pid; + socket = new WebSocket(socketURL); + socket.onopen = runRealTerminal; + socket.onclose = runFakeTerminal; + socket.onerror = runFakeTerminal; + + term.zmodemAttach(socket, { + noTerminalWriteOutsideSession: true, + } ); + + term.on("zmodemRetract", () => { + start_form.style.display = "none"; + start_form.onsubmit = null; + }); + + term.on("zmodemDetect", (detection) => { + function do_zmodem() { + term.detach(); + let zsession = detection.confirm(); + + var promise; + + if (zsession.type === "receive") { + promise = _handle_receive_session(zsession); + } + else { + promise = _handle_send_session(zsession); + } + + promise.catch( console.error.bind(console) ).then( () => { + term.attach(socket); + } ); + } + + if (_auto_zmodem()) { + do_zmodem(); + } + else { + start_form.style.display = ""; + start_form.onsubmit = function(e) { + start_form.style.display = "none"; + + if (document.getElementById("zmstart_yes").checked) { + do_zmodem(); + } + else { + detection.deny(); + } + }; + } + }); + }); + }); + }, 0); +} + +//---------------------------------------------------------------------- +// UI STUFF + +function _show_file_info(xfer) { + var file_info = xfer.get_details(); + + document.getElementById("name").textContent = file_info.name; + document.getElementById("size").textContent = file_info.size; + document.getElementById("mtime").textContent = file_info.mtime; + document.getElementById("files_remaining").textContent = file_info.files_remaining; + document.getElementById("bytes_remaining").textContent = file_info.bytes_remaining; + + document.getElementById("mode").textContent = "0" + file_info.mode.toString(8); + + var xfer_opts = xfer.get_options(); + ["conversion", "management", "transport", "sparse"].forEach( (lbl) => { + document.getElementById(`zfile_${lbl}`).textContent = xfer_opts[lbl]; + } ); + + document.getElementById("zm_file").style.display = ""; +} +function _hide_file_info() { + document.getElementById("zm_file").style.display = "none"; +} + +function _save_to_disk(xfer, buffer) { + return Zmodem.Browser.save_to_disk(buffer, xfer.get_details().name); +} + +var skipper_button = document.getElementById("zm_progress_skipper"); +var skipper_button_orig_text = skipper_button.textContent; + +function _show_progress() { + skipper_button.disabled = false; + skipper_button.textContent = skipper_button_orig_text; + + document.getElementById("bytes_received").textContent = 0; + document.getElementById("percent_received").textContent = 0; + + document.getElementById("zm_progress").style.display = ""; +} + +function _update_progress(xfer) { + var total_in = xfer.get_offset(); + + document.getElementById("bytes_received").textContent = total_in; + + var percent_received = 100 * total_in / xfer.get_details().size; + document.getElementById("percent_received").textContent = percent_received.toFixed(2); +} + +function _hide_progress() { + document.getElementById("zm_progress").style.display = "none"; +} + +var start_form = document.getElementById("zm_start"); + +function _auto_zmodem() { + return document.getElementById("zmodem-auto").checked; +} + +// END UI STUFF +//---------------------------------------------------------------------- + +function _handle_receive_session(zsession) { + zsession.on("offer", function(xfer) { + current_receive_xfer = xfer; + + _show_file_info(xfer); + + var offer_form = document.getElementById("zm_offer"); + + function on_form_submit() { + offer_form.style.display = "none"; + + //START + //if (offer_form.zmaccept.value) { + if (_auto_zmodem() || document.getElementById("zmaccept_yes").checked) { + _show_progress(); + + var FILE_BUFFER = []; + xfer.on("input", (payload) => { + _update_progress(xfer); + FILE_BUFFER.push( new Uint8Array(payload) ); + }); + xfer.accept().then( + () => { + _save_to_disk(xfer, FILE_BUFFER); + }, + console.error.bind(console) + ); + } + else { + xfer.skip(); + } + //END + } + + if (_auto_zmodem()) { + on_form_submit(); + } + else { + offer_form.onsubmit = on_form_submit; + offer_form.style.display = ""; + } + } ); + + var promise = new Promise( (res) => { + zsession.on("session_end", () => { + _hide_file_info(); + _hide_progress(); + res(); + } ); + } ); + + zsession.start(); + + return promise; +} + +function _handle_send_session(zsession) { + var choose_form = document.getElementById("zm_choose"); + choose_form.style.display = ""; + + var file_el = document.getElementById("zm_files"); + + var promise = new Promise( (res) => { + file_el.onchange = function(e) { + choose_form.style.display = "none"; + + var files_obj = file_el.files; + + Zmodem.Browser.send_files( + zsession, + files_obj, + { + on_offer_response(obj, xfer) { + if (xfer) _show_progress(); + //console.log("offer", xfer ? "accepted" : "skipped"); + }, + on_progress(obj, xfer) { + _update_progress(xfer); + }, + on_file_complete(obj) { + //console.log("COMPLETE", obj); + _hide_progress(); + }, + } + ).then(_hide_progress).then( + zsession.close.bind(zsession), + console.error.bind(console) + ).then( () => { + _hide_file_info(); + _hide_progress(); + res(); + } ); + }; + } ); + + return promise; +} + +//This is here to allow canceling of an in-progress ZMODEM transfer. +var current_receive_xfer; + +//Called from HTML directly. +function skip_current_file() { + current_receive_xfer.skip(); + + skipper_button.disabled = true; + skipper_button.textContent = "Waiting for server to acknowledge skip …"; +} + +function runRealTerminal() { + term.attach(socket); + + term._initialized = true; +} + +function runFakeTerminal() { + if (term._initialized) { + return; + } + + term._initialized = true; + + var shellprompt = '$ '; + + term.prompt = function () { + term.write('\r\n' + shellprompt); + }; + + term.writeln('Welcome to xterm.js'); + term.writeln('This is a local terminal emulation, without a real terminal in the back-end.'); + term.writeln('Type some keys and commands to play around.'); + term.writeln(''); + term.prompt(); + + term.on('key', function (key, ev) { + var printable = ( + !ev.altKey && !ev.altGraphKey && !ev.ctrlKey && !ev.metaKey + ); + + if (ev.keyCode == 13) { + term.prompt(); + } else if (ev.keyCode == 8) { + // Do not delete the prompt + if (term.x > 2) { + term.write('\b \b'); + } + } else if (printable) { + term.write(key); + } + }); + + term.on('paste', function (data, ev) { + term.write(data); + }); +} diff --git a/BTPanel/static/build/addons/zmodem/zmodem.js b/BTPanel/static/build/addons/zmodem/zmodem.js new file mode 100644 index 00000000..1bab2976 --- /dev/null +++ b/BTPanel/static/build/addons/zmodem/zmodem.js @@ -0,0 +1,108 @@ +/** + * + * Allow xterm.js to handle ZMODEM uploads and downloads. + * + * This addon is a wrapper around zmodem.js. It adds the following to the + * Terminal class: + * + * - function `zmodemAttach(, )` - creates a Zmodem.Sentry + * on the passed WebSocket object. The Object passed is optional and + * can contain: + * - noTerminalWriteOutsideSession: Suppress writes from the Sentry + * object to the Terminal while there is no active Session. This + * is necessary for compatibility with, for example, the + * `attach.js` addon. + * + * - event `zmodemDetect` - fired on Zmodem.Sentry’s `on_detect` callback. + * Passes the zmodem.js Detection object. + * + * - event `zmodemRetract` - fired on Zmodem.Sentry’s `on_retract` callback. + * + * You’ll need to provide logic to handle uploads and downloads. + * See zmodem.js’s documentation for more details. + * + * **IMPORTANT:** After you confirm() a zmodem.js Detection, if you have + * used the `attach` or `terminado` addons, you’ll need to suspend their + * operation for the duration of the ZMODEM session. (The demo does this + * via `detach()` and a re-`attach()`.) + */ +(function (addon) { + if (typeof exports === 'object' && typeof module === 'object') { + /* + * CommonJS environment + */ + module.exports = addon(require('../../Terminal').Terminal); + } else if (typeof define == 'function') { + /* + * Require.js is available + */ + define(['../../xterm'], addon); + } else { + /* + * Plain browser environment + */ + addon(window.Terminal); + } +})(function _zmodemAddon(Terminal) { + Object.assign( + Terminal.prototype, + { + zmodemAttach: function zmodemAttach(ws, opts) { + var term = this; + + if (!opts) opts = {}; + + var senderFunc = function _ws_sender_func(octets) { + ws.send( new Uint8Array(octets) ); + }; + + var zsentry; + + function _shouldWrite() { + return !!zsentry.get_confirmed_session() || !opts.noTerminalWriteOutsideSession; + } + + zsentry = new Zmodem.Sentry( { + to_terminal: function _to_terminal(octets) { + if (_shouldWrite()) { + term.write( + String.fromCharCode.apply(String, octets) + ); + } + }, + + sender: senderFunc, + + on_retract: function _on_retract() { + term.emit("zmodemRetract"); + }, + + on_detect: function _on_detect(detection) { + term.emit("zmodemDetect", detection); + }, + } ); + + function handleWSMessage(evt) { + + //In testing with xterm.js’s demo the first message was + //always text even if the rest were binary. While that + //may be specific to xterm.js’s demo, ultimately we + //should reject anything that isn’t binary. + if (typeof evt.data === "string") { + if (_shouldWrite()) { + term.write(evt.data); + } + } + else { + zsentry.consume(evt.data); + } + } + + ws.binaryType = "arraybuffer"; + ws.addEventListener("message", handleWSMessage); + }, + + zmodemBrowser: Zmodem.Browser, + } + ); +}); diff --git a/BTPanel/static/build/addons/zmodem/zmodem.min.js b/BTPanel/static/build/addons/zmodem/zmodem.min.js new file mode 100644 index 00000000..298496e0 --- /dev/null +++ b/BTPanel/static/build/addons/zmodem/zmodem.min.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).zmodem=e()}}(function(){return function i(f,u,d){function a(n,e){if(!u[n]){if(!f[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(s)return s(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r}var o=u[n]={exports:{}};f[n][0].call(o.exports,function(e){return a(f[n][1][e]||e)},o,o.exports,i,f,u,d)}return u[n].exports}for(var s="function"==typeof require&&require,e=0;e this._terminal.rows; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Buffer.prototype, "isCursorInViewport", { + get: function () { + var absoluteY = this.ybase + this.y; + var relativeY = absoluteY - this.ydisp; + return (relativeY >= 0 && relativeY < this._terminal.rows); + }, + enumerable: true, + configurable: true + }); + Buffer.prototype._getCorrectBufferLength = function (rows) { + if (!this._hasScrollback) { + return rows; + } + var correctBufferLength = rows + this._terminal.options.scrollback; + return correctBufferLength > exports.MAX_BUFFER_SIZE ? exports.MAX_BUFFER_SIZE : correctBufferLength; + }; + Buffer.prototype.fillViewportRows = function () { + if (this._lines.length === 0) { + var i = this._terminal.rows; + while (i--) { + this.lines.push(this._terminal.blankLine()); + } + } + }; + Buffer.prototype.clear = function () { + this.ydisp = 0; + this.ybase = 0; + this.y = 0; + this.x = 0; + this._lines = new CircularList_1.CircularList(this._getCorrectBufferLength(this._terminal.rows)); + this.scrollTop = 0; + this.scrollBottom = this._terminal.rows - 1; + this.setupTabStops(); + }; + Buffer.prototype.resize = function (newCols, newRows) { + var newMaxLength = this._getCorrectBufferLength(newRows); + if (newMaxLength > this._lines.maxLength) { + this._lines.maxLength = newMaxLength; + } + if (this._lines.length > 0) { + if (this._terminal.cols < newCols) { + var ch = [this._terminal.defAttr, ' ', 1, 32]; + for (var i = 0; i < this._lines.length; i++) { + if (this._lines.get(i) === undefined) { + this._lines.set(i, this._terminal.blankLine(undefined, undefined, newCols)); + } + while (this._lines.get(i).length < newCols) { + this._lines.get(i).push(ch); + } + } + } + var addToY = 0; + if (this._terminal.rows < newRows) { + for (var y = this._terminal.rows; y < newRows; y++) { + if (this._lines.length < newRows + this.ybase) { + if (this.ybase > 0 && this._lines.length <= this.ybase + this.y + addToY + 1) { + this.ybase--; + addToY++; + if (this.ydisp > 0) { + this.ydisp--; + } + } + else { + this._lines.push(this._terminal.blankLine(undefined, undefined, newCols)); + } + } + } + } + else { + for (var y = this._terminal.rows; y > newRows; y--) { + if (this._lines.length > newRows + this.ybase) { + if (this._lines.length > this.ybase + this.y + 1) { + this._lines.pop(); + } + else { + this.ybase++; + this.ydisp++; + } + } + } + } + if (newMaxLength < this._lines.maxLength) { + var amountToTrim = this._lines.length - newMaxLength; + if (amountToTrim > 0) { + this._lines.trimStart(amountToTrim); + this.ybase = Math.max(this.ybase - amountToTrim, 0); + this.ydisp = Math.max(this.ydisp - amountToTrim, 0); + } + this._lines.maxLength = newMaxLength; + } + if (this.y >= newRows) { + this.y = newRows - 1; + } + if (addToY) { + this.y += addToY; + } + if (this.x >= newCols) { + this.x = newCols - 1; + } + this.scrollTop = 0; + } + this.scrollBottom = newRows - 1; + }; + Buffer.prototype.translateBufferLineToString = function (lineIndex, trimRight, startCol, endCol) { + if (startCol === void 0) { startCol = 0; } + if (endCol === void 0) { endCol = null; } + var lineString = ''; + var line = this.lines.get(lineIndex); + if (!line) { + return ''; + } + var startIndex = startCol; + endCol = endCol || line.length; + var endIndex = endCol; + for (var i = 0; i < line.length; i++) { + var char = line[i]; + lineString += char[exports.CHAR_DATA_CHAR_INDEX]; + if (char[exports.CHAR_DATA_WIDTH_INDEX] === 0) { + if (startCol >= i) { + startIndex--; + } + if (endCol >= i) { + endIndex--; + } + } + else { + if (char[exports.CHAR_DATA_CHAR_INDEX].length > 1) { + if (startCol > i) { + startIndex += char[exports.CHAR_DATA_CHAR_INDEX].length - 1; + } + if (endCol > i) { + endIndex += char[exports.CHAR_DATA_CHAR_INDEX].length - 1; + } + } + } + } + if (trimRight) { + var rightWhitespaceIndex = lineString.search(/\s+$/); + if (rightWhitespaceIndex !== -1) { + endIndex = Math.min(endIndex, rightWhitespaceIndex); + } + if (endIndex <= startIndex) { + return ''; + } + } + return lineString.substring(startIndex, endIndex); + }; + Buffer.prototype.setupTabStops = function (i) { + if (i != null) { + if (!this.tabs[i]) { + i = this.prevStop(i); + } + } + else { + this.tabs = {}; + i = 0; + } + for (; i < this._terminal.cols; i += this._terminal.options.tabStopWidth) { + this.tabs[i] = true; + } + }; + Buffer.prototype.prevStop = function (x) { + if (x == null) { + x = this.x; + } + while (!this.tabs[--x] && x > 0) + ; + return x >= this._terminal.cols ? this._terminal.cols - 1 : x < 0 ? 0 : x; + }; + Buffer.prototype.nextStop = function (x) { + if (x == null) { + x = this.x; + } + while (!this.tabs[++x] && x < this._terminal.cols) + ; + return x >= this._terminal.cols ? this._terminal.cols - 1 : x < 0 ? 0 : x; + }; + return Buffer; +}()); +exports.Buffer = Buffer; + + + +},{"./utils/CircularList":30}],2:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var Buffer_1 = require("./Buffer"); +var EventEmitter_1 = require("./EventEmitter"); +var BufferSet = (function (_super) { + __extends(BufferSet, _super); + function BufferSet(_terminal) { + var _this = _super.call(this) || this; + _this._terminal = _terminal; + _this._normal = new Buffer_1.Buffer(_this._terminal, true); + _this._normal.fillViewportRows(); + _this._alt = new Buffer_1.Buffer(_this._terminal, false); + _this._activeBuffer = _this._normal; + _this.setupTabStops(); + return _this; + } + Object.defineProperty(BufferSet.prototype, "alt", { + get: function () { + return this._alt; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BufferSet.prototype, "active", { + get: function () { + return this._activeBuffer; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BufferSet.prototype, "normal", { + get: function () { + return this._normal; + }, + enumerable: true, + configurable: true + }); + BufferSet.prototype.activateNormalBuffer = function () { + this._alt.clear(); + this._activeBuffer = this._normal; + this.emit('activate', this._normal); + }; + BufferSet.prototype.activateAltBuffer = function () { + this._alt.fillViewportRows(); + this._activeBuffer = this._alt; + this.emit('activate', this._alt); + }; + BufferSet.prototype.resize = function (newCols, newRows) { + this._normal.resize(newCols, newRows); + this._alt.resize(newCols, newRows); + }; + BufferSet.prototype.setupTabStops = function (i) { + this._normal.setupTabStops(i); + this._alt.setupTabStops(i); + }; + return BufferSet; +}(EventEmitter_1.EventEmitter)); +exports.BufferSet = BufferSet; + + + +},{"./Buffer":1,"./EventEmitter":7}],3:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.wcwidth = (function (opts) { + var COMBINING_BMP = [ + [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489], + [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], + [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603], + [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], + [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], + [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A], + [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], + [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], + [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], + [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], + [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], + [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], + [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], + [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], + [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], + [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], + [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], + [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], + [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], + [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], + [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], + [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], + [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], + [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], + [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], + [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], + [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], + [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], + [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], + [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F], + [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], + [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD], + [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], + [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], + [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], + [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], + [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], + [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF], + [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], + [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F], + [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], + [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], + [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB], + ]; + var COMBINING_HIGH = [ + [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F], + [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169], + [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD], + [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F], + [0xE0100, 0xE01EF] + ]; + function bisearch(ucs, data) { + var min = 0; + var max = data.length - 1; + var mid; + if (ucs < data[0][0] || ucs > data[max][1]) + return false; + while (max >= min) { + mid = (min + max) >> 1; + if (ucs > data[mid][1]) + min = mid + 1; + else if (ucs < data[mid][0]) + max = mid - 1; + else + return true; + } + return false; + } + function wcwidthBMP(ucs) { + if (ucs === 0) + return opts.nul; + if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) + return opts.control; + if (bisearch(ucs, COMBINING_BMP)) + return 0; + if (isWideBMP(ucs)) { + return 2; + } + return 1; + } + function isWideBMP(ucs) { + return (ucs >= 0x1100 && (ucs <= 0x115f || + ucs === 0x2329 || + ucs === 0x232a || + (ucs >= 0x2e80 && ucs <= 0xa4cf && ucs !== 0x303f) || + (ucs >= 0xac00 && ucs <= 0xd7a3) || + (ucs >= 0xf900 && ucs <= 0xfaff) || + (ucs >= 0xfe10 && ucs <= 0xfe19) || + (ucs >= 0xfe30 && ucs <= 0xfe6f) || + (ucs >= 0xff00 && ucs <= 0xff60) || + (ucs >= 0xffe0 && ucs <= 0xffe6))); + } + function wcwidthHigh(ucs) { + if (bisearch(ucs, COMBINING_HIGH)) + return 0; + if ((ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0x30000 && ucs <= 0x3fffd)) { + return 2; + } + return 1; + } + var control = opts.control | 0; + var table = null; + function init_table() { + var CODEPOINTS = 65536; + var BITWIDTH = 2; + var ITEMSIZE = 32; + var CONTAINERSIZE = CODEPOINTS * BITWIDTH / ITEMSIZE; + var CODEPOINTS_PER_ITEM = ITEMSIZE / BITWIDTH; + table = (typeof Uint32Array === 'undefined') + ? new Array(CONTAINERSIZE) + : new Uint32Array(CONTAINERSIZE); + for (var i = 0; i < CONTAINERSIZE; ++i) { + var num = 0; + var pos = CODEPOINTS_PER_ITEM; + while (pos--) + num = (num << 2) | wcwidthBMP(CODEPOINTS_PER_ITEM * i + pos); + table[i] = num; + } + return table; + } + return function (num) { + num = num | 0; + if (num < 32) + return control | 0; + if (num < 127) + return 1; + var t = table || init_table(); + if (num < 65536) + return t[num >> 4] >> ((num & 15) << 1) & 3; + return wcwidthHigh(num); + }; +})({ nul: 0, control: 0 }); + + + +},{}],4:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CHARSETS = {}; +exports.DEFAULT_CHARSET = exports.CHARSETS['B']; +exports.CHARSETS['0'] = { + '`': '\u25c6', + 'a': '\u2592', + 'b': '\u0009', + 'c': '\u000c', + 'd': '\u000d', + 'e': '\u000a', + 'f': '\u00b0', + 'g': '\u00b1', + 'h': '\u2424', + 'i': '\u000b', + 'j': '\u2518', + 'k': '\u2510', + 'l': '\u250c', + 'm': '\u2514', + 'n': '\u253c', + 'o': '\u23ba', + 'p': '\u23bb', + 'q': '\u2500', + 'r': '\u23bc', + 's': '\u23bd', + 't': '\u251c', + 'u': '\u2524', + 'v': '\u2534', + 'w': '\u252c', + 'x': '\u2502', + 'y': '\u2264', + 'z': '\u2265', + '{': '\u03c0', + '|': '\u2260', + '}': '\u00a3', + '~': '\u00b7' +}; +exports.CHARSETS['A'] = { + '#': '£' +}; +exports.CHARSETS['B'] = null; +exports.CHARSETS['4'] = { + '#': '£', + '@': '¾', + '[': 'ij', + '\\': '½', + ']': '|', + '{': '¨', + '|': 'f', + '}': '¼', + '~': '´' +}; +exports.CHARSETS['C'] = + exports.CHARSETS['5'] = { + '[': 'Ä', + '\\': 'Ö', + ']': 'Å', + '^': 'Ü', + '`': 'é', + '{': 'ä', + '|': 'ö', + '}': 'å', + '~': 'ü' + }; +exports.CHARSETS['R'] = { + '#': '£', + '@': 'à', + '[': '°', + '\\': 'ç', + ']': '§', + '{': 'é', + '|': 'ù', + '}': 'è', + '~': '¨' +}; +exports.CHARSETS['Q'] = { + '@': 'à', + '[': 'â', + '\\': 'ç', + ']': 'ê', + '^': 'î', + '`': 'ô', + '{': 'é', + '|': 'ù', + '}': 'è', + '~': 'û' +}; +exports.CHARSETS['K'] = { + '@': '§', + '[': 'Ä', + '\\': 'Ö', + ']': 'Ü', + '{': 'ä', + '|': 'ö', + '}': 'ü', + '~': 'ß' +}; +exports.CHARSETS['Y'] = { + '#': '£', + '@': '§', + '[': '°', + '\\': 'ç', + ']': 'é', + '`': 'ù', + '{': 'à', + '|': 'ò', + '}': 'è', + '~': 'ì' +}; +exports.CHARSETS['E'] = + exports.CHARSETS['6'] = { + '@': 'Ä', + '[': 'Æ', + '\\': 'Ø', + ']': 'Å', + '^': 'Ü', + '`': 'ä', + '{': 'æ', + '|': 'ø', + '}': 'å', + '~': 'ü' + }; +exports.CHARSETS['Z'] = { + '#': '£', + '@': '§', + '[': '¡', + '\\': 'Ñ', + ']': '¿', + '{': '°', + '|': 'ñ', + '}': 'ç' +}; +exports.CHARSETS['H'] = + exports.CHARSETS['7'] = { + '@': 'É', + '[': 'Ä', + '\\': 'Ö', + ']': 'Å', + '^': 'Ü', + '`': 'é', + '{': 'ä', + '|': 'ö', + '}': 'å', + '~': 'ü' + }; +exports.CHARSETS['='] = { + '#': 'ù', + '@': 'à', + '[': 'é', + '\\': 'ç', + ']': 'ê', + '^': 'î', + '_': 'è', + '`': 'ô', + '{': 'ä', + '|': 'ö', + '}': 'ü', + '~': 'û' +}; + + + +},{}],5:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var CompositionHelper = (function () { + function CompositionHelper(textarea, compositionView, terminal) { + this.textarea = textarea; + this.compositionView = compositionView; + this.terminal = terminal; + this.isComposing = false; + this.isSendingComposition = false; + this.compositionPosition = { start: null, end: null }; + } + CompositionHelper.prototype.compositionstart = function () { + this.isComposing = true; + this.compositionPosition.start = this.textarea.value.length; + this.compositionView.textContent = ''; + this.compositionView.classList.add('active'); + }; + CompositionHelper.prototype.compositionupdate = function (ev) { + var _this = this; + this.compositionView.textContent = ev.data; + this.updateCompositionElements(); + setTimeout(function () { + _this.compositionPosition.end = _this.textarea.value.length; + }, 0); + }; + CompositionHelper.prototype.compositionend = function () { + this.finalizeComposition(true); + }; + CompositionHelper.prototype.keydown = function (ev) { + if (this.isComposing || this.isSendingComposition) { + if (ev.keyCode === 229) { + return false; + } + else if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) { + return false; + } + else { + this.finalizeComposition(false); + } + } + if (ev.keyCode === 229) { + this.handleAnyTextareaChanges(); + return false; + } + return true; + }; + CompositionHelper.prototype.finalizeComposition = function (waitForPropogation) { + var _this = this; + this.compositionView.classList.remove('active'); + this.isComposing = false; + this.clearTextareaPosition(); + if (!waitForPropogation) { + this.isSendingComposition = false; + var input = this.textarea.value.substring(this.compositionPosition.start, this.compositionPosition.end); + this.terminal.handler(input); + } + else { + var currentCompositionPosition_1 = { + start: this.compositionPosition.start, + end: this.compositionPosition.end, + }; + this.isSendingComposition = true; + setTimeout(function () { + if (_this.isSendingComposition) { + _this.isSendingComposition = false; + var input = void 0; + if (_this.isComposing) { + input = _this.textarea.value.substring(currentCompositionPosition_1.start, currentCompositionPosition_1.end); + } + else { + input = _this.textarea.value.substring(currentCompositionPosition_1.start); + } + _this.terminal.handler(input); + } + }, 0); + } + }; + CompositionHelper.prototype.handleAnyTextareaChanges = function () { + var _this = this; + var oldValue = this.textarea.value; + setTimeout(function () { + if (!_this.isComposing) { + var newValue = _this.textarea.value; + var diff = newValue.replace(oldValue, ''); + if (diff.length > 0) { + _this.terminal.handler(diff); + } + } + }, 0); + }; + CompositionHelper.prototype.updateCompositionElements = function (dontRecurse) { + var _this = this; + if (!this.isComposing) { + return; + } + if (this.terminal.buffer.isCursorInViewport) { + var cellHeight = Math.ceil(this.terminal.charMeasure.height * this.terminal.options.lineHeight); + var cursorTop = this.terminal.buffer.y * cellHeight; + var cursorLeft = this.terminal.buffer.x * this.terminal.charMeasure.width; + this.compositionView.style.left = cursorLeft + 'px'; + this.compositionView.style.top = cursorTop + 'px'; + this.compositionView.style.height = cellHeight + 'px'; + this.compositionView.style.lineHeight = cellHeight + 'px'; + var compositionViewBounds = this.compositionView.getBoundingClientRect(); + this.textarea.style.left = cursorLeft + 'px'; + this.textarea.style.top = cursorTop + 'px'; + this.textarea.style.width = compositionViewBounds.width + 'px'; + this.textarea.style.height = compositionViewBounds.height + 'px'; + this.textarea.style.lineHeight = compositionViewBounds.height + 'px'; + } + if (!dontRecurse) { + setTimeout(function () { return _this.updateCompositionElements(true); }, 0); + } + }; + ; + CompositionHelper.prototype.clearTextareaPosition = function () { + this.textarea.style.left = ''; + this.textarea.style.top = ''; + }; + ; + return CompositionHelper; +}()); +exports.CompositionHelper = CompositionHelper; + + + +},{}],6:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var C0; +(function (C0) { + C0.NUL = '\x00'; + C0.SOH = '\x01'; + C0.STX = '\x02'; + C0.ETX = '\x03'; + C0.EOT = '\x04'; + C0.ENQ = '\x05'; + C0.ACK = '\x06'; + C0.BEL = '\x07'; + C0.BS = '\x08'; + C0.HT = '\x09'; + C0.LF = '\x0a'; + C0.VT = '\x0b'; + C0.FF = '\x0c'; + C0.CR = '\x0d'; + C0.SO = '\x0e'; + C0.SI = '\x0f'; + C0.DLE = '\x10'; + C0.DC1 = '\x11'; + C0.DC2 = '\x12'; + C0.DC3 = '\x13'; + C0.DC4 = '\x14'; + C0.NAK = '\x15'; + C0.SYN = '\x16'; + C0.ETB = '\x17'; + C0.CAN = '\x18'; + C0.EM = '\x19'; + C0.SUB = '\x1a'; + C0.ESC = '\x1b'; + C0.FS = '\x1c'; + C0.GS = '\x1d'; + C0.RS = '\x1e'; + C0.US = '\x1f'; + C0.SP = '\x20'; + C0.DEL = '\x7f'; +})(C0 = exports.C0 || (exports.C0 = {})); +; + + + +},{}],7:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var EventEmitter = (function () { + function EventEmitter() { + this._events = this._events || {}; + } + EventEmitter.prototype.on = function (type, listener) { + this._events[type] = this._events[type] || []; + this._events[type].push(listener); + }; + EventEmitter.prototype.off = function (type, listener) { + if (!this._events[type]) { + return; + } + var obj = this._events[type]; + var i = obj.length; + while (i--) { + if (obj[i] === listener || obj[i].listener === listener) { + obj.splice(i, 1); + return; + } + } + }; + EventEmitter.prototype.removeAllListeners = function (type) { + if (this._events[type]) { + delete this._events[type]; + } + }; + EventEmitter.prototype.once = function (type, listener) { + function on() { + var args = Array.prototype.slice.call(arguments); + this.off(type, on); + listener.apply(this, args); + } + on.listener = listener; + this.on(type, on); + }; + EventEmitter.prototype.emit = function (type) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + if (!this._events[type]) { + return; + } + var obj = this._events[type]; + for (var i = 0; i < obj.length; i++) { + obj[i].apply(this, args); + } + }; + EventEmitter.prototype.listeners = function (type) { + return this._events[type] || []; + }; + EventEmitter.prototype.destroy = function () { + this._events = {}; + }; + return EventEmitter; +}()); +exports.EventEmitter = EventEmitter; + + + +},{}],8:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var EscapeSequences_1 = require("./EscapeSequences"); +var Charsets_1 = require("./Charsets"); +var Buffer_1 = require("./Buffer"); +var Types_1 = require("./renderer/Types"); +var CharWidth_1 = require("./CharWidth"); +var InputHandler = (function () { + function InputHandler(_terminal) { + this._terminal = _terminal; + } + InputHandler.prototype.addChar = function (char, code) { + if (char >= ' ') { + var ch_width = CharWidth_1.wcwidth(code); + if (this._terminal.charset && this._terminal.charset[char]) { + char = this._terminal.charset[char]; + } + var row = this._terminal.buffer.y + this._terminal.buffer.ybase; + if (!ch_width && this._terminal.buffer.x) { + if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1]) { + if (!this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][Buffer_1.CHAR_DATA_WIDTH_INDEX]) { + if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2]) { + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2][Buffer_1.CHAR_DATA_CHAR_INDEX] += char; + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2][3] = char.charCodeAt(0); + } + } + else { + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][Buffer_1.CHAR_DATA_CHAR_INDEX] += char; + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][3] = char.charCodeAt(0); + } + this._terminal.updateRange(this._terminal.buffer.y); + } + return; + } + if (this._terminal.buffer.x + ch_width - 1 >= this._terminal.cols) { + if (this._terminal.wraparoundMode) { + this._terminal.buffer.x = 0; + this._terminal.buffer.y++; + if (this._terminal.buffer.y > this._terminal.buffer.scrollBottom) { + this._terminal.buffer.y--; + this._terminal.scroll(true); + } + else { + this._terminal.buffer.lines.get(this._terminal.buffer.y).isWrapped = true; + } + } + else { + if (ch_width === 2) + return; + } + } + row = this._terminal.buffer.y + this._terminal.buffer.ybase; + if (this._terminal.insertMode) { + for (var moves = 0; moves < ch_width; ++moves) { + var removed = this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).pop(); + if (removed[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0 + && this._terminal.buffer.lines.get(row)[this._terminal.cols - 2] + && this._terminal.buffer.lines.get(row)[this._terminal.cols - 2][Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) { + this._terminal.buffer.lines.get(row)[this._terminal.cols - 2] = [this._terminal.curAttr, ' ', 1, ' '.charCodeAt(0)]; + } + this._terminal.buffer.lines.get(row).splice(this._terminal.buffer.x, 0, [this._terminal.curAttr, ' ', 1, ' '.charCodeAt(0)]); + } + } + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, char, ch_width, char.charCodeAt(0)]; + this._terminal.buffer.x++; + this._terminal.updateRange(this._terminal.buffer.y); + if (ch_width === 2) { + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, '', 0, undefined]; + this._terminal.buffer.x++; + } + } + }; + InputHandler.prototype.bell = function () { + this._terminal.bell(); + }; + InputHandler.prototype.lineFeed = function () { + if (this._terminal.convertEol) { + this._terminal.buffer.x = 0; + } + this._terminal.buffer.y++; + if (this._terminal.buffer.y > this._terminal.buffer.scrollBottom) { + this._terminal.buffer.y--; + this._terminal.scroll(); + } + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x--; + } + this._terminal.emit('lineFeed'); + }; + InputHandler.prototype.carriageReturn = function () { + this._terminal.buffer.x = 0; + }; + InputHandler.prototype.backspace = function () { + if (this._terminal.buffer.x > 0) { + this._terminal.buffer.x--; + } + }; + InputHandler.prototype.tab = function () { + this._terminal.buffer.x = this._terminal.buffer.nextStop(); + }; + InputHandler.prototype.shiftOut = function () { + this._terminal.setgLevel(1); + }; + InputHandler.prototype.shiftIn = function () { + this._terminal.setgLevel(0); + }; + InputHandler.prototype.insertChars = function (params) { + var param = params[0]; + if (param < 1) + param = 1; + var row = this._terminal.buffer.y + this._terminal.buffer.ybase; + var j = this._terminal.buffer.x; + var ch = [this._terminal.eraseAttr(), ' ', 1, 32]; + while (param-- && j < this._terminal.cols) { + this._terminal.buffer.lines.get(row).splice(j++, 0, ch); + this._terminal.buffer.lines.get(row).pop(); + } + }; + InputHandler.prototype.cursorUp = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.y -= param; + if (this._terminal.buffer.y < 0) { + this._terminal.buffer.y = 0; + } + }; + InputHandler.prototype.cursorDown = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.y += param; + if (this._terminal.buffer.y >= this._terminal.rows) { + this._terminal.buffer.y = this._terminal.rows - 1; + } + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x--; + } + }; + InputHandler.prototype.cursorForward = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.x += param; + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x = this._terminal.cols - 1; + } + }; + InputHandler.prototype.cursorBackward = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x--; + } + this._terminal.buffer.x -= param; + if (this._terminal.buffer.x < 0) { + this._terminal.buffer.x = 0; + } + }; + InputHandler.prototype.cursorNextLine = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.y += param; + if (this._terminal.buffer.y >= this._terminal.rows) { + this._terminal.buffer.y = this._terminal.rows - 1; + } + this._terminal.buffer.x = 0; + }; + InputHandler.prototype.cursorPrecedingLine = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.y -= param; + if (this._terminal.buffer.y < 0) { + this._terminal.buffer.y = 0; + } + this._terminal.buffer.x = 0; + }; + InputHandler.prototype.cursorCharAbsolute = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.x = param - 1; + }; + InputHandler.prototype.cursorPosition = function (params) { + var col; + var row = params[0] - 1; + if (params.length >= 2) { + col = params[1] - 1; + } + else { + col = 0; + } + if (row < 0) { + row = 0; + } + else if (row >= this._terminal.rows) { + row = this._terminal.rows - 1; + } + if (col < 0) { + col = 0; + } + else if (col >= this._terminal.cols) { + col = this._terminal.cols - 1; + } + this._terminal.buffer.x = col; + this._terminal.buffer.y = row; + }; + InputHandler.prototype.cursorForwardTab = function (params) { + var param = params[0] || 1; + while (param--) { + this._terminal.buffer.x = this._terminal.buffer.nextStop(); + } + }; + InputHandler.prototype.eraseInDisplay = function (params) { + var j; + switch (params[0]) { + case 0: + this._terminal.eraseRight(this._terminal.buffer.x, this._terminal.buffer.y); + j = this._terminal.buffer.y + 1; + for (; j < this._terminal.rows; j++) { + this._terminal.eraseLine(j); + } + break; + case 1: + this._terminal.eraseLeft(this._terminal.buffer.x, this._terminal.buffer.y); + j = this._terminal.buffer.y; + while (j--) { + this._terminal.eraseLine(j); + } + break; + case 2: + j = this._terminal.rows; + while (j--) + this._terminal.eraseLine(j); + break; + case 3: + var scrollBackSize = this._terminal.buffer.lines.length - this._terminal.rows; + if (scrollBackSize > 0) { + this._terminal.buffer.lines.trimStart(scrollBackSize); + this._terminal.buffer.ybase = Math.max(this._terminal.buffer.ybase - scrollBackSize, 0); + this._terminal.buffer.ydisp = Math.max(this._terminal.buffer.ydisp - scrollBackSize, 0); + this._terminal.emit('scroll', 0); + } + break; + } + }; + InputHandler.prototype.eraseInLine = function (params) { + switch (params[0]) { + case 0: + this._terminal.eraseRight(this._terminal.buffer.x, this._terminal.buffer.y); + break; + case 1: + this._terminal.eraseLeft(this._terminal.buffer.x, this._terminal.buffer.y); + break; + case 2: + this._terminal.eraseLine(this._terminal.buffer.y); + break; + } + }; + InputHandler.prototype.insertLines = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + var row = this._terminal.buffer.y + this._terminal.buffer.ybase; + var scrollBottomRowsOffset = this._terminal.rows - 1 - this._terminal.buffer.scrollBottom; + var scrollBottomAbsolute = this._terminal.rows - 1 + this._terminal.buffer.ybase - scrollBottomRowsOffset + 1; + while (param--) { + this._terminal.buffer.lines.splice(scrollBottomAbsolute - 1, 1); + this._terminal.buffer.lines.splice(row, 0, this._terminal.blankLine(true)); + } + this._terminal.updateRange(this._terminal.buffer.y); + this._terminal.updateRange(this._terminal.buffer.scrollBottom); + }; + InputHandler.prototype.deleteLines = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + var row = this._terminal.buffer.y + this._terminal.buffer.ybase; + var j; + j = this._terminal.rows - 1 - this._terminal.buffer.scrollBottom; + j = this._terminal.rows - 1 + this._terminal.buffer.ybase - j; + while (param--) { + this._terminal.buffer.lines.splice(row, 1); + this._terminal.buffer.lines.splice(j, 0, this._terminal.blankLine(true)); + } + this._terminal.updateRange(this._terminal.buffer.y); + this._terminal.updateRange(this._terminal.buffer.scrollBottom); + }; + InputHandler.prototype.deleteChars = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + var row = this._terminal.buffer.y + this._terminal.buffer.ybase; + var ch = [this._terminal.eraseAttr(), ' ', 1, 32]; + while (param--) { + this._terminal.buffer.lines.get(row).splice(this._terminal.buffer.x, 1); + this._terminal.buffer.lines.get(row).push(ch); + } + this._terminal.updateRange(this._terminal.buffer.y); + }; + InputHandler.prototype.scrollUp = function (params) { + var param = params[0] || 1; + while (param--) { + this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollTop, 1); + this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollBottom, 0, this._terminal.blankLine()); + } + this._terminal.updateRange(this._terminal.buffer.scrollTop); + this._terminal.updateRange(this._terminal.buffer.scrollBottom); + }; + InputHandler.prototype.scrollDown = function (params) { + var param = params[0] || 1; + while (param--) { + this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollBottom, 1); + this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollTop, 0, this._terminal.blankLine()); + } + this._terminal.updateRange(this._terminal.buffer.scrollTop); + this._terminal.updateRange(this._terminal.buffer.scrollBottom); + }; + InputHandler.prototype.eraseChars = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + var row = this._terminal.buffer.y + this._terminal.buffer.ybase; + var j = this._terminal.buffer.x; + var ch = [this._terminal.eraseAttr(), ' ', 1, 32]; + while (param-- && j < this._terminal.cols) { + this._terminal.buffer.lines.get(row)[j++] = ch; + } + }; + InputHandler.prototype.cursorBackwardTab = function (params) { + var param = params[0] || 1; + while (param--) { + this._terminal.buffer.x = this._terminal.buffer.prevStop(); + } + }; + InputHandler.prototype.charPosAbsolute = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.x = param - 1; + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x = this._terminal.cols - 1; + } + }; + InputHandler.prototype.HPositionRelative = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.x += param; + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x = this._terminal.cols - 1; + } + }; + InputHandler.prototype.repeatPrecedingCharacter = function (params) { + var param = params[0] || 1; + var line = this._terminal.buffer.lines.get(this._terminal.buffer.ybase + this._terminal.buffer.y); + var ch = line[this._terminal.buffer.x - 1] || [this._terminal.defAttr, ' ', 1, 32]; + while (param--) { + line[this._terminal.buffer.x++] = ch; + } + }; + InputHandler.prototype.sendDeviceAttributes = function (params) { + if (params[0] > 0) { + return; + } + if (!this._terminal.prefix) { + if (this._terminal.is('xterm') || this._terminal.is('rxvt-unicode') || this._terminal.is('screen')) { + this._terminal.send(EscapeSequences_1.C0.ESC + '[?1;2c'); + } + else if (this._terminal.is('linux')) { + this._terminal.send(EscapeSequences_1.C0.ESC + '[?6c'); + } + } + else if (this._terminal.prefix === '>') { + if (this._terminal.is('xterm')) { + this._terminal.send(EscapeSequences_1.C0.ESC + '[>0;276;0c'); + } + else if (this._terminal.is('rxvt-unicode')) { + this._terminal.send(EscapeSequences_1.C0.ESC + '[>85;95;0c'); + } + else if (this._terminal.is('linux')) { + this._terminal.send(params[0] + 'c'); + } + else if (this._terminal.is('screen')) { + this._terminal.send(EscapeSequences_1.C0.ESC + '[>83;40003;0c'); + } + } + }; + InputHandler.prototype.linePosAbsolute = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.y = param - 1; + if (this._terminal.buffer.y >= this._terminal.rows) { + this._terminal.buffer.y = this._terminal.rows - 1; + } + }; + InputHandler.prototype.VPositionRelative = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.y += param; + if (this._terminal.buffer.y >= this._terminal.rows) { + this._terminal.buffer.y = this._terminal.rows - 1; + } + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x--; + } + }; + InputHandler.prototype.HVPosition = function (params) { + if (params[0] < 1) + params[0] = 1; + if (params[1] < 1) + params[1] = 1; + this._terminal.buffer.y = params[0] - 1; + if (this._terminal.buffer.y >= this._terminal.rows) { + this._terminal.buffer.y = this._terminal.rows - 1; + } + this._terminal.buffer.x = params[1] - 1; + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x = this._terminal.cols - 1; + } + }; + InputHandler.prototype.tabClear = function (params) { + var param = params[0]; + if (param <= 0) { + delete this._terminal.buffer.tabs[this._terminal.buffer.x]; + } + else if (param === 3) { + this._terminal.buffer.tabs = {}; + } + }; + InputHandler.prototype.setMode = function (params) { + if (params.length > 1) { + for (var i = 0; i < params.length; i++) { + this.setMode([params[i]]); + } + return; + } + if (!this._terminal.prefix) { + switch (params[0]) { + case 4: + this._terminal.insertMode = true; + break; + case 20: + break; + } + } + else if (this._terminal.prefix === '?') { + switch (params[0]) { + case 1: + this._terminal.applicationCursor = true; + break; + case 2: + this._terminal.setgCharset(0, Charsets_1.DEFAULT_CHARSET); + this._terminal.setgCharset(1, Charsets_1.DEFAULT_CHARSET); + this._terminal.setgCharset(2, Charsets_1.DEFAULT_CHARSET); + this._terminal.setgCharset(3, Charsets_1.DEFAULT_CHARSET); + break; + case 3: + this._terminal.savedCols = this._terminal.cols; + this._terminal.resize(132, this._terminal.rows); + break; + case 6: + this._terminal.originMode = true; + break; + case 7: + this._terminal.wraparoundMode = true; + break; + case 12: + break; + case 66: + this._terminal.log('Serial port requested application keypad.'); + this._terminal.applicationKeypad = true; + this._terminal.viewport.syncScrollArea(); + break; + case 9: + case 1000: + case 1002: + case 1003: + this._terminal.x10Mouse = params[0] === 9; + this._terminal.vt200Mouse = params[0] === 1000; + this._terminal.normalMouse = params[0] > 1000; + this._terminal.mouseEvents = true; + this._terminal.element.classList.add('enable-mouse-events'); + this._terminal.selectionManager.disable(); + this._terminal.log('Binding to mouse events.'); + break; + case 1004: + this._terminal.sendFocus = true; + break; + case 1005: + this._terminal.utfMouse = true; + break; + case 1006: + this._terminal.sgrMouse = true; + break; + case 1015: + this._terminal.urxvtMouse = true; + break; + case 25: + this._terminal.cursorHidden = false; + break; + case 1049: + case 47: + case 1047: + this._terminal.buffers.activateAltBuffer(); + this._terminal.selectionManager.setBuffer(this._terminal.buffer); + this._terminal.viewport.syncScrollArea(); + this._terminal.showCursor(); + break; + case 2004: + this._terminal.bracketedPasteMode = true; + break; + } + } + }; + InputHandler.prototype.resetMode = function (params) { + if (params.length > 1) { + for (var i = 0; i < params.length; i++) { + this.resetMode([params[i]]); + } + return; + } + if (!this._terminal.prefix) { + switch (params[0]) { + case 4: + this._terminal.insertMode = false; + break; + case 20: + break; + } + } + else if (this._terminal.prefix === '?') { + switch (params[0]) { + case 1: + this._terminal.applicationCursor = false; + break; + case 3: + if (this._terminal.cols === 132 && this._terminal.savedCols) { + this._terminal.resize(this._terminal.savedCols, this._terminal.rows); + } + delete this._terminal.savedCols; + break; + case 6: + this._terminal.originMode = false; + break; + case 7: + this._terminal.wraparoundMode = false; + break; + case 12: + break; + case 66: + this._terminal.log('Switching back to normal keypad.'); + this._terminal.applicationKeypad = false; + this._terminal.viewport.syncScrollArea(); + break; + case 9: + case 1000: + case 1002: + case 1003: + this._terminal.x10Mouse = false; + this._terminal.vt200Mouse = false; + this._terminal.normalMouse = false; + this._terminal.mouseEvents = false; + this._terminal.element.classList.remove('enable-mouse-events'); + this._terminal.selectionManager.enable(); + break; + case 1004: + this._terminal.sendFocus = false; + break; + case 1005: + this._terminal.utfMouse = false; + break; + case 1006: + this._terminal.sgrMouse = false; + break; + case 1015: + this._terminal.urxvtMouse = false; + break; + case 25: + this._terminal.cursorHidden = true; + break; + case 1049: + case 47: + case 1047: + this._terminal.buffers.activateNormalBuffer(); + this._terminal.selectionManager.setBuffer(this._terminal.buffer); + this._terminal.refresh(0, this._terminal.rows - 1); + this._terminal.viewport.syncScrollArea(); + this._terminal.showCursor(); + break; + case 2004: + this._terminal.bracketedPasteMode = false; + break; + } + } + }; + InputHandler.prototype.charAttributes = function (params) { + if (params.length === 1 && params[0] === 0) { + this._terminal.curAttr = this._terminal.defAttr; + return; + } + var l = params.length; + var flags = this._terminal.curAttr >> 18; + var fg = (this._terminal.curAttr >> 9) & 0x1ff; + var bg = this._terminal.curAttr & 0x1ff; + var p; + for (var i = 0; i < l; i++) { + p = params[i]; + if (p >= 30 && p <= 37) { + fg = p - 30; + } + else if (p >= 40 && p <= 47) { + bg = p - 40; + } + else if (p >= 90 && p <= 97) { + p += 8; + fg = p - 90; + } + else if (p >= 100 && p <= 107) { + p += 8; + bg = p - 100; + } + else if (p === 0) { + flags = this._terminal.defAttr >> 18; + fg = (this._terminal.defAttr >> 9) & 0x1ff; + bg = this._terminal.defAttr & 0x1ff; + } + else if (p === 1) { + flags |= Types_1.FLAGS.BOLD; + } + else if (p === 4) { + flags |= Types_1.FLAGS.UNDERLINE; + } + else if (p === 5) { + flags |= Types_1.FLAGS.BLINK; + } + else if (p === 7) { + flags |= Types_1.FLAGS.INVERSE; + } + else if (p === 8) { + flags |= Types_1.FLAGS.INVISIBLE; + } + else if (p === 2) { + flags |= Types_1.FLAGS.DIM; + } + else if (p === 22) { + flags &= ~Types_1.FLAGS.BOLD; + flags &= ~Types_1.FLAGS.DIM; + } + else if (p === 24) { + flags &= ~Types_1.FLAGS.UNDERLINE; + } + else if (p === 25) { + flags &= ~Types_1.FLAGS.BLINK; + } + else if (p === 27) { + flags &= ~Types_1.FLAGS.INVERSE; + } + else if (p === 28) { + flags &= ~Types_1.FLAGS.INVISIBLE; + } + else if (p === 39) { + fg = (this._terminal.defAttr >> 9) & 0x1ff; + } + else if (p === 49) { + bg = this._terminal.defAttr & 0x1ff; + } + else if (p === 38) { + if (params[i + 1] === 2) { + i += 2; + fg = this._terminal.matchColor(params[i] & 0xff, params[i + 1] & 0xff, params[i + 2] & 0xff); + if (fg === -1) + fg = 0x1ff; + i += 2; + } + else if (params[i + 1] === 5) { + i += 2; + p = params[i] & 0xff; + fg = p; + } + } + else if (p === 48) { + if (params[i + 1] === 2) { + i += 2; + bg = this._terminal.matchColor(params[i] & 0xff, params[i + 1] & 0xff, params[i + 2] & 0xff); + if (bg === -1) + bg = 0x1ff; + i += 2; + } + else if (params[i + 1] === 5) { + i += 2; + p = params[i] & 0xff; + bg = p; + } + } + else if (p === 100) { + fg = (this._terminal.defAttr >> 9) & 0x1ff; + bg = this._terminal.defAttr & 0x1ff; + } + else { + this._terminal.error('Unknown SGR attribute: %d.', p); + } + } + this._terminal.curAttr = (flags << 18) | (fg << 9) | bg; + }; + InputHandler.prototype.deviceStatus = function (params) { + if (!this._terminal.prefix) { + switch (params[0]) { + case 5: + this._terminal.send(EscapeSequences_1.C0.ESC + '[0n'); + break; + case 6: + this._terminal.send(EscapeSequences_1.C0.ESC + '[' + + (this._terminal.buffer.y + 1) + + ';' + + (this._terminal.buffer.x + 1) + + 'R'); + break; + } + } + else if (this._terminal.prefix === '?') { + switch (params[0]) { + case 6: + this._terminal.send(EscapeSequences_1.C0.ESC + '[?' + + (this._terminal.buffer.y + 1) + + ';' + + (this._terminal.buffer.x + 1) + + 'R'); + break; + case 15: + break; + case 25: + break; + case 26: + break; + case 53: + break; + } + } + }; + InputHandler.prototype.softReset = function (params) { + this._terminal.cursorHidden = false; + this._terminal.insertMode = false; + this._terminal.originMode = false; + this._terminal.wraparoundMode = true; + this._terminal.applicationKeypad = false; + this._terminal.viewport.syncScrollArea(); + this._terminal.applicationCursor = false; + this._terminal.buffer.scrollTop = 0; + this._terminal.buffer.scrollBottom = this._terminal.rows - 1; + this._terminal.curAttr = this._terminal.defAttr; + this._terminal.buffer.x = this._terminal.buffer.y = 0; + this._terminal.charset = null; + this._terminal.glevel = 0; + this._terminal.charsets = [null]; + }; + InputHandler.prototype.setCursorStyle = function (params) { + var param = params[0] < 1 ? 1 : params[0]; + switch (param) { + case 1: + case 2: + this._terminal.setOption('cursorStyle', 'block'); + break; + case 3: + case 4: + this._terminal.setOption('cursorStyle', 'underline'); + break; + case 5: + case 6: + this._terminal.setOption('cursorStyle', 'bar'); + break; + } + var isBlinking = param % 2 === 1; + this._terminal.setOption('cursorBlink', isBlinking); + }; + InputHandler.prototype.setScrollRegion = function (params) { + if (this._terminal.prefix) + return; + this._terminal.buffer.scrollTop = (params[0] || 1) - 1; + this._terminal.buffer.scrollBottom = (params[1] && params[1] <= this._terminal.rows ? params[1] : this._terminal.rows) - 1; + this._terminal.buffer.x = 0; + this._terminal.buffer.y = 0; + }; + InputHandler.prototype.saveCursor = function (params) { + this._terminal.buffer.savedX = this._terminal.buffer.x; + this._terminal.buffer.savedY = this._terminal.buffer.y; + }; + InputHandler.prototype.restoreCursor = function (params) { + this._terminal.buffer.x = this._terminal.buffer.savedX || 0; + this._terminal.buffer.y = this._terminal.buffer.savedY || 0; + }; + return InputHandler; +}()); +exports.InputHandler = InputHandler; + + + +},{"./Buffer":1,"./CharWidth":3,"./Charsets":4,"./EscapeSequences":6,"./renderer/Types":27}],9:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var Types_1 = require("./Types"); +var MouseZoneManager_1 = require("./input/MouseZoneManager"); +var EventEmitter_1 = require("./EventEmitter"); +var protocolClause = '(https?:\\/\\/)'; +var domainCharacterSet = '[\\da-z\\.-]+'; +var negatedDomainCharacterSet = '[^\\da-z\\.-]+'; +var domainBodyClause = '(' + domainCharacterSet + ')'; +var tldClause = '([a-z\\.]{2,6})'; +var ipClause = '((\\d{1,3}\\.){3}\\d{1,3})'; +var localHostClause = '(localhost)'; +var portClause = '(:\\d{1,5})'; +var hostClause = '((' + domainBodyClause + '\\.' + tldClause + ')|' + ipClause + '|' + localHostClause + ')' + portClause + '?'; +var pathClause = '(\\/[\\/\\w\\.\\-%~]*)*'; +var queryStringHashFragmentCharacterSet = '[0-9\\w\\[\\]\\(\\)\\/\\?\\!#@$%&\'*+,:;~\\=\\.\\-]*'; +var queryStringClause = '(\\?' + queryStringHashFragmentCharacterSet + ')?'; +var hashFragmentClause = '(#' + queryStringHashFragmentCharacterSet + ')?'; +var negatedPathCharacterSet = '[^\\/\\w\\.\\-%]+'; +var bodyClause = hostClause + pathClause + queryStringClause + hashFragmentClause; +var start = '(?:^|' + negatedDomainCharacterSet + ')('; +var end = ')($|' + negatedPathCharacterSet + ')'; +var strictUrlRegex = new RegExp(start + protocolClause + bodyClause + end); +var HYPERTEXT_LINK_MATCHER_ID = 0; +var Linkifier = (function (_super) { + __extends(Linkifier, _super); + function Linkifier(_terminal) { + var _this = _super.call(this) || this; + _this._terminal = _terminal; + _this._linkMatchers = []; + _this._nextLinkMatcherId = HYPERTEXT_LINK_MATCHER_ID; + _this._rowsToLinkify = { + start: null, + end: null + }; + _this.registerLinkMatcher(strictUrlRegex, null, { matchIndex: 1 }); + return _this; + } + Linkifier.prototype.attachToDom = function (mouseZoneManager) { + this._mouseZoneManager = mouseZoneManager; + }; + Linkifier.prototype.linkifyRows = function (start, end) { + var _this = this; + if (!this._mouseZoneManager) { + return; + } + if (!this._rowsToLinkify.start) { + this._rowsToLinkify.start = start; + this._rowsToLinkify.end = end; + } + else { + this._rowsToLinkify.start = this._rowsToLinkify.start < start ? this._rowsToLinkify.start : start; + this._rowsToLinkify.end = this._rowsToLinkify.end > end ? this._rowsToLinkify.end : end; + } + this._mouseZoneManager.clearAll(start, end); + if (this._rowsTimeoutId) { + clearTimeout(this._rowsTimeoutId); + } + this._rowsTimeoutId = setTimeout(function () { return _this._linkifyRows(); }, Linkifier.TIME_BEFORE_LINKIFY); + }; + Linkifier.prototype._linkifyRows = function () { + this._rowsTimeoutId = null; + for (var i = this._rowsToLinkify.start; i <= this._rowsToLinkify.end; i++) { + this._linkifyRow(i); + } + this._rowsToLinkify.start = null; + this._rowsToLinkify.end = null; + }; + Linkifier.prototype.setHypertextLinkHandler = function (handler) { + this._linkMatchers[HYPERTEXT_LINK_MATCHER_ID].handler = handler; + }; + Linkifier.prototype.setHypertextValidationCallback = function (callback) { + this._linkMatchers[HYPERTEXT_LINK_MATCHER_ID].validationCallback = callback; + }; + Linkifier.prototype.registerLinkMatcher = function (regex, handler, options) { + if (options === void 0) { options = {}; } + if (this._nextLinkMatcherId !== HYPERTEXT_LINK_MATCHER_ID && !handler) { + throw new Error('handler must be defined'); + } + var matcher = { + id: this._nextLinkMatcherId++, + regex: regex, + handler: handler, + matchIndex: options.matchIndex, + validationCallback: options.validationCallback, + hoverTooltipCallback: options.tooltipCallback, + hoverLeaveCallback: options.leaveCallback, + priority: options.priority || 0 + }; + this._addLinkMatcherToList(matcher); + return matcher.id; + }; + Linkifier.prototype._addLinkMatcherToList = function (matcher) { + if (this._linkMatchers.length === 0) { + this._linkMatchers.push(matcher); + return; + } + for (var i = this._linkMatchers.length - 1; i >= 0; i--) { + if (matcher.priority <= this._linkMatchers[i].priority) { + this._linkMatchers.splice(i + 1, 0, matcher); + return; + } + } + this._linkMatchers.splice(0, 0, matcher); + }; + Linkifier.prototype.deregisterLinkMatcher = function (matcherId) { + for (var i = 1; i < this._linkMatchers.length; i++) { + if (this._linkMatchers[i].id === matcherId) { + this._linkMatchers.splice(i, 1); + return true; + } + } + return false; + }; + Linkifier.prototype._linkifyRow = function (rowIndex) { + var absoluteRowIndex = this._terminal.buffer.ydisp + rowIndex; + if (absoluteRowIndex >= this._terminal.buffer.lines.length) { + return; + } + var text = this._terminal.buffer.translateBufferLineToString(absoluteRowIndex, false); + for (var i = 0; i < this._linkMatchers.length; i++) { + this._doLinkifyRow(rowIndex, text, this._linkMatchers[i]); + } + }; + Linkifier.prototype._doLinkifyRow = function (rowIndex, text, matcher, offset) { + var _this = this; + if (offset === void 0) { offset = 0; } + var result = []; + var isHttpLinkMatcher = matcher.id === HYPERTEXT_LINK_MATCHER_ID; + var match = text.match(matcher.regex); + if (!match || match.length === 0) { + return; + } + var uri = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex]; + var index = text.indexOf(uri); + if (matcher.validationCallback) { + matcher.validationCallback(uri, function (isValid) { + if (_this._rowsTimeoutId) { + return; + } + if (isValid) { + _this._addLink(offset + index, rowIndex, uri, matcher); + } + }); + } + else { + this._addLink(offset + index, rowIndex, uri, matcher); + } + var remainingStartIndex = index + uri.length; + var remainingText = text.substr(remainingStartIndex); + if (remainingText.length > 0) { + this._doLinkifyRow(rowIndex, remainingText, matcher, offset + remainingStartIndex); + } + }; + Linkifier.prototype._addLink = function (x, y, uri, matcher) { + var _this = this; + this._mouseZoneManager.add(new MouseZoneManager_1.MouseZone(x + 1, x + 1 + uri.length, y + 1, function (e) { + if (matcher.handler) { + return matcher.handler(e, uri); + } + window.open(uri, '_blank'); + }, function (e) { + _this.emit(Types_1.LinkHoverEventTypes.HOVER, { x: x, y: y, length: uri.length }); + _this._terminal.element.style.cursor = 'pointer'; + }, function (e) { + _this.emit(Types_1.LinkHoverEventTypes.TOOLTIP, { x: x, y: y, length: uri.length }); + if (matcher.hoverTooltipCallback) { + matcher.hoverTooltipCallback(e, uri); + } + }, function () { + _this.emit(Types_1.LinkHoverEventTypes.LEAVE, { x: x, y: y, length: uri.length }); + _this._terminal.element.style.cursor = ''; + if (matcher.hoverLeaveCallback) { + matcher.hoverLeaveCallback(); + } + })); + }; + Linkifier.TIME_BEFORE_LINKIFY = 200; + return Linkifier; +}(EventEmitter_1.EventEmitter)); +exports.Linkifier = Linkifier; + + + +},{"./EventEmitter":7,"./Types":14,"./input/MouseZoneManager":17}],10:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var EscapeSequences_1 = require("./EscapeSequences"); +var Charsets_1 = require("./Charsets"); +var normalStateHandler = {}; +normalStateHandler[EscapeSequences_1.C0.BEL] = function (parser, handler) { return handler.bell(); }; +normalStateHandler[EscapeSequences_1.C0.LF] = function (parser, handler) { return handler.lineFeed(); }; +normalStateHandler[EscapeSequences_1.C0.VT] = normalStateHandler[EscapeSequences_1.C0.LF]; +normalStateHandler[EscapeSequences_1.C0.FF] = normalStateHandler[EscapeSequences_1.C0.LF]; +normalStateHandler[EscapeSequences_1.C0.CR] = function (parser, handler) { return handler.carriageReturn(); }; +normalStateHandler[EscapeSequences_1.C0.BS] = function (parser, handler) { return handler.backspace(); }; +normalStateHandler[EscapeSequences_1.C0.HT] = function (parser, handler) { return handler.tab(); }; +normalStateHandler[EscapeSequences_1.C0.SO] = function (parser, handler) { return handler.shiftOut(); }; +normalStateHandler[EscapeSequences_1.C0.SI] = function (parser, handler) { return handler.shiftIn(); }; +normalStateHandler[EscapeSequences_1.C0.ESC] = function (parser, handler) { return parser.setState(ParserState.ESCAPED); }; +var escapedStateHandler = {}; +escapedStateHandler['['] = function (parser, terminal) { + terminal.params = []; + terminal.currentParam = 0; + parser.setState(ParserState.CSI_PARAM); +}; +escapedStateHandler[']'] = function (parser, terminal) { + terminal.params = []; + terminal.currentParam = 0; + parser.setState(ParserState.OSC); +}; +escapedStateHandler['P'] = function (parser, terminal) { + terminal.params = []; + terminal.currentParam = 0; + parser.setState(ParserState.DCS); +}; +escapedStateHandler['_'] = function (parser, terminal) { + parser.setState(ParserState.IGNORE); +}; +escapedStateHandler['^'] = function (parser, terminal) { + parser.setState(ParserState.IGNORE); +}; +escapedStateHandler['c'] = function (parser, terminal) { + terminal.reset(); +}; +escapedStateHandler['E'] = function (parser, terminal) { + terminal.buffer.x = 0; + terminal.index(); + parser.setState(ParserState.NORMAL); +}; +escapedStateHandler['D'] = function (parser, terminal) { + terminal.index(); + parser.setState(ParserState.NORMAL); +}; +escapedStateHandler['M'] = function (parser, terminal) { + terminal.reverseIndex(); + parser.setState(ParserState.NORMAL); +}; +escapedStateHandler['%'] = function (parser, terminal) { + terminal.setgLevel(0); + terminal.setgCharset(0, Charsets_1.DEFAULT_CHARSET); + parser.setState(ParserState.NORMAL); + parser.skipNextChar(); +}; +escapedStateHandler[EscapeSequences_1.C0.CAN] = function (parser) { return parser.setState(ParserState.NORMAL); }; +var csiParamStateHandler = {}; +csiParamStateHandler['?'] = function (parser) { return parser.setPrefix('?'); }; +csiParamStateHandler['>'] = function (parser) { return parser.setPrefix('>'); }; +csiParamStateHandler['!'] = function (parser) { return parser.setPrefix('!'); }; +csiParamStateHandler['0'] = function (parser) { return parser.setParam(parser.getParam() * 10); }; +csiParamStateHandler['1'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 1); }; +csiParamStateHandler['2'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 2); }; +csiParamStateHandler['3'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 3); }; +csiParamStateHandler['4'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 4); }; +csiParamStateHandler['5'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 5); }; +csiParamStateHandler['6'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 6); }; +csiParamStateHandler['7'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 7); }; +csiParamStateHandler['8'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 8); }; +csiParamStateHandler['9'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 9); }; +csiParamStateHandler['$'] = function (parser) { return parser.setPostfix('$'); }; +csiParamStateHandler['"'] = function (parser) { return parser.setPostfix('"'); }; +csiParamStateHandler[' '] = function (parser) { return parser.setPostfix(' '); }; +csiParamStateHandler['\''] = function (parser) { return parser.setPostfix('\''); }; +csiParamStateHandler[';'] = function (parser) { return parser.finalizeParam(); }; +csiParamStateHandler[EscapeSequences_1.C0.CAN] = function (parser) { return parser.setState(ParserState.NORMAL); }; +var csiStateHandler = {}; +csiStateHandler['@'] = function (handler, params, prefix) { return handler.insertChars(params); }; +csiStateHandler['A'] = function (handler, params, prefix) { return handler.cursorUp(params); }; +csiStateHandler['B'] = function (handler, params, prefix) { return handler.cursorDown(params); }; +csiStateHandler['C'] = function (handler, params, prefix) { return handler.cursorForward(params); }; +csiStateHandler['D'] = function (handler, params, prefix) { return handler.cursorBackward(params); }; +csiStateHandler['E'] = function (handler, params, prefix) { return handler.cursorNextLine(params); }; +csiStateHandler['F'] = function (handler, params, prefix) { return handler.cursorPrecedingLine(params); }; +csiStateHandler['G'] = function (handler, params, prefix) { return handler.cursorCharAbsolute(params); }; +csiStateHandler['H'] = function (handler, params, prefix) { return handler.cursorPosition(params); }; +csiStateHandler['I'] = function (handler, params, prefix) { return handler.cursorForwardTab(params); }; +csiStateHandler['J'] = function (handler, params, prefix) { return handler.eraseInDisplay(params); }; +csiStateHandler['K'] = function (handler, params, prefix) { return handler.eraseInLine(params); }; +csiStateHandler['L'] = function (handler, params, prefix) { return handler.insertLines(params); }; +csiStateHandler['M'] = function (handler, params, prefix) { return handler.deleteLines(params); }; +csiStateHandler['P'] = function (handler, params, prefix) { return handler.deleteChars(params); }; +csiStateHandler['S'] = function (handler, params, prefix) { return handler.scrollUp(params); }; +csiStateHandler['T'] = function (handler, params, prefix) { + if (params.length < 2 && !prefix) { + handler.scrollDown(params); + } +}; +csiStateHandler['X'] = function (handler, params, prefix) { return handler.eraseChars(params); }; +csiStateHandler['Z'] = function (handler, params, prefix) { return handler.cursorBackwardTab(params); }; +csiStateHandler['`'] = function (handler, params, prefix) { return handler.charPosAbsolute(params); }; +csiStateHandler['a'] = function (handler, params, prefix) { return handler.HPositionRelative(params); }; +csiStateHandler['b'] = function (handler, params, prefix) { return handler.repeatPrecedingCharacter(params); }; +csiStateHandler['c'] = function (handler, params, prefix) { return handler.sendDeviceAttributes(params); }; +csiStateHandler['d'] = function (handler, params, prefix) { return handler.linePosAbsolute(params); }; +csiStateHandler['e'] = function (handler, params, prefix) { return handler.VPositionRelative(params); }; +csiStateHandler['f'] = function (handler, params, prefix) { return handler.HVPosition(params); }; +csiStateHandler['g'] = function (handler, params, prefix) { return handler.tabClear(params); }; +csiStateHandler['h'] = function (handler, params, prefix) { return handler.setMode(params); }; +csiStateHandler['l'] = function (handler, params, prefix) { return handler.resetMode(params); }; +csiStateHandler['m'] = function (handler, params, prefix) { return handler.charAttributes(params); }; +csiStateHandler['n'] = function (handler, params, prefix) { return handler.deviceStatus(params); }; +csiStateHandler['p'] = function (handler, params, prefix) { + switch (prefix) { + case '!': + handler.softReset(params); + break; + } +}; +csiStateHandler['q'] = function (handler, params, prefix, postfix) { + if (postfix === ' ') { + handler.setCursorStyle(params); + } +}; +csiStateHandler['r'] = function (handler, params) { return handler.setScrollRegion(params); }; +csiStateHandler['s'] = function (handler, params) { return handler.saveCursor(params); }; +csiStateHandler['u'] = function (handler, params) { return handler.restoreCursor(params); }; +csiStateHandler[EscapeSequences_1.C0.CAN] = function (handler, params, prefix, postfix, parser) { return parser.setState(ParserState.NORMAL); }; +var ParserState; +(function (ParserState) { + ParserState[ParserState["NORMAL"] = 0] = "NORMAL"; + ParserState[ParserState["ESCAPED"] = 1] = "ESCAPED"; + ParserState[ParserState["CSI_PARAM"] = 2] = "CSI_PARAM"; + ParserState[ParserState["CSI"] = 3] = "CSI"; + ParserState[ParserState["OSC"] = 4] = "OSC"; + ParserState[ParserState["CHARSET"] = 5] = "CHARSET"; + ParserState[ParserState["DCS"] = 6] = "DCS"; + ParserState[ParserState["IGNORE"] = 7] = "IGNORE"; +})(ParserState = exports.ParserState || (exports.ParserState = {})); +var Parser = (function () { + function Parser(_inputHandler, _terminal) { + this._inputHandler = _inputHandler; + this._terminal = _terminal; + this._state = ParserState.NORMAL; + } + Parser.prototype.parse = function (data) { + var l = data.length; + var j; + var cs; + var ch; + var code; + var low; + var cursorStartX = this._terminal.buffer.x; + var cursorStartY = this._terminal.buffer.y; + if (this._terminal.debug) { + this._terminal.log('data: ' + data); + } + this._position = 0; + if (this._terminal.surrogate_high) { + data = this._terminal.surrogate_high + data; + this._terminal.surrogate_high = ''; + } + for (; this._position < l; this._position++) { + ch = data[this._position]; + code = data.charCodeAt(this._position); + if (0xD800 <= code && code <= 0xDBFF) { + low = data.charCodeAt(this._position + 1); + if (isNaN(low)) { + this._terminal.surrogate_high = ch; + continue; + } + code = ((code - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000; + ch += data.charAt(this._position + 1); + } + if (0xDC00 <= code && code <= 0xDFFF) + continue; + switch (this._state) { + case ParserState.NORMAL: + if (ch in normalStateHandler) { + normalStateHandler[ch](this, this._inputHandler); + } + else { + this._inputHandler.addChar(ch, code); + } + break; + case ParserState.ESCAPED: + if (ch in escapedStateHandler) { + escapedStateHandler[ch](this, this._terminal); + break; + } + switch (ch) { + case '(': + case ')': + case '*': + case '+': + case '-': + case '.': + switch (ch) { + case '(': + this._terminal.gcharset = 0; + break; + case ')': + this._terminal.gcharset = 1; + break; + case '*': + this._terminal.gcharset = 2; + break; + case '+': + this._terminal.gcharset = 3; + break; + case '-': + this._terminal.gcharset = 1; + break; + case '.': + this._terminal.gcharset = 2; + break; + } + this._state = ParserState.CHARSET; + break; + case '/': + this._terminal.gcharset = 3; + this._state = ParserState.CHARSET; + this._position--; + break; + case 'N': + break; + case 'O': + break; + case 'n': + this._terminal.setgLevel(2); + break; + case 'o': + this._terminal.setgLevel(3); + break; + case '|': + this._terminal.setgLevel(3); + break; + case '}': + this._terminal.setgLevel(2); + break; + case '~': + this._terminal.setgLevel(1); + break; + case '7': + this._inputHandler.saveCursor(); + this._state = ParserState.NORMAL; + break; + case '8': + this._inputHandler.restoreCursor(); + this._state = ParserState.NORMAL; + break; + case '#': + this._state = ParserState.NORMAL; + this._position++; + break; + case 'H': + this._terminal.tabSet(); + this._state = ParserState.NORMAL; + break; + case '=': + this._terminal.log('Serial port requested application keypad.'); + this._terminal.applicationKeypad = true; + if (this._terminal.viewport) { + this._terminal.viewport.syncScrollArea(); + } + this._state = ParserState.NORMAL; + break; + case '>': + this._terminal.log('Switching back to normal keypad.'); + this._terminal.applicationKeypad = false; + if (this._terminal.viewport) { + this._terminal.viewport.syncScrollArea(); + } + this._state = ParserState.NORMAL; + break; + default: + this._state = ParserState.NORMAL; + this._terminal.error('Unknown ESC control: %s.', ch); + break; + } + break; + case ParserState.CHARSET: + if (ch in Charsets_1.CHARSETS) { + cs = Charsets_1.CHARSETS[ch]; + if (ch === '/') { + this.skipNextChar(); + } + } + else { + cs = Charsets_1.DEFAULT_CHARSET; + } + this._terminal.setgCharset(this._terminal.gcharset, cs); + this._terminal.gcharset = null; + this._state = ParserState.NORMAL; + break; + case ParserState.OSC: + if (ch === EscapeSequences_1.C0.ESC || ch === EscapeSequences_1.C0.BEL) { + if (ch === EscapeSequences_1.C0.ESC) + this._position++; + this._terminal.params.push(this._terminal.currentParam); + switch (this._terminal.params[0]) { + case 0: + case 1: + case 2: + if (this._terminal.params[1]) { + this._terminal.title = this._terminal.params[1]; + this._terminal.handleTitle(this._terminal.title); + } + break; + case 3: + break; + case 4: + case 5: + break; + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + break; + case 46: + break; + case 50: + break; + case 51: + break; + case 52: + break; + case 104: + case 105: + case 110: + case 111: + case 112: + case 113: + case 114: + case 115: + case 116: + case 117: + case 118: + break; + } + this._terminal.params = []; + this._terminal.currentParam = 0; + this._state = ParserState.NORMAL; + } + else { + if (!this._terminal.params.length) { + if (ch >= '0' && ch <= '9') { + this._terminal.currentParam = + this._terminal.currentParam * 10 + ch.charCodeAt(0) - 48; + } + else if (ch === ';') { + this._terminal.params.push(this._terminal.currentParam); + this._terminal.currentParam = ''; + } + } + else { + this._terminal.currentParam += ch; + } + } + break; + case ParserState.CSI_PARAM: + if (ch in csiParamStateHandler) { + csiParamStateHandler[ch](this); + break; + } + this.finalizeParam(); + this._state = ParserState.CSI; + case ParserState.CSI: + if (ch in csiStateHandler) { + if (this._terminal.debug) { + this._terminal.log("CSI " + (this._terminal.prefix ? this._terminal.prefix : '') + " " + (this._terminal.params ? this._terminal.params.join(';') : '') + " " + (this._terminal.postfix ? this._terminal.postfix : '') + " " + ch); + } + csiStateHandler[ch](this._inputHandler, this._terminal.params, this._terminal.prefix, this._terminal.postfix, this); + } + else { + this._terminal.error('Unknown CSI code: %s.', ch); + } + this._state = ParserState.NORMAL; + this._terminal.prefix = ''; + this._terminal.postfix = ''; + break; + case ParserState.DCS: + if (ch === EscapeSequences_1.C0.ESC || ch === EscapeSequences_1.C0.BEL) { + if (ch === EscapeSequences_1.C0.ESC) + this._position++; + var pt = void 0; + var valid = void 0; + switch (this._terminal.prefix) { + case '': + break; + case '$q': + pt = this._terminal.currentParam; + valid = false; + switch (pt) { + case '"q': + pt = '0"q'; + break; + case '"p': + pt = '61"p'; + break; + case 'r': + pt = '' + + (this._terminal.buffer.scrollTop + 1) + + ';' + + (this._terminal.buffer.scrollBottom + 1) + + 'r'; + break; + case 'm': + pt = '0m'; + break; + default: + this._terminal.error('Unknown DCS Pt: %s.', pt); + pt = ''; + break; + } + this._terminal.send(EscapeSequences_1.C0.ESC + 'P' + +valid + '$r' + pt + EscapeSequences_1.C0.ESC + '\\'); + break; + case '+p': + break; + case '+q': + pt = this._terminal.currentParam; + valid = false; + this._terminal.send(EscapeSequences_1.C0.ESC + 'P' + +valid + '+r' + pt + EscapeSequences_1.C0.ESC + '\\'); + break; + default: + this._terminal.error('Unknown DCS prefix: %s.', this._terminal.prefix); + break; + } + this._terminal.currentParam = 0; + this._terminal.prefix = ''; + this._state = ParserState.NORMAL; + } + else if (!this._terminal.currentParam) { + if (!this._terminal.prefix && ch !== '$' && ch !== '+') { + this._terminal.currentParam = ch; + } + else if (this._terminal.prefix.length === 2) { + this._terminal.currentParam = ch; + } + else { + this._terminal.prefix += ch; + } + } + else { + this._terminal.currentParam += ch; + } + break; + case ParserState.IGNORE: + if (ch === EscapeSequences_1.C0.ESC || ch === EscapeSequences_1.C0.BEL) { + if (ch === EscapeSequences_1.C0.ESC) + this._position++; + this._state = ParserState.NORMAL; + } + break; + } + } + if (this._terminal.buffer.x !== cursorStartX || this._terminal.buffer.y !== cursorStartY) { + this._terminal.emit('cursormove'); + } + return this._state; + }; + Parser.prototype.setState = function (state) { + this._state = state; + }; + Parser.prototype.setPrefix = function (prefix) { + this._terminal.prefix = prefix; + }; + Parser.prototype.setPostfix = function (postfix) { + this._terminal.postfix = postfix; + }; + Parser.prototype.setParam = function (param) { + this._terminal.currentParam = param; + }; + Parser.prototype.getParam = function () { + return this._terminal.currentParam; + }; + Parser.prototype.finalizeParam = function () { + this._terminal.params.push(this._terminal.currentParam); + this._terminal.currentParam = 0; + }; + Parser.prototype.skipNextChar = function () { + this._position++; + }; + return Parser; +}()); +exports.Parser = Parser; + + + +},{"./Charsets":4,"./EscapeSequences":6}],11:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var MouseHelper_1 = require("./utils/MouseHelper"); +var Browser = require("./utils/Browser"); +var EventEmitter_1 = require("./EventEmitter"); +var SelectionModel_1 = require("./SelectionModel"); +var Buffer_1 = require("./Buffer"); +var DRAG_SCROLL_MAX_THRESHOLD = 50; +var DRAG_SCROLL_MAX_SPEED = 15; +var DRAG_SCROLL_INTERVAL = 50; +var WORD_SEPARATORS = ' ()[]{}\'"'; +var NON_BREAKING_SPACE_CHAR = String.fromCharCode(160); +var ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g'); +var SelectionMode; +(function (SelectionMode) { + SelectionMode[SelectionMode["NORMAL"] = 0] = "NORMAL"; + SelectionMode[SelectionMode["WORD"] = 1] = "WORD"; + SelectionMode[SelectionMode["LINE"] = 2] = "LINE"; +})(SelectionMode || (SelectionMode = {})); +var SelectionManager = (function (_super) { + __extends(SelectionManager, _super); + function SelectionManager(_terminal, _buffer, _charMeasure) { + var _this = _super.call(this) || this; + _this._terminal = _terminal; + _this._buffer = _buffer; + _this._charMeasure = _charMeasure; + _this._enabled = true; + _this._initListeners(); + _this.enable(); + _this._model = new SelectionModel_1.SelectionModel(_terminal); + _this._activeSelectionMode = SelectionMode.NORMAL; + return _this; + } + SelectionManager.prototype._initListeners = function () { + var _this = this; + this._mouseMoveListener = function (event) { return _this._onMouseMove(event); }; + this._mouseUpListener = function (event) { return _this._onMouseUp(event); }; + this._buffer.lines.on('trim', function (amount) { return _this._onTrim(amount); }); + }; + SelectionManager.prototype.disable = function () { + this.clearSelection(); + this._enabled = false; + }; + SelectionManager.prototype.enable = function () { + this._enabled = true; + }; + SelectionManager.prototype.setBuffer = function (buffer) { + this._buffer = buffer; + this.clearSelection(); + }; + Object.defineProperty(SelectionManager.prototype, "selectionStart", { + get: function () { return this._model.finalSelectionStart; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SelectionManager.prototype, "selectionEnd", { + get: function () { return this._model.finalSelectionEnd; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SelectionManager.prototype, "hasSelection", { + get: function () { + var start = this._model.finalSelectionStart; + var end = this._model.finalSelectionEnd; + if (!start || !end) { + return false; + } + return start[0] !== end[0] || start[1] !== end[1]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SelectionManager.prototype, "selectionText", { + get: function () { + var start = this._model.finalSelectionStart; + var end = this._model.finalSelectionEnd; + if (!start || !end) { + return ''; + } + var startRowEndCol = start[1] === end[1] ? end[0] : null; + var result = []; + result.push(this._buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol)); + for (var i = start[1] + 1; i <= end[1] - 1; i++) { + var bufferLine = this._buffer.lines.get(i); + var lineText = this._buffer.translateBufferLineToString(i, true); + if (bufferLine.isWrapped) { + result[result.length - 1] += lineText; + } + else { + result.push(lineText); + } + } + if (start[1] !== end[1]) { + var bufferLine = this._buffer.lines.get(end[1]); + var lineText = this._buffer.translateBufferLineToString(end[1], true, 0, end[0]); + if (bufferLine.isWrapped) { + result[result.length - 1] += lineText; + } + else { + result.push(lineText); + } + } + var formattedResult = result.map(function (line) { + return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' '); + }).join(Browser.isMSWindows ? '\r\n' : '\n'); + return formattedResult; + }, + enumerable: true, + configurable: true + }); + SelectionManager.prototype.clearSelection = function () { + this._model.clearSelection(); + this._removeMouseDownListeners(); + this.refresh(); + }; + SelectionManager.prototype.refresh = function (isNewSelection) { + var _this = this; + if (!this._refreshAnimationFrame) { + this._refreshAnimationFrame = window.requestAnimationFrame(function () { return _this._refresh(); }); + } + if (Browser.isLinux && isNewSelection) { + var selectionText = this.selectionText; + if (selectionText.length) { + this.emit('newselection', this.selectionText); + } + } + }; + SelectionManager.prototype._refresh = function () { + this._refreshAnimationFrame = null; + this.emit('refresh', { start: this._model.finalSelectionStart, end: this._model.finalSelectionEnd }); + }; + SelectionManager.prototype.selectAll = function () { + this._model.isSelectAllActive = true; + this.refresh(); + this.emit('selection'); + }; + SelectionManager.prototype._onTrim = function (amount) { + var needsRefresh = this._model.onTrim(amount); + if (needsRefresh) { + this.refresh(); + } + }; + SelectionManager.prototype._getMouseBufferCoords = function (event) { + var coords = this._terminal.mouseHelper.getCoords(event, this._terminal.element, this._charMeasure, this._terminal.options.lineHeight, this._terminal.cols, this._terminal.rows, true); + if (!coords) { + return null; + } + coords[0]--; + coords[1]--; + coords[1] += this._terminal.buffer.ydisp; + return coords; + }; + SelectionManager.prototype._getMouseEventScrollAmount = function (event) { + var offset = MouseHelper_1.MouseHelper.getCoordsRelativeToElement(event, this._terminal.element)[1]; + var terminalHeight = this._terminal.rows * Math.ceil(this._charMeasure.height * this._terminal.options.lineHeight); + if (offset >= 0 && offset <= terminalHeight) { + return 0; + } + if (offset > terminalHeight) { + offset -= terminalHeight; + } + offset = Math.min(Math.max(offset, -DRAG_SCROLL_MAX_THRESHOLD), DRAG_SCROLL_MAX_THRESHOLD); + offset /= DRAG_SCROLL_MAX_THRESHOLD; + return (offset / Math.abs(offset)) + Math.round(offset * (DRAG_SCROLL_MAX_SPEED - 1)); + }; + SelectionManager.prototype.shouldForceSelection = function (event) { + return Browser.isMac ? event.altKey : event.shiftKey; + }; + SelectionManager.prototype.onMouseDown = function (event) { + if (event.button === 2 && this.hasSelection) { + return; + } + if (event.button !== 0) { + return; + } + if (!this._enabled) { + if (!this.shouldForceSelection(event)) { + return; + } + event.stopPropagation(); + } + event.preventDefault(); + this._dragScrollAmount = 0; + if (this._enabled && event.shiftKey) { + this._onIncrementalClick(event); + } + else { + if (event.detail === 1) { + this._onSingleClick(event); + } + else if (event.detail === 2) { + this._onDoubleClick(event); + } + else if (event.detail === 3) { + this._onTripleClick(event); + } + } + this._addMouseDownListeners(); + this.refresh(true); + }; + SelectionManager.prototype._addMouseDownListeners = function () { + var _this = this; + this._terminal.element.ownerDocument.addEventListener('mousemove', this._mouseMoveListener); + this._terminal.element.ownerDocument.addEventListener('mouseup', this._mouseUpListener); + this._dragScrollIntervalTimer = setInterval(function () { return _this._dragScroll(); }, DRAG_SCROLL_INTERVAL); + }; + SelectionManager.prototype._removeMouseDownListeners = function () { + this._terminal.element.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener); + this._terminal.element.ownerDocument.removeEventListener('mouseup', this._mouseUpListener); + clearInterval(this._dragScrollIntervalTimer); + this._dragScrollIntervalTimer = null; + }; + SelectionManager.prototype._onIncrementalClick = function (event) { + if (this._model.selectionStart) { + this._model.selectionEnd = this._getMouseBufferCoords(event); + } + }; + SelectionManager.prototype._onSingleClick = function (event) { + this._model.selectionStartLength = 0; + this._model.isSelectAllActive = false; + this._activeSelectionMode = SelectionMode.NORMAL; + this._model.selectionStart = this._getMouseBufferCoords(event); + if (!this._model.selectionStart) { + return; + } + this._model.selectionEnd = null; + var line = this._buffer.lines.get(this._model.selectionStart[1]); + if (!line) { + return; + } + if (line.length >= this._model.selectionStart[0]) { + return; + } + var char = line[this._model.selectionStart[0]]; + if (char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) { + this._model.selectionStart[0]++; + } + }; + SelectionManager.prototype._onDoubleClick = function (event) { + var coords = this._getMouseBufferCoords(event); + if (coords) { + this._activeSelectionMode = SelectionMode.WORD; + this._selectWordAt(coords); + } + }; + SelectionManager.prototype._onTripleClick = function (event) { + var coords = this._getMouseBufferCoords(event); + if (coords) { + this._activeSelectionMode = SelectionMode.LINE; + this._selectLineAt(coords[1]); + } + }; + SelectionManager.prototype._onMouseMove = function (event) { + event.stopImmediatePropagation(); + var previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null; + this._model.selectionEnd = this._getMouseBufferCoords(event); + if (!this._model.selectionEnd) { + this.refresh(true); + return; + } + if (this._activeSelectionMode === SelectionMode.LINE) { + if (this._model.selectionEnd[1] < this._model.selectionStart[1]) { + this._model.selectionEnd[0] = 0; + } + else { + this._model.selectionEnd[0] = this._terminal.cols; + } + } + else if (this._activeSelectionMode === SelectionMode.WORD) { + this._selectToWordAt(this._model.selectionEnd); + } + this._dragScrollAmount = this._getMouseEventScrollAmount(event); + if (this._dragScrollAmount > 0) { + this._model.selectionEnd[0] = this._terminal.cols; + } + else if (this._dragScrollAmount < 0) { + this._model.selectionEnd[0] = 0; + } + if (this._model.selectionEnd[1] < this._buffer.lines.length) { + var char = this._buffer.lines.get(this._model.selectionEnd[1])[this._model.selectionEnd[0]]; + if (char && char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) { + this._model.selectionEnd[0]++; + } + } + if (!previousSelectionEnd || + previousSelectionEnd[0] !== this._model.selectionEnd[0] || + previousSelectionEnd[1] !== this._model.selectionEnd[1]) { + this.refresh(true); + } + }; + SelectionManager.prototype._dragScroll = function () { + if (this._dragScrollAmount) { + this._terminal.scrollLines(this._dragScrollAmount, false); + if (this._dragScrollAmount > 0) { + this._model.selectionEnd = [this._terminal.cols - 1, this._terminal.buffer.ydisp + this._terminal.rows]; + } + else { + this._model.selectionEnd = [0, this._terminal.buffer.ydisp]; + } + this.refresh(); + } + }; + SelectionManager.prototype._onMouseUp = function (event) { + this._removeMouseDownListeners(); + if (this.hasSelection) + this.emit('selection'); + }; + SelectionManager.prototype._convertViewportColToCharacterIndex = function (bufferLine, coords) { + var charIndex = coords[0]; + for (var i = 0; coords[0] >= i; i++) { + var char = bufferLine[i]; + if (char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) { + charIndex--; + } + else if (char[Buffer_1.CHAR_DATA_CHAR_INDEX].length > 1 && coords[0] !== i) { + charIndex += char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + } + } + return charIndex; + }; + SelectionManager.prototype.setSelection = function (col, row, length) { + this._model.clearSelection(); + this._removeMouseDownListeners(); + this._model.selectionStart = [col, row]; + this._model.selectionStartLength = length; + this.refresh(); + }; + SelectionManager.prototype._getWordAt = function (coords) { + var bufferLine = this._buffer.lines.get(coords[1]); + if (!bufferLine) { + return null; + } + var line = this._buffer.translateBufferLineToString(coords[1], false); + var startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords); + var endIndex = startIndex; + var charOffset = coords[0] - startIndex; + var leftWideCharCount = 0; + var rightWideCharCount = 0; + var leftLongCharOffset = 0; + var rightLongCharOffset = 0; + if (line.charAt(startIndex) === ' ') { + while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') { + startIndex--; + } + while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') { + endIndex++; + } + } + else { + var startCol = coords[0]; + var endCol = coords[0]; + if (bufferLine[startCol][Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) { + leftWideCharCount++; + startCol--; + } + if (bufferLine[endCol][Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) { + rightWideCharCount++; + endCol++; + } + if (bufferLine[endCol][Buffer_1.CHAR_DATA_CHAR_INDEX].length > 1) { + rightLongCharOffset += bufferLine[endCol][Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + endIndex += bufferLine[endCol][Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + } + while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine[startCol - 1])) { + var char = bufferLine[startCol - 1]; + if (char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) { + leftWideCharCount++; + startCol--; + } + else if (char[Buffer_1.CHAR_DATA_CHAR_INDEX].length > 1) { + leftLongCharOffset += char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + startIndex -= char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + } + startIndex--; + startCol--; + } + while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine[endCol + 1])) { + var char = bufferLine[endCol + 1]; + if (char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) { + rightWideCharCount++; + endCol++; + } + else if (char[Buffer_1.CHAR_DATA_CHAR_INDEX].length > 1) { + rightLongCharOffset += char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + endIndex += char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + } + endIndex++; + endCol++; + } + } + endIndex++; + var start = startIndex + + charOffset + - leftWideCharCount + + leftLongCharOffset; + var length = Math.min(this._terminal.cols, endIndex + - startIndex + + leftWideCharCount + + rightWideCharCount + - leftLongCharOffset + - rightLongCharOffset); + return { start: start, length: length }; + }; + SelectionManager.prototype._selectWordAt = function (coords) { + var wordPosition = this._getWordAt(coords); + if (wordPosition) { + this._model.selectionStart = [wordPosition.start, coords[1]]; + this._model.selectionStartLength = wordPosition.length; + } + }; + SelectionManager.prototype._selectToWordAt = function (coords) { + var wordPosition = this._getWordAt(coords); + if (wordPosition) { + this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : (wordPosition.start + wordPosition.length), coords[1]]; + } + }; + SelectionManager.prototype._isCharWordSeparator = function (charData) { + if (charData[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) { + return false; + } + return WORD_SEPARATORS.indexOf(charData[Buffer_1.CHAR_DATA_CHAR_INDEX]) >= 0; + }; + SelectionManager.prototype._selectLineAt = function (line) { + this._model.selectionStart = [0, line]; + this._model.selectionStartLength = this._terminal.cols; + }; + return SelectionManager; +}(EventEmitter_1.EventEmitter)); +exports.SelectionManager = SelectionManager; + + + +},{"./Buffer":1,"./EventEmitter":7,"./SelectionModel":12,"./utils/Browser":28,"./utils/MouseHelper":32}],12:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var SelectionModel = (function () { + function SelectionModel(_terminal) { + this._terminal = _terminal; + this.clearSelection(); + } + SelectionModel.prototype.clearSelection = function () { + this.selectionStart = null; + this.selectionEnd = null; + this.isSelectAllActive = false; + this.selectionStartLength = 0; + }; + Object.defineProperty(SelectionModel.prototype, "finalSelectionStart", { + get: function () { + if (this.isSelectAllActive) { + return [0, 0]; + } + if (!this.selectionEnd || !this.selectionStart) { + return this.selectionStart; + } + return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SelectionModel.prototype, "finalSelectionEnd", { + get: function () { + if (this.isSelectAllActive) { + return [this._terminal.cols, this._terminal.buffer.ybase + this._terminal.rows - 1]; + } + if (!this.selectionStart) { + return null; + } + if (!this.selectionEnd || this.areSelectionValuesReversed()) { + return [this.selectionStart[0] + this.selectionStartLength, this.selectionStart[1]]; + } + if (this.selectionStartLength) { + if (this.selectionEnd[1] === this.selectionStart[1]) { + return [Math.max(this.selectionStart[0] + this.selectionStartLength, this.selectionEnd[0]), this.selectionEnd[1]]; + } + } + return this.selectionEnd; + }, + enumerable: true, + configurable: true + }); + SelectionModel.prototype.areSelectionValuesReversed = function () { + var start = this.selectionStart; + var end = this.selectionEnd; + if (!start || !end) { + return false; + } + return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]); + }; + SelectionModel.prototype.onTrim = function (amount) { + if (this.selectionStart) { + this.selectionStart[1] -= amount; + } + if (this.selectionEnd) { + this.selectionEnd[1] -= amount; + } + if (this.selectionEnd && this.selectionEnd[1] < 0) { + this.clearSelection(); + return true; + } + if (this.selectionStart && this.selectionStart[1] < 0) { + this.selectionStart[1] = 0; + } + return false; + }; + return SelectionModel; +}()); +exports.SelectionModel = SelectionModel; + + + +},{}],13:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var BufferSet_1 = require("./BufferSet"); +var Buffer_1 = require("./Buffer"); +var CompositionHelper_1 = require("./CompositionHelper"); +var EventEmitter_1 = require("./EventEmitter"); +var Viewport_1 = require("./Viewport"); +var Clipboard_1 = require("./handlers/Clipboard"); +var EscapeSequences_1 = require("./EscapeSequences"); +var InputHandler_1 = require("./InputHandler"); +var Parser_1 = require("./Parser"); +var Renderer_1 = require("./renderer/Renderer"); +var Linkifier_1 = require("./Linkifier"); +var SelectionManager_1 = require("./SelectionManager"); +var CharMeasure_1 = require("./utils/CharMeasure"); +var Browser = require("./utils/Browser"); +var MouseHelper_1 = require("./utils/MouseHelper"); +var Sounds_1 = require("./utils/Sounds"); +var ColorManager_1 = require("./renderer/ColorManager"); +var MouseZoneManager_1 = require("./input/MouseZoneManager"); +var CharAtlas_1 = require("./renderer/CharAtlas"); +var document = (typeof window !== 'undefined') ? window.document : null; +var WRITE_BUFFER_PAUSE_THRESHOLD = 5; +var WRITE_BATCH_SIZE = 300; +var DEFAULT_OPTIONS = { + convertEol: false, + termName: 'xterm', + geometry: [80, 24], + cursorBlink: false, + cursorStyle: 'block', + bellSound: Sounds_1.BellSound, + bellStyle: 'none', + enableBold: true, + fontFamily: 'courier-new, courier, monospace', + fontSize: 15, + lineHeight: 1.0, + letterSpacing: 0, + scrollback: 1000, + screenKeys: false, + debug: false, + cancelEvents: false, + disableStdin: false, + useFlowControl: false, + tabStopWidth: 8, + theme: null +}; +var Terminal = (function (_super) { + __extends(Terminal, _super); + function Terminal(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this) || this; + _this.browser = Browser; + _this.options = options; + _this.setup(); + return _this; + } + Terminal.prototype.setup = function () { + var _this = this; + Object.keys(DEFAULT_OPTIONS).forEach(function (key) { + if (_this.options[key] == null) { + _this.options[key] = DEFAULT_OPTIONS[key]; + } + _this[key] = _this.options[key]; + }); + this.parent = document ? document.body : null; + this.cols = this.options.cols || this.options.geometry[0]; + this.rows = this.options.rows || this.options.geometry[1]; + this.geometry = [this.cols, this.rows]; + if (this.options.handler) { + this.on('data', this.options.handler); + } + this.cursorState = 0; + this.cursorHidden = false; + this.sendDataQueue = ''; + this.customKeyEventHandler = null; + this.applicationKeypad = false; + this.applicationCursor = false; + this.originMode = false; + this.insertMode = false; + this.wraparoundMode = true; + this.bracketedPasteMode = false; + this.charset = null; + this.gcharset = null; + this.glevel = 0; + this.charsets = [null]; + this.readable = true; + this.writable = true; + this.defAttr = (0 << 18) | (257 << 9) | (256 << 0); + this.curAttr = (0 << 18) | (257 << 9) | (256 << 0); + this.params = []; + this.currentParam = 0; + this.prefix = ''; + this.postfix = ''; + this.writeBuffer = []; + this.writeInProgress = false; + this.xoffSentToCatchUp = false; + this.writeStopped = false; + this.surrogate_high = ''; + this.userScrolling = false; + this.inputHandler = new InputHandler_1.InputHandler(this); + this.parser = new Parser_1.Parser(this.inputHandler, this); + this.renderer = this.renderer || null; + this.selectionManager = this.selectionManager || null; + this.linkifier = this.linkifier || new Linkifier_1.Linkifier(this); + this._mouseZoneManager = this._mouseZoneManager || null; + this.buffers = new BufferSet_1.BufferSet(this); + this.buffer = this.buffers.active; + this.buffers.on('activate', function (buffer) { + _this.buffer = buffer; + }); + if (this.selectionManager) { + this.selectionManager.setBuffer(this.buffer); + } + }; + Terminal.prototype.eraseAttr = function () { + return (this.defAttr & ~0x1ff) | (this.curAttr & 0x1ff); + }; + Terminal.prototype.focus = function () { + this.textarea.focus(); + }; + Object.defineProperty(Terminal.prototype, "isFocused", { + get: function () { + return document.activeElement === this.textarea; + }, + enumerable: true, + configurable: true + }); + Terminal.prototype.getOption = function (key) { + if (!(key in DEFAULT_OPTIONS)) { + throw new Error('No option with key "' + key + '"'); + } + if (typeof this.options[key] !== 'undefined') { + return this.options[key]; + } + return this[key]; + }; + Terminal.prototype.setOption = function (key, value) { + if (!(key in DEFAULT_OPTIONS)) { + throw new Error('No option with key "' + key + '"'); + } + switch (key) { + case 'bellStyle': + if (!value) { + value = 'none'; + } + break; + case 'cursorStyle': + if (!value) { + value = 'block'; + } + break; + case 'lineHeight': + if (value < 1) { + console.warn(key + " cannot be less than 1, value: " + value); + return; + } + case 'tabStopWidth': + if (value < 1) { + console.warn(key + " cannot be less than 1, value: " + value); + return; + } + break; + case 'theme': + if (this.renderer) { + this._setTheme(value); + return; + } + break; + case 'scrollback': + value = Math.min(value, Buffer_1.MAX_BUFFER_SIZE); + if (value < 0) { + console.warn(key + " cannot be less than 0, value: " + value); + return; + } + if (this.options[key] !== value) { + var newBufferLength = this.rows + value; + if (this.buffer.lines.length > newBufferLength) { + var amountToTrim = this.buffer.lines.length - newBufferLength; + var needsRefresh = (this.buffer.ydisp - amountToTrim < 0); + this.buffer.lines.trimStart(amountToTrim); + this.buffer.ybase = Math.max(this.buffer.ybase - amountToTrim, 0); + this.buffer.ydisp = Math.max(this.buffer.ydisp - amountToTrim, 0); + if (needsRefresh) { + this.refresh(0, this.rows - 1); + } + } + } + break; + } + this[key] = value; + this.options[key] = value; + switch (key) { + case 'fontFamily': + case 'fontSize': + this.renderer.clear(); + this.charMeasure.measure(this.options); + break; + case 'enableBold': + case 'letterSpacing': + case 'lineHeight': + this.renderer.clear(); + this.renderer.onResize(this.cols, this.rows, false); + this.refresh(0, this.rows - 1); + case 'scrollback': + this.buffers.resize(this.cols, this.rows); + this.viewport.syncScrollArea(); + break; + case 'tabStopWidth': + this.buffers.setupTabStops(); + break; + case 'bellSound': + case 'bellStyle': + this.syncBellSound(); + break; + } + if (this.renderer) { + this.renderer.onOptionsChanged(); + } + }; + Terminal.prototype._onTextAreaFocus = function () { + if (this.sendFocus) { + this.send(EscapeSequences_1.C0.ESC + '[I'); + } + this.element.classList.add('focus'); + this.showCursor(); + this.emit('focus'); + }; + ; + Terminal.prototype.blur = function () { + return this.textarea.blur(); + }; + Terminal.prototype._onTextAreaBlur = function () { + this.refresh(this.buffer.y, this.buffer.y); + if (this.sendFocus) { + this.send(EscapeSequences_1.C0.ESC + '[O'); + } + this.element.classList.remove('focus'); + this.emit('blur'); + }; + Terminal.prototype.initGlobal = function () { + var _this = this; + this.bindKeys(); + on(this.element, 'copy', function (event) { + if (!_this.hasSelection()) { + return; + } + Clipboard_1.copyHandler(event, _this, _this.selectionManager); + }); + var pasteHandlerWrapper = function (event) { return Clipboard_1.pasteHandler(event, _this); }; + on(this.textarea, 'paste', pasteHandlerWrapper); + on(this.element, 'paste', pasteHandlerWrapper); + if (Browser.isFirefox) { + on(this.element, 'mousedown', function (event) { + if (event.button === 2) { + Clipboard_1.rightClickHandler(event, _this.textarea, _this.selectionManager); + } + }); + } + else { + on(this.element, 'contextmenu', function (event) { + Clipboard_1.rightClickHandler(event, _this.textarea, _this.selectionManager); + }); + } + if (Browser.isLinux) { + on(this.element, 'auxclick', function (event) { + if (event.button === 1) { + Clipboard_1.moveTextAreaUnderMouseCursor(event, _this.textarea); + } + }); + } + }; + Terminal.prototype.bindKeys = function () { + var _this = this; + var self = this; + on(this.element, 'keydown', function (ev) { + if (document.activeElement !== this) { + return; + } + self._keyDown(ev); + }, true); + on(this.element, 'keypress', function (ev) { + if (document.activeElement !== this) { + return; + } + self._keyPress(ev); + }, true); + on(this.element, 'keyup', function (ev) { + if (!wasMondifierKeyOnlyEvent(ev)) { + _this.focus(); + } + }, true); + on(this.textarea, 'keydown', function (ev) { + _this._keyDown(ev); + }, true); + on(this.textarea, 'keypress', function (ev) { + _this._keyPress(ev); + _this.textarea.value = ''; + }, true); + on(this.textarea, 'compositionstart', function () { return _this.compositionHelper.compositionstart(); }); + on(this.textarea, 'compositionupdate', function (e) { return _this.compositionHelper.compositionupdate(e); }); + on(this.textarea, 'compositionend', function () { return _this.compositionHelper.compositionend(); }); + this.on('refresh', function () { return _this.compositionHelper.updateCompositionElements(); }); + this.on('refresh', function (data) { return _this.queueLinkification(data.start, data.end); }); + }; + Terminal.prototype.open = function (parent) { + var _this = this; + var i = 0; + var div; + this.parent = parent || this.parent; + if (!this.parent) { + throw new Error('Terminal requires a parent element.'); + } + this.context = this.parent.ownerDocument.defaultView; + this.document = this.parent.ownerDocument; + this.body = this.document.body; + CharAtlas_1.initialize(this.document); + this.element = this.document.createElement('div'); + this.element.classList.add('terminal'); + this.element.classList.add('xterm'); + this.element.setAttribute('tabindex', '0'); + this.viewportElement = document.createElement('div'); + this.viewportElement.classList.add('xterm-viewport'); + this.element.appendChild(this.viewportElement); + this.viewportScrollArea = document.createElement('div'); + this.viewportScrollArea.classList.add('xterm-scroll-area'); + this.viewportElement.appendChild(this.viewportScrollArea); + this.syncBellSound(); + this._mouseZoneManager = new MouseZoneManager_1.MouseZoneManager(this); + this.on('scroll', function () { return _this._mouseZoneManager.clearAll(); }); + this.linkifier.attachToDom(this._mouseZoneManager); + this.helperContainer = document.createElement('div'); + this.helperContainer.classList.add('xterm-helpers'); + this.element.appendChild(this.helperContainer); + this.textarea = document.createElement('textarea'); + this.textarea.classList.add('xterm-helper-textarea'); + this.textarea.setAttribute('autocorrect', 'off'); + this.textarea.setAttribute('autocapitalize', 'off'); + this.textarea.setAttribute('spellcheck', 'false'); + this.textarea.tabIndex = 0; + this.textarea.addEventListener('focus', function () { return _this._onTextAreaFocus(); }); + this.textarea.addEventListener('blur', function () { return _this._onTextAreaBlur(); }); + this.helperContainer.appendChild(this.textarea); + this.compositionView = document.createElement('div'); + this.compositionView.classList.add('composition-view'); + this.compositionHelper = new CompositionHelper_1.CompositionHelper(this.textarea, this.compositionView, this); + this.helperContainer.appendChild(this.compositionView); + this.charSizeStyleElement = document.createElement('style'); + this.helperContainer.appendChild(this.charSizeStyleElement); + this.parent.appendChild(this.element); + this.charMeasure = new CharMeasure_1.CharMeasure(document, this.helperContainer); + this.renderer = new Renderer_1.Renderer(this, this.options.theme); + this.options.theme = null; + this.viewport = new Viewport_1.Viewport(this, this.viewportElement, this.viewportScrollArea, this.charMeasure); + this.viewport.onThemeChanged(this.renderer.colorManager.colors); + this.on('cursormove', function () { return _this.renderer.onCursorMove(); }); + this.on('resize', function () { return _this.renderer.onResize(_this.cols, _this.rows, false); }); + this.on('blur', function () { return _this.renderer.onBlur(); }); + this.on('focus', function () { return _this.renderer.onFocus(); }); + window.addEventListener('resize', function () { return _this.renderer.onWindowResize(window.devicePixelRatio); }); + this.charMeasure.on('charsizechanged', function () { return _this.renderer.onResize(_this.cols, _this.rows, true); }); + this.renderer.on('resize', function (dimensions) { return _this.viewport.syncScrollArea(); }); + this.selectionManager = new SelectionManager_1.SelectionManager(this, this.buffer, this.charMeasure); + this.element.addEventListener('mousedown', function (e) { return _this.selectionManager.onMouseDown(e); }); + this.selectionManager.on('refresh', function (data) { return _this.renderer.onSelectionChanged(data.start, data.end); }); + this.selectionManager.on('newselection', function (text) { + _this.textarea.value = text; + _this.textarea.focus(); + _this.textarea.select(); + }); + this.on('scroll', function () { + _this.viewport.syncScrollArea(); + _this.selectionManager.refresh(); + }); + this.viewportElement.addEventListener('scroll', function () { return _this.selectionManager.refresh(); }); + this.mouseHelper = new MouseHelper_1.MouseHelper(this.renderer); + this.charMeasure.measure(this.options); + this.refresh(0, this.rows - 1); + this.initGlobal(); + this.bindMouse(); + }; + Terminal.prototype._setTheme = function (theme) { + var colors = this.renderer.setTheme(theme); + if (this.viewport) { + this.viewport.onThemeChanged(colors); + } + }; + Terminal.loadAddon = function (addon, callback) { + if (typeof exports === 'object' && typeof module === 'object') { + return require('./addons/' + addon + '/' + addon); + } + else if (typeof define === 'function') { + return require(['./addons/' + addon + '/' + addon], callback); + } + else { + console.error('Cannot load a module without a CommonJS or RequireJS environment.'); + return false; + } + }; + Terminal.prototype.bindMouse = function () { + var _this = this; + var el = this.element; + var self = this; + var pressed = 32; + function sendButton(ev) { + var button; + var pos; + button = getButton(ev); + pos = self.mouseHelper.getRawByteCoords(ev, self.element, self.charMeasure, self.options.lineHeight, self.cols, self.rows); + if (!pos) + return; + sendEvent(button, pos); + switch (ev.overrideType || ev.type) { + case 'mousedown': + pressed = button; + break; + case 'mouseup': + pressed = 32; + break; + case 'wheel': + break; + } + } + function sendMove(ev) { + var button = pressed; + var pos = self.mouseHelper.getRawByteCoords(ev, self.element, self.charMeasure, self.options.lineHeight, self.cols, self.rows); + if (!pos) + return; + button += 32; + sendEvent(button, pos); + } + function encode(data, ch) { + if (!self.utfMouse) { + if (ch === 255) { + data.push(0); + return; + } + if (ch > 127) + ch = 127; + data.push(ch); + } + else { + if (ch === 2047) { + data.push(0); + return; + } + if (ch < 127) { + data.push(ch); + } + else { + if (ch > 2047) + ch = 2047; + data.push(0xC0 | (ch >> 6)); + data.push(0x80 | (ch & 0x3F)); + } + } + } + function sendEvent(button, pos) { + if (self.vt300Mouse) { + button &= 3; + pos.x -= 32; + pos.y -= 32; + var data_1 = EscapeSequences_1.C0.ESC + '[24'; + if (button === 0) + data_1 += '1'; + else if (button === 1) + data_1 += '3'; + else if (button === 2) + data_1 += '5'; + else if (button === 3) + return; + else + data_1 += '0'; + data_1 += '~[' + pos.x + ',' + pos.y + ']\r'; + self.send(data_1); + return; + } + if (self.decLocator) { + button &= 3; + pos.x -= 32; + pos.y -= 32; + if (button === 0) + button = 2; + else if (button === 1) + button = 4; + else if (button === 2) + button = 6; + else if (button === 3) + button = 3; + self.send(EscapeSequences_1.C0.ESC + '[' + + button + + ';' + + (button === 3 ? 4 : 0) + + ';' + + pos.y + + ';' + + pos.x + + ';' + + pos.page || 0 + + '&w'); + return; + } + if (self.urxvtMouse) { + pos.x -= 32; + pos.y -= 32; + pos.x++; + pos.y++; + self.send(EscapeSequences_1.C0.ESC + '[' + button + ';' + pos.x + ';' + pos.y + 'M'); + return; + } + if (self.sgrMouse) { + pos.x -= 32; + pos.y -= 32; + self.send(EscapeSequences_1.C0.ESC + '[<' + + (((button & 3) === 3 ? button & ~3 : button) - 32) + + ';' + + pos.x + + ';' + + pos.y + + ((button & 3) === 3 ? 'm' : 'M')); + return; + } + var data = []; + encode(data, button); + encode(data, pos.x); + encode(data, pos.y); + self.send(EscapeSequences_1.C0.ESC + '[M' + String.fromCharCode.apply(String, data)); + } + function getButton(ev) { + var button; + var shift; + var meta; + var ctrl; + var mod; + switch (ev.overrideType || ev.type) { + case 'mousedown': + button = ev.button != null + ? +ev.button + : ev.which != null + ? ev.which - 1 + : null; + if (Browser.isMSIE) { + button = button === 1 ? 0 : button === 4 ? 1 : button; + } + break; + case 'mouseup': + button = 3; + break; + case 'DOMMouseScroll': + button = ev.detail < 0 + ? 64 + : 65; + break; + case 'wheel': + button = ev.wheelDeltaY > 0 + ? 64 + : 65; + break; + } + shift = ev.shiftKey ? 4 : 0; + meta = ev.metaKey ? 8 : 0; + ctrl = ev.ctrlKey ? 16 : 0; + mod = shift | meta | ctrl; + if (self.vt200Mouse) { + mod &= ctrl; + } + else if (!self.normalMouse) { + mod = 0; + } + button = (32 + (mod << 2)) + button; + return button; + } + on(el, 'mousedown', function (ev) { + ev.preventDefault(); + _this.focus(); + if (!_this.mouseEvents || _this.selectionManager.shouldForceSelection(ev)) { + return; + } + sendButton(ev); + if (_this.vt200Mouse) { + ev.overrideType = 'mouseup'; + sendButton(ev); + return _this.cancel(ev); + } + if (_this.normalMouse) + on(_this.document, 'mousemove', sendMove); + if (!_this.x10Mouse) { + var handler_1 = function (ev) { + sendButton(ev); + if (_this.normalMouse) + off(_this.document, 'mousemove', sendMove); + off(_this.document, 'mouseup', handler_1); + return _this.cancel(ev); + }; + on(_this.document, 'mouseup', handler_1); + } + return _this.cancel(ev); + }); + on(el, 'wheel', function (ev) { + if (!_this.mouseEvents) + return; + if (_this.x10Mouse || _this.vt300Mouse || _this.decLocator) + return; + sendButton(ev); + ev.preventDefault(); + }); + on(el, 'wheel', function (ev) { + if (_this.mouseEvents) + return; + _this.viewport.onWheel(ev); + return _this.cancel(ev); + }); + on(el, 'touchstart', function (ev) { + if (_this.mouseEvents) + return; + _this.viewport.onTouchStart(ev); + return _this.cancel(ev); + }); + on(el, 'touchmove', function (ev) { + if (_this.mouseEvents) + return; + _this.viewport.onTouchMove(ev); + return _this.cancel(ev); + }); + }; + Terminal.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.readable = false; + this.writable = false; + this.handler = function () { }; + this.write = function () { }; + if (this.element && this.element.parentNode) { + this.element.parentNode.removeChild(this.element); + } + }; + Terminal.prototype.refresh = function (start, end) { + if (this.renderer) { + this.renderer.queueRefresh(start, end); + } + }; + Terminal.prototype.queueLinkification = function (start, end) { + if (this.linkifier) { + this.linkifier.linkifyRows(start, end); + } + }; + Terminal.prototype.showCursor = function () { + if (!this.cursorState) { + this.cursorState = 1; + this.refresh(this.buffer.y, this.buffer.y); + } + }; + Terminal.prototype.scroll = function (isWrapped) { + var newLine = this.blankLine(undefined, isWrapped); + var topRow = this.buffer.ybase + this.buffer.scrollTop; + var bottomRow = this.buffer.ybase + this.buffer.scrollBottom; + if (this.buffer.scrollTop === 0) { + var willBufferBeTrimmed = this.buffer.lines.length === this.buffer.lines.maxLength; + if (bottomRow === this.buffer.lines.length - 1) { + this.buffer.lines.push(newLine); + } + else { + this.buffer.lines.splice(bottomRow + 1, 0, newLine); + } + if (!willBufferBeTrimmed) { + this.buffer.ybase++; + if (!this.userScrolling) { + this.buffer.ydisp++; + } + } + else { + if (this.userScrolling) { + this.buffer.ydisp = Math.max(this.buffer.ydisp - 1, 0); + } + } + } + else { + var scrollRegionHeight = bottomRow - topRow + 1; + this.buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1); + this.buffer.lines.set(bottomRow, newLine); + } + if (!this.userScrolling) { + this.buffer.ydisp = this.buffer.ybase; + } + this.updateRange(this.buffer.scrollTop); + this.updateRange(this.buffer.scrollBottom); + this.emit('scroll', this.buffer.ydisp); + }; + Terminal.prototype.scrollLines = function (disp, suppressScrollEvent) { + if (disp < 0) { + if (this.buffer.ydisp === 0) { + return; + } + this.userScrolling = true; + } + else if (disp + this.buffer.ydisp >= this.buffer.ybase) { + this.userScrolling = false; + } + var oldYdisp = this.buffer.ydisp; + this.buffer.ydisp = Math.max(Math.min(this.buffer.ydisp + disp, this.buffer.ybase), 0); + if (oldYdisp === this.buffer.ydisp) { + return; + } + if (!suppressScrollEvent) { + this.emit('scroll', this.buffer.ydisp); + } + this.refresh(0, this.rows - 1); + }; + Terminal.prototype.scrollPages = function (pageCount) { + this.scrollLines(pageCount * (this.rows - 1)); + }; + Terminal.prototype.scrollToTop = function () { + this.scrollLines(-this.buffer.ydisp); + }; + Terminal.prototype.scrollToBottom = function () { + this.scrollLines(this.buffer.ybase - this.buffer.ydisp); + }; + Terminal.prototype.write = function (data) { + var _this = this; + this.writeBuffer.push(data); + if (this.options.useFlowControl && !this.xoffSentToCatchUp && this.writeBuffer.length >= WRITE_BUFFER_PAUSE_THRESHOLD) { + this.send(EscapeSequences_1.C0.DC3); + this.xoffSentToCatchUp = true; + } + if (!this.writeInProgress && this.writeBuffer.length > 0) { + this.writeInProgress = true; + setTimeout(function () { + _this.innerWrite(); + }); + } + }; + Terminal.prototype.innerWrite = function () { + var _this = this; + var writeBatch = this.writeBuffer.splice(0, WRITE_BATCH_SIZE); + while (writeBatch.length > 0) { + var data = writeBatch.shift(); + if (this.xoffSentToCatchUp && writeBatch.length === 0 && this.writeBuffer.length === 0) { + this.send(EscapeSequences_1.C0.DC1); + this.xoffSentToCatchUp = false; + } + this.refreshStart = this.buffer.y; + this.refreshEnd = this.buffer.y; + var state = this.parser.parse(data); + this.parser.setState(state); + this.updateRange(this.buffer.y); + this.refresh(this.refreshStart, this.refreshEnd); + } + if (this.writeBuffer.length > 0) { + setTimeout(function () { return _this.innerWrite(); }, 0); + } + else { + this.writeInProgress = false; + } + }; + Terminal.prototype.writeln = function (data) { + this.write(data + '\r\n'); + }; + Terminal.prototype.attachCustomKeyEventHandler = function (customKeyEventHandler) { + this.customKeyEventHandler = customKeyEventHandler; + }; + Terminal.prototype.setHypertextLinkHandler = function (handler) { + if (!this.linkifier) { + throw new Error('Cannot attach a hypertext link handler before Terminal.open is called'); + } + this.linkifier.setHypertextLinkHandler(handler); + this.refresh(0, this.rows - 1); + }; + Terminal.prototype.setHypertextValidationCallback = function (callback) { + if (!this.linkifier) { + throw new Error('Cannot attach a hypertext validation callback before Terminal.open is called'); + } + this.linkifier.setHypertextValidationCallback(callback); + this.refresh(0, this.rows - 1); + }; + Terminal.prototype.registerLinkMatcher = function (regex, handler, options) { + if (this.linkifier) { + var matcherId = this.linkifier.registerLinkMatcher(regex, handler, options); + this.refresh(0, this.rows - 1); + return matcherId; + } + return 0; + }; + Terminal.prototype.deregisterLinkMatcher = function (matcherId) { + if (this.linkifier) { + if (this.linkifier.deregisterLinkMatcher(matcherId)) { + this.refresh(0, this.rows - 1); + } + } + }; + Terminal.prototype.hasSelection = function () { + return this.selectionManager ? this.selectionManager.hasSelection : false; + }; + Terminal.prototype.getSelection = function () { + return this.selectionManager ? this.selectionManager.selectionText : ''; + }; + Terminal.prototype.clearSelection = function () { + if (this.selectionManager) { + this.selectionManager.clearSelection(); + } + }; + Terminal.prototype.selectAll = function () { + if (this.selectionManager) { + this.selectionManager.selectAll(); + } + }; + Terminal.prototype._keyDown = function (ev) { + if (this.customKeyEventHandler && this.customKeyEventHandler(ev) === false) { + return false; + } + if (!this.compositionHelper.keydown(ev)) { + if (this.buffer.ybase !== this.buffer.ydisp) { + this.scrollToBottom(); + } + return false; + } + var result = this._evaluateKeyEscapeSequence(ev); + if (result.key === EscapeSequences_1.C0.DC3) { + this.writeStopped = true; + } + else if (result.key === EscapeSequences_1.C0.DC1) { + this.writeStopped = false; + } + if (result.scrollLines) { + this.scrollLines(result.scrollLines); + return this.cancel(ev, true); + } + if (isThirdLevelShift(this.browser, ev)) { + return true; + } + if (result.cancel) { + this.cancel(ev, true); + } + if (!result.key) { + return true; + } + this.emit('keydown', ev); + this.emit('key', result.key, ev); + this.showCursor(); + this.handler(result.key); + return this.cancel(ev, true); + }; + Terminal.prototype._evaluateKeyEscapeSequence = function (ev) { + var result = { + cancel: false, + key: undefined, + scrollLines: undefined + }; + var modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0); + switch (ev.keyCode) { + case 0: + if (ev.key === 'UIKeyInputUpArrow') { + if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OA'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[A'; + } + } + else if (ev.key === 'UIKeyInputLeftArrow') { + if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OD'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[D'; + } + } + else if (ev.key === 'UIKeyInputRightArrow') { + if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OC'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[C'; + } + } + else if (ev.key === 'UIKeyInputDownArrow') { + if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OB'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[B'; + } + } + break; + case 8: + if (ev.shiftKey) { + result.key = EscapeSequences_1.C0.BS; + break; + } + result.key = EscapeSequences_1.C0.DEL; + break; + case 9: + if (ev.shiftKey) { + result.key = EscapeSequences_1.C0.ESC + '[Z'; + break; + } + result.key = EscapeSequences_1.C0.HT; + result.cancel = true; + break; + case 13: + result.key = EscapeSequences_1.C0.CR; + result.cancel = true; + break; + case 27: + result.key = EscapeSequences_1.C0.ESC; + result.cancel = true; + break; + case 37: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'D'; + if (result.key === EscapeSequences_1.C0.ESC + '[1;3D') { + result.key = (this.browser.isMac) ? EscapeSequences_1.C0.ESC + 'b' : EscapeSequences_1.C0.ESC + '[1;5D'; + } + } + else if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OD'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[D'; + } + break; + case 39: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'C'; + if (result.key === EscapeSequences_1.C0.ESC + '[1;3C') { + result.key = (this.browser.isMac) ? EscapeSequences_1.C0.ESC + 'f' : EscapeSequences_1.C0.ESC + '[1;5C'; + } + } + else if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OC'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[C'; + } + break; + case 38: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'A'; + if (result.key === EscapeSequences_1.C0.ESC + '[1;3A') { + result.key = EscapeSequences_1.C0.ESC + '[1;5A'; + } + } + else if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OA'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[A'; + } + break; + case 40: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'B'; + if (result.key === EscapeSequences_1.C0.ESC + '[1;3B') { + result.key = EscapeSequences_1.C0.ESC + '[1;5B'; + } + } + else if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OB'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[B'; + } + break; + case 45: + if (!ev.shiftKey && !ev.ctrlKey) { + result.key = EscapeSequences_1.C0.ESC + '[2~'; + } + break; + case 46: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[3;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[3~'; + } + break; + case 36: + if (modifiers) + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'H'; + else if (this.applicationCursor) + result.key = EscapeSequences_1.C0.ESC + 'OH'; + else + result.key = EscapeSequences_1.C0.ESC + '[H'; + break; + case 35: + if (modifiers) + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'F'; + else if (this.applicationCursor) + result.key = EscapeSequences_1.C0.ESC + 'OF'; + else + result.key = EscapeSequences_1.C0.ESC + '[F'; + break; + case 33: + if (ev.shiftKey) { + result.scrollLines = -(this.rows - 1); + } + else { + result.key = EscapeSequences_1.C0.ESC + '[5~'; + } + break; + case 34: + if (ev.shiftKey) { + result.scrollLines = this.rows - 1; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[6~'; + } + break; + case 112: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'P'; + } + else { + result.key = EscapeSequences_1.C0.ESC + 'OP'; + } + break; + case 113: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'Q'; + } + else { + result.key = EscapeSequences_1.C0.ESC + 'OQ'; + } + break; + case 114: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'R'; + } + else { + result.key = EscapeSequences_1.C0.ESC + 'OR'; + } + break; + case 115: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'S'; + } + else { + result.key = EscapeSequences_1.C0.ESC + 'OS'; + } + break; + case 116: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[15;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[15~'; + } + break; + case 117: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[17;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[17~'; + } + break; + case 118: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[18;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[18~'; + } + break; + case 119: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[19;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[19~'; + } + break; + case 120: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[20;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[20~'; + } + break; + case 121: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[21;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[21~'; + } + break; + case 122: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[23;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[23~'; + } + break; + case 123: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[24;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[24~'; + } + break; + default: + if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) { + if (ev.keyCode >= 65 && ev.keyCode <= 90) { + result.key = String.fromCharCode(ev.keyCode - 64); + } + else if (ev.keyCode === 32) { + result.key = String.fromCharCode(0); + } + else if (ev.keyCode >= 51 && ev.keyCode <= 55) { + result.key = String.fromCharCode(ev.keyCode - 51 + 27); + } + else if (ev.keyCode === 56) { + result.key = String.fromCharCode(127); + } + else if (ev.keyCode === 219) { + result.key = String.fromCharCode(27); + } + else if (ev.keyCode === 220) { + result.key = String.fromCharCode(28); + } + else if (ev.keyCode === 221) { + result.key = String.fromCharCode(29); + } + } + else if (!this.browser.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) { + if (ev.keyCode >= 65 && ev.keyCode <= 90) { + result.key = EscapeSequences_1.C0.ESC + String.fromCharCode(ev.keyCode + 32); + } + else if (ev.keyCode === 192) { + result.key = EscapeSequences_1.C0.ESC + '`'; + } + else if (ev.keyCode >= 48 && ev.keyCode <= 57) { + result.key = EscapeSequences_1.C0.ESC + (ev.keyCode - 48); + } + } + else if (this.browser.isMac && !ev.altKey && !ev.ctrlKey && ev.metaKey) { + if (ev.keyCode === 65) { + this.selectAll(); + } + } + break; + } + return result; + }; + Terminal.prototype.setgLevel = function (g) { + this.glevel = g; + this.charset = this.charsets[g]; + }; + Terminal.prototype.setgCharset = function (g, charset) { + this.charsets[g] = charset; + if (this.glevel === g) { + this.charset = charset; + } + }; + Terminal.prototype._keyPress = function (ev) { + var key; + if (this.customKeyEventHandler && this.customKeyEventHandler(ev) === false) { + return false; + } + this.cancel(ev); + if (ev.charCode) { + key = ev.charCode; + } + else if (ev.which == null) { + key = ev.keyCode; + } + else if (ev.which !== 0 && ev.charCode !== 0) { + key = ev.which; + } + else { + return false; + } + if (!key || ((ev.altKey || ev.ctrlKey || ev.metaKey) && !isThirdLevelShift(this.browser, ev))) { + return false; + } + key = String.fromCharCode(key); + this.emit('keypress', key, ev); + this.emit('key', key, ev); + this.showCursor(); + this.handler(key); + return true; + }; + Terminal.prototype.send = function (data) { + var _this = this; + if (!this.sendDataQueue) { + setTimeout(function () { + _this.handler(_this.sendDataQueue); + _this.sendDataQueue = ''; + }, 1); + } + this.sendDataQueue += data; + }; + Terminal.prototype.bell = function () { + var _this = this; + this.emit('bell'); + if (this.soundBell()) + this.bellAudioElement.play(); + if (this.visualBell()) { + this.element.classList.add('visual-bell-active'); + clearTimeout(this.visualBellTimer); + this.visualBellTimer = window.setTimeout(function () { + _this.element.classList.remove('visual-bell-active'); + }, 200); + } + }; + Terminal.prototype.log = function (text, data) { + if (!this.options.debug) + return; + if (!this.context.console || !this.context.console.log) + return; + this.context.console.log(text, data); + }; + Terminal.prototype.error = function (text, data) { + if (!this.options.debug) + return; + if (!this.context.console || !this.context.console.error) + return; + this.context.console.error(text, data); + }; + Terminal.prototype.resize = function (x, y) { + if (isNaN(x) || isNaN(y)) { + return; + } + if (x === this.cols && y === this.rows) { + if (!this.charMeasure.width || !this.charMeasure.height) { + this.charMeasure.measure(this.options); + } + return; + } + if (x < 1) + x = 1; + if (y < 1) + y = 1; + this.buffers.resize(x, y); + this.cols = x; + this.rows = y; + this.buffers.setupTabStops(this.cols); + this.charMeasure.measure(this.options); + this.refresh(0, this.rows - 1); + this.geometry = [this.cols, this.rows]; + this.emit('resize', { cols: x, rows: y }); + }; + Terminal.prototype.updateRange = function (y) { + if (y < this.refreshStart) + this.refreshStart = y; + if (y > this.refreshEnd) + this.refreshEnd = y; + }; + Terminal.prototype.maxRange = function () { + this.refreshStart = 0; + this.refreshEnd = this.rows - 1; + }; + Terminal.prototype.eraseRight = function (x, y) { + var line = this.buffer.lines.get(this.buffer.ybase + y); + if (!line) { + return; + } + var ch = [this.eraseAttr(), ' ', 1, 32]; + for (; x < this.cols; x++) { + line[x] = ch; + } + this.updateRange(y); + }; + Terminal.prototype.eraseLeft = function (x, y) { + var line = this.buffer.lines.get(this.buffer.ybase + y); + if (!line) { + return; + } + var ch = [this.eraseAttr(), ' ', 1, 32]; + x++; + while (x--) { + line[x] = ch; + } + this.updateRange(y); + }; + Terminal.prototype.clear = function () { + if (this.buffer.ybase === 0 && this.buffer.y === 0) { + return; + } + this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)); + this.buffer.lines.length = 1; + this.buffer.ydisp = 0; + this.buffer.ybase = 0; + this.buffer.y = 0; + for (var i = 1; i < this.rows; i++) { + this.buffer.lines.push(this.blankLine()); + } + this.refresh(0, this.rows - 1); + this.emit('scroll', this.buffer.ydisp); + }; + Terminal.prototype.eraseLine = function (y) { + this.eraseRight(0, y); + }; + Terminal.prototype.blankLine = function (cur, isWrapped, cols) { + var attr = cur ? this.eraseAttr() : this.defAttr; + var ch = [attr, ' ', 1, 32]; + var line = []; + if (isWrapped) { + line.isWrapped = isWrapped; + } + cols = cols || this.cols; + for (var i = 0; i < cols; i++) { + line[i] = ch; + } + return line; + }; + Terminal.prototype.ch = function (cur) { + if (cur) { + return [this.eraseAttr(), ' ', 1, 32]; + } + return [this.defAttr, ' ', 1, 32]; + }; + Terminal.prototype.is = function (term) { + return (this.options.termName + '').indexOf(term) === 0; + }; + Terminal.prototype.handler = function (data) { + if (this.options.disableStdin) { + return; + } + if (this.selectionManager && this.selectionManager.hasSelection) { + this.selectionManager.clearSelection(); + } + if (this.buffer.ybase !== this.buffer.ydisp) { + this.scrollToBottom(); + } + this.emit('data', data); + }; + Terminal.prototype.handleTitle = function (title) { + this.emit('title', title); + }; + Terminal.prototype.index = function () { + this.buffer.y++; + if (this.buffer.y > this.buffer.scrollBottom) { + this.buffer.y--; + this.scroll(); + } + if (this.buffer.x >= this.cols) { + this.buffer.x--; + } + }; + Terminal.prototype.reverseIndex = function () { + if (this.buffer.y === this.buffer.scrollTop) { + var scrollRegionHeight = this.buffer.scrollBottom - this.buffer.scrollTop; + this.buffer.lines.shiftElements(this.buffer.y + this.buffer.ybase, scrollRegionHeight, 1); + this.buffer.lines.set(this.buffer.y + this.buffer.ybase, this.blankLine(true)); + this.updateRange(this.buffer.scrollTop); + this.updateRange(this.buffer.scrollBottom); + } + else { + this.buffer.y--; + } + }; + Terminal.prototype.reset = function () { + this.options.rows = this.rows; + this.options.cols = this.cols; + var customKeyEventHandler = this.customKeyEventHandler; + var inputHandler = this.inputHandler; + var buffers = this.buffers; + this.setup(); + this.customKeyEventHandler = customKeyEventHandler; + this.inputHandler = inputHandler; + this.buffers = buffers; + this.refresh(0, this.rows - 1); + this.viewport.syncScrollArea(); + }; + Terminal.prototype.tabSet = function () { + this.buffer.tabs[this.buffer.x] = true; + }; + Terminal.prototype.cancel = function (ev, force) { + if (!this.options.cancelEvents && !force) { + return; + } + ev.preventDefault(); + ev.stopPropagation(); + return false; + }; + Terminal.prototype.matchColor = function (r1, g1, b1) { + return matchColor_(r1, g1, b1); + }; + Terminal.prototype.visualBell = function () { + return this.options.bellStyle === 'visual' || + this.options.bellStyle === 'both'; + }; + Terminal.prototype.soundBell = function () { + return this.options.bellStyle === 'sound' || + this.options.bellStyle === 'both'; + }; + Terminal.prototype.syncBellSound = function () { + if (this.soundBell() && this.bellAudioElement) { + this.bellAudioElement.setAttribute('src', this.options.bellSound); + } + else if (this.soundBell()) { + this.bellAudioElement = document.createElement('audio'); + this.bellAudioElement.setAttribute('preload', 'auto'); + this.bellAudioElement.setAttribute('src', this.options.bellSound); + this.helperContainer.appendChild(this.bellAudioElement); + } + else if (this.bellAudioElement) { + this.helperContainer.removeChild(this.bellAudioElement); + } + }; + return Terminal; +}(EventEmitter_1.EventEmitter)); +exports.Terminal = Terminal; +function globalOn(el, type, handler, capture) { + if (!Array.isArray(el)) { + el = [el]; + } + el.forEach(function (element) { + element.addEventListener(type, handler, capture || false); + }); +} +var on = globalOn; +function off(el, type, handler, capture) { + if (capture === void 0) { capture = false; } + el.removeEventListener(type, handler, capture); +} +function isThirdLevelShift(browser, ev) { + var thirdLevelKey = (browser.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) || + (browser.isMSWindows && ev.altKey && ev.ctrlKey && !ev.metaKey); + if (ev.type === 'keypress') { + return thirdLevelKey; + } + return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47); +} +function wasMondifierKeyOnlyEvent(ev) { + return ev.keyCode === 16 || + ev.keyCode === 17 || + ev.keyCode === 18; +} +var vcolors = (function () { + var result = ColorManager_1.DEFAULT_ANSI_COLORS.map(function (c) { + c = c.substring(1); + return [ + parseInt(c.substring(0, 2), 16), + parseInt(c.substring(2, 4), 16), + parseInt(c.substring(4, 6), 16) + ]; + }); + var r = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff]; + for (var i = 0; i < 216; i++) { + result.push([ + r[(i / 36) % 6 | 0], + r[(i / 6) % 6 | 0], + r[i % 6] + ]); + } + var c; + for (var i = 0; i < 24; i++) { + c = 8 + i * 10; + result.push([c, c, c]); + } + return result; +})(); +var matchColorCache = {}; +function matchColorDistance(r1, g1, b1, r2, g2, b2) { + return Math.pow(30 * (r1 - r2), 2) + + Math.pow(59 * (g1 - g2), 2) + + Math.pow(11 * (b1 - b2), 2); +} +; +function matchColor_(r1, g1, b1) { + var hash = (r1 << 16) | (g1 << 8) | b1; + if (matchColorCache[hash] != null) { + return matchColorCache[hash]; + } + var ldiff = Infinity; + var li = -1; + var i = 0; + var c; + var r2; + var g2; + var b2; + var diff; + for (; i < vcolors.length; i++) { + c = vcolors[i]; + r2 = c[0]; + g2 = c[1]; + b2 = c[2]; + diff = matchColorDistance(r1, g1, b1, r2, g2, b2); + if (diff === 0) { + li = i; + break; + } + if (diff < ldiff) { + ldiff = diff; + li = i; + } + } + return matchColorCache[hash] = li; +} + + + +},{"./Buffer":1,"./BufferSet":2,"./CompositionHelper":5,"./EscapeSequences":6,"./EventEmitter":7,"./InputHandler":8,"./Linkifier":9,"./Parser":10,"./SelectionManager":11,"./Viewport":15,"./handlers/Clipboard":16,"./input/MouseZoneManager":17,"./renderer/CharAtlas":19,"./renderer/ColorManager":20,"./renderer/Renderer":24,"./utils/Browser":28,"./utils/CharMeasure":29,"./utils/MouseHelper":32,"./utils/Sounds":33}],14:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var LinkHoverEventTypes; +(function (LinkHoverEventTypes) { + LinkHoverEventTypes["HOVER"] = "linkhover"; + LinkHoverEventTypes["TOOLTIP"] = "linktooltip"; + LinkHoverEventTypes["LEAVE"] = "linkleave"; +})(LinkHoverEventTypes = exports.LinkHoverEventTypes || (exports.LinkHoverEventTypes = {})); +; + + + +},{}],15:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Viewport = (function () { + function Viewport(terminal, viewportElement, scrollArea, charMeasure) { + var _this = this; + this.terminal = terminal; + this.viewportElement = viewportElement; + this.scrollArea = scrollArea; + this.charMeasure = charMeasure; + this.currentRowHeight = 0; + this.lastRecordedBufferLength = 0; + this.lastRecordedViewportHeight = 0; + this.lastRecordedBufferHeight = 0; + this.viewportElement.addEventListener('scroll', this.onScroll.bind(this)); + setTimeout(function () { return _this.syncScrollArea(); }, 0); + } + Viewport.prototype.onThemeChanged = function (colors) { + this.viewportElement.style.backgroundColor = colors.background; + }; + Viewport.prototype.refresh = function () { + if (this.charMeasure.height > 0) { + this.currentRowHeight = this.terminal.renderer.dimensions.scaledCellHeight / window.devicePixelRatio; + if (this.lastRecordedViewportHeight !== this.terminal.renderer.dimensions.canvasHeight) { + this.lastRecordedViewportHeight = this.terminal.renderer.dimensions.canvasHeight; + this.viewportElement.style.height = this.lastRecordedViewportHeight + 'px'; + } + var newBufferHeight = Math.round(this.currentRowHeight * this.lastRecordedBufferLength); + if (this.lastRecordedBufferHeight !== newBufferHeight) { + this.lastRecordedBufferHeight = newBufferHeight; + this.scrollArea.style.height = this.lastRecordedBufferHeight + 'px'; + } + } + }; + Viewport.prototype.syncScrollArea = function () { + if (this.lastRecordedBufferLength !== this.terminal.buffer.lines.length) { + this.lastRecordedBufferLength = this.terminal.buffer.lines.length; + this.refresh(); + } + else if (this.lastRecordedViewportHeight !== this.terminal.renderer.dimensions.canvasHeight) { + this.refresh(); + } + else { + if (this.terminal.renderer.dimensions.scaledCellHeight / window.devicePixelRatio !== this.currentRowHeight) { + this.refresh(); + } + } + var scrollTop = this.terminal.buffer.ydisp * this.currentRowHeight; + if (this.viewportElement.scrollTop !== scrollTop) { + this.viewportElement.scrollTop = scrollTop; + } + }; + Viewport.prototype.onScroll = function (ev) { + var newRow = Math.round(this.viewportElement.scrollTop / this.currentRowHeight); + var diff = newRow - this.terminal.buffer.ydisp; + this.terminal.scrollLines(diff, true); + }; + Viewport.prototype.onWheel = function (ev) { + if (ev.deltaY === 0) { + return; + } + var multiplier = 1; + if (ev.deltaMode === WheelEvent.DOM_DELTA_LINE) { + multiplier = this.currentRowHeight; + } + else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) { + multiplier = this.currentRowHeight * this.terminal.rows; + } + this.viewportElement.scrollTop += ev.deltaY * multiplier; + ev.preventDefault(); + }; + ; + Viewport.prototype.onTouchStart = function (ev) { + this.lastTouchY = ev.touches[0].pageY; + }; + ; + Viewport.prototype.onTouchMove = function (ev) { + var deltaY = this.lastTouchY - ev.touches[0].pageY; + this.lastTouchY = ev.touches[0].pageY; + if (deltaY === 0) { + return; + } + this.viewportElement.scrollTop += deltaY; + ev.preventDefault(); + }; + ; + return Viewport; +}()); +exports.Viewport = Viewport; + + + +},{}],16:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function prepareTextForTerminal(text, isMSWindows) { + if (isMSWindows) { + return text.replace(/\r?\n/g, '\r'); + } + return text; +} +exports.prepareTextForTerminal = prepareTextForTerminal; +function bracketTextForPaste(text, bracketedPasteMode) { + if (bracketedPasteMode) { + return '\x1b[200~' + text + '\x1b[201~'; + } + return text; +} +exports.bracketTextForPaste = bracketTextForPaste; +function copyHandler(ev, term, selectionManager) { + if (term.browser.isMSIE) { + window.clipboardData.setData('Text', selectionManager.selectionText); + } + else { + ev.clipboardData.setData('text/plain', selectionManager.selectionText); + } + ev.preventDefault(); +} +exports.copyHandler = copyHandler; +function pasteHandler(ev, term) { + ev.stopPropagation(); + var text; + var dispatchPaste = function (text) { + text = prepareTextForTerminal(text, term.browser.isMSWindows); + text = bracketTextForPaste(text, term.bracketedPasteMode); + term.handler(text); + term.textarea.value = ''; + term.emit('paste', text); + term.cancel(ev); + }; + if (term.browser.isMSIE) { + if (window.clipboardData) { + text = window.clipboardData.getData('Text'); + dispatchPaste(text); + } + } + else { + if (ev.clipboardData) { + text = ev.clipboardData.getData('text/plain'); + dispatchPaste(text); + } + } +} +exports.pasteHandler = pasteHandler; +function moveTextAreaUnderMouseCursor(ev, textarea) { + textarea.style.position = 'fixed'; + textarea.style.width = '20px'; + textarea.style.height = '20px'; + textarea.style.left = (ev.clientX - 10) + 'px'; + textarea.style.top = (ev.clientY - 10) + 'px'; + textarea.style.zIndex = '1000'; + textarea.focus(); + setTimeout(function () { + textarea.style.position = null; + textarea.style.width = null; + textarea.style.height = null; + textarea.style.left = null; + textarea.style.top = null; + textarea.style.zIndex = null; + }, 4); +} +exports.moveTextAreaUnderMouseCursor = moveTextAreaUnderMouseCursor; +function rightClickHandler(ev, textarea, selectionManager) { + moveTextAreaUnderMouseCursor(ev, textarea); + textarea.value = selectionManager.selectionText; + textarea.select(); +} +exports.rightClickHandler = rightClickHandler; + + + +},{}],17:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var HOVER_DURATION = 500; +var MouseZoneManager = (function () { + function MouseZoneManager(_terminal) { + var _this = this; + this._terminal = _terminal; + this._zones = []; + this._areZonesActive = false; + this._tooltipTimeout = null; + this._currentZone = null; + this._lastHoverCoords = [null, null]; + this._terminal.element.addEventListener('mousedown', function (e) { return _this._onMouseDown(e); }); + this._mouseMoveListener = function (e) { return _this._onMouseMove(e); }; + this._clickListener = function (e) { return _this._onClick(e); }; + } + MouseZoneManager.prototype.add = function (zone) { + this._zones.push(zone); + if (this._zones.length === 1) { + this._activate(); + } + }; + MouseZoneManager.prototype.clearAll = function (start, end) { + if (this._zones.length === 0) { + return; + } + if (!end) { + start = 0; + end = this._terminal.rows - 1; + } + for (var i = 0; i < this._zones.length; i++) { + var zone = this._zones[i]; + if (zone.y > start && zone.y <= end + 1) { + if (this._currentZone && this._currentZone === zone) { + this._currentZone.leaveCallback(); + this._currentZone = null; + } + this._zones.splice(i--, 1); + } + } + if (this._zones.length === 0) { + this._deactivate(); + } + }; + MouseZoneManager.prototype._activate = function () { + if (!this._areZonesActive) { + this._areZonesActive = true; + this._terminal.element.addEventListener('mousemove', this._mouseMoveListener); + this._terminal.element.addEventListener('click', this._clickListener); + } + }; + MouseZoneManager.prototype._deactivate = function () { + if (this._areZonesActive) { + this._areZonesActive = false; + this._terminal.element.removeEventListener('mousemove', this._mouseMoveListener); + this._terminal.element.removeEventListener('click', this._clickListener); + } + }; + MouseZoneManager.prototype._onMouseMove = function (e) { + if (this._lastHoverCoords[0] !== e.pageX || this._lastHoverCoords[1] !== e.pageY) { + this._onHover(e); + this._lastHoverCoords = [e.pageX, e.pageY]; + } + }; + MouseZoneManager.prototype._onHover = function (e) { + var _this = this; + var zone = this._findZoneEventAt(e); + if (zone === this._currentZone) { + return; + } + if (this._currentZone) { + this._currentZone.leaveCallback(); + this._currentZone = null; + if (this._tooltipTimeout) { + clearTimeout(this._tooltipTimeout); + } + } + if (!zone) { + return; + } + this._currentZone = zone; + if (zone.hoverCallback) { + zone.hoverCallback(e); + } + this._tooltipTimeout = setTimeout(function () { return _this._onTooltip(e); }, HOVER_DURATION); + }; + MouseZoneManager.prototype._onTooltip = function (e) { + this._tooltipTimeout = null; + var zone = this._findZoneEventAt(e); + if (zone && zone.tooltipCallback) { + zone.tooltipCallback(e); + } + }; + MouseZoneManager.prototype._onMouseDown = function (e) { + if (!this._areZonesActive) { + return; + } + var zone = this._findZoneEventAt(e); + if (zone) { + e.preventDefault(); + e.stopImmediatePropagation(); + } + }; + MouseZoneManager.prototype._onClick = function (e) { + var zone = this._findZoneEventAt(e); + if (zone) { + zone.clickCallback(e); + e.preventDefault(); + e.stopImmediatePropagation(); + } + }; + MouseZoneManager.prototype._findZoneEventAt = function (e) { + var coords = this._terminal.mouseHelper.getCoords(e, this._terminal.element, this._terminal.charMeasure, this._terminal.options.lineHeight, this._terminal.cols, this._terminal.rows); + if (!coords) { + return null; + } + for (var i = 0; i < this._zones.length; i++) { + var zone = this._zones[i]; + if (zone.y === coords[1] && zone.x1 <= coords[0] && zone.x2 > coords[0]) { + return zone; + } + } + ; + return null; + }; + return MouseZoneManager; +}()); +exports.MouseZoneManager = MouseZoneManager; +var MouseZone = (function () { + function MouseZone(x1, x2, y, clickCallback, hoverCallback, tooltipCallback, leaveCallback) { + this.x1 = x1; + this.x2 = x2; + this.y = y; + this.clickCallback = clickCallback; + this.hoverCallback = hoverCallback; + this.tooltipCallback = tooltipCallback; + this.leaveCallback = leaveCallback; + } + return MouseZone; +}()); +exports.MouseZone = MouseZone; + + + +},{}],18:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var CharAtlas_1 = require("./CharAtlas"); +var Buffer_1 = require("../Buffer"); +exports.INVERTED_DEFAULT_COLOR = -1; +var DIM_OPACITY = 0.5; +var BaseRenderLayer = (function () { + function BaseRenderLayer(container, id, zIndex, _alpha, _colors) { + this._alpha = _alpha; + this._colors = _colors; + this._scaledCharWidth = 0; + this._scaledCharHeight = 0; + this._scaledCellWidth = 0; + this._scaledCellHeight = 0; + this._scaledCharLeft = 0; + this._scaledCharTop = 0; + this._canvas = document.createElement('canvas'); + this._canvas.id = "xterm-" + id + "-layer"; + this._canvas.style.zIndex = zIndex.toString(); + this._ctx = this._canvas.getContext('2d', { alpha: _alpha }); + this._ctx.scale(window.devicePixelRatio, window.devicePixelRatio); + if (!_alpha) { + this.clearAll(); + } + container.appendChild(this._canvas); + } + BaseRenderLayer.prototype.onOptionsChanged = function (terminal) { }; + BaseRenderLayer.prototype.onBlur = function (terminal) { }; + BaseRenderLayer.prototype.onFocus = function (terminal) { }; + BaseRenderLayer.prototype.onCursorMove = function (terminal) { }; + BaseRenderLayer.prototype.onGridChanged = function (terminal, startRow, endRow) { }; + BaseRenderLayer.prototype.onSelectionChanged = function (terminal, start, end) { }; + BaseRenderLayer.prototype.onThemeChanged = function (terminal, colorSet) { + this._refreshCharAtlas(terminal, colorSet); + }; + BaseRenderLayer.prototype._refreshCharAtlas = function (terminal, colorSet) { + var _this = this; + if (this._scaledCharWidth <= 0 && this._scaledCharHeight <= 0) { + return; + } + this._charAtlas = null; + var result = CharAtlas_1.acquireCharAtlas(terminal, this._colors, this._scaledCharWidth, this._scaledCharHeight); + if (result instanceof HTMLCanvasElement) { + this._charAtlas = result; + } + else { + result.then(function (bitmap) { return _this._charAtlas = bitmap; }); + } + }; + BaseRenderLayer.prototype.resize = function (terminal, dim, charSizeChanged) { + this._scaledCellWidth = dim.scaledCellWidth; + this._scaledCellHeight = dim.scaledCellHeight; + this._scaledCharWidth = dim.scaledCharWidth; + this._scaledCharHeight = dim.scaledCharHeight; + this._scaledCharLeft = dim.scaledCharLeft; + this._scaledCharTop = dim.scaledCharTop; + this._canvas.width = dim.scaledCanvasWidth; + this._canvas.height = dim.scaledCanvasHeight; + this._canvas.style.width = dim.canvasWidth + "px"; + this._canvas.style.height = dim.canvasHeight + "px"; + if (!this._alpha) { + this.clearAll(); + } + if (charSizeChanged) { + this._refreshCharAtlas(terminal, this._colors); + } + }; + BaseRenderLayer.prototype.fillCells = function (x, y, width, height) { + this._ctx.fillRect(x * this._scaledCellWidth, y * this._scaledCellHeight, width * this._scaledCellWidth, height * this._scaledCellHeight); + }; + BaseRenderLayer.prototype.fillBottomLineAtCells = function (x, y, width) { + if (width === void 0) { width = 1; } + this._ctx.fillRect(x * this._scaledCellWidth, (y + 1) * this._scaledCellHeight - window.devicePixelRatio - 1, width * this._scaledCellWidth, window.devicePixelRatio); + }; + BaseRenderLayer.prototype.fillLeftLineAtCell = function (x, y) { + this._ctx.fillRect(x * this._scaledCellWidth, y * this._scaledCellHeight, window.devicePixelRatio, this._scaledCellHeight); + }; + BaseRenderLayer.prototype.strokeRectAtCell = function (x, y, width, height) { + this._ctx.lineWidth = window.devicePixelRatio; + this._ctx.strokeRect(x * this._scaledCellWidth + window.devicePixelRatio / 2, y * this._scaledCellHeight + (window.devicePixelRatio / 2), width * this._scaledCellWidth - window.devicePixelRatio, (height * this._scaledCellHeight) - window.devicePixelRatio); + }; + BaseRenderLayer.prototype.clearAll = function () { + if (this._alpha) { + this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height); + } + else { + this._ctx.fillStyle = this._colors.background; + this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height); + } + }; + BaseRenderLayer.prototype.clearCells = function (x, y, width, height) { + if (this._alpha) { + this._ctx.clearRect(x * this._scaledCellWidth, y * this._scaledCellHeight, width * this._scaledCellWidth, height * this._scaledCellHeight); + } + else { + this._ctx.fillStyle = this._colors.background; + this._ctx.fillRect(x * this._scaledCellWidth, y * this._scaledCellHeight, width * this._scaledCellWidth, height * this._scaledCellHeight); + } + }; + BaseRenderLayer.prototype.fillCharTrueColor = function (terminal, charData, x, y) { + this._ctx.font = terminal.options.fontSize * window.devicePixelRatio + "px " + terminal.options.fontFamily; + this._ctx.textBaseline = 'top'; + this._clipRow(terminal, y); + this._ctx.fillText(charData[Buffer_1.CHAR_DATA_CHAR_INDEX], x * this._scaledCellWidth + this._scaledCharLeft, y * this._scaledCellHeight + this._scaledCharTop); + }; + BaseRenderLayer.prototype.drawChar = function (terminal, char, code, width, x, y, fg, bg, bold, dim) { + var colorIndex = 0; + if (fg < 256) { + colorIndex = fg + 2; + } + else { + if (bold && terminal.options.enableBold) { + colorIndex = 1; + } + } + var isAscii = code < 256; + var isBasicColor = (colorIndex > 1 && fg < 16) && (fg < 8 || bold); + var isDefaultColor = fg >= 256; + var isDefaultBackground = bg >= 256; + if (this._charAtlas && isAscii && (isBasicColor || isDefaultColor) && isDefaultBackground) { + var charAtlasCellWidth = this._scaledCharWidth + CharAtlas_1.CHAR_ATLAS_CELL_SPACING; + var charAtlasCellHeight = this._scaledCharHeight + CharAtlas_1.CHAR_ATLAS_CELL_SPACING; + if (dim) { + this._ctx.globalAlpha = DIM_OPACITY; + } + if (bold && !terminal.options.enableBold) { + if (colorIndex > 1) { + colorIndex -= 8; + } + } + this._ctx.drawImage(this._charAtlas, code * charAtlasCellWidth, colorIndex * charAtlasCellHeight, charAtlasCellWidth, this._scaledCharHeight, x * this._scaledCellWidth + this._scaledCharLeft, y * this._scaledCellHeight + this._scaledCharTop, charAtlasCellWidth, this._scaledCharHeight); + } + else { + this._drawUncachedChar(terminal, char, width, fg, x, y, bold, dim); + } + }; + BaseRenderLayer.prototype._drawUncachedChar = function (terminal, char, width, fg, x, y, bold, dim) { + this._ctx.save(); + this._ctx.font = terminal.options.fontSize * window.devicePixelRatio + "px " + terminal.options.fontFamily; + if (bold && terminal.options.enableBold) { + this._ctx.font = "bold " + this._ctx.font; + } + this._ctx.textBaseline = 'top'; + if (fg === exports.INVERTED_DEFAULT_COLOR) { + this._ctx.fillStyle = this._colors.background; + } + else if (fg < 256) { + this._ctx.fillStyle = this._colors.ansi[fg]; + } + else { + this._ctx.fillStyle = this._colors.foreground; + } + this._clipRow(terminal, y); + if (dim) { + this._ctx.globalAlpha = DIM_OPACITY; + } + this._ctx.fillText(char, x * this._scaledCellWidth + this._scaledCharLeft, y * this._scaledCellHeight + this._scaledCharTop); + this._ctx.restore(); + }; + BaseRenderLayer.prototype._clipRow = function (terminal, y) { + this._ctx.beginPath(); + this._ctx.rect(0, y * this._scaledCellHeight, terminal.cols * this._scaledCellWidth, this._scaledCellHeight); + this._ctx.clip(); + }; + return BaseRenderLayer; +}()); +exports.BaseRenderLayer = BaseRenderLayer; + + + +},{"../Buffer":1,"./CharAtlas":19}],19:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Browser_1 = require("../utils/Browser"); +exports.CHAR_ATLAS_CELL_SPACING = 1; +var charAtlasCache = []; +function acquireCharAtlas(terminal, colors, scaledCharWidth, scaledCharHeight) { + var newConfig = generateConfig(scaledCharWidth, scaledCharHeight, terminal, colors); + for (var i = 0; i < charAtlasCache.length; i++) { + var entry = charAtlasCache[i]; + var ownedByIndex = entry.ownedBy.indexOf(terminal); + if (ownedByIndex >= 0) { + if (configEquals(entry.config, newConfig)) { + return entry.bitmap; + } + else { + if (entry.ownedBy.length === 1) { + charAtlasCache.splice(i, 1); + } + else { + entry.ownedBy.splice(ownedByIndex, 1); + } + break; + } + } + } + for (var i = 0; i < charAtlasCache.length; i++) { + var entry = charAtlasCache[i]; + if (configEquals(entry.config, newConfig)) { + entry.ownedBy.push(terminal); + return entry.bitmap; + } + } + var newEntry = { + bitmap: generator.generate(scaledCharWidth, scaledCharHeight, terminal.options.fontSize, terminal.options.fontFamily, colors.background, colors.foreground, colors.ansi), + config: newConfig, + ownedBy: [terminal] + }; + charAtlasCache.push(newEntry); + return newEntry.bitmap; +} +exports.acquireCharAtlas = acquireCharAtlas; +function generateConfig(scaledCharWidth, scaledCharHeight, terminal, colors) { + var clonedColors = { + foreground: colors.foreground, + background: colors.background, + cursor: null, + cursorAccent: null, + selection: null, + ansi: colors.ansi.slice(0, 16) + }; + return { + scaledCharWidth: scaledCharWidth, + scaledCharHeight: scaledCharHeight, + fontFamily: terminal.options.fontFamily, + fontSize: terminal.options.fontSize, + colors: clonedColors + }; +} +function configEquals(a, b) { + for (var i = 0; i < a.colors.ansi.length; i++) { + if (a.colors.ansi[i] !== b.colors.ansi[i]) { + return false; + } + } + return a.fontFamily === b.fontFamily && + a.fontSize === b.fontSize && + a.scaledCharWidth === b.scaledCharWidth && + a.scaledCharHeight === b.scaledCharHeight && + a.colors.foreground === b.colors.foreground && + a.colors.background === b.colors.background; +} +var generator; +function initialize(document) { + if (!generator) { + generator = new CharAtlasGenerator(document); + } +} +exports.initialize = initialize; +var CharAtlasGenerator = (function () { + function CharAtlasGenerator(_document) { + this._document = _document; + this._canvas = this._document.createElement('canvas'); + this._ctx = this._canvas.getContext('2d', { alpha: false }); + this._ctx.scale(window.devicePixelRatio, window.devicePixelRatio); + } + CharAtlasGenerator.prototype.generate = function (scaledCharWidth, scaledCharHeight, fontSize, fontFamily, background, foreground, ansiColors) { + var cellWidth = scaledCharWidth + exports.CHAR_ATLAS_CELL_SPACING; + var cellHeight = scaledCharHeight + exports.CHAR_ATLAS_CELL_SPACING; + this._canvas.width = 255 * cellWidth; + this._canvas.height = (2 + 16) * cellHeight; + this._ctx.fillStyle = background; + this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height); + this._ctx.save(); + this._ctx.fillStyle = foreground; + this._ctx.font = fontSize * window.devicePixelRatio + "px " + fontFamily; + this._ctx.textBaseline = 'top'; + for (var i = 0; i < 256; i++) { + this._ctx.save(); + this._ctx.beginPath(); + this._ctx.rect(i * cellWidth, 0, cellWidth, cellHeight); + this._ctx.clip(); + this._ctx.fillText(String.fromCharCode(i), i * cellWidth, 0); + this._ctx.restore(); + } + this._ctx.save(); + this._ctx.font = "bold " + this._ctx.font; + for (var i = 0; i < 256; i++) { + this._ctx.save(); + this._ctx.beginPath(); + this._ctx.rect(i * cellWidth, cellHeight, cellWidth, cellHeight); + this._ctx.clip(); + this._ctx.fillText(String.fromCharCode(i), i * cellWidth, cellHeight); + this._ctx.restore(); + } + this._ctx.restore(); + this._ctx.font = fontSize * window.devicePixelRatio + "px " + fontFamily; + for (var colorIndex = 0; colorIndex < 16; colorIndex++) { + if (colorIndex === 8) { + this._ctx.font = "bold " + this._ctx.font; + } + var y = (colorIndex + 2) * cellHeight; + for (var i = 0; i < 256; i++) { + this._ctx.save(); + this._ctx.beginPath(); + this._ctx.rect(i * cellWidth, y, cellWidth, cellHeight); + this._ctx.clip(); + this._ctx.fillStyle = ansiColors[colorIndex]; + this._ctx.fillText(String.fromCharCode(i), i * cellWidth, y); + this._ctx.restore(); + } + } + this._ctx.restore(); + if (!('createImageBitmap' in window) || Browser_1.isFirefox) { + var result = this._canvas; + this._canvas = this._document.createElement('canvas'); + this._ctx = this._canvas.getContext('2d'); + this._ctx.scale(window.devicePixelRatio, window.devicePixelRatio); + return result; + } + var charAtlasImageData = this._ctx.getImageData(0, 0, this._canvas.width, this._canvas.height); + var r = parseInt(background.substr(1, 2), 16); + var g = parseInt(background.substr(3, 2), 16); + var b = parseInt(background.substr(5, 2), 16); + this._clearColor(charAtlasImageData, r, g, b); + var promise = window.createImageBitmap(charAtlasImageData); + this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height); + return promise; + }; + CharAtlasGenerator.prototype._clearColor = function (imageData, r, g, b) { + for (var offset = 0; offset < imageData.data.length; offset += 4) { + if (imageData.data[offset] === r && + imageData.data[offset + 1] === g && + imageData.data[offset + 2] === b) { + imageData.data[offset + 3] = 0; + } + } + }; + return CharAtlasGenerator; +}()); + + + +},{"../utils/Browser":28}],20:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var DEFAULT_FOREGROUND = '#ffffff'; +var DEFAULT_BACKGROUND = '#333333'; +var DEFAULT_CURSOR = '#ffffff'; +var DEFAULT_CURSOR_ACCENT = '#333333'; +var DEFAULT_SELECTION = 'rgba(255, 255, 255, 0.3)'; +exports.DEFAULT_ANSI_COLORS = [ + '#2e3436', + '#cc0000', + '#4e9a06', + '#c4a000', + '#3465a4', + '#75507b', + '#06989a', + '#d3d7cf', + '#555753', + '#ef2929', + '#8ae234', + '#fce94f', + '#729fcf', + '#ad7fa8', + '#34e2e2', + '#eeeeec' +]; +function generate256Colors(first16Colors) { + var colors = first16Colors.slice(); + var v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff]; + for (var i = 0; i < 216; i++) { + var r = toPaddedHex(v[(i / 36) % 6 | 0]); + var g = toPaddedHex(v[(i / 6) % 6 | 0]); + var b = toPaddedHex(v[i % 6]); + colors.push("#" + r + g + b); + } + for (var i = 0; i < 24; i++) { + var c = toPaddedHex(8 + i * 10); + colors.push("#" + c + c + c); + } + return colors; +} +function toPaddedHex(c) { + var s = c.toString(16); + return s.length < 2 ? '0' + s : s; +} +var ColorManager = (function () { + function ColorManager() { + this.colors = { + foreground: DEFAULT_FOREGROUND, + background: DEFAULT_BACKGROUND, + cursor: DEFAULT_CURSOR, + cursorAccent: DEFAULT_CURSOR_ACCENT, + selection: DEFAULT_SELECTION, + ansi: generate256Colors(exports.DEFAULT_ANSI_COLORS) + }; + } + ColorManager.prototype.setTheme = function (theme) { + this.colors.foreground = theme.foreground || DEFAULT_FOREGROUND; + this.colors.background = this._validateColor(theme.background, DEFAULT_BACKGROUND); + this.colors.cursor = theme.cursor || DEFAULT_CURSOR; + this.colors.cursorAccent = theme.cursorAccent || DEFAULT_CURSOR_ACCENT; + this.colors.selection = theme.selection || DEFAULT_SELECTION; + this.colors.ansi[0] = theme.black || exports.DEFAULT_ANSI_COLORS[0]; + this.colors.ansi[1] = theme.red || exports.DEFAULT_ANSI_COLORS[1]; + this.colors.ansi[2] = theme.green || exports.DEFAULT_ANSI_COLORS[2]; + this.colors.ansi[3] = theme.yellow || exports.DEFAULT_ANSI_COLORS[3]; + this.colors.ansi[4] = theme.blue || exports.DEFAULT_ANSI_COLORS[4]; + this.colors.ansi[5] = theme.magenta || exports.DEFAULT_ANSI_COLORS[5]; + this.colors.ansi[6] = theme.cyan || exports.DEFAULT_ANSI_COLORS[6]; + this.colors.ansi[7] = theme.white || exports.DEFAULT_ANSI_COLORS[7]; + this.colors.ansi[8] = theme.brightBlack || exports.DEFAULT_ANSI_COLORS[8]; + this.colors.ansi[9] = theme.brightRed || exports.DEFAULT_ANSI_COLORS[9]; + this.colors.ansi[10] = theme.brightGreen || exports.DEFAULT_ANSI_COLORS[10]; + this.colors.ansi[11] = theme.brightYellow || exports.DEFAULT_ANSI_COLORS[11]; + this.colors.ansi[12] = theme.brightBlue || exports.DEFAULT_ANSI_COLORS[12]; + this.colors.ansi[13] = theme.brightMagenta || exports.DEFAULT_ANSI_COLORS[13]; + this.colors.ansi[14] = theme.brightCyan || exports.DEFAULT_ANSI_COLORS[14]; + this.colors.ansi[15] = theme.brightWhite || exports.DEFAULT_ANSI_COLORS[15]; + }; + ColorManager.prototype._validateColor = function (color, fallback) { + if (!color) { + return fallback; + } + if (color.length === 7 && color.charAt(0) === '#') { + return color; + } + if (color.length === 4 && color.charAt(0) === '#') { + var r = color.charAt(1); + var g = color.charAt(2); + var b = color.charAt(3); + return "#" + r + r + g + g + b + b; + } + return fallback; + }; + return ColorManager; +}()); +exports.ColorManager = ColorManager; + + + +},{}],21:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var Buffer_1 = require("../Buffer"); +var BaseRenderLayer_1 = require("./BaseRenderLayer"); +var BLINK_INTERVAL = 600; +var CursorRenderLayer = (function (_super) { + __extends(CursorRenderLayer, _super); + function CursorRenderLayer(container, zIndex, colors) { + var _this = _super.call(this, container, 'cursor', zIndex, true, colors) || this; + _this._state = { + x: null, + y: null, + isFocused: null, + style: null, + width: null, + }; + _this._cursorRenderers = { + 'bar': _this._renderBarCursor.bind(_this), + 'block': _this._renderBlockCursor.bind(_this), + 'underline': _this._renderUnderlineCursor.bind(_this) + }; + return _this; + } + CursorRenderLayer.prototype.resize = function (terminal, dim, charSizeChanged) { + _super.prototype.resize.call(this, terminal, dim, charSizeChanged); + this._state = { + x: null, + y: null, + isFocused: null, + style: null, + width: null, + }; + }; + CursorRenderLayer.prototype.reset = function (terminal) { + this._clearCursor(); + if (this._cursorBlinkStateManager) { + this._cursorBlinkStateManager.dispose(); + this._cursorBlinkStateManager = null; + this.onOptionsChanged(terminal); + } + }; + CursorRenderLayer.prototype.onBlur = function (terminal) { + if (this._cursorBlinkStateManager) { + this._cursorBlinkStateManager.pause(); + } + terminal.refresh(terminal.buffer.y, terminal.buffer.y); + }; + CursorRenderLayer.prototype.onFocus = function (terminal) { + if (this._cursorBlinkStateManager) { + this._cursorBlinkStateManager.resume(terminal); + } + else { + terminal.refresh(terminal.buffer.y, terminal.buffer.y); + } + }; + CursorRenderLayer.prototype.onOptionsChanged = function (terminal) { + var _this = this; + if (terminal.options.cursorBlink) { + if (!this._cursorBlinkStateManager) { + this._cursorBlinkStateManager = new CursorBlinkStateManager(terminal, function () { + _this._render(terminal, true); + }); + } + } + else { + if (this._cursorBlinkStateManager) { + this._cursorBlinkStateManager.dispose(); + this._cursorBlinkStateManager = null; + } + terminal.refresh(terminal.buffer.y, terminal.buffer.y); + } + }; + CursorRenderLayer.prototype.onCursorMove = function (terminal) { + if (this._cursorBlinkStateManager) { + this._cursorBlinkStateManager.restartBlinkAnimation(terminal); + } + }; + CursorRenderLayer.prototype.onGridChanged = function (terminal, startRow, endRow) { + if (!this._cursorBlinkStateManager || this._cursorBlinkStateManager.isPaused) { + this._render(terminal, false); + } + }; + CursorRenderLayer.prototype._render = function (terminal, triggeredByAnimationFrame) { + if (!terminal.cursorState || terminal.cursorHidden) { + this._clearCursor(); + return; + } + var cursorY = terminal.buffer.ybase + terminal.buffer.y; + var viewportRelativeCursorY = cursorY - terminal.buffer.ydisp; + if (viewportRelativeCursorY < 0 || viewportRelativeCursorY >= terminal.rows) { + this._clearCursor(); + return; + } + var charData = terminal.buffer.lines.get(cursorY)[terminal.buffer.x]; + if (!charData) { + return; + } + if (!terminal.isFocused) { + this._clearCursor(); + this._ctx.save(); + this._ctx.fillStyle = this._colors.cursor; + this._renderBlurCursor(terminal, terminal.buffer.x, viewportRelativeCursorY, charData); + this._ctx.restore(); + this._state.x = terminal.buffer.x; + this._state.y = viewportRelativeCursorY; + this._state.isFocused = false; + this._state.style = terminal.options.cursorStyle; + this._state.width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX]; + return; + } + if (this._cursorBlinkStateManager && !this._cursorBlinkStateManager.isCursorVisible) { + this._clearCursor(); + return; + } + if (this._state) { + if (this._state.x === terminal.buffer.x && + this._state.y === viewportRelativeCursorY && + this._state.isFocused === terminal.isFocused && + this._state.style === terminal.options.cursorStyle && + this._state.width === charData[Buffer_1.CHAR_DATA_WIDTH_INDEX]) { + return; + } + this._clearCursor(); + } + this._ctx.save(); + this._cursorRenderers[terminal.options.cursorStyle || 'block'](terminal, terminal.buffer.x, viewportRelativeCursorY, charData); + this._ctx.restore(); + this._state.x = terminal.buffer.x; + this._state.y = viewportRelativeCursorY; + this._state.isFocused = false; + this._state.style = terminal.options.cursorStyle; + this._state.width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX]; + }; + CursorRenderLayer.prototype._clearCursor = function () { + if (this._state) { + this.clearCells(this._state.x, this._state.y, this._state.width, 1); + this._state = { + x: null, + y: null, + isFocused: null, + style: null, + width: null, + }; + } + }; + CursorRenderLayer.prototype._renderBarCursor = function (terminal, x, y, charData) { + this._ctx.save(); + this._ctx.fillStyle = this._colors.cursor; + this.fillLeftLineAtCell(x, y); + this._ctx.restore(); + }; + CursorRenderLayer.prototype._renderBlockCursor = function (terminal, x, y, charData) { + this._ctx.save(); + this._ctx.fillStyle = this._colors.cursor; + this.fillCells(x, y, charData[Buffer_1.CHAR_DATA_WIDTH_INDEX], 1); + this._ctx.fillStyle = this._colors.cursorAccent; + this.fillCharTrueColor(terminal, charData, x, y); + this._ctx.restore(); + }; + CursorRenderLayer.prototype._renderUnderlineCursor = function (terminal, x, y, charData) { + this._ctx.save(); + this._ctx.fillStyle = this._colors.cursor; + this.fillBottomLineAtCells(x, y); + this._ctx.restore(); + }; + CursorRenderLayer.prototype._renderBlurCursor = function (terminal, x, y, charData) { + this._ctx.save(); + this._ctx.strokeStyle = this._colors.cursor; + this.strokeRectAtCell(x, y, charData[Buffer_1.CHAR_DATA_WIDTH_INDEX], 1); + this._ctx.restore(); + }; + return CursorRenderLayer; +}(BaseRenderLayer_1.BaseRenderLayer)); +exports.CursorRenderLayer = CursorRenderLayer; +var CursorBlinkStateManager = (function () { + function CursorBlinkStateManager(terminal, renderCallback) { + this.renderCallback = renderCallback; + this.isCursorVisible = true; + if (terminal.isFocused) { + this._restartInterval(); + } + } + Object.defineProperty(CursorBlinkStateManager.prototype, "isPaused", { + get: function () { return !(this._blinkStartTimeout || this._blinkInterval); }, + enumerable: true, + configurable: true + }); + CursorBlinkStateManager.prototype.dispose = function () { + if (this._blinkInterval) { + window.clearInterval(this._blinkInterval); + this._blinkInterval = null; + } + if (this._blinkStartTimeout) { + window.clearTimeout(this._blinkStartTimeout); + this._blinkStartTimeout = null; + } + if (this._animationFrame) { + window.cancelAnimationFrame(this._animationFrame); + this._animationFrame = null; + } + }; + CursorBlinkStateManager.prototype.restartBlinkAnimation = function (terminal) { + var _this = this; + if (this.isPaused) { + return; + } + this._animationTimeRestarted = Date.now(); + this.isCursorVisible = true; + if (!this._animationFrame) { + this._animationFrame = window.requestAnimationFrame(function () { + _this.renderCallback(); + _this._animationFrame = null; + }); + } + }; + CursorBlinkStateManager.prototype._restartInterval = function (timeToStart) { + var _this = this; + if (timeToStart === void 0) { timeToStart = BLINK_INTERVAL; } + if (this._blinkInterval) { + window.clearInterval(this._blinkInterval); + } + this._blinkStartTimeout = setTimeout(function () { + if (_this._animationTimeRestarted) { + var time = BLINK_INTERVAL - (Date.now() - _this._animationTimeRestarted); + _this._animationTimeRestarted = null; + if (time > 0) { + _this._restartInterval(time); + return; + } + } + _this.isCursorVisible = false; + _this._animationFrame = window.requestAnimationFrame(function () { + _this.renderCallback(); + _this._animationFrame = null; + }); + _this._blinkInterval = setInterval(function () { + if (_this._animationTimeRestarted) { + var time = BLINK_INTERVAL - (Date.now() - _this._animationTimeRestarted); + _this._animationTimeRestarted = null; + _this._restartInterval(time); + return; + } + _this.isCursorVisible = !_this.isCursorVisible; + _this._animationFrame = window.requestAnimationFrame(function () { + _this.renderCallback(); + _this._animationFrame = null; + }); + }, BLINK_INTERVAL); + }, timeToStart); + }; + CursorBlinkStateManager.prototype.pause = function () { + this.isCursorVisible = true; + if (this._blinkInterval) { + window.clearInterval(this._blinkInterval); + this._blinkInterval = null; + } + if (this._blinkStartTimeout) { + window.clearTimeout(this._blinkStartTimeout); + this._blinkStartTimeout = null; + } + if (this._animationFrame) { + window.cancelAnimationFrame(this._animationFrame); + this._animationFrame = null; + } + }; + CursorBlinkStateManager.prototype.resume = function (terminal) { + this._animationTimeRestarted = null; + this._restartInterval(); + this.restartBlinkAnimation(terminal); + }; + return CursorBlinkStateManager; +}()); + + + +},{"../Buffer":1,"./BaseRenderLayer":18}],22:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var GridCache = (function () { + function GridCache() { + this.cache = []; + } + GridCache.prototype.resize = function (width, height) { + for (var x = 0; x < width; x++) { + if (this.cache.length <= x) { + this.cache.push([]); + } + for (var y = this.cache[x].length; y < height; y++) { + this.cache[x].push(null); + } + this.cache[x].length = height; + } + this.cache.length = width; + }; + GridCache.prototype.clear = function () { + for (var x = 0; x < this.cache.length; x++) { + for (var y = 0; y < this.cache[x].length; y++) { + this.cache[x][y] = null; + } + } + }; + return GridCache; +}()); +exports.GridCache = GridCache; + + + +},{}],23:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var BaseRenderLayer_1 = require("./BaseRenderLayer"); +var Types_1 = require("../Types"); +var LinkRenderLayer = (function (_super) { + __extends(LinkRenderLayer, _super); + function LinkRenderLayer(container, zIndex, colors, terminal) { + var _this = _super.call(this, container, 'link', zIndex, true, colors) || this; + _this._state = null; + terminal.linkifier.on(Types_1.LinkHoverEventTypes.HOVER, function (e) { return _this._onLinkHover(e); }); + terminal.linkifier.on(Types_1.LinkHoverEventTypes.LEAVE, function (e) { return _this._onLinkLeave(e); }); + return _this; + } + LinkRenderLayer.prototype.resize = function (terminal, dim, charSizeChanged) { + _super.prototype.resize.call(this, terminal, dim, charSizeChanged); + this._state = null; + }; + LinkRenderLayer.prototype.reset = function (terminal) { + this._clearCurrentLink(); + }; + LinkRenderLayer.prototype._clearCurrentLink = function () { + if (this._state) { + this.clearCells(this._state.x, this._state.y, this._state.length, 1); + this._state = null; + } + }; + LinkRenderLayer.prototype._onLinkHover = function (e) { + this._ctx.fillStyle = this._colors.foreground; + this.fillBottomLineAtCells(e.x, e.y, e.length); + this._state = e; + }; + LinkRenderLayer.prototype._onLinkLeave = function (e) { + this._clearCurrentLink(); + }; + return LinkRenderLayer; +}(BaseRenderLayer_1.BaseRenderLayer)); +exports.LinkRenderLayer = LinkRenderLayer; + + + +},{"../Types":14,"./BaseRenderLayer":18}],24:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var TextRenderLayer_1 = require("./TextRenderLayer"); +var SelectionRenderLayer_1 = require("./SelectionRenderLayer"); +var CursorRenderLayer_1 = require("./CursorRenderLayer"); +var ColorManager_1 = require("./ColorManager"); +var LinkRenderLayer_1 = require("./LinkRenderLayer"); +var EventEmitter_1 = require("../EventEmitter"); +var Renderer = (function (_super) { + __extends(Renderer, _super); + function Renderer(_terminal, theme) { + var _this = _super.call(this) || this; + _this._terminal = _terminal; + _this._refreshRowsQueue = []; + _this._refreshAnimationFrame = null; + _this.colorManager = new ColorManager_1.ColorManager(); + if (theme) { + _this.colorManager.setTheme(theme); + } + _this._renderLayers = [ + new TextRenderLayer_1.TextRenderLayer(_this._terminal.element, 0, _this.colorManager.colors), + new SelectionRenderLayer_1.SelectionRenderLayer(_this._terminal.element, 1, _this.colorManager.colors), + new LinkRenderLayer_1.LinkRenderLayer(_this._terminal.element, 2, _this.colorManager.colors, _this._terminal), + new CursorRenderLayer_1.CursorRenderLayer(_this._terminal.element, 3, _this.colorManager.colors) + ]; + _this.dimensions = { + scaledCharWidth: null, + scaledCharHeight: null, + scaledCellWidth: null, + scaledCellHeight: null, + scaledCharLeft: null, + scaledCharTop: null, + scaledCanvasWidth: null, + scaledCanvasHeight: null, + canvasWidth: null, + canvasHeight: null, + actualCellWidth: null, + actualCellHeight: null + }; + _this._devicePixelRatio = window.devicePixelRatio; + return _this; + } + Renderer.prototype.onWindowResize = function (devicePixelRatio) { + if (this._devicePixelRatio !== devicePixelRatio) { + this._devicePixelRatio = devicePixelRatio; + this.onResize(this._terminal.cols, this._terminal.rows, true); + } + }; + Renderer.prototype.setTheme = function (theme) { + var _this = this; + this.colorManager.setTheme(theme); + this._renderLayers.forEach(function (l) { + l.onThemeChanged(_this._terminal, _this.colorManager.colors); + l.reset(_this._terminal); + }); + this._terminal.refresh(0, this._terminal.rows - 1); + return this.colorManager.colors; + }; + Renderer.prototype.onResize = function (cols, rows, didCharSizeChange) { + var _this = this; + if (!this._terminal.charMeasure.width || !this._terminal.charMeasure.height) { + return; + } + this.dimensions.scaledCharWidth = Math.floor(this._terminal.charMeasure.width * window.devicePixelRatio); + this.dimensions.scaledCharHeight = Math.ceil(this._terminal.charMeasure.height * window.devicePixelRatio); + this.dimensions.scaledCellHeight = Math.floor(this.dimensions.scaledCharHeight * this._terminal.options.lineHeight); + this.dimensions.scaledCharTop = this._terminal.options.lineHeight === 1 ? 0 : Math.round((this.dimensions.scaledCellHeight - this.dimensions.scaledCharHeight) / 2); + this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth + Math.round(this._terminal.options.letterSpacing); + this.dimensions.scaledCharLeft = Math.floor(this._terminal.options.letterSpacing / 2); + this.dimensions.scaledCanvasHeight = this._terminal.rows * this.dimensions.scaledCellHeight; + this.dimensions.scaledCanvasWidth = this._terminal.cols * this.dimensions.scaledCellWidth; + this.dimensions.canvasHeight = Math.round(this.dimensions.scaledCanvasHeight / window.devicePixelRatio); + this.dimensions.canvasWidth = Math.round(this.dimensions.scaledCanvasWidth / window.devicePixelRatio); + this.dimensions.actualCellHeight = this.dimensions.canvasHeight / this._terminal.rows; + this.dimensions.actualCellWidth = this.dimensions.canvasWidth / this._terminal.cols; + this._renderLayers.forEach(function (l) { return l.resize(_this._terminal, _this.dimensions, didCharSizeChange); }); + this._terminal.refresh(0, this._terminal.rows - 1); + this.emit('resize', { + width: this.dimensions.canvasWidth, + height: this.dimensions.canvasHeight + }); + }; + Renderer.prototype.onCharSizeChanged = function () { + this.onResize(this._terminal.cols, this._terminal.rows, true); + }; + Renderer.prototype.onBlur = function () { + var _this = this; + this._renderLayers.forEach(function (l) { return l.onBlur(_this._terminal); }); + }; + Renderer.prototype.onFocus = function () { + var _this = this; + this._renderLayers.forEach(function (l) { return l.onFocus(_this._terminal); }); + }; + Renderer.prototype.onSelectionChanged = function (start, end) { + var _this = this; + this._renderLayers.forEach(function (l) { return l.onSelectionChanged(_this._terminal, start, end); }); + }; + Renderer.prototype.onCursorMove = function () { + var _this = this; + this._renderLayers.forEach(function (l) { return l.onCursorMove(_this._terminal); }); + }; + Renderer.prototype.onOptionsChanged = function () { + var _this = this; + this._renderLayers.forEach(function (l) { return l.onOptionsChanged(_this._terminal); }); + }; + Renderer.prototype.clear = function () { + var _this = this; + this._renderLayers.forEach(function (l) { return l.reset(_this._terminal); }); + }; + Renderer.prototype.queueRefresh = function (start, end) { + this._refreshRowsQueue.push({ start: start, end: end }); + if (!this._refreshAnimationFrame) { + this._refreshAnimationFrame = window.requestAnimationFrame(this._refreshLoop.bind(this)); + } + }; + Renderer.prototype._refreshLoop = function () { + var _this = this; + var start; + var end; + if (this._refreshRowsQueue.length > 4) { + start = 0; + end = this._terminal.rows - 1; + } + else { + start = this._refreshRowsQueue[0].start; + end = this._refreshRowsQueue[0].end; + for (var i = 1; i < this._refreshRowsQueue.length; i++) { + if (this._refreshRowsQueue[i].start < start) { + start = this._refreshRowsQueue[i].start; + } + if (this._refreshRowsQueue[i].end > end) { + end = this._refreshRowsQueue[i].end; + } + } + } + this._refreshRowsQueue = []; + this._refreshAnimationFrame = null; + start = Math.max(start, 0); + end = Math.min(end, this._terminal.rows - 1); + this._renderLayers.forEach(function (l) { return l.onGridChanged(_this._terminal, start, end); }); + this._terminal.emit('refresh', { start: start, end: end }); + }; + return Renderer; +}(EventEmitter_1.EventEmitter)); +exports.Renderer = Renderer; + + + +},{"../EventEmitter":7,"./ColorManager":20,"./CursorRenderLayer":21,"./LinkRenderLayer":23,"./SelectionRenderLayer":25,"./TextRenderLayer":26}],25:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var BaseRenderLayer_1 = require("./BaseRenderLayer"); +var SelectionRenderLayer = (function (_super) { + __extends(SelectionRenderLayer, _super); + function SelectionRenderLayer(container, zIndex, colors) { + var _this = _super.call(this, container, 'selection', zIndex, true, colors) || this; + _this._state = { + start: null, + end: null + }; + return _this; + } + SelectionRenderLayer.prototype.resize = function (terminal, dim, charSizeChanged) { + _super.prototype.resize.call(this, terminal, dim, charSizeChanged); + this._state = { + start: null, + end: null + }; + }; + SelectionRenderLayer.prototype.reset = function (terminal) { + if (this._state.start && this._state.end) { + this._state = { + start: null, + end: null + }; + this.clearAll(); + } + }; + SelectionRenderLayer.prototype.onSelectionChanged = function (terminal, start, end) { + if (this._state.start === start || this._state.end === end) { + return; + } + this.clearAll(); + if (!start || !end) { + return; + } + var viewportStartRow = start[1] - terminal.buffer.ydisp; + var viewportEndRow = end[1] - terminal.buffer.ydisp; + var viewportCappedStartRow = Math.max(viewportStartRow, 0); + var viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1); + if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) { + return; + } + var startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0; + var startRowEndCol = viewportCappedStartRow === viewportCappedEndRow ? end[0] : terminal.cols; + this._ctx.fillStyle = this._colors.selection; + this.fillCells(startCol, viewportCappedStartRow, startRowEndCol - startCol, 1); + var middleRowsCount = Math.max(viewportCappedEndRow - viewportCappedStartRow - 1, 0); + this.fillCells(0, viewportCappedStartRow + 1, terminal.cols, middleRowsCount); + if (viewportCappedStartRow !== viewportCappedEndRow) { + var endCol = viewportEndRow === viewportCappedEndRow ? end[0] : terminal.cols; + this.fillCells(0, viewportCappedEndRow, endCol, 1); + } + this._state.start = [start[0], start[1]]; + this._state.end = [end[0], end[1]]; + }; + return SelectionRenderLayer; +}(BaseRenderLayer_1.BaseRenderLayer)); +exports.SelectionRenderLayer = SelectionRenderLayer; + + + +},{"./BaseRenderLayer":18}],26:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var Buffer_1 = require("../Buffer"); +var Types_1 = require("./Types"); +var GridCache_1 = require("./GridCache"); +var BaseRenderLayer_1 = require("./BaseRenderLayer"); +var OVERLAP_OWNED_CHAR_DATA = [null, '', 0, -1]; +var TextRenderLayer = (function (_super) { + __extends(TextRenderLayer, _super); + function TextRenderLayer(container, zIndex, colors) { + var _this = _super.call(this, container, 'text', zIndex, false, colors) || this; + _this._characterOverlapCache = {}; + _this._state = new GridCache_1.GridCache(); + return _this; + } + TextRenderLayer.prototype.resize = function (terminal, dim, charSizeChanged) { + _super.prototype.resize.call(this, terminal, dim, charSizeChanged); + var terminalFont = terminal.options.fontSize * window.devicePixelRatio + "px " + terminal.options.fontFamily; + if (this._characterWidth !== dim.scaledCharWidth || this._characterFont !== terminalFont) { + this._characterWidth = dim.scaledCharWidth; + this._characterFont = terminalFont; + this._characterOverlapCache = {}; + } + this._state.clear(); + this._state.resize(terminal.cols, terminal.rows); + }; + TextRenderLayer.prototype.reset = function (terminal) { + this._state.clear(); + this.clearAll(); + }; + TextRenderLayer.prototype.onGridChanged = function (terminal, startRow, endRow) { + if (this._state.cache.length === 0) { + return; + } + for (var y = startRow; y <= endRow; y++) { + var row = y + terminal.buffer.ydisp; + var line = terminal.buffer.lines.get(row); + this.clearCells(0, y, terminal.cols, 1); + for (var x = 0; x < terminal.cols; x++) { + var charData = line[x]; + var code = charData[Buffer_1.CHAR_DATA_CODE_INDEX]; + var char = charData[Buffer_1.CHAR_DATA_CHAR_INDEX]; + var attr = charData[Buffer_1.CHAR_DATA_ATTR_INDEX]; + var width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX]; + if (width === 0) { + continue; + } + if (code === 32) { + if (x > 0) { + var previousChar = line[x - 1]; + if (this._isOverlapping(previousChar)) { + continue; + } + } + } + var flags = attr >> 18; + var bg = attr & 0x1ff; + var isDefaultBackground = bg >= 256; + var isInvisible = flags & Types_1.FLAGS.INVISIBLE; + var isInverted = flags & Types_1.FLAGS.INVERSE; + if (!code || (code === 32 && isDefaultBackground && !isInverted) || isInvisible) { + continue; + } + if (width !== 0 && this._isOverlapping(charData)) { + if (x < line.length - 1 && line[x + 1][Buffer_1.CHAR_DATA_CODE_INDEX] === 32) { + width = 2; + } + } + var fg = (attr >> 9) & 0x1ff; + if (isInverted) { + var temp = bg; + bg = fg; + fg = temp; + if (fg === 256) { + fg = BaseRenderLayer_1.INVERTED_DEFAULT_COLOR; + } + if (bg === 257) { + bg = BaseRenderLayer_1.INVERTED_DEFAULT_COLOR; + } + } + if (width === 2) { + } + if (bg < 256) { + this._ctx.save(); + this._ctx.fillStyle = (bg === BaseRenderLayer_1.INVERTED_DEFAULT_COLOR ? this._colors.foreground : this._colors.ansi[bg]); + this.fillCells(x, y, width, 1); + this._ctx.restore(); + } + this._ctx.save(); + if (flags & Types_1.FLAGS.BOLD) { + this._ctx.font = "bold " + this._ctx.font; + if (fg < 8) { + fg += 8; + } + } + if (flags & Types_1.FLAGS.UNDERLINE) { + if (fg === BaseRenderLayer_1.INVERTED_DEFAULT_COLOR) { + this._ctx.fillStyle = this._colors.background; + } + else if (fg < 256) { + this._ctx.fillStyle = this._colors.ansi[fg]; + } + else { + this._ctx.fillStyle = this._colors.foreground; + } + this.fillBottomLineAtCells(x, y); + } + this.drawChar(terminal, char, code, width, x, y, fg, bg, !!(flags & Types_1.FLAGS.BOLD), !!(flags & Types_1.FLAGS.DIM)); + this._ctx.restore(); + } + } + }; + TextRenderLayer.prototype._isOverlapping = function (charData) { + if (charData[Buffer_1.CHAR_DATA_WIDTH_INDEX] !== 1) { + return false; + } + var code = charData[Buffer_1.CHAR_DATA_CODE_INDEX]; + if (code < 256) { + return false; + } + var char = charData[Buffer_1.CHAR_DATA_CHAR_INDEX]; + if (this._characterOverlapCache.hasOwnProperty(char)) { + return this._characterOverlapCache[char]; + } + this._ctx.save(); + this._ctx.font = this._characterFont; + var overlaps = Math.floor(this._ctx.measureText(char).width) > this._characterWidth; + this._ctx.restore(); + this._characterOverlapCache[char] = overlaps; + return overlaps; + }; + TextRenderLayer.prototype._clearChar = function (x, y) { + var colsToClear = 1; + var state = this._state.cache[x][y]; + if (state && state[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) { + colsToClear = 2; + } + this.clearCells(x, y, colsToClear, 1); + }; + return TextRenderLayer; +}(BaseRenderLayer_1.BaseRenderLayer)); +exports.TextRenderLayer = TextRenderLayer; + + + +},{"../Buffer":1,"./BaseRenderLayer":18,"./GridCache":22,"./Types":27}],27:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var FLAGS; +(function (FLAGS) { + FLAGS[FLAGS["BOLD"] = 1] = "BOLD"; + FLAGS[FLAGS["UNDERLINE"] = 2] = "UNDERLINE"; + FLAGS[FLAGS["BLINK"] = 4] = "BLINK"; + FLAGS[FLAGS["INVERSE"] = 8] = "INVERSE"; + FLAGS[FLAGS["INVISIBLE"] = 16] = "INVISIBLE"; + FLAGS[FLAGS["DIM"] = 32] = "DIM"; +})(FLAGS = exports.FLAGS || (exports.FLAGS = {})); +; + + + +},{}],28:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Generic_1 = require("./Generic"); +var isNode = (typeof navigator === 'undefined') ? true : false; +var userAgent = (isNode) ? 'node' : navigator.userAgent; +var platform = (isNode) ? 'node' : navigator.platform; +exports.isFirefox = !!~userAgent.indexOf('Firefox'); +exports.isMSIE = !!~userAgent.indexOf('MSIE') || !!~userAgent.indexOf('Trident'); +exports.isMac = Generic_1.contains(['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], platform); +exports.isIpad = platform === 'iPad'; +exports.isIphone = platform === 'iPhone'; +exports.isMSWindows = Generic_1.contains(['Windows', 'Win16', 'Win32', 'WinCE'], platform); +exports.isLinux = platform.indexOf('Linux') >= 0; + + + +},{"./Generic":31}],29:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var EventEmitter_1 = require("../EventEmitter"); +var CharMeasure = (function (_super) { + __extends(CharMeasure, _super); + function CharMeasure(document, parentElement) { + var _this = _super.call(this) || this; + _this._document = document; + _this._parentElement = parentElement; + return _this; + } + Object.defineProperty(CharMeasure.prototype, "width", { + get: function () { + return this._width; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CharMeasure.prototype, "height", { + get: function () { + return this._height; + }, + enumerable: true, + configurable: true + }); + CharMeasure.prototype.measure = function (options) { + var _this = this; + if (!this._measureElement) { + this._measureElement = this._document.createElement('span'); + this._measureElement.style.position = 'absolute'; + this._measureElement.style.top = '0'; + this._measureElement.style.left = '-9999em'; + this._measureElement.style.lineHeight = 'normal'; + this._measureElement.textContent = 'W'; + this._measureElement.setAttribute('aria-hidden', 'true'); + this._parentElement.appendChild(this._measureElement); + setTimeout(function () { return _this._doMeasure(options); }, 0); + } + else { + this._doMeasure(options); + } + }; + CharMeasure.prototype._doMeasure = function (options) { + this._measureElement.style.fontFamily = options.fontFamily; + this._measureElement.style.fontSize = options.fontSize + "px"; + var geometry = this._measureElement.getBoundingClientRect(); + if (geometry.width === 0 || geometry.height === 0) { + return; + } + if (this._width !== geometry.width || this._height !== geometry.height) { + this._width = geometry.width; + this._height = Math.ceil(geometry.height); + this.emit('charsizechanged'); + } + }; + return CharMeasure; +}(EventEmitter_1.EventEmitter)); +exports.CharMeasure = CharMeasure; + + + +},{"../EventEmitter":7}],30:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var EventEmitter_1 = require("../EventEmitter"); +var CircularList = (function (_super) { + __extends(CircularList, _super); + function CircularList(_maxLength) { + var _this = _super.call(this) || this; + _this._maxLength = _maxLength; + _this._array = new Array(_this._maxLength); + _this._startIndex = 0; + _this._length = 0; + return _this; + } + Object.defineProperty(CircularList.prototype, "maxLength", { + get: function () { + return this._maxLength; + }, + set: function (newMaxLength) { + if (this._maxLength === newMaxLength) { + return; + } + var newArray = new Array(newMaxLength); + for (var i = 0; i < Math.min(newMaxLength, this.length); i++) { + newArray[i] = this._array[this._getCyclicIndex(i)]; + } + this._array = newArray; + this._maxLength = newMaxLength; + this._startIndex = 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CircularList.prototype, "length", { + get: function () { + return this._length; + }, + set: function (newLength) { + if (newLength > this._length) { + for (var i = this._length; i < newLength; i++) { + this._array[i] = undefined; + } + } + this._length = newLength; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CircularList.prototype, "forEach", { + get: function () { + var _this = this; + return function (callbackfn) { + var i = 0; + var length = _this.length; + for (var i_1 = 0; i_1 < length; i_1++) { + callbackfn(_this.get(i_1), i_1); + } + }; + }, + enumerable: true, + configurable: true + }); + CircularList.prototype.get = function (index) { + return this._array[this._getCyclicIndex(index)]; + }; + CircularList.prototype.set = function (index, value) { + this._array[this._getCyclicIndex(index)] = value; + }; + CircularList.prototype.push = function (value) { + this._array[this._getCyclicIndex(this._length)] = value; + if (this._length === this._maxLength) { + this._startIndex++; + if (this._startIndex === this._maxLength) { + this._startIndex = 0; + } + this.emit('trim', 1); + } + else { + this._length++; + } + }; + CircularList.prototype.pop = function () { + return this._array[this._getCyclicIndex(this._length-- - 1)]; + }; + CircularList.prototype.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + if (deleteCount) { + for (var i = start; i < this._length - deleteCount; i++) { + this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)]; + } + this._length -= deleteCount; + } + if (items && items.length) { + for (var i = this._length - 1; i >= start; i--) { + this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)]; + } + for (var i = 0; i < items.length; i++) { + this._array[this._getCyclicIndex(start + i)] = items[i]; + } + if (this._length + items.length > this.maxLength) { + var countToTrim = (this._length + items.length) - this.maxLength; + this._startIndex += countToTrim; + this._length = this.maxLength; + this.emit('trim', countToTrim); + } + else { + this._length += items.length; + } + } + }; + CircularList.prototype.trimStart = function (count) { + if (count > this._length) { + count = this._length; + } + this._startIndex += count; + this._length -= count; + this.emit('trim', count); + }; + CircularList.prototype.shiftElements = function (start, count, offset) { + if (count <= 0) { + return; + } + if (start < 0 || start >= this._length) { + throw new Error('start argument out of range'); + } + if (start + offset < 0) { + throw new Error('Cannot shift elements in list beyond index 0'); + } + if (offset > 0) { + for (var i = count - 1; i >= 0; i--) { + this.set(start + i + offset, this.get(start + i)); + } + var expandListBy = (start + count + offset) - this._length; + if (expandListBy > 0) { + this._length += expandListBy; + while (this._length > this.maxLength) { + this._length--; + this._startIndex++; + this.emit('trim', 1); + } + } + } + else { + for (var i = 0; i < count; i++) { + this.set(start + i + offset, this.get(start + i)); + } + } + }; + CircularList.prototype._getCyclicIndex = function (index) { + return (this._startIndex + index) % this.maxLength; + }; + return CircularList; +}(EventEmitter_1.EventEmitter)); +exports.CircularList = CircularList; + + + +},{"../EventEmitter":7}],31:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function contains(arr, el) { + return arr.indexOf(el) >= 0; +} +exports.contains = contains; +; + + + +},{}],32:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var MouseHelper = (function () { + function MouseHelper(_renderer) { + this._renderer = _renderer; + } + MouseHelper.getCoordsRelativeToElement = function (event, element) { + if (event.pageX == null) { + return null; + } + var originalElement = element; + var x = event.pageX; + var y = event.pageY; + while (element) { + x -= element.offsetLeft; + y -= element.offsetTop; + element = 'offsetParent' in element ? element.offsetParent : element.parentElement; + } + element = originalElement; + while (element && element !== element.ownerDocument.body) { + x += element.scrollLeft; + y += element.scrollTop; + element = element.parentElement; + } + return [x, y]; + }; + MouseHelper.prototype.getCoords = function (event, element, charMeasure, lineHeight, colCount, rowCount, isSelection) { + if (!charMeasure.width || !charMeasure.height) { + return null; + } + var coords = MouseHelper.getCoordsRelativeToElement(event, element); + if (!coords) { + return null; + } + coords[0] = Math.ceil((coords[0] + (isSelection ? this._renderer.dimensions.actualCellWidth / 2 : 0)) / this._renderer.dimensions.actualCellWidth); + coords[1] = Math.ceil(coords[1] / this._renderer.dimensions.actualCellHeight); + coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0)); + coords[1] = Math.min(Math.max(coords[1], 1), rowCount); + return coords; + }; + MouseHelper.prototype.getRawByteCoords = function (event, element, charMeasure, lineHeight, colCount, rowCount) { + var coords = this.getCoords(event, element, charMeasure, lineHeight, colCount, rowCount); + var x = coords[0]; + var y = coords[1]; + x += 32; + y += 32; + return { x: x, y: y }; + }; + return MouseHelper; +}()); +exports.MouseHelper = MouseHelper; + + + +},{}],33:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BellSound = 'data:audio/wav;base64,UklGRigBAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQQBAADpAFgCwAMlBZoG/wdmCcoKRAypDQ8PbRDBEQQTOxRtFYcWlBePGIUZXhoiG88bcBz7HHIdzh0WHlMeZx51HmkeUx4WHs8dah0AHXwc3hs9G4saxRnyGBIYGBcQFv8U4RPAEoYRQBACD70NWwwHC6gJOwjWBloF7gOBAhABkf8b/qv8R/ve+Xf4Ife79W/0JfPZ8Z/wde9N7ijtE+wU6xvqM+lb6H7nw+YX5mrlxuQz5Mzje+Ma49fioeKD4nXiYeJy4pHitOL04j/jn+MN5IPkFOWs5U3mDefM55/ogOl36m7rdOyE7abuyu8D8Unyj/Pg9D/2qfcb+Yn6/vuK/Qj/lAAlAg=='; + + + +},{}],34:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Terminal_1 = require("./Terminal"); +module.exports = Terminal_1.Terminal; + + + +},{"./Terminal":13}]},{},[34])(34) +}); +//# sourceMappingURL=xterm.js.map diff --git a/BTPanel/static/build/xterm.js.map b/BTPanel/static/build/xterm.js.map new file mode 100644 index 00000000..9716c5e2 --- /dev/null +++ b/BTPanel/static/build/xterm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"xterm.js","sources":["../src/xterm.ts","../src/utils/Sounds.ts","../src/utils/MouseHelper.ts","../src/utils/Generic.ts","../src/utils/CircularList.ts","../src/utils/CharMeasure.ts","../src/utils/Browser.ts","../src/renderer/Types.ts","../src/renderer/TextRenderLayer.ts","../src/renderer/SelectionRenderLayer.ts","../src/renderer/Renderer.ts","../src/renderer/LinkRenderLayer.ts","../src/renderer/GridCache.ts","../src/renderer/CursorRenderLayer.ts","../src/renderer/ColorManager.ts","../src/renderer/CharAtlas.ts","../src/renderer/BaseRenderLayer.ts","../src/input/MouseZoneManager.ts","../src/handlers/Clipboard.ts","../src/Viewport.ts","../src/Types.ts","../src/Terminal.ts","../src/SelectionModel.ts","../src/SelectionManager.ts","../src/Parser.ts","../src/Linkifier.ts","../src/InputHandler.ts","../src/EventEmitter.ts","../src/EscapeSequences.ts","../src/CompositionHelper.ts","../src/Charsets.ts","../src/CharWidth.ts","../src/BufferSet.ts","../src/Buffer.ts","../node_modules/browser-pack/_prelude.js"],"sourcesContent":["/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This file is the entry point for browserify.\n */\n\nimport { Terminal } from './Terminal';\n\nmodule.exports = Terminal;\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// Source: https://freesound.org/people/altemark/sounds/45759/\n// This sound is released under the Creative Commons Attribution 3.0 Unported\n// (CC BY 3.0) license. It was created by 'altemark'. No modifications have been\n// made, apart from the conversion to base64.\nexport const BellSound = 'data:audio/wav;base64,UklGRigBAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQQBAADpAFgCwAMlBZoG/wdmCcoKRAypDQ8PbRDBEQQTOxRtFYcWlBePGIUZXhoiG88bcBz7HHIdzh0WHlMeZx51HmkeUx4WHs8dah0AHXwc3hs9G4saxRnyGBIYGBcQFv8U4RPAEoYRQBACD70NWwwHC6gJOwjWBloF7gOBAhABkf8b/qv8R/ve+Xf4Ife79W/0JfPZ8Z/wde9N7ijtE+wU6xvqM+lb6H7nw+YX5mrlxuQz5Mzje+Ma49fioeKD4nXiYeJy4pHitOL04j/jn+MN5IPkFOWs5U3mDefM55/ogOl36m7rdOyE7abuyu8D8Unyj/Pg9D/2qfcb+Yn6/vuK/Qj/lAAlAg==';\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharMeasure } from '../Interfaces';\nimport { IRenderer } from '../renderer/Interfaces';\n\nexport class MouseHelper {\n constructor(private _renderer: IRenderer) {}\n\n public static getCoordsRelativeToElement(event: {pageX: number, pageY: number}, element: HTMLElement): [number, number] {\n // Ignore browsers that don't support MouseEvent.pageX\n if (event.pageX == null) {\n return null;\n }\n\n const originalElement = element;\n let x = event.pageX;\n let y = event.pageY;\n\n // Converts the coordinates from being relative to the document to being\n // relative to the terminal.\n while (element) {\n x -= element.offsetLeft;\n y -= element.offsetTop;\n element = 'offsetParent' in element ? element.offsetParent : element.parentElement;\n }\n element = originalElement;\n while (element && element !== element.ownerDocument.body) {\n x += element.scrollLeft;\n y += element.scrollTop;\n element = element.parentElement;\n }\n return [x, y];\n }\n\n /**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param charMeasure The char measure object used to determine character sizes.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows n the terminal.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\n public getCoords(event: {pageX: number, pageY: number}, element: HTMLElement, charMeasure: ICharMeasure, lineHeight: number, colCount: number, rowCount: number, isSelection?: boolean): [number, number] {\n // Coordinates cannot be measured if charMeasure has not been initialized\n if (!charMeasure.width || !charMeasure.height) {\n return null;\n }\n\n const coords = MouseHelper.getCoordsRelativeToElement(event, element);\n if (!coords) {\n return null;\n }\n\n coords[0] = Math.ceil((coords[0] + (isSelection ? this._renderer.dimensions.actualCellWidth / 2 : 0)) / this._renderer.dimensions.actualCellWidth);\n coords[1] = Math.ceil(coords[1] / this._renderer.dimensions.actualCellHeight);\n\n // Ensure coordinates are within the terminal viewport. Note that selections\n // need an addition point of precision to cover the end point (as characters\n // cover half of one char and half of the next).\n coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));\n coords[1] = Math.min(Math.max(coords[1], 1), rowCount);\n\n return coords;\n }\n\n /**\n * Gets coordinates within the terminal for a particular mouse event, wrapping\n * them to the bounds of the terminal and adding 32 to both the x and y values\n * as expected by xterm.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param charMeasure The char measure object used to determine character sizes.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows in the terminal.\n */\n public getRawByteCoords(event: MouseEvent, element: HTMLElement, charMeasure: ICharMeasure, lineHeight: number, colCount: number, rowCount: number): { x: number, y: number } {\n const coords = this.getCoords(event, element, charMeasure, lineHeight, colCount, rowCount);\n let x = coords[0];\n let y = coords[1];\n\n // xterm sends raw bytes and starts at 32 (SP) for each.\n x += 32;\n y += 32;\n\n return { x, y };\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Return if the given array contains the given element\n * @param {Array} array The array to search for the given element.\n * @param {Object} el The element to look for into the array\n */\nexport function contains(arr: any[], el: any): boolean {\n return arr.indexOf(el) >= 0;\n};\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { EventEmitter } from '../EventEmitter';\nimport { ICircularList } from '../Interfaces';\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList extends EventEmitter implements ICircularList {\n protected _array: T[];\n private _startIndex: number;\n private _length: number;\n\n constructor(\n private _maxLength: number\n ) {\n super();\n this._array = new Array(this._maxLength);\n this._startIndex = 0;\n this._length = 0;\n }\n\n public get maxLength(): number {\n return this._maxLength;\n }\n\n public set maxLength(newMaxLength: number) {\n // There was no change in maxLength, return early.\n if (this._maxLength === newMaxLength) {\n return;\n }\n\n // Reconstruct array, starting at index 0. Only transfer values from the\n // indexes 0 to length.\n let newArray = new Array(newMaxLength);\n for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n newArray[i] = this._array[this._getCyclicIndex(i)];\n }\n this._array = newArray;\n this._maxLength = newMaxLength;\n this._startIndex = 0;\n }\n\n public get length(): number {\n return this._length;\n }\n\n public set length(newLength: number) {\n if (newLength > this._length) {\n for (let i = this._length; i < newLength; i++) {\n this._array[i] = undefined;\n }\n }\n this._length = newLength;\n }\n\n public get forEach(): (callbackfn: (value: T, index: number) => void) => void {\n return (callbackfn: (value: T, index: number) => void) => {\n let i = 0;\n let length = this.length;\n for (let i = 0; i < length; i++) {\n callbackfn(this.get(i), i);\n }\n };\n }\n\n /**\n * Gets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index of the value to get.\n * @return The value corresponding to the index.\n */\n public get(index: number): T {\n return this._array[this._getCyclicIndex(index)];\n }\n\n /**\n * Sets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index to set.\n * @param value The value to set.\n */\n public set(index: number, value: T): void {\n this._array[this._getCyclicIndex(index)] = value;\n }\n\n /**\n * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n * if the maximum length is reached.\n * @param value The value to push onto the list.\n */\n public push(value: T): void {\n this._array[this._getCyclicIndex(this._length)] = value;\n if (this._length === this._maxLength) {\n this._startIndex++;\n if (this._startIndex === this._maxLength) {\n this._startIndex = 0;\n }\n this.emit('trim', 1);\n } else {\n this._length++;\n }\n }\n\n /**\n * Removes and returns the last value on the list.\n * @return The popped value.\n */\n public pop(): T {\n return this._array[this._getCyclicIndex(this._length-- - 1)];\n }\n\n /**\n * Deletes and/or inserts items at a particular index (in that order). Unlike\n * Array.prototype.splice, this operation does not return the deleted items as a new array in\n * order to save creating a new array. Note that this operation may shift all values in the list\n * in the worst case.\n * @param start The index to delete and/or insert.\n * @param deleteCount The number of elements to delete.\n * @param items The items to insert.\n */\n public splice(start: number, deleteCount: number, ...items: T[]): void {\n // Delete items\n if (deleteCount) {\n for (let i = start; i < this._length - deleteCount; i++) {\n this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n }\n this._length -= deleteCount;\n }\n\n if (items && items.length) {\n // Add items\n for (let i = this._length - 1; i >= start; i--) {\n this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n }\n for (let i = 0; i < items.length; i++) {\n this._array[this._getCyclicIndex(start + i)] = items[i];\n }\n\n // Adjust length as needed\n if (this._length + items.length > this.maxLength) {\n const countToTrim = (this._length + items.length) - this.maxLength;\n this._startIndex += countToTrim;\n this._length = this.maxLength;\n this.emit('trim', countToTrim);\n } else {\n this._length += items.length;\n }\n }\n }\n\n /**\n * Trims a number of items from the start of the list.\n * @param count The number of items to remove.\n */\n public trimStart(count: number): void {\n if (count > this._length) {\n count = this._length;\n }\n this._startIndex += count;\n this._length -= count;\n this.emit('trim', count);\n }\n\n public shiftElements(start: number, count: number, offset: number): void {\n if (count <= 0) {\n return;\n }\n if (start < 0 || start >= this._length) {\n throw new Error('start argument out of range');\n }\n if (start + offset < 0) {\n throw new Error('Cannot shift elements in list beyond index 0');\n }\n\n if (offset > 0) {\n for (let i = count - 1; i >= 0; i--) {\n this.set(start + i + offset, this.get(start + i));\n }\n const expandListBy = (start + count + offset) - this._length;\n if (expandListBy > 0) {\n this._length += expandListBy;\n while (this._length > this.maxLength) {\n this._length--;\n this._startIndex++;\n this.emit('trim', 1);\n }\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.set(start + i + offset, this.get(start + i));\n }\n }\n }\n\n /**\n * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n * backing array to get the element associated with the regular index.\n * @param index The regular index.\n * @returns The cyclic index.\n */\n private _getCyclicIndex(index: number): number {\n return (this._startIndex + index) % this.maxLength;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { EventEmitter } from '../EventEmitter';\nimport { ICharMeasure, ITerminal, ITerminalOptions } from '../Interfaces';\n\n/**\n * Utility class that measures the size of a character. Measurements are done in\n * the DOM rather than with a canvas context because support for extracting the\n * height of characters is patchy across browsers.\n */\nexport class CharMeasure extends EventEmitter implements ICharMeasure {\n private _document: Document;\n private _parentElement: HTMLElement;\n private _measureElement: HTMLElement;\n private _width: number;\n private _height: number;\n\n constructor(document: Document, parentElement: HTMLElement) {\n super();\n this._document = document;\n this._parentElement = parentElement;\n }\n\n public get width(): number {\n return this._width;\n }\n\n public get height(): number {\n return this._height;\n }\n\n public measure(options: ITerminalOptions): void {\n if (!this._measureElement) {\n this._measureElement = this._document.createElement('span');\n this._measureElement.style.position = 'absolute';\n this._measureElement.style.top = '0';\n this._measureElement.style.left = '-9999em';\n this._measureElement.style.lineHeight = 'normal';\n this._measureElement.textContent = 'W';\n this._measureElement.setAttribute('aria-hidden', 'true');\n this._parentElement.appendChild(this._measureElement);\n // Perform _doMeasure async if the element was just attached as sometimes\n // getBoundingClientRect does not return accurate values without this.\n setTimeout(() => this._doMeasure(options), 0);\n } else {\n this._doMeasure(options);\n }\n }\n\n private _doMeasure(options: ITerminalOptions): void {\n this._measureElement.style.fontFamily = options.fontFamily;\n this._measureElement.style.fontSize = `${options.fontSize}px`;\n const geometry = this._measureElement.getBoundingClientRect();\n // The element is likely currently display:none, we should retain the\n // previous value.\n if (geometry.width === 0 || geometry.height === 0) {\n return;\n }\n if (this._width !== geometry.width || this._height !== geometry.height) {\n this._width = geometry.width;\n this._height = Math.ceil(geometry.height);\n this.emit('charsizechanged');\n }\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { contains } from './Generic';\n\nconst isNode = (typeof navigator === 'undefined') ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = !!~userAgent.indexOf('Firefox');\nexport const isMSIE = !!~userAgent.indexOf('MSIE') || !!~userAgent.indexOf('Trident');\n\n// Find the users platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = contains(['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], platform);\nexport const isIpad = platform === 'iPad';\nexport const isIphone = platform === 'iPhone';\nexport const isMSWindows = contains(['Windows', 'Win16', 'Win32', 'WinCE'], platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n /**\n * Flags used to render terminal text properly.\n */\nexport enum FLAGS {\n BOLD = 1,\n UNDERLINE = 2,\n BLINK = 4,\n INVERSE = 8,\n INVISIBLE = 16,\n DIM = 32\n};\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorSet, IRenderDimensions } from './Interfaces';\nimport { IBuffer, ICharMeasure, ITerminal } from '../Interfaces';\nimport { CHAR_DATA_ATTR_INDEX, CHAR_DATA_CODE_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX } from '../Buffer';\nimport { FLAGS } from './Types';\nimport { GridCache } from './GridCache';\nimport { CharData } from '../Types';\nimport { BaseRenderLayer, INVERTED_DEFAULT_COLOR } from './BaseRenderLayer';\n\n/**\n * This CharData looks like a null character, which will forc a clear and render\n * when the character changes (a regular space ' ' character may not as it's\n * drawn state is a cleared cell).\n */\nconst OVERLAP_OWNED_CHAR_DATA: CharData = [null, '', 0, -1];\n\nexport class TextRenderLayer extends BaseRenderLayer {\n private _state: GridCache;\n private _characterWidth: number;\n private _characterFont: string;\n private _characterOverlapCache: { [key: string]: boolean } = {};\n\n constructor(container: HTMLElement, zIndex: number, colors: IColorSet) {\n super(container, 'text', zIndex, false, colors);\n this._state = new GridCache();\n }\n\n public resize(terminal: ITerminal, dim: IRenderDimensions, charSizeChanged: boolean): void {\n super.resize(terminal, dim, charSizeChanged);\n\n // Clear the character width cache if the font or width has changed\n const terminalFont = `${terminal.options.fontSize * window.devicePixelRatio}px ${terminal.options.fontFamily}`;\n if (this._characterWidth !== dim.scaledCharWidth || this._characterFont !== terminalFont) {\n this._characterWidth = dim.scaledCharWidth;\n this._characterFont = terminalFont;\n this._characterOverlapCache = {};\n }\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state.clear();\n this._state.resize(terminal.cols, terminal.rows);\n }\n\n public reset(terminal: ITerminal): void {\n this._state.clear();\n this.clearAll();\n }\n\n public onGridChanged(terminal: ITerminal, startRow: number, endRow: number): void {\n // Resize has not been called yet\n if (this._state.cache.length === 0) {\n return;\n }\n\n for (let y = startRow; y <= endRow; y++) {\n const row = y + terminal.buffer.ydisp;\n const line = terminal.buffer.lines.get(row);\n\n this.clearCells(0, y, terminal.cols, 1);\n // for (let x = 0; x < terminal.cols; x++) {\n // this._state.cache[x][y] = null;\n // }\n\n for (let x = 0; x < terminal.cols; x++) {\n const charData = line[x];\n const code: number = charData[CHAR_DATA_CODE_INDEX];\n const char: string = charData[CHAR_DATA_CHAR_INDEX];\n const attr: number = charData[CHAR_DATA_ATTR_INDEX];\n let width: number = charData[CHAR_DATA_WIDTH_INDEX];\n\n // The character to the left is a wide character, drawing is owned by\n // the char at x-1\n if (width === 0) {\n // this._state.cache[x][y] = null;\n continue;\n }\n\n // If the character is a space and the character to the left is an\n // overlapping character, skip the character and allow the overlapping\n // char to take full control over this character's cell.\n if (code === 32 /*' '*/) {\n if (x > 0) {\n const previousChar: CharData = line[x - 1];\n if (this._isOverlapping(previousChar)) {\n continue;\n }\n }\n }\n\n // Skip rendering if the character is identical\n // const state = this._state.cache[x][y];\n // if (state && state[CHAR_DATA_CHAR_INDEX] === char && state[CHAR_DATA_ATTR_INDEX] === attr) {\n // // Skip render, contents are identical\n // this._state.cache[x][y] = charData;\n // continue;\n // }\n\n // Clear the old character was not a space with the default background\n // const wasInverted = !!(state && state[CHAR_DATA_ATTR_INDEX] && state[CHAR_DATA_ATTR_INDEX] >> 18 & FLAGS.INVERSE);\n // if (state && !(state[CHAR_DATA_CODE_INDEX] === 32 /*' '*/ && (state[CHAR_DATA_ATTR_INDEX] & 0x1ff) >= 256 && !wasInverted)) {\n // this._clearChar(x, y);\n // }\n // this._state.cache[x][y] = charData;\n\n const flags = attr >> 18;\n let bg = attr & 0x1ff;\n\n // Skip rendering if the character is invisible\n const isDefaultBackground = bg >= 256;\n const isInvisible = flags & FLAGS.INVISIBLE;\n const isInverted = flags & FLAGS.INVERSE;\n if (!code || (code === 32 /*' '*/ && isDefaultBackground && !isInverted) || isInvisible) {\n continue;\n }\n\n // If the character is an overlapping char and the character to the right is a\n // space, take ownership of the cell to the right.\n if (width !== 0 && this._isOverlapping(charData)) {\n // If the character is overlapping, we want to force a re-render on every\n // frame. This is specifically to work around the case where two\n // overlaping chars `a` and `b` are adjacent, the cursor is moved to b and a\n // space is added. Without this, the first half of `b` would never\n // get removed, and `a` would not re-render because it thinks it's\n // already in the correct state.\n // this._state.cache[x][y] = OVERLAP_OWNED_CHAR_DATA;\n if (x < line.length - 1 && line[x + 1][CHAR_DATA_CODE_INDEX] === 32 /*' '*/) {\n width = 2;\n // this._clearChar(x + 1, y);\n // The overlapping char's char data will force a clear and render when the\n // overlapping char is no longer to the left of the character and also when\n // the space changes to another character.\n // this._state.cache[x + 1][y] = OVERLAP_OWNED_CHAR_DATA;\n }\n }\n\n let fg = (attr >> 9) & 0x1ff;\n\n // If inverse flag is on, the foreground should become the background.\n if (isInverted) {\n const temp = bg;\n bg = fg;\n fg = temp;\n if (fg === 256) {\n fg = INVERTED_DEFAULT_COLOR;\n }\n if (bg === 257) {\n bg = INVERTED_DEFAULT_COLOR;\n }\n }\n\n // Clear the cell next to this character if it's wide\n if (width === 2) {\n // this.clearCells(x + 1, y, 1, 1);\n }\n\n // Draw background\n if (bg < 256) {\n this._ctx.save();\n this._ctx.fillStyle = (bg === INVERTED_DEFAULT_COLOR ? this._colors.foreground : this._colors.ansi[bg]);\n this.fillCells(x, y, width, 1);\n this._ctx.restore();\n }\n\n this._ctx.save();\n if (flags & FLAGS.BOLD) {\n this._ctx.font = `bold ${this._ctx.font}`;\n // Convert the FG color to the bold variant\n if (fg < 8) {\n fg += 8;\n }\n }\n\n if (flags & FLAGS.UNDERLINE) {\n if (fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._colors.background;\n } else if (fg < 256) {\n // 256 color support\n this._ctx.fillStyle = this._colors.ansi[fg];\n } else {\n this._ctx.fillStyle = this._colors.foreground;\n }\n this.fillBottomLineAtCells(x, y);\n }\n\n this.drawChar(terminal, char, code, width, x, y, fg, bg, !!(flags & FLAGS.BOLD), !!(flags & FLAGS.DIM));\n\n this._ctx.restore();\n }\n }\n }\n\n\t/**\n\t * Whether a character is overlapping to the next cell.\n\t */\n private _isOverlapping(charData: CharData): boolean {\n // Only single cell characters can be overlapping, rendering issues can\n // occur without this check\n if (charData[CHAR_DATA_WIDTH_INDEX] !== 1) {\n return false;\n }\n\n // We assume that any ascii character will not overlap\n const code = charData[CHAR_DATA_CODE_INDEX];\n if (code < 256) {\n return false;\n }\n\n // Deliver from cache if available\n const char = charData[CHAR_DATA_CHAR_INDEX];\n if (this._characterOverlapCache.hasOwnProperty(char)) {\n return this._characterOverlapCache[char];\n }\n\n // Setup the font\n this._ctx.save();\n this._ctx.font = this._characterFont;\n\n // Measure the width of the character, but Math.floor it\n // because that is what the renderer does when it calculates\n // the character dimensions we are comparing against\n const overlaps = Math.floor(this._ctx.measureText(char).width) > this._characterWidth;\n\n // Restore the original context\n this._ctx.restore();\n\n // Cache and return\n this._characterOverlapCache[char] = overlaps;\n return overlaps;\n }\n\n /**\n * Clear the charcater at the cell specified.\n * @param x The column of the char.\n * @param y The row of the char.\n */\n private _clearChar(x: number, y: number): void {\n let colsToClear = 1;\n // Clear the adjacent character if it was wide\n const state = this._state.cache[x][y];\n if (state && state[CHAR_DATA_WIDTH_INDEX] === 2) {\n colsToClear = 2;\n }\n this.clearCells(x, y, colsToClear, 1);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorSet, IRenderDimensions } from './Interfaces';\nimport { IBuffer, ICharMeasure, ITerminal } from '../Interfaces';\nimport { CHAR_DATA_ATTR_INDEX } from '../Buffer';\nimport { GridCache } from './GridCache';\nimport { FLAGS } from './Types';\nimport { BaseRenderLayer } from './BaseRenderLayer';\n\nexport class SelectionRenderLayer extends BaseRenderLayer {\n private _state: {start: [number, number], end: [number, number]};\n\n constructor(container: HTMLElement, zIndex: number, colors: IColorSet) {\n super(container, 'selection', zIndex, true, colors);\n this._state = {\n start: null,\n end: null\n };\n }\n\n public resize(terminal: ITerminal, dim: IRenderDimensions, charSizeChanged: boolean): void {\n super.resize(terminal, dim, charSizeChanged);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = {\n start: null,\n end: null\n };\n }\n\n public reset(terminal: ITerminal): void {\n if (this._state.start && this._state.end) {\n this._state = {\n start: null,\n end: null\n };\n this.clearAll();\n }\n }\n\n public onSelectionChanged(terminal: ITerminal, start: [number, number], end: [number, number]): void {\n // Selection has not changed\n if (this._state.start === start || this._state.end === end) {\n return;\n }\n\n // Remove all selections\n this.clearAll();\n\n // Selection does not exist\n if (!start || !end) {\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportStartRow = start[1] - terminal.buffer.ydisp;\n const viewportEndRow = end[1] - terminal.buffer.ydisp;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n return;\n }\n\n // Draw first row\n const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n const startRowEndCol = viewportCappedStartRow === viewportCappedEndRow ? end[0] : terminal.cols;\n this._ctx.fillStyle = this._colors.selection;\n this.fillCells(startCol, viewportCappedStartRow, startRowEndCol - startCol, 1);\n\n // Draw middle rows\n const middleRowsCount = Math.max(viewportCappedEndRow - viewportCappedStartRow - 1, 0);\n this.fillCells(0, viewportCappedStartRow + 1, terminal.cols, middleRowsCount);\n\n // Draw final row\n if (viewportCappedStartRow !== viewportCappedEndRow) {\n // Only draw viewportEndRow if it's not the same as viewportStartRow\n const endCol = viewportEndRow === viewportCappedEndRow ? end[0] : terminal.cols;\n this.fillCells(0, viewportCappedEndRow, endCol, 1);\n }\n\n // Save state for next render\n this._state.start = [start[0], start[1]];\n this._state.end = [end[0], end[1]];\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal, ITheme } from '../Interfaces';\nimport { CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from '../Buffer';\nimport { TextRenderLayer } from './TextRenderLayer';\nimport { SelectionRenderLayer } from './SelectionRenderLayer';\nimport { CursorRenderLayer } from './CursorRenderLayer';\nimport { ColorManager } from './ColorManager';\nimport { BaseRenderLayer } from './BaseRenderLayer';\nimport { IRenderLayer, IColorSet, IRenderer, IRenderDimensions } from './Interfaces';\nimport { LinkRenderLayer } from './LinkRenderLayer';\nimport { EventEmitter } from '../EventEmitter';\n\nexport class Renderer extends EventEmitter implements IRenderer {\n /** A queue of the rows to be refreshed */\n private _refreshRowsQueue: {start: number, end: number}[] = [];\n private _refreshAnimationFrame = null;\n\n private _renderLayers: IRenderLayer[];\n private _devicePixelRatio: number;\n\n public colorManager: ColorManager;\n public dimensions: IRenderDimensions;\n\n constructor(private _terminal: ITerminal, theme: ITheme) {\n super();\n this.colorManager = new ColorManager();\n if (theme) {\n this.colorManager.setTheme(theme);\n }\n this._renderLayers = [\n new TextRenderLayer(this._terminal.element, 0, this.colorManager.colors),\n new SelectionRenderLayer(this._terminal.element, 1, this.colorManager.colors),\n new LinkRenderLayer(this._terminal.element, 2, this.colorManager.colors, this._terminal),\n new CursorRenderLayer(this._terminal.element, 3, this.colorManager.colors)\n ];\n this.dimensions = {\n scaledCharWidth: null,\n scaledCharHeight: null,\n scaledCellWidth: null,\n scaledCellHeight: null,\n scaledCharLeft: null,\n scaledCharTop: null,\n scaledCanvasWidth: null,\n scaledCanvasHeight: null,\n canvasWidth: null,\n canvasHeight: null,\n actualCellWidth: null,\n actualCellHeight: null\n };\n this._devicePixelRatio = window.devicePixelRatio;\n }\n\n public onWindowResize(devicePixelRatio: number): void {\n // If the device pixel ratio changed, the char atlas needs to be regenerated\n // and the terminal needs to refreshed\n if (this._devicePixelRatio !== devicePixelRatio) {\n this._devicePixelRatio = devicePixelRatio;\n this.onResize(this._terminal.cols, this._terminal.rows, true);\n }\n }\n\n public setTheme(theme: ITheme): IColorSet {\n this.colorManager.setTheme(theme);\n\n // Clear layers and force a full render\n this._renderLayers.forEach(l => {\n l.onThemeChanged(this._terminal, this.colorManager.colors);\n l.reset(this._terminal);\n });\n\n this._terminal.refresh(0, this._terminal.rows - 1);\n\n return this.colorManager.colors;\n }\n\n public onResize(cols: number, rows: number, didCharSizeChange: boolean): void {\n if (!this._terminal.charMeasure.width || !this._terminal.charMeasure.height) {\n return;\n }\n\n // Calculate the scaled character width. Width is floored as it must be\n // drawn to an integer grid in order for the CharAtlas \"stamps\" to not be\n // blurry. When text is drawn to the grid not using the CharAtlas, it is\n // clipped to ensure there is no overlap with the next cell.\n this.dimensions.scaledCharWidth = Math.floor(this._terminal.charMeasure.width * window.devicePixelRatio);\n\n // Calculate the scaled character height. Height is ceiled in case\n // devicePixelRatio is a floating point number in order to ensure there is\n // enough space to draw the character to the cell.\n this.dimensions.scaledCharHeight = Math.ceil(this._terminal.charMeasure.height * window.devicePixelRatio);\n\n // Calculate the scaled cell height, if lineHeight is not 1 then the value\n // will be floored because since lineHeight can never be lower then 1, there\n // is a guarentee that the scaled line height will always be larger than\n // scaled char height.\n this.dimensions.scaledCellHeight = Math.floor(this.dimensions.scaledCharHeight * this._terminal.options.lineHeight);\n\n // Calculate the y coordinate within a cell that text should draw from in\n // order to draw in the center of a cell.\n this.dimensions.scaledCharTop = this._terminal.options.lineHeight === 1 ? 0 : Math.round((this.dimensions.scaledCellHeight - this.dimensions.scaledCharHeight) / 2);\n\n // Calculate the scaled cell width, taking the letterSpacing into account.\n this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth + Math.round(this._terminal.options.letterSpacing);\n\n // Calculate the x coordinate with a cell that text should draw from in\n // order to draw in the center of a cell.\n this.dimensions.scaledCharLeft = Math.floor(this._terminal.options.letterSpacing / 2);\n\n // Recalculate the canvas dimensions; scaled* define the actual number of\n // pixel in the canvas\n this.dimensions.scaledCanvasHeight = this._terminal.rows * this.dimensions.scaledCellHeight;\n this.dimensions.scaledCanvasWidth = this._terminal.cols * this.dimensions.scaledCellWidth;\n\n // The the size of the canvas on the page. It's very important that this\n // rounds to nearest integer and not ceils as browsers often set\n // window.devicePixelRatio as something like 1.100000023841858, when it's\n // actually 1.1. Ceiling causes blurriness as the backing canvas image is 1\n // pixel too large for the canvas element size.\n this.dimensions.canvasHeight = Math.round(this.dimensions.scaledCanvasHeight / window.devicePixelRatio);\n this.dimensions.canvasWidth = Math.round(this.dimensions.scaledCanvasWidth / window.devicePixelRatio);\n\n // Get the _actual_ dimensions of an individual cell. This needs to be\n // derived from the canvasWidth/Height calculated above which takes into\n // account window.devicePixelRatio. CharMeasure.width/height by itself is\n // insufficient when the page is not at 100% zoom level as CharMeasure is\n // measured in CSS pixels, but the actual char size on the canvas can\n // differ.\n this.dimensions.actualCellHeight = this.dimensions.canvasHeight / this._terminal.rows;\n this.dimensions.actualCellWidth = this.dimensions.canvasWidth / this._terminal.cols;\n\n // Resize all render layers\n this._renderLayers.forEach(l => l.resize(this._terminal, this.dimensions, didCharSizeChange));\n\n // Force a refresh\n this._terminal.refresh(0, this._terminal.rows - 1);\n\n this.emit('resize', {\n width: this.dimensions.canvasWidth,\n height: this.dimensions.canvasHeight\n });\n }\n\n public onCharSizeChanged(): void {\n this.onResize(this._terminal.cols, this._terminal.rows, true);\n }\n\n public onBlur(): void {\n this._renderLayers.forEach(l => l.onBlur(this._terminal));\n }\n\n public onFocus(): void {\n this._renderLayers.forEach(l => l.onFocus(this._terminal));\n }\n\n public onSelectionChanged(start: [number, number], end: [number, number]): void {\n this._renderLayers.forEach(l => l.onSelectionChanged(this._terminal, start, end));\n }\n\n public onCursorMove(): void {\n this._renderLayers.forEach(l => l.onCursorMove(this._terminal));\n }\n\n public onOptionsChanged(): void {\n this._renderLayers.forEach(l => l.onOptionsChanged(this._terminal));\n }\n\n public clear(): void {\n this._renderLayers.forEach(l => l.reset(this._terminal));\n }\n\n /**\n * Queues a refresh between two rows (inclusive), to be done on next animation\n * frame.\n * @param {number} start The start row.\n * @param {number} end The end row.\n */\n public queueRefresh(start: number, end: number): void {\n this._refreshRowsQueue.push({ start: start, end: end });\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = window.requestAnimationFrame(this._refreshLoop.bind(this));\n }\n }\n\n /**\n * Performs the refresh loop callback, calling refresh only if a refresh is\n * necessary before queueing up the next one.\n */\n private _refreshLoop(): void {\n let start;\n let end;\n if (this._refreshRowsQueue.length > 4) {\n // Just do a full refresh when 5+ refreshes are queued\n start = 0;\n end = this._terminal.rows - 1;\n } else {\n // Get start and end rows that need refreshing\n start = this._refreshRowsQueue[0].start;\n end = this._refreshRowsQueue[0].end;\n for (let i = 1; i < this._refreshRowsQueue.length; i++) {\n if (this._refreshRowsQueue[i].start < start) {\n start = this._refreshRowsQueue[i].start;\n }\n if (this._refreshRowsQueue[i].end > end) {\n end = this._refreshRowsQueue[i].end;\n }\n }\n }\n this._refreshRowsQueue = [];\n this._refreshAnimationFrame = null;\n\n // Render\n start = Math.max(start, 0);\n end = Math.min(end, this._terminal.rows - 1);\n this._renderLayers.forEach(l => l.onGridChanged(this._terminal, start, end));\n this._terminal.emit('refresh', {start, end});\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorSet, IRenderDimensions } from './Interfaces';\nimport { IBuffer, ICharMeasure, ITerminal, ILinkifierAccessor } from '../Interfaces';\nimport { CHAR_DATA_ATTR_INDEX } from '../Buffer';\nimport { GridCache } from './GridCache';\nimport { FLAGS } from './Types';\nimport { BaseRenderLayer, INVERTED_DEFAULT_COLOR } from './BaseRenderLayer';\nimport { LinkHoverEvent, LinkHoverEventTypes } from '../Types';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n private _state: LinkHoverEvent = null;\n\n constructor(container: HTMLElement, zIndex: number, colors: IColorSet, terminal: ILinkifierAccessor) {\n super(container, 'link', zIndex, true, colors);\n terminal.linkifier.on(LinkHoverEventTypes.HOVER, (e: LinkHoverEvent) => this._onLinkHover(e));\n terminal.linkifier.on(LinkHoverEventTypes.LEAVE, (e: LinkHoverEvent) => this._onLinkLeave(e));\n }\n\n public resize(terminal: ITerminal, dim: IRenderDimensions, charSizeChanged: boolean): void {\n super.resize(terminal, dim, charSizeChanged);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = null;\n }\n\n public reset(terminal: ITerminal): void {\n this._clearCurrentLink();\n }\n\n private _clearCurrentLink(): void {\n if (this._state) {\n this.clearCells(this._state.x, this._state.y, this._state.length, 1);\n this._state = null;\n }\n }\n\n private _onLinkHover(e: LinkHoverEvent): void {\n this._ctx.fillStyle = this._colors.foreground;\n this.fillBottomLineAtCells(e.x, e.y, e.length);\n this._state = e;\n }\n\n private _onLinkLeave(e: LinkHoverEvent): void {\n this._clearCurrentLink();\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class GridCache {\n public cache: T[][];\n\n public constructor() {\n this.cache = [];\n }\n\n public resize(width: number, height: number): void {\n for (let x = 0; x < width; x++) {\n if (this.cache.length <= x) {\n this.cache.push([]);\n }\n for (let y = this.cache[x].length; y < height; y++) {\n this.cache[x].push(null);\n }\n this.cache[x].length = height;\n }\n this.cache.length = width;\n }\n\n public clear(): void {\n for (let x = 0; x < this.cache.length; x++) {\n for (let y = 0; y < this.cache[x].length; y++) {\n this.cache[x][y] = null;\n }\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorSet, IRenderDimensions } from './Interfaces';\nimport { IBuffer, ICharMeasure, ITerminal, ITerminalOptions } from '../Interfaces';\nimport { CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CODE_INDEX, CHAR_DATA_CHAR_INDEX } from '../Buffer';\nimport { GridCache } from './GridCache';\nimport { FLAGS } from './Types';\nimport { BaseRenderLayer } from './BaseRenderLayer';\nimport { CharData } from '../Types';\n\ninterface CursorState {\n x: number;\n y: number;\n isFocused: boolean;\n style: string;\n width: number;\n}\n\n/**\n * The time between cursor blinks.\n */\nconst BLINK_INTERVAL = 600;\n\nexport class CursorRenderLayer extends BaseRenderLayer {\n private _state: CursorState;\n private _cursorRenderers: {[key: string]: (terminal: ITerminal, x: number, y: number, charData: CharData) => void};\n private _cursorBlinkStateManager: CursorBlinkStateManager;\n private _isFocused: boolean;\n\n constructor(container: HTMLElement, zIndex: number, colors: IColorSet) {\n super(container, 'cursor', zIndex, true, colors);\n this._state = {\n x: null,\n y: null,\n isFocused: null,\n style: null,\n width: null,\n };\n this._cursorRenderers = {\n 'bar': this._renderBarCursor.bind(this),\n 'block': this._renderBlockCursor.bind(this),\n 'underline': this._renderUnderlineCursor.bind(this)\n };\n // TODO: Consider initial options? Maybe onOptionsChanged should be called at the end of open?\n }\n\n public resize(terminal: ITerminal, dim: IRenderDimensions, charSizeChanged: boolean): void {\n super.resize(terminal, dim, charSizeChanged);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = {\n x: null,\n y: null,\n isFocused: null,\n style: null,\n width: null,\n };\n }\n\n public reset(terminal: ITerminal): void {\n this._clearCursor();\n if (this._cursorBlinkStateManager) {\n this._cursorBlinkStateManager.dispose();\n this._cursorBlinkStateManager = null;\n this.onOptionsChanged(terminal);\n }\n }\n\n public onBlur(terminal: ITerminal): void {\n if (this._cursorBlinkStateManager) {\n this._cursorBlinkStateManager.pause();\n }\n terminal.refresh(terminal.buffer.y, terminal.buffer.y);\n }\n\n public onFocus(terminal: ITerminal): void {\n if (this._cursorBlinkStateManager) {\n this._cursorBlinkStateManager.resume(terminal);\n } else {\n terminal.refresh(terminal.buffer.y, terminal.buffer.y);\n }\n }\n\n public onOptionsChanged(terminal: ITerminal): void {\n if (terminal.options.cursorBlink) {\n if (!this._cursorBlinkStateManager) {\n this._cursorBlinkStateManager = new CursorBlinkStateManager(terminal, () => {\n this._render(terminal, true);\n });\n }\n } else {\n if (this._cursorBlinkStateManager) {\n this._cursorBlinkStateManager.dispose();\n this._cursorBlinkStateManager = null;\n }\n // Request a refresh from the terminal as management of rendering is being\n // moved back to the terminal\n terminal.refresh(terminal.buffer.y, terminal.buffer.y);\n }\n }\n\n public onCursorMove(terminal: ITerminal): void {\n if (this._cursorBlinkStateManager) {\n this._cursorBlinkStateManager.restartBlinkAnimation(terminal);\n }\n }\n\n public onGridChanged(terminal: ITerminal, startRow: number, endRow: number): void {\n // Only render if the animation frame is not active\n if (!this._cursorBlinkStateManager || this._cursorBlinkStateManager.isPaused) {\n this._render(terminal, false);\n }\n }\n\n private _render(terminal: ITerminal, triggeredByAnimationFrame: boolean): void {\n // Don't draw the cursor if it's hidden\n if (!terminal.cursorState || terminal.cursorHidden) {\n this._clearCursor();\n return;\n }\n\n const cursorY = terminal.buffer.ybase + terminal.buffer.y;\n const viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;\n\n // Don't draw the cursor if it's off-screen\n if (viewportRelativeCursorY < 0 || viewportRelativeCursorY >= terminal.rows) {\n this._clearCursor();\n return;\n }\n\n const charData = terminal.buffer.lines.get(cursorY)[terminal.buffer.x];\n if (!charData) {\n return;\n }\n\n if (!terminal.isFocused) {\n this._clearCursor();\n this._ctx.save();\n this._ctx.fillStyle = this._colors.cursor;\n this._renderBlurCursor(terminal, terminal.buffer.x, viewportRelativeCursorY, charData);\n this._ctx.restore();\n this._state.x = terminal.buffer.x;\n this._state.y = viewportRelativeCursorY;\n this._state.isFocused = false;\n this._state.style = terminal.options.cursorStyle;\n this._state.width = charData[CHAR_DATA_WIDTH_INDEX];\n return;\n }\n\n // Don't draw the cursor if it's blinking\n if (this._cursorBlinkStateManager && !this._cursorBlinkStateManager.isCursorVisible) {\n this._clearCursor();\n return;\n }\n\n if (this._state) {\n // The cursor is already in the correct spot, don't redraw\n if (this._state.x === terminal.buffer.x &&\n this._state.y === viewportRelativeCursorY &&\n this._state.isFocused === terminal.isFocused &&\n this._state.style === terminal.options.cursorStyle &&\n this._state.width === charData[CHAR_DATA_WIDTH_INDEX]) {\n return;\n }\n this._clearCursor();\n }\n\n this._ctx.save();\n this._cursorRenderers[terminal.options.cursorStyle || 'block'](terminal, terminal.buffer.x, viewportRelativeCursorY, charData);\n this._ctx.restore();\n\n this._state.x = terminal.buffer.x;\n this._state.y = viewportRelativeCursorY;\n this._state.isFocused = false;\n this._state.style = terminal.options.cursorStyle;\n this._state.width = charData[CHAR_DATA_WIDTH_INDEX];\n }\n\n private _clearCursor(): void {\n if (this._state) {\n this.clearCells(this._state.x, this._state.y, this._state.width, 1);\n this._state = {\n x: null,\n y: null,\n isFocused: null,\n style: null,\n width: null,\n };\n }\n }\n\n private _renderBarCursor(terminal: ITerminal, x: number, y: number, charData: CharData): void {\n this._ctx.save();\n this._ctx.fillStyle = this._colors.cursor;\n this.fillLeftLineAtCell(x, y);\n this._ctx.restore();\n }\n\n private _renderBlockCursor(terminal: ITerminal, x: number, y: number, charData: CharData): void {\n this._ctx.save();\n this._ctx.fillStyle = this._colors.cursor;\n this.fillCells(x, y, charData[CHAR_DATA_WIDTH_INDEX], 1);\n this._ctx.fillStyle = this._colors.cursorAccent;\n this.fillCharTrueColor(terminal, charData, x, y);\n this._ctx.restore();\n }\n\n private _renderUnderlineCursor(terminal: ITerminal, x: number, y: number, charData: CharData): void {\n this._ctx.save();\n this._ctx.fillStyle = this._colors.cursor;\n this.fillBottomLineAtCells(x, y);\n this._ctx.restore();\n }\n\n private _renderBlurCursor(terminal: ITerminal, x: number, y: number, charData: CharData): void {\n this._ctx.save();\n this._ctx.strokeStyle = this._colors.cursor;\n this.strokeRectAtCell(x, y, charData[CHAR_DATA_WIDTH_INDEX], 1);\n this._ctx.restore();\n }\n}\n\nclass CursorBlinkStateManager {\n public isCursorVisible: boolean;\n\n private _animationFrame: number;\n private _blinkStartTimeout: number;\n private _blinkInterval: number;\n\n /**\n * The time at which the animation frame was restarted, this is used on the\n * next render to restart the timers so they don't need to restart the timers\n * multiple times over a short period.\n */\n private _animationTimeRestarted: number;\n\n constructor(\n terminal: ITerminal,\n private renderCallback: () => void\n ) {\n this.isCursorVisible = true;\n if (terminal.isFocused) {\n this._restartInterval();\n }\n }\n\n public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n public dispose(): void {\n if (this._blinkInterval) {\n window.clearInterval(this._blinkInterval);\n this._blinkInterval = null;\n }\n if (this._blinkStartTimeout) {\n window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = null;\n }\n if (this._animationFrame) {\n window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = null;\n }\n }\n\n public restartBlinkAnimation(terminal: ITerminal): void {\n if (this.isPaused) {\n return;\n }\n // Save a timestamp so that the restart can be done on the next interval\n this._animationTimeRestarted = Date.now();\n // Force a cursor render to ensure it's visible and in the correct position\n this.isCursorVisible = true;\n if (!this._animationFrame) {\n this._animationFrame = window.requestAnimationFrame(() => {\n this.renderCallback();\n this._animationFrame = null;\n });\n }\n }\n\n private _restartInterval(timeToStart: number = BLINK_INTERVAL): void {\n // Clear any existing interval\n if (this._blinkInterval) {\n window.clearInterval(this._blinkInterval);\n }\n\n // Setup the initial timeout which will hide the cursor, this is done before\n // the regular interval is setup in order to support restarting the blink\n // animation in a lightweight way (without thrashing clearInterval and\n // setInterval).\n this._blinkStartTimeout = setTimeout(() => {\n // Check if another animation restart was requested while this was being\n // started\n if (this._animationTimeRestarted) {\n const time = BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = null;\n if (time > 0) {\n this._restartInterval(time);\n return;\n }\n }\n\n // Hide the cursor\n this.isCursorVisible = false;\n this._animationFrame = window.requestAnimationFrame(() => {\n this.renderCallback();\n this._animationFrame = null;\n });\n\n // Setup the blink interval\n this._blinkInterval = setInterval(() => {\n // Adjust the animation time if it was restarted\n if (this._animationTimeRestarted) {\n // calc time diff\n // Make restart interval do a setTimeout initially?\n const time = BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = null;\n this._restartInterval(time);\n return;\n }\n\n // Invert visibility and render\n this.isCursorVisible = !this.isCursorVisible;\n this._animationFrame = window.requestAnimationFrame(() => {\n this.renderCallback();\n this._animationFrame = null;\n });\n }, BLINK_INTERVAL);\n }, timeToStart);\n }\n\n public pause(): void {\n this.isCursorVisible = true;\n if (this._blinkInterval) {\n window.clearInterval(this._blinkInterval);\n this._blinkInterval = null;\n }\n if (this._blinkStartTimeout) {\n window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = null;\n }\n if (this._animationFrame) {\n window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = null;\n }\n }\n\n public resume(terminal: ITerminal): void {\n this._animationTimeRestarted = null;\n this._restartInterval();\n this.restartBlinkAnimation(terminal);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorSet, IColorManager } from './Interfaces';\nimport { ITheme } from '../Interfaces';\n\nconst DEFAULT_FOREGROUND = '#ffffff';\nconst DEFAULT_BACKGROUND = '#000000';\nconst DEFAULT_CURSOR = '#ffffff';\nconst DEFAULT_CURSOR_ACCENT = '#000000';\nconst DEFAULT_SELECTION = 'rgba(255, 255, 255, 0.3)';\nexport const DEFAULT_ANSI_COLORS = [\n // dark:\n '#2e3436',\n '#cc0000',\n '#4e9a06',\n '#c4a000',\n '#3465a4',\n '#75507b',\n '#06989a',\n '#d3d7cf',\n // bright:\n '#555753',\n '#ef2929',\n '#8ae234',\n '#fce94f',\n '#729fcf',\n '#ad7fa8',\n '#34e2e2',\n '#eeeeec'\n];\n\n/**\n * Fills an existing 16 length string with the remaining 240 ANSI colors.\n * @param first16Colors The first 16 ANSI colors.\n */\nfunction generate256Colors(first16Colors: string[]): string[] {\n let colors = first16Colors.slice();\n\n // Generate colors (16-231)\n let v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n for (let i = 0; i < 216; i++) {\n const r = toPaddedHex(v[(i / 36) % 6 | 0]);\n const g = toPaddedHex(v[(i / 6) % 6 | 0]);\n const b = toPaddedHex(v[i % 6]);\n colors.push(`#${r}${g}${b}`);\n }\n\n // Generate greys (232-255)\n for (let i = 0; i < 24; i++) {\n const c = toPaddedHex(8 + i * 10);\n colors.push(`#${c}${c}${c}`);\n }\n\n return colors;\n}\n\nfunction toPaddedHex(c: number): string {\n let s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Manages the source of truth for a terminal's colors.\n */\nexport class ColorManager implements IColorManager {\n public colors: IColorSet;\n\n constructor() {\n this.colors = {\n foreground: DEFAULT_FOREGROUND,\n background: DEFAULT_BACKGROUND,\n cursor: DEFAULT_CURSOR,\n cursorAccent: DEFAULT_CURSOR_ACCENT,\n selection: DEFAULT_SELECTION,\n ansi: generate256Colors(DEFAULT_ANSI_COLORS)\n };\n }\n\n /**\n * Sets the terminal's theme.\n * @param theme The theme to use. If a partial theme is provided then default\n * colors will be used where colors are not defined.\n */\n public setTheme(theme: ITheme): void {\n this.colors.foreground = theme.foreground || DEFAULT_FOREGROUND;\n this.colors.background = this._validateColor(theme.background, DEFAULT_BACKGROUND);\n this.colors.cursor = theme.cursor || DEFAULT_CURSOR;\n this.colors.cursorAccent = theme.cursorAccent || DEFAULT_CURSOR_ACCENT;\n this.colors.selection = theme.selection || DEFAULT_SELECTION;\n this.colors.ansi[0] = theme.black || DEFAULT_ANSI_COLORS[0];\n this.colors.ansi[1] = theme.red || DEFAULT_ANSI_COLORS[1];\n this.colors.ansi[2] = theme.green || DEFAULT_ANSI_COLORS[2];\n this.colors.ansi[3] = theme.yellow || DEFAULT_ANSI_COLORS[3];\n this.colors.ansi[4] = theme.blue || DEFAULT_ANSI_COLORS[4];\n this.colors.ansi[5] = theme.magenta || DEFAULT_ANSI_COLORS[5];\n this.colors.ansi[6] = theme.cyan || DEFAULT_ANSI_COLORS[6];\n this.colors.ansi[7] = theme.white || DEFAULT_ANSI_COLORS[7];\n this.colors.ansi[8] = theme.brightBlack || DEFAULT_ANSI_COLORS[8];\n this.colors.ansi[9] = theme.brightRed || DEFAULT_ANSI_COLORS[9];\n this.colors.ansi[10] = theme.brightGreen || DEFAULT_ANSI_COLORS[10];\n this.colors.ansi[11] = theme.brightYellow || DEFAULT_ANSI_COLORS[11];\n this.colors.ansi[12] = theme.brightBlue || DEFAULT_ANSI_COLORS[12];\n this.colors.ansi[13] = theme.brightMagenta || DEFAULT_ANSI_COLORS[13];\n this.colors.ansi[14] = theme.brightCyan || DEFAULT_ANSI_COLORS[14];\n this.colors.ansi[15] = theme.brightWhite || DEFAULT_ANSI_COLORS[15];\n }\n\n private _validateColor(color: string, fallback: string): string {\n if (!color) {\n return fallback;\n }\n if (color.length === 7 && color.charAt(0) === '#') {\n return color;\n }\n if (color.length === 4 && color.charAt(0) === '#') {\n const r = color.charAt(1);\n const g = color.charAt(2);\n const b = color.charAt(3);\n return `#${r}${r}${g}${g}${b}${b}`;\n }\n return fallback;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal, ITheme } from '../Interfaces';\nimport { IColorSet } from '../renderer/Interfaces';\nimport { isFirefox } from '../utils/Browser';\n\nexport const CHAR_ATLAS_CELL_SPACING = 1;\n\ninterface ICharAtlasConfig {\n fontSize: number;\n fontFamily: string;\n scaledCharWidth: number;\n scaledCharHeight: number;\n colors: IColorSet;\n}\n\ninterface ICharAtlasCacheEntry {\n bitmap: HTMLCanvasElement | Promise;\n config: ICharAtlasConfig;\n ownedBy: ITerminal[];\n}\n\nlet charAtlasCache: ICharAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n * @param terminal The terminal.\n * @param colors The colors to use.\n */\nexport function acquireCharAtlas(terminal: ITerminal, colors: IColorSet, scaledCharWidth: number, scaledCharHeight: number): HTMLCanvasElement | Promise {\n const newConfig = generateConfig(scaledCharWidth, scaledCharHeight, terminal, colors);\n\n // Check to see if the terminal already owns this config\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n const ownedByIndex = entry.ownedBy.indexOf(terminal);\n if (ownedByIndex >= 0) {\n if (configEquals(entry.config, newConfig)) {\n return entry.bitmap;\n } else {\n // The configs differ, release the terminal from the entry\n if (entry.ownedBy.length === 1) {\n charAtlasCache.splice(i, 1);\n } else {\n entry.ownedBy.splice(ownedByIndex, 1);\n }\n break;\n }\n }\n }\n\n // Try match a char atlas from the cache\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n if (configEquals(entry.config, newConfig)) {\n // Add the terminal to the cache entry and return\n entry.ownedBy.push(terminal);\n return entry.bitmap;\n }\n }\n\n const newEntry: ICharAtlasCacheEntry = {\n bitmap: generator.generate(scaledCharWidth, scaledCharHeight, terminal.options.fontSize, terminal.options.fontFamily, colors.background, colors.foreground, colors.ansi),\n config: newConfig,\n ownedBy: [terminal]\n };\n charAtlasCache.push(newEntry);\n return newEntry.bitmap;\n}\n\nfunction generateConfig(scaledCharWidth: number, scaledCharHeight: number, terminal: ITerminal, colors: IColorSet): ICharAtlasConfig {\n const clonedColors = {\n foreground: colors.foreground,\n background: colors.background,\n cursor: null,\n cursorAccent: null,\n selection: null,\n ansi: colors.ansi.slice(0, 16)\n };\n return {\n scaledCharWidth,\n scaledCharHeight,\n fontFamily: terminal.options.fontFamily,\n fontSize: terminal.options.fontSize,\n colors: clonedColors\n };\n}\n\nfunction configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n for (let i = 0; i < a.colors.ansi.length; i++) {\n if (a.colors.ansi[i] !== b.colors.ansi[i]) {\n return false;\n }\n }\n return a.fontFamily === b.fontFamily &&\n a.fontSize === b.fontSize &&\n a.scaledCharWidth === b.scaledCharWidth &&\n a.scaledCharHeight === b.scaledCharHeight &&\n a.colors.foreground === b.colors.foreground &&\n a.colors.background === b.colors.background;\n}\n\nlet generator: CharAtlasGenerator;\n\n/**\n * Initializes the char atlas generator.\n * @param document The document.\n */\nexport function initialize(document: Document): void {\n if (!generator) {\n generator = new CharAtlasGenerator(document);\n }\n}\n\nclass CharAtlasGenerator {\n private _canvas: HTMLCanvasElement;\n private _ctx: CanvasRenderingContext2D;\n\n constructor(private _document: Document) {\n this._canvas = this._document.createElement('canvas');\n this._ctx = this._canvas.getContext('2d', {alpha: false});\n this._ctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n }\n\n public generate(scaledCharWidth: number, scaledCharHeight: number, fontSize: number, fontFamily: string, background: string, foreground: string, ansiColors: string[]): HTMLCanvasElement | Promise {\n const cellWidth = scaledCharWidth + CHAR_ATLAS_CELL_SPACING;\n const cellHeight = scaledCharHeight + CHAR_ATLAS_CELL_SPACING;\n this._canvas.width = 255 * cellWidth;\n this._canvas.height = (/*default+default bold*/2 + /*0-15*/16) * cellHeight;\n\n this._ctx.fillStyle = background;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n\n this._ctx.save();\n this._ctx.fillStyle = foreground;\n this._ctx.font = `${fontSize * window.devicePixelRatio}px ${fontFamily}`;\n this._ctx.textBaseline = 'top';\n\n // Default color\n for (let i = 0; i < 256; i++) {\n this._ctx.save();\n this._ctx.beginPath();\n this._ctx.rect(i * cellWidth, 0, cellWidth, cellHeight);\n this._ctx.clip();\n this._ctx.fillText(String.fromCharCode(i), i * cellWidth, 0);\n this._ctx.restore();\n }\n // Default color bold\n this._ctx.save();\n this._ctx.font = `bold ${this._ctx.font}`;\n for (let i = 0; i < 256; i++) {\n this._ctx.save();\n this._ctx.beginPath();\n this._ctx.rect(i * cellWidth, cellHeight, cellWidth, cellHeight);\n this._ctx.clip();\n this._ctx.fillText(String.fromCharCode(i), i * cellWidth, cellHeight);\n this._ctx.restore();\n }\n this._ctx.restore();\n\n // Colors 0-15\n this._ctx.font = `${fontSize * window.devicePixelRatio}px ${fontFamily}`;\n for (let colorIndex = 0; colorIndex < 16; colorIndex++) {\n // colors 8-15 are bold\n if (colorIndex === 8) {\n this._ctx.font = `bold ${this._ctx.font}`;\n }\n const y = (colorIndex + 2) * cellHeight;\n // Draw ascii characters\n for (let i = 0; i < 256; i++) {\n this._ctx.save();\n this._ctx.beginPath();\n this._ctx.rect(i * cellWidth, y, cellWidth, cellHeight);\n this._ctx.clip();\n this._ctx.fillStyle = ansiColors[colorIndex];\n this._ctx.fillText(String.fromCharCode(i), i * cellWidth, y);\n this._ctx.restore();\n }\n }\n this._ctx.restore();\n\n // Support is patchy for createImageBitmap at the moment, pass a canvas back\n // if support is lacking as drawImage works there too. Firefox is also\n // included here as ImageBitmap appears both buggy and has horrible\n // performance (tested on v55).\n if (!('createImageBitmap' in window) || isFirefox) {\n // Regenerate canvas and context as they are now owned by the char atlas\n const result = this._canvas;\n this._canvas = this._document.createElement('canvas');\n this._ctx = this._canvas.getContext('2d');\n this._ctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n return result;\n }\n\n const charAtlasImageData = this._ctx.getImageData(0, 0, this._canvas.width, this._canvas.height);\n\n // Remove the background color from the image so characters may overlap\n const r = parseInt(background.substr(1, 2), 16);\n const g = parseInt(background.substr(3, 2), 16);\n const b = parseInt(background.substr(5, 2), 16);\n this._clearColor(charAtlasImageData, r, g, b);\n\n const promise = window.createImageBitmap(charAtlasImageData);\n // Clear the rect while the promise is in progress\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n return promise;\n }\n\n private _clearColor(imageData: ImageData, r: number, g: number, b: number): void {\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n if (imageData.data[offset] === r &&\n imageData.data[offset + 1] === g &&\n imageData.data[offset + 2] === b) {\n imageData.data[offset + 3] = 0;\n }\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderLayer, IColorSet, IRenderDimensions } from './Interfaces';\nimport { ITerminal, ITerminalOptions } from '../Interfaces';\nimport { acquireCharAtlas, CHAR_ATLAS_CELL_SPACING } from './CharAtlas';\nimport { CharData } from '../Types';\nimport { CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from '../Buffer';\n\nexport const INVERTED_DEFAULT_COLOR = -1;\nconst DIM_OPACITY = 0.5;\n\nexport abstract class BaseRenderLayer implements IRenderLayer {\n private _canvas: HTMLCanvasElement;\n protected _ctx: CanvasRenderingContext2D;\n private _scaledCharWidth: number = 0;\n private _scaledCharHeight: number = 0;\n private _scaledCellWidth: number = 0;\n private _scaledCellHeight: number = 0;\n private _scaledCharLeft: number = 0;\n private _scaledCharTop: number = 0;\n\n private _charAtlas: HTMLCanvasElement | ImageBitmap;\n\n constructor(\n container: HTMLElement,\n id: string,\n zIndex: number,\n private _alpha: boolean,\n protected _colors: IColorSet\n ) {\n this._canvas = document.createElement('canvas');\n this._canvas.id = `xterm-${id}-layer`;\n this._canvas.style.zIndex = zIndex.toString();\n this._ctx = this._canvas.getContext('2d', {alpha: _alpha});\n this._ctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n // Draw the background if this is an opaque layer\n if (!_alpha) {\n this.clearAll();\n }\n container.appendChild(this._canvas);\n }\n\n public onOptionsChanged(terminal: ITerminal): void {}\n public onBlur(terminal: ITerminal): void {}\n public onFocus(terminal: ITerminal): void {}\n public onCursorMove(terminal: ITerminal): void {}\n public onGridChanged(terminal: ITerminal, startRow: number, endRow: number): void {}\n public onSelectionChanged(terminal: ITerminal, start: [number, number], end: [number, number]): void {}\n\n public onThemeChanged(terminal: ITerminal, colorSet: IColorSet): void {\n this._refreshCharAtlas(terminal, colorSet);\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n * @param terminal The terminal.\n * @param colorSet The color set to use for the char atlas.\n */\n private _refreshCharAtlas(terminal: ITerminal, colorSet: IColorSet): void {\n if (this._scaledCharWidth <= 0 && this._scaledCharHeight <= 0) {\n return;\n }\n this._charAtlas = null;\n const result = acquireCharAtlas(terminal, this._colors, this._scaledCharWidth, this._scaledCharHeight);\n if (result instanceof HTMLCanvasElement) {\n this._charAtlas = result;\n } else {\n result.then(bitmap => this._charAtlas = bitmap);\n }\n }\n\n public resize(terminal: ITerminal, dim: IRenderDimensions, charSizeChanged: boolean): void {\n this._scaledCellWidth = dim.scaledCellWidth;\n this._scaledCellHeight = dim.scaledCellHeight;\n this._scaledCharWidth = dim.scaledCharWidth;\n this._scaledCharHeight = dim.scaledCharHeight;\n this._scaledCharLeft = dim.scaledCharLeft;\n this._scaledCharTop = dim.scaledCharTop;\n this._canvas.width = dim.scaledCanvasWidth;\n this._canvas.height = dim.scaledCanvasHeight;\n this._canvas.style.width = `${dim.canvasWidth}px`;\n this._canvas.style.height = `${dim.canvasHeight}px`;\n\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this.clearAll();\n }\n\n if (charSizeChanged) {\n this._refreshCharAtlas(terminal, this._colors);\n }\n }\n\n public abstract reset(terminal: ITerminal): void;\n\n /**\n * Fills 1+ cells completely. This uses the existing fillStyle on the context.\n * @param x The column to start at.\n * @param y The row to start at\n * @param width The number of columns to fill.\n * @param height The number of rows to fill.\n */\n protected fillCells(x: number, y: number, width: number, height: number): void {\n this._ctx.fillRect(\n x * this._scaledCellWidth,\n y * this._scaledCellHeight,\n width * this._scaledCellWidth,\n height * this._scaledCellHeight);\n }\n\n /**\n * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n this._ctx.fillRect(\n x * this._scaledCellWidth,\n (y + 1) * this._scaledCellHeight - window.devicePixelRatio - 1 /* Ensure it's drawn within the cell */,\n width * this._scaledCellWidth,\n window.devicePixelRatio);\n }\n\n /**\n * Fills a 1px line (2px on HDPI) at the left of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected fillLeftLineAtCell(x: number, y: number): void {\n this._ctx.fillRect(\n x * this._scaledCellWidth,\n y * this._scaledCellHeight,\n window.devicePixelRatio,\n this._scaledCellHeight);\n }\n\n /**\n * Strokes a 1px rectangle (2px on HDPI) around a cell. This uses the existing\n * strokeStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected strokeRectAtCell(x: number, y: number, width: number, height: number): void {\n this._ctx.lineWidth = window.devicePixelRatio;\n this._ctx.strokeRect(\n x * this._scaledCellWidth + window.devicePixelRatio / 2,\n y * this._scaledCellHeight + (window.devicePixelRatio / 2),\n width * this._scaledCellWidth - window.devicePixelRatio,\n (height * this._scaledCellHeight) - window.devicePixelRatio);\n }\n\n /**\n * Clears the entire canvas.\n */\n protected clearAll(): void {\n if (this._alpha) {\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n this._ctx.fillStyle = this._colors.background;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n }\n }\n\n /**\n * Clears 1+ cells completely.\n * @param x The column to start at.\n * @param y The row to start at.\n * @param width The number of columns to clear.\n * @param height The number of rows to clear.\n */\n protected clearCells(x: number, y: number, width: number, height: number): void {\n if (this._alpha) {\n this._ctx.clearRect(\n x * this._scaledCellWidth,\n y * this._scaledCellHeight,\n width * this._scaledCellWidth,\n height * this._scaledCellHeight);\n } else {\n this._ctx.fillStyle = this._colors.background;\n this._ctx.fillRect(\n x * this._scaledCellWidth,\n y * this._scaledCellHeight,\n width * this._scaledCellWidth,\n height * this._scaledCellHeight);\n }\n }\n\n /**\n * Draws a truecolor character at the cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character. This uses the existing fillStyle on the context.\n * @param terminal The terminal.\n * @param charData The char data for the character to draw.\n * @param x The column to draw at.\n * @param y The row to draw at.\n * @param color The color of the character.\n */\n protected fillCharTrueColor(terminal: ITerminal, charData: CharData, x: number, y: number): void {\n this._ctx.font = `${terminal.options.fontSize * window.devicePixelRatio}px ${terminal.options.fontFamily}`;\n this._ctx.textBaseline = 'top';\n this._clipRow(terminal, y);\n this._ctx.fillText(\n charData[CHAR_DATA_CHAR_INDEX],\n x * this._scaledCellWidth + this._scaledCharLeft,\n y * this._scaledCellHeight + this._scaledCharTop);\n }\n\n /**\n * Draws a character at a cell. If possible this will draw using the character\n * atlas to reduce draw time.\n * @param terminal The terminal.\n * @param char The character.\n * @param code The character code.\n * @param width The width of the character.\n * @param x The column to draw at.\n * @param y The row to draw at.\n * @param fg The foreground color, in the format stored within the attributes.\n * @param bg The background color, in the format stored within the attributes.\n * This is used to validate whether a cached image can be used.\n * @param bold Whether the text is bold.\n */\n protected drawChar(terminal: ITerminal, char: string, code: number, width: number, x: number, y: number, fg: number, bg: number, bold: boolean, dim: boolean): void {\n let colorIndex = 0;\n if (fg < 256) {\n colorIndex = fg + 2;\n } else {\n // If default color and bold\n if (bold && terminal.options.enableBold) {\n colorIndex = 1;\n }\n }\n const isAscii = code < 256;\n // A color is basic if it is one of the standard normal or bold weight\n // colors of the characters held in the char atlas. Note that this excludes\n // the normal weight _light_ color characters.\n const isBasicColor = (colorIndex > 1 && fg < 16) && (fg < 8 || bold);\n const isDefaultColor = fg >= 256;\n const isDefaultBackground = bg >= 256;\n if (this._charAtlas && isAscii && (isBasicColor || isDefaultColor) && isDefaultBackground) {\n // ImageBitmap's draw about twice as fast as from a canvas\n const charAtlasCellWidth = this._scaledCharWidth + CHAR_ATLAS_CELL_SPACING;\n const charAtlasCellHeight = this._scaledCharHeight + CHAR_ATLAS_CELL_SPACING;\n\n // Apply alpha to dim the character\n if (dim) {\n this._ctx.globalAlpha = DIM_OPACITY;\n }\n\n // Draw the non-bold version of the same color if bold is not enabled\n if (bold && !terminal.options.enableBold) {\n // Ignore default color as it's not touched above\n if (colorIndex > 1) {\n colorIndex -= 8;\n }\n }\n\n this._ctx.drawImage(this._charAtlas,\n code * charAtlasCellWidth,\n colorIndex * charAtlasCellHeight,\n charAtlasCellWidth,\n this._scaledCharHeight,\n x * this._scaledCellWidth + this._scaledCharLeft,\n y * this._scaledCellHeight + this._scaledCharTop,\n charAtlasCellWidth,\n this._scaledCharHeight);\n } else {\n this._drawUncachedChar(terminal, char, width, fg, x, y, bold, dim);\n }\n // This draws the atlas (for debugging purposes)\n // this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n // this._ctx.drawImage(this._charAtlas, 0, 0);\n }\n\n /**\n * Draws a character at a cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character.\n * @param terminal The terminal.\n * @param char The character.\n * @param width The width of the character.\n * @param fg The foreground color, in the format stored within the attributes.\n * @param x The column to draw at.\n * @param y The row to draw at.\n */\n private _drawUncachedChar(terminal: ITerminal, char: string, width: number, fg: number, x: number, y: number, bold: boolean, dim: boolean): void {\n this._ctx.save();\n this._ctx.font = `${terminal.options.fontSize * window.devicePixelRatio}px ${terminal.options.fontFamily}`;\n if (bold && terminal.options.enableBold) {\n this._ctx.font = `bold ${this._ctx.font}`;\n }\n this._ctx.textBaseline = 'top';\n\n if (fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._colors.background;\n } else if (fg < 256) {\n // 256 color support\n this._ctx.fillStyle = this._colors.ansi[fg];\n } else {\n this._ctx.fillStyle = this._colors.foreground;\n }\n\n this._clipRow(terminal, y);\n\n // Apply alpha to dim the character\n if (dim) {\n this._ctx.globalAlpha = DIM_OPACITY;\n }\n // Draw the character\n this._ctx.fillText(\n char,\n x * this._scaledCellWidth + this._scaledCharLeft,\n y * this._scaledCellHeight + this._scaledCharTop);\n this._ctx.restore();\n }\n\n /**\n * Clips a row to ensure no pixels will be drawn outside the cells in the row.\n * @param terminal The terminal.\n * @param y The row to clip.\n */\n private _clipRow(terminal: ITerminal, y: number): void {\n this._ctx.beginPath();\n this._ctx.rect(\n 0,\n y * this._scaledCellHeight,\n terminal.cols * this._scaledCellWidth,\n this._scaledCellHeight);\n this._ctx.clip();\n }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IMouseZoneManager, IMouseZone } from './Interfaces';\nimport { ITerminal } from '../Interfaces';\n\nconst HOVER_DURATION = 500;\n\n/**\n * The MouseZoneManager allows components to register zones within the terminal\n * that trigger hover and click callbacks.\n *\n * This class was intentionally made not so robust initially as the only case it\n * needed to support was single-line links which never overlap. Improvements can\n * be made in the future.\n */\nexport class MouseZoneManager implements IMouseZoneManager {\n private _zones: IMouseZone[] = [];\n\n private _areZonesActive: boolean = false;\n private _mouseMoveListener: (e: MouseEvent) => any;\n private _clickListener: (e: MouseEvent) => any;\n\n private _tooltipTimeout: number = null;\n private _currentZone: IMouseZone = null;\n private _lastHoverCoords: [number, number] = [null, null];\n\n constructor(\n private _terminal: ITerminal\n ) {\n this._terminal.element.addEventListener('mousedown', e => this._onMouseDown(e));\n\n // These events are expensive, only listen to it when mouse zones are active\n this._mouseMoveListener = e => this._onMouseMove(e);\n this._clickListener = e => this._onClick(e);\n }\n\n public add(zone: IMouseZone): void {\n this._zones.push(zone);\n if (this._zones.length === 1) {\n this._activate();\n }\n }\n\n public clearAll(start?: number, end?: number): void {\n // Exit if there's nothing to clear\n if (this._zones.length === 0) {\n return;\n }\n\n // Clear all if start/end weren't set\n if (!end) {\n start = 0;\n end = this._terminal.rows - 1;\n }\n\n // Iterate through zones and clear them out if they're within the range\n for (let i = 0; i < this._zones.length; i++) {\n const zone = this._zones[i];\n if (zone.y > start && zone.y <= end + 1) {\n if (this._currentZone && this._currentZone === zone) {\n this._currentZone.leaveCallback();\n this._currentZone = null;\n }\n this._zones.splice(i--, 1);\n }\n }\n\n // Deactivate the mouse zone manager if all the zones have been removed\n if (this._zones.length === 0) {\n this._deactivate();\n }\n }\n\n private _activate(): void {\n if (!this._areZonesActive) {\n this._areZonesActive = true;\n this._terminal.element.addEventListener('mousemove', this._mouseMoveListener);\n this._terminal.element.addEventListener('click', this._clickListener);\n }\n }\n\n private _deactivate(): void {\n if (this._areZonesActive) {\n this._areZonesActive = false;\n this._terminal.element.removeEventListener('mousemove', this._mouseMoveListener);\n this._terminal.element.removeEventListener('click', this._clickListener);\n }\n }\n\n private _onMouseMove(e: MouseEvent): void {\n // TODO: Ideally this would only clear the hover state when the mouse moves\n // outside of the mouse zone\n if (this._lastHoverCoords[0] !== e.pageX || this._lastHoverCoords[1] !== e.pageY) {\n this._onHover(e);\n // Record the current coordinates\n this._lastHoverCoords = [e.pageX, e.pageY];\n }\n }\n\n private _onHover(e: MouseEvent): void {\n const zone = this._findZoneEventAt(e);\n\n // Do nothing if the zone is the same\n if (zone === this._currentZone) {\n return;\n }\n\n // Fire the hover end callback and cancel any existing timer if a new zone\n // is being hovered\n if (this._currentZone) {\n this._currentZone.leaveCallback();\n this._currentZone = null;\n if (this._tooltipTimeout) {\n clearTimeout(this._tooltipTimeout);\n }\n }\n\n // Exit if there is not zone\n if (!zone) {\n return;\n }\n this._currentZone = zone;\n\n // Trigger the hover callback\n if (zone.hoverCallback) {\n zone.hoverCallback(e);\n }\n\n // Restart the tooltip timeout\n this._tooltipTimeout = setTimeout(() => this._onTooltip(e), HOVER_DURATION);\n }\n\n private _onTooltip(e: MouseEvent): void {\n this._tooltipTimeout = null;\n const zone = this._findZoneEventAt(e);\n if (zone && zone.tooltipCallback) {\n zone.tooltipCallback(e);\n }\n }\n\n private _onMouseDown(e: MouseEvent): void {\n // Ignore the event if there are no zones active\n if (!this._areZonesActive) {\n return;\n }\n\n // Find the active zone, prevent event propagation if found to prevent other\n // components from handling the mouse event.\n const zone = this._findZoneEventAt(e);\n if (zone) {\n // TODO: When link modifier support is added, the event should only be\n // cancelled when the modifier is held (see #1021)\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n }\n\n private _onClick(e: MouseEvent): void {\n // Find the active zone and click it if found\n const zone = this._findZoneEventAt(e);\n if (zone) {\n zone.clickCallback(e);\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n }\n\n private _findZoneEventAt(e: MouseEvent): IMouseZone {\n const coords = this._terminal.mouseHelper.getCoords(e, this._terminal.element, this._terminal.charMeasure, this._terminal.options.lineHeight, this._terminal.cols, this._terminal.rows);\n if (!coords) {\n return null;\n }\n for (let i = 0; i < this._zones.length; i++) {\n const zone = this._zones[i];\n if (zone.y === coords[1] && zone.x1 <= coords[0] && zone.x2 > coords[0]) {\n return zone;\n }\n };\n return null;\n }\n}\n\nexport class MouseZone implements IMouseZone {\n constructor(\n public x1: number,\n public x2: number,\n public y: number,\n public clickCallback: (e: MouseEvent) => any,\n public hoverCallback?: (e: MouseEvent) => any,\n public tooltipCallback?: (e: MouseEvent) => any,\n public leaveCallback?: () => void\n ) {\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal, ISelectionManager } from '../Interfaces';\n\ninterface IWindow extends Window {\n clipboardData?: {\n getData(format: string): string;\n setData(format: string, data: string): void;\n };\n}\n\ndeclare var window: IWindow;\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string, isMSWindows: boolean): string {\n if (isMSWindows) {\n return text.replace(/\\r?\\n/g, '\\r');\n }\n return text;\n}\n\n/**\n * Bracket text for paste, if necessary, as per https://cirw.in/blog/bracketed-paste\n * @param text The pasted text to bracket\n */\nexport function bracketTextForPaste(text: string, bracketedPasteMode: boolean): string {\n if (bracketedPasteMode) {\n return '\\x1b[200~' + text + '\\x1b[201~';\n }\n return text;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param {ClipboardEvent} ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, term: ITerminal, selectionManager: ISelectionManager): void {\n if (term.browser.isMSIE) {\n window.clipboardData.setData('Text', selectionManager.selectionText);\n } else {\n ev.clipboardData.setData('text/plain', selectionManager.selectionText);\n }\n\n // Prevent or the original text will be copied.\n ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n * @param {ClipboardEvent} ev The original paste event to be handled\n * @param {Terminal} term The terminal on which to apply the handled paste event\n */\nexport function pasteHandler(ev: ClipboardEvent, term: ITerminal): void {\n ev.stopPropagation();\n\n let text: string;\n\n let dispatchPaste = function(text: string): void {\n text = prepareTextForTerminal(text, term.browser.isMSWindows);\n text = bracketTextForPaste(text, term.bracketedPasteMode);\n term.handler(text);\n term.textarea.value = '';\n term.emit('paste', text);\n term.cancel(ev);\n };\n\n if (term.browser.isMSIE) {\n if (window.clipboardData) {\n text = window.clipboardData.getData('Text');\n dispatchPaste(text);\n }\n } else {\n if (ev.clipboardData) {\n text = ev.clipboardData.getData('text/plain');\n dispatchPaste(text);\n }\n }\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement): void {\n // Bring textarea at the cursor position\n textarea.style.position = 'fixed';\n textarea.style.width = '20px';\n textarea.style.height = '20px';\n textarea.style.left = (ev.clientX - 10) + 'px';\n textarea.style.top = (ev.clientY - 10) + 'px';\n textarea.style.zIndex = '1000';\n\n textarea.focus();\n\n // Reset the terminal textarea's styling\n setTimeout(() => {\n textarea.style.position = null;\n textarea.style.width = null;\n textarea.style.height = null;\n textarea.style.left = null;\n textarea.style.top = null;\n textarea.style.zIndex = null;\n }, 4);\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n * @param selectionManager The terminal's selection manager.\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, selectionManager: ISelectionManager): void {\n moveTextAreaUnderMouseCursor(ev, textarea);\n\n // Get textarea ready to copy from the context menu\n textarea.value = selectionManager.selectionText;\n textarea.select();\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal, IViewport } from './Interfaces';\nimport { CharMeasure } from './utils/CharMeasure';\nimport { IColorSet } from './renderer/Interfaces';\n\n/**\n * Represents the viewport of a terminal, the visible area within the larger buffer of output.\n * Logic for the virtual scroll bar is included in this object.\n */\nexport class Viewport implements IViewport {\n private currentRowHeight: number = 0;\n private lastRecordedBufferLength: number = 0;\n private lastRecordedViewportHeight: number = 0;\n private lastRecordedBufferHeight: number = 0;\n private lastTouchY: number;\n\n /**\n * Creates a new Viewport.\n * @param terminal The terminal this viewport belongs to.\n * @param viewportElement The DOM element acting as the viewport.\n * @param scrollArea The DOM element acting as the scroll area.\n * @param charMeasure A DOM element used to measure the character size of. the terminal.\n */\n constructor(\n private terminal: ITerminal,\n private viewportElement: HTMLElement,\n private scrollArea: HTMLElement,\n private charMeasure: CharMeasure\n ) {\n this.viewportElement.addEventListener('scroll', this.onScroll.bind(this));\n\n // Perform this async to ensure the CharMeasure is ready.\n setTimeout(() => this.syncScrollArea(), 0);\n }\n\n public onThemeChanged(colors: IColorSet): void {\n this.viewportElement.style.backgroundColor = colors.background;\n }\n\n /**\n * Refreshes row height, setting line-height, viewport height and scroll area height if\n * necessary.\n */\n private refresh(): void {\n if (this.charMeasure.height > 0) {\n this.currentRowHeight = this.terminal.renderer.dimensions.scaledCellHeight / window.devicePixelRatio;\n\n if (this.lastRecordedViewportHeight !== this.terminal.renderer.dimensions.canvasHeight) {\n this.lastRecordedViewportHeight = this.terminal.renderer.dimensions.canvasHeight;\n this.viewportElement.style.height = this.lastRecordedViewportHeight + 'px';\n }\n\n const newBufferHeight = Math.round(this.currentRowHeight * this.lastRecordedBufferLength);\n if (this.lastRecordedBufferHeight !== newBufferHeight) {\n this.lastRecordedBufferHeight = newBufferHeight;\n this.scrollArea.style.height = this.lastRecordedBufferHeight + 'px';\n }\n }\n }\n\n /**\n * Updates dimensions and synchronizes the scroll area if necessary.\n */\n public syncScrollArea(): void {\n if (this.lastRecordedBufferLength !== this.terminal.buffer.lines.length) {\n // If buffer height changed\n this.lastRecordedBufferLength = this.terminal.buffer.lines.length;\n this.refresh();\n } else if (this.lastRecordedViewportHeight !== (this.terminal).renderer.dimensions.canvasHeight) {\n // If viewport height changed\n this.refresh();\n } else {\n // If size has changed, refresh viewport\n if (this.terminal.renderer.dimensions.scaledCellHeight / window.devicePixelRatio !== this.currentRowHeight) {\n this.refresh();\n }\n }\n\n // Sync scrollTop\n const scrollTop = this.terminal.buffer.ydisp * this.currentRowHeight;\n if (this.viewportElement.scrollTop !== scrollTop) {\n this.viewportElement.scrollTop = scrollTop;\n }\n }\n\n /**\n * Handles scroll events on the viewport, calculating the new viewport and requesting the\n * terminal to scroll to it.\n * @param ev The scroll event.\n */\n private onScroll(ev: Event): void {\n const newRow = Math.round(this.viewportElement.scrollTop / this.currentRowHeight);\n const diff = newRow - this.terminal.buffer.ydisp;\n this.terminal.scrollLines(diff, true);\n }\n\n /**\n * Handles mouse wheel events by adjusting the viewport's scrollTop and delegating the actual\n * scrolling to `onScroll`, this event needs to be attached manually by the consumer of\n * `Viewport`.\n * @param ev The mouse wheel event.\n */\n public onWheel(ev: WheelEvent): void {\n if (ev.deltaY === 0) {\n // Do nothing if it's not a vertical scroll event\n return;\n }\n // Fallback to WheelEvent.DOM_DELTA_PIXEL\n let multiplier = 1;\n if (ev.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n multiplier = this.currentRowHeight;\n } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n multiplier = this.currentRowHeight * this.terminal.rows;\n }\n this.viewportElement.scrollTop += ev.deltaY * multiplier;\n // Prevent the page from scrolling when the terminal scrolls\n ev.preventDefault();\n };\n\n /**\n * Handles the touchstart event, recording the touch occurred.\n * @param ev The touch event.\n */\n public onTouchStart(ev: TouchEvent): void {\n this.lastTouchY = ev.touches[0].pageY;\n };\n\n /**\n * Handles the touchmove event, scrolling the viewport if the position shifted.\n * @param ev The touch event.\n */\n public onTouchMove(ev: TouchEvent): void {\n let deltaY = this.lastTouchY - ev.touches[0].pageY;\n this.lastTouchY = ev.touches[0].pageY;\n if (deltaY === 0) {\n return;\n }\n this.viewportElement.scrollTop += deltaY;\n ev.preventDefault();\n };\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport type LinkMatcher = {\n id: number,\n regex: RegExp,\n handler: LinkMatcherHandler,\n hoverTooltipCallback?: LinkMatcherHandler,\n hoverLeaveCallback?: () => void,\n matchIndex?: number,\n validationCallback?: LinkMatcherValidationCallback,\n priority?: number\n};\nexport type LinkMatcherHandler = (event: MouseEvent, uri: string) => boolean | void;\nexport type LinkMatcherValidationCallback = (uri: string, callback: (isValid: boolean) => void) => void;\n\nexport type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;\nexport type Charset = {[key: string]: string};\n\nexport type CharData = [number, string, number, number];\nexport type LineData = CharData[];\n\nexport type LinkHoverEvent = {\n x: number,\n y: number,\n length: number\n};\n\nexport enum LinkHoverEventTypes {\n HOVER = 'linkhover',\n TOOLTIP = 'linktooltip',\n LEAVE = 'linkleave'\n};\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { BufferSet } from './BufferSet';\nimport { Buffer, MAX_BUFFER_SIZE } from './Buffer';\nimport { CompositionHelper } from './CompositionHelper';\nimport { EventEmitter } from './EventEmitter';\nimport { Viewport } from './Viewport';\nimport { rightClickHandler, moveTextAreaUnderMouseCursor, pasteHandler, copyHandler } from './handlers/Clipboard';\nimport { CircularList } from './utils/CircularList';\nimport { C0 } from './EscapeSequences';\nimport { InputHandler } from './InputHandler';\nimport { Parser } from './Parser';\nimport { Renderer } from './renderer/Renderer';\nimport { Linkifier } from './Linkifier';\nimport { SelectionManager } from './SelectionManager';\nimport { CharMeasure } from './utils/CharMeasure';\nimport * as Browser from './utils/Browser';\nimport { MouseHelper } from './utils/MouseHelper';\nimport { CHARSETS } from './Charsets';\nimport { CustomKeyEventHandler, Charset, LinkMatcherHandler, LinkMatcherValidationCallback, CharData, LineData } from './Types';\nimport { ITerminal, IBrowser, ITerminalOptions, IInputHandlingTerminal, ILinkMatcherOptions, IViewport, ICompositionHelper, ITheme, ILinkifier } from './Interfaces';\nimport { BellSound } from './utils/Sounds';\nimport { DEFAULT_ANSI_COLORS } from './renderer/ColorManager';\nimport { IMouseZoneManager } from './input/Interfaces';\nimport { MouseZoneManager } from './input/MouseZoneManager';\nimport { initialize as initializeCharAtlas } from './renderer/CharAtlas';\nimport { IRenderer } from './renderer/Interfaces';\n\n// Declares required for loadAddon\ndeclare var exports: any;\ndeclare var module: any;\ndeclare var define: any;\ndeclare var require: any;\n\n// Let it work inside Node.js for automated testing purposes.\nconst document = (typeof window !== 'undefined') ? window.document : null;\n\n/**\n * The amount of write requests to queue before sending an XOFF signal to the\n * pty process. This number must be small in order for ^C and similar sequences\n * to be responsive.\n */\nconst WRITE_BUFFER_PAUSE_THRESHOLD = 5;\n\n/**\n * The number of writes to perform in a single batch before allowing the\n * renderer to catch up with a 0ms setTimeout.\n */\nconst WRITE_BATCH_SIZE = 300;\n\nconst DEFAULT_OPTIONS: ITerminalOptions = {\n convertEol: false,\n termName: 'xterm',\n geometry: [80, 24],\n cursorBlink: false,\n cursorStyle: 'block',\n bellSound: BellSound,\n bellStyle: 'none',\n enableBold: true,\n fontFamily: 'courier-new, courier, monospace',\n fontSize: 15,\n lineHeight: 1.0,\n letterSpacing: 0,\n scrollback: 1000,\n screenKeys: false,\n debug: false,\n cancelEvents: false,\n disableStdin: false,\n useFlowControl: false,\n tabStopWidth: 8,\n theme: null\n // programFeatures: false,\n // focusKeys: false,\n};\n\nexport class Terminal extends EventEmitter implements ITerminal, IInputHandlingTerminal {\n public textarea: HTMLTextAreaElement;\n public element: HTMLElement;\n\n /**\n * The HTMLElement that the terminal is created in, set by Terminal.open.\n */\n private parent: HTMLElement;\n private context: Window;\n private document: Document;\n private body: HTMLBodyElement;\n private viewportScrollArea: HTMLElement;\n private viewportElement: HTMLElement;\n private helperContainer: HTMLElement;\n private compositionView: HTMLElement;\n private charSizeStyleElement: HTMLStyleElement;\n private bellAudioElement: HTMLAudioElement;\n private visualBellTimer: number;\n\n public browser: IBrowser = Browser;\n\n public options: ITerminalOptions;\n private colors: any;\n\n // TODO: This can be changed to an enum or boolean, 0 and 1 seem to be the only options\n public cursorState: number;\n public cursorHidden: boolean;\n public convertEol: boolean;\n\n private sendDataQueue: string;\n private customKeyEventHandler: CustomKeyEventHandler;\n\n // modes\n public applicationKeypad: boolean;\n public applicationCursor: boolean;\n public originMode: boolean;\n public insertMode: boolean;\n public wraparoundMode: boolean; // defaults: xterm - true, vt100 - false\n public bracketedPasteMode: boolean;\n\n // charset\n // The current charset\n public charset: Charset;\n public gcharset: number;\n public glevel: number;\n public charsets: Charset[];\n\n // mouse properties\n private decLocator: boolean; // This is unstable and never set\n public x10Mouse: boolean;\n public vt200Mouse: boolean;\n private vt300Mouse: boolean; // This is unstable and never set\n public normalMouse: boolean;\n public mouseEvents: boolean;\n public sendFocus: boolean;\n public utfMouse: boolean;\n public sgrMouse: boolean;\n public urxvtMouse: boolean;\n\n // misc\n private refreshStart: number;\n private refreshEnd: number;\n public savedCols: number;\n\n // stream\n private readable: boolean;\n private writable: boolean;\n\n public defAttr: number;\n public curAttr: number;\n\n public params: (string | number)[];\n public currentParam: string | number;\n public prefix: string;\n public postfix: string;\n\n // user input states\n public writeBuffer: string[];\n private writeInProgress: boolean;\n\n /**\n * Whether _xterm.js_ sent XOFF in order to catch up with the pty process.\n * This is a distinct state from writeStopped so that if the user requested\n * XOFF via ^S that it will not automatically resume when the writeBuffer goes\n * below threshold.\n */\n private xoffSentToCatchUp: boolean;\n\n /** Whether writing has been stopped as a result of XOFF */\n private writeStopped: boolean;\n\n // leftover surrogate high from previous write invocation\n private surrogate_high: string;\n\n // Store if user went browsing history in scrollback\n private userScrolling: boolean;\n\n private inputHandler: InputHandler;\n private parser: Parser;\n public renderer: IRenderer;\n public selectionManager: SelectionManager;\n public linkifier: ILinkifier;\n public buffers: BufferSet;\n public buffer: Buffer;\n public viewport: IViewport;\n private compositionHelper: ICompositionHelper;\n public charMeasure: CharMeasure;\n private _mouseZoneManager: IMouseZoneManager;\n public mouseHelper: MouseHelper;\n\n public cols: number;\n public rows: number;\n public geometry: [/*cols*/number, /*rows*/number];\n\n /**\n * Creates a new `Terminal` object.\n *\n * @param {object} options An object containing a set of options, the available options are:\n * - `cursorBlink` (boolean): Whether the terminal cursor blinks\n * - `cols` (number): The number of columns of the terminal (horizontal size)\n * - `rows` (number): The number of rows of the terminal (vertical size)\n *\n * @public\n * @class Xterm Xterm\n * @alias module:xterm/src/xterm\n */\n constructor(\n options: ITerminalOptions = {}\n ) {\n super();\n this.options = options;\n this.setup();\n }\n\n private setup(): void {\n Object.keys(DEFAULT_OPTIONS).forEach((key) => {\n if (this.options[key] == null) {\n this.options[key] = DEFAULT_OPTIONS[key];\n }\n // TODO: We should move away from duplicate options on the Terminal object\n this[key] = this.options[key];\n });\n\n // this.context = options.context || window;\n // this.document = options.document || document;\n // TODO: WHy not document.body?\n this.parent = document ? document.body : null;\n\n this.cols = this.options.cols || this.options.geometry[0];\n this.rows = this.options.rows || this.options.geometry[1];\n this.geometry = [this.cols, this.rows];\n\n if (this.options.handler) {\n this.on('data', this.options.handler);\n }\n\n this.cursorState = 0;\n this.cursorHidden = false;\n this.sendDataQueue = '';\n this.customKeyEventHandler = null;\n\n // modes\n this.applicationKeypad = false;\n this.applicationCursor = false;\n this.originMode = false;\n this.insertMode = false;\n this.wraparoundMode = true; // defaults: xterm - true, vt100 - false\n this.bracketedPasteMode = false;\n\n // charset\n this.charset = null;\n this.gcharset = null;\n this.glevel = 0;\n // TODO: Can this be just []?\n this.charsets = [null];\n\n this.readable = true;\n this.writable = true;\n\n this.defAttr = (0 << 18) | (257 << 9) | (256 << 0);\n this.curAttr = (0 << 18) | (257 << 9) | (256 << 0);\n\n this.params = [];\n this.currentParam = 0;\n this.prefix = '';\n this.postfix = '';\n\n // user input states\n this.writeBuffer = [];\n this.writeInProgress = false;\n\n this.xoffSentToCatchUp = false;\n this.writeStopped = false;\n this.surrogate_high = '';\n this.userScrolling = false;\n\n this.inputHandler = new InputHandler(this);\n this.parser = new Parser(this.inputHandler, this);\n // Reuse renderer if the Terminal is being recreated via a reset call.\n this.renderer = this.renderer || null;\n this.selectionManager = this.selectionManager || null;\n this.linkifier = this.linkifier || new Linkifier(this);\n this._mouseZoneManager = this._mouseZoneManager || null;\n\n // Create the terminal's buffers and set the current buffer\n this.buffers = new BufferSet(this);\n this.buffer = this.buffers.active; // Convenience shortcut;\n this.buffers.on('activate', (buffer: Buffer) => {\n this.buffer = buffer;\n });\n\n // Ensure the selection manager has the correct buffer\n if (this.selectionManager) {\n this.selectionManager.setBuffer(this.buffer);\n }\n }\n\n /**\n * back_color_erase feature for xterm.\n */\n public eraseAttr(): number {\n // if (this.is('screen')) return this.defAttr;\n return (this.defAttr & ~0x1ff) | (this.curAttr & 0x1ff);\n }\n\n /**\n * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n */\n public focus(): void {\n this.textarea.focus();\n }\n\n public get isFocused(): boolean {\n return document.activeElement === this.textarea;\n }\n\n /**\n * Retrieves an option's value from the terminal.\n * @param {string} key The option key.\n */\n public getOption(key: string): any {\n if (!(key in DEFAULT_OPTIONS)) {\n throw new Error('No option with key \"' + key + '\"');\n }\n\n if (typeof this.options[key] !== 'undefined') {\n return this.options[key];\n }\n\n return this[key];\n }\n\n /**\n * Sets an option on the terminal.\n * @param {string} key The option key.\n * @param {any} value The option value.\n */\n public setOption(key: string, value: any): void {\n if (!(key in DEFAULT_OPTIONS)) {\n throw new Error('No option with key \"' + key + '\"');\n }\n switch (key) {\n case 'bellStyle':\n if (!value) {\n value = 'none';\n }\n break;\n case 'cursorStyle':\n if (!value) {\n value = 'block';\n }\n break;\n case 'lineHeight':\n if (value < 1) {\n console.warn(`${key} cannot be less than 1, value: ${value}`);\n return;\n }\n case 'tabStopWidth':\n if (value < 1) {\n console.warn(`${key} cannot be less than 1, value: ${value}`);\n return;\n }\n break;\n case 'theme':\n // If open has been called we do not want to set options.theme as the\n // source of truth is owned by the renderer.\n if (this.renderer) {\n this._setTheme(value);\n return;\n }\n break;\n case 'scrollback':\n value = Math.min(value, MAX_BUFFER_SIZE);\n\n if (value < 0) {\n console.warn(`${key} cannot be less than 0, value: ${value}`);\n return;\n }\n if (this.options[key] !== value) {\n const newBufferLength = this.rows + value;\n if (this.buffer.lines.length > newBufferLength) {\n const amountToTrim = this.buffer.lines.length - newBufferLength;\n const needsRefresh = (this.buffer.ydisp - amountToTrim < 0);\n this.buffer.lines.trimStart(amountToTrim);\n this.buffer.ybase = Math.max(this.buffer.ybase - amountToTrim, 0);\n this.buffer.ydisp = Math.max(this.buffer.ydisp - amountToTrim, 0);\n if (needsRefresh) {\n this.refresh(0, this.rows - 1);\n }\n }\n }\n break;\n }\n this[key] = value;\n this.options[key] = value;\n switch (key) {\n case 'fontFamily':\n case 'fontSize':\n // When the font changes the size of the cells may change which requires a renderer clear\n this.renderer.clear();\n this.charMeasure.measure(this.options);\n break;\n case 'enableBold':\n case 'letterSpacing':\n case 'lineHeight':\n // When the font changes the size of the cells may change which requires a renderer clear\n this.renderer.clear();\n this.renderer.onResize(this.cols, this.rows, false);\n this.refresh(0, this.rows - 1);\n // this.charMeasure.measure(this.options);\n case 'scrollback':\n this.buffers.resize(this.cols, this.rows);\n this.viewport.syncScrollArea();\n break;\n case 'tabStopWidth': this.buffers.setupTabStops(); break;\n case 'bellSound':\n case 'bellStyle': this.syncBellSound(); break;\n }\n // Inform renderer of changes\n if (this.renderer) {\n this.renderer.onOptionsChanged();\n }\n }\n\n /**\n * Binds the desired focus behavior on a given terminal object.\n */\n private _onTextAreaFocus(): void {\n if (this.sendFocus) {\n this.send(C0.ESC + '[I');\n }\n this.element.classList.add('focus');\n this.showCursor();\n this.emit('focus');\n };\n\n /**\n * Blur the terminal, calling the blur function on the terminal's underlying\n * textarea.\n */\n public blur(): void {\n return this.textarea.blur();\n }\n\n /**\n * Binds the desired blur behavior on a given terminal object.\n */\n private _onTextAreaBlur(): void {\n this.refresh(this.buffer.y, this.buffer.y);\n if (this.sendFocus) {\n this.send(C0.ESC + '[O');\n }\n this.element.classList.remove('focus');\n this.emit('blur');\n }\n\n /**\n * Initialize default behavior\n */\n private initGlobal(): void {\n this.bindKeys();\n\n // Bind clipboard functionality\n on(this.element, 'copy', (event: ClipboardEvent) => {\n // If mouse events are active it means the selection manager is disabled and\n // copy should be handled by the host program.\n if (!this.hasSelection()) {\n return;\n }\n copyHandler(event, this, this.selectionManager);\n });\n const pasteHandlerWrapper = event => pasteHandler(event, this);\n on(this.textarea, 'paste', pasteHandlerWrapper);\n on(this.element, 'paste', pasteHandlerWrapper);\n\n // Handle right click context menus\n if (Browser.isFirefox) {\n // Firefox doesn't appear to fire the contextmenu event on right click\n on(this.element, 'mousedown', (event: MouseEvent) => {\n if (event.button === 2) {\n rightClickHandler(event, this.textarea, this.selectionManager);\n }\n });\n } else {\n on(this.element, 'contextmenu', (event: MouseEvent) => {\n rightClickHandler(event, this.textarea, this.selectionManager);\n });\n }\n\n // Move the textarea under the cursor when middle clicking on Linux to ensure\n // middle click to paste selection works. This only appears to work in Chrome\n // at the time is writing.\n if (Browser.isLinux) {\n // Use auxclick event over mousedown the latter doesn't seem to work. Note\n // that the regular click event doesn't fire for the middle mouse button.\n on(this.element, 'auxclick', (event: MouseEvent) => {\n if (event.button === 1) {\n moveTextAreaUnderMouseCursor(event, this.textarea);\n }\n });\n }\n }\n\n /**\n * Apply key handling to the terminal\n */\n private bindKeys(): void {\n const self = this;\n on(this.element, 'keydown', function (ev: KeyboardEvent): void {\n if (document.activeElement !== this) {\n return;\n }\n self._keyDown(ev);\n }, true);\n\n on(this.element, 'keypress', function (ev: KeyboardEvent): void {\n if (document.activeElement !== this) {\n return;\n }\n self._keyPress(ev);\n }, true);\n\n on(this.element, 'keyup', (ev: KeyboardEvent) => {\n if (!wasMondifierKeyOnlyEvent(ev)) {\n this.focus();\n }\n }, true);\n\n on(this.textarea, 'keydown', (ev: KeyboardEvent) => {\n this._keyDown(ev);\n }, true);\n\n on(this.textarea, 'keypress', (ev: KeyboardEvent) => {\n this._keyPress(ev);\n // Truncate the textarea's value, since it is not needed\n this.textarea.value = '';\n }, true);\n\n on(this.textarea, 'compositionstart', () => this.compositionHelper.compositionstart());\n on(this.textarea, 'compositionupdate', (e: CompositionEvent) => this.compositionHelper.compositionupdate(e));\n on(this.textarea, 'compositionend', () => this.compositionHelper.compositionend());\n this.on('refresh', () => this.compositionHelper.updateCompositionElements());\n this.on('refresh', (data) => this.queueLinkification(data.start, data.end));\n }\n\n /**\n * Opens the terminal within an element.\n *\n * @param {HTMLElement} parent The element to create the terminal within.\n */\n public open(parent: HTMLElement): void {\n let i = 0;\n let div;\n\n this.parent = parent || this.parent;\n\n if (!this.parent) {\n throw new Error('Terminal requires a parent element.');\n }\n\n // Grab global elements\n this.context = this.parent.ownerDocument.defaultView;\n this.document = this.parent.ownerDocument;\n this.body = this.document.body;\n\n initializeCharAtlas(this.document);\n\n // Create main element container\n this.element = this.document.createElement('div');\n this.element.classList.add('terminal');\n this.element.classList.add('xterm');\n\n this.element.setAttribute('tabindex', '0');\n\n this.viewportElement = document.createElement('div');\n this.viewportElement.classList.add('xterm-viewport');\n this.element.appendChild(this.viewportElement);\n this.viewportScrollArea = document.createElement('div');\n this.viewportScrollArea.classList.add('xterm-scroll-area');\n this.viewportElement.appendChild(this.viewportScrollArea);\n\n // preload audio\n this.syncBellSound();\n\n this._mouseZoneManager = new MouseZoneManager(this);\n this.on('scroll', () => this._mouseZoneManager.clearAll());\n this.linkifier.attachToDom(this._mouseZoneManager);\n\n // Create the container that will hold helpers like the textarea for\n // capturing DOM Events. Then produce the helpers.\n this.helperContainer = document.createElement('div');\n this.helperContainer.classList.add('xterm-helpers');\n // TODO: This should probably be inserted once it's filled to prevent an additional layout\n this.element.appendChild(this.helperContainer);\n this.textarea = document.createElement('textarea');\n this.textarea.classList.add('xterm-helper-textarea');\n this.textarea.setAttribute('autocorrect', 'off');\n this.textarea.setAttribute('autocapitalize', 'off');\n this.textarea.setAttribute('spellcheck', 'false');\n this.textarea.tabIndex = 0;\n this.textarea.addEventListener('focus', () => this._onTextAreaFocus());\n this.textarea.addEventListener('blur', () => this._onTextAreaBlur());\n this.helperContainer.appendChild(this.textarea);\n\n this.compositionView = document.createElement('div');\n this.compositionView.classList.add('composition-view');\n this.compositionHelper = new CompositionHelper(this.textarea, this.compositionView, this);\n this.helperContainer.appendChild(this.compositionView);\n\n this.charSizeStyleElement = document.createElement('style');\n this.helperContainer.appendChild(this.charSizeStyleElement);\n\n this.parent.appendChild(this.element);\n\n this.charMeasure = new CharMeasure(document, this.helperContainer);\n\n this.renderer = new Renderer(this, this.options.theme);\n this.options.theme = null;\n this.viewport = new Viewport(this, this.viewportElement, this.viewportScrollArea, this.charMeasure);\n this.viewport.onThemeChanged(this.renderer.colorManager.colors);\n\n this.on('cursormove', () => this.renderer.onCursorMove());\n this.on('resize', () => this.renderer.onResize(this.cols, this.rows, false));\n this.on('blur', () => this.renderer.onBlur());\n this.on('focus', () => this.renderer.onFocus());\n window.addEventListener('resize', () => this.renderer.onWindowResize(window.devicePixelRatio));\n this.charMeasure.on('charsizechanged', () => this.renderer.onResize(this.cols, this.rows, true));\n this.renderer.on('resize', (dimensions) => this.viewport.syncScrollArea());\n\n this.selectionManager = new SelectionManager(this, this.buffer, this.charMeasure);\n this.element.addEventListener('mousedown', (e: MouseEvent) => this.selectionManager.onMouseDown(e));\n this.selectionManager.on('refresh', data => this.renderer.onSelectionChanged(data.start, data.end));\n this.selectionManager.on('newselection', text => {\n // If there's a new selection, put it into the textarea, focus and select it\n // in order to register it as a selection on the OS. This event is fired\n // only on Linux to enable middle click to paste selection.\n this.textarea.value = text;\n this.textarea.focus();\n this.textarea.select();\n });\n this.on('scroll', () => {\n this.viewport.syncScrollArea();\n this.selectionManager.refresh();\n });\n this.viewportElement.addEventListener('scroll', () => this.selectionManager.refresh());\n\n this.mouseHelper = new MouseHelper(this.renderer);\n\n // Measure the character size\n this.charMeasure.measure(this.options);\n\n // Setup loop that draws to screen\n this.refresh(0, this.rows - 1);\n\n // Initialize global actions that need to be taken on the document.\n this.initGlobal();\n\n // Listen for mouse events and translate\n // them into terminal mouse protocols.\n this.bindMouse();\n }\n\n /**\n * Sets the theme on the renderer. The renderer must have been initialized.\n * @param theme The theme to ste.\n */\n private _setTheme(theme: ITheme): void {\n const colors = this.renderer.setTheme(theme);\n if (this.viewport) {\n this.viewport.onThemeChanged(colors);\n }\n }\n\n /**\n * Attempts to load an add-on using CommonJS or RequireJS (whichever is available).\n * @param {string} addon The name of the addon to load\n * @static\n */\n public static loadAddon(addon: string, callback?: Function): boolean | any {\n // TODO: Improve return type and documentation\n if (typeof exports === 'object' && typeof module === 'object') {\n // CommonJS\n return require('./addons/' + addon + '/' + addon);\n } else if (typeof define === 'function') {\n // RequireJS\n return (require)(['./addons/' + addon + '/' + addon], callback);\n } else {\n console.error('Cannot load a module without a CommonJS or RequireJS environment.');\n return false;\n }\n }\n\n /**\n * XTerm mouse events\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#Mouse%20Tracking\n * To better understand these\n * the xterm code is very helpful:\n * Relevant files:\n * button.c, charproc.c, misc.c\n * Relevant functions in xterm/button.c:\n * BtnCode, EmitButtonCode, EditorButton, SendMousePosition\n */\n public bindMouse(): void {\n const el = this.element;\n const self = this;\n let pressed = 32;\n\n // mouseup, mousedown, wheel\n // left click: ^[[M 3<^[[M#3<\n // wheel up: ^[[M`3>\n function sendButton(ev: MouseEvent | WheelEvent): void {\n let button;\n let pos;\n\n // get the xterm-style button\n button = getButton(ev);\n\n // get mouse coordinates\n pos = self.mouseHelper.getRawByteCoords(ev, self.element, self.charMeasure, self.options.lineHeight, self.cols, self.rows);\n if (!pos) return;\n\n sendEvent(button, pos);\n\n switch ((ev).overrideType || ev.type) {\n case 'mousedown':\n pressed = button;\n break;\n case 'mouseup':\n // keep it at the left\n // button, just in case.\n pressed = 32;\n break;\n case 'wheel':\n // nothing. don't\n // interfere with\n // `pressed`.\n break;\n }\n }\n\n // motion example of a left click:\n // ^[[M 3<^[[M@4<^[[M@5<^[[M@6<^[[M@7<^[[M#7<\n function sendMove(ev: MouseEvent): void {\n let button = pressed;\n let pos = self.mouseHelper.getRawByteCoords(ev, self.element, self.charMeasure, self.options.lineHeight, self.cols, self.rows);\n if (!pos) return;\n\n // buttons marked as motions\n // are incremented by 32\n button += 32;\n\n sendEvent(button, pos);\n }\n\n // encode button and\n // position to characters\n function encode(data: number[], ch: number): void {\n if (!self.utfMouse) {\n if (ch === 255) {\n data.push(0);\n return;\n }\n if (ch > 127) ch = 127;\n data.push(ch);\n } else {\n if (ch === 2047) {\n data.push(0);\n return;\n }\n if (ch < 127) {\n data.push(ch);\n } else {\n if (ch > 2047) ch = 2047;\n data.push(0xC0 | (ch >> 6));\n data.push(0x80 | (ch & 0x3F));\n }\n }\n }\n\n // send a mouse event:\n // regular/utf8: ^[[M Cb Cx Cy\n // urxvt: ^[[ Cb ; Cx ; Cy M\n // sgr: ^[[ Cb ; Cx ; Cy M/m\n // vt300: ^[[ 24(1/3/5)~ [ Cx , Cy ] \\r\n // locator: CSI P e ; P b ; P r ; P c ; P p & w\n function sendEvent(button: number, pos: {x: number, y: number}): void {\n // self.emit('mouse', {\n // x: pos.x - 32,\n // y: pos.x - 32,\n // button: button\n // });\n\n if (self.vt300Mouse) {\n // NOTE: Unstable.\n // http://www.vt100.net/docs/vt3xx-gp/chapter15.html\n button &= 3;\n pos.x -= 32;\n pos.y -= 32;\n let data = C0.ESC + '[24';\n if (button === 0) data += '1';\n else if (button === 1) data += '3';\n else if (button === 2) data += '5';\n else if (button === 3) return;\n else data += '0';\n data += '~[' + pos.x + ',' + pos.y + ']\\r';\n self.send(data);\n return;\n }\n\n if (self.decLocator) {\n // NOTE: Unstable.\n button &= 3;\n pos.x -= 32;\n pos.y -= 32;\n if (button === 0) button = 2;\n else if (button === 1) button = 4;\n else if (button === 2) button = 6;\n else if (button === 3) button = 3;\n self.send(C0.ESC + '['\n + button\n + ';'\n + (button === 3 ? 4 : 0)\n + ';'\n + pos.y\n + ';'\n + pos.x\n + ';'\n // Not sure what page is meant to be\n + (pos).page || 0\n + '&w');\n return;\n }\n\n if (self.urxvtMouse) {\n pos.x -= 32;\n pos.y -= 32;\n pos.x++;\n pos.y++;\n self.send(C0.ESC + '[' + button + ';' + pos.x + ';' + pos.y + 'M');\n return;\n }\n\n if (self.sgrMouse) {\n pos.x -= 32;\n pos.y -= 32;\n self.send(C0.ESC + '[<'\n + (((button & 3) === 3 ? button & ~3 : button) - 32)\n + ';'\n + pos.x\n + ';'\n + pos.y\n + ((button & 3) === 3 ? 'm' : 'M'));\n return;\n }\n\n let data: number[] = [];\n\n encode(data, button);\n encode(data, pos.x);\n encode(data, pos.y);\n\n self.send(C0.ESC + '[M' + String.fromCharCode.apply(String, data));\n }\n\n function getButton(ev: MouseEvent): number {\n let button;\n let shift;\n let meta;\n let ctrl;\n let mod;\n\n // two low bits:\n // 0 = left\n // 1 = middle\n // 2 = right\n // 3 = release\n // wheel up/down:\n // 1, and 2 - with 64 added\n switch ((ev).overrideType || ev.type) {\n case 'mousedown':\n button = ev.button != null\n ? +ev.button\n : ev.which != null\n ? ev.which - 1\n : null;\n\n if (Browser.isMSIE) {\n button = button === 1 ? 0 : button === 4 ? 1 : button;\n }\n break;\n case 'mouseup':\n button = 3;\n break;\n case 'DOMMouseScroll':\n button = ev.detail < 0\n ? 64\n : 65;\n break;\n case 'wheel':\n button = (ev).wheelDeltaY > 0\n ? 64\n : 65;\n break;\n }\n\n // next three bits are the modifiers:\n // 4 = shift, 8 = meta, 16 = control\n shift = ev.shiftKey ? 4 : 0;\n meta = ev.metaKey ? 8 : 0;\n ctrl = ev.ctrlKey ? 16 : 0;\n mod = shift | meta | ctrl;\n\n // no mods\n if (self.vt200Mouse) {\n // ctrl only\n mod &= ctrl;\n } else if (!self.normalMouse) {\n mod = 0;\n }\n\n // increment to SP\n button = (32 + (mod << 2)) + button;\n\n return button;\n }\n\n on(el, 'mousedown', (ev: MouseEvent) => {\n\n // Prevent the focus on the textarea from getting lost\n // and make sure we get focused on mousedown\n ev.preventDefault();\n this.focus();\n\n // Don't send the mouse button to the pty if mouse events are disabled or\n // if the selection manager is having selection forced (ie. a modifier is\n // held).\n if (!this.mouseEvents || this.selectionManager.shouldForceSelection(ev)) {\n return;\n }\n\n // send the button\n sendButton(ev);\n\n // fix for odd bug\n // if (this.vt200Mouse && !this.normalMouse) {\n if (this.vt200Mouse) {\n (ev).overrideType = 'mouseup';\n sendButton(ev);\n return this.cancel(ev);\n }\n\n // bind events\n if (this.normalMouse) on(this.document, 'mousemove', sendMove);\n\n // x10 compatibility mode can't send button releases\n if (!this.x10Mouse) {\n const handler = (ev: MouseEvent) => {\n sendButton(ev);\n // TODO: Seems dangerous calling this on document?\n if (this.normalMouse) off(this.document, 'mousemove', sendMove);\n off(this.document, 'mouseup', handler);\n return this.cancel(ev);\n };\n // TODO: Seems dangerous calling this on document?\n on(this.document, 'mouseup', handler);\n }\n\n return this.cancel(ev);\n });\n\n // if (this.normalMouse) {\n // on(this.document, 'mousemove', sendMove);\n // }\n\n on(el, 'wheel', (ev: WheelEvent) => {\n if (!this.mouseEvents) return;\n if (this.x10Mouse || this.vt300Mouse || this.decLocator) return;\n sendButton(ev);\n ev.preventDefault();\n });\n\n // allow wheel scrolling in\n // the shell for example\n on(el, 'wheel', (ev: WheelEvent) => {\n if (this.mouseEvents) return;\n this.viewport.onWheel(ev);\n return this.cancel(ev);\n });\n\n on(el, 'touchstart', (ev: TouchEvent) => {\n if (this.mouseEvents) return;\n this.viewport.onTouchStart(ev);\n return this.cancel(ev);\n });\n\n on(el, 'touchmove', (ev: TouchEvent) => {\n if (this.mouseEvents) return;\n this.viewport.onTouchMove(ev);\n return this.cancel(ev);\n });\n }\n\n /**\n * Destroys the terminal.\n */\n public destroy(): void {\n super.destroy();\n this.readable = false;\n this.writable = false;\n this.handler = () => {};\n this.write = () => {};\n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n // this.emit('close');\n }\n\n /**\n * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n * opportunity.\n * @param {number} start The row to start from (between 0 and this.rows - 1).\n * @param {number} end The row to end at (between start and this.rows - 1).\n */\n public refresh(start: number, end: number): void {\n if (this.renderer) {\n this.renderer.queueRefresh(start, end);\n }\n }\n\n /**\n * Queues linkification for the specified rows.\n * @param {number} start The row to start from (between 0 and this.rows - 1).\n * @param {number} end The row to end at (between start and this.rows - 1).\n */\n private queueLinkification(start: number, end: number): void {\n if (this.linkifier) {\n this.linkifier.linkifyRows(start, end);\n }\n }\n\n /**\n * Display the cursor element\n */\n public showCursor(): void {\n if (!this.cursorState) {\n this.cursorState = 1;\n this.refresh(this.buffer.y, this.buffer.y);\n }\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(isWrapped?: boolean): void {\n const newLine = this.blankLine(undefined, isWrapped);\n const topRow = this.buffer.ybase + this.buffer.scrollTop;\n let bottomRow = this.buffer.ybase + this.buffer.scrollBottom;\n\n if (this.buffer.scrollTop === 0) {\n // Determine whether the buffer is going to be trimmed after insertion.\n const willBufferBeTrimmed = this.buffer.lines.length === this.buffer.lines.maxLength;\n\n // Insert the line using the fastest method\n if (bottomRow === this.buffer.lines.length - 1) {\n this.buffer.lines.push(newLine);\n } else {\n this.buffer.lines.splice(bottomRow + 1, 0, newLine);\n }\n\n // Only adjust ybase and ydisp when the buffer is not trimmed\n if (!willBufferBeTrimmed) {\n this.buffer.ybase++;\n // Only scroll the ydisp with ybase if the user has not scrolled up\n if (!this.userScrolling) {\n this.buffer.ydisp++;\n }\n } else {\n // When the buffer is full and the user has scrolled up, keep the text\n // stable unless ydisp is right at the top\n if (this.userScrolling) {\n this.buffer.ydisp = Math.max(this.buffer.ydisp - 1, 0);\n }\n }\n } else {\n // scrollTop is non-zero which means no line will be going to the\n // scrollback, instead we can just shift them in-place.\n const scrollRegionHeight = bottomRow - topRow + 1/*as it's zero-based*/;\n this.buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n this.buffer.lines.set(bottomRow, newLine);\n }\n\n // Move the viewport to the bottom of the buffer unless the user is\n // scrolling.\n if (!this.userScrolling) {\n this.buffer.ydisp = this.buffer.ybase;\n }\n\n // Flag rows that need updating\n this.updateRange(this.buffer.scrollTop);\n this.updateRange(this.buffer.scrollBottom);\n\n /**\n * This event is emitted whenever the terminal is scrolled.\n * The one parameter passed is the new y display position.\n *\n * @event scroll\n */\n this.emit('scroll', this.buffer.ydisp);\n }\n\n /**\n * Scroll the display of the terminal\n * @param {number} disp The number of lines to scroll down (negative scroll up).\n * @param {boolean} suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n * to avoid unwanted events being handled by the viewport when the event was triggered from the\n * viewport originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n if (disp < 0) {\n if (this.buffer.ydisp === 0) {\n return;\n }\n this.userScrolling = true;\n } else if (disp + this.buffer.ydisp >= this.buffer.ybase) {\n this.userScrolling = false;\n }\n\n const oldYdisp = this.buffer.ydisp;\n this.buffer.ydisp = Math.max(Math.min(this.buffer.ydisp + disp, this.buffer.ybase), 0);\n\n // No change occurred, don't trigger scroll/refresh\n if (oldYdisp === this.buffer.ydisp) {\n return;\n }\n\n if (!suppressScrollEvent) {\n this.emit('scroll', this.buffer.ydisp);\n }\n\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Scroll the display of the terminal by a number of pages.\n * @param {number} pageCount The number of pages to scroll (negative scrolls up).\n */\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n /**\n * Scrolls the display of the terminal to the top.\n */\n public scrollToTop(): void {\n this.scrollLines(-this.buffer.ydisp);\n }\n\n /**\n * Scrolls the display of the terminal to the bottom.\n */\n public scrollToBottom(): void {\n this.scrollLines(this.buffer.ybase - this.buffer.ydisp);\n }\n\n /**\n * Writes text to the terminal.\n * @param {string} data The text to write to the terminal.\n */\n public write(data: string): void {\n this.writeBuffer.push(data);\n\n // Send XOFF to pause the pty process if the write buffer becomes too large so\n // xterm.js can catch up before more data is sent. This is necessary in order\n // to keep signals such as ^C responsive.\n if (this.options.useFlowControl && !this.xoffSentToCatchUp && this.writeBuffer.length >= WRITE_BUFFER_PAUSE_THRESHOLD) {\n // XOFF - stop pty pipe\n // XON will be triggered by emulator before processing data chunk\n this.send(C0.DC3);\n this.xoffSentToCatchUp = true;\n }\n\n if (!this.writeInProgress && this.writeBuffer.length > 0) {\n // Kick off a write which will write all data in sequence recursively\n this.writeInProgress = true;\n // Kick off an async innerWrite so more writes can come in while processing data\n setTimeout(() => {\n this.innerWrite();\n });\n }\n }\n\n private innerWrite(): void {\n const writeBatch = this.writeBuffer.splice(0, WRITE_BATCH_SIZE);\n while (writeBatch.length > 0) {\n const data = writeBatch.shift();\n\n // If XOFF was sent in order to catch up with the pty process, resume it if\n // the writeBuffer is empty to allow more data to come in.\n if (this.xoffSentToCatchUp && writeBatch.length === 0 && this.writeBuffer.length === 0) {\n this.send(C0.DC1);\n this.xoffSentToCatchUp = false;\n }\n\n this.refreshStart = this.buffer.y;\n this.refreshEnd = this.buffer.y;\n\n // HACK: Set the parser state based on it's state at the time of return.\n // This works around the bug #662 which saw the parser state reset in the\n // middle of parsing escape sequence in two chunks. For some reason the\n // state of the parser resets to 0 after exiting parser.parse. This change\n // just sets the state back based on the correct return statement.\n const state = this.parser.parse(data);\n this.parser.setState(state);\n\n this.updateRange(this.buffer.y);\n this.refresh(this.refreshStart, this.refreshEnd);\n }\n if (this.writeBuffer.length > 0) {\n // Allow renderer to catch up before processing the next batch\n setTimeout(() => this.innerWrite(), 0);\n } else {\n this.writeInProgress = false;\n }\n }\n\n /**\n * Writes text to the terminal, followed by a break line character (\\n).\n * @param {string} data The text to write to the terminal.\n */\n public writeln(data: string): void {\n this.write(data + '\\r\\n');\n }\n\n /**\n * Attaches a custom key event handler which is run before keys are processed,\n * giving consumers of xterm.js ultimate control as to what keys should be\n * processed by the terminal and what keys should not.\n * @param customKeyEventHandler The custom KeyboardEvent handler to attach.\n * This is a function that takes a KeyboardEvent, allowing consumers to stop\n * propogation and/or prevent the default action. The function returns whether\n * the event should be processed by xterm.js.\n */\n public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEventHandler): void {\n this.customKeyEventHandler = customKeyEventHandler;\n }\n\n /**\n * Attaches a http(s) link handler, forcing web links to behave differently to\n * regular tags. This will trigger a refresh as links potentially need to be\n * reconstructed. Calling this with null will remove the handler.\n * @param handler The handler callback function.\n */\n public setHypertextLinkHandler(handler: LinkMatcherHandler): void {\n if (!this.linkifier) {\n throw new Error('Cannot attach a hypertext link handler before Terminal.open is called');\n }\n this.linkifier.setHypertextLinkHandler(handler);\n // Refresh to force links to refresh\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Attaches a validation callback for hypertext links. This is useful to use\n * validation logic or to do something with the link's element and url.\n * @param callback The callback to use, this can\n * be cleared with null.\n */\n public setHypertextValidationCallback(callback: LinkMatcherValidationCallback): void {\n if (!this.linkifier) {\n throw new Error('Cannot attach a hypertext validation callback before Terminal.open is called');\n }\n this.linkifier.setHypertextValidationCallback(callback);\n // // Refresh to force links to refresh\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Registers a link matcher, allowing custom link patterns to be matched and\n * handled.\n * @param regex The regular expression to search for, specifically\n * this searches the textContent of the rows. You will want to use \\s to match\n * a space ' ' character for example.\n * @param handler The callback when the link is called.\n * @param options Options for the link matcher.\n * @return The ID of the new matcher, this can be used to deregister.\n */\n public registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options?: ILinkMatcherOptions): number {\n if (this.linkifier) {\n const matcherId = this.linkifier.registerLinkMatcher(regex, handler, options);\n this.refresh(0, this.rows - 1);\n return matcherId;\n }\n return 0;\n }\n\n /**\n * Deregisters a link matcher if it has been registered.\n * @param matcherId The link matcher's ID (returned after register)\n */\n public deregisterLinkMatcher(matcherId: number): void {\n if (this.linkifier) {\n if (this.linkifier.deregisterLinkMatcher(matcherId)) {\n this.refresh(0, this.rows - 1);\n }\n }\n }\n\n /**\n * Gets whether the terminal has an active selection.\n */\n public hasSelection(): boolean {\n return this.selectionManager ? this.selectionManager.hasSelection : false;\n }\n\n /**\n * Gets the terminal's current selection, this is useful for implementing copy\n * behavior outside of xterm.js.\n */\n public getSelection(): string {\n return this.selectionManager ? this.selectionManager.selectionText : '';\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n if (this.selectionManager) {\n this.selectionManager.clearSelection();\n }\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n if (this.selectionManager) {\n this.selectionManager.selectAll();\n }\n }\n\n /**\n * Handle a keydown event\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param {KeyboardEvent} ev The keydown event to be handled.\n */\n protected _keyDown(ev: KeyboardEvent): boolean {\n if (this.customKeyEventHandler && this.customKeyEventHandler(ev) === false) {\n return false;\n }\n\n if (!this.compositionHelper.keydown(ev)) {\n if (this.buffer.ybase !== this.buffer.ydisp) {\n this.scrollToBottom();\n }\n return false;\n }\n\n const result = this._evaluateKeyEscapeSequence(ev);\n\n if (result.key === C0.DC3) { // XOFF\n this.writeStopped = true;\n } else if (result.key === C0.DC1) { // XON\n this.writeStopped = false;\n }\n\n if (result.scrollLines) {\n this.scrollLines(result.scrollLines);\n return this.cancel(ev, true);\n }\n\n if (isThirdLevelShift(this.browser, ev)) {\n return true;\n }\n\n if (result.cancel) {\n // The event is canceled at the end already, is this necessary?\n this.cancel(ev, true);\n }\n\n if (!result.key) {\n return true;\n }\n\n this.emit('keydown', ev);\n this.emit('key', result.key, ev);\n this.showCursor();\n this.handler(result.key);\n\n return this.cancel(ev, true);\n }\n\n /**\n * Returns an object that determines how a KeyboardEvent should be handled. The key of the\n * returned value is the new key code to pass to the PTY.\n *\n * Reference: http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * @param ev The keyboard event to be translated to key escape sequence.\n */\n protected _evaluateKeyEscapeSequence(ev: KeyboardEvent): {cancel: boolean, key: string, scrollLines: number} {\n const result: {cancel: boolean, key: string, scrollLines: number} = {\n // Whether to cancel event propogation (NOTE: this may not be needed since the event is\n // canceled at the end of keyDown\n cancel: false,\n // The new key even to emit\n key: undefined,\n // The number of characters to scroll, if this is defined it will cancel the event\n scrollLines: undefined\n };\n const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);\n switch (ev.keyCode) {\n case 0:\n if (ev.key === 'UIKeyInputUpArrow') {\n if (this.applicationCursor) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n }\n else if (ev.key === 'UIKeyInputLeftArrow') {\n if (this.applicationCursor) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n }\n else if (ev.key === 'UIKeyInputRightArrow') {\n if (this.applicationCursor) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n }\n else if (ev.key === 'UIKeyInputDownArrow') {\n if (this.applicationCursor) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n }\n break;\n case 8:\n // backspace\n if (ev.shiftKey) {\n result.key = C0.BS; // ^H\n break;\n }\n result.key = C0.DEL; // ^?\n break;\n case 9:\n // tab\n if (ev.shiftKey) {\n result.key = C0.ESC + '[Z';\n break;\n }\n result.key = C0.HT;\n result.cancel = true;\n break;\n case 13:\n // return/enter\n result.key = C0.CR;\n result.cancel = true;\n break;\n case 27:\n // escape\n result.key = C0.ESC;\n result.cancel = true;\n break;\n case 37:\n // left-arrow\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n // HACK: Make Alt + left-arrow behave like Ctrl + left-arrow: move one word backwards\n // http://unix.stackexchange.com/a/108106\n // macOS uses different escape sequences than linux\n if (result.key === C0.ESC + '[1;3D') {\n result.key = (this.browser.isMac) ? C0.ESC + 'b' : C0.ESC + '[1;5D';\n }\n } else if (this.applicationCursor) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n break;\n case 39:\n // right-arrow\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n // HACK: Make Alt + right-arrow behave like Ctrl + right-arrow: move one word forward\n // http://unix.stackexchange.com/a/108106\n // macOS uses different escape sequences than linux\n if (result.key === C0.ESC + '[1;3C') {\n result.key = (this.browser.isMac) ? C0.ESC + 'f' : C0.ESC + '[1;5C';\n }\n } else if (this.applicationCursor) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n break;\n case 38:\n // up-arrow\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n // HACK: Make Alt + up-arrow behave like Ctrl + up-arrow\n // http://unix.stackexchange.com/a/108106\n if (result.key === C0.ESC + '[1;3A') {\n result.key = C0.ESC + '[1;5A';\n }\n } else if (this.applicationCursor) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n break;\n case 40:\n // down-arrow\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n // HACK: Make Alt + down-arrow behave like Ctrl + down-arrow\n // http://unix.stackexchange.com/a/108106\n if (result.key === C0.ESC + '[1;3B') {\n result.key = C0.ESC + '[1;5B';\n }\n } else if (this.applicationCursor) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n break;\n case 45:\n // insert\n if (!ev.shiftKey && !ev.ctrlKey) {\n // or + are used to\n // copy-paste on some systems.\n result.key = C0.ESC + '[2~';\n }\n break;\n case 46:\n // delete\n if (modifiers) {\n result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[3~';\n }\n break;\n case 36:\n // home\n if (modifiers)\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n else if (this.applicationCursor)\n result.key = C0.ESC + 'OH';\n else\n result.key = C0.ESC + '[H';\n break;\n case 35:\n // end\n if (modifiers)\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n else if (this.applicationCursor)\n result.key = C0.ESC + 'OF';\n else\n result.key = C0.ESC + '[F';\n break;\n case 33:\n // page up\n if (ev.shiftKey) {\n result.scrollLines = -(this.rows - 1);\n } else {\n result.key = C0.ESC + '[5~';\n }\n break;\n case 34:\n // page down\n if (ev.shiftKey) {\n result.scrollLines = this.rows - 1;\n } else {\n result.key = C0.ESC + '[6~';\n }\n break;\n case 112:\n // F1-F12\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n } else {\n result.key = C0.ESC + 'OP';\n }\n break;\n case 113:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n } else {\n result.key = C0.ESC + 'OQ';\n }\n break;\n case 114:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n } else {\n result.key = C0.ESC + 'OR';\n }\n break;\n case 115:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n } else {\n result.key = C0.ESC + 'OS';\n }\n break;\n case 116:\n if (modifiers) {\n result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[15~';\n }\n break;\n case 117:\n if (modifiers) {\n result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[17~';\n }\n break;\n case 118:\n if (modifiers) {\n result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[18~';\n }\n break;\n case 119:\n if (modifiers) {\n result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[19~';\n }\n break;\n case 120:\n if (modifiers) {\n result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[20~';\n }\n break;\n case 121:\n if (modifiers) {\n result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[21~';\n }\n break;\n case 122:\n if (modifiers) {\n result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[23~';\n }\n break;\n case 123:\n if (modifiers) {\n result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[24~';\n }\n break;\n default:\n // a-z and space\n if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = String.fromCharCode(ev.keyCode - 64);\n } else if (ev.keyCode === 32) {\n // NUL\n result.key = String.fromCharCode(0);\n } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n // escape, file sep, group sep, record sep, unit sep\n result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n } else if (ev.keyCode === 56) {\n // delete\n result.key = String.fromCharCode(127);\n } else if (ev.keyCode === 219) {\n // ^[ - Control Sequence Introducer (CSI)\n result.key = String.fromCharCode(27);\n } else if (ev.keyCode === 220) {\n // ^\\ - String Terminator (ST)\n result.key = String.fromCharCode(28);\n } else if (ev.keyCode === 221) {\n // ^] - Operating System Command (OSC)\n result.key = String.fromCharCode(29);\n }\n } else if (!this.browser.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) {\n // On Mac this is a third level shift. Use instead.\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = C0.ESC + String.fromCharCode(ev.keyCode + 32);\n } else if (ev.keyCode === 192) {\n result.key = C0.ESC + '`';\n } else if (ev.keyCode >= 48 && ev.keyCode <= 57) {\n result.key = C0.ESC + (ev.keyCode - 48);\n }\n } else if (this.browser.isMac && !ev.altKey && !ev.ctrlKey && ev.metaKey) {\n if (ev.keyCode === 65) { // cmd + a\n this.selectAll();\n }\n }\n break;\n }\n\n return result;\n }\n\n /**\n * Set the G level of the terminal\n * @param g\n */\n public setgLevel(g: number): void {\n this.glevel = g;\n this.charset = this.charsets[g];\n }\n\n /**\n * Set the charset for the given G level of the terminal\n * @param g\n * @param charset\n */\n public setgCharset(g: number, charset: Charset): void {\n this.charsets[g] = charset;\n if (this.glevel === g) {\n this.charset = charset;\n }\n }\n\n /**\n * Handle a keypress event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param {KeyboardEvent} ev The keypress event to be handled.\n */\n protected _keyPress(ev: KeyboardEvent): boolean {\n let key;\n\n if (this.customKeyEventHandler && this.customKeyEventHandler(ev) === false) {\n return false;\n }\n\n this.cancel(ev);\n\n if (ev.charCode) {\n key = ev.charCode;\n } else if (ev.which == null) {\n key = ev.keyCode;\n } else if (ev.which !== 0 && ev.charCode !== 0) {\n key = ev.which;\n } else {\n return false;\n }\n\n if (!key || (\n (ev.altKey || ev.ctrlKey || ev.metaKey) && !isThirdLevelShift(this.browser, ev)\n )) {\n return false;\n }\n\n key = String.fromCharCode(key);\n\n this.emit('keypress', key, ev);\n this.emit('key', key, ev);\n this.showCursor();\n this.handler(key);\n\n return true;\n }\n\n /**\n * Send data for handling to the terminal\n * @param {string} data\n */\n public send(data: string): void {\n if (!this.sendDataQueue) {\n setTimeout(() => {\n this.handler(this.sendDataQueue);\n this.sendDataQueue = '';\n }, 1);\n }\n\n this.sendDataQueue += data;\n }\n\n /**\n * Ring the bell.\n * Note: We could do sweet things with webaudio here\n */\n public bell(): void {\n this.emit('bell');\n if (this.soundBell()) this.bellAudioElement.play();\n\n if (this.visualBell()) {\n this.element.classList.add('visual-bell-active');\n clearTimeout(this.visualBellTimer);\n this.visualBellTimer = window.setTimeout(() => {\n this.element.classList.remove('visual-bell-active');\n }, 200);\n }\n }\n\n /**\n * Log the current state to the console.\n */\n public log(text: string, data?: any): void {\n if (!this.options.debug) return;\n if (!this.context.console || !this.context.console.log) return;\n this.context.console.log(text, data);\n }\n\n /**\n * Log the current state as error to the console.\n */\n public error(text: string, data?: any): void {\n if (!this.options.debug) return;\n if (!this.context.console || !this.context.console.error) return;\n this.context.console.error(text, data);\n }\n\n /**\n * Resizes the terminal.\n *\n * @param {number} x The number of columns to resize to.\n * @param {number} y The number of rows to resize to.\n */\n public resize(x: number, y: number): void {\n if (isNaN(x) || isNaN(y)) {\n return;\n }\n\n if (x === this.cols && y === this.rows) {\n // Check if we still need to measure the char size (fixes #785).\n if (!this.charMeasure.width || !this.charMeasure.height) {\n this.charMeasure.measure(this.options);\n }\n return;\n }\n\n if (x < 1) x = 1;\n if (y < 1) y = 1;\n\n this.buffers.resize(x, y);\n\n this.cols = x;\n this.rows = y;\n this.buffers.setupTabStops(this.cols);\n\n this.charMeasure.measure(this.options);\n\n this.refresh(0, this.rows - 1);\n\n this.geometry = [this.cols, this.rows];\n this.emit('resize', {cols: x, rows: y});\n }\n\n /**\n * Updates the range of rows to refresh\n * @param {number} y The number of rows to refresh next.\n */\n public updateRange(y: number): void {\n if (y < this.refreshStart) this.refreshStart = y;\n if (y > this.refreshEnd) this.refreshEnd = y;\n // if (y > this.refreshEnd) {\n // this.refreshEnd = y;\n // if (y > this.rows - 1) {\n // this.refreshEnd = this.rows - 1;\n // }\n // }\n }\n\n /**\n * Set the range of refreshing to the maximum value\n */\n public maxRange(): void {\n this.refreshStart = 0;\n this.refreshEnd = this.rows - 1;\n }\n\n /**\n * Erase in the identified line everything from \"x\" to the end of the line (right).\n * @param {number} x The column from which to start erasing to the end of the line.\n * @param {number} y The line in which to operate.\n */\n public eraseRight(x: number, y: number): void {\n const line = this.buffer.lines.get(this.buffer.ybase + y);\n if (!line) {\n return;\n }\n const ch: CharData = [this.eraseAttr(), ' ', 1, 32 /* ' '.charCodeAt(0) */]; // xterm\n for (; x < this.cols; x++) {\n line[x] = ch;\n }\n this.updateRange(y);\n }\n\n /**\n * Erase in the identified line everything from \"x\" to the start of the line (left).\n * @param {number} x The column from which to start erasing to the start of the line.\n * @param {number} y The line in which to operate.\n */\n public eraseLeft(x: number, y: number): void {\n const line = this.buffer.lines.get(this.buffer.ybase + y);\n if (!line) {\n return;\n }\n const ch: CharData = [this.eraseAttr(), ' ', 1, 32 /* ' '.charCodeAt(0) */]; // xterm\n x++;\n while (x--) {\n line[x] = ch;\n }\n this.updateRange(y);\n }\n\n /**\n * Clear the entire buffer, making the prompt line the new first line.\n */\n public clear(): void {\n if (this.buffer.ybase === 0 && this.buffer.y === 0) {\n // Don't clear if it's already clear\n return;\n }\n this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y));\n this.buffer.lines.length = 1;\n this.buffer.ydisp = 0;\n this.buffer.ybase = 0;\n this.buffer.y = 0;\n for (let i = 1; i < this.rows; i++) {\n this.buffer.lines.push(this.blankLine());\n }\n this.refresh(0, this.rows - 1);\n this.emit('scroll', this.buffer.ydisp);\n }\n\n /**\n * Erase all content in the given line\n * @param {number} y The line to erase all of its contents.\n */\n public eraseLine(y: number): void {\n this.eraseRight(0, y);\n }\n\n /**\n * Return the data array of a blank line\n * @param {boolean} cur First bunch of data for each \"blank\" character.\n * @param {boolean} isWrapped Whether the new line is wrapped from the previous line.\n * @param {boolean} cols The number of columns in the terminal, if this is not\n * set, the terminal's current column count would be used.\n */\n public blankLine(cur?: boolean, isWrapped?: boolean, cols?: number): LineData {\n const attr = cur ? this.eraseAttr() : this.defAttr;\n\n const ch: CharData = [attr, ' ', 1, 32 /* ' '.charCodeAt(0) */]; // width defaults to 1 halfwidth character\n const line: LineData = [];\n\n // TODO: It is not ideal that this is a property on an array, a buffer line\n // class should be added that will hold this data and other useful functions.\n if (isWrapped) {\n (line).isWrapped = isWrapped;\n }\n\n cols = cols || this.cols;\n for (let i = 0; i < cols; i++) {\n line[i] = ch;\n }\n\n return line;\n }\n\n /**\n * If cur return the back color xterm feature attribute. Else return defAttr.\n * @param cur\n */\n public ch(cur?: boolean): CharData {\n if (cur) {\n return [this.eraseAttr(), ' ', 1, 32 /* ' '.charCodeAt(0) */];\n }\n return [this.defAttr, ' ', 1, 32 /* ' '.charCodeAt(0) */];\n }\n\n /**\n * Evaluate if the current terminal is the given argument.\n * @param term The terminal name to evaluate\n */\n public is(term: string): boolean {\n return (this.options.termName + '').indexOf(term) === 0;\n }\n\n /**\n * Emit the 'data' event and populate the given data.\n * @param {string} data The data to populate in the event.\n */\n public handler(data: string): void {\n // Prevents all events to pty process if stdin is disabled\n if (this.options.disableStdin) {\n return;\n }\n\n // Clear the selection if the selection manager is available and has an active selection\n if (this.selectionManager && this.selectionManager.hasSelection) {\n this.selectionManager.clearSelection();\n }\n\n // Input is being sent to the terminal, the terminal should focus the prompt.\n if (this.buffer.ybase !== this.buffer.ydisp) {\n this.scrollToBottom();\n }\n this.emit('data', data);\n }\n\n /**\n * Emit the 'title' event and populate the given title.\n * @param {string} title The title to populate in the event.\n */\n private handleTitle(title: string): void {\n /**\n * This event is emitted when the title of the terminal is changed\n * from inside the terminal. The parameter is the new title.\n *\n * @event title\n */\n this.emit('title', title);\n }\n\n /**\n * ESC\n */\n\n /**\n * ESC D Index (IND is 0x84).\n */\n public index(): void {\n this.buffer.y++;\n if (this.buffer.y > this.buffer.scrollBottom) {\n this.buffer.y--;\n this.scroll();\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this.buffer.x >= this.cols) {\n this.buffer.x--;\n }\n }\n\n /**\n * ESC M Reverse Index (RI is 0x8d).\n *\n * Move the cursor up one row, inserting a new blank line if necessary.\n */\n public reverseIndex(): void {\n if (this.buffer.y === this.buffer.scrollTop) {\n // possibly move the code below to term.reverseScroll();\n // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n // blankLine(true) is xterm/linux behavior\n const scrollRegionHeight = this.buffer.scrollBottom - this.buffer.scrollTop;\n this.buffer.lines.shiftElements(this.buffer.y + this.buffer.ybase, scrollRegionHeight, 1);\n this.buffer.lines.set(this.buffer.y + this.buffer.ybase, this.blankLine(true));\n this.updateRange(this.buffer.scrollTop);\n this.updateRange(this.buffer.scrollBottom);\n } else {\n this.buffer.y--;\n }\n }\n\n /**\n * ESC c Full Reset (RIS).\n */\n public reset(): void {\n this.options.rows = this.rows;\n this.options.cols = this.cols;\n const customKeyEventHandler = this.customKeyEventHandler;\n const inputHandler = this.inputHandler;\n const buffers = this.buffers;\n this.setup();\n this.customKeyEventHandler = customKeyEventHandler;\n this.inputHandler = inputHandler;\n this.buffers = buffers;\n this.refresh(0, this.rows - 1);\n this.viewport.syncScrollArea();\n }\n\n\n /**\n * ESC H Tab Set (HTS is 0x88).\n */\n private tabSet(): void {\n this.buffer.tabs[this.buffer.x] = true;\n }\n\n // TODO: Remove cancel function and cancelEvents option\n public cancel(ev: Event, force?: boolean): boolean {\n if (!this.options.cancelEvents && !force) {\n return;\n }\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n // TODO: Remove when true color is implemented\n public matchColor(r1: number, g1: number, b1: number): number {\n return matchColor_(r1, g1, b1);\n }\n\n private visualBell(): boolean {\n return this.options.bellStyle === 'visual' ||\n this.options.bellStyle === 'both';\n }\n\n private soundBell(): boolean {\n return this.options.bellStyle === 'sound' ||\n this.options.bellStyle === 'both';\n }\n\n private syncBellSound(): void {\n if (this.soundBell() && this.bellAudioElement) {\n this.bellAudioElement.setAttribute('src', this.options.bellSound);\n } else if (this.soundBell()) {\n this.bellAudioElement = document.createElement('audio');\n this.bellAudioElement.setAttribute('preload', 'auto');\n this.bellAudioElement.setAttribute('src', this.options.bellSound);\n this.helperContainer.appendChild(this.bellAudioElement);\n } else if (this.bellAudioElement) {\n this.helperContainer.removeChild(this.bellAudioElement);\n }\n }\n}\n\n/**\n * Helpers\n */\n\nfunction globalOn(el: any, type: string, handler: (event: Event) => any, capture?: boolean): void {\n if (!Array.isArray(el)) {\n el = [el];\n }\n el.forEach((element: HTMLElement) => {\n element.addEventListener(type, handler, capture || false);\n });\n}\n// TODO: Remove once everything is typed\nconst on = globalOn;\n\nfunction off(el: any, type: string, handler: (event: Event) => any, capture: boolean = false): void {\n el.removeEventListener(type, handler, capture);\n}\n\nfunction isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): boolean {\n const thirdLevelKey =\n (browser.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n (browser.isMSWindows && ev.altKey && ev.ctrlKey && !ev.metaKey);\n\n if (ev.type === 'keypress') {\n return thirdLevelKey;\n }\n\n // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n}\n\nfunction wasMondifierKeyOnlyEvent(ev: KeyboardEvent): boolean {\n return ev.keyCode === 16 || // Shift\n ev.keyCode === 17 || // Ctrl\n ev.keyCode === 18; // Alt\n}\n\n/**\n * TODO:\n * The below color-related code can be removed when true color is implemented.\n * It's only purpose is to match true color requests with the closest matching\n * ANSI color code.\n */\n\n// Colors 0-15 + 16-255\n// Much thanks to TooTallNate for writing this.\nconst vcolors: number[][] = (function(): number[][] {\n const result = DEFAULT_ANSI_COLORS.map(c => {\n c = c.substring(1);\n return [\n parseInt(c.substring(0, 2), 16),\n parseInt(c.substring(2, 4), 16),\n parseInt(c.substring(4, 6), 16)\n ];\n });\n const r = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n\n // 16-231\n for (let i = 0; i < 216; i++) {\n result.push([\n r[(i / 36) % 6 | 0],\n r[(i / 6) % 6 | 0],\n r[i % 6]\n ]);\n }\n\n // 232-255 (grey)\n let c: number;\n for (let i = 0; i < 24; i++) {\n c = 8 + i * 10;\n result.push([c, c, c]);\n }\n\n return result;\n})();\n\nconst matchColorCache: {[colorRGBHash: number]: number} = {};\n\n// http://stackoverflow.com/questions/1633828\nfunction matchColorDistance(r1: number, g1: number, b1: number, r2: number, g2: number, b2: number): number {\n return Math.pow(30 * (r1 - r2), 2)\n + Math.pow(59 * (g1 - g2), 2)\n + Math.pow(11 * (b1 - b2), 2);\n};\n\n\nfunction matchColor_(r1: number, g1: number, b1: number): number {\n const hash = (r1 << 16) | (g1 << 8) | b1;\n\n if (matchColorCache[hash] != null) {\n return matchColorCache[hash];\n }\n\n let ldiff = Infinity;\n let li = -1;\n let i = 0;\n let c: number[];\n let r2: number;\n let g2: number;\n let b2: number;\n let diff: number;\n\n for (; i < vcolors.length; i++) {\n c = vcolors[i];\n r2 = c[0];\n g2 = c[1];\n b2 = c[2];\n\n diff = matchColorDistance(r1, g1, b1, r2, g2, b2);\n\n if (diff === 0) {\n li = i;\n break;\n }\n\n if (diff < ldiff) {\n ldiff = diff;\n li = i;\n }\n }\n\n return matchColorCache[hash] = li;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from './Interfaces';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n /**\n * Whether select all is currently active.\n */\n public isSelectAllActive: boolean;\n\n /**\n * The [x, y] position the selection starts at.\n */\n public selectionStart: [number, number];\n\n /**\n * The minimal length of the selection from the start position. When double\n * clicking on a word, the word will be selected which makes the selection\n * start at the start of the word and makes this variable the length.\n */\n public selectionStartLength: number;\n\n /**\n * The [x, y] position the selection ends at.\n */\n public selectionEnd: [number, number];\n\n constructor(\n private _terminal: ITerminal\n ) {\n this.clearSelection();\n }\n\n /**\n * Clears the current selection.\n */\n public clearSelection(): void {\n this.selectionStart = null;\n this.selectionEnd = null;\n this.isSelectAllActive = false;\n this.selectionStartLength = 0;\n }\n\n /**\n * The final selection start, taking into consideration select all.\n */\n public get finalSelectionStart(): [number, number] {\n if (this.isSelectAllActive) {\n return [0, 0];\n }\n\n if (!this.selectionEnd || !this.selectionStart) {\n return this.selectionStart;\n }\n\n return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n }\n\n /**\n * The final selection end, taking into consideration select all, double click\n * word selection and triple click line selection.\n */\n public get finalSelectionEnd(): [number, number] {\n if (this.isSelectAllActive) {\n return [this._terminal.cols, this._terminal.buffer.ybase + this._terminal.rows - 1];\n }\n\n if (!this.selectionStart) {\n return null;\n }\n\n // Use the selection start if the end doesn't exist or they're reversed\n if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n return [this.selectionStart[0] + this.selectionStartLength, this.selectionStart[1]];\n }\n\n // Ensure the the word/line is selected after a double/triple click\n if (this.selectionStartLength) {\n // Select the larger of the two when start and end are on the same line\n if (this.selectionEnd[1] === this.selectionStart[1]) {\n return [Math.max(this.selectionStart[0] + this.selectionStartLength, this.selectionEnd[0]), this.selectionEnd[1]];\n }\n }\n return this.selectionEnd;\n }\n\n /**\n * Returns whether the selection start and end are reversed.\n */\n public areSelectionValuesReversed(): boolean {\n const start = this.selectionStart;\n const end = this.selectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n * @return Whether a refresh is necessary.\n */\n public onTrim(amount: number): boolean {\n // Adjust the selection position based on the trimmed amount.\n if (this.selectionStart) {\n this.selectionStart[1] -= amount;\n }\n if (this.selectionEnd) {\n this.selectionEnd[1] -= amount;\n }\n\n // The selection has moved off the buffer, clear it.\n if (this.selectionEnd && this.selectionEnd[1] < 0) {\n this.clearSelection();\n return true;\n }\n\n // If the selection start is trimmed, ensure the start column is 0.\n if (this.selectionStart && this.selectionStart[1] < 0) {\n this.selectionStart[1] = 0;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { MouseHelper } from './utils/MouseHelper';\nimport * as Browser from './utils/Browser';\nimport { CharMeasure } from './utils/CharMeasure';\nimport { CircularList } from './utils/CircularList';\nimport { EventEmitter } from './EventEmitter';\nimport { ITerminal, ICircularList, ISelectionManager, IBuffer } from './Interfaces';\nimport { SelectionModel } from './SelectionModel';\nimport { LineData, CharData } from './Types';\nimport { CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from './Buffer';\n\n/**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\nconst DRAG_SCROLL_MAX_THRESHOLD = 50;\n\n/**\n * The maximum scrolling speed\n */\nconst DRAG_SCROLL_MAX_SPEED = 15;\n\n/**\n * The number of milliseconds between drag scroll updates.\n */\nconst DRAG_SCROLL_INTERVAL = 50;\n\n/**\n * A string containing all characters that are considered word separated by the\n * double click to select work logic.\n */\nconst WORD_SEPARATORS = ' ()[]{}\\'\"';\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n start: number;\n length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nenum SelectionMode {\n NORMAL,\n WORD,\n LINE\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionManager handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionManager but a 'refresh' event is fired when the\n * selection is ready to be redrawn.\n */\nexport class SelectionManager extends EventEmitter implements ISelectionManager {\n protected _model: SelectionModel;\n\n /**\n * The amount to scroll every drag scroll update (depends on how far the mouse\n * drag is above or below the terminal).\n */\n private _dragScrollAmount: number;\n\n /**\n * The current selection mode.\n */\n private _activeSelectionMode: SelectionMode;\n\n /**\n * A setInterval timer that is active while the mouse is down whose callback\n * scrolls the viewport when necessary.\n */\n private _dragScrollIntervalTimer: NodeJS.Timer;\n\n /**\n * The animation frame ID used for refreshing the selection.\n */\n private _refreshAnimationFrame: number;\n\n /**\n * Whether selection is enabled.\n */\n private _enabled = true;\n\n private _mouseMoveListener: EventListener;\n private _mouseUpListener: EventListener;\n\n constructor(\n private _terminal: ITerminal,\n private _buffer: IBuffer,\n private _charMeasure: CharMeasure\n ) {\n super();\n this._initListeners();\n this.enable();\n\n this._model = new SelectionModel(_terminal);\n this._activeSelectionMode = SelectionMode.NORMAL;\n }\n\n /**\n * Initializes listener variables.\n */\n private _initListeners(): void {\n this._mouseMoveListener = event => this._onMouseMove(event);\n this._mouseUpListener = event => this._onMouseUp(event);\n\n // Only adjust the selection on trim, shiftElements is rarely used (only in\n // reverseIndex) and delete in a splice is only ever used when the same\n // number of elements was just added. Given this is could actually be\n // beneficial to leave the selection as is for these cases.\n this._buffer.lines.on('trim', (amount: number) => this._onTrim(amount));\n }\n\n /**\n * Disables the selection manager. This is useful for when terminal mouse\n * are enabled.\n */\n public disable(): void {\n this.clearSelection();\n this._enabled = false;\n }\n\n /**\n * Enable the selection manager.\n */\n public enable(): void {\n this._enabled = true;\n }\n\n /**\n * Sets the active buffer, this should be called when the alt buffer is\n * switched in or out.\n * @param buffer The active buffer.\n */\n public setBuffer(buffer: IBuffer): void {\n this._buffer = buffer;\n this.clearSelection();\n }\n\n public get selectionStart(): [number, number] { return this._model.finalSelectionStart; }\n public get selectionEnd(): [number, number] { return this._model.finalSelectionEnd; }\n\n /**\n * Gets whether there is an active text selection.\n */\n public get hasSelection(): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[0] !== end[0] || start[1] !== end[1];\n }\n\n /**\n * Gets the text currently selected.\n */\n public get selectionText(): string {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return '';\n }\n\n // Get first row\n const startRowEndCol = start[1] === end[1] ? end[0] : null;\n let result: string[] = [];\n result.push(this._buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));\n\n // Get middle rows\n for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n const bufferLine = this._buffer.lines.get(i);\n const lineText = this._buffer.translateBufferLineToString(i, true);\n if ((bufferLine).isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Get final row\n if (start[1] !== end[1]) {\n const bufferLine = this._buffer.lines.get(end[1]);\n const lineText = this._buffer.translateBufferLineToString(end[1], true, 0, end[0]);\n if ((bufferLine).isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Format string by replacing non-breaking space chars with regular spaces\n // and joining the array into a multi-line string.\n const formattedResult = result.map(line => {\n return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n }).join(Browser.isMSWindows ? '\\r\\n' : '\\n');\n\n return formattedResult;\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this.refresh();\n }\n\n /**\n * Queues a refresh, redrawing the selection on the next opportunity.\n * @param isNewSelection Whether the selection should be registered as a new\n * selection on Linux.\n */\n public refresh(isNewSelection?: boolean): void {\n // Queue the refresh for the renderer\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = window.requestAnimationFrame(() => this._refresh());\n }\n\n // If the platform is Linux and the refresh call comes from a mouse event,\n // we need to update the selection for middle click to paste selection.\n if (Browser.isLinux && isNewSelection) {\n const selectionText = this.selectionText;\n if (selectionText.length) {\n this.emit('newselection', this.selectionText);\n }\n }\n }\n\n /**\n * Fires the refresh event, causing consumers to pick it up and redraw the\n * selection state.\n */\n private _refresh(): void {\n this._refreshAnimationFrame = null;\n this.emit('refresh', { start: this._model.finalSelectionStart, end: this._model.finalSelectionEnd });\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._model.isSelectAllActive = true;\n this.refresh();\n this.emit('selection');\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n */\n private _onTrim(amount: number): void {\n const needsRefresh = this._model.onTrim(amount);\n if (needsRefresh) {\n this.refresh();\n }\n }\n\n /**\n * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n * @param event The mouse event.\n */\n private _getMouseBufferCoords(event: MouseEvent): [number, number] {\n const coords = this._terminal.mouseHelper.getCoords(event, this._terminal.element, this._charMeasure, this._terminal.options.lineHeight, this._terminal.cols, this._terminal.rows, true);\n if (!coords) {\n return null;\n }\n\n // Convert to 0-based\n coords[0]--;\n coords[1]--;\n\n // Convert viewport coords to buffer coords\n coords[1] += this._terminal.buffer.ydisp;\n return coords;\n }\n\n /**\n * Gets the amount the viewport should be scrolled based on how far out of the\n * terminal the mouse is.\n * @param event The mouse event.\n */\n private _getMouseEventScrollAmount(event: MouseEvent): number {\n let offset = MouseHelper.getCoordsRelativeToElement(event, this._terminal.element)[1];\n const terminalHeight = this._terminal.rows * Math.ceil(this._charMeasure.height * this._terminal.options.lineHeight);\n if (offset >= 0 && offset <= terminalHeight) {\n return 0;\n }\n if (offset > terminalHeight) {\n offset -= terminalHeight;\n }\n\n offset = Math.min(Math.max(offset, -DRAG_SCROLL_MAX_THRESHOLD), DRAG_SCROLL_MAX_THRESHOLD);\n offset /= DRAG_SCROLL_MAX_THRESHOLD;\n return (offset / Math.abs(offset)) + Math.round(offset * (DRAG_SCROLL_MAX_SPEED - 1));\n }\n\n /**\n * Returns whether the selection manager should force selection, regardless of\n * whether the terminal is in mouse events mode.\n * @param event The mouse event.\n */\n public shouldForceSelection(event: MouseEvent): boolean {\n return Browser.isMac ? event.altKey : event.shiftKey;\n }\n\n /**\n * Handles te mousedown event, setting up for a new selection.\n * @param event The mousedown event.\n */\n public onMouseDown(event: MouseEvent): void {\n // If we have selection, we want the context menu on right click even if the\n // terminal is in mouse mode.\n if (event.button === 2 && this.hasSelection) {\n return;\n }\n\n // Only action the primary button\n if (event.button !== 0) {\n return;\n }\n\n // Allow selection when using a specific modifier key, even when disabled\n if (!this._enabled) {\n if (!this.shouldForceSelection(event)) {\n return;\n }\n\n // Don't send the mouse down event to the current process, we want to select\n event.stopPropagation();\n }\n\n // Tell the browser not to start a regular selection\n event.preventDefault();\n\n // Reset drag scroll state\n this._dragScrollAmount = 0;\n\n if (this._enabled && event.shiftKey) {\n this._onIncrementalClick(event);\n } else {\n if (event.detail === 1) {\n this._onSingleClick(event);\n } else if (event.detail === 2) {\n this._onDoubleClick(event);\n } else if (event.detail === 3) {\n this._onTripleClick(event);\n }\n }\n\n this._addMouseDownListeners();\n this.refresh(true);\n }\n\n /**\n * Adds listeners when mousedown is triggered.\n */\n private _addMouseDownListeners(): void {\n // Listen on the document so that dragging outside of viewport works\n this._terminal.element.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n this._terminal.element.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n this._dragScrollIntervalTimer = setInterval(() => this._dragScroll(), DRAG_SCROLL_INTERVAL);\n }\n\n /**\n * Removes the listeners that are registered when mousedown is triggered.\n */\n private _removeMouseDownListeners(): void {\n this._terminal.element.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n this._terminal.element.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n clearInterval(this._dragScrollIntervalTimer);\n this._dragScrollIntervalTimer = null;\n }\n\n /**\n * Performs an incremental click, setting the selection end position to the mouse\n * position.\n * @param event The mouse event.\n */\n private _onIncrementalClick(event: MouseEvent): void {\n if (this._model.selectionStart) {\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n }\n }\n\n /**\n * Performs a single click, resetting relevant state and setting the selection\n * start position.\n * @param event The mouse event.\n */\n private _onSingleClick(event: MouseEvent): void {\n this._model.selectionStartLength = 0;\n this._model.isSelectAllActive = false;\n this._activeSelectionMode = SelectionMode.NORMAL;\n\n // Initialize the new selection\n this._model.selectionStart = this._getMouseBufferCoords(event);\n if (!this._model.selectionStart) {\n return;\n }\n this._model.selectionEnd = null;\n\n // Ensure the line exists\n const line = this._buffer.lines.get(this._model.selectionStart[1]);\n if (!line) {\n return;\n }\n\n // Return early if the click event is not in the buffer (eg. in scroll bar)\n if (line.length >= this._model.selectionStart[0]) {\n return;\n }\n\n // If the mouse is over the second half of a wide character, adjust the\n // selection to cover the whole character\n const char = line[this._model.selectionStart[0]];\n if (char[CHAR_DATA_WIDTH_INDEX] === 0) {\n this._model.selectionStart[0]++;\n }\n }\n\n /**\n * Performs a double click, selecting the current work.\n * @param event The mouse event.\n */\n private _onDoubleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.WORD;\n this._selectWordAt(coords);\n }\n }\n\n /**\n * Performs a triple click, selecting the current line and activating line\n * select mode.\n * @param event The mouse event.\n */\n private _onTripleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.LINE;\n this._selectLineAt(coords[1]);\n }\n }\n\n /**\n * Handles the mousemove event when the mouse button is down, recording the\n * end of the selection and refreshing the selection.\n * @param event The mousemove event.\n */\n private _onMouseMove(event: MouseEvent): void {\n // If the mousemove listener is active it means that a selection is\n // currently being made, we should stop propogation to prevent mouse events\n // to be sent to the pty.\n event.stopImmediatePropagation();\n\n // Record the previous position so we know whether to redraw the selection\n // at the end.\n const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n // Set the initial selection end based on the mouse coordinates\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n if (!this._model.selectionEnd) {\n this.refresh(true);\n return;\n }\n\n // Select the entire line if line select mode is active.\n if (this._activeSelectionMode === SelectionMode.LINE) {\n if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n this._model.selectionEnd[0] = 0;\n } else {\n this._model.selectionEnd[0] = this._terminal.cols;\n }\n } else if (this._activeSelectionMode === SelectionMode.WORD) {\n this._selectToWordAt(this._model.selectionEnd);\n }\n\n // Determine the amount of scrolling that will happen.\n this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively.\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd[0] = this._terminal.cols;\n } else if (this._dragScrollAmount < 0) {\n this._model.selectionEnd[0] = 0;\n }\n\n // If the character is a wide character include the cell to the right in the\n // selection. Note that selections at the very end of the line will never\n // have a character.\n if (this._model.selectionEnd[1] < this._buffer.lines.length) {\n const char = this._buffer.lines.get(this._model.selectionEnd[1])[this._model.selectionEnd[0]];\n if (char && char[CHAR_DATA_WIDTH_INDEX] === 0) {\n this._model.selectionEnd[0]++;\n }\n }\n\n // Only draw here if the selection changes.\n if (!previousSelectionEnd ||\n previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n this.refresh(true);\n }\n }\n\n /**\n * The callback that occurs every DRAG_SCROLL_INTERVAL ms that does the\n * scrolling of the viewport.\n */\n private _dragScroll(): void {\n if (this._dragScrollAmount) {\n this._terminal.scrollLines(this._dragScrollAmount, false);\n // Re-evaluate selection\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd = [this._terminal.cols - 1, this._terminal.buffer.ydisp + this._terminal.rows];\n } else {\n this._model.selectionEnd = [0, this._terminal.buffer.ydisp];\n }\n this.refresh();\n }\n }\n\n /**\n * Handles the mouseup event, removing the mousedown listeners.\n * @param event The mouseup event.\n */\n private _onMouseUp(event: MouseEvent): void {\n this._removeMouseDownListeners();\n\n if (this.hasSelection)\n this.emit('selection');\n }\n\n /**\n * Converts a viewport column to the character index on the buffer line, the\n * latter takes into account wide characters.\n * @param coords The coordinates to find the 2 index for.\n */\n private _convertViewportColToCharacterIndex(bufferLine: any, coords: [number, number]): number {\n let charIndex = coords[0];\n for (let i = 0; coords[0] >= i; i++) {\n const char = bufferLine[i];\n if (char[CHAR_DATA_WIDTH_INDEX] === 0) {\n // Wide characters aren't included in the line string so decrement the\n // index so the index is back on the wide character.\n charIndex--;\n } else if (char[CHAR_DATA_CHAR_INDEX].length > 1 && coords[0] !== i) {\n // Emojis take up multiple characters, so adjust accordingly. For these\n // we don't want ot include the character at the column as we're\n // returning the start index in the string, not the end index.\n charIndex += char[CHAR_DATA_CHAR_INDEX].length - 1;\n }\n }\n return charIndex;\n }\n\n public setSelection(col: number, row: number, length: number): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this._model.selectionStart = [col, row];\n this._model.selectionStartLength = length;\n this.refresh();\n }\n\n /**\n * Gets positional information for the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _getWordAt(coords: [number, number]): IWordPosition {\n const bufferLine = this._buffer.lines.get(coords[1]);\n if (!bufferLine) {\n return null;\n }\n\n const line = this._buffer.translateBufferLineToString(coords[1], false);\n\n // Get actual index, taking into consideration wide characters\n let startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords);\n let endIndex = startIndex;\n\n // Record offset to be used later\n const charOffset = coords[0] - startIndex;\n let leftWideCharCount = 0;\n let rightWideCharCount = 0;\n let leftLongCharOffset = 0;\n let rightLongCharOffset = 0;\n\n if (line.charAt(startIndex) === ' ') {\n // Expand until non-whitespace is hit\n while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n startIndex--;\n }\n while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n endIndex++;\n }\n } else {\n // Expand until whitespace is hit. This algorithm works by scanning left\n // and right from the starting position, keeping both the index format\n // (line) and the column format (bufferLine) in sync. When a wide\n // character is hit, it is recorded and the column index is adjusted.\n let startCol = coords[0];\n let endCol = coords[0];\n\n // Consider the initial position, skip it and increment the wide char\n // variable\n if (bufferLine[startCol][CHAR_DATA_WIDTH_INDEX] === 0) {\n leftWideCharCount++;\n startCol--;\n }\n if (bufferLine[endCol][CHAR_DATA_WIDTH_INDEX] === 2) {\n rightWideCharCount++;\n endCol++;\n }\n\n // Adjust the end index for characters whose length are > 1 (emojis)\n if (bufferLine[endCol][CHAR_DATA_CHAR_INDEX].length > 1) {\n rightLongCharOffset += bufferLine[endCol][CHAR_DATA_CHAR_INDEX].length - 1;\n endIndex += bufferLine[endCol][CHAR_DATA_CHAR_INDEX].length - 1;\n }\n\n // Expand the string in both directions until a space is hit\n while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine[startCol - 1])) {\n const char = bufferLine[startCol - 1];\n if (char[CHAR_DATA_WIDTH_INDEX] === 0) {\n // If the next character is a wide char, record it and skip the column\n leftWideCharCount++;\n startCol--;\n } else if (char[CHAR_DATA_CHAR_INDEX].length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n leftLongCharOffset += char[CHAR_DATA_CHAR_INDEX].length - 1;\n startIndex -= char[CHAR_DATA_CHAR_INDEX].length - 1;\n }\n startIndex--;\n startCol--;\n }\n while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine[endCol + 1])) {\n const char = bufferLine[endCol + 1];\n if (char[CHAR_DATA_WIDTH_INDEX] === 2) {\n // If the next character is a wide char, record it and skip the column\n rightWideCharCount++;\n endCol++;\n } else if (char[CHAR_DATA_CHAR_INDEX].length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n rightLongCharOffset += char[CHAR_DATA_CHAR_INDEX].length - 1;\n endIndex += char[CHAR_DATA_CHAR_INDEX].length - 1;\n }\n endIndex++;\n endCol++;\n }\n }\n\n // Incremenet the end index so it is at the start of the next character\n endIndex++;\n\n // Calculate the start _column_, converting the the string indexes back to\n // column coordinates.\n const start =\n startIndex // The index of the selection's start char in the line string\n + charOffset // The difference between the initial char's column and index\n - leftWideCharCount // The number of wide chars left of the initial char\n + leftLongCharOffset; // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n\n // Calculate the length in _columns_, converting the the string indexes back\n // to column coordinates.\n const length = Math.min(this._terminal.cols, // Disallow lengths larger than the terminal cols\n endIndex // The index of the selection's end char in the line string\n - startIndex // The index of the selection's start char in the line string\n + leftWideCharCount // The number of wide chars left of the initial char\n + rightWideCharCount // The number of wide chars right of the initial char (inclusive)\n - leftLongCharOffset // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n - rightLongCharOffset); // The number of additional chars right of the initial char (inclusive) added by columns with strings longer than 1 (emojis)\n\n return { start, length };\n }\n\n /**\n * Selects the word at the coordinates specified.\n * @param coords The coordinates to get the word at.\n */\n protected _selectWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords);\n if (wordPosition) {\n this._model.selectionStart = [wordPosition.start, coords[1]];\n this._model.selectionStartLength = wordPosition.length;\n }\n }\n\n /**\n * Sets the selection end to the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _selectToWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords);\n if (wordPosition) {\n this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : (wordPosition.start + wordPosition.length), coords[1]];\n }\n }\n\n /**\n * Gets whether the character is considered a word separator by the select\n * word logic.\n * @param char The character to check.\n */\n private _isCharWordSeparator(charData: CharData): boolean {\n // Zero width characters are never separators as they are always to the\n // right of wide characters\n if (charData[CHAR_DATA_WIDTH_INDEX] === 0) {\n return false;\n }\n return WORD_SEPARATORS.indexOf(charData[CHAR_DATA_CHAR_INDEX]) >= 0;\n }\n\n /**\n * Selects the line specified.\n * @param line The line index.\n */\n protected _selectLineAt(line: number): void {\n this._model.selectionStart = [0, line];\n this._model.selectionStartLength = this._terminal.cols;\n }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { C0 } from './EscapeSequences';\nimport { IInputHandler } from './Interfaces';\nimport { CHARSETS, DEFAULT_CHARSET } from './Charsets';\n\nconst normalStateHandler: {[key: string]: (parser: Parser, handler: IInputHandler) => void} = {};\nnormalStateHandler[C0.BEL] = (parser, handler) => handler.bell();\nnormalStateHandler[C0.LF] = (parser, handler) => handler.lineFeed();\nnormalStateHandler[C0.VT] = normalStateHandler[C0.LF];\nnormalStateHandler[C0.FF] = normalStateHandler[C0.LF];\nnormalStateHandler[C0.CR] = (parser, handler) => handler.carriageReturn();\nnormalStateHandler[C0.BS] = (parser, handler) => handler.backspace();\nnormalStateHandler[C0.HT] = (parser, handler) => handler.tab();\nnormalStateHandler[C0.SO] = (parser, handler) => handler.shiftOut();\nnormalStateHandler[C0.SI] = (parser, handler) => handler.shiftIn();\nnormalStateHandler[C0.ESC] = (parser, handler) => parser.setState(ParserState.ESCAPED);\n\n// TODO: Remove terminal when parser owns params and currentParam\nconst escapedStateHandler: {[key: string]: (parser: Parser, terminal: any) => void} = {};\nescapedStateHandler['['] = (parser, terminal) => {\n // ESC [ Control Sequence Introducer (CSI is 0x9b)\n terminal.params = [];\n terminal.currentParam = 0;\n parser.setState(ParserState.CSI_PARAM);\n};\nescapedStateHandler[']'] = (parser, terminal) => {\n // ESC ] Operating System Command (OSC is 0x9d)\n terminal.params = [];\n terminal.currentParam = 0;\n parser.setState(ParserState.OSC);\n};\nescapedStateHandler['P'] = (parser, terminal) => {\n // ESC P Device Control String (DCS is 0x90)\n terminal.params = [];\n terminal.currentParam = 0;\n parser.setState(ParserState.DCS);\n};\nescapedStateHandler['_'] = (parser, terminal) => {\n // ESC _ Application Program Command ( APC is 0x9f).\n parser.setState(ParserState.IGNORE);\n};\nescapedStateHandler['^'] = (parser, terminal) => {\n // ESC ^ Privacy Message ( PM is 0x9e).\n parser.setState(ParserState.IGNORE);\n};\nescapedStateHandler['c'] = (parser, terminal) => {\n // ESC c Full Reset (RIS).\n terminal.reset();\n};\nescapedStateHandler['E'] = (parser, terminal) => {\n // ESC E Next Line ( NEL is 0x85).\n terminal.buffer.x = 0;\n terminal.index();\n parser.setState(ParserState.NORMAL);\n};\nescapedStateHandler['D'] = (parser, terminal) => {\n // ESC D Index ( IND is 0x84).\n terminal.index();\n parser.setState(ParserState.NORMAL);\n};\nescapedStateHandler['M'] = (parser, terminal) => {\n // ESC M Reverse Index ( RI is 0x8d).\n terminal.reverseIndex();\n parser.setState(ParserState.NORMAL);\n};\nescapedStateHandler['%'] = (parser, terminal) => {\n // ESC % Select default/utf-8 character set.\n // @ = default, G = utf-8\n terminal.setgLevel(0);\n terminal.setgCharset(0, DEFAULT_CHARSET); // US (default)\n parser.setState(ParserState.NORMAL);\n parser.skipNextChar();\n};\nescapedStateHandler[C0.CAN] = (parser) => parser.setState(ParserState.NORMAL);\n\nconst csiParamStateHandler: {[key: string]: (parser: Parser) => void} = {};\ncsiParamStateHandler['?'] = (parser) => parser.setPrefix('?');\ncsiParamStateHandler['>'] = (parser) => parser.setPrefix('>');\ncsiParamStateHandler['!'] = (parser) => parser.setPrefix('!');\ncsiParamStateHandler['0'] = (parser) => parser.setParam(parser.getParam() * 10);\ncsiParamStateHandler['1'] = (parser) => parser.setParam(parser.getParam() * 10 + 1);\ncsiParamStateHandler['2'] = (parser) => parser.setParam(parser.getParam() * 10 + 2);\ncsiParamStateHandler['3'] = (parser) => parser.setParam(parser.getParam() * 10 + 3);\ncsiParamStateHandler['4'] = (parser) => parser.setParam(parser.getParam() * 10 + 4);\ncsiParamStateHandler['5'] = (parser) => parser.setParam(parser.getParam() * 10 + 5);\ncsiParamStateHandler['6'] = (parser) => parser.setParam(parser.getParam() * 10 + 6);\ncsiParamStateHandler['7'] = (parser) => parser.setParam(parser.getParam() * 10 + 7);\ncsiParamStateHandler['8'] = (parser) => parser.setParam(parser.getParam() * 10 + 8);\ncsiParamStateHandler['9'] = (parser) => parser.setParam(parser.getParam() * 10 + 9);\ncsiParamStateHandler['$'] = (parser) => parser.setPostfix('$');\ncsiParamStateHandler['\"'] = (parser) => parser.setPostfix('\"');\ncsiParamStateHandler[' '] = (parser) => parser.setPostfix(' ');\ncsiParamStateHandler['\\''] = (parser) => parser.setPostfix('\\'');\ncsiParamStateHandler[';'] = (parser) => parser.finalizeParam();\ncsiParamStateHandler[C0.CAN] = (parser) => parser.setState(ParserState.NORMAL);\n\nconst csiStateHandler: {[key: string]: (handler: IInputHandler, params: number[], prefix: string, postfix: string, parser: Parser) => void} = {};\ncsiStateHandler['@'] = (handler, params, prefix) => handler.insertChars(params);\ncsiStateHandler['A'] = (handler, params, prefix) => handler.cursorUp(params);\ncsiStateHandler['B'] = (handler, params, prefix) => handler.cursorDown(params);\ncsiStateHandler['C'] = (handler, params, prefix) => handler.cursorForward(params);\ncsiStateHandler['D'] = (handler, params, prefix) => handler.cursorBackward(params);\ncsiStateHandler['E'] = (handler, params, prefix) => handler.cursorNextLine(params);\ncsiStateHandler['F'] = (handler, params, prefix) => handler.cursorPrecedingLine(params);\ncsiStateHandler['G'] = (handler, params, prefix) => handler.cursorCharAbsolute(params);\ncsiStateHandler['H'] = (handler, params, prefix) => handler.cursorPosition(params);\ncsiStateHandler['I'] = (handler, params, prefix) => handler.cursorForwardTab(params);\ncsiStateHandler['J'] = (handler, params, prefix) => handler.eraseInDisplay(params);\ncsiStateHandler['K'] = (handler, params, prefix) => handler.eraseInLine(params);\ncsiStateHandler['L'] = (handler, params, prefix) => handler.insertLines(params);\ncsiStateHandler['M'] = (handler, params, prefix) => handler.deleteLines(params);\ncsiStateHandler['P'] = (handler, params, prefix) => handler.deleteChars(params);\ncsiStateHandler['S'] = (handler, params, prefix) => handler.scrollUp(params);\ncsiStateHandler['T'] = (handler, params, prefix) => {\n if (params.length < 2 && !prefix) {\n handler.scrollDown(params);\n }\n};\ncsiStateHandler['X'] = (handler, params, prefix) => handler.eraseChars(params);\ncsiStateHandler['Z'] = (handler, params, prefix) => handler.cursorBackwardTab(params);\ncsiStateHandler['`'] = (handler, params, prefix) => handler.charPosAbsolute(params);\ncsiStateHandler['a'] = (handler, params, prefix) => handler.HPositionRelative(params);\ncsiStateHandler['b'] = (handler, params, prefix) => handler.repeatPrecedingCharacter(params);\ncsiStateHandler['c'] = (handler, params, prefix) => handler.sendDeviceAttributes(params);\ncsiStateHandler['d'] = (handler, params, prefix) => handler.linePosAbsolute(params);\ncsiStateHandler['e'] = (handler, params, prefix) => handler.VPositionRelative(params);\ncsiStateHandler['f'] = (handler, params, prefix) => handler.HVPosition(params);\ncsiStateHandler['g'] = (handler, params, prefix) => handler.tabClear(params);\ncsiStateHandler['h'] = (handler, params, prefix) => handler.setMode(params);\ncsiStateHandler['l'] = (handler, params, prefix) => handler.resetMode(params);\ncsiStateHandler['m'] = (handler, params, prefix) => handler.charAttributes(params);\ncsiStateHandler['n'] = (handler, params, prefix) => handler.deviceStatus(params);\ncsiStateHandler['p'] = (handler, params, prefix) => {\n switch (prefix) {\n case '!': handler.softReset(params); break;\n }\n};\ncsiStateHandler['q'] = (handler, params, prefix, postfix) => {\n if (postfix === ' ') {\n handler.setCursorStyle(params);\n }\n};\ncsiStateHandler['r'] = (handler, params) => handler.setScrollRegion(params);\ncsiStateHandler['s'] = (handler, params) => handler.saveCursor(params);\ncsiStateHandler['u'] = (handler, params) => handler.restoreCursor(params);\ncsiStateHandler[C0.CAN] = (handler, params, prefix, postfix, parser) => parser.setState(ParserState.NORMAL);\n\nexport enum ParserState {\n NORMAL = 0,\n ESCAPED = 1,\n CSI_PARAM = 2,\n CSI = 3,\n OSC = 4,\n CHARSET = 5,\n DCS = 6,\n IGNORE = 7\n}\n\n/**\n * The terminal's parser, all input into the terminal goes through the parser\n * which parses and defers the actual input handling the the IInputHandler\n * specified in the constructor.\n */\nexport class Parser {\n private _state: ParserState;\n private _position: number;\n\n // TODO: Remove terminal when handler can do everything\n constructor(\n private _inputHandler: IInputHandler,\n private _terminal: any\n ) {\n this._state = ParserState.NORMAL;\n }\n\n /**\n * Parse and handle data.\n *\n * @param data The data to parse.\n */\n public parse(data: string): ParserState {\n const l = data.length;\n let j;\n let cs;\n let ch;\n let code;\n let low;\n\n const cursorStartX = this._terminal.buffer.x;\n const cursorStartY = this._terminal.buffer.y;\n\n if (this._terminal.debug) {\n this._terminal.log('data: ' + data);\n }\n\n this._position = 0;\n // apply leftover surrogate high from last write\n if (this._terminal.surrogate_high) {\n data = this._terminal.surrogate_high + data;\n this._terminal.surrogate_high = '';\n }\n\n for (; this._position < l; this._position++) {\n ch = data[this._position];\n\n // FIXME: higher chars than 0xa0 are not allowed in escape sequences\n // --> maybe move to default\n code = data.charCodeAt(this._position);\n if (0xD800 <= code && code <= 0xDBFF) {\n // we got a surrogate high\n // get surrogate low (next 2 bytes)\n low = data.charCodeAt(this._position + 1);\n if (isNaN(low)) {\n // end of data stream, save surrogate high\n this._terminal.surrogate_high = ch;\n continue;\n }\n code = ((code - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;\n ch += data.charAt(this._position + 1);\n }\n // surrogate low - already handled above\n if (0xDC00 <= code && code <= 0xDFFF)\n continue;\n\n switch (this._state) {\n case ParserState.NORMAL:\n if (ch in normalStateHandler) {\n normalStateHandler[ch](this, this._inputHandler);\n } else {\n this._inputHandler.addChar(ch, code);\n }\n break;\n case ParserState.ESCAPED:\n if (ch in escapedStateHandler) {\n escapedStateHandler[ch](this, this._terminal);\n // Skip switch as it was just handled\n break;\n }\n switch (ch) {\n\n // ESC (,),*,+,-,. Designate G0-G2 Character Set.\n case '(': // <-- this seems to get all the attention\n case ')':\n case '*':\n case '+':\n case '-':\n case '.':\n switch (ch) {\n case '(':\n this._terminal.gcharset = 0;\n break;\n case ')':\n this._terminal.gcharset = 1;\n break;\n case '*':\n this._terminal.gcharset = 2;\n break;\n case '+':\n this._terminal.gcharset = 3;\n break;\n case '-':\n this._terminal.gcharset = 1;\n break;\n case '.':\n this._terminal.gcharset = 2;\n break;\n }\n this._state = ParserState.CHARSET;\n break;\n\n // Designate G3 Character Set (VT300).\n // A = ISO Latin-1 Supplemental.\n // Not implemented.\n case '/':\n this._terminal.gcharset = 3;\n this._state = ParserState.CHARSET;\n this._position--;\n break;\n\n // ESC N\n // Single Shift Select of G2 Character Set\n // ( SS2 is 0x8e). This affects next character only.\n case 'N':\n break;\n // ESC O\n // Single Shift Select of G3 Character Set\n // ( SS3 is 0x8f). This affects next character only.\n case 'O':\n break;\n // ESC n\n // Invoke the G2 Character Set as GL (LS2).\n case 'n':\n this._terminal.setgLevel(2);\n break;\n // ESC o\n // Invoke the G3 Character Set as GL (LS3).\n case 'o':\n this._terminal.setgLevel(3);\n break;\n // ESC |\n // Invoke the G3 Character Set as GR (LS3R).\n case '|':\n this._terminal.setgLevel(3);\n break;\n // ESC }\n // Invoke the G2 Character Set as GR (LS2R).\n case '}':\n this._terminal.setgLevel(2);\n break;\n // ESC ~\n // Invoke the G1 Character Set as GR (LS1R).\n case '~':\n this._terminal.setgLevel(1);\n break;\n\n // ESC 7 Save Cursor (DECSC).\n case '7':\n this._inputHandler.saveCursor();\n this._state = ParserState.NORMAL;\n break;\n\n // ESC 8 Restore Cursor (DECRC).\n case '8':\n this._inputHandler.restoreCursor();\n this._state = ParserState.NORMAL;\n break;\n\n // ESC # 3 DEC line height/width\n case '#':\n this._state = ParserState.NORMAL;\n this._position++;\n break;\n\n // ESC H Tab Set (HTS is 0x88).\n case 'H':\n this._terminal.tabSet();\n this._state = ParserState.NORMAL;\n break;\n\n // ESC = Application Keypad (DECKPAM).\n case '=':\n this._terminal.log('Serial port requested application keypad.');\n this._terminal.applicationKeypad = true;\n if (this._terminal.viewport) {\n this._terminal.viewport.syncScrollArea();\n }\n this._state = ParserState.NORMAL;\n break;\n\n // ESC > Normal Keypad (DECKPNM).\n case '>':\n this._terminal.log('Switching back to normal keypad.');\n this._terminal.applicationKeypad = false;\n if (this._terminal.viewport) {\n this._terminal.viewport.syncScrollArea();\n }\n this._state = ParserState.NORMAL;\n break;\n\n default:\n this._state = ParserState.NORMAL;\n this._terminal.error('Unknown ESC control: %s.', ch);\n break;\n }\n break;\n\n case ParserState.CHARSET:\n if (ch in CHARSETS) {\n cs = CHARSETS[ch];\n if (ch === '/') { // ISOLatin is actually /A\n this.skipNextChar();\n }\n } else {\n cs = DEFAULT_CHARSET;\n }\n this._terminal.setgCharset(this._terminal.gcharset, cs);\n this._terminal.gcharset = null;\n this._state = ParserState.NORMAL;\n break;\n\n case ParserState.OSC:\n // OSC Ps ; Pt ST\n // OSC Ps ; Pt BEL\n // Set Text Parameters.\n if (ch === C0.ESC || ch === C0.BEL) {\n if (ch === C0.ESC) this._position++;\n\n this._terminal.params.push(this._terminal.currentParam);\n\n switch (this._terminal.params[0]) {\n case 0:\n case 1:\n case 2:\n if (this._terminal.params[1]) {\n this._terminal.title = this._terminal.params[1];\n this._terminal.handleTitle(this._terminal.title);\n }\n break;\n case 3:\n // set X property\n break;\n case 4:\n case 5:\n // change dynamic colors\n break;\n case 10:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n case 16:\n case 17:\n case 18:\n case 19:\n // change dynamic ui colors\n break;\n case 46:\n // change log file\n break;\n case 50:\n // dynamic font\n break;\n case 51:\n // emacs shell\n break;\n case 52:\n // manipulate selection data\n break;\n case 104:\n case 105:\n case 110:\n case 111:\n case 112:\n case 113:\n case 114:\n case 115:\n case 116:\n case 117:\n case 118:\n // reset colors\n break;\n }\n\n this._terminal.params = [];\n this._terminal.currentParam = 0;\n this._state = ParserState.NORMAL;\n } else {\n if (!this._terminal.params.length) {\n if (ch >= '0' && ch <= '9') {\n this._terminal.currentParam =\n this._terminal.currentParam * 10 + ch.charCodeAt(0) - 48;\n } else if (ch === ';') {\n this._terminal.params.push(this._terminal.currentParam);\n this._terminal.currentParam = '';\n }\n } else {\n this._terminal.currentParam += ch;\n }\n }\n break;\n\n case ParserState.CSI_PARAM:\n if (ch in csiParamStateHandler) {\n csiParamStateHandler[ch](this);\n break;\n }\n this.finalizeParam();\n // Fall through the CSI as this character should be the CSI code.\n this._state = ParserState.CSI;\n\n case ParserState.CSI:\n if (ch in csiStateHandler) {\n if (this._terminal.debug) {\n this._terminal.log(`CSI ${this._terminal.prefix ? this._terminal.prefix : ''} ${this._terminal.params ? this._terminal.params.join(';') : ''} ${this._terminal.postfix ? this._terminal.postfix : ''} ${ch}`);\n }\n csiStateHandler[ch](this._inputHandler, this._terminal.params, this._terminal.prefix, this._terminal.postfix, this);\n } else {\n this._terminal.error('Unknown CSI code: %s.', ch);\n }\n\n this._state = ParserState.NORMAL;\n this._terminal.prefix = '';\n this._terminal.postfix = '';\n break;\n\n case ParserState.DCS:\n if (ch === C0.ESC || ch === C0.BEL) {\n if (ch === C0.ESC) this._position++;\n let pt;\n let valid: boolean;\n\n switch (this._terminal.prefix) {\n // User-Defined Keys (DECUDK).\n case '':\n break;\n\n // Request Status String (DECRQSS).\n // test: echo -e '\\eP$q\"p\\e\\\\'\n case '$q':\n pt = this._terminal.currentParam;\n valid = false;\n\n switch (pt) {\n // DECSCA\n case '\"q':\n pt = '0\"q';\n break;\n\n // DECSCL\n case '\"p':\n pt = '61\"p';\n break;\n\n // DECSTBM\n case 'r':\n pt = ''\n + (this._terminal.buffer.scrollTop + 1)\n + ';'\n + (this._terminal.buffer.scrollBottom + 1)\n + 'r';\n break;\n\n // SGR\n case 'm':\n pt = '0m';\n break;\n\n default:\n this._terminal.error('Unknown DCS Pt: %s.', pt);\n pt = '';\n break;\n }\n\n this._terminal.send(C0.ESC + 'P' + +valid + '$r' + pt + C0.ESC + '\\\\');\n break;\n\n // Set Termcap/Terminfo Data (xterm, experimental).\n case '+p':\n break;\n\n // Request Termcap/Terminfo String (xterm, experimental)\n // Regular xterm does not even respond to this sequence.\n // This can cause a small glitch in vim.\n // test: echo -ne '\\eP+q6b64\\e\\\\'\n case '+q':\n pt = this._terminal.currentParam;\n valid = false;\n\n this._terminal.send(C0.ESC + 'P' + +valid + '+r' + pt + C0.ESC + '\\\\');\n break;\n\n default:\n this._terminal.error('Unknown DCS prefix: %s.', this._terminal.prefix);\n break;\n }\n\n this._terminal.currentParam = 0;\n this._terminal.prefix = '';\n this._state = ParserState.NORMAL;\n } else if (!this._terminal.currentParam) {\n if (!this._terminal.prefix && ch !== '$' && ch !== '+') {\n this._terminal.currentParam = ch;\n } else if (this._terminal.prefix.length === 2) {\n this._terminal.currentParam = ch;\n } else {\n this._terminal.prefix += ch;\n }\n } else {\n this._terminal.currentParam += ch;\n }\n break;\n\n case ParserState.IGNORE:\n // For PM and APC.\n if (ch === C0.ESC || ch === C0.BEL) {\n if (ch === C0.ESC) this._position++;\n this._state = ParserState.NORMAL;\n }\n break;\n }\n }\n\n // Fire the cursormove event if it's moved. This is done inside the parser\n // as a render cannot happen in the middle of a parsing round.\n if (this._terminal.buffer.x !== cursorStartX || this._terminal.buffer.y !== cursorStartY) {\n this._terminal.emit('cursormove');\n }\n\n return this._state;\n }\n\n /**\n * Set the parser's current parsing state.\n *\n * @param state The new state.\n */\n public setState(state: ParserState): void {\n this._state = state;\n }\n\n /**\n * Sets the parsier's current prefix. CSI codes can have prefixes of '?', '>'\n * or '!'.\n *\n * @param prefix The prefix.\n */\n public setPrefix(prefix: string): void {\n this._terminal.prefix = prefix;\n }\n\n /**\n * Sets the parsier's current prefix. CSI codes can have postfixes of '$',\n * '\"', ' ', '\\''.\n *\n * @param postfix The postfix.\n */\n public setPostfix(postfix: string): void {\n this._terminal.postfix = postfix;\n }\n\n /**\n * Sets the parser's current parameter.\n *\n * @param param the parameter.\n */\n public setParam(param: number): void {\n this._terminal.currentParam = param;\n }\n\n /**\n * Gets the parser's current parameter.\n */\n public getParam(): number {\n return this._terminal.currentParam;\n }\n\n /**\n * Finalizes the parser's current parameter, adding it to the list of\n * parameters and setting the new current parameter to 0.\n */\n public finalizeParam(): void {\n this._terminal.params.push(this._terminal.currentParam);\n this._terminal.currentParam = 0;\n }\n\n /**\n * Tell the parser to skip the next character.\n */\n public skipNextChar(): void {\n this._position++;\n }\n\n /**\n * Tell the parser to repeat parsing the current character (for example if it\n * needs parsing using a different state.\n */\n // public repeatChar(): void {\n // this._position--;\n // }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ILinkMatcherOptions, ITerminal, IBufferAccessor, ILinkifier, IElementAccessor } from './Interfaces';\nimport { LinkMatcher, LinkMatcherHandler, LinkMatcherValidationCallback, LineData, LinkHoverEvent, LinkHoverEventTypes } from './Types';\nimport { IMouseZoneManager } from './input/Interfaces';\nimport { MouseZone } from './input/MouseZoneManager';\nimport { EventEmitter } from './EventEmitter';\n\nconst protocolClause = '(https?:\\\\/\\\\/)';\nconst domainCharacterSet = '[\\\\da-z\\\\.-]+';\nconst negatedDomainCharacterSet = '[^\\\\da-z\\\\.-]+';\nconst domainBodyClause = '(' + domainCharacterSet + ')';\nconst tldClause = '([a-z\\\\.]{2,6})';\nconst ipClause = '((\\\\d{1,3}\\\\.){3}\\\\d{1,3})';\nconst localHostClause = '(localhost)';\nconst portClause = '(:\\\\d{1,5})';\nconst hostClause = '((' + domainBodyClause + '\\\\.' + tldClause + ')|' + ipClause + '|' + localHostClause + ')' + portClause + '?';\nconst pathClause = '(\\\\/[\\\\/\\\\w\\\\.\\\\-%~]*)*';\nconst queryStringHashFragmentCharacterSet = '[0-9\\\\w\\\\[\\\\]\\\\(\\\\)\\\\/\\\\?\\\\!#@$%&\\'*+,:;~\\\\=\\\\.\\\\-]*';\nconst queryStringClause = '(\\\\?' + queryStringHashFragmentCharacterSet + ')?';\nconst hashFragmentClause = '(#' + queryStringHashFragmentCharacterSet + ')?';\nconst negatedPathCharacterSet = '[^\\\\/\\\\w\\\\.\\\\-%]+';\nconst bodyClause = hostClause + pathClause + queryStringClause + hashFragmentClause;\nconst start = '(?:^|' + negatedDomainCharacterSet + ')(';\nconst end = ')($|' + negatedPathCharacterSet + ')';\nconst strictUrlRegex = new RegExp(start + protocolClause + bodyClause + end);\n\n/**\n * The ID of the built in http(s) link matcher.\n */\nconst HYPERTEXT_LINK_MATCHER_ID = 0;\n\n/**\n * The Linkifier applies links to rows shortly after they have been refreshed.\n */\nexport class Linkifier extends EventEmitter implements ILinkifier {\n /**\n * The time to wait after a row is changed before it is linkified. This prevents\n * the costly operation of searching every row multiple times, potentially a\n * huge amount of times.\n */\n protected static TIME_BEFORE_LINKIFY = 200;\n\n protected _linkMatchers: LinkMatcher[] = [];\n\n private _mouseZoneManager: IMouseZoneManager;\n private _rowsTimeoutId: number;\n private _nextLinkMatcherId = HYPERTEXT_LINK_MATCHER_ID;\n private _rowsToLinkify: {start: number, end: number};\n\n constructor(\n protected _terminal: IBufferAccessor & IElementAccessor\n ) {\n super();\n this._rowsToLinkify = {\n start: null,\n end: null\n };\n this.registerLinkMatcher(strictUrlRegex, null, { matchIndex: 1 });\n }\n\n /**\n * Attaches the linkifier to the DOM, enabling linkification.\n * @param mouseZoneManager The mouse zone manager to register link zones with.\n */\n public attachToDom(mouseZoneManager: IMouseZoneManager): void {\n this._mouseZoneManager = mouseZoneManager;\n }\n\n /**\n * Queue linkification on a set of rows.\n * @param start The row to linkify from (inclusive).\n * @param end The row to linkify to (inclusive).\n */\n public linkifyRows(start: number, end: number): void {\n // Don't attempt linkify if not yet attached to DOM\n if (!this._mouseZoneManager) {\n return;\n }\n\n // Increase range to linkify\n if (!this._rowsToLinkify.start) {\n this._rowsToLinkify.start = start;\n this._rowsToLinkify.end = end;\n } else {\n this._rowsToLinkify.start = this._rowsToLinkify.start < start ? this._rowsToLinkify.start : start;\n this._rowsToLinkify.end = this._rowsToLinkify.end > end ? this._rowsToLinkify.end : end;\n }\n\n // Clear out any existing links on this row range\n this._mouseZoneManager.clearAll(start, end);\n\n // Restart timer\n if (this._rowsTimeoutId) {\n clearTimeout(this._rowsTimeoutId);\n }\n this._rowsTimeoutId = setTimeout(() => this._linkifyRows(), Linkifier.TIME_BEFORE_LINKIFY);\n }\n\n /**\n * Linkifies the rows requested.\n */\n private _linkifyRows(): void {\n this._rowsTimeoutId = null;\n for (let i = this._rowsToLinkify.start; i <= this._rowsToLinkify.end; i++) {\n this._linkifyRow(i);\n }\n this._rowsToLinkify.start = null;\n this._rowsToLinkify.end = null;\n }\n\n /**\n * Attaches a handler for hypertext links, overriding default behavior for\n * tandard http(s) links.\n * @param handler The handler to use, this can be cleared with null.\n */\n public setHypertextLinkHandler(handler: LinkMatcherHandler): void {\n this._linkMatchers[HYPERTEXT_LINK_MATCHER_ID].handler = handler;\n }\n\n /**\n * Attaches a validation callback for hypertext links.\n * @param callback The callback to use, this can be cleared with null.\n */\n public setHypertextValidationCallback(callback: LinkMatcherValidationCallback): void {\n this._linkMatchers[HYPERTEXT_LINK_MATCHER_ID].validationCallback = callback;\n }\n\n /**\n * Registers a link matcher, allowing custom link patterns to be matched and\n * handled.\n * @param regex The regular expression to search for. Specifically, this\n * searches the textContent of the rows. You will want to use \\s to match a\n * space ' ' character for example.\n * @param handler The callback when the link is called.\n * @param options Options for the link matcher.\n * @return The ID of the new matcher, this can be used to deregister.\n */\n public registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options: ILinkMatcherOptions = {}): number {\n if (this._nextLinkMatcherId !== HYPERTEXT_LINK_MATCHER_ID && !handler) {\n throw new Error('handler must be defined');\n }\n const matcher: LinkMatcher = {\n id: this._nextLinkMatcherId++,\n regex,\n handler,\n matchIndex: options.matchIndex,\n validationCallback: options.validationCallback,\n hoverTooltipCallback: options.tooltipCallback,\n hoverLeaveCallback: options.leaveCallback,\n priority: options.priority || 0\n };\n this._addLinkMatcherToList(matcher);\n return matcher.id;\n }\n\n /**\n * Inserts a link matcher to the list in the correct position based on the\n * priority of each link matcher. New link matchers of equal priority are\n * considered after older link matchers.\n * @param matcher The link matcher to be added.\n */\n private _addLinkMatcherToList(matcher: LinkMatcher): void {\n if (this._linkMatchers.length === 0) {\n this._linkMatchers.push(matcher);\n return;\n }\n\n for (let i = this._linkMatchers.length - 1; i >= 0; i--) {\n if (matcher.priority <= this._linkMatchers[i].priority) {\n this._linkMatchers.splice(i + 1, 0, matcher);\n return;\n }\n }\n\n this._linkMatchers.splice(0, 0, matcher);\n }\n\n /**\n * Deregisters a link matcher if it has been registered.\n * @param matcherId The link matcher's ID (returned after register)\n * @return Whether a link matcher was found and deregistered.\n */\n public deregisterLinkMatcher(matcherId: number): boolean {\n // ID 0 is the hypertext link matcher which cannot be deregistered\n for (let i = 1; i < this._linkMatchers.length; i++) {\n if (this._linkMatchers[i].id === matcherId) {\n this._linkMatchers.splice(i, 1);\n return true;\n }\n }\n return false;\n }\n\n /**\n * Linkifies a row.\n * @param rowIndex The index of the row to linkify.\n */\n private _linkifyRow(rowIndex: number): void {\n const absoluteRowIndex = this._terminal.buffer.ydisp + rowIndex;\n if (absoluteRowIndex >= this._terminal.buffer.lines.length) {\n return;\n }\n const text = this._terminal.buffer.translateBufferLineToString(absoluteRowIndex, false);\n for (let i = 0; i < this._linkMatchers.length; i++) {\n this._doLinkifyRow(rowIndex, text, this._linkMatchers[i]);\n }\n }\n\n /**\n * Linkifies a row given a specific handler.\n * @param rowIndex The row index to linkify.\n * @param text The text of the row (excludes text in the row that's already\n * linkified).\n * @param matcher The link matcher for this line.\n * @param offset The how much of the row has already been linkified.\n * @return The link element(s) that were added.\n */\n private _doLinkifyRow(rowIndex: number, text: string, matcher: LinkMatcher, offset: number = 0): void {\n // Iterate over nodes as we want to consider text nodes\n let result = [];\n const isHttpLinkMatcher = matcher.id === HYPERTEXT_LINK_MATCHER_ID;\n\n // Find the first match\n let match = text.match(matcher.regex);\n if (!match || match.length === 0) {\n return;\n }\n let uri = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex];\n\n // Get index, match.index is for the outer match which includes negated chars\n const index = text.indexOf(uri);\n\n // Ensure the link is valid before registering\n if (matcher.validationCallback) {\n matcher.validationCallback(uri, isValid => {\n // Discard link if the line has already changed\n if (this._rowsTimeoutId) {\n return;\n }\n if (isValid) {\n this._addLink(offset + index, rowIndex, uri, matcher);\n }\n });\n } else {\n this._addLink(offset + index, rowIndex, uri, matcher);\n }\n\n // Recursively check for links in the rest of the text\n const remainingStartIndex = index + uri.length;\n const remainingText = text.substr(remainingStartIndex);\n if (remainingText.length > 0) {\n this._doLinkifyRow(rowIndex, remainingText, matcher, offset + remainingStartIndex);\n }\n }\n\n /**\n * Registers a link to the mouse zone manager.\n * @param x The column the link starts.\n * @param y The row the link is on.\n * @param uri The URI of the link.\n * @param matcher The link matcher for the link.\n */\n private _addLink(x: number, y: number, uri: string, matcher: LinkMatcher): void {\n this._mouseZoneManager.add(new MouseZone(\n x + 1,\n x + 1 + uri.length,\n y + 1,\n e => {\n if (matcher.handler) {\n return matcher.handler(e, uri);\n }\n window.open(uri, '_blank');\n },\n e => {\n this.emit(LinkHoverEventTypes.HOVER, { x, y, length: uri.length});\n this._terminal.element.style.cursor = 'pointer';\n },\n e => {\n this.emit(LinkHoverEventTypes.TOOLTIP, { x, y, length: uri.length});\n if (matcher.hoverTooltipCallback) {\n matcher.hoverTooltipCallback(e, uri);\n }\n },\n () => {\n this.emit(LinkHoverEventTypes.LEAVE, { x, y, length: uri.length});\n this._terminal.element.style.cursor = '';\n if (matcher.hoverLeaveCallback) {\n matcher.hoverLeaveCallback();\n }\n }\n ));\n }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, ITerminal, IInputHandlingTerminal } from './Interfaces';\nimport { C0 } from './EscapeSequences';\nimport { DEFAULT_CHARSET } from './Charsets';\nimport { CharData } from './Types';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX } from './Buffer';\nimport { FLAGS } from './renderer/Types';\nimport { wcwidth } from './CharWidth';\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler implements IInputHandler {\n constructor(private _terminal: IInputHandlingTerminal) { }\n\n public addChar(char: string, code: number): void {\n if (char >= ' ') {\n // calculate print space\n // expensive call, therefore we save width in line buffer\n const ch_width = wcwidth(code);\n\n if (this._terminal.charset && this._terminal.charset[char]) {\n char = this._terminal.charset[char];\n }\n\n let row = this._terminal.buffer.y + this._terminal.buffer.ybase;\n\n // insert combining char in last cell\n // FIXME: needs handling after cursor jumps\n if (!ch_width && this._terminal.buffer.x) {\n // dont overflow left\n if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1]) {\n if (!this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][CHAR_DATA_WIDTH_INDEX]) {\n // found empty cell after fullwidth, need to go 2 cells back\n if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2]) {\n this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2][CHAR_DATA_CHAR_INDEX] += char;\n this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2][3] = char.charCodeAt(0);\n }\n } else {\n this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][CHAR_DATA_CHAR_INDEX] += char;\n this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][3] = char.charCodeAt(0);\n }\n this._terminal.updateRange(this._terminal.buffer.y);\n }\n return;\n }\n\n // goto next line if ch would overflow\n // TODO: needs a global min terminal width of 2\n if (this._terminal.buffer.x + ch_width - 1 >= this._terminal.cols) {\n // autowrap - DECAWM\n if (this._terminal.wraparoundMode) {\n this._terminal.buffer.x = 0;\n this._terminal.buffer.y++;\n if (this._terminal.buffer.y > this._terminal.buffer.scrollBottom) {\n this._terminal.buffer.y--;\n this._terminal.scroll(true);\n } else {\n // The line already exists (eg. the initial viewport), mark it as a\n // wrapped line\n (this._terminal.buffer.lines.get(this._terminal.buffer.y)).isWrapped = true;\n }\n } else {\n if (ch_width === 2) // FIXME: check for xterm behavior\n return;\n }\n }\n row = this._terminal.buffer.y + this._terminal.buffer.ybase;\n\n // insert mode: move characters to right\n if (this._terminal.insertMode) {\n // do this twice for a fullwidth char\n for (let moves = 0; moves < ch_width; ++moves) {\n // remove last cell, if it's width is 0\n // we have to adjust the second last cell as well\n const removed = this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).pop();\n if (removed[CHAR_DATA_WIDTH_INDEX] === 0\n && this._terminal.buffer.lines.get(row)[this._terminal.cols - 2]\n && this._terminal.buffer.lines.get(row)[this._terminal.cols - 2][CHAR_DATA_WIDTH_INDEX] === 2) {\n this._terminal.buffer.lines.get(row)[this._terminal.cols - 2] = [this._terminal.curAttr, ' ', 1, ' '.charCodeAt(0)];\n }\n\n // insert empty cell at cursor\n this._terminal.buffer.lines.get(row).splice(this._terminal.buffer.x, 0, [this._terminal.curAttr, ' ', 1, ' '.charCodeAt(0)]);\n }\n }\n\n this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, char, ch_width, char.charCodeAt(0)];\n this._terminal.buffer.x++;\n this._terminal.updateRange(this._terminal.buffer.y);\n\n // fullwidth char - set next cell width to zero and advance cursor\n if (ch_width === 2) {\n this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, '', 0, undefined];\n this._terminal.buffer.x++;\n }\n }\n }\n\n /**\n * BEL\n * Bell (Ctrl-G).\n */\n public bell(): void {\n this._terminal.bell();\n }\n\n /**\n * LF\n * Line Feed or New Line (NL). (LF is Ctrl-J).\n */\n public lineFeed(): void {\n if (this._terminal.convertEol) {\n this._terminal.buffer.x = 0;\n }\n this._terminal.buffer.y++;\n if (this._terminal.buffer.y > this._terminal.buffer.scrollBottom) {\n this._terminal.buffer.y--;\n this._terminal.scroll();\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x--;\n }\n /**\n * This event is emitted whenever the terminal outputs a LF or NL.\n *\n * @event lineFeed\n */\n this._terminal.emit('lineFeed');\n }\n\n /**\n * CR\n * Carriage Return (Ctrl-M).\n */\n public carriageReturn(): void {\n this._terminal.buffer.x = 0;\n }\n\n /**\n * BS\n * Backspace (Ctrl-H).\n */\n public backspace(): void {\n if (this._terminal.buffer.x > 0) {\n this._terminal.buffer.x--;\n }\n }\n\n /**\n * TAB\n * Horizontal Tab (HT) (Ctrl-I).\n */\n public tab(): void {\n this._terminal.buffer.x = this._terminal.buffer.nextStop();\n }\n\n /**\n * SO\n * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the\n * G1 character set.\n */\n public shiftOut(): void {\n this._terminal.setgLevel(1);\n }\n\n /**\n * SI\n * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0\n * character set (the default).\n */\n public shiftIn(): void {\n this._terminal.setgLevel(0);\n }\n\n /**\n * CSI Ps @\n * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n */\n public insertChars(params: number[]): void {\n let param = params[0];\n if (param < 1) param = 1;\n\n const row = this._terminal.buffer.y + this._terminal.buffer.ybase;\n let j = this._terminal.buffer.x;\n const ch: CharData = [this._terminal.eraseAttr(), ' ', 1, 32]; // xterm\n\n while (param-- && j < this._terminal.cols) {\n this._terminal.buffer.lines.get(row).splice(j++, 0, ch);\n this._terminal.buffer.lines.get(row).pop();\n }\n }\n\n /**\n * CSI Ps A\n * Cursor Up Ps Times (default = 1) (CUU).\n */\n public cursorUp(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.y -= param;\n if (this._terminal.buffer.y < 0) {\n this._terminal.buffer.y = 0;\n }\n }\n\n /**\n * CSI Ps B\n * Cursor Down Ps Times (default = 1) (CUD).\n */\n public cursorDown(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.y += param;\n if (this._terminal.buffer.y >= this._terminal.rows) {\n this._terminal.buffer.y = this._terminal.rows - 1;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x--;\n }\n }\n\n /**\n * CSI Ps C\n * Cursor Forward Ps Times (default = 1) (CUF).\n */\n public cursorForward(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.x += param;\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x = this._terminal.cols - 1;\n }\n }\n\n /**\n * CSI Ps D\n * Cursor Backward Ps Times (default = 1) (CUB).\n */\n public cursorBackward(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x--;\n }\n this._terminal.buffer.x -= param;\n if (this._terminal.buffer.x < 0) {\n this._terminal.buffer.x = 0;\n }\n }\n\n /**\n * CSI Ps E\n * Cursor Next Line Ps Times (default = 1) (CNL).\n * same as CSI Ps B ?\n */\n public cursorNextLine(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.y += param;\n if (this._terminal.buffer.y >= this._terminal.rows) {\n this._terminal.buffer.y = this._terminal.rows - 1;\n }\n this._terminal.buffer.x = 0;\n }\n\n\n /**\n * CSI Ps F\n * Cursor Preceding Line Ps Times (default = 1) (CNL).\n * reuse CSI Ps A ?\n */\n public cursorPrecedingLine(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.y -= param;\n if (this._terminal.buffer.y < 0) {\n this._terminal.buffer.y = 0;\n }\n this._terminal.buffer.x = 0;\n }\n\n\n /**\n * CSI Ps G\n * Cursor Character Absolute [column] (default = [row,1]) (CHA).\n */\n public cursorCharAbsolute(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.x = param - 1;\n }\n\n /**\n * CSI Ps ; Ps H\n * Cursor Position [row;column] (default = [1,1]) (CUP).\n */\n public cursorPosition(params: number[]): void {\n let col: number;\n let row: number = params[0] - 1;\n\n if (params.length >= 2) {\n col = params[1] - 1;\n } else {\n col = 0;\n }\n\n if (row < 0) {\n row = 0;\n } else if (row >= this._terminal.rows) {\n row = this._terminal.rows - 1;\n }\n\n if (col < 0) {\n col = 0;\n } else if (col >= this._terminal.cols) {\n col = this._terminal.cols - 1;\n }\n\n this._terminal.buffer.x = col;\n this._terminal.buffer.y = row;\n }\n\n /**\n * CSI Ps I\n * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n */\n public cursorForwardTab(params: number[]): void {\n let param = params[0] || 1;\n while (param--) {\n this._terminal.buffer.x = this._terminal.buffer.nextStop();\n }\n }\n\n /**\n * CSI Ps J Erase in Display (ED).\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * CSI ? Ps J\n * Erase in Display (DECSED).\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n */\n public eraseInDisplay(params: number[]): void {\n let j;\n switch (params[0]) {\n case 0:\n this._terminal.eraseRight(this._terminal.buffer.x, this._terminal.buffer.y);\n j = this._terminal.buffer.y + 1;\n for (; j < this._terminal.rows; j++) {\n this._terminal.eraseLine(j);\n }\n break;\n case 1:\n this._terminal.eraseLeft(this._terminal.buffer.x, this._terminal.buffer.y);\n j = this._terminal.buffer.y;\n while (j--) {\n this._terminal.eraseLine(j);\n }\n break;\n case 2:\n j = this._terminal.rows;\n while (j--) this._terminal.eraseLine(j);\n break;\n case 3:\n // Clear scrollback (everything not in viewport)\n const scrollBackSize = this._terminal.buffer.lines.length - this._terminal.rows;\n if (scrollBackSize > 0) {\n this._terminal.buffer.lines.trimStart(scrollBackSize);\n this._terminal.buffer.ybase = Math.max(this._terminal.buffer.ybase - scrollBackSize, 0);\n this._terminal.buffer.ydisp = Math.max(this._terminal.buffer.ydisp - scrollBackSize, 0);\n // Force a scroll event to refresh viewport\n this._terminal.emit('scroll', 0);\n }\n break;\n }\n }\n\n /**\n * CSI Ps K Erase in Line (EL).\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * CSI ? Ps K\n * Erase in Line (DECSEL).\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n */\n public eraseInLine(params: number[]): void {\n switch (params[0]) {\n case 0:\n this._terminal.eraseRight(this._terminal.buffer.x, this._terminal.buffer.y);\n break;\n case 1:\n this._terminal.eraseLeft(this._terminal.buffer.x, this._terminal.buffer.y);\n break;\n case 2:\n this._terminal.eraseLine(this._terminal.buffer.y);\n break;\n }\n }\n\n /**\n * CSI Ps L\n * Insert Ps Line(s) (default = 1) (IL).\n */\n public insertLines(params: number[]): void {\n let param: number = params[0];\n if (param < 1) {\n param = 1;\n }\n let row: number = this._terminal.buffer.y + this._terminal.buffer.ybase;\n\n let scrollBottomRowsOffset = this._terminal.rows - 1 - this._terminal.buffer.scrollBottom;\n let scrollBottomAbsolute = this._terminal.rows - 1 + this._terminal.buffer.ybase - scrollBottomRowsOffset + 1;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1L\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._terminal.buffer.lines.splice(scrollBottomAbsolute - 1, 1);\n this._terminal.buffer.lines.splice(row, 0, this._terminal.blankLine(true));\n }\n\n // this.maxRange();\n this._terminal.updateRange(this._terminal.buffer.y);\n this._terminal.updateRange(this._terminal.buffer.scrollBottom);\n }\n\n /**\n * CSI Ps M\n * Delete Ps Line(s) (default = 1) (DL).\n */\n public deleteLines(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n const row: number = this._terminal.buffer.y + this._terminal.buffer.ybase;\n\n let j: number;\n j = this._terminal.rows - 1 - this._terminal.buffer.scrollBottom;\n j = this._terminal.rows - 1 + this._terminal.buffer.ybase - j;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1M\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._terminal.buffer.lines.splice(row, 1);\n this._terminal.buffer.lines.splice(j, 0, this._terminal.blankLine(true));\n }\n\n // this.maxRange();\n this._terminal.updateRange(this._terminal.buffer.y);\n this._terminal.updateRange(this._terminal.buffer.scrollBottom);\n }\n\n /**\n * CSI Ps P\n * Delete Ps Character(s) (default = 1) (DCH).\n */\n public deleteChars(params: number[]): void {\n let param: number = params[0];\n if (param < 1) {\n param = 1;\n }\n\n const row = this._terminal.buffer.y + this._terminal.buffer.ybase;\n const ch: CharData = [this._terminal.eraseAttr(), ' ', 1, 32]; // xterm\n\n while (param--) {\n this._terminal.buffer.lines.get(row).splice(this._terminal.buffer.x, 1);\n this._terminal.buffer.lines.get(row).push(ch);\n }\n this._terminal.updateRange(this._terminal.buffer.y);\n }\n\n /**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU).\n */\n public scrollUp(params: number[]): void {\n let param = params[0] || 1;\n while (param--) {\n this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollTop, 1);\n this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollBottom, 0, this._terminal.blankLine());\n }\n // this.maxRange();\n this._terminal.updateRange(this._terminal.buffer.scrollTop);\n this._terminal.updateRange(this._terminal.buffer.scrollBottom);\n }\n\n /**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD).\n */\n public scrollDown(params: number[]): void {\n let param = params[0] || 1;\n while (param--) {\n this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollBottom, 1);\n this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollTop, 0, this._terminal.blankLine());\n }\n // this.maxRange();\n this._terminal.updateRange(this._terminal.buffer.scrollTop);\n this._terminal.updateRange(this._terminal.buffer.scrollBottom);\n }\n\n /**\n * CSI Ps X\n * Erase Ps Character(s) (default = 1) (ECH).\n */\n public eraseChars(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n\n const row = this._terminal.buffer.y + this._terminal.buffer.ybase;\n let j = this._terminal.buffer.x;\n const ch: CharData = [this._terminal.eraseAttr(), ' ', 1, 32]; // xterm\n\n while (param-- && j < this._terminal.cols) {\n this._terminal.buffer.lines.get(row)[j++] = ch;\n }\n }\n\n /**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n */\n public cursorBackwardTab(params: number[]): void {\n let param = params[0] || 1;\n while (param--) {\n this._terminal.buffer.x = this._terminal.buffer.prevStop();\n }\n }\n\n /**\n * CSI Pm ` Character Position Absolute\n * [column] (default = [row,1]) (HPA).\n */\n public charPosAbsolute(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.x = param - 1;\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x = this._terminal.cols - 1;\n }\n }\n\n /**\n * CSI Pm a Character Position Relative\n * [columns] (default = [row,col+1]) (HPR)\n * reuse CSI Ps C ?\n */\n public HPositionRelative(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.x += param;\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x = this._terminal.cols - 1;\n }\n }\n\n /**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n */\n public repeatPrecedingCharacter(params: number[]): void {\n let param = params[0] || 1;\n const line = this._terminal.buffer.lines.get(this._terminal.buffer.ybase + this._terminal.buffer.y);\n const ch = line[this._terminal.buffer.x - 1] || [this._terminal.defAttr, ' ', 1, 32];\n\n while (param--) {\n line[this._terminal.buffer.x++] = ch;\n }\n }\n\n /**\n * CSI Ps c Send Device Attributes (Primary DA).\n * Ps = 0 or omitted -> request attributes from terminal. The\n * response depends on the decTerminalID resource setting.\n * -> CSI ? 1 ; 2 c (``VT100 with Advanced Video Option'')\n * -> CSI ? 1 ; 0 c (``VT101 with No Options'')\n * -> CSI ? 6 c (``VT102'')\n * -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c (``VT220'')\n * The VT100-style response parameters do not mean anything by\n * themselves. VT220 parameters do, telling the host what fea-\n * tures the terminal supports:\n * Ps = 1 -> 132-columns.\n * Ps = 2 -> Printer.\n * Ps = 6 -> Selective erase.\n * Ps = 8 -> User-defined keys.\n * Ps = 9 -> National replacement character sets.\n * Ps = 1 5 -> Technical characters.\n * Ps = 2 2 -> ANSI color, e.g., VT525.\n * Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).\n * CSI > Ps c\n * Send Device Attributes (Secondary DA).\n * Ps = 0 or omitted -> request the terminal's identification\n * code. The response depends on the decTerminalID resource set-\n * ting. It should apply only to VT220 and up, but xterm extends\n * this to VT100.\n * -> CSI > Pp ; Pv ; Pc c\n * where Pp denotes the terminal type\n * Pp = 0 -> ``VT100''.\n * Pp = 1 -> ``VT220''.\n * and Pv is the firmware version (for xterm, this was originally\n * the XFree86 patch number, starting with 95). In a DEC termi-\n * nal, Pc indicates the ROM cartridge registration number and is\n * always zero.\n * More information:\n * xterm/charproc.c - line 2012, for more information.\n * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n */\n public sendDeviceAttributes(params: number[]): void {\n if (params[0] > 0) {\n return;\n }\n\n if (!this._terminal.prefix) {\n if (this._terminal.is('xterm') || this._terminal.is('rxvt-unicode') || this._terminal.is('screen')) {\n this._terminal.send(C0.ESC + '[?1;2c');\n } else if (this._terminal.is('linux')) {\n this._terminal.send(C0.ESC + '[?6c');\n }\n } else if (this._terminal.prefix === '>') {\n // xterm and urxvt\n // seem to spit this\n // out around ~370 times (?).\n if (this._terminal.is('xterm')) {\n this._terminal.send(C0.ESC + '[>0;276;0c');\n } else if (this._terminal.is('rxvt-unicode')) {\n this._terminal.send(C0.ESC + '[>85;95;0c');\n } else if (this._terminal.is('linux')) {\n // not supported by linux console.\n // linux console echoes parameters.\n this._terminal.send(params[0] + 'c');\n } else if (this._terminal.is('screen')) {\n this._terminal.send(C0.ESC + '[>83;40003;0c');\n }\n }\n }\n\n /**\n * CSI Pm d Vertical Position Absolute (VPA)\n * [row] (default = [1,column])\n */\n public linePosAbsolute(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.y = param - 1;\n if (this._terminal.buffer.y >= this._terminal.rows) {\n this._terminal.buffer.y = this._terminal.rows - 1;\n }\n }\n\n /**\n * CSI Pm e Vertical Position Relative (VPR)\n * [rows] (default = [row+1,column])\n * reuse CSI Ps B ?\n */\n public VPositionRelative(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.y += param;\n if (this._terminal.buffer.y >= this._terminal.rows) {\n this._terminal.buffer.y = this._terminal.rows - 1;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x--;\n }\n }\n\n /**\n * CSI Ps ; Ps f\n * Horizontal and Vertical Position [row;column] (default =\n * [1,1]) (HVP).\n */\n public HVPosition(params: number[]): void {\n if (params[0] < 1) params[0] = 1;\n if (params[1] < 1) params[1] = 1;\n\n this._terminal.buffer.y = params[0] - 1;\n if (this._terminal.buffer.y >= this._terminal.rows) {\n this._terminal.buffer.y = this._terminal.rows - 1;\n }\n\n this._terminal.buffer.x = params[1] - 1;\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x = this._terminal.cols - 1;\n }\n }\n\n /**\n * CSI Ps g Tab Clear (TBC).\n * Ps = 0 -> Clear Current Column (default).\n * Ps = 3 -> Clear All.\n * Potentially:\n * Ps = 2 -> Clear Stops on Line.\n * http://vt100.net/annarbor/aaa-ug/section6.html\n */\n public tabClear(params: number[]): void {\n let param = params[0];\n if (param <= 0) {\n delete this._terminal.buffer.tabs[this._terminal.buffer.x];\n } else if (param === 3) {\n this._terminal.buffer.tabs = {};\n }\n }\n\n /**\n * CSI Pm h Set Mode (SM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Insert Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Automatic Newline (LNM).\n * CSI ? Pm h\n * DEC Private Mode Set (DECSET).\n * Ps = 1 -> Application Cursor Keys (DECCKM).\n * Ps = 2 -> Designate USASCII for character sets G0-G3\n * (DECANM), and set VT100 mode.\n * Ps = 3 -> 132 Column Mode (DECCOLM).\n * Ps = 4 -> Smooth (Slow) Scroll (DECSCLM).\n * Ps = 5 -> Reverse Video (DECSCNM).\n * Ps = 6 -> Origin Mode (DECOM).\n * Ps = 7 -> Wraparound Mode (DECAWM).\n * Ps = 8 -> Auto-repeat Keys (DECARM).\n * Ps = 9 -> Send Mouse X & Y on button press. See the sec-\n * tion Mouse Tracking.\n * Ps = 1 0 -> Show toolbar (rxvt).\n * Ps = 1 2 -> Start Blinking Cursor (att610).\n * Ps = 1 8 -> Print form feed (DECPFF).\n * Ps = 1 9 -> Set print extent to full screen (DECPEX).\n * Ps = 2 5 -> Show Cursor (DECTCEM).\n * Ps = 3 0 -> Show scrollbar (rxvt).\n * Ps = 3 5 -> Enable font-shifting functions (rxvt).\n * Ps = 3 8 -> Enter Tektronix Mode (DECTEK).\n * Ps = 4 0 -> Allow 80 -> 132 Mode.\n * Ps = 4 1 -> more(1) fix (see curses resource).\n * Ps = 4 2 -> Enable Nation Replacement Character sets (DECN-\n * RCM).\n * Ps = 4 4 -> Turn On Margin Bell.\n * Ps = 4 5 -> Reverse-wraparound Mode.\n * Ps = 4 6 -> Start Logging. This is normally disabled by a\n * compile-time option.\n * Ps = 4 7 -> Use Alternate Screen Buffer. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 6 6 -> Application keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends backspace (DECBKM).\n * Ps = 1 0 0 0 -> Send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Enable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Scroll to bottom on tty output (rxvt).\n * Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Interpret \"meta\" key, sets eighth bit.\n * (enables the eightBitInput resource).\n * Ps = 1 0 3 5 -> Enable special modifiers for Alt and Num-\n * Lock keys. (This enables the numLock resource).\n * Ps = 1 0 3 6 -> Send ESC when Meta modifies a key. (This\n * enables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send DEL from the editing-keypad Delete\n * key.\n * Ps = 1 0 3 9 -> Send ESC when Alt modifies a key. (This\n * enables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Keep selection even if not highlighted.\n * (This enables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the CLIPBOARD selection. (This enables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Enable Urgency window manager hint when\n * Control-G is received. (This enables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Enable raising of the window when Control-G\n * is received. (enables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Alternate Screen Buffer. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 8 -> Save cursor as in DECSC. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Save cursor as in DECSC and use Alternate\n * Screen Buffer, clearing it first. (This may be disabled by\n * the titeInhibit resource). This combines the effects of the 1\n * 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based\n * applications rather than the 4 7 mode.\n * Ps = 1 0 5 0 -> Set terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Set Sun function-key mode.\n * Ps = 1 0 5 2 -> Set HP function-key mode.\n * Ps = 1 0 5 3 -> Set SCO function-key mode.\n * Ps = 1 0 6 0 -> Set legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Set VT220 keyboard emulation.\n * Ps = 2 0 0 4 -> Set bracketed paste mode.\n * Modes:\n * http: *vt100.net/docs/vt220-rm/chapter4.html\n */\n public setMode(params: number[]): void {\n if (params.length > 1) {\n for (let i = 0; i < params.length; i++) {\n this.setMode([params[i]]);\n }\n\n return;\n }\n\n if (!this._terminal.prefix) {\n switch (params[0]) {\n case 4:\n this._terminal.insertMode = true;\n break;\n case 20:\n // this._t.convertEol = true;\n break;\n }\n } else if (this._terminal.prefix === '?') {\n switch (params[0]) {\n case 1:\n this._terminal.applicationCursor = true;\n break;\n case 2:\n this._terminal.setgCharset(0, DEFAULT_CHARSET);\n this._terminal.setgCharset(1, DEFAULT_CHARSET);\n this._terminal.setgCharset(2, DEFAULT_CHARSET);\n this._terminal.setgCharset(3, DEFAULT_CHARSET);\n // set VT100 mode here\n break;\n case 3: // 132 col mode\n this._terminal.savedCols = this._terminal.cols;\n this._terminal.resize(132, this._terminal.rows);\n break;\n case 6:\n this._terminal.originMode = true;\n break;\n case 7:\n this._terminal.wraparoundMode = true;\n break;\n case 12:\n // this.cursorBlink = true;\n break;\n case 66:\n this._terminal.log('Serial port requested application keypad.');\n this._terminal.applicationKeypad = true;\n this._terminal.viewport.syncScrollArea();\n break;\n case 9: // X10 Mouse\n // no release, no motion, no wheel, no modifiers.\n case 1000: // vt200 mouse\n // no motion.\n // no modifiers, except control on the wheel.\n case 1002: // button event mouse\n case 1003: // any event mouse\n // any event - sends motion events,\n // even if there is no button held down.\n\n // TODO: Why are params[0] compares nested within a switch for params[0]?\n\n this._terminal.x10Mouse = params[0] === 9;\n this._terminal.vt200Mouse = params[0] === 1000;\n this._terminal.normalMouse = params[0] > 1000;\n this._terminal.mouseEvents = true;\n this._terminal.element.classList.add('enable-mouse-events');\n this._terminal.selectionManager.disable();\n this._terminal.log('Binding to mouse events.');\n break;\n case 1004: // send focusin/focusout events\n // focusin: ^[[I\n // focusout: ^[[O\n this._terminal.sendFocus = true;\n break;\n case 1005: // utf8 ext mode mouse\n this._terminal.utfMouse = true;\n // for wide terminals\n // simply encodes large values as utf8 characters\n break;\n case 1006: // sgr ext mode mouse\n this._terminal.sgrMouse = true;\n // for wide terminals\n // does not add 32 to fields\n // press: ^[[ Keyboard Action Mode (AM).\n * Ps = 4 -> Replace Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Normal Linefeed (LNM).\n * CSI ? Pm l\n * DEC Private Mode Reset (DECRST).\n * Ps = 1 -> Normal Cursor Keys (DECCKM).\n * Ps = 2 -> Designate VT52 mode (DECANM).\n * Ps = 3 -> 80 Column Mode (DECCOLM).\n * Ps = 4 -> Jump (Fast) Scroll (DECSCLM).\n * Ps = 5 -> Normal Video (DECSCNM).\n * Ps = 6 -> Normal Cursor Mode (DECOM).\n * Ps = 7 -> No Wraparound Mode (DECAWM).\n * Ps = 8 -> No Auto-repeat Keys (DECARM).\n * Ps = 9 -> Don't send Mouse X & Y on button press.\n * Ps = 1 0 -> Hide toolbar (rxvt).\n * Ps = 1 2 -> Stop Blinking Cursor (att610).\n * Ps = 1 8 -> Don't print form feed (DECPFF).\n * Ps = 1 9 -> Limit print to scrolling region (DECPEX).\n * Ps = 2 5 -> Hide Cursor (DECTCEM).\n * Ps = 3 0 -> Don't show scrollbar (rxvt).\n * Ps = 3 5 -> Disable font-shifting functions (rxvt).\n * Ps = 4 0 -> Disallow 80 -> 132 Mode.\n * Ps = 4 1 -> No more(1) fix (see curses resource).\n * Ps = 4 2 -> Disable Nation Replacement Character sets (DEC-\n * NRCM).\n * Ps = 4 4 -> Turn Off Margin Bell.\n * Ps = 4 5 -> No Reverse-wraparound Mode.\n * Ps = 4 6 -> Stop Logging. (This is normally disabled by a\n * compile-time option).\n * Ps = 4 7 -> Use Normal Screen Buffer.\n * Ps = 6 6 -> Numeric keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends delete (DECBKM).\n * Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Don't use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Don't use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Don't use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Don't send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Disable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Don't scroll to bottom on tty output\n * (rxvt).\n * Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Don't interpret \"meta\" key. (This disables\n * the eightBitInput resource).\n * Ps = 1 0 3 5 -> Disable special modifiers for Alt and Num-\n * Lock keys. (This disables the numLock resource).\n * Ps = 1 0 3 6 -> Don't send ESC when Meta modifies a key.\n * (This disables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send VT220 Remove from the editing-keypad\n * Delete key.\n * Ps = 1 0 3 9 -> Don't send ESC when Alt modifies a key.\n * (This disables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Do not keep selection when not highlighted.\n * (This disables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the PRIMARY selection. (This disables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Disable Urgency window manager hint when\n * Control-G is received. (This disables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Disable raising of the window when Control-\n * G is received. (This disables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Normal Screen Buffer, clearing screen\n * first if in the Alternate Screen. (This may be disabled by\n * the titeInhibit resource).\n * Ps = 1 0 4 8 -> Restore cursor as in DECRC. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Use Normal Screen Buffer and restore cursor\n * as in DECRC. (This may be disabled by the titeInhibit\n * resource). This combines the effects of the 1 0 4 7 and 1 0\n * 4 8 modes. Use this with terminfo-based applications rather\n * than the 4 7 mode.\n * Ps = 1 0 5 0 -> Reset terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Reset Sun function-key mode.\n * Ps = 1 0 5 2 -> Reset HP function-key mode.\n * Ps = 1 0 5 3 -> Reset SCO function-key mode.\n * Ps = 1 0 6 0 -> Reset legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style.\n * Ps = 2 0 0 4 -> Reset bracketed paste mode.\n */\n public resetMode(params: number[]): void {\n if (params.length > 1) {\n for (let i = 0; i < params.length; i++) {\n this.resetMode([params[i]]);\n }\n\n return;\n }\n\n if (!this._terminal.prefix) {\n switch (params[0]) {\n case 4:\n this._terminal.insertMode = false;\n break;\n case 20:\n // this._t.convertEol = false;\n break;\n }\n } else if (this._terminal.prefix === '?') {\n switch (params[0]) {\n case 1:\n this._terminal.applicationCursor = false;\n break;\n case 3:\n if (this._terminal.cols === 132 && this._terminal.savedCols) {\n this._terminal.resize(this._terminal.savedCols, this._terminal.rows);\n }\n delete this._terminal.savedCols;\n break;\n case 6:\n this._terminal.originMode = false;\n break;\n case 7:\n this._terminal.wraparoundMode = false;\n break;\n case 12:\n // this.cursorBlink = false;\n break;\n case 66:\n this._terminal.log('Switching back to normal keypad.');\n this._terminal.applicationKeypad = false;\n this._terminal.viewport.syncScrollArea();\n break;\n case 9: // X10 Mouse\n case 1000: // vt200 mouse\n case 1002: // button event mouse\n case 1003: // any event mouse\n this._terminal.x10Mouse = false;\n this._terminal.vt200Mouse = false;\n this._terminal.normalMouse = false;\n this._terminal.mouseEvents = false;\n this._terminal.element.classList.remove('enable-mouse-events');\n this._terminal.selectionManager.enable();\n break;\n case 1004: // send focusin/focusout events\n this._terminal.sendFocus = false;\n break;\n case 1005: // utf8 ext mode mouse\n this._terminal.utfMouse = false;\n break;\n case 1006: // sgr ext mode mouse\n this._terminal.sgrMouse = false;\n break;\n case 1015: // urxvt ext mode mouse\n this._terminal.urxvtMouse = false;\n break;\n case 25: // hide cursor\n this._terminal.cursorHidden = true;\n break;\n case 1049: // alt screen buffer cursor\n // FALL-THROUGH\n case 47: // normal screen buffer\n case 1047: // normal screen buffer - clearing it first\n // Ensure the selection manager has the correct buffer\n this._terminal.buffers.activateNormalBuffer();\n // TODO: Not sure if we need to save/restore after switching the buffer\n // if (params[0] === 1049) {\n // this.restoreCursor(params);\n // }\n this._terminal.selectionManager.setBuffer(this._terminal.buffer);\n this._terminal.refresh(0, this._terminal.rows - 1);\n this._terminal.viewport.syncScrollArea();\n this._terminal.showCursor();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._terminal.bracketedPasteMode = false;\n break;\n }\n }\n }\n\n /**\n * CSI Pm m Character Attributes (SGR).\n * Ps = 0 -> Normal (default).\n * Ps = 1 -> Bold.\n * Ps = 2 -> Faint, decreased intensity (ISO 6429).\n * Ps = 4 -> Underlined.\n * Ps = 5 -> Blink (appears as Bold).\n * Ps = 7 -> Inverse.\n * Ps = 8 -> Invisible, i.e., hidden (VT300).\n * Ps = 2 2 -> Normal (neither bold nor faint).\n * Ps = 2 4 -> Not underlined.\n * Ps = 2 5 -> Steady (not blinking).\n * Ps = 2 7 -> Positive (not inverse).\n * Ps = 2 8 -> Visible, i.e., not hidden (VT300).\n * Ps = 3 0 -> Set foreground color to Black.\n * Ps = 3 1 -> Set foreground color to Red.\n * Ps = 3 2 -> Set foreground color to Green.\n * Ps = 3 3 -> Set foreground color to Yellow.\n * Ps = 3 4 -> Set foreground color to Blue.\n * Ps = 3 5 -> Set foreground color to Magenta.\n * Ps = 3 6 -> Set foreground color to Cyan.\n * Ps = 3 7 -> Set foreground color to White.\n * Ps = 3 9 -> Set foreground color to default (original).\n * Ps = 4 0 -> Set background color to Black.\n * Ps = 4 1 -> Set background color to Red.\n * Ps = 4 2 -> Set background color to Green.\n * Ps = 4 3 -> Set background color to Yellow.\n * Ps = 4 4 -> Set background color to Blue.\n * Ps = 4 5 -> Set background color to Magenta.\n * Ps = 4 6 -> Set background color to Cyan.\n * Ps = 4 7 -> Set background color to White.\n * Ps = 4 9 -> Set background color to default (original).\n *\n * If 16-color support is compiled, the following apply. Assume\n * that xterm's resources are set so that the ISO color codes are\n * the first 8 of a set of 16. Then the aixterm colors are the\n * bright versions of the ISO colors:\n * Ps = 9 0 -> Set foreground color to Black.\n * Ps = 9 1 -> Set foreground color to Red.\n * Ps = 9 2 -> Set foreground color to Green.\n * Ps = 9 3 -> Set foreground color to Yellow.\n * Ps = 9 4 -> Set foreground color to Blue.\n * Ps = 9 5 -> Set foreground color to Magenta.\n * Ps = 9 6 -> Set foreground color to Cyan.\n * Ps = 9 7 -> Set foreground color to White.\n * Ps = 1 0 0 -> Set background color to Black.\n * Ps = 1 0 1 -> Set background color to Red.\n * Ps = 1 0 2 -> Set background color to Green.\n * Ps = 1 0 3 -> Set background color to Yellow.\n * Ps = 1 0 4 -> Set background color to Blue.\n * Ps = 1 0 5 -> Set background color to Magenta.\n * Ps = 1 0 6 -> Set background color to Cyan.\n * Ps = 1 0 7 -> Set background color to White.\n *\n * If xterm is compiled with the 16-color support disabled, it\n * supports the following, from rxvt:\n * Ps = 1 0 0 -> Set foreground and background color to\n * default.\n *\n * If 88- or 256-color support is compiled, the following apply.\n * Ps = 3 8 ; 5 ; Ps -> Set foreground color to the second\n * Ps.\n * Ps = 4 8 ; 5 ; Ps -> Set background color to the second\n * Ps.\n */\n public charAttributes(params: number[]): void {\n // Optimize a single SGR0.\n if (params.length === 1 && params[0] === 0) {\n this._terminal.curAttr = this._terminal.defAttr;\n return;\n }\n\n const l = params.length;\n let flags = this._terminal.curAttr >> 18;\n let fg = (this._terminal.curAttr >> 9) & 0x1ff;\n let bg = this._terminal.curAttr & 0x1ff;\n let p;\n\n for (let i = 0; i < l; i++) {\n p = params[i];\n if (p >= 30 && p <= 37) {\n // fg color 8\n fg = p - 30;\n } else if (p >= 40 && p <= 47) {\n // bg color 8\n bg = p - 40;\n } else if (p >= 90 && p <= 97) {\n // fg color 16\n p += 8;\n fg = p - 90;\n } else if (p >= 100 && p <= 107) {\n // bg color 16\n p += 8;\n bg = p - 100;\n } else if (p === 0) {\n // default\n flags = this._terminal.defAttr >> 18;\n fg = (this._terminal.defAttr >> 9) & 0x1ff;\n bg = this._terminal.defAttr & 0x1ff;\n // flags = 0;\n // fg = 0x1ff;\n // bg = 0x1ff;\n } else if (p === 1) {\n // bold text\n flags |= FLAGS.BOLD;\n } else if (p === 4) {\n // underlined text\n flags |= FLAGS.UNDERLINE;\n } else if (p === 5) {\n // blink\n flags |= FLAGS.BLINK;\n } else if (p === 7) {\n // inverse and positive\n // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n flags |= FLAGS.INVERSE;\n } else if (p === 8) {\n // invisible\n flags |= FLAGS.INVISIBLE;\n } else if (p === 2) {\n // dimmed text\n flags |= FLAGS.DIM;\n } else if (p === 22) {\n // not bold nor faint\n flags &= ~FLAGS.BOLD;\n flags &= ~FLAGS.DIM;\n } else if (p === 24) {\n // not underlined\n flags &= ~FLAGS.UNDERLINE;\n } else if (p === 25) {\n // not blink\n flags &= ~FLAGS.BLINK;\n } else if (p === 27) {\n // not inverse\n flags &= ~FLAGS.INVERSE;\n } else if (p === 28) {\n // not invisible\n flags &= ~FLAGS.INVISIBLE;\n } else if (p === 39) {\n // reset fg\n fg = (this._terminal.defAttr >> 9) & 0x1ff;\n } else if (p === 49) {\n // reset bg\n bg = this._terminal.defAttr & 0x1ff;\n } else if (p === 38) {\n // fg color 256\n if (params[i + 1] === 2) {\n i += 2;\n fg = this._terminal.matchColor(\n params[i] & 0xff,\n params[i + 1] & 0xff,\n params[i + 2] & 0xff);\n if (fg === -1) fg = 0x1ff;\n i += 2;\n } else if (params[i + 1] === 5) {\n i += 2;\n p = params[i] & 0xff;\n fg = p;\n }\n } else if (p === 48) {\n // bg color 256\n if (params[i + 1] === 2) {\n i += 2;\n bg = this._terminal.matchColor(\n params[i] & 0xff,\n params[i + 1] & 0xff,\n params[i + 2] & 0xff);\n if (bg === -1) bg = 0x1ff;\n i += 2;\n } else if (params[i + 1] === 5) {\n i += 2;\n p = params[i] & 0xff;\n bg = p;\n }\n } else if (p === 100) {\n // reset fg/bg\n fg = (this._terminal.defAttr >> 9) & 0x1ff;\n bg = this._terminal.defAttr & 0x1ff;\n } else {\n this._terminal.error('Unknown SGR attribute: %d.', p);\n }\n }\n\n this._terminal.curAttr = (flags << 18) | (fg << 9) | bg;\n }\n\n /**\n * CSI Ps n Device Status Report (DSR).\n * Ps = 5 -> Status Report. Result (``OK'') is\n * CSI 0 n\n * Ps = 6 -> Report Cursor Position (CPR) [row;column].\n * Result is\n * CSI r ; c R\n * CSI ? Ps n\n * Device Status Report (DSR, DEC-specific).\n * Ps = 6 -> Report Cursor Position (CPR) [row;column] as CSI\n * ? r ; c R (assumes page is zero).\n * Ps = 1 5 -> Report Printer status as CSI ? 1 0 n (ready).\n * or CSI ? 1 1 n (not ready).\n * Ps = 2 5 -> Report UDK status as CSI ? 2 0 n (unlocked)\n * or CSI ? 2 1 n (locked).\n * Ps = 2 6 -> Report Keyboard status as\n * CSI ? 2 7 ; 1 ; 0 ; 0 n (North American).\n * The last two parameters apply to VT400 & up, and denote key-\n * board ready and LK01 respectively.\n * Ps = 5 3 -> Report Locator status as\n * CSI ? 5 3 n Locator available, if compiled-in, or\n * CSI ? 5 0 n No Locator, if not.\n */\n public deviceStatus(params: number[]): void {\n if (!this._terminal.prefix) {\n switch (params[0]) {\n case 5:\n // status report\n this._terminal.send(C0.ESC + '[0n');\n break;\n case 6:\n // cursor position\n this._terminal.send(C0.ESC + '['\n + (this._terminal.buffer.y + 1)\n + ';'\n + (this._terminal.buffer.x + 1)\n + 'R');\n break;\n }\n } else if (this._terminal.prefix === '?') {\n // modern xterm doesnt seem to\n // respond to any of these except ?6, 6, and 5\n switch (params[0]) {\n case 6:\n // cursor position\n this._terminal.send(C0.ESC + '[?'\n + (this._terminal.buffer.y + 1)\n + ';'\n + (this._terminal.buffer.x + 1)\n + 'R');\n break;\n case 15:\n // no printer\n // this.send(C0.ESC + '[?11n');\n break;\n case 25:\n // dont support user defined keys\n // this.send(C0.ESC + '[?21n');\n break;\n case 26:\n // north american keyboard\n // this.send(C0.ESC + '[?27;1;0;0n');\n break;\n case 53:\n // no dec locator/mouse\n // this.send(C0.ESC + '[?50n');\n break;\n }\n }\n }\n\n /**\n * CSI ! p Soft terminal reset (DECSTR).\n * http://vt100.net/docs/vt220-rm/table4-10.html\n */\n public softReset(params: number[]): void {\n this._terminal.cursorHidden = false;\n this._terminal.insertMode = false;\n this._terminal.originMode = false;\n this._terminal.wraparoundMode = true; // defaults: xterm - true, vt100 - false\n this._terminal.applicationKeypad = false; // ?\n this._terminal.viewport.syncScrollArea();\n this._terminal.applicationCursor = false;\n this._terminal.buffer.scrollTop = 0;\n this._terminal.buffer.scrollBottom = this._terminal.rows - 1;\n this._terminal.curAttr = this._terminal.defAttr;\n this._terminal.buffer.x = this._terminal.buffer.y = 0; // ?\n this._terminal.charset = null;\n this._terminal.glevel = 0; // ??\n this._terminal.charsets = [null]; // ??\n }\n\n /**\n * CSI Ps SP q Set cursor style (DECSCUSR, VT520).\n * Ps = 0 -> blinking block.\n * Ps = 1 -> blinking block (default).\n * Ps = 2 -> steady block.\n * Ps = 3 -> blinking underline.\n * Ps = 4 -> steady underline.\n * Ps = 5 -> blinking bar (xterm).\n * Ps = 6 -> steady bar (xterm).\n */\n public setCursorStyle(params?: number[]): void {\n const param = params[0] < 1 ? 1 : params[0];\n switch (param) {\n case 1:\n case 2:\n this._terminal.setOption('cursorStyle', 'block');\n break;\n case 3:\n case 4:\n this._terminal.setOption('cursorStyle', 'underline');\n break;\n case 5:\n case 6:\n this._terminal.setOption('cursorStyle', 'bar');\n break;\n }\n const isBlinking = param % 2 === 1;\n this._terminal.setOption('cursorBlink', isBlinking);\n }\n\n /**\n * CSI Ps ; Ps r\n * Set Scrolling Region [top;bottom] (default = full size of win-\n * dow) (DECSTBM).\n * CSI ? Pm r\n */\n public setScrollRegion(params: number[]): void {\n if (this._terminal.prefix) return;\n this._terminal.buffer.scrollTop = (params[0] || 1) - 1;\n this._terminal.buffer.scrollBottom = (params[1] && params[1] <= this._terminal.rows ? params[1] : this._terminal.rows) - 1;\n this._terminal.buffer.x = 0;\n this._terminal.buffer.y = 0;\n }\n\n\n /**\n * CSI s\n * Save cursor (ANSI.SYS).\n */\n public saveCursor(params: number[]): void {\n this._terminal.buffer.savedX = this._terminal.buffer.x;\n this._terminal.buffer.savedY = this._terminal.buffer.y;\n }\n\n\n /**\n * CSI u\n * Restore cursor (ANSI.SYS).\n */\n public restoreCursor(params: number[]): void {\n this._terminal.buffer.x = this._terminal.buffer.savedX || 0;\n this._terminal.buffer.y = this._terminal.buffer.savedY || 0;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IEventEmitter, IListenerType } from './Interfaces';\n\nexport class EventEmitter implements IEventEmitter {\n private _events: {[type: string]: IListenerType[]};\n\n constructor() {\n // Restore the previous events if available, this will happen if the\n // constructor is called multiple times on the same object (terminal reset).\n this._events = this._events || {};\n }\n\n public on(type: string, listener: IListenerType): void {\n this._events[type] = this._events[type] || [];\n this._events[type].push(listener);\n }\n\n public off(type: string, listener: IListenerType): void {\n if (!this._events[type]) {\n return;\n }\n\n let obj = this._events[type];\n let i = obj.length;\n\n while (i--) {\n if (obj[i] === listener || obj[i].listener === listener) {\n obj.splice(i, 1);\n return;\n }\n }\n }\n\n public removeAllListeners(type: string): void {\n if (this._events[type]) {\n delete this._events[type];\n }\n }\n\n public once(type: string, listener: IListenerType): void {\n function on(): void {\n let args = Array.prototype.slice.call(arguments);\n this.off(type, on);\n listener.apply(this, args);\n }\n (on).listener = listener;\n this.on(type, on);\n }\n\n public emit(type: string, ...args: any[]): void {\n if (!this._events[type]) {\n return;\n }\n let obj = this._events[type];\n for (let i = 0; i < obj.length; i++) {\n obj[i].apply(this, args);\n }\n }\n\n public listeners(type: string): IListenerType[] {\n return this._events[type] || [];\n }\n\n protected destroy(): void {\n this._events = {};\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * C0 control codes\n * See = https://en.wikipedia.org/wiki/C0_and_C1_control_codes\n */\nexport namespace C0 {\n /** Null (Caret = ^@, C = \\0) */\n export const NUL = '\\x00';\n /** Start of Heading (Caret = ^A) */\n export const SOH = '\\x01';\n /** Start of Text (Caret = ^B) */\n export const STX = '\\x02';\n /** End of Text (Caret = ^C) */\n export const ETX = '\\x03';\n /** End of Transmission (Caret = ^D) */\n export const EOT = '\\x04';\n /** Enquiry (Caret = ^E) */\n export const ENQ = '\\x05';\n /** Acknowledge (Caret = ^F) */\n export const ACK = '\\x06';\n /** Bell (Caret = ^G, C = \\a) */\n export const BEL = '\\x07';\n /** Backspace (Caret = ^H, C = \\b) */\n export const BS = '\\x08';\n /** Character Tabulation, Horizontal Tabulation (Caret = ^I, C = \\t) */\n export const HT = '\\x09';\n /** Line Feed (Caret = ^J, C = \\n) */\n export const LF = '\\x0a';\n /** Line Tabulation, Vertical Tabulation (Caret = ^K, C = \\v) */\n export const VT = '\\x0b';\n /** Form Feed (Caret = ^L, C = \\f) */\n export const FF = '\\x0c';\n /** Carriage Return (Caret = ^M, C = \\r) */\n export const CR = '\\x0d';\n /** Shift Out (Caret = ^N) */\n export const SO = '\\x0e';\n /** Shift In (Caret = ^O) */\n export const SI = '\\x0f';\n /** Data Link Escape (Caret = ^P) */\n export const DLE = '\\x10';\n /** Device Control One (XON) (Caret = ^Q) */\n export const DC1 = '\\x11';\n /** Device Control Two (Caret = ^R) */\n export const DC2 = '\\x12';\n /** Device Control Three (XOFF) (Caret = ^S) */\n export const DC3 = '\\x13';\n /** Device Control Four (Caret = ^T) */\n export const DC4 = '\\x14';\n /** Negative Acknowledge (Caret = ^U) */\n export const NAK = '\\x15';\n /** Synchronous Idle (Caret = ^V) */\n export const SYN = '\\x16';\n /** End of Transmission Block (Caret = ^W) */\n export const ETB = '\\x17';\n /** Cancel (Caret = ^X) */\n export const CAN = '\\x18';\n /** End of Medium (Caret = ^Y) */\n export const EM = '\\x19';\n /** Substitute (Caret = ^Z) */\n export const SUB = '\\x1a';\n /** Escape (Caret = ^[, C = \\e) */\n export const ESC = '\\x1b';\n /** File Separator (Caret = ^\\) */\n export const FS = '\\x1c';\n /** Group Separator (Caret = ^]) */\n export const GS = '\\x1d';\n /** Record Separator (Caret = ^^) */\n export const RS = '\\x1e';\n /** Unit Separator (Caret = ^_) */\n export const US = '\\x1f';\n /** Space */\n export const SP = '\\x20';\n /** Delete (Caret = ^?) */\n export const DEL = '\\x7f';\n};\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from './Interfaces';\n\ninterface IPosition {\n start: number;\n end: number;\n}\n\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n /**\n * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n * IME. This variable determines whether the compositionText should be displayed on the UI.\n */\n private isComposing: boolean;\n\n /**\n * The position within the input textarea's value of the current composition.\n */\n private compositionPosition: IPosition;\n\n /**\n * Whether a composition is in the process of being sent, setting this to false will cancel any\n * in-progress composition.\n */\n private isSendingComposition: boolean;\n\n /**\n * Creates a new CompositionHelper.\n * @param textarea The textarea that xterm uses for input.\n * @param compositionView The element to display the in-progress composition in.\n * @param terminal The Terminal to forward the finished composition to.\n */\n constructor(\n private textarea: HTMLTextAreaElement,\n private compositionView: HTMLElement,\n private terminal: ITerminal\n ) {\n this.isComposing = false;\n this.isSendingComposition = false;\n this.compositionPosition = { start: null, end: null };\n }\n\n /**\n * Handles the compositionstart event, activating the composition view.\n */\n public compositionstart(): void {\n this.isComposing = true;\n this.compositionPosition.start = this.textarea.value.length;\n this.compositionView.textContent = '';\n this.compositionView.classList.add('active');\n }\n\n /**\n * Handles the compositionupdate event, updating the composition view.\n * @param {CompositionEvent} ev The event.\n */\n public compositionupdate(ev: CompositionEvent): void {\n this.compositionView.textContent = ev.data;\n this.updateCompositionElements();\n setTimeout(() => {\n this.compositionPosition.end = this.textarea.value.length;\n }, 0);\n }\n\n /**\n * Handles the compositionend event, hiding the composition view and sending the composition to\n * the handler.\n */\n public compositionend(): void {\n this.finalizeComposition(true);\n }\n\n /**\n * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n * @param ev The keydown event.\n * @return Whether the Terminal should continue processing the keydown event.\n */\n public keydown(ev: KeyboardEvent): boolean {\n if (this.isComposing || this.isSendingComposition) {\n if (ev.keyCode === 229) {\n // Continue composing if the keyCode is the \"composition character\"\n return false;\n } else if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n // Continue composing if the keyCode is a modifier key\n return false;\n } else {\n // Finish composition immediately. This is mainly here for the case where enter is\n // pressed and the handler needs to be triggered before the command is executed.\n this.finalizeComposition(false);\n }\n }\n\n if (ev.keyCode === 229) {\n // If the \"composition character\" is used but gets to this point it means a non-composition\n // character (eg. numbers and punctuation) was pressed when the IME was active.\n this.handleAnyTextareaChanges();\n return false;\n }\n\n return true;\n }\n\n /**\n * Finalizes the composition, resuming regular input actions. This is called when a composition\n * is ending.\n * @param waitForPropogation Whether to wait for events to propogate before sending\n * the input. This should be false if a non-composition keystroke is entered before the\n * compositionend event is triggered, such as enter, so that the composition is send before\n * the command is executed.\n */\n private finalizeComposition(waitForPropogation: boolean): void {\n this.compositionView.classList.remove('active');\n this.isComposing = false;\n this.clearTextareaPosition();\n\n if (!waitForPropogation) {\n // Cancel any delayed composition send requests and send the input immediately.\n this.isSendingComposition = false;\n const input = this.textarea.value.substring(this.compositionPosition.start, this.compositionPosition.end);\n this.terminal.handler(input);\n } else {\n // Make a deep copy of the composition position here as a new compositionstart event may\n // fire before the setTimeout executes.\n const currentCompositionPosition = {\n start: this.compositionPosition.start,\n end: this.compositionPosition.end,\n };\n\n // Since composition* events happen before the changes take place in the textarea on most\n // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n // complete. This ensures the correct character is retrieved, this solution was used\n // because:\n // - The compositionend event's data property is unreliable, at least on Chromium\n // - The last compositionupdate event's data property does not always accurately describe\n // the character, a counter example being Korean where an ending consonsant can move to\n // the following character if the following input is a vowel.\n this.isSendingComposition = true;\n setTimeout(() => {\n // Ensure that the input has not already been sent\n if (this.isSendingComposition) {\n this.isSendingComposition = false;\n let input;\n if (this.isComposing) {\n // Use the end position to get the string if a new composition has started.\n input = this.textarea.value.substring(currentCompositionPosition.start, currentCompositionPosition.end);\n } else {\n // Don't use the end position here in order to pick up any characters after the\n // composition has finished, for example when typing a non-composition character\n // (eg. 2) after a composition character.\n input = this.textarea.value.substring(currentCompositionPosition.start);\n }\n this.terminal.handler(input);\n }\n }, 0);\n }\n }\n\n /**\n * Apply any changes made to the textarea after the current event chain is allowed to complete.\n * This should be called when not currently composing but a keydown event with the \"composition\n * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n * IME is active.\n */\n private handleAnyTextareaChanges(): void {\n const oldValue = this.textarea.value;\n setTimeout(() => {\n // Ignore if a composition has started since the timeout\n if (!this.isComposing) {\n const newValue = this.textarea.value;\n const diff = newValue.replace(oldValue, '');\n if (diff.length > 0) {\n this.terminal.handler(diff);\n }\n }\n }, 0);\n }\n\n /**\n * Positions the composition view on top of the cursor and the textarea just below it (so the\n * IME helper dialog is positioned correctly).\n * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n * necessary as the IME events across browsers are not consistently triggered.\n */\n public updateCompositionElements(dontRecurse?: boolean): void {\n if (!this.isComposing) {\n return;\n }\n\n if (this.terminal.buffer.isCursorInViewport) {\n const cellHeight = Math.ceil(this.terminal.charMeasure.height * this.terminal.options.lineHeight);\n const cursorTop = this.terminal.buffer.y * cellHeight;\n const cursorLeft = this.terminal.buffer.x * this.terminal.charMeasure.width;\n\n this.compositionView.style.left = cursorLeft + 'px';\n this.compositionView.style.top = cursorTop + 'px';\n this.compositionView.style.height = cellHeight + 'px';\n this.compositionView.style.lineHeight = cellHeight + 'px';\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n const compositionViewBounds = this.compositionView.getBoundingClientRect();\n this.textarea.style.left = cursorLeft + 'px';\n this.textarea.style.top = cursorTop + 'px';\n this.textarea.style.width = compositionViewBounds.width + 'px';\n this.textarea.style.height = compositionViewBounds.height + 'px';\n this.textarea.style.lineHeight = compositionViewBounds.height + 'px';\n }\n\n if (!dontRecurse) {\n setTimeout(() => this.updateCompositionElements(true), 0);\n }\n };\n\n /**\n * Clears the textarea's position so that the cursor does not blink on IE.\n * @private\n */\n private clearTextareaPosition(): void {\n this.textarea.style.left = '';\n this.textarea.style.top = '';\n };\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Charset } from './Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: Charset } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: Charset = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n '`': '\\u25c6', // '◆'\n 'a': '\\u2592', // '▒'\n 'b': '\\u0009', // '\\t'\n 'c': '\\u000c', // '\\f'\n 'd': '\\u000d', // '\\r'\n 'e': '\\u000a', // '\\n'\n 'f': '\\u00b0', // '°'\n 'g': '\\u00b1', // '±'\n 'h': '\\u2424', // '\\u2424' (NL)\n 'i': '\\u000b', // '\\v'\n 'j': '\\u2518', // '┘'\n 'k': '\\u2510', // '┐'\n 'l': '\\u250c', // '┌'\n 'm': '\\u2514', // '└'\n 'n': '\\u253c', // '┼'\n 'o': '\\u23ba', // '⎺'\n 'p': '\\u23bb', // '⎻'\n 'q': '\\u2500', // '─'\n 'r': '\\u23bc', // '⎼'\n 's': '\\u23bd', // '⎽'\n 't': '\\u251c', // '├'\n 'u': '\\u2524', // '┤'\n 'v': '\\u2534', // '┴'\n 'w': '\\u252c', // '┬'\n 'x': '\\u2502', // '│'\n 'y': '\\u2264', // '≤'\n 'z': '\\u2265', // '≥'\n '{': '\\u03c0', // 'π'\n '|': '\\u2260', // '≠'\n '}': '\\u00a3', // '£'\n '~': '\\u00b7' // '·'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n '#': '£'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = null;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n '#': '£',\n '@': '¾',\n '[': 'ij',\n '\\\\': '½',\n ']': '|',\n '{': '¨',\n '|': 'f',\n '}': '¼',\n '~': '´'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] =\nCHARSETS['5'] = {\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n '#': '£',\n '@': 'à',\n '[': '°',\n '\\\\': 'ç',\n ']': '§',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': '¨'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n '@': 'à',\n '[': 'â',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n '`': 'ô',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': 'û'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n '@': '§',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Ü',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'ß'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n '#': '£',\n '@': '§',\n '[': '°',\n '\\\\': 'ç',\n ']': 'é',\n '`': 'ù',\n '{': 'à',\n '|': 'ò',\n '}': 'è',\n '~': 'ì'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] =\nCHARSETS['6'] = {\n '@': 'Ä',\n '[': 'Æ',\n '\\\\': 'Ø',\n ']': 'Å',\n '^': 'Ü',\n '`': 'ä',\n '{': 'æ',\n '|': 'ø',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n '#': '£',\n '@': '§',\n '[': '¡',\n '\\\\': 'Ñ',\n ']': '¿',\n '{': '°',\n '|': 'ñ',\n '}': 'ç'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] =\nCHARSETS['7'] = {\n '@': 'É',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n '#': 'ù',\n '@': 'à',\n '[': 'é',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n '_': 'è',\n '`': 'ô',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'û'\n};\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const wcwidth = (function(opts: {nul: number, control: number}): (ucs: number) => number {\n // extracted from https://www.cl.cam.ac.uk/%7Emgk25/ucs/wcwidth.c\n // combining characters\n const COMBINING_BMP = [\n [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB],\n ];\n const COMBINING_HIGH = [\n [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n [0xE0100, 0xE01EF]\n ];\n // binary search\n function bisearch(ucs: number, data: number[][]): boolean {\n let min = 0;\n let max = data.length - 1;\n let mid;\n if (ucs < data[0][0] || ucs > data[max][1])\n return false;\n while (max >= min) {\n mid = (min + max) >> 1;\n if (ucs > data[mid][1])\n min = mid + 1;\n else if (ucs < data[mid][0])\n max = mid - 1;\n else\n return true;\n }\n return false;\n }\n function wcwidthBMP(ucs: number): number {\n // test for 8-bit control characters\n if (ucs === 0)\n return opts.nul;\n if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))\n return opts.control;\n // binary search in table of non-spacing characters\n if (bisearch(ucs, COMBINING_BMP))\n return 0;\n // if we arrive here, ucs is not a combining or C0/C1 control character\n if (isWideBMP(ucs)) {\n return 2;\n }\n return 1;\n }\n function isWideBMP(ucs: number): boolean {\n return (\n ucs >= 0x1100 && (\n ucs <= 0x115f || // Hangul Jamo init. consonants\n ucs === 0x2329 ||\n ucs === 0x232a ||\n (ucs >= 0x2e80 && ucs <= 0xa4cf && ucs !== 0x303f) || // CJK..Yi\n (ucs >= 0xac00 && ucs <= 0xd7a3) || // Hangul Syllables\n (ucs >= 0xf900 && ucs <= 0xfaff) || // CJK Compat Ideographs\n (ucs >= 0xfe10 && ucs <= 0xfe19) || // Vertical forms\n (ucs >= 0xfe30 && ucs <= 0xfe6f) || // CJK Compat Forms\n (ucs >= 0xff00 && ucs <= 0xff60) || // Fullwidth Forms\n (ucs >= 0xffe0 && ucs <= 0xffe6)));\n }\n function wcwidthHigh(ucs: number): 0 | 1 | 2 {\n if (bisearch(ucs, COMBINING_HIGH))\n return 0;\n if ((ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0x30000 && ucs <= 0x3fffd)) {\n return 2;\n }\n return 1;\n }\n const control = opts.control | 0;\n let table: number[] | Uint32Array = null;\n function init_table(): number[] | Uint32Array {\n // lookup table for BMP\n const CODEPOINTS = 65536; // BMP holds 65536 codepoints\n const BITWIDTH = 2; // a codepoint can have a width of 0, 1 or 2\n const ITEMSIZE = 32; // using uint32_t\n const CONTAINERSIZE = CODEPOINTS * BITWIDTH / ITEMSIZE;\n const CODEPOINTS_PER_ITEM = ITEMSIZE / BITWIDTH;\n table = (typeof Uint32Array === 'undefined')\n ? new Array(CONTAINERSIZE)\n : new Uint32Array(CONTAINERSIZE);\n for (let i = 0; i < CONTAINERSIZE; ++i) {\n let num = 0;\n let pos = CODEPOINTS_PER_ITEM;\n while (pos--)\n num = (num << 2) | wcwidthBMP(CODEPOINTS_PER_ITEM * i + pos);\n table[i] = num;\n }\n return table;\n }\n // get width from lookup table\n // position in container : num / CODEPOINTS_PER_ITEM\n // ==> n = table[Math.floor(num / 16)]\n // ==> n = table[num >> 4]\n // 16 codepoints per number: FFEEDDCCBBAA99887766554433221100\n // position in number : (num % CODEPOINTS_PER_ITEM) * BITWIDTH\n // ==> m = (n % 16) * 2\n // ==> m = (num & 15) << 1\n // right shift to position m\n // ==> n = n >> m e.g. m=12 000000000000FFEEDDCCBBAA99887766\n // we are only interested in 2 LSBs, cut off higher bits\n // ==> n = n & 3 e.g. 000000000000000000000000000000XX\n return function (num: number): number {\n num = num | 0; // get asm.js like optimization under V8\n if (num < 32)\n return control | 0;\n if (num < 127)\n return 1;\n let t = table || init_table();\n if (num < 65536)\n return t[num >> 4] >> ((num & 15) << 1) & 3;\n // do a full search for high codepoints\n return wcwidthHigh(num);\n };\n})({nul: 0, control: 0}); // configurable options\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal, IBufferSet } from './Interfaces';\nimport { Buffer } from './Buffer';\nimport { EventEmitter } from './EventEmitter';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends EventEmitter implements IBufferSet {\n private _normal: Buffer;\n private _alt: Buffer;\n private _activeBuffer: Buffer;\n\n /**\n * Create a new BufferSet for the given terminal.\n * @param {Terminal} terminal - The terminal the BufferSet will belong to\n */\n constructor(private _terminal: ITerminal) {\n super();\n this._normal = new Buffer(this._terminal, true);\n this._normal.fillViewportRows();\n\n // The alt buffer should never have scrollback.\n // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n this._alt = new Buffer(this._terminal, false);\n this._activeBuffer = this._normal;\n\n this.setupTabStops();\n }\n\n /**\n * Returns the alt Buffer of the BufferSet\n * @returns {Buffer}\n */\n public get alt(): Buffer {\n return this._alt;\n }\n\n /**\n * Returns the normal Buffer of the BufferSet\n * @returns {Buffer}\n */\n public get active(): Buffer {\n return this._activeBuffer;\n }\n\n /**\n * Returns the currently active Buffer of the BufferSet\n * @returns {Buffer}\n */\n public get normal(): Buffer {\n return this._normal;\n }\n\n /**\n * Sets the normal Buffer of the BufferSet as its currently active Buffer\n */\n public activateNormalBuffer(): void {\n // The alt buffer should always be cleared when we switch to the normal\n // buffer. This frees up memory since the alt buffer should always be new\n // when activated.\n this._alt.clear();\n\n this._activeBuffer = this._normal;\n this.emit('activate', this._normal);\n }\n\n /**\n * Sets the alt Buffer of the BufferSet as its currently active Buffer\n */\n public activateAltBuffer(): void {\n // Since the alt buffer is always cleared when the normal buffer is\n // activated, we want to fill it when switching to it.\n this._alt.fillViewportRows();\n this._activeBuffer = this._alt;\n this.emit('activate', this._alt);\n }\n\n /**\n * Resizes both normal and alt buffers, adjusting their data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n this._normal.resize(newCols, newRows);\n this._alt.resize(newCols, newRows);\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n this._normal.setupTabStops(i);\n this._alt.setupTabStops(i);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal, IBuffer } from './Interfaces';\nimport { CircularList } from './utils/CircularList';\nimport { LineData, CharData } from './Types';\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n * - text content of this particular buffer\n * - cursor position\n * - scroll position\n */\nexport class Buffer implements IBuffer {\n private _lines: CircularList;\n\n public ydisp: number;\n public ybase: number;\n public y: number;\n public x: number;\n public scrollBottom: number;\n public scrollTop: number;\n public tabs: any;\n public savedY: number;\n public savedX: number;\n\n /**\n * Create a new Buffer.\n * @param _terminal The terminal the Buffer will belong to.\n * @param _hasScrollback Whether the buffer should respect the scrollback of\n * the terminal.\n */\n constructor(\n private _terminal: ITerminal,\n private _hasScrollback: boolean\n ) {\n this.clear();\n }\n\n public get lines(): CircularList {\n return this._lines;\n }\n\n public get hasScrollback(): boolean {\n return this._hasScrollback && this.lines.maxLength > this._terminal.rows;\n }\n\n public get isCursorInViewport(): boolean {\n const absoluteY = this.ybase + this.y;\n const relativeY = absoluteY - this.ydisp;\n return (relativeY >= 0 && relativeY < this._terminal.rows);\n }\n\n /**\n * Gets the correct buffer length based on the rows provided, the terminal's\n * scrollback and whether this buffer is flagged to have scrollback or not.\n * @param rows The terminal rows to use in the calculation.\n */\n private _getCorrectBufferLength(rows: number): number {\n if (!this._hasScrollback) {\n return rows;\n }\n\n const correctBufferLength = rows + this._terminal.options.scrollback;\n\n return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n }\n\n /**\n * Fills the buffer's viewport with blank lines.\n */\n public fillViewportRows(): void {\n if (this._lines.length === 0) {\n let i = this._terminal.rows;\n while (i--) {\n this.lines.push(this._terminal.blankLine());\n }\n }\n }\n\n /**\n * Clears the buffer to it's initial state, discarding all previous data.\n */\n public clear(): void {\n this.ydisp = 0;\n this.ybase = 0;\n this.y = 0;\n this.x = 0;\n this._lines = new CircularList(this._getCorrectBufferLength(this._terminal.rows));\n this.scrollTop = 0;\n this.scrollBottom = this._terminal.rows - 1;\n this.setupTabStops();\n }\n\n /**\n * Resizes the buffer, adjusting its data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n // Increase max length if needed before adjustments to allow space to fill\n // as required.\n const newMaxLength = this._getCorrectBufferLength(newRows);\n if (newMaxLength > this._lines.maxLength) {\n this._lines.maxLength = newMaxLength;\n }\n\n // The following adjustments should only happen if the buffer has been\n // initialized/filled.\n if (this._lines.length > 0) {\n // Deal with columns increasing (we don't do anything when columns reduce)\n if (this._terminal.cols < newCols) {\n const ch: CharData = [this._terminal.defAttr, ' ', 1, 32]; // does xterm use the default attr?\n for (let i = 0; i < this._lines.length; i++) {\n // TODO: This should be removed, with tests setup for the case that was\n // causing the underlying bug, see https://github.com/sourcelair/xterm.js/issues/824\n if (this._lines.get(i) === undefined) {\n this._lines.set(i, this._terminal.blankLine(undefined, undefined, newCols));\n }\n while (this._lines.get(i).length < newCols) {\n this._lines.get(i).push(ch);\n }\n }\n }\n\n // Resize rows in both directions as needed\n let addToY = 0;\n if (this._terminal.rows < newRows) {\n for (let y = this._terminal.rows; y < newRows; y++) {\n if (this._lines.length < newRows + this.ybase) {\n if (this.ybase > 0 && this._lines.length <= this.ybase + this.y + addToY + 1) {\n // There is room above the buffer and there are no empty elements below the line,\n // scroll up\n this.ybase--;\n addToY++;\n if (this.ydisp > 0) {\n // Viewport is at the top of the buffer, must increase downwards\n this.ydisp--;\n }\n } else {\n // Add a blank line if there is no buffer left at the top to scroll to, or if there\n // are blank lines after the cursor\n this._lines.push(this._terminal.blankLine(undefined, undefined, newCols));\n }\n }\n }\n } else { // (this._terminal.rows >= newRows)\n for (let y = this._terminal.rows; y > newRows; y--) {\n if (this._lines.length > newRows + this.ybase) {\n if (this._lines.length > this.ybase + this.y + 1) {\n // The line is a blank line below the cursor, remove it\n this._lines.pop();\n } else {\n // The line is the cursor, scroll down\n this.ybase++;\n this.ydisp++;\n }\n }\n }\n }\n\n // Reduce max length if needed after adjustments, this is done after as it\n // would otherwise cut data from the bottom of the buffer.\n if (newMaxLength < this._lines.maxLength) {\n // Trim from the top of the buffer and adjust ybase and ydisp.\n const amountToTrim = this._lines.length - newMaxLength;\n if (amountToTrim > 0) {\n this._lines.trimStart(amountToTrim);\n this.ybase = Math.max(this.ybase - amountToTrim, 0);\n this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n }\n this._lines.maxLength = newMaxLength;\n }\n\n // Make sure that the cursor stays on screen\n if (this.y >= newRows) {\n this.y = newRows - 1;\n }\n if (addToY) {\n this.y += addToY;\n }\n\n if (this.x >= newCols) {\n this.x = newCols - 1;\n }\n\n this.scrollTop = 0;\n }\n\n this.scrollBottom = newRows - 1;\n }\n\n /**\n * Translates a buffer line to a string, with optional start and end columns.\n * Wide characters will count as two columns in the resulting string. This\n * function is useful for getting the actual text underneath the raw selection\n * position.\n * @param line The line being translated.\n * @param trimRight Whether to trim whitespace to the right.\n * @param startCol The column to start at.\n * @param endCol The column to end at.\n */\n public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol: number = null): string {\n // Get full line\n let lineString = '';\n const line = this.lines.get(lineIndex);\n if (!line) {\n return '';\n }\n\n // Initialize column and index values. Column values represent the actual\n // cell column, indexes represent the index in the string. Indexes are\n // needed here because some chars are 0 characters long (eg. after wide\n // chars) and some chars are longer than 1 characters long (eg. emojis).\n let startIndex = startCol;\n endCol = endCol || line.length;\n let endIndex = endCol;\n\n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n lineString += char[CHAR_DATA_CHAR_INDEX];\n // Adjust start and end cols for wide characters if they affect their\n // column indexes\n if (char[CHAR_DATA_WIDTH_INDEX] === 0) {\n if (startCol >= i) {\n startIndex--;\n }\n if (endCol >= i) {\n endIndex--;\n }\n } else {\n // Adjust the columns to take glyphs that are represented by multiple\n // code points into account.\n if (char[CHAR_DATA_CHAR_INDEX].length > 1) {\n if (startCol > i) {\n startIndex += char[CHAR_DATA_CHAR_INDEX].length - 1;\n }\n if (endCol > i) {\n endIndex += char[CHAR_DATA_CHAR_INDEX].length - 1;\n }\n }\n }\n }\n\n // Calculate the final end col by trimming whitespace on the right of the\n // line if needed.\n if (trimRight) {\n const rightWhitespaceIndex = lineString.search(/\\s+$/);\n if (rightWhitespaceIndex !== -1) {\n endIndex = Math.min(endIndex, rightWhitespaceIndex);\n }\n // Return the empty string if only trimmed whitespace is selected\n if (endIndex <= startIndex) {\n return '';\n }\n }\n\n return lineString.substring(startIndex, endIndex);\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n if (i != null) {\n if (!this.tabs[i]) {\n i = this.prevStop(i);\n }\n } else {\n this.tabs = {};\n i = 0;\n }\n\n for (; i < this._terminal.cols; i += this._terminal.options.tabStopWidth) {\n this.tabs[i] = true;\n }\n }\n\n /**\n * Move the cursor to the previous tab stop from the given position (default is current).\n * @param x The position to move the cursor to the previous tab stop.\n */\n public prevStop(x?: number): number {\n if (x == null) {\n x = this.x;\n }\n while (!this.tabs[--x] && x > 0);\n return x >= this._terminal.cols ? this._terminal.cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Move the cursor one tab stop forward from the given position (default is current).\n * @param x The position to move the cursor one tab stop forward.\n */\n public nextStop(x?: number): number {\n if (x == null) {\n x = this.x;\n }\n while (!this.tabs[++x] && x < this._terminal.cols);\n return x >= this._terminal.cols ? this._terminal.cols - 1 : x < 0 ? 0 : x;\n }\n}\n",null],"names":[],"mappings":"AkCAA;;;ADMA;AAGa;AACA;AACA;AACA;AACA;AASb;AAmBA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AACA;;;AAAA;AAEA;AAAA;AACA;AACA;;;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;;;AAAA;AAOA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAGA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAYA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAjSa;;;;;;;;;;;;;;;;;ADhBb;AACA;AAMA;AAAA;AASA;AAAA;AAAA;AAEA;AACA;AAIA;AACA;AAEA;;AACA;AAMA;AAAA;AACA;AACA;;;AAAA;AAMA;AAAA;AACA;AACA;;;AAAA;AAMA;AAAA;AACA;AACA;;;AAAA;AAKA;AAIA;AAEA;AACA;AACA;AAKA;AAGA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAxFa;;;;;;;ADRA;AAGb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;ADpJa;AAKA;AAYb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AAMA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AD7OA;AAwBA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAOA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AAUA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAUA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AACA;AAAA;AApNa;;;;;;;ADRb;AAAA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AACA;AAAC;;;;;;;ADvED;AAGA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AA/Da;;;;;;;ADAb;AACA;AAEA;AACA;AACA;AASA;AACA;AAAA;AAAA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AAIA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AACA;AAMA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAOA;AACA;AACA;AAOA;AACA;AACA;AAMA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAuCA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAwFA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAKA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAoFA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAIA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAIA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAIA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAyBA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AAGA;AACA;AAGA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAz5Ca;;;;;;;;;;;;;;;;;ADfb;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAKA;AAAA;AAeA;AAAA;AACA;AARA;AAIA;AAOA;AACA;AACA;AACA;AACA;;AACA;AAMA;AACA;AACA;AAOA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AAMA;AACA;AACA;AAYA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;AAAA;AAAA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AASA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AA3PA;AA4PA;AAlQA;AAAa;;;;;;;ADhCb;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAKA;AACA;AACA;AAEA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAKA;AACA;AAIA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AAIA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAMA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AAOA;AACA;AACA;AAQA;AACA;AACA;AAQA;AACA;AACA;AAOA;AACA;AACA;AAKA;AACA;AACA;AAMA;AACA;AACA;AACA;AAKA;AACA;AACA;AASA;AAAA;AAjfa;;;;;;;;;;;;;;;;;ADnKb;AACA;AAGA;AAEA;AAEA;AAMA;AAKA;AAKA;AAMA;AAEA;AACA;AAaA;AAAA;AACA;AACA;AACA;AACA;AAUA;AAAA;AAiCA;AAAA;AACA;AACA;AACA;AARA;AAWA;AACA;AAEA;AACA;;AACA;AAKA;AAAA;AACA;AACA;AAMA;AACA;AAMA;AACA;AACA;AACA;AAKA;AACA;AACA;AAOA;AACA;AACA;AACA;AAEA;AAAA;;;AAAA;AACA;AAAA;;;AAAA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAAA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;;;AAAA;AAKA;AACA;AACA;AACA;AACA;AAOA;AAAA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AACA;AAMA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAGA;AAGA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAIA;AAIA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AAIA;AACA;AACA;AAAA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AAEA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAIA;AAEA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAOA;AAGA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAjqBa;;;;;;;ADtDb;AAuBA;AACA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAKA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;;AAAA;AAMA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAxHa;;;;;;;;;;;;;;;;;ADYb;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AAUA;AAOA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAAA;AA8HA;AACA;AADA;AA3GA;AA+GA;AACA;;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAKA;AAEA;AACA;AAKA;AACA;AACA;AAEA;AAAA;AACA;AACA;;;AAAA;AAMA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAAA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAKA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAOA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAGA;AAGA;AAIA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAOA;AAEA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAYA;AAAA;AACA;AACA;AACA;AAKA;AACA;AACA;AAGA;AAGA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAIA;AACA;AACA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAQA;AAOA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AAIA;AACA;AAKA;AACA;AACA;AAGA;AAIA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAMA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAQA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAIA;AACA;AACA;AAGA;AACA;AAQA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AAKA;AACA;AACA;AAKA;AACA;AACA;AAMA;AAAA;AACA;AAKA;AAGA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AAOA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAMA;AACA;AACA;AAWA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AAEA;AACA;AAQA;AACA;AACA;AACA;AACA;AAEA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAMA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AASA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAMA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAKA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAQA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAMA;AACA;AAAA;AACA;AAAA;AAOA;AAKA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AASA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAMA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAMA;AAOA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AA//Da;AAqgEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAAC;AAGD;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;AD9rEA;AAAA;AACA;AACA;AACA;AACA;AAAC;;;;;;;ADrBD;AAcA;AAAA;AACA;AACA;AACA;AACA;AAjBA;AACA;AACA;AACA;AAgBA;AAGA;AACA;AAEA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAQA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAMA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAnIa;;;;;;;ADOb;AACA;AACA;AACA;AACA;AACA;AALA;AAWA;AACA;AACA;AACA;AACA;AACA;AALA;AAWA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AATA;AAgBA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAzBA;AAgCA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AApBA;AA4BA;AACA;AAGA;AACA;AACA;AANA;;;;;;;AD9GA;AAUA;AAWA;AAAA;AACA;AAXA;AAEA;AAIA;AACA;AACA;AAKA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAIA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AArKa;AAuKb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAXa;;;;;;;ADlLb;AAEA;AAEa;AACb;AAEA;AAYA;AAIA;AACA;AAdA;AACA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAOA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAWA;AACA;AAKA;AAQA;AAAA;AACA;AAKA;AAQA;AACA;AAKA;AAQA;AACA;AACA;AAKA;AAKA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AAKA;AAAA;AACA;AACA;AAKA;AACA;AAYA;AACA;AACA;AACA;AACA;AAIA;AAgBA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AASA;AAAA;AACA;AACA;AAIA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AAIA;AACA;AAOA;AACA;AACA;AAKA;AACA;AACA;AAAA;AAhUsB;;;;;;;ADPtB;AAEa;AAgBb;AAQA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvCA;AAyCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AACA;AACA;AAJA;AAMA;AAIA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;ADrNA;AACA;AACA;AACA;AACA;AACa;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAKA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA1Da;;;;;;;;;;;;;;;;;AD5Db;AAGA;AAcA;AAEA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AApMa;AAsMb;AAcA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAMA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;AD5VA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA3Ba;;;;;;;;;;;;;;;;;ADKb;AACA;AAEA;AAAA;AAGA;AAAA;AAFA;AAIA;AACA;;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAnCa;;;;;;;;;;;;;;;;;ADNb;AACA;AACA;AACA;AAGA;AACA;AAEA;AAAA;AAWA;AAAA;AAAA;AATA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAMA;AAKA;AAMA;AAIA;AAGA;AAIA;AAIA;AACA;AAOA;AACA;AAQA;AACA;AAGA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AA5Ma;;;;;;;;;;;;;;;;;ADNb;AAEA;AAAA;AAGA;AAAA;AAEA;AACA;AACA;AACA;;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAGA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AA5Ea;;;;;;;;;;;;;;;;;ADLb;AACA;AACA;AAEA;AAOA;AAEA;AAAA;AAMA;AAAA;AAFA;AAIA;;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAiBA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAIA;AAQA;AACA;AAMA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAKA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAKA;AAGA;AAGA;AACA;AACA;AAOA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAnOa;;;;;;;ADZb;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAC;;;;;;;ADVD;AAEA;AACA;AACA;AAEa;AACA;AAKA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ADhBb;AAQA;AAAA;AAOA;AAAA;AAEA;AACA;;AACA;AAEA;AAAA;AACA;AACA;;;AAAA;AAEA;AAAA;AACA;AACA;;;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAtDa;;;;;;;;;;;;;;;;;ADRb;AAOA;AAAA;AAKA;AAAA;AACA;AAGA;AACA;AACA;;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAjBA;AAmBA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AATA;AAWA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAAA;AAUA;AACA;AACA;AAUA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAMA;AACA;AACA;AAWA;AAAA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AAAA;AAxMa;;;;;;;ADFb;AACA;AACA;AAFA;AAEC;;;;;;;ADJD;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAeA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AAEA;AACA;AAYA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAtFa;;;;;;;ADCA;;;;;;;ADFb;AAEA;;;"} \ No newline at end of file diff --git a/BTPanel/static/build/xterm.min.css b/BTPanel/static/build/xterm.min.css new file mode 100644 index 00000000..4f3021b5 --- /dev/null +++ b/BTPanel/static/build/xterm.min.css @@ -0,0 +1,2 @@ +.xterm{font-feature-settings:"liga" 0;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:0}.xterm .xterm-helpers{position:absolute;top:0;z-index:10}.xterm .xterm-helper-textarea{position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-10;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm{cursor:text}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:100;color:transparent}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:.5}.xterm-underline{text-decoration:underline} +/*# sourceMappingURL=xterm.min.css.map */ \ No newline at end of file diff --git a/BTPanel/static/build/xterm.min.css.map b/BTPanel/static/build/xterm.min.css.map new file mode 100644 index 00000000..a5e42ebf --- /dev/null +++ b/BTPanel/static/build/xterm.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["xterm.css"],"names":[],"mappings":"AAqCA,OACI,sBAAuB,OAAO,EAC9B,SAAU,SACV,YAAa,KACb,gBAAiB,KACjB,oBAAqB,KAGzB,aACA,aACI,QAAS,EAGb,sBACI,SAAU,SACV,IAAK,EAKL,QAAS,GAGb,8BAKI,SAAU,SACV,QAAS,EACT,KAAM,QACN,IAAK,EACL,MAAO,EACP,OAAQ,EACR,QAAS,IAET,YAAa,OACb,SAAU,OACV,OAAQ,KAGZ,yBAEI,WAAY,KACZ,MAAO,KACP,QAAS,KACT,SAAU,SACV,YAAa,OACb,QAAS,EAGb,gCACI,QAAS,MAGb,uBAEI,iBAAkB,KAClB,WAAY,OACZ,OAAQ,QACR,SAAU,SACV,MAAO,EACP,KAAM,EACN,IAAK,EACL,OAAQ,EAGZ,qBACI,SAAU,SAGd,4BACI,SAAU,SACV,KAAM,EACN,IAAK,EAGT,0BACI,WAAY,OAGhB,4BACI,QAAS,aACT,WAAY,OACZ,SAAU,SACV,IAAK,EACL,KAAM,QACN,YAAa,OAGjB,OACI,OAAQ,KAGZ,2BAEI,OAAQ,QAGZ,4BACI,OAAQ,QAGZ,2BAEI,OAAQ,UAGZ,4BACA,sBACI,SAAU,SACV,KAAM,EACN,IAAK,EACL,OAAQ,EACR,MAAO,EACP,QAAS,IACT,MAAO,YAGX,oBACI,SAAU,SACV,KAAM,QACN,MAAO,IACP,OAAQ,IACR,SAAU,OAGd,WACI,QAAS,GAGb,iBACI,gBAAiB"} \ No newline at end of file diff --git a/BTPanel/static/build/xterm.min.js b/BTPanel/static/build/xterm.min.js new file mode 100644 index 00000000..2e95797b --- /dev/null +++ b/BTPanel/static/build/xterm.min.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Terminal=e()}}(function(){return function s(o,a,l){function h(t,e){if(!a[t]){if(!o[t]){var i="function"==typeof require&&require;if(!e&&i)return i(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var n=a[t]={exports:{}};o[t][0].call(n.exports,function(e){return h(o[t][1][e]||e)},n,n.exports,s,o,a,l)}return a[t].exports}for(var c="function"==typeof require&&require,e=0;ee;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()},_.prototype._createAccessibilityTreeNode=function(){var e=document.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e},_.prototype._onTab=function(e){for(var t=0;tthis._rows},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"isCursorInViewport",{get:function(){var e=this.ybase+this.y-this.ydisp;return 0<=e&&ei.MAX_BUFFER_SIZE?i.MAX_BUFFER_SIZE:t},o.prototype.fillViewportRows=function(e){if(0===this.lines.length){void 0===e&&(e=H.DEFAULT_ATTR_DATA);for(var t=this._rows;t--;)this.lines.push(this.getBlankLine(e))}},o.prototype.clear=function(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new r.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()},o.prototype.resize=function(e,t){var i=this.getNullCell(H.DEFAULT_ATTR_DATA),r=this._getCorrectBufferLength(t);if(r>this.lines.maxLength&&(this.lines.maxLength=r),0t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(re))for(n=0;nthis._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))},o.prototype._reflowLarger=function(e,t){var i=O.reflowLargerGetLinesToRemove(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(H.DEFAULT_ATTR_DATA));if(0A+M){for(var R=T.newLines.length-1;0<=R;R--)this.lines.set(d--,T.newLines[R]);d++,S.push({index:A+1,amount:T.newLines.length}),M+=T.newLines.length,T=r[++x]}else this.lines.set(d,E[A--]);var k=0;for(d=S.length-1;0<=d;d--)S[d].index+=k,this.lines.onInsertEmitter.fire(S[d]),k+=S[d].amount;var D=Math.max(0,L+n-this.lines.maxLength);0=this._cols?this._cols-1:e<0?0:e},o.prototype.nextStop=function(e){for(null==e&&(e=this.x);!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e},o.prototype.addMarker=function(e){var t=this,i=new n.Marker(e);return this.markers.push(i),i.register(this.lines.onTrim(function(e){i.line-=e,i.line<0&&i.dispose()})),i.register(this.lines.onInsert(function(e){i.line>=e.index&&(i.line+=e.amount)})),i.register(this.lines.onDelete(function(e){i.line>=e.index&&i.linee.index&&(i.line-=e.amount)})),i.register(i.onDispose(function(){return t._removeMarker(i)})),i},o.prototype._removeMarker=function(e){this.markers.splice(this.markers.indexOf(e),1)},o.prototype.iterator=function(e,t,i,r,n){return new a(this,e,t,i,r,n)},o);function o(e,t){this._terminal=e,this._hasScrollback=t,this.savedCurAttrData=H.DEFAULT_ATTR_DATA.clone(),this.markers=[],this._nullCell=H.CellData.fromCharData([0,H.NULL_CELL_CHAR,H.NULL_CELL_WIDTH,H.NULL_CELL_CODE]),this._whitespaceCell=H.CellData.fromCharData([0,H.WHITESPACE_CELL_CHAR,H.WHITESPACE_CELL_WIDTH,H.WHITESPACE_CELL_CODE]),this._cols=this._terminal.cols,this._rows=this._terminal.rows,this.clear()}i.Buffer=s;var a=(l.prototype.hasNext=function(){return this._currentthis._endIndex+this._endOverscan&&(e.last=this._endIndex+this._endOverscan),e.first=Math.max(e.first,0),e.last=Math.min(e.last,this._buffer.lines.length);for(var t="",i=e.first;i<=e.last;++i)t+=this._buffer.translateBufferLineToString(i,this._trimRight);return this._current=e.last+1,{range:e,content:t}},l);function l(e,t,i,r,n,s){void 0===i&&(i=0),void 0===r&&(r=e.lines.length),void 0===n&&(n=0),void 0===s&&(s=0),this._buffer=e,this._trimRight=t,this._startIndex=i,this._endIndex=r,this._startOverscan=n,this._endOverscan=s,this._startIndex<0&&(this._startIndex=0),this._endIndex>this._buffer.lines.length&&(this._endIndex=this._buffer.lines.length),this._current=this._startIndex}i.BufferStringIterator=a},{"./common/CircularList":20,"./core/buffer/BufferLine":29,"./core/buffer/BufferReflow":30,"./core/buffer/Marker":31}],3:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=e("./Buffer"),n=e("./common/EventEmitter2"),s=(Object.defineProperty(o.prototype,"onBufferActivate",{get:function(){return this._onBufferActivate.event},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"alt",{get:function(){return this._alt},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"active",{get:function(){return this._activeBuffer},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"normal",{get:function(){return this._normal},enumerable:!0,configurable:!0}),o.prototype.activateNormalBuffer=function(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))},o.prototype.activateAltBuffer=function(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))},o.prototype.resize=function(e,t){this._normal.resize(e,t),this._alt.resize(e,t)},o.prototype.setupTabStops=function(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)},o);function o(e){this._terminal=e,this._onBufferActivate=new n.EventEmitter2,this._normal=new r.Buffer(this._terminal,!0),this._normal.fillViewportRows(),this._alt=new r.Buffer(this._terminal,!1),this._activeBuffer=this._normal,this.setupTabStops()}i.BufferSet=s},{"./Buffer":2,"./common/EventEmitter2":23}],4:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=e("./common/EventEmitter2"),n=(Object.defineProperty(s.prototype,"onCharSizeChanged",{get:function(){return this._onCharSizeChanged.event},enumerable:!0,configurable:!0}),Object.defineProperty(s.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),Object.defineProperty(s.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),s.prototype.measure=function(e){this._measureElement.style.fontFamily=e.fontFamily,this._measureElement.style.fontSize=e.fontSize+"px";var t=this._measureElement.getBoundingClientRect();if(0!==t.width&&0!==t.height){var i=Math.ceil(t.height);this._width===t.width&&this._height===i||(this._width=t.width,this._height=i,this._onCharSizeChanged.fire())}},s);function s(e,t){this._onCharSizeChanged=new r.EventEmitter2,this._document=e,this._parentElement=t,this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W",this._measureElement.setAttribute("aria-hidden","true"),this._parentElement.appendChild(this._measureElement)}i.CharMeasure=n},{"./common/EventEmitter2":23}],5:[function(e,t,o){"use strict";Object.defineProperty(o,"__esModule",{value:!0});var a=e("./common/TypedArrayUtils");o.wcwidth=function(e){var t=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],i=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];var r=0|e.control,n=new Uint8Array(65536);a.fill(n,1),n[0]=e.nul,a.fill(n,e.control,1,32),a.fill(n,e.control,127,160),a.fill(n,2,4352,4448),n[9001]=2,n[9002]=2,a.fill(n,2,11904,42192),n[12351]=1,a.fill(n,2,44032,55204),a.fill(n,2,63744,64256),a.fill(n,2,65040,65050),a.fill(n,2,65072,65136),a.fill(n,2,65280,65377),a.fill(n,2,65504,65511);for(var s=0;st[n][1])return!1;for(;r<=n;)if(e>t[i=r+n>>1][1])r=1+i;else{if(!(e=i)return t+o.wcwidth(n);var s=e.charCodeAt(r);56320<=s&&s<=57343?n=1024*(n-55296)+s-56320+65536:t+=o.wcwidth(s)}t+=o.wcwidth(n)}return t}},{"./common/TypedArrayUtils":26}],6:[function(e,t,i){"use strict";function r(e){return e.replace(/\r?\n/g,"\r")}function n(e,t){return t?"[200~"+e+"[201~":e}function s(e,t){var i=t.screenElement.getBoundingClientRect(),r=e.clientX-i.left-10,n=e.clientY-i.top-10;t.textarea.style.position="absolute",t.textarea.style.width="20px",t.textarea.style.height="20px",t.textarea.style.left=r+"px",t.textarea.style.top=n+"px",t.textarea.style.zIndex="1000",t.textarea.focus(),setTimeout(function(){t.textarea.style.position=null,t.textarea.style.width=null,t.textarea.style.height=null,t.textarea.style.left=null,t.textarea.style.top=null,t.textarea.style.zIndex=null},200)}Object.defineProperty(i,"__esModule",{value:!0}),i.prepareTextForTerminal=r,i.bracketTextForPaste=n,i.copyHandler=function(e,t,i){t.browser.isMSIE?window.clipboardData.setData("Text",i.selectionText):e.clipboardData.setData("text/plain",i.selectionText),e.preventDefault()},i.pasteHandler=function(t,i){function e(e){e=n(e=r(e),i.bracketedPasteMode),i.handler(e),i.textarea.value="",i.emit("paste",e),i.cancel(t)}t.stopPropagation(),i.browser.isMSIE?window.clipboardData&&e(window.clipboardData.getData("Text")):t.clipboardData&&e(t.clipboardData.getData("text/plain"))},i.moveTextAreaUnderMouseCursor=s,i.rightClickHandler=function(e,t,i,r){s(e,t),r&&!i.isClickInSelection(e)&&i.selectWordAtCursor(e),t.textarea.value=i.selectionText,t.textarea.select()}},{}],7:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=(n.prototype.compositionstart=function(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent="",this._compositionView.classList.add("active")},n.prototype.compositionupdate=function(e){var t=this;this._compositionView.textContent=e.data,this.updateCompositionElements(),setTimeout(function(){t._compositionPosition.end=t._textarea.value.length},0)},n.prototype.compositionend=function(){this._finalizeComposition(!0)},n.prototype.keydown=function(e){if(this._isComposing||this._isSendingComposition){if(229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this._finalizeComposition(!1)}return 229!==e.keyCode||(this._handleAnyTextareaChanges(),!1)},n.prototype._finalizeComposition=function(e){var t=this;if(this._compositionView.classList.remove("active"),this._isComposing=!1,this._clearTextareaPosition(),e){var i={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout(function(){if(t._isSendingComposition){t._isSendingComposition=!1;var e=void 0;e=t._isComposing?t._textarea.value.substring(i.start,i.end):t._textarea.value.substring(i.start),t._terminal.handler(e)}},0)}else{this._isSendingComposition=!1;var r=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._terminal.handler(r)}},n.prototype._handleAnyTextareaChanges=function(){var t=this,i=this._textarea.value;setTimeout(function(){if(!t._isComposing){var e=t._textarea.value.replace(i,"");0>4){case 2:o=~o?o:d;break;case 3:~o&&(this._printHandler(e,o,d),o=-1),(_=this._executeHandlers[i])?_():this._executeHandlerFb(i);break;case 0:~o?(this._printHandler(e,o,d),o=-1):~a&&(f.put(e,a,d),a=-1);break;case 1:if(159=l)if(h)s.x=0,s.y++,s.y>s.scrollBottom?(s.y--,this._terminal.scroll(!0)):s.lines.get(s.y).isWrapped=!0,f=s.lines.get(s.y+s.ybase);else if(2===n)continue;if(c&&(f.insertCells(s.x,n,s.getNullCell(u)),2===f.getWidth(l-1)&&f.setCellFromCodePoint(l-1,y.NULL_CELL_CODE,y.NULL_CELL_WIDTH,u.fg,u.bg)),f.setCellFromCodePoint(s.x++,r,n,u.fg,u.bg),0e.scrollBottom&&(e.y--,this._terminal.scroll()),e.x>=this._terminal.cols&&e.x--,this._onLineFeed.fire()},C.prototype.carriageReturn=function(){this._terminal.buffer.x=0},C.prototype.backspace=function(){0=this._terminal.rows&&(this._terminal.buffer.y=this._terminal.rows-1),this._terminal.buffer.x>=this._terminal.cols&&this._terminal.buffer.x--},C.prototype.cursorForward=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.x+=t,this._terminal.buffer.x>=this._terminal.cols&&(this._terminal.buffer.x=this._terminal.cols-1)},C.prototype.cursorBackward=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.x>=this._terminal.cols&&this._terminal.buffer.x--,this._terminal.buffer.x-=t,this._terminal.buffer.x<0&&(this._terminal.buffer.x=0)},C.prototype.cursorNextLine=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.y+=t,this._terminal.buffer.y>=this._terminal.rows&&(this._terminal.buffer.y=this._terminal.rows-1),this._terminal.buffer.x=0},C.prototype.cursorPrecedingLine=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.y-=t,this._terminal.buffer.y<0&&(this._terminal.buffer.y=0),this._terminal.buffer.x=0},C.prototype.cursorCharAbsolute=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.x=t-1},C.prototype.cursorPosition=function(e){var t,i=e[0]-1;t=2<=e.length?e[1]-1:0,i<0?i=0:i>=this._terminal.rows&&(i=this._terminal.rows-1),t<0?t=0:t>=this._terminal.cols&&(t=this._terminal.cols-1),this._terminal.buffer.x=t,this._terminal.buffer.y=i},C.prototype.cursorForwardTab=function(e){for(var t=e[0]||1;t--;)this._terminal.buffer.x=this._terminal.buffer.nextStop()},C.prototype._eraseInBufferLine=function(e,t,i,r){void 0===r&&(r=!1);var n=this._terminal.buffer.lines.get(this._terminal.buffer.ybase+e);n.replaceCells(t,i,this._terminal.buffer.getNullCell(this._terminal.eraseAttrData())),r&&(n.isWrapped=!1)},C.prototype._resetBufferLine=function(e){this._eraseInBufferLine(e,0,this._terminal.cols,!0)},C.prototype.eraseInDisplay=function(e){var t;switch(e[0]){case 0:for(t=this._terminal.buffer.y,this._terminal.updateRange(t),this._eraseInBufferLine(t++,this._terminal.buffer.x,this._terminal.cols,0===this._terminal.buffer.x);t=this._terminal.cols&&(this._terminal.buffer.lines.get(t+1).isWrapped=!1);t--;)this._resetBufferLine(t);this._terminal.updateRange(0);break;case 2:for(t=this._terminal.rows,this._terminal.updateRange(t-1);t--;)this._resetBufferLine(t);this._terminal.updateRange(0);break;case 3:var i=this._terminal.buffer.lines.length-this._terminal.rows;0=this._terminal.cols&&(this._terminal.buffer.x=this._terminal.cols-1)},C.prototype.hPositionRelative=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.x+=t,this._terminal.buffer.x>=this._terminal.cols&&(this._terminal.buffer.x=this._terminal.cols-1)},C.prototype.repeatPrecedingCharacter=function(e){var t=this._terminal.buffer,i=t.lines.get(t.ybase+t.y);i.loadCell(t.x-1,this._workCell),i.replaceCells(t.x,t.x+(e[0]||1),void 0!==this._workCell.content?this._workCell:t.getNullCell(y.DEFAULT_ATTR_DATA))},C.prototype.sendDeviceAttributes=function(e,t){0"===t&&(this._terminal.is("xterm")?this._terminal.handler(o.C0.ESC+"[>0;276;0c"):this._terminal.is("rxvt-unicode")?this._terminal.handler(o.C0.ESC+"[>85;95;0c"):this._terminal.is("linux")?this._terminal.handler(e[0]+"c"):this._terminal.is("screen")&&this._terminal.handler(o.C0.ESC+"[>83;40003;0c")):this._terminal.is("xterm")||this._terminal.is("rxvt-unicode")||this._terminal.is("screen")?this._terminal.handler(o.C0.ESC+"[?1;2c"):this._terminal.is("linux")&&this._terminal.handler(o.C0.ESC+"[?6c"))},C.prototype.linePosAbsolute=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.y=t-1,this._terminal.buffer.y>=this._terminal.rows&&(this._terminal.buffer.y=this._terminal.rows-1)},C.prototype.vPositionRelative=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.y+=t,this._terminal.buffer.y>=this._terminal.rows&&(this._terminal.buffer.y=this._terminal.rows-1),this._terminal.buffer.x>=this._terminal.cols&&this._terminal.buffer.x--},C.prototype.hVPosition=function(e){e[0]<1&&(e[0]=1),e[1]<1&&(e[1]=1),this._terminal.buffer.y=e[0]-1,this._terminal.buffer.y>=this._terminal.rows&&(this._terminal.buffer.y=this._terminal.rows-1),this._terminal.buffer.x=e[1]-1,this._terminal.buffer.x>=this._terminal.cols&&(this._terminal.buffer.x=this._terminal.cols-1)},C.prototype.tabClear=function(e){var t=e[0];t<=0?delete this._terminal.buffer.tabs[this._terminal.buffer.x]:3===t&&(this._terminal.buffer.tabs={})},C.prototype.setMode=function(e,t){if(1",function(){return r.keypadNumericMode()}),r._parser.setEscHandler("c",function(){return r.reset()}),r._parser.setEscHandler("n",function(){return r.setgLevel(2)}),r._parser.setEscHandler("o",function(){return r.setgLevel(3)}),r._parser.setEscHandler("|",function(){return r.setgLevel(3)}),r._parser.setEscHandler("}",function(){return r.setgLevel(2)}),r._parser.setEscHandler("~",function(){return r.setgLevel(1)}),r._parser.setEscHandler("%@",function(){return r.selectDefaultCharset()}),r._parser.setEscHandler("%G",function(){return r.selectDefaultCharset()});function i(e){n._parser.setEscHandler("("+e,function(){return r.selectCharset("("+e)}),n._parser.setEscHandler(")"+e,function(){return r.selectCharset(")"+e)}),n._parser.setEscHandler("*"+e,function(){return r.selectCharset("*"+e)}),n._parser.setEscHandler("+"+e,function(){return r.selectCharset("+"+e)}),n._parser.setEscHandler("-"+e,function(){return r.selectCharset("-"+e)}),n._parser.setEscHandler("."+e,function(){return r.selectCharset("."+e)}),n._parser.setEscHandler("/"+e,function(){return r.selectCharset("/"+e)})}var n=this;for(var s in a.CHARSETS)i(s);return r._parser.setErrorHandler(function(e){return r._terminal.error("Parsing error: ",e),e}),r._parser.setDcsHandler("$q",new f(r._terminal)),r}i.InputHandler=g},{"./CharWidth":5,"./EscapeSequenceParser":8,"./common/EventEmitter2":23,"./common/Lifecycle":24,"./common/TypedArrayUtils":26,"./common/data/EscapeSequences":28,"./core/buffer/BufferLine":29,"./core/data/Charsets":32,"./core/input/TextDecoder":34}],10:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var u=e("./MouseZoneManager"),f=e("./CharWidth"),r=e("./common/EventEmitter2"),n=(Object.defineProperty(a.prototype,"onLinkHover",{get:function(){return this._onLinkHover.event},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onLinkLeave",{get:function(){return this._onLinkLeave.event},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onLinkTooltip",{get:function(){return this._onLinkTooltip.event},enumerable:!0,configurable:!0}),a.prototype.attachToDom=function(e){this._mouseZoneManager=e},a.prototype.linkifyRows=function(e,t){var i=this;this._mouseZoneManager&&(null===this._rowsToLinkify.start?(this._rowsToLinkify.start=e,this._rowsToLinkify.end=t):(this._rowsToLinkify.start=Math.min(this._rowsToLinkify.start,e),this._rowsToLinkify.end=Math.max(this._rowsToLinkify.end,t)),this._mouseZoneManager.clearAll(e,t),this._rowsTimeoutId&&clearTimeout(this._rowsTimeoutId),this._rowsTimeoutId=setTimeout(function(){return i._linkifyRows()},a.TIME_BEFORE_LINKIFY))},a.prototype._linkifyRows=function(){this._rowsTimeoutId=null;var e=this._terminal.buffer,t=e.ydisp+this._rowsToLinkify.start;if(!(t>=e.lines.length)){for(var i=e.ydisp+Math.min(this._rowsToLinkify.end,this._terminal.rows)+1,r=Math.ceil(a.OVERSCAN_CHAR_LIMIT/this._terminal.cols),n=this._terminal.buffer.iterator(!1,t,i,r,r);n.hasNext();)for(var s=n.next(),o=0;o>9&511),o.validationCallback?o.validationCallback(t,function(e){l._rowsTimeoutId||e&&l._addLink(i[1],i[0]-l._terminal.buffer.ydisp,t,o,r)}):u._addLink(i[1],i[0]-u._terminal.buffer.ydisp,t,o,r)},u=this;null!==(a=h.exec(s))&&"break"!==e(););},a.prototype._addLink=function(e,t,i,r,n){var s=this,o=f.getStringCellWidth(i),a=e%this._terminal.cols,l=t+Math.floor(e/this._terminal.cols),h=(a+o)%this._terminal.cols,c=l+Math.floor((a+o)/this._terminal.cols);0===h&&(h=this._terminal.cols,c--),this._mouseZoneManager.add(new u.MouseZone(1+a,l+1,h+1,c+1,function(e){if(r.handler)return r.handler(e,i);window.open(i,"_blank")},function(){s._onLinkHover.fire(s._createLinkHoverEvent(a,l,h,c,n)),s._terminal.element.classList.add("xterm-cursor-pointer")},function(e){s._onLinkTooltip.fire(s._createLinkHoverEvent(a,l,h,c,n)),r.hoverTooltipCallback&&r.hoverTooltipCallback(e,i)},function(){s._onLinkLeave.fire(s._createLinkHoverEvent(a,l,h,c,n)),s._terminal.element.classList.remove("xterm-cursor-pointer"),r.hoverLeaveCallback&&r.hoverLeaveCallback()},function(e){return!r.willLinkActivate||r.willLinkActivate(e,i)}))},a.prototype._createLinkHoverEvent=function(e,t,i,r,n){return{x1:e,y1:t,x2:i,y2:r,cols:this._terminal.cols,fg:n}},a.TIME_BEFORE_LINKIFY=200,a.OVERSCAN_CHAR_LIMIT=2e3,a);function a(e){this._terminal=e,this._linkMatchers=[],this._nextLinkMatcherId=0,this._onLinkHover=new r.EventEmitter2,this._onLinkLeave=new r.EventEmitter2,this._onLinkTooltip=new r.EventEmitter2,this._rowsToLinkify={start:null,end:null}}i.Linkifier=n},{"./CharWidth":5,"./MouseZoneManager":12,"./common/EventEmitter2":23}],11:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=(a.getCoordsRelativeToElement=function(e,t){var i=t.getBoundingClientRect();return[e.clientX-i.left,e.clientY-i.top]},a.prototype.getCoords=function(e,t,i,r,n,s){if(!i.width||!i.height)return null;var o=a.getCoordsRelativeToElement(e,t);return o?(o[0]=Math.ceil((o[0]+(s?this._renderCoordinator.dimensions.actualCellWidth/2:0))/this._renderCoordinator.dimensions.actualCellWidth),o[1]=Math.ceil(o[1]/this._renderCoordinator.dimensions.actualCellHeight),o[0]=Math.min(Math.max(o[0],1),r+(s?1:0)),o[1]=Math.min(Math.max(o[1],1),n),o):null},a.prototype.getRawByteCoords=function(e,t,i,r,n){var s=this.getCoords(e,t,i,r,n),o=s[0],a=s[1];return{x:o+=32,y:a+=32}},a);function a(e){this._renderCoordinator=e}i.MouseHelper=r},{}],12:[function(e,t,i){"use strict";var r,n=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)});Object.defineProperty(i,"__esModule",{value:!0});var s,o=e("./common/Lifecycle"),a=e("./ui/Lifecycle"),l=(s=o.Disposable,n(h,s),h.prototype.dispose=function(){s.prototype.dispose.call(this),this._deactivate()},h.prototype.add=function(e){this._zones.push(e),1===this._zones.length&&this._activate()},h.prototype.clearAll=function(e,t){if(0!==this._zones.length){t||(e=0,t=this._terminal.rows-1);for(var i=0;ie&&r.y1<=t+1||r.y2>e&&r.y2<=t+1||r.y1t+1)&&(this._currentZone&&this._currentZone===r&&(this._currentZone.leaveCallback(),this._currentZone=null),this._zones.splice(i--,1))}0===this._zones.length&&this._deactivate()}},h.prototype._activate=function(){this._areZonesActive||(this._areZonesActive=!0,this._terminal.element.addEventListener("mousemove",this._mouseMoveListener),this._terminal.element.addEventListener("mouseleave",this._mouseLeaveListener),this._terminal.element.addEventListener("click",this._clickListener))},h.prototype._deactivate=function(){this._areZonesActive&&(this._areZonesActive=!1,this._terminal.element.removeEventListener("mousemove",this._mouseMoveListener),this._terminal.element.removeEventListener("mouseleave",this._mouseLeaveListener),this._terminal.element.removeEventListener("click",this._clickListener))},h.prototype._onMouseMove=function(e){this._lastHoverCoords[0]===e.pageX&&this._lastHoverCoords[1]===e.pageY||(this._onHover(e),this._lastHoverCoords=[e.pageX,e.pageY])},h.prototype._onHover=function(e){var t=this,i=this._findZoneEventAt(e);i!==this._currentZone&&(this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=null,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout)),i&&((this._currentZone=i).hoverCallback&&i.hoverCallback(e),this._tooltipTimeout=setTimeout(function(){return t._onTooltip(e)},500)))},h.prototype._onTooltip=function(e){this._tooltipTimeout=null;var t=this._findZoneEventAt(e);t&&t.tooltipCallback&&t.tooltipCallback(e)},h.prototype._onMouseDown=function(e){if(this._initialSelectionLength=this._terminal.getSelection().length,this._areZonesActive){var t=this._findZoneEventAt(e);t&&t.willLinkActivate(e)&&(e.preventDefault(),e.stopImmediatePropagation())}},h.prototype._onMouseLeave=function(e){this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=null,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout))},h.prototype._onClick=function(e){var t=this._findZoneEventAt(e),i=this._terminal.getSelection().length;t&&i===this._initialSelectionLength&&(t.clickCallback(e),e.preventDefault(),e.stopImmediatePropagation())},h.prototype._findZoneEventAt=function(e){var t=this._terminal.mouseHelper.getCoords(e,this._terminal.screenElement,this._terminal.charMeasure,this._terminal.cols,this._terminal.rows);if(!t)return null;for(var i=t[0],r=t[1],n=0;n=s.x1&&i=s.x1||r===s.y2&&is.y1&&rt[1]&&e[1]=t[0]&&e[0]=t[0]},f.prototype.selectWordAtCursor=function(e){var t=this._getMouseBufferCoords(e);t&&(this._selectWordAt(t,!1),this._model.selectionEnd=null,this.refresh(!0))},f.prototype.selectAll=function(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()},f.prototype.selectLines=function(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._terminal.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._terminal.cols,t],this.refresh(),this._onSelectionChange.fire()},f.prototype._onTrim=function(e){this._model.onTrim(e)&&this.refresh()},f.prototype._getMouseBufferCoords=function(e){var t=this._terminal.mouseHelper.getCoords(e,this._terminal.screenElement,this._charMeasure,this._terminal.cols,this._terminal.rows,!0);return t?(t[0]--,t[1]--,t[1]+=this._terminal.buffer.ydisp,t):null},f.prototype._getMouseEventScrollAmount=function(e){var t=r.MouseHelper.getCoordsRelativeToElement(e,this._terminal.screenElement)[1],i=this._terminal.rows*Math.ceil(this._charMeasure.height*this._terminal.options.lineHeight);return 0<=t&&t<=i?0:(i=this._model.selectionStart[0]||0===t.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++)}},f.prototype._onDoubleClick=function(e){var t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=1,this._selectWordAt(t,!0))},f.prototype._onTripleClick=function(e){var t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))},f.prototype.shouldColumnSelect=function(e){return e.altKey&&!(a.isMac&&this._terminal.options.macOptionClickForcesSelection)},f.prototype._onMouseMove=function(e){e.stopImmediatePropagation();var t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;this._model.selectionEnd=this._getMouseBufferCoords(e),this._model.selectionEnd?(2===this._activeSelectionMode?this._model.selectionEnd[1]=r;r++){var n=e.loadCell(r,this._workCell).getChars().length;0===this._workCell.getWidth()?i--:1=this._terminal.cols)return null;var n=this._buffer.lines.get(e[1]);if(!n)return null;var s=this._buffer.translateBufferLineToString(e[1],!1),o=this._convertViewportColToCharacterIndex(n,e),a=o,l=e[0]-o,h=0,c=0,u=0,f=0;if(" "===s.charAt(o)){for(;0this._terminal.cols;)t.length-=this._terminal.cols,i++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,i]}},f.prototype._isCharWordSeparator=function(e){return 0!==e.getWidth()&&0<=" ()[]{}'\"".indexOf(e.getChars())},f.prototype._selectLineAt=function(e){var t=this._buffer.getWrappedRangeForLine(e);this._model.selectionStart=[0,t.first],this._model.selectionEnd=[this._terminal.cols,t.last],this._model.selectionStartLength=0},f);function f(e,t){this._terminal=e,this._charMeasure=t,this._enabled=!0,this._workCell=new o.CellData,this._onLinuxMouseSelection=new l.EventEmitter2,this._onRedrawRequest=new l.EventEmitter2,this._onSelectionChange=new l.EventEmitter2,this._initListeners(),this.enable(),this._model=new n.SelectionModel(e),this._activeSelectionMode=0}i.SelectionManager=u},{"./MouseHelper":11,"./SelectionModel":14,"./common/EventEmitter2":23,"./common/Platform":25,"./core/buffer/BufferLine":29,"./handlers/AltClickHandler":35}],14:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=(n.prototype.clearSelection=function(){this.selectionStart=null,this.selectionEnd=null,this.isSelectAllActive=!1,this.selectionStartLength=0},Object.defineProperty(n.prototype,"finalSelectionStart",{get:function(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"finalSelectionEnd",{get:function(){if(this.isSelectAllActive)return[this._terminal.cols,this._terminal.buffer.ybase+this._terminal.rows-1];if(!this.selectionStart)return null;if(this.selectionEnd&&!this.areSelectionValuesReversed())return this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]?[Math.max(this.selectionStart[0]+this.selectionStartLength,this.selectionEnd[0]),this.selectionEnd[1]]:this.selectionEnd;var e=this.selectionStart[0]+this.selectionStartLength;return e>this._terminal.cols?[e%this._terminal.cols,this.selectionStart[1]+Math.floor(e/this._terminal.cols)]:[e,this.selectionStart[1]]},enumerable:!0,configurable:!0}),n.prototype.areSelectionValuesReversed=function(){var e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])},n.prototype.onTrim=function(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)},n);function n(e){this._terminal=e,this.clearSelection()}i.SelectionModel=r},{}],15:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.DEFAULT_BELL_SOUND="data:audio/wav;base64,UklGRigBAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQQBAADpAFgCwAMlBZoG/wdmCcoKRAypDQ8PbRDBEQQTOxRtFYcWlBePGIUZXhoiG88bcBz7HHIdzh0WHlMeZx51HmkeUx4WHs8dah0AHXwc3hs9G4saxRnyGBIYGBcQFv8U4RPAEoYRQBACD70NWwwHC6gJOwjWBloF7gOBAhABkf8b/qv8R/ve+Xf4Ife79W/0JfPZ8Z/wde9N7ijtE+wU6xvqM+lb6H7nw+YX5mrlxuQz5Mzje+Ma49fioeKD4nXiYeJy4pHitOL04j/jn+MN5IPkFOWs5U3mDefM55/ogOl36m7rdOyE7abuyu8D8Unyj/Pg9D/2qfcb+Yn6/vuK/Qj/lAAlAg==";var r=(Object.defineProperty(n,"audioContext",{get:function(){if(!n._audioContext){var e=window.AudioContext||window.webkitAudioContext;if(!e)return console.warn("Web Audio API is not supported by this browser. Consider upgrading to the latest version"),null;n._audioContext=new e}return n._audioContext},enumerable:!0,configurable:!0}),n.prototype.playBellSound=function(){var t=n.audioContext;if(t){var i=t.createBufferSource();t.decodeAudioData(this._base64ToArrayBuffer(this._removeMimeType(this._terminal.options.bellSound)),function(e){i.buffer=e,i.connect(t.destination),i.start(0)})}},n.prototype._base64ToArrayBuffer=function(e){for(var t=window.atob(e),i=t.length,r=new Uint8Array(i),n=0;ni){var r=this.buffer.lines.length-i,n=this.buffer.ydisp-r<0;this.buffer.lines.trimStart(r),this.buffer.ybase=Math.max(this.buffer.ybase-r,0),this.buffer.ydisp=Math.max(this.buffer.ydisp-r,0),n&&this.refresh(0,this.rows-1)}}}switch(this.options[e]=t,e){case"fontFamily":case"fontSize":this._renderCoordinator&&(this._renderCoordinator.clear(),this.charMeasure.measure(this.options));break;case"drawBoldTextInBrightColors":case"experimentalCharAtlas":case"enableBold":case"letterSpacing":case"lineHeight":case"fontWeight":case"fontWeightBold":this._renderCoordinator&&(this._renderCoordinator.clear(),this._renderCoordinator.onResize(this.cols,this.rows),this.refresh(0,this.rows-1));break;case"rendererType":this._renderCoordinator&&this._renderCoordinator.setRenderer(this._createRenderer());break;case"scrollback":this.buffers.resize(this.cols,this.rows),this.viewport&&this.viewport.syncScrollArea();break;case"screenReaderMode":t?!this._accessibilityManager&&this._renderCoordinator&&(this._accessibilityManager=new E.AccessibilityManager(this,this._renderCoordinator.dimensions)):this._accessibilityManager&&(this._accessibilityManager.dispose(),this._accessibilityManager=null);break;case"tabStopWidth":this.buffers.setupTabStops();break;case"windowsMode":t?this._windowsMode||(this._windowsMode=k.applyWindowsMode(this)):this._windowsMode&&(this._windowsMode.dispose(),this._windowsMode=void 0)}this._renderCoordinator&&this._renderCoordinator.onOptionsChanged()}},I.prototype._onTextAreaFocus=function(e){this.sendFocus&&this.handler(f.C0.ESC+"[I"),this.updateCursorStyle(e),this.element.classList.add("focus"),this.showCursor(),this.emit("focus")},I.prototype.blur=function(){return this.textarea.blur()},I.prototype._onTextAreaBlur=function(){this.textarea.value="",this.refresh(this.buffer.y,this.buffer.y),this.sendFocus&&this.handler(f.C0.ESC+"[O"),this.element.classList.remove("focus"),this.emit("blur")},I.prototype._initGlobal=function(){var t=this;function e(e){return u.pasteHandler(e,t)}this._bindKeys(),this.register(C.addDisposableDomListener(this.element,"copy",function(e){t.hasSelection()&&u.copyHandler(e,t,t.selectionManager)})),this.register(C.addDisposableDomListener(this.textarea,"paste",e)),this.register(C.addDisposableDomListener(this.element,"paste",e)),g.isFirefox?this.register(C.addDisposableDomListener(this.element,"mousedown",function(e){2===e.button&&u.rightClickHandler(e,t,t.selectionManager,t.options.rightClickSelectsWord)})):this.register(C.addDisposableDomListener(this.element,"contextmenu",function(e){u.rightClickHandler(e,t,t.selectionManager,t.options.rightClickSelectsWord)})),g.isLinux&&this.register(C.addDisposableDomListener(this.element,"auxclick",function(e){1===e.button&&u.moveTextAreaUnderMouseCursor(e,t)}))},I.prototype._bindKeys=function(){var t=this,i=this;this.register(C.addDisposableDomListener(this.element,"keydown",function(e){O.activeElement===this&&i._keyDown(e)},!0)),this.register(C.addDisposableDomListener(this.element,"keypress",function(e){O.activeElement===this&&i._keyPress(e)},!0)),this.register(C.addDisposableDomListener(this.element,"keyup",function(e){!function(e){return 16===e.keyCode||17===e.keyCode||18===e.keyCode}(e)&&t.focus(),i._keyUp(e)},!0)),this.register(C.addDisposableDomListener(this.textarea,"keydown",function(e){return t._keyDown(e)},!0)),this.register(C.addDisposableDomListener(this.textarea,"keypress",function(e){return t._keyPress(e)},!0)),this.register(C.addDisposableDomListener(this.textarea,"compositionstart",function(){return t._compositionHelper.compositionstart()})),this.register(C.addDisposableDomListener(this.textarea,"compositionupdate",function(e){return t._compositionHelper.compositionupdate(e)})),this.register(C.addDisposableDomListener(this.textarea,"compositionend",function(){return t._compositionHelper.compositionend()})),this.register(this.onRender(function(){return t._compositionHelper.updateCompositionElements()})),this.register(this.onRender(function(e){return t._queueLinkification(e.start,e.end)}))},I.prototype.open=function(e){var t=this;if(this._parent=e||this._parent,!this._parent)throw new Error("Terminal requires a parent element.");this._context=this._parent.ownerDocument.defaultView,this._document=this._parent.ownerDocument,this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.setAttribute("tabindex","0"),this._parent.appendChild(this.element);var i=O.createDocumentFragment();this._viewportElement=O.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),i.appendChild(this._viewportElement),this._viewportScrollArea=O.createElement("div"),this._viewportScrollArea.classList.add("xterm-scroll-area"),this._viewportElement.appendChild(this._viewportScrollArea),this.screenElement=O.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._helperContainer=O.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),i.appendChild(this.screenElement),this._mouseZoneManager=new S.MouseZoneManager(this),this.register(this._mouseZoneManager),this.register(this.onScroll(function(){return t._mouseZoneManager.clearAll()})),this.linkifier.attachToDom(this._mouseZoneManager),this.textarea=O.createElement("textarea"),this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",v.promptLabel),this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this.register(C.addDisposableDomListener(this.textarea,"focus",function(e){return t._onTextAreaFocus(e)})),this.register(C.addDisposableDomListener(this.textarea,"blur",function(){return t._onTextAreaBlur()})),this._helperContainer.appendChild(this.textarea),this._compositionView=O.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=new l.CompositionHelper(this.textarea,this._compositionView,this),this._helperContainer.appendChild(this._compositionView),this.charMeasure=new y.CharMeasure(O,this._helperContainer),this.element.appendChild(i),this._theme=this.options.theme,this._colorManager=new D.ColorManager(O,this.options.allowTransparency),this._colorManager.setTheme(this._theme);var r=this._createRenderer();this._renderCoordinator=new H.RenderCoordinator(r,this.rows,this.screenElement),this._renderCoordinator.onRender(function(e){return t._onRender.fire(e)}),this.onResize(function(e){return t._renderCoordinator.resize(e.cols,e.rows)}),this.viewport=new c.Viewport(this,this._viewportElement,this._viewportScrollArea,this.charMeasure,this._renderCoordinator.dimensions),this.viewport.onThemeChange(this._colorManager.colors),this.register(this.viewport),this.register(this.onCursorMove(function(){return t._renderCoordinator.onCursorMove()})),this.register(this.onResize(function(){return t._renderCoordinator.onResize(t.cols,t.rows)})),this.register(this.addDisposableListener("blur",function(){return t._renderCoordinator.onBlur()})),this.register(this.addDisposableListener("focus",function(){return t._renderCoordinator.onFocus()})),this.register(this.charMeasure.onCharSizeChanged(function(){return t._renderCoordinator.onCharSizeChanged()})),this.register(this._renderCoordinator.onDimensionsChange(function(){return t.viewport.syncScrollArea()})),this.selectionManager=new m.SelectionManager(this,this.charMeasure),this.register(this.selectionManager.onSelectionChange(function(){return t._onSelectionChange.fire()})),this.register(C.addDisposableDomListener(this.element,"mousedown",function(e){return t.selectionManager.onMouseDown(e)})),this.register(this.selectionManager.onRedrawRequest(function(e){return t._renderCoordinator.onSelectionChanged(e.start,e.end,e.columnSelectMode)})),this.register(this.selectionManager.onLinuxMouseSelection(function(e){t.textarea.value=e,t.textarea.focus(),t.textarea.select()})),this.register(this.onScroll(function(){t.viewport.syncScrollArea(),t.selectionManager.refresh()})),this.register(C.addDisposableDomListener(this._viewportElement,"scroll",function(){return t.selectionManager.refresh()})),this.mouseHelper=new b.MouseHelper(this._renderCoordinator),this.element.classList.toggle("enable-mouse-events",this.mouseEvents),this.mouseEvents?this.selectionManager.disable():this.selectionManager.enable(),this.options.screenReaderMode&&(this._accessibilityManager=new E.AccessibilityManager(this,this._renderCoordinator.dimensions),this._accessibilityManager.register(this._renderCoordinator.onDimensionsChange(function(e){return t._accessibilityManager.setDimensions(e)}))),this.charMeasure.measure(this.options),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()},I.prototype._createRenderer=function(){switch(this.options.rendererType){case"canvas":return new d.Renderer(this,this._colorManager.colors);case"dom":return new A.DomRenderer(this,this._colorManager.colors);default:throw new Error('Unrecognized rendererType "'+this.options.rendererType+'"')}},I.prototype._setTheme=function(e){this._theme=e,this._colorManager&&this._colorManager.setTheme(e),this._renderCoordinator&&this._renderCoordinator.setColors(this._colorManager.colors),this.viewport&&this.viewport.onThemeChange(this._colorManager.colors)},I.prototype.bindMouse=function(){var s=this,e=this.element,o=this,r=32;function a(e){var t,i;if(t=function(e){var t,i,r,n,s;switch(e.overrideType||e.type){case"mousedown":t=null!==e.button&&void 0!==e.button?+e.button:null!==e.which&&void 0!==e.which?e.which-1:null,g.isMSIE&&(t=1===t?0:4===t?1:t);break;case"mouseup":t=3;break;case"DOMMouseScroll":t=e.detail<0?64:65;break;case"wheel":t=e.deltaY<0?64:65}return i=e.shiftKey?4:0,r=e.metaKey?8:0,n=e.ctrlKey?16:0,s=i|r|n,o.vt200Mouse?s&=n:o.normalMouse||(s=0),t=32+(s<<2)+t}(e),i=o.mouseHelper.getRawByteCoords(e,o.screenElement,o.charMeasure,o.cols,o.rows))switch(l(t,i),e.overrideType||e.type){case"mousedown":r=t;break;case"mouseup":r=32}}function n(e,t){if(o.utfMouse){if(2047=this.buffer.ybase&&(this._userScrolling=!1);var i=this.buffer.ydisp;this.buffer.ydisp=Math.max(Math.min(this.buffer.ydisp+e,this.buffer.ybase),0),i!==this.buffer.ydisp&&(t||this._onScroll.fire(this.buffer.ydisp),this.refresh(0,this.rows-1))},I.prototype.scrollPages=function(e){this.scrollLines(e*(this.rows-1))},I.prototype.scrollToTop=function(){this.scrollLines(-this.buffer.ydisp)},I.prototype.scrollToBottom=function(){this.scrollLines(this.buffer.ybase-this.buffer.ydisp)},I.prototype.scrollToLine=function(e){var t=e-this.buffer.ydisp;0!=t&&this.scrollLines(t)},I.prototype.writeUtf8=function(e){var t=this;this._isDisposed||e&&(this.writeBufferUtf8.push(e),this.options.useFlowControl&&!this._xoffSentToCatchUp&&5<=this.writeBufferUtf8.length&&(this.handler(f.C0.DC3),this._xoffSentToCatchUp=!0),!this._writeInProgress&&0e;){var r=this.writeBufferUtf8[e];if(e++,this._xoffSentToCatchUp&&this.writeBufferUtf8.length===e&&(this.handler(f.C0.DC1),this._xoffSentToCatchUp=!1),this._refreshStart=this.buffer.y,this._refreshEnd=this.buffer.y,this._inputHandler.parseUtf8(r),this.updateRange(this.buffer.y),this.refresh(this._refreshStart,this._refreshEnd),12<=Date.now()-i)break}this.writeBufferUtf8.length>e?(50e;){var r=this.writeBuffer[e];if(e++,this._xoffSentToCatchUp&&this.writeBuffer.length===e&&(this.handler(f.C0.DC1),this._xoffSentToCatchUp=!1),this._refreshStart=this.buffer.y,this._refreshEnd=this.buffer.y,this._inputHandler.parse(r),this.updateRange(this.buffer.y),this.refresh(this._refreshStart,this._refreshEnd),12<=Date.now()-i)break}this.writeBuffer.length>e?(50this._refreshEnd&&(this._refreshEnd=e)},I.prototype.maxRange=function(){this._refreshStart=0,this._refreshEnd=this.rows-1},I.prototype.clear=function(){if(0!==this.buffer.ybase||0!==this.buffer.y){this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(var e=1;ethis.buffer.scrollBottom&&(this.buffer.y--,this.scroll()),this.buffer.x>=this.cols&&this.buffer.x--},I.prototype.reverseIndex=function(){if(this.buffer.y===this.buffer.scrollTop){var e=this.buffer.scrollBottom-this.buffer.scrollTop;this.buffer.lines.shiftElements(this.buffer.y+this.buffer.ybase,e,1),this.buffer.lines.set(this.buffer.y+this.buffer.ybase,this.buffer.getBlankLine(this.eraseAttrData())),this.updateRange(this.buffer.scrollTop),this.updateRange(this.buffer.scrollBottom)}else this.buffer.y--},I.prototype.reset=function(){this.options.rows=this.rows,this.options.cols=this.cols;var e=this._customKeyEventHandler,t=this._inputHandler,i=this.cursorState,r=this.writeBuffer,n=this.writeBufferUtf8,s=this._writeInProgress,o=this._xoffSentToCatchUp,a=this._userScrolling;this._setup(),this._customKeyEventHandler=e,this._inputHandler=t,this.cursorState=i,this.writeBuffer=r,this.writeBufferUtf8=n,this._writeInProgress=s,this._xoffSentToCatchUp=o,this._userScrolling=a,this.refresh(0,this.rows-1),this.viewport&&this.viewport.syncScrollArea()},I.prototype.tabSet=function(){this.buffer.tabs[this.buffer.x]=!0},I.prototype.cancel=function(e,t){if(this.options.cancelEvents||t)return e.preventDefault(),e.stopPropagation(),!1},I.prototype._visualBell=function(){return!1},I.prototype._soundBell=function(){return"sound"===this.options.bellStyle},I);function I(e){void 0===e&&(e={});var t=s.call(this)||this;return t.browser=g,t._blankLine=null,t._onCursorMove=new M.EventEmitter2,t._onData=new M.EventEmitter2,t._onKey=new M.EventEmitter2,t._onLineFeed=new M.EventEmitter2,t._onRender=new M.EventEmitter2,t._onResize=new M.EventEmitter2,t._onScroll=new M.EventEmitter2,t._onSelectionChange=new M.EventEmitter2,t._onTitleChange=new M.EventEmitter2,t.options=T.clone(e),t._setup(),t.onCursorMove(function(){return t.emit("cursormove")}),t.onData(function(e){return t.emit("data",e)}),t.onKey(function(e){return t.emit("key",e.key,e.domEvent)}),t.onLineFeed(function(){return t.emit("linefeed")}),t.onRender(function(e){return t.emit("refresh",e)}),t.onResize(function(e){return t.emit("resize",e)}),t.onSelectionChange(function(){return t.emit("selection")}),t.onScroll(function(e){return t.emit("scroll",e)}),t.onTitleChange(function(e){return t.emit("title",e)}),t}i.Terminal=F},{"./AccessibilityManager":1,"./Buffer":2,"./BufferSet":3,"./CharMeasure":4,"./Clipboard":6,"./CompositionHelper":7,"./InputHandler":9,"./Linkifier":10,"./MouseHelper":11,"./MouseZoneManager":12,"./SelectionManager":13,"./SoundManager":15,"./Strings":16,"./Viewport":18,"./WindowsMode":19,"./common/Clone":21,"./common/EventEmitter":22,"./common/EventEmitter2":23,"./common/Platform":25,"./common/data/EscapeSequences":28,"./core/buffer/BufferLine":29,"./core/input/Keyboard":33,"./renderer/RenderCoordinator":43,"./renderer/Renderer":44,"./renderer/atlas/CharAtlasCache":48,"./renderer/dom/DomRenderer":56,"./ui/ColorManager":58,"./ui/Lifecycle":59}],18:[function(e,t,i){"use strict";var r,n=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)});Object.defineProperty(i,"__esModule",{value:!0});var o,s=e("./common/Lifecycle"),a=e("./ui/Lifecycle"),l=(o=s.Disposable,n(h,o),h.prototype.onDimensionsChance=function(e){this._dimensions=e},h.prototype.onThemeChange=function(e){this._viewportElement.style.backgroundColor=e.background.css},h.prototype._refresh=function(){var e=this;null===this._refreshAnimationFrame&&(this._refreshAnimationFrame=requestAnimationFrame(function(){return e._innerRefresh()}))},h.prototype._innerRefresh=function(){if(0this._length)for(var t=this._length;tthis._maxLength){var s=this._length+i.length-this._maxLength;this._startIndex+=s,this._length=this._maxLength,this.onTrimEmitter.fire(s)}else this._length+=i.length},s.prototype.trimStart=function(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)},s.prototype.shiftElements=function(e,t,i){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+i<0)throw new Error("Cannot shift elements in list beyond index 0");if(0this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(r=0;r=e.length)return e;i=(e.length+i)%e.length,r=r>=e.length?e.length:(e.length+r)%e.length;for(var n=i;n>>16&255,e>>>8&255,255&e]},l.fromColorRGB=function(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]},l.prototype.clone=function(){var e=new l;return e.fg=this.fg,e.bg=this.bg,e},l.prototype.isInverse=function(){return 67108864&this.fg},l.prototype.isBold=function(){return 134217728&this.fg},l.prototype.isUnderline=function(){return 268435456&this.fg},l.prototype.isBlink=function(){return 536870912&this.fg},l.prototype.isInvisible=function(){return 1073741824&this.fg},l.prototype.isItalic=function(){return 67108864&this.bg},l.prototype.isDim=function(){return 134217728&this.bg},l.prototype.getFgColorMode=function(){return 50331648&this.fg},l.prototype.getBgColorMode=function(){return 50331648&this.bg},l.prototype.isFgRGB=function(){return 50331648==(50331648&this.fg)},l.prototype.isBgRGB=function(){return 50331648==(50331648&this.bg)},l.prototype.isFgPalette=function(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)},l.prototype.isBgPalette=function(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)},l.prototype.isFgDefault=function(){return 0==(50331648&this.fg)},l.prototype.isBgDefault=function(){return 0==(50331648&this.bg)},l.prototype.getFgColor=function(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}},l.prototype.getBgColor=function(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}},l);function l(){this.fg=0,this.bg=0}o.AttributeData=s,o.DEFAULT_ATTR_DATA=Object.freeze(new s);var h,c=(i(u,h=s),u.fromCharData=function(e){var t=new u;return t.setFromCharData(e),t},u.prototype.isCombined=function(){return 2097152&this.content},u.prototype.getWidth=function(){return this.content>>22},u.prototype.getChars=function(){return 2097152&this.content?this.combinedData:2097151&this.content?a.stringFromCodePoint(2097151&this.content):""},u.prototype.getCode=function(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content},u.prototype.setFromCharData=function(e){this.fg=e[o.CHAR_DATA_ATTR_INDEX],this.bg=0;var t=!1;if(2>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):i]},_.prototype.set=function(e,t){this._data[3*e+1]=t[o.CHAR_DATA_ATTR_INDEX],1>22},_.prototype.hasWidth=function(e){return 12582912&this._data[3*e+0]},_.prototype.getFg=function(e){return this._data[3*e+1]},_.prototype.getBg=function(e){return this._data[3*e+2]},_.prototype.hasContent=function(e){return 4194303&this._data[3*e+0]},_.prototype.getCodePoint=function(e){var t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t},_.prototype.isCombined=function(e){return 2097152&this._data[3*e+0]},_.prototype.getString=function(e){var t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?a.stringFromCodePoint(2097151&t):""},_.prototype.loadCell=function(e,t){var i=3*e;return t.content=this._data[0+i],t.fg=this._data[1+i],t.bg=this._data[2+i],2097152&t.content&&(t.combinedData=this._combined[e]),t},_.prototype.setCell=function(e,t){2097152&t.content&&(this._combined[e]=t.combinedData),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg},_.prototype.setCellFromCodePoint=function(e,t,i,r,n){this._data[3*e+0]=t|i<<22,this._data[3*e+1]=r,this._data[3*e+2]=n},_.prototype.addCodepointToCell=function(e,t){var i=this._data[3*e+0];2097152&i?this._combined[e]+=a.stringFromCodePoint(t):(2097151&i?(this._combined[e]=a.stringFromCodePoint(2097151&i)+a.stringFromCodePoint(t),i&=-2097152,i|=2097152):i=t|1<<22,this._data[3*e+0]=i)},_.prototype.insertCells=function(e,t,i){if(e%=this.length,tthis.length){var i=new Uint32Array(3*e);this.length&&(3*e>22);return 0},_.prototype.copyCellsFrom=function(e,t,i,r,n){var s=e._data;if(n)for(var o=r-1;0<=o;o--)for(var a=0;a<3;a++)this._data[3*(i+o)+a]=s[3*(t+o)+a];else for(o=0;o>22||1}return r},_);function _(e,t,i){void 0===i&&(i=!1),this.isWrapped=i,this._combined={},this._data=new Uint32Array(3*e);for(var r=t||c.fromCharData([0,o.NULL_CELL_CHAR,o.NULL_CELL_WIDTH,o.NULL_CELL_CODE]),n=0;n"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']};i.evaluateKeyboardEvent=function(e,t,i,r){var n={type:0,cancel:!1,key:void 0},s=(e.shiftKey?1:0)|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:"UIKeyInputUpArrow"===e.key?n.key=t?h.C0.ESC+"OA":h.C0.ESC+"[A":"UIKeyInputLeftArrow"===e.key?n.key=t?h.C0.ESC+"OD":h.C0.ESC+"[D":"UIKeyInputRightArrow"===e.key?n.key=t?h.C0.ESC+"OC":h.C0.ESC+"[C":"UIKeyInputDownArrow"===e.key&&(n.key=t?h.C0.ESC+"OB":h.C0.ESC+"[B");break;case 8:if(e.shiftKey){n.key=h.C0.BS;break}if(e.altKey){n.key=h.C0.ESC+h.C0.DEL;break}n.key=h.C0.DEL;break;case 9:if(e.shiftKey){n.key=h.C0.ESC+"[Z";break}n.key=h.C0.HT,n.cancel=!0;break;case 13:n.key=h.C0.CR,n.cancel=!0;break;case 27:n.key=h.C0.ESC,n.cancel=!0;break;case 37:s?(n.key=h.C0.ESC+"[1;"+(1+s)+"D",n.key===h.C0.ESC+"[1;3D"&&(n.key=i?h.C0.ESC+"b":h.C0.ESC+"[1;5D")):n.key=t?h.C0.ESC+"OD":h.C0.ESC+"[D";break;case 39:s?(n.key=h.C0.ESC+"[1;"+(1+s)+"C",n.key===h.C0.ESC+"[1;3C"&&(n.key=i?h.C0.ESC+"f":h.C0.ESC+"[1;5C")):n.key=t?h.C0.ESC+"OC":h.C0.ESC+"[C";break;case 38:s?(n.key=h.C0.ESC+"[1;"+(1+s)+"A",n.key===h.C0.ESC+"[1;3A"&&(n.key=h.C0.ESC+"[1;5A")):n.key=t?h.C0.ESC+"OA":h.C0.ESC+"[A";break;case 40:s?(n.key=h.C0.ESC+"[1;"+(1+s)+"B",n.key===h.C0.ESC+"[1;3B"&&(n.key=h.C0.ESC+"[1;5B")):n.key=t?h.C0.ESC+"OB":h.C0.ESC+"[B";break;case 45:e.shiftKey||e.ctrlKey||(n.key=h.C0.ESC+"[2~");break;case 46:n.key=s?h.C0.ESC+"[3;"+(1+s)+"~":h.C0.ESC+"[3~";break;case 36:n.key=s?h.C0.ESC+"[1;"+(1+s)+"H":t?h.C0.ESC+"OH":h.C0.ESC+"[H";break;case 35:n.key=s?h.C0.ESC+"[1;"+(1+s)+"F":t?h.C0.ESC+"OF":h.C0.ESC+"[F";break;case 33:e.shiftKey?n.type=2:n.key=h.C0.ESC+"[5~";break;case 34:e.shiftKey?n.type=3:n.key=h.C0.ESC+"[6~";break;case 112:n.key=s?h.C0.ESC+"[1;"+(1+s)+"P":h.C0.ESC+"OP";break;case 113:n.key=s?h.C0.ESC+"[1;"+(1+s)+"Q":h.C0.ESC+"OQ";break;case 114:n.key=s?h.C0.ESC+"[1;"+(1+s)+"R":h.C0.ESC+"OR";break;case 115:n.key=s?h.C0.ESC+"[1;"+(1+s)+"S":h.C0.ESC+"OS";break;case 116:n.key=s?h.C0.ESC+"[15;"+(1+s)+"~":h.C0.ESC+"[15~";break;case 117:n.key=s?h.C0.ESC+"[17;"+(1+s)+"~":h.C0.ESC+"[17~";break;case 118:n.key=s?h.C0.ESC+"[18;"+(1+s)+"~":h.C0.ESC+"[18~";break;case 119:n.key=s?h.C0.ESC+"[19;"+(1+s)+"~":h.C0.ESC+"[19~";break;case 120:n.key=s?h.C0.ESC+"[20;"+(1+s)+"~":h.C0.ESC+"[20~";break;case 121:n.key=s?h.C0.ESC+"[21;"+(1+s)+"~":h.C0.ESC+"[21~";break;case 122:n.key=s?h.C0.ESC+"[23;"+(1+s)+"~":h.C0.ESC+"[23~";break;case 123:n.key=s?h.C0.ESC+"[24;"+(1+s)+"~":h.C0.ESC+"[24~";break;default:if(!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)if(i&&!r||!e.altKey||e.metaKey)i&&!e.altKey&&!e.ctrlKey&&e.metaKey?65===e.keyCode&&(n.type=1):e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&48<=e.keyCode&&1===e.key.length?n.key=e.key:e.key&&e.ctrlKey&&"_"===e.key&&(n.key=h.C0.US);else{var o=c[e.keyCode],a=o&&o[e.shiftKey?1:0];if(a)n.key=h.C0.ESC+a;else if(65<=e.keyCode&&e.keyCode<=90){var l=e.ctrlKey?e.keyCode-64:e.keyCode+32;n.key=h.C0.ESC+String.fromCharCode(l)}}else 65<=e.keyCode&&e.keyCode<=90?n.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?n.key=String.fromCharCode(0):51<=e.keyCode&&e.keyCode<=55?n.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?n.key=String.fromCharCode(127):219===e.keyCode?n.key=String.fromCharCode(27):220===e.keyCode?n.key=String.fromCharCode(28):221===e.keyCode&&(n.key=String.fromCharCode(29))}return n}},{"../../common/data/EscapeSequences":28}],34:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.stringFromCodePoint=function(e){return 65535>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},i.utf32ToString=function(e,t,i){void 0===t&&(t=0),void 0===i&&(i=e.length);for(var r="",n=t;n>10))+String.fromCharCode(s%1024+56320)):r+=String.fromCharCode(s)}return r};var r=(n.prototype.clear=function(){this._interim=0},n.prototype.decode=function(e,t){var i=e.length;if(!i)return 0;var r=0,n=0;this._interim&&(56320<=(a=e.charCodeAt(n++))&&a<=57343?t[r++]=1024*(this._interim-55296)+a-56320+65536:(t[r++]=this._interim,t[r++]=a),this._interim=0);for(var s=n;s=i)return this._interim=o,r;var a;56320<=(a=e.charCodeAt(s))&&a<=57343?t[r++]=1024*(o-55296)+a-56320+65536:(t[r++]=o,t[r++]=a)}else t[r++]=o}return r},n);function n(){this._interim=0}i.StringToUtf32=r;var s=(o.prototype.clear=function(){this.interim.fill(0)},o.prototype.decode=function(e,t){var i=e.length;if(!i)return 0;var r,n,s,o,a=0,l=0,h=0;if(this.interim[0]){var c=!1,u=this.interim[0];u&=192==(224&u)?31:224==(240&u)?15:7;for(var f=0,_=void 0;(_=63&this.interim[++f])&&f<4;)u<<=6,u|=_;for(var d=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,p=d-f;h=this._endCol&&ethis._endRow?"A":"B"},s.prototype._bufferLine=function(e,t,i,r,n){for(var s=e,o=t,a="";s!==i||o!==r;)s+=n?1:-1,n&&s>this._terminal.cols-1?(a+=this._terminal.buffer.translateBufferLineToString(o,!1,e,s),e=s=0,o++):!n&&s<0&&(a+=this._terminal.buffer.translateBufferLineToString(o,!1,0,e+1),e=s=this._terminal.cols-1,o--);return a+this._terminal.buffer.translateBufferLineToString(o,!1,e,s)},s.prototype._sequence=function(e){var t=this._terminal.applicationCursor?"O":"[";return r.C0.ESC+t+e},s);function s(e,t){var i;this._mouseEvent=e,this._terminal=t,this._lines=this._terminal.buffer.lines,this._startCol=this._terminal.buffer.x,this._startRow=this._terminal.buffer.y;var r=this._terminal.mouseHelper.getCoords(this._mouseEvent,this._terminal.element,this._terminal.charMeasure,this._terminal.cols,this._terminal.rows,!1);r&&(i=r.map(function(e){return e-1}),this._endCol=i[0],this._endRow=i[1])}function o(e,t){e=Math.floor(e);for(var i="",r=0;r=this._line.length))return new f(this._line,e)},u.prototype.translateToString=function(e,t,i){return this._line.translateToString(e,t,i)},u);function u(e){this._line=e}var f=(Object.defineProperty(_.prototype,"char",{get:function(){return this._line.getString(this._x)},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,"width",{get:function(){return this._line.getWidth(this._x)},enumerable:!0,configurable:!0}),_);function _(e,t){this._line=e,this._x=t}},{"../Strings":16,"../Terminal":17,"./AddonManager":36}],38:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=e("../common/Types"),a=e("./atlas/Types"),r=e("./atlas/CharAtlasCache"),l=e("../core/buffer/BufferLine"),n=(s.prototype.dispose=function(){this._container.removeChild(this._canvas),this._charAtlas&&this._charAtlas.dispose()},s.prototype._initCanvas=function(){this._ctx=this._canvas.getContext("2d",{alpha:this._alpha}),this._alpha||this.clearAll()},s.prototype.onOptionsChanged=function(e){},s.prototype.onBlur=function(e){},s.prototype.onFocus=function(e){},s.prototype.onCursorMove=function(e){},s.prototype.onGridChanged=function(e,t,i){},s.prototype.onSelectionChanged=function(e,t,i,r){void 0===r&&(r=!1)},s.prototype.setColors=function(e,t){this._refreshCharAtlas(e,t)},s.prototype.setTransparency=function(e,t){if(t!==this._alpha){var i=this._canvas;this._alpha=t,this._canvas=this._canvas.cloneNode(),this._initCanvas(),this._container.replaceChild(this._canvas,i),this._refreshCharAtlas(e,this._colors),this.onGridChanged(e,0,e.rows-1)}},s.prototype._refreshCharAtlas=function(e,t){this._scaledCharWidth<=0&&this._scaledCharHeight<=0||(this._charAtlas=r.acquireCharAtlas(e,t,this._scaledCharWidth,this._scaledCharHeight),this._charAtlas.warmUp())},s.prototype.resize=function(e,t){this._scaledCellWidth=t.scaledCellWidth,this._scaledCellHeight=t.scaledCellHeight,this._scaledCharWidth=t.scaledCharWidth,this._scaledCharHeight=t.scaledCharHeight,this._scaledCharLeft=t.scaledCharLeft,this._scaledCharTop=t.scaledCharTop,this._canvas.width=t.scaledCanvasWidth,this._canvas.height=t.scaledCanvasHeight,this._canvas.style.width=t.canvasWidth+"px",this._canvas.style.height=t.canvasHeight+"px",this._alpha||this.clearAll(),this._refreshCharAtlas(e,this._colors)},s.prototype.fillCells=function(e,t,i,r){this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,i*this._scaledCellWidth,r*this._scaledCellHeight)},s.prototype.fillBottomLineAtCells=function(e,t,i){void 0===i&&(i=1),this._ctx.fillRect(e*this._scaledCellWidth,(t+1)*this._scaledCellHeight-window.devicePixelRatio-1,i*this._scaledCellWidth,window.devicePixelRatio)},s.prototype.fillLeftLineAtCell=function(e,t){this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,window.devicePixelRatio,this._scaledCellHeight)},s.prototype.strokeRectAtCell=function(e,t,i,r){this._ctx.lineWidth=window.devicePixelRatio,this._ctx.strokeRect(e*this._scaledCellWidth+window.devicePixelRatio/2,t*this._scaledCellHeight+window.devicePixelRatio/2,i*this._scaledCellWidth-window.devicePixelRatio,r*this._scaledCellHeight-window.devicePixelRatio)},s.prototype.clearAll=function(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))},s.prototype.clearCells=function(e,t,i,r){this._alpha?this._ctx.clearRect(e*this._scaledCellWidth,t*this._scaledCellHeight,i*this._scaledCellWidth,r*this._scaledCellHeight):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,i*this._scaledCellWidth,r*this._scaledCellHeight))},s.prototype.fillCharTrueColor=function(e,t,i,r){this._ctx.font=this._getFont(e,!1,!1),this._ctx.textBaseline="middle",this._clipRow(e,r),this._ctx.fillText(t.getChars(),i*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight/2)},s.prototype.drawChars=function(e,t,i,r){var n,s;t.isFgRGB()||t.isBgRGB()?this._drawUncachedChars(e,t,i,r):(t.isInverse()?(n=t.isBgDefault()?a.INVERTED_DEFAULT_COLOR:t.getBgColor(),s=t.isFgDefault()?a.INVERTED_DEFAULT_COLOR:t.getFgColor()):(s=t.isBgDefault()?o.DEFAULT_COLOR:t.getBgColor(),n=t.isFgDefault()?o.DEFAULT_COLOR:t.getFgColor()),n+=e.options.drawBoldTextInBrightColors&&t.isBold()&&n<8&&n!==a.INVERTED_DEFAULT_COLOR?8:0,this._currentGlyphIdentifier.chars=t.getChars()||l.WHITESPACE_CELL_CHAR,this._currentGlyphIdentifier.code=t.getCode()||l.WHITESPACE_CELL_CODE,this._currentGlyphIdentifier.bg=s,this._currentGlyphIdentifier.fg=n,this._currentGlyphIdentifier.bold=t.isBold()&&e.options.enableBold,this._currentGlyphIdentifier.dim=!!t.isDim(),this._currentGlyphIdentifier.italic=!!t.isItalic(),this._charAtlas&&this._charAtlas.draw(this._ctx,this._currentGlyphIdentifier,i*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop)||this._drawUncachedChars(e,t,i,r))},s.prototype._drawUncachedChars=function(e,t,i,r){if(this._ctx.save(),this._ctx.font=this._getFont(e,t.isBold()&&e.options.enableBold,!!t.isItalic()),this._ctx.textBaseline="middle",t.isInverse())t.isBgDefault()?this._ctx.fillStyle=this._colors.background.css:t.isBgRGB()?this._ctx.fillStyle="rgb("+l.AttributeData.toColorRGB(t.getBgColor()).join(",")+")":this._ctx.fillStyle=this._colors.ansi[t.getBgColor()].css;else if(t.isFgDefault())this._ctx.fillStyle=this._colors.foreground.css;else if(t.isFgRGB())this._ctx.fillStyle="rgb("+l.AttributeData.toColorRGB(t.getFgColor()).join(",")+")";else{var n=t.getFgColor();e.options.drawBoldTextInBrightColors&&t.isBold()&&n<8&&(n+=8),this._ctx.fillStyle=this._colors.ansi[n].css}this._clipRow(e,r),t.isDim()&&(this._ctx.globalAlpha=a.DIM_OPACITY),this._ctx.fillText(t.getChars(),i*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight/2),this._ctx.restore()},s.prototype._clipRow=function(e,t){this._ctx.beginPath(),this._ctx.rect(0,t*this._scaledCellHeight,e.cols*this._scaledCellWidth,this._scaledCellHeight),this._ctx.clip()},s.prototype._getFont=function(e,t,i){return(i?"italic":"")+" "+(t?e.options.fontWeightBold:e.options.fontWeight)+" "+e.options.fontSize*window.devicePixelRatio+"px "+e.options.fontFamily},s);function s(e,t,i,r,n){this._container=e,this._alpha=r,this._colors=n,this._scaledCharWidth=0,this._scaledCharHeight=0,this._scaledCellWidth=0,this._scaledCellHeight=0,this._scaledCharLeft=0,this._scaledCharTop=0,this._currentGlyphIdentifier={chars:"",code:0,bg:0,fg:0,bold:!1,dim:!1,italic:!1},this._canvas=document.createElement("canvas"),this._canvas.classList.add("xterm-"+t+"-layer"),this._canvas.style.zIndex=i.toString(),this._initCanvas(),this._container.appendChild(this._canvas)}i.BaseRenderLayer=n},{"../common/Types":27,"../core/buffer/BufferLine":29,"./atlas/CharAtlasCache":48,"./atlas/Types":55}],39:[function(e,t,i){"use strict";var r,n=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)});Object.defineProperty(i,"__esModule",{value:!0});var s,f=e("../core/buffer/BufferLine"),o=(s=f.AttributeData,n(a,s),a.prototype.isCombined=function(){return 2097152},a.prototype.getWidth=function(){return this._width},a.prototype.getChars=function(){return this.combinedData},a.prototype.getCode=function(){return 2097151},a.prototype.setFromCharData=function(e){throw new Error("not implemented")},a.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]},a);function a(e,t,i){var r=s.call(this)||this;return r.content=0,r.combinedData="",r.fg=e.fg,r.bg=e.bg,r.combinedData=t,r._width=i,r}i.JoinedCellData=o;var l=(c.prototype.registerCharacterJoiner=function(e){var t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id},c.prototype.deregisterCharacterJoiner=function(e){for(var t=0;t=e.rows)this._clearCursor();else if(e.buffer.lines.get(i).loadCell(e.buffer.x,this._cell),void 0!==this._cell.content){if(!e.isFocused)return this._clearCursor(),this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._renderBlurCursor(e,e.buffer.x,r,this._cell),this._ctx.restore(),this._state.x=e.buffer.x,this._state.y=r,this._state.isFocused=!1,this._state.style=e.options.cursorStyle,void(this._state.width=this._cell.getWidth());if(!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isCursorVisible){if(this._state){if(this._state.x===e.buffer.x&&this._state.y===r&&this._state.isFocused===e.isFocused&&this._state.style===e.options.cursorStyle&&this._state.width===this._cell.getWidth())return;this._clearCursor()}this._ctx.save(),this._cursorRenderers[e.options.cursorStyle||"block"](e,e.buffer.x,r,this._cell),this._ctx.restore(),this._state.x=e.buffer.x,this._state.y=r,this._state.isFocused=!1,this._state.style=e.options.cursorStyle,this._state.width=this._cell.getWidth()}else this._clearCursor()}}else this._clearCursor()},h.prototype._clearCursor=function(){this._state&&(this.clearCells(this._state.x,this._state.y,this._state.width,1),this._state={x:null,y:null,isFocused:null,style:null,width:null})},h.prototype._renderBarCursor=function(e,t,i,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this.fillLeftLineAtCell(t,i),this._ctx.restore()},h.prototype._renderBlockCursor=function(e,t,i,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this.fillCells(t,i,r.getWidth(),1),this._ctx.fillStyle=this._colors.cursorAccent.css,this.fillCharTrueColor(e,r,t,i),this._ctx.restore()},h.prototype._renderUnderlineCursor=function(e,t,i,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this.fillBottomLineAtCells(t,i),this._ctx.restore()},h.prototype._renderBlurCursor=function(e,t,i,r){this._ctx.save(),this._ctx.strokeStyle=this._colors.cursor.css,this.strokeRectAtCell(t,i,r.getWidth(),1),this._ctx.restore()},h);function h(e,t,i){var r=s.call(this,e,"cursor",t,!0,i)||this;return r._cell=new a.CellData,r._state={x:null,y:null,isFocused:null,style:null,width:null},r._cursorRenderers={bar:r._renderBarCursor.bind(r),block:r._renderBlockCursor.bind(r),underline:r._renderUnderlineCursor.bind(r)},r}i.CursorRenderLayer=l;var c=(Object.defineProperty(u.prototype,"isPaused",{get:function(){return!(this._blinkStartTimeout||this._blinkInterval)},enumerable:!0,configurable:!0}),u.prototype.dispose=function(){this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=null),this._blinkStartTimeout&&(window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=null),this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=null)},u.prototype.restartBlinkAnimation=function(e){var t=this;this.isPaused||(this._animationTimeRestarted=Date.now(),this.isCursorVisible=!0,this._animationFrame||(this._animationFrame=window.requestAnimationFrame(function(){t._renderCallback(),t._animationFrame=null})))},u.prototype._restartInterval=function(e){var t=this;void 0===e&&(e=600),this._blinkInterval&&window.clearInterval(this._blinkInterval),this._blinkStartTimeout=setTimeout(function(){if(t._animationTimeRestarted){var e=600-(Date.now()-t._animationTimeRestarted);if(t._animationTimeRestarted=null,0=e.rows||a<0)){if(this._ctx.fillStyle=this._colors.selection.css,r){var l=t[0],h=i[0]-l,c=a-o+1;this.fillCells(l,o,h,c)}else{l=n===o?t[0]:0;var u=o===a?i[0]:e.cols;this.fillCells(l,o,u-l,1);var f=Math.max(a-o-1,0);if(this.fillCells(0,o+1,e.cols,f),o!==a){var _=s===a?i[0]:e.cols;this.fillCells(0,a,_,1)}}this._state.start=[t[0],t[1]],this._state.end=[i[0],i[1]],this._state.columnSelectMode=r,this._state.ydisp=e.buffer.ydisp}}else this._clearState()},l.prototype._didStateChange=function(e,t,i,r){return!this._areCoordinatesEqual(e,this._state.start)||!this._areCoordinatesEqual(t,this._state.end)||i!==this._state.columnSelectMode||r!==this._state.ydisp},l.prototype._areCoordinatesEqual=function(e,t){return!(!e||!t)&&e[0]===t[0]&&e[1]===t[1]},l);function l(e,t,i){var r=s.call(this,e,"selection",t,!0,i)||this;return r._clearState(),r}i.SelectionRenderLayer=a},{"./BaseRenderLayer":38}],46:[function(e,t,i){"use strict";var r,n=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)});Object.defineProperty(i,"__esModule",{value:!0});var o,a=e("./GridCache"),s=e("./BaseRenderLayer"),d=e("../core/buffer/BufferLine"),p=e("./CharacterJoinerRegistry"),l=(o=s.BaseRenderLayer,n(h,o),h.prototype.resize=function(e,t){o.prototype.resize.call(this,e,t);var i=this._getFont(e,!1,!1);this._characterWidth===t.scaledCharWidth&&this._characterFont===i||(this._characterWidth=t.scaledCharWidth,this._characterFont=i,this._characterOverlapCache={}),this._state.clear(),this._state.resize(e.cols,e.rows)},h.prototype.reset=function(e){this._state.clear(),this.clearAll()},h.prototype._forEachCell=function(e,t,i,r,n){for(var s=t;s<=i;s++)for(var o=s+e.buffer.ydisp,a=e.buffer.lines.get(o),l=r?r.getJoinedCharacters(o):[],h=0;hthis._characterWidth;return this._ctx.restore(),this._characterOverlapCache[t]=i},h);function h(e,t,i,r,n){var s=o.call(this,e,"text",t,n,i)||this;return s._characterOverlapCache={},s._workCell=new d.CellData,s._state=new a.GridCache,s._characterJoinerRegistry=r,s}i.TextRenderLayer=l},{"../core/buffer/BufferLine":29,"./BaseRenderLayer":38,"./CharacterJoinerRegistry":39,"./GridCache":41}],47:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=(n.prototype.dispose=function(){},n.prototype.warmUp=function(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)},n.prototype._doWarmUp=function(){},n.prototype.beginFrame=function(){},n);function n(){this._didWarmUp=!1}i.default=r},{}],48:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var h=e("./CharAtlasUtils"),r=e("./DynamicCharAtlas"),n=e("./NoneCharAtlas"),s=e("./StaticCharAtlas"),c={none:n.default,static:s.default,dynamic:r.default},u=[];i.acquireCharAtlas=function(e,t,i,r){for(var n=h.generateConfig(i,r,e,t),s=0;s>>24,n=t.rgba>>>16&255,s=t.rgba>>>8&255,o=0;o=this.capacity)i=this._head,this._unlinkNode(i),delete this._map[i.key],i.key=e,i.value=t,this._map[e]=i;else{var r=this._nodePool;0t;)this._rowContainer.removeChild(this._rowElements.pop())},y.prototype.onResize=function(e,t){this._refreshRowElements(e,t),this._updateDimensions()},y.prototype.onCharSizeChanged=function(){this._updateDimensions()},y.prototype.onBlur=function(){this._rowContainer.classList.remove(_)},y.prototype.onFocus=function(){this._rowContainer.classList.add(_)},y.prototype.onSelectionChanged=function(e,t,i){for(;this._selectionContainer.children.length;)this._selectionContainer.removeChild(this._selectionContainer.children[0]);if(e&&t){var r=e[1]-this._terminal.buffer.ydisp,n=t[1]-this._terminal.buffer.ydisp,s=Math.max(r,0),o=Math.min(n,this._terminal.rows-1);if(!(s>=this._terminal.rows||o<0)){var a=document.createDocumentFragment();if(i)a.appendChild(this._createSelectionElement(s,e[0],t[0],o-s+1));else{var l=r===s?e[0]:0,h=s===o?t[0]:this._terminal.cols;a.appendChild(this._createSelectionElement(s,l,h));var c=o-s-1;if(a.appendChild(this._createSelectionElement(s+1,0,this._terminal.cols,c)),s!==o){var u=n===o?t[0]:this._terminal.cols;a.appendChild(this._createSelectionElement(o,0,u))}}this._selectionContainer.appendChild(a)}}},y.prototype._createSelectionElement=function(e,t,i,r){void 0===r&&(r=1);var n=document.createElement("div");return n.style.height=r*this.dimensions.actualCellHeight+"px",n.style.top=e*this.dimensions.actualCellHeight+"px",n.style.left=t*this.dimensions.actualCellWidth+"px",n.style.width=this.dimensions.actualCellWidth*(i-t)+"px",n},y.prototype.onCursorMove=function(){},y.prototype.onOptionsChanged=function(){this._updateDimensions(),this._injectCss(),this._terminal.refresh(0,this._terminal.rows-1)},y.prototype.clear=function(){this._rowElements.forEach(function(e){return e.innerHTML=""})},y.prototype.renderRows=function(e,t){for(var i=this._terminal,r=i.buffer.ybase+i.buffer.y,n=this._terminal.buffer.x,s=this._terminal.options.cursorBlink,o=e;o<=t;o++){var a=this._rowElements[o];a.innerHTML="";var l=o+i.buffer.ydisp,h=i.buffer.lines.get(l),c=i.options.cursorStyle;a.appendChild(this._rowFactory.createRow(h,l===r,c,n,s,this.dimensions.actualCellWidth,i.cols))}},Object.defineProperty(y.prototype,"_terminalSelector",{get:function(){return"."+h+this._terminalClass},enumerable:!0,configurable:!0}),y.prototype.registerCharacterJoiner=function(e){return-1},y.prototype.deregisterCharacterJoiner=function(e){return!1},y.prototype._onLinkHover=function(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)},y.prototype._onLinkLeave=function(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)},y.prototype._setCellUnderline=function(e,t,i,r,n,s){for(;e!==t||i!==r;){var o=this._rowElements[i];if(!o)return;var a=o.children[e];a&&(a.style.textDecoration=s?"underline":"none"),++e>=n&&(e=0,i++)}},y);function y(e,t){var i=s.call(this)||this;return i._terminal=e,i._colors=t,i._terminalClass=p++,i._rowElements=[],i._rowContainer=document.createElement("div"),i._rowContainer.classList.add(c),i._rowContainer.style.lineHeight="normal",i._rowContainer.setAttribute("aria-hidden","true"),i._refreshRowElements(i._terminal.cols,i._terminal.rows),i._selectionContainer=document.createElement("div"),i._selectionContainer.classList.add(d),i._selectionContainer.setAttribute("aria-hidden","true"),i.dimensions={scaledCharWidth:null,scaledCharHeight:null,scaledCellWidth:null,scaledCellHeight:null,scaledCharLeft:null,scaledCharTop:null,scaledCanvasWidth:null,scaledCanvasHeight:null,canvasWidth:null,canvasHeight:null,actualCellWidth:null,actualCellHeight:null},i._updateDimensions(),i._injectCss(),i._rowFactory=new o.DomRendererRowFactory(e.options,document),i._terminal.element.classList.add(h+i._terminalClass),i._terminal.screenElement.appendChild(i._rowContainer),i._terminal.screenElement.appendChild(i._selectionContainer),i._terminal.linkifier.onLinkHover(function(e){return i._onLinkHover(e)}),i._terminal.linkifier.onLinkLeave(function(e){return i._onLinkLeave(e)}),i}i.DomRenderer=m},{"../../common/Lifecycle":24,"../atlas/Types":55,"./DomRendererRowFactory":57}],57:[function(e,t,p){"use strict";Object.defineProperty(p,"__esModule",{value:!0});var m=e("../atlas/Types"),y=e("../../core/buffer/BufferLine");p.BOLD_CLASS="xterm-bold",p.DIM_CLASS="xterm-dim",p.ITALIC_CLASS="xterm-italic",p.UNDERLINE_CLASS="xterm-underline",p.CURSOR_CLASS="xterm-cursor",p.CURSOR_BLINK_CLASS="xterm-cursor-blink",p.CURSOR_STYLE_BLOCK_CLASS="xterm-cursor-block",p.CURSOR_STYLE_BAR_CLASS="xterm-cursor-bar",p.CURSOR_STYLE_UNDERLINE_CLASS="xterm-cursor-underline";var i=(r.prototype.createRow=function(e,t,i,r,n,s,o){for(var a=this._document.createDocumentFragment(),l=0,h=Math.min(e.length,o)-1;0<=h;h--)if(e.loadCell(h,this._workCell).getCode()!==y.NULL_CELL_CODE||t&&h===r){l=h+1;break}for(h=0;h>>0})}for(i=0;i<24;i++){var o=8+10*i,a=u(o);e.push({css:"#"+a+a+a,rgba:(o<<24|o<<16|o<<8|255)>>>0})}return e}();var i=(r.prototype.setTheme=function(e){void 0===e&&(e={}),this.colors.foreground=this._parseColor(e.foreground,s),this.colors.background=this._parseColor(e.background,o),this.colors.cursor=this._parseColor(e.cursor,a,!0),this.colors.cursorAccent=this._parseColor(e.cursorAccent,l,!0),this.colors.selection=this._parseColor(e.selection,h,!0),this.colors.ansi[0]=this._parseColor(e.black,n.DEFAULT_ANSI_COLORS[0]),this.colors.ansi[1]=this._parseColor(e.red,n.DEFAULT_ANSI_COLORS[1]),this.colors.ansi[2]=this._parseColor(e.green,n.DEFAULT_ANSI_COLORS[2]),this.colors.ansi[3]=this._parseColor(e.yellow,n.DEFAULT_ANSI_COLORS[3]),this.colors.ansi[4]=this._parseColor(e.blue,n.DEFAULT_ANSI_COLORS[4]),this.colors.ansi[5]=this._parseColor(e.magenta,n.DEFAULT_ANSI_COLORS[5]),this.colors.ansi[6]=this._parseColor(e.cyan,n.DEFAULT_ANSI_COLORS[6]),this.colors.ansi[7]=this._parseColor(e.white,n.DEFAULT_ANSI_COLORS[7]),this.colors.ansi[8]=this._parseColor(e.brightBlack,n.DEFAULT_ANSI_COLORS[8]),this.colors.ansi[9]=this._parseColor(e.brightRed,n.DEFAULT_ANSI_COLORS[9]),this.colors.ansi[10]=this._parseColor(e.brightGreen,n.DEFAULT_ANSI_COLORS[10]),this.colors.ansi[11]=this._parseColor(e.brightYellow,n.DEFAULT_ANSI_COLORS[11]),this.colors.ansi[12]=this._parseColor(e.brightBlue,n.DEFAULT_ANSI_COLORS[12]),this.colors.ansi[13]=this._parseColor(e.brightMagenta,n.DEFAULT_ANSI_COLORS[13]),this.colors.ansi[14]=this._parseColor(e.brightCyan,n.DEFAULT_ANSI_COLORS[14]),this.colors.ansi[15]=this._parseColor(e.brightWhite,n.DEFAULT_ANSI_COLORS[15])},r.prototype._parseColor=function(e,t,i){if(void 0===i&&(i=this.allowTransparency),void 0===e)return t;if(this._ctx.fillStyle=this._litmusColor,this._ctx.fillStyle=e,"string"!=typeof this._ctx.fillStyle)return console.warn("Color: "+e+" is invalid using fallback "+t.css),t;this._ctx.fillRect(0,0,1,1);var r=this._ctx.getImageData(0,0,1,1).data;return i||255===r[3]?{css:e,rgba:(r[0]<<24|r[1]<<16|r[2]<<8|r[3])>>>0}:(console.warn("Color: "+e+" is using transparency, but allowTransparency is false. Using fallback "+t.css+"."),t)},r);function r(e,t){this.allowTransparency=t;var i=e.createElement("canvas");i.width=1,i.height=1;var r=i.getContext("2d");if(!r)throw new Error("Could not get rendering context");this._ctx=r,this._ctx.globalCompositeOperation="copy",this._litmusColor=this._ctx.createLinearGradient(0,0,1,1),this.colors={foreground:s,background:o,cursor:a,cursorAccent:l,selection:h,ansi:n.DEFAULT_ANSI_COLORS.slice()}}n.ColorManager=i},{}],59:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.addDisposableDomListener=function(e,t,i,r){return e.addEventListener(t,i,r),{dispose:function(){i&&e.removeEventListener(t,i,r)}}}},{}],60:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=(n.prototype.dispose=function(){this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},n.prototype.refresh=function(e,t,i){var r=this;this._rowCount=i,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t,this._animationFrame||(this._animationFrame=window.requestAnimationFrame(function(){return r._innerRefresh()}))},n.prototype._innerRefresh=function(){void 0!==this._rowStart&&void 0!==this._rowEnd&&void 0!==this._rowCount&&(this._rowStart=Math.max(this._rowStart,0),this._rowEnd=Math.min(this._rowEnd,this._rowCount-1),this._renderCallback(this._rowStart,this._rowEnd),this._rowStart=void 0,this._rowEnd=void 0,this._animationFrame=void 0)},n);function n(e){this._renderCallback=e}i.RenderDebouncer=r},{}],61:[function(e,t,i){"use strict";var r,n=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)});Object.defineProperty(i,"__esModule",{value:!0});var s,o=e("../common/Lifecycle"),a=(s=o.Disposable,n(l,s),l.prototype.setListener=function(e){var t=this;this._listener&&this.clearListener(),this._listener=e,this._outerListener=function(){t._listener&&(t._listener(window.devicePixelRatio,t._currentDevicePixelRatio),t._updateDpr())},this._updateDpr()},l.prototype.dispose=function(){s.prototype.dispose.call(this),this.clearListener()},l.prototype._updateDpr=function(){this._resolutionMediaMatchList&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._currentDevicePixelRatio=window.devicePixelRatio,this._resolutionMediaMatchList=window.matchMedia("screen and (resolution: "+window.devicePixelRatio+"dppx)"),this._resolutionMediaMatchList.addListener(this._outerListener))},l.prototype.clearListener=function(){this._resolutionMediaMatchList&&this._listener&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._listener=void 0,this._outerListener=void 0)},l);function l(){var e=null!==s&&s.apply(this,arguments)||this;return e._currentDevicePixelRatio=window.devicePixelRatio,e}i.ScreenDprMonitor=a},{"../common/Lifecycle":24}],62:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=e("./public/Terminal");t.exports=r.Terminal},{"./public/Terminal":37}]},{},[62])(62)}); \ No newline at end of file diff --git a/BTPanel/static/build/xterm.min.js.map b/BTPanel/static/build/xterm.min.js.map new file mode 100644 index 00000000..3d80d04b --- /dev/null +++ b/BTPanel/static/build/xterm.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["xterm.js"],"names":["f","exports","module","define","amd","window","global","self","this","Terminal","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","extendStatics","__extends","d","b","Object","setPrototypeOf","__proto__","Array","hasOwnProperty","__","constructor","prototype","create","defineProperty","value","_super","Strings","Platform_1","RenderDebouncer_1","Lifecycle_1","Lifecycle_2","ScreenDprMonitor_1","AccessibilityManager","Disposable","dispose","_terminal","element","removeChild","_accessibilityTreeRoot","_rowElements","_onBoundaryFocus","position","boundaryElement","target","beforeBoundaryElement","getAttribute","buffer","lines","relatedTarget","topBoundaryElement","bottomBoundaryElement","pop","_rowContainer","shift","removeEventListener","_topBoundaryFocusListener","_bottomBoundaryFocusListener","newElement","_createAccessibilityTreeNode","unshift","insertAdjacentElement","push","appendChild","addEventListener","scrollLines","focus","preventDefault","stopImmediatePropagation","_onResize","rows","children","_refreshRowsDimensions","document","createElement","setAttribute","tabIndex","_refreshRowDimensions","_onTab","spaceCount","_onChar","char","_this","_liveRegionLineCount","MAX_ROWS_TO_READ","_charsToConsume","_charsToAnnounce","_liveRegion","textContent","tooMuchOutput","isMac","parentNode","setTimeout","_clearLiveRegion","_onKey","keyChar","_refreshRows","start","end","_renderRowsDebouncer","refresh","_renderRows","setSize","toString","lineData","translateBufferLineToString","ydisp","posInSet","blankLine","_announceCharacters","_dimensions","actualCellHeight","setDimensions","dimensions","style","height","classList","add","RenderDebouncer","bind","register","onResize","onRender","onScroll","addDisposableListener","onLineFeed","onKey","key","_screenDprMonitor","ScreenDprMonitor","setListener","addDisposableDomListener","./Strings","./common/Lifecycle","./common/Platform","./ui/Lifecycle","./ui/RenderDebouncer","./ui/ScreenDprMonitor","2","CircularList_1","BufferLine_1","BufferReflow_1","Marker_1","MAX_BUFFER_SIZE","Buffer","getNullCell","attr","_nullCell","fg","bg","getWhitespaceCell","_whitespaceCell","getBlankLine","isWrapped","BufferLine","cols","get","_hasScrollback","maxLength","_rows","enumerable","configurable","relativeY","ybase","y","_getCorrectBufferLength","correctBufferLength","options","scrollback","fillViewportRows","fillAttr","undefined","DEFAULT_ATTR_DATA","clear","x","CircularList","scrollTop","scrollBottom","setupTabStops","resize","newCols","newRows","nullCell","newMaxLength","_cols","addToY","amountToTrim","trimStart","Math","max","min","savedY","savedX","_isReflowEnabled","_reflow","windowsMode","_reflowLarger","_reflowSmaller","toRemove","reflowLargerGetLinesToRemove","newLayoutResult","reflowLargerCreateNewLayout","reflowLargerApplyNewLayout","layout","_reflowLargerAdjustViewport","countRemoved","viewportAdjustments","toInsert","countToInsert","nextLine","getTrimmedLength","wrappedLines","absoluteY","lastLineLength","destLineLengths","reflowSmallerGetNewLineLengths","linesToAdd","trimmedLines","newLines","newLine","apply","destLineIndex","destCol","srcLineIndex","srcCol","cellsToCopy","copyCellsFrom","wrappedLinesIndex","getWrappedLineTrimmedLength","setCell","insertEvents","originalLines","originalLinesLength","originalLineIndex","nextToInsertIndex","nextToInsert","countInsertedSoFar","nextI","set","index","amount","insertCountEmitted","onInsertEmitter","fire","onTrimEmitter","stringIndexToBufferIndex","lineIndex","stringIndex","trimRight","line","length_1","CHAR_DATA_WIDTH_INDEX","CHAR_DATA_CHAR_INDEX","startCol","endCol","translateToString","getWrappedRangeForLine","first","last","tabs","prevStop","tabStopWidth","nextStop","addMarker","marker","Marker","markers","onTrim","onInsert","event","onDelete","onDispose","_removeMarker","splice","indexOf","iterator","startIndex","endIndex","startOverscan","endOverscan","BufferStringIterator","savedCurAttrData","clone","CellData","fromCharData","NULL_CELL_CHAR","NULL_CELL_WIDTH","NULL_CELL_CODE","WHITESPACE_CELL_CHAR","WHITESPACE_CELL_WIDTH","WHITESPACE_CELL_CODE","hasNext","_current","_endIndex","next","range","_buffer","_startIndex","_startOverscan","_endOverscan","result","_trimRight","content","./common/CircularList","./core/buffer/BufferLine","./core/buffer/BufferReflow","./core/buffer/Marker","3","Buffer_1","EventEmitter2_1","BufferSet","_onBufferActivate","_alt","_activeBuffer","_normal","activateNormalBuffer","activeBuffer","inactiveBuffer","activateAltBuffer","EventEmitter2","./Buffer","./common/EventEmitter2","4","CharMeasure","_onCharSizeChanged","_width","_height","measure","_measureElement","fontFamily","fontSize","geometry","getBoundingClientRect","width","adjustedHeight","ceil","parentElement","_document","_parentElement","5","TypedArrayUtils_1","wcwidth","opts","COMBINING_BMP","COMBINING_HIGH","control","table","Uint8Array","fill","nul","num","ucs","data","mid","bisearch","wcwidthHigh","getStringCellWidth","s","charCodeAt","second","./common/TypedArrayUtils","6","prepareTextForTerminal","text","replace","bracketTextForPaste","bracketedPasteMode","moveTextAreaUnderMouseCursor","ev","term","pos","screenElement","left","clientX","top","clientY","textarea","zIndex","copyHandler","selectionManager","browser","isMSIE","clipboardData","setData","selectionText","pasteHandler","dispatchPaste","handler","emit","cancel","stopPropagation","getData","rightClickHandler","shouldSelectWord","isClickInSelection","selectWordAtCursor","select","7","CompositionHelper","compositionstart","_isComposing","_compositionPosition","_textarea","_compositionView","compositionupdate","updateCompositionElements","compositionend","_finalizeComposition","keydown","_isSendingComposition","keyCode","_handleAnyTextareaChanges","waitForPropagation","remove","_clearTextareaPosition","currentCompositionPosition_1","input","substring","oldValue","diff","dontRecurse","isCursorInViewport","cellHeight","charMeasure","lineHeight","cursorTop","cursorLeft","compositionViewBounds","8","TextDecoder_1","low","high","arr","TransitionTable","state","action","addMany","codes","PRINTABLES","EXECUTABLES","VT500_TRANSITION_TABLE","states","DcsDummy","hook","collect","params","flag","put","unhook","EscapeSequenceParser","_printHandlerFb","_executeHandlerFb","_csiHandlerFb","_escHandlerFb","_oscHandlerFb","_dcsHandlerFb","_errorHandlerFb","_printHandler","_executeHandlers","_escHandlers","_csiHandlers","_oscHandlers","_dcsHandlers","_activeDcsHandler","_errorHandler","setPrintHandler","callback","clearPrintHandler","setExecuteHandler","clearExecuteHandler","setExecuteHandlerFallback","addCsiHandler","handlerList","handlerIndex","setCsiHandler","clearCsiHandler","setCsiHandlerFallback","setEscHandler","collectAndFlag","clearEscHandler","setEscHandlerFallback","addOscHandler","ident","setOscHandler","clearOscHandler","setOscHandlerFallback","setDcsHandler","clearDcsHandler","setDcsHandlerFallback","setErrorHandler","clearErrorHandler","reset","currentState","initialState","_osc","_params","_collect","parse","transition","error","print","dcs","osc","TRANSITIONS","dcsHandler","abort","handlers","j","String","fromCharCode","j_1","utf32ToString","idx","identifier","parseInt","handlers_1","j_2","./core/input/TextDecoder","9","EscapeSequences_1","Charsets_1","CharWidth_1","EscapeSequenceParser_1","GLEVEL","(",")","*","+","-",".","DECRQSS","_data","Uint32Array","concat","subarray","C0","ESC","pt","block","underline","bar","getOption","InputHandler","_onCursorMove","_onData","_onLineFeed","_onScroll","cursorStartX","cursorStartY","debug","log","_parseBuffer","_parser","_stringDecoder","decode","parseUtf8","_utf8Decoder","chWidth","charset","screenReaderMode","wraparoundMode","insertMode","curAttr","curAttrData","bufferRow","updateRange","ch","stringFromCodePoint","scroll","insertCells","getWidth","setCellFromCodePoint","addCodepointToCell","bell","lineFeed","convertEol","carriageReturn","backspace","tab","originalX","shiftOut","setgLevel","shiftIn","insertChars","eraseAttrData","cursorUp","param","cursorDown","cursorForward","cursorBackward","cursorNextLine","cursorPrecedingLine","cursorCharAbsolute","cursorPosition","col","row","cursorForwardTab","_eraseInBufferLine","clearWrap","replaceCells","_resetBufferLine","eraseInDisplay","scrollBackSize","eraseInLine","insertLines","scrollBottomRowsOffset","scrollBottomAbsolute","deleteLines","deleteChars","deleteCells","scrollUp","scrollDown","eraseChars","cursorBackwardTab","charPosAbsolute","hPositionRelative","repeatPrecedingCharacter","loadCell","_workCell","sendDeviceAttributes","is","linePosAbsolute","vPositionRelative","hVPosition","tabClear","setMode","applicationCursor","setgCharset","DEFAULT_CHARSET","savedCols","originMode","applicationKeypad","viewport","syncScrollArea","x10Mouse","vt200Mouse","normalMouse","mouseEvents","disable","sendFocus","utfMouse","sgrMouse","urxvtMouse","cursorHidden","saveCursor","buffers","showCursor","resetMode","enable","restoreCursor","charAttributes","l","AttributeData","fromColorRGB","deviceStatus","softReset","glevel","charsets","setCursorStyle","setOption","isBlinking","setScrollRegion","setTitle","handleTitle","keypadApplicationMode","keypadNumericMode","selectDefaultCharset","selectCharset","CHARSETS","tabSet","reverseIndex","level","StringToUtf32","Utf8ToUtf32","BEL","LF","VT","FF","CR","BS","HT","SO","SI","C1","IND","NEL","HTS","_loop_1","this_1","./CharWidth","./EscapeSequenceParser","./common/data/EscapeSequences","./core/data/Charsets","10","MouseZoneManager_1","Linkifier","_onLinkHover","_onLinkLeave","_onLinkTooltip","attachToDom","mouseZoneManager","_mouseZoneManager","linkifyRows","_rowsToLinkify","clearAll","_rowsTimeoutId","clearTimeout","_linkifyRows","TIME_BEFORE_LINKIFY","absoluteRowIndexStart","absoluteRowIndexEnd","overscanLineLimit","OVERSCAN_CHAR_LIMIT","_linkMatchers","_doLinkifyRow","registerLinkMatcher","regex","matcher","id","_nextLinkMatcherId","matchIndex","validationCallback","hoverTooltipCallback","tooltipCallback","hoverLeaveCallback","leaveCallback","willLinkActivate","priority","_addLinkMatcherToList","deregisterLinkMatcher","matcherId","rowIndex","match","rex","RegExp","source","flags","uri","console","lastIndex","bufferIndex","getFg","isValid","_addLink","exec","x1","y1","floor","x2","y2","MouseZone","open","_createLinkHoverEvent","./MouseZoneManager","11","MouseHelper","getCoordsRelativeToElement","rect","getCoords","colCount","rowCount","isSelection","coords","_renderCoordinator","actualCellWidth","getRawByteCoords","12","MouseZoneManager","_deactivate","zone","_zones","_activate","_currentZone","_areZonesActive","_mouseMoveListener","_mouseLeaveListener","_clickListener","_onMouseMove","_lastHoverCoords","pageX","pageY","_onHover","_findZoneEventAt","_tooltipTimeout","hoverCallback","_onTooltip","_onMouseDown","_initialSelectionLength","getSelection","_onMouseLeave","_onClick","currentSelectionLength","clickCallback","mouseHelper","13","MouseHelper_1","Browser","SelectionModel_1","AltClickHandler_1","NON_BREAKING_SPACE_CHAR","ALL_NON_BREAKING_SPACE_REGEX","SelectionManager","_onLinuxMouseSelection","_onRedrawRequest","_onSelectionChange","_removeMouseDownListeners","active","_initListeners","_mouseUpListener","_onMouseUp","initBuffersListeners","_trimListener","_onTrim","onBufferActivate","clearSelection","_enabled","_model","finalSelectionStart","finalSelectionEnd","_activeSelectionMode","lineText","startRowEndCol","bufferLine","map","join","isMSWindows","isLinuxMouseSelection","_refreshAnimationFrame","requestAnimationFrame","_refresh","isLinux","columnSelectMode","_getMouseBufferCoords","_areCoordsInSelection","_selectWordAt","selectionEnd","selectAll","isSelectAllActive","selectLines","selectionStart","_charMeasure","_getMouseEventScrollAmount","offset","terminalHeight","abs","round","shouldForceSelection","altKey","macOptionClickForcesSelection","shiftKey","onMouseDown","_mouseDownTimeStamp","timeStamp","button","hasSelection","_dragScrollAmount","_onIncrementalClick","detail","_onSingleClick","_onDoubleClick","_onTripleClick","_addMouseDownListeners","ownerDocument","_dragScrollIntervalTimer","setInterval","_dragScroll","clearInterval","selectionStartLength","shouldColumnSelect","hasWidth","_selectLineAt","previousSelectionEnd","_selectToWordAt","timeElapsed","AltClickHandler","move","_convertViewportColToCharacterIndex","charIndex","getChars","setSelection","_getWordAt","allowWhitespaceOnlySelection","followWrappedLinesAbove","followWrappedLinesBelow","charOffset","leftWideCharCount","rightWideCharCount","leftLongCharOffset","rightLongCharOffset","charAt","length_2","getString","_isCharWordSeparator","length_3","length_4","slice","trim","getCodePoint","previousBufferLine","previousLineWordPosition","nextBufferLine","nextLineWordPosition","wordPosition","endRow","areSelectionValuesReversed","cell","wrappedRange","SelectionModel","./MouseHelper","./SelectionModel","./handlers/AltClickHandler","14","startPlusLength","15","DEFAULT_BELL_SOUND","SoundManager","_audioContext","audioContextCtor","AudioContext","webkitAudioContext","warn","playBellSound","ctx","audioContext","bellAudioSource","createBufferSource","decodeAudioData","_base64ToArrayBuffer","_removeMimeType","bellSound","connect","destination","base64","binaryString","atob","len","bytes","dataURI","split","16","promptLabel","17","BufferSet_1","CompositionHelper_1","EventEmitter_1","Viewport_1","Clipboard_1","InputHandler_1","Renderer_1","Linkifier_1","SelectionManager_1","CharMeasure_1","SoundManager_1","AccessibilityManager_1","CharAtlasCache_1","DomRenderer_1","Keyboard_1","Clone_1","WindowsMode_1","ColorManager_1","RenderCoordinator_1","CONSTRUCTOR_ONLY_OPTIONS","DEFAULT_OPTIONS","termName","cursorBlink","cursorStyle","bellStyle","drawBoldTextInBrightColors","enableBold","experimentalCharAtlas","fontWeight","fontWeightBold","letterSpacing","screenKeys","macOptionIsMeta","cancelEvents","disableStdin","useFlowControl","allowTransparency","theme","rightClickSelectsWord","rendererType","EventEmitter","_onRender","_onTitleChange","_windowsMode","_customKeyEventHandler","removeTerminalFromCache","write","destroy","_setup","keys","forEach","_parent","body","onData","cursorState","gcharset","_eraseAttrData","currentParam","writeBuffer","writeBufferUtf8","_writeInProgress","_xoffSentToCatchUp","_userScrolling","_inputHandler","onCursorMove","linkifier","soundManager","applyWindowsMode","preventScroll","activeElement","hasFocus","_setTheme","newBufferLength","needsRefresh","setRenderer","_createRenderer","_accessibilityManager","onOptionsChanged","_onTextAreaFocus","updateCursorStyle","blur","_onTextAreaBlur","_initGlobal","pasteHandlerWrapper","_bindKeys","isFirefox","_keyDown","_keyPress","wasModifierKeyOnlyEvent","_keyUp","_compositionHelper","_queueLinkification","parent","_context","defaultView","dir","fragment","createDocumentFragment","_viewportElement","_viewportScrollArea","_helperContainer","_theme","_colorManager","ColorManager","setTheme","renderer","RenderCoordinator","Viewport","onThemeChange","colors","onBlur","onFocus","onCharSizeChanged","onDimensionsChange","onSelectionChange","onRedrawRequest","onSelectionChanged","onLinuxMouseSelection","toggle","bindMouse","Renderer","DomRenderer","setColors","el","pressed","sendButton","meta","ctrl","mod","overrideType","type","which","deltaY","metaKey","ctrlKey","getButton","sendEvent","encode","_vt300Mouse","data_1","_decLocator","page","moveHandler","sendMove","hasScrollback","getLinesScrolled","sequence","onWheel","onTouchStart","onTouchMove","refreshRows","_blankLine","eraseAttr","getBg","topRow","bottomRow","willBufferBeTrimmed","isFull","recycle","copyFrom","scrollRegionHeight","shiftElements","disp","suppressScrollEvent","oldYdisp","scrollPages","pageCount","scrollToTop","scrollToBottom","scrollToLine","scrollAmount","writeUtf8","_isDisposed","DC3","_innerWriteUtf8","bufferOffset","startTime","Date","now","DC1","_refreshStart","_refreshEnd","_innerWrite","writeln","attachCustomKeyEventHandler","customKeyEventHandler","registerCharacterJoiner","joinerId","deregisterCharacterJoiner","cursorYOffset","normal","column","getSelectionPosition","startColumn","startRow","endColumn","evaluateKeyboardEvent","_isThirdLevelShift","domEvent","scrollCount","thirdLevelKey","g","charCode","_soundBell","_visualBell","_visualBellTimer","isNaN","maxRange","title","inputHandler","writeInProgress","xoffSentToCatchUp","userScrolling","force","onTitleChange","./AccessibilityManager","./BufferSet","./CharMeasure","./Clipboard","./CompositionHelper","./InputHandler","./Linkifier","./SelectionManager","./SoundManager","./Viewport","./WindowsMode","./common/Clone","./common/EventEmitter","./core/input/Keyboard","./renderer/RenderCoordinator","./renderer/Renderer","./renderer/atlas/CharAtlasCache","./renderer/dom/DomRenderer","./ui/ColorManager","18","onDimensionsChance","backgroundColor","background","css","_innerRefresh","_currentRowHeight","scaledCellHeight","devicePixelRatio","_lastRecordedViewportHeight","offsetHeight","newBufferHeight","_lastRecordedBufferLength","canvasHeight","_lastRecordedBufferHeight","_scrollArea","_ignoreNextScrollEvent","newScrollTop","_lastScrollTop","offsetParent","_getPixelsScrolled","deltaMode","WheelEvent","DOM_DELTA_LINE","DOM_DELTA_PAGE","DOM_DELTA_PIXEL","_wheelPartialScroll","_lastTouchY","touches","scrollBarWidth","offsetWidth","19","terminal","lastChar","CHAR_DATA_CODE_INDEX","20","onDeleteEmitter","_maxLength","newArray","_array","_getCyclicIndex","_length","newLength","deleteCount","items","_i","arguments","countToTrim","count","expandListBy","./EventEmitter2","21","val","depth","clonedObject","isArray","22","on","listener","_events","disposed","off","obj","removeAllListeners","args","emitMayRemoveListeners","listeners","./Lifecycle","23","_event","_listeners","queue","24","_disposables","unregister","25","isNode","navigator","userAgent","platform","contains","isSafari","test","isIpad","isIphone","26","fillFallback","array","27","DEFAULT_COLOR","28","NUL","SOH","STX","ETX","EOT","ENQ","ACK","DLE","DC2","DC4","NAK","SYN","ETB","CAN","EM","SUB","FS","GS","RS","US","SP","DEL","PAD","HOP","BPH","NBH","SSA","ESA","HTJ","VTS","PLD","PLU","RI","SS2","SS3","DCS","PU1","PU2","STS","CCH","MW","SPA","EPA","SOS","SGCI","SCI","CSI","ST","OSC","PM","APC","29","Types_1","DEFAULT_ATTR","CHAR_DATA_ATTR_INDEX","toColorRGB","newObj","isInverse","isBold","isUnderline","isBlink","isInvisible","isItalic","isDim","getFgColorMode","getBgColorMode","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","getFgColor","getBgColor","freeze","setFromCharData","isCombined","combinedData","getCode","combined","getAsCharData","cp","_combined","hasContent","codePoint","fillCellData","src","applyInReverse","srcData","srcCombinedKeys","../../common/Types","../input/TextDecoder","30","endsInNull","followingLineStartsWithWide","oldCols","bufferAbsoluteY","srcTrimmedTineLength","srcRemainingCells","destRemainingCells","countToRemove","i_1","nextToRemoveIndex","nextToRemoveStart","countRemovedSoFar","newLayout","newLayoutLines","newLineLengths","cellsNeeded","reduce","srcLine","cellsAvailable","oldTrimmedLength","endsWithWide","lineLength","31","_id","_onDispose","isDisposed","_nextId","../../common/EventEmitter2","../../common/Lifecycle","32","`","h","k","m","q","v","w","z","{","|","}","~","#","@","[","\\","]","^","_","33","KEYCODE_KEY_MAPPINGS","48","49","50","51","52","53","54","55","56","57","186","187","188","189","190","191","192","219","220","221","222","applicationCursorMode","modifiers","keyMapping","../../common/data/EscapeSequences","34","codepoint","_interim","size","startPos","interim","byte1","byte2","byte3","byte4","discardInterim","tmp","missing","fourStop","35","_mouseEvent","_endCol","_endRow","_arrowSequences","_moveHorizontallyOnly","_resetStartingRow","_moveToRequestedRow","_moveToRequestedCol","repeat","_bufferLine","_startCol","_startRow","_wrappedRowsForRow","_sequence","_wrappedRowsCount","_verticalDirection","direction","_horizontalDirection","wrappedRows","_lines","currentRow","lineWraps","forward","currentCol","bufferStr","_a","coordinates","coordinate","str","rpt","../common/data/EscapeSequences","36","AddonManager","_addons","instance","loadAddon","loadedAddon","_wrappedAddonDispose","activate","37","Terminal_1","AddonManager_1","_core","BufferApiView","columns","_addonManager","applyAddon","addon","getLine","BufferLineApiView","_line","getCell","BufferCellApiView","_x","../Strings","../Terminal","./AddonManager","38","Types_2","BaseRenderLayer","_container","_canvas","_charAtlas","_initCanvas","_ctx","getContext","alpha","_alpha","onGridChanged","colorSet","_refreshCharAtlas","setTransparency","oldCanvas","cloneNode","replaceChild","_colors","_scaledCharWidth","_scaledCharHeight","acquireCharAtlas","warmUp","dim","_scaledCellWidth","scaledCellWidth","_scaledCellHeight","scaledCharWidth","scaledCharHeight","_scaledCharLeft","scaledCharLeft","_scaledCharTop","scaledCharTop","scaledCanvasWidth","scaledCanvasHeight","canvasWidth","fillCells","fillRect","fillBottomLineAtCells","fillLeftLineAtCell","strokeRectAtCell","lineWidth","strokeRect","clearRect","fillStyle","clearCells","fillCharTrueColor","font","_getFont","textBaseline","_clipRow","fillText","drawChars","_drawUncachedChars","INVERTED_DEFAULT_COLOR","_currentGlyphIdentifier","chars","bold","italic","draw","save","ansi","foreground","globalAlpha","DIM_OPACITY","restore","beginPath","clip","../common/Types","../core/buffer/BufferLine","./atlas/CharAtlasCache","./atlas/Types","39","JoinedCellData","firstCell","CharacterJoinerRegistry","joiner","_nextCharacterJoinerId","_characterJoiners","getJoinedCharacters","ranges","lineStr","rangeStartColumn","currentStringIndex","rangeStartStringIndex","rangeAttrFG","rangeAttrBG","joinedRanges","_getJoinedRanges","joinerRanges","_mergeRanges","_stringRangesToCellRanges","currentRangeIndex","currentRangeStarted","currentRange","newRange","inRange","40","BaseRenderLayer_1","CursorRenderLayer","_state","isFocused","_clearCursor","_cursorBlinkStateManager","pause","resume","CursorBlinkStateManager","_render","restartBlinkAnimation","isPaused","triggeredByAnimationFrame","cursorY","viewportRelativeCursorY","_cell","cursor","_renderBlurCursor","isCursorVisible","_cursorRenderers","_renderBarCursor","_renderBlockCursor","cursorAccent","_renderUnderlineCursor","strokeStyle","container","_blinkStartTimeout","_blinkInterval","_animationFrame","cancelAnimationFrame","_animationTimeRestarted","_renderCallback","_restartInterval","timeToStart","time","./BaseRenderLayer","41","GridCache","cache","42","CharAtlasUtils_1","LinkRenderLayer","_clearCurrentLink","middleRowCount","is256Color","onLinkHover","onLinkLeave","./atlas/CharAtlasUtils","43","_onDimensionsChange","_onRefreshRequest","_renderer","_onIntersectionChange","entry","_isPaused","intersectionRatio","_needsFullRefresh","_rowCount","_renderDebouncer","renderRows","_fireOnCanvasResize","changeOptions","_canvasWidth","_canvasHeight","_fullRefresh","onDevicePixelRatioChange","observer_1","IntersectionObserver","threshold","observe","disconnect","../common/EventEmitter2","../common/Lifecycle","../ui/Lifecycle","../ui/RenderDebouncer","../ui/ScreenDprMonitor","44","TextRenderLayer_1","SelectionRenderLayer_1","CursorRenderLayer_1","LinkRenderLayer_1","CharacterJoinerRegistry_1","_renderLayers","_devicePixelRatio","_updateDimensions","_runOperation","operation","_characterJoinerRegistry","TextRenderLayer","SelectionRenderLayer","../renderer/CharacterJoinerRegistry","./CursorRenderLayer","./LinkRenderLayer","./SelectionRenderLayer","./TextRenderLayer","45","_clearState","_didStateChange","viewportStartRow","viewportEndRow","viewportCappedStartRow","viewportCappedEndRow","selection","middleRowsCount","_areCoordinatesEqual","coord1","coord2","46","GridCache_1","terminalFont","_characterWidth","_characterFont","_characterOverlapCache","_forEachCell","firstRow","lastRow","joinerRegistry","isJoined","lastCharX","_isOverlapping","_drawBackground","startX","startY","prevFillStyle","nextFillStyle","_drawForeground","beginFrame","overlaps","measureText","characterJoinerRegistry","./CharacterJoinerRegistry","./GridCache","47","BaseCharAtlas","_didWarmUp","_doWarmUp","default","DynamicCharAtlas_1","NoneCharAtlas_1","StaticCharAtlas_1","charAtlasImplementations","none","static","dynamic","charAtlasCache","newConfig","generateConfig","ownedByIndex","ownedBy","configEquals","config","atlas","newEntry","./CharAtlasUtils","./DynamicCharAtlas","./NoneCharAtlas","./StaticCharAtlas","clearColor","imageData","color","isEmpty","rgba","getFont","generateStaticCharAtlasTexture","context","canvasFactory","cellWidth","CHAR_ATLAS_CELL_SPACING","canvas","colorIndex","charAtlasImageData","getImageData","createImageBitmap","../../common/Platform","./Types","clonedColors","colorCode","BaseCharAtlas_1","CharAtlasGenerator_1","LRUMap_1","TRANSPARENT_COLOR","getGlyphCacheKey","glyph","DynamicCharAtlas","_bitmapCommitTimeout","_drawToCacheCount","_canCache","glyphKey","cacheValue","_cacheMap","_drawFromCache","capacity","peek","cacheValue_1","_drawToCache","_toCoordinateX","_config","_toCoordinateY","cacheX","cacheY","drawImage","inBitmap","_bitmap","_cacheCanvas","_getColorFromAnsiIndex","DEFAULT_ANSI_COLORS","_getBackgroundColor","_getForegroundColor","_tmpCtx","globalCompositeOperation","fontStyle","_cacheCtx","putImageData","_addGlyphToBitmap","_glyphsWaitingOnBitmap","_generateBitmap","glyphsMovingToBitmap","then","bitmap","tmpCanvas","prealloc","../../ui/ColorManager","./BaseCharAtlas","./CharAtlasGenerator","./LRUMap","LRUMap","_unlinkNode","node","prev","_head","_tail","_appendNode","tail","nodePool","_nodePool","_map","peekValue","head","NoneCharAtlas","StaticCharAtlas","_canvasFactory","HTMLCanvasElement","_texture","texture","_isCached","isAscii","isBasicColor","isDefaultColor","isDefaultBackground","charAtlasCellWidth","charAtlasCellHeight","DomRendererRowFactory_1","TERMINAL_CLASS_PREFIX","ROW_CONTAINER_CLASS","FG_CLASS_PREFIX","BG_CLASS_PREFIX","FOCUS_CLASS","SELECTION_CLASS","nextTerminalId","_terminalClass","_selectionContainer","_themeStyleElement","_dimensionsStyleElement","overflow","styles","_terminalSelector","innerHTML","_injectCss","BOLD_CLASS","ITALIC_CLASS","CURSOR_CLASS","CURSOR_BLINK_CLASS","CURSOR_STYLE_BLOCK_CLASS","CURSOR_STYLE_BAR_CLASS","CURSOR_STYLE_UNDERLINE_CLASS","_refreshRowElements","documentFragment","_createSelectionElement","endCol_1","colStart","colEnd","cursorAbsoluteY","cursorX","rowElement","_rowFactory","createRow","_setCellUnderline","enabled","span","textDecoration","DomRendererRowFactory","../atlas/Types","./DomRendererRowFactory","DIM_CLASS","UNDERLINE_CLASS","isCursorRow","charElement","_terminalOptions","swapColor","../../core/buffer/BufferLine","58","DEFAULT_FOREGROUND","fromHex","DEFAULT_BACKGROUND","DEFAULT_CURSOR","DEFAULT_CURSOR_ACCENT","DEFAULT_SELECTION","toPaddedHex","_parseColor","black","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","fallback","_litmusColor","createLinearGradient","59","useCapture","60","rowStart","rowEnd","_rowStart","_rowEnd","61","_listener","clearListener","_outerListener","_currentDevicePixelRatio","_updateDpr","_resolutionMediaMatchList","removeListener","matchMedia","addListener","62","./public/Terminal"],"mappings":"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AC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C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"} \ No newline at end of file diff --git a/BTPanel/static/codemirror/lib/codemirror.css b/BTPanel/static/codemirror/lib/codemirror.css new file mode 100644 index 00000000..05cab2f4 --- /dev/null +++ b/BTPanel/static/codemirror/lib/codemirror.css @@ -0,0 +1,4 @@ +.CodeMirror{font-family:monospace;height:auto;color:black;border:#ccc 1px solid}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:0;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:#f00}.cm-invalidchar{color:#f00}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper{-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0} +.CodeMirror-hints{position:absolute;z-index:10;overflow:hidden;list-style:none;margin:0;padding:2px;-webkit-box-shadow:2px 3px 5px rgba(0,0,0,.2);-moz-box-shadow:2px 3px 5px rgba(0,0,0,.2);box-shadow:2px 3px 5px rgba(0,0,0,.2);border-radius:3px;border:1px solid silver;background:white;font-size:90%;font-family:monospace;max-height:20em;overflow-y:auto}.CodeMirror-hint{margin:0;padding:0 4px;border-radius:2px;white-space:pre;color:black;cursor:pointer}li.CodeMirror-hint-active{background:#08f;color:white} +.CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.4em .8em;overflow:hidden;color:inherit}.CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.CodeMirror-dialog input{border:0;outline:0;background:transparent;width:20em;color:inherit;font-family:monospace}.CodeMirror-dialog button{font-size:70%}.Dialog-close{color:#111;float:right;font-family:Arial;font-size:16px;height:30px;line-height:30px;text-align:center;width:30px;cursor:pointer} +.CodeMirror-search-match{background:gold;border-top:1px solid orange;border-bottom:1px solid orange;-moz-box-sizing:border-box;box-sizing:border-box;opacity:.5} \ No newline at end of file diff --git a/BTPanel/static/codemirror/lib/codemirror.js b/BTPanel/static/codemirror/lib/codemirror.js new file mode 100644 index 00000000..b9cb291c --- /dev/null +++ b/BTPanel/static/codemirror/lib/codemirror.js @@ -0,0 +1 @@ +(function(c,d){typeof exports==="object"&&typeof module!=="undefined"?module.exports=d():typeof define==="function"&&define.amd?define(d):(c.CodeMirror=d())}(this,(function(){var iP=navigator.userAgent;var ir=navigator.platform;var kc=/gecko\/\d/i.test(iP);var kv=/MSIE \d/.test(iP);var nf=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(iP);var kj=kv||nf;var kH=kj&&(kv?document.documentMode||6:nf[1]);var mU=/WebKit\//.test(iP);var j6=mU&&/Qt\/\d+\.\d+/.test(iP);var ju=/Chrome\//.test(iP);var iL=/Opera\//.test(iP);var ob=/Apple Computer/.test(navigator.vendor);var jI=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(iP);var iq=/PhantomJS/.test(iP);var hE=/AppleWebKit/.test(iP)&&/Mobile\/\w+/.test(iP);var ie=hE||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(iP);var k9=hE||/Mac/.test(ir);var i6=/\bCrOS\b/.test(iP);var nW=/win/i.test(ir);var nE=iL&&iP.match(/Version\/(\d*\.\d*)/);if(nE){nE=Number(nE[1])}if(nE&&nE>=15){iL=false;mU=true}var mW=k9&&(j6||iL&&(nE==null||nE<12.11));var hT=kc||(kj&&kH>=9);function lO(a){return new RegExp("(^|\\s)"+a+"(?:$|\\s)\\s*")}var kS=function(d,c){var b=d.className;var e=lO(c).exec(b);if(e){var a=b.slice(e.index+e[0].length);d.className=b.slice(0,e.index)+(a?e[1]+a:"")}};function iN(b){for(var a=b.childNodes.length;a>0;--a){b.removeChild(b.firstChild)}return b}function mR(a,b){return iN(a).appendChild(b)}function gZ(f,b,c,d){var a=document.createElement(f);if(c){a.className=c}if(d){a.style.cssText=d}if(typeof b=="string"){a.appendChild(document.createTextNode(b))}else{if(b){for(var e=0;e=f){return h+(f-c)}h+=g-c;h+=b-(h%b);c=g+1}}function hA(){this.id=null}hA.prototype.set=function(a,b){clearTimeout(this.id);this.id=setTimeout(b,a)};function jb(a,c){for(var b=0;b=e){return a+Math.min(d,e-f)}f+=g-a;f+=b-(f%b);a=g+1;if(f>=e){return a}}}var gU=[""];function j7(a){while(gU.length<=a){gU.push(ji(gU)+" ")}return gU[a]}function ji(a){return a[a.length-1]}function mO(a,b){var d=[];for(var c=0;c"\x80"&&(a.toUpperCase()!=a.toLowerCase()||mu.test(a))}function mo(a,b){if(!b){return h0(a)}if(b.source.indexOf("\\w")>-1&&h0(a)){return true}return b.test(a)}function hS(a){for(var b in a){if(a.hasOwnProperty(b)&&a[b]){return false}}return true}var ky=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function iB(a){return a.charCodeAt(0)>=768&&ky.test(a)}function iU(b,c,d){var a=this;this.input=d;a.scrollbarFiller=gZ("div",null,"CodeMirror-scrollbar-filler");a.scrollbarFiller.setAttribute("cm-not-content","true");a.gutterFiller=gZ("div",null,"CodeMirror-gutter-filler");a.gutterFiller.setAttribute("cm-not-content","true");a.lineDiv=gZ("div",null,"CodeMirror-code");a.selectionDiv=gZ("div",null,null,"position: relative; z-index: 1");a.cursorDiv=gZ("div",null,"CodeMirror-cursors");a.measure=gZ("div",null,"CodeMirror-measure");a.lineMeasure=gZ("div",null,"CodeMirror-measure");a.lineSpace=gZ("div",[a.measure,a.lineMeasure,a.selectionDiv,a.cursorDiv,a.lineDiv],null,"position: relative; outline: none");a.mover=gZ("div",[gZ("div",[a.lineSpace],"CodeMirror-lines")],null,"position: relative");a.sizer=gZ("div",[a.mover],"CodeMirror-sizer");a.sizerWidth=null;a.heightForcer=gZ("div",null,null,"position: absolute; height: "+ko+"px; width: 1px;");a.gutters=gZ("div",null,"CodeMirror-gutters");a.lineGutter=null;a.scroller=gZ("div",[a.sizer,a.heightForcer,a.gutters],"CodeMirror-scroll");a.scroller.setAttribute("tabIndex","-1");a.wrapper=gZ("div",[a.scrollbarFiller,a.gutterFiller,a.scroller],"CodeMirror");if(kj&&kH<8){a.gutters.style.zIndex=-1;a.scroller.style.paddingRight=0}if(!mU&&!(kc&&ie)){a.scroller.draggable=true}if(b){if(b.appendChild){b.appendChild(a.wrapper)}else{b(a.wrapper)}}a.viewFrom=a.viewTo=c.first;a.reportedViewFrom=a.reportedViewTo=c.first;a.view=[];a.renderedView=null;a.externalMeasured=null;a.viewOffset=0;a.lastWrapHeight=a.lastWrapWidth=0;a.updateLineNumbers=null;a.nativeBarWidth=a.barHeight=a.barWidth=0;a.scrollbarsClipped=false;a.lineNumWidth=a.lineNumInnerWidth=a.lineNumChars=null;a.alignWidgets=false;a.cachedCharWidth=a.cachedTextHeight=a.cachedPaddingH=null;a.maxLine=null;a.maxLineLength=0;a.maxLineChanged=false;a.wheelDX=a.wheelDY=a.wheelStartX=a.wheelStartY=null;a.shift=false;a.selForContextMenu=null;a.activeTouch=null;d.init(a)}function hm(c,a){a-=c.first;if(a<0||a>=c.size){throw new Error("There is no line "+(a+c.first)+" in the document.")}var f=c;while(!f.lines){for(var e=0;;++e){var b=f.children[e],d=b.chunkSize();if(a=b.first&&aa){return lA(a,hm(c,a).text.length)}return iu(b,hm(c,b.line).text.length)}function iu(b,c){var a=b.ch;if(a==null||a>c){return lA(b.line,c)}else{if(a<0){return lA(b.line,0)}else{return b}}}function lo(b,a){var d=[];for(var c=0;c=g:a.to>g);(b||(b=[])).push(new h7(d,a.from,f?null:a.to))}}}return b}function oc(h,f,c){var b;if(h){for(var e=0;e=f:a.to>f);if(g||a.from==f&&d.type=="bookmark"&&(!c||a.marker.insertLeft)){var j=a.from==null||(d.inclusiveLeft?a.from<=f:a.from0&&h){for(var l=0;l0){continue}var d=[k,1],n=kI(m.from,l.from),e=kI(m.to,l.to);if(n<0||!f.inclusiveLeft&&!n){d.push({from:m.from,to:l.from})}if(e>0||!f.inclusiveRight&&!e){d.push({from:l.to,to:m.to})}h.splice.apply(h,d);k+=d.length-1}}return h}function hV(c){var a=c.markedSpans;if(!a){return}for(var b=0;b=0&&g<=0||c<=0&&g>=0){continue}if(c<=0&&(k.marker.inclusiveRight&&h.inclusiveLeft?kI(b.to,f)>=0:kI(b.to,f)>0)||c>=0&&(k.marker.inclusiveRight&&h.inclusiveLeft?kI(b.from,e)<=0:kI(b.from,e)<0)){return true}}}}function jV(b){var a;while(a=kb(b)){b=a.find(-1,true).line}return b}function kW(b){var a,c;while(a=jy(b)){b=a.find(1,true).line;(c||(c=[])).push(b)}return c}function nJ(b,d){var a=hm(b,d),c=jV(a);if(a==c){return d}return m5(c)}function iJ(b,c){if(c>b.lastLine()){return c}var d=hm(b,c),a;if(!il(b,d)){return c}while(a=jy(d)){d=a.find(1,true).line}return m5(d)+1}function il(a,d){var e=gN&&d.markedSpans;if(e){for(var b=void 0,c=0;cb.maxLineLength){b.maxLineLength=e;b.maxLine=d}})}function iG(g,a,b,c){if(!g){return c(a,b,"ltr")}var d=false;for(var e=0;ea||a==b&&f.to==a){c(Math.max(f.from,a),Math.min(f.to,b),f.level==1?"rtl":"ltr");d=true}}if(!d){c(a,b,"ltr")}}function kT(a){return a.level%2?a.to:a.from}function hJ(a){return a.level%2?a.from:a.to}function md(b){var a=ld(b);return a?kT(a[0]):0}function lj(b){var a=ld(b);if(!a){return b.text.length}return hJ(ji(a))}function ne(d,c,b){var a=d[0].level;if(c==a){return true}if(b==a){return false}return ca){return d}if((b.from==a||b.to==a)){if(c==null){c=d}else{if(ne(e,b.level,e[c].level)){if(b.from!=b.to){hz=c}return d}else{if(b.from!=b.to){hz=d}return c}}}}return c}function hl(b,a,d,c){if(!c){return a+d}do{a+=d}while(a>0&&iB(b.text.charAt(a)));return a}function ka(f,a,g,e){var d=ld(f);if(!d){return nn(f,a,g,e)}var b=n6(d,a),h=d[b];var c=hl(f,a,h.level%2?-g:g,e);for(;;){if(c>h.from&&c0)==h.level%2?h.to:h.from}else{h=d[b+=g];if(!h){return null}if((g>0)==h.level%2){c=hl(f,h.to,-1,e)}else{c=hl(f,h.from,1,e)}}}}function nn(c,a,e,d){var b=a+e;if(d){while(b>0&&iB(c.text.charAt(b))){b+=e}}return b<0||b>c.text.length?null:b}var mc=(function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";var g="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm";function h(l){if(l<=247){return e.charAt(l)}else{if(1424<=l&&l<=1524){return"R"}else{if(1536<=l&&l<=1773){return g.charAt(l-1536)}else{if(1774<=l&&l<=2220){return"r"}else{if(8192<=l&&l<=8203){return"w"}else{if(l==8204){return"b"}else{return"L"}}}}}}}var b=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;var a=/[stwN]/,j=/[LRr]/,k=/[Lb1n]/,f=/[1n]/;var c="L";function d(l,m,n){this.level=l;this.from=m;this.to=n}return function(s){if(!b.test(s)){return false}var R=s.length,F=[];for(var l=0;l-1){d[e]=c.slice(0,f).concat(c.slice(f+1))}}}}}function n9(a,b){var e=h4(a,b);if(!e.length){return}var d=Array.prototype.slice.call(arguments,2);for(var c=0;c0}function nA(a){a.prototype.on=function(c,b){nY(this,c,b)};a.prototype.off=function(c,b){ih(this,c,b)}}function l7(a){if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}}function iT(a){if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}}function na(a){return a.defaultPrevented!=null?a.defaultPrevented:a.returnValue==false}function jK(a){l7(a);iT(a)}function mb(a){return a.target||a.srcElement}function hi(b){var a=b.which;if(a==null){if(b.button&1){a=1}else{if(b.button&2){a=3}else{if(b.button&4){a=2}}}}if(k9&&b.ctrlKey&&a==1){a=3}return a}var kr=function(){if(kj&&kH<9){return false}var a=gZ("div");return"draggable" in a||"dragDrop" in a}();var hk;function lP(a){if(hk==null){var b=gZ("span","\u200b");mR(a,gZ("span",[b,document.createTextNode("x")]));if(a.firstChild.offsetHeight!=0){hk=b.offsetWidth<=1&&b.offsetHeight>2&&!(kj&&kH<8)}}var c=hk?gZ("span","\u200b"):gZ("span","\u00a0",null,"display: inline-block; width: 1px; margin-right: -1px");c.setAttribute("cm-text","");return c}var hj;function m2(b){if(hj!=null){return hj}var a=mR(b,document.createTextNode("A\u062eA"));var c=ki(a,0,1).getBoundingClientRect();var d=ki(a,1,2).getBoundingClientRect();iN(b);if(!c||c.left==c.right){return false}return hj=(d.right-c.right<3)}var hd="\n\nb".split(/\n/).length!=3?function(b){var a=0,e=[],c=b.length;while(a<=c){var d=b.indexOf("\n",a);if(d==-1){d=b.length}var f=b.slice(a,b.charAt(d-1)=="\r"?d-1:d);var g=f.indexOf("\r");if(g!=-1){e.push(f.slice(0,g));a+=g+1}else{e.push(f);a=d+1}}return e}:function(a){return a.split(/\r\n?|\n/)};var lv=window.getSelection?function(b){try{return b.selectionStart!=b.selectionEnd}catch(a){return false}}:function(b){var c;try{c=b.ownerDocument.selection.createRange()}catch(a){}if(!c||c.parentElement()!=b){return false}return c.compareEndPoints("StartToEnd",c)!=0};var jz=(function(){var a=gZ("div");if("oncopy" in a){return true}a.setAttribute("oncopy","return;");return typeof a.oncopy=="function"})();var hu=null;function n2(d){if(hu!=null){return hu}var c=mR(d,gZ("span","x"));var b=c.getBoundingClientRect();var a=ki(c,0,1).getBoundingClientRect();return hu=Math.abs(b.left-a.left)>1}var le={};var nQ={};function jE(a,b){if(arguments.length>2){b.dependencies=Array.prototype.slice.call(arguments,2)}le[a]=b}function lT(b,a){nQ[b]=a}function hP(a){if(typeof a=="string"&&nQ.hasOwnProperty(a)){a=nQ[a]}else{if(a&&typeof a.name=="string"&&nQ.hasOwnProperty(a.name)){var b=nQ[a.name];if(typeof b=="string"){b={name:b}}a=ks(b,a);a.name=b.name}else{if(typeof a=="string"&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a)){return hP("application/xml")}else{if(typeof a=="string"&&/^[\w\-]+\/[\w\-]+\+json$/.test(a)){return hP("application/json")}}}}if(typeof a=="string"){return{name:a}}else{return a||{name:"null"}}}function h8(f,g){g=hP(g);var c=le[g.name];if(!c){return h8(f,"text/plain")}var b=c(f,g);if(iV.hasOwnProperty(g.name)){var e=iV[g.name];for(var a in e){if(!e.hasOwnProperty(a)){continue}if(b.hasOwnProperty(a)){b["_"+a]=b[a]}b[a]=e[a]}}b.name=g.name;if(g.helperType){b.helperType=g.helperType}if(g.modeProps){for(var d in g.modeProps){b[d]=g.modeProps[d]}}return b}var iV={};function jc(b,c){var a=iV.hasOwnProperty(b)?iV[b]:(iV[b]={});n0(c,a)}function nK(c,b){if(b===true){return b}if(c.copyState){return c.copyState(b)}var d={};for(var a in b){var e=b[a];if(e instanceof Array){e=e.concat([])}d[a]=e}return d}function hX(b,a){var c;while(b.innerMode){c=b.innerMode(a);if(!c||c.mode==b){break}a=c.state;b=c.mode}return c||{mode:b,state:a}}function nR(b,c,a){return b.startState?b.startState(c,a):true}var hU=function(a,b){this.pos=this.start=0;this.string=a;this.tabSize=b||8;this.lastColumnPos=this.lastColumnValue=0;this.lineStart=0};hU.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||undefined},next:function(){if(this.posb},eatSpace:function(){var b=this;var a=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos))){++b.pos}return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);if(b>-1){this.pos=b;return true}},backUp:function(a){this.pos-=a},column:function(){if(this.lastColumnPos0){return null}if(e&&f!==false){this.pos+=e[0].length}return e}},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(b,a){this.lineStart+=b;try{return a()}finally{this.lineStart-=b}}};function ib(f,g,b,c){var d=[f.state.modeGen],e={};j2(f,g.text,f.doc.mode,b,function(k,j){return d.push(k,j)},e,c);var h=function(j){var l=f.state.overlays[j],k=1,m=0;j2(f,g.text,l.mode,true,function(r,p){var n=k;while(mr){d.splice(k,1,r,d[k+1],q)}k+=2;m=Math.min(r,q)}if(!p){return}if(l.opaque){d.splice(n,k-n,r,"overlay "+p);k=n+2}else{for(;ne.options.maxHighlightLength?nK(e.doc.mode,c):c);d.stateAfter=c;d.styles=b.styles;if(b.classes){d.styleClasses=b.classes}else{if(d.styleClasses){d.styleClasses=null}}if(a===e.doc.frontier){e.doc.frontier++}}return d.styles}function kM(e,a,g){var c=e.doc,d=e.display;if(!c.mode.startState){return true}var b=mv(e,a,g),f=b>c.first&&hm(c,b-1).stateAfter;if(!f){f=nR(c.mode)}else{f=nK(c.mode,f)}c.iter(b,a,function(h){k0(e,h.text,f);var j=b==a-1||b%5==0||b>=d.viewFrom&&bb.start){return d}}throw new Error("Mode "+a.name+" failed to advance stream.")}function j4(c,f,j,k){var d=function(n){return({start:b.start,end:b.pos,string:b.current(),type:l||null,state:n?nK(e.mode,m):m})};var e=c.doc,h=e.mode,l;f=i3(e,f);var a=hm(e,f.line),m=kM(c,f.line,j);var b=new hU(a.text,c.options.tabSize),g;if(k){g=[]}while((k||b.pose.options.maxHighlightLength){o=false;if(m){k0(e,c,p,d.pos)}d.pos=c.length;g=null}else{g=i8(jj(l,d,p,a),n)}if(a){var b=a[0].name;if(b){g="m-"+(g?b+" "+g:b)}}if(!o||j!=g){while(hj;--a){if(a<=f.first){return f.first}var c=hm(f,a-1);if(c.stateAfter&&(!h||a<=f.frontier)){return a}var d=mV(c.text,null,e.options.tabSize);if(g==null||k>d){g=a-1;k=d}}return g}function gW(b,c,a){this.text=b;mM(this,c);this.height=a?a(this):1}nA(gW);gW.prototype.lineNo=function(){return m5(this)};function hY(e,a,d,c){e.text=a;if(e.stateAfter){e.stateAfter=null}if(e.styles){e.styles=null}if(e.order!=null){e.order=null}hV(e);mM(e,d);var b=c?c(e):1;if(b!=e.height){gV(e,b)}}function nv(a){a.parent=null;hV(a)}var lE={};var nM={};function hO(b,c){if(!b||/^\s*$/.test(b)){return null}var a=c.addModeClass?nM:lE;return a[b]||(a[b]=b.replace(/\S+/g,"cm-$&"))}function j0(c,d){var e=gZ("span",null,null,mU?"padding-right: .1px":null);var f={pre:gZ("pre",[e],"CodeMirror-line"),content:e,col:0,pos:0,cm:c,trailingSpace:false,splitSpaces:(kj||mU)&&c.getOption("lineWrapping")};d.measure={};for(var g=0;g<=(d.rest?d.rest.length:0);g++){var a=g?d.rest[g-1]:d.line,h=void 0;f.pos=0;f.addToken=ke;if(m2(c.display.measure)&&(h=ld(a))){f.addToken=lF(f.addToken,h)}f.map=[];var j=d!=c.display.externalMeasured&&m5(a);lK(a,f,jG(c,a,j));if(a.styleClasses){if(a.styleClasses.bgClass){f.bgClass=g9(a.styleClasses.bgClass,f.bgClass||"")}if(a.styleClasses.textClass){f.textClass=g9(a.styleClasses.textClass,f.textClass||"")}}if(f.map.length==0){f.map.push(0,0,f.content.appendChild(lP(c.display.measure)))}if(g==0){d.measure.map=f.map;d.measure.cache={}}else{(d.measure.maps||(d.measure.maps=[])).push(f.map);(d.measure.caches||(d.measure.caches=[])).push({})}}if(mU){var b=f.content.lastChild;if(/\bcm-tab\b/.test(b.className)||(b.querySelector&&b.querySelector(".cm-tab"))){f.content.className="cm-tab-wrap-hack"}}n9(c,"renderLine",c,d.line,f.pre);if(f.pre.className){f.textClass=g9(f.pre.className,f.textClass||"")}return f}function hn(b){var a=gZ("span","\u2022","cm-invalidchar");a.title="\\u"+b.charCodeAt(0).toString(16);a.setAttribute("aria-label",a.title);return a}function ke(e,k,u,c,g,r,l){if(!k){return}var a=e.splitSpaces?ma(k,e.trailingSpace):k;var q=e.cm.state.specialChars,p=false;var b;if(!q.test(k)){e.col+=k.length;b=document.createTextNode(a);e.map.push(e.pos,e.pos+k.length,b);if(kj&&kH<9){p=true}e.pos+=k.length}else{b=document.createDocumentFragment();var n=0;while(true){q.lastIndex=n;var d=q.exec(k);var s=d?d.index-n:k.length-n;if(s){var h=document.createTextNode(a.slice(n,n+s));if(kj&&kH<9){b.appendChild(gZ("span",[h]))}else{b.appendChild(h)}e.map.push(e.pos,e.pos+s,h);e.col+=s;e.pos+=s}if(!d){break}n+=s+1;var t=void 0;if(d[0]=="\t"){var f=e.cm.options.tabSize,j=f-e.col%f;t=b.appendChild(gZ("span",j7(j),"cm-tab"));t.setAttribute("role","presentation");t.setAttribute("cm-text","\t");e.col+=j}else{if(d[0]=="\r"||d[0]=="\n"){t=b.appendChild(gZ("span",d[0]=="\r"?"\u240d":"\u2424","cm-invalidchar"));t.setAttribute("cm-text",d[0]);e.col+=1}else{t=e.cm.options.specialCharPlaceholder(d[0]);t.setAttribute("cm-text",d[0]);if(kj&&kH<9){b.appendChild(gZ("span",[t]))}else{b.appendChild(t)}e.col+=1}}e.map.push(e.pos,e.pos+1,t);e.pos++}}e.trailingSpace=a.charCodeAt(k.length-1)==32;if(u||c||g||p||l){var o=u||"";if(c){o+=c}if(g){o+=g}var m=gZ("span",[b],o,l);if(r){m.title=r}return e.content.appendChild(m)}e.content.appendChild(b)}function ma(a,b){if(a.length>1&&!/ /.test(a)){return a}var e=b,f="";for(var d=0;dm&&l.from<=m){break}}if(l.to>=k){return b(f,d,n,j,c,e,g)}b(f,d.slice(0,l.to-m),n,j,null,e,g);j=null;d=d.slice(l.to-m);m=l.to}}}function ny(e,c,b,d){var a=!d&&b.widgetNode;if(a){e.map.push(e.pos,e.pos+c,a)}if(!d&&e.cm.display.input.needsContentAttribute){if(!a){a=e.content.appendChild(document.createElement("span"))}a.setAttribute("cm-marker",b.id)}if(a){e.cm.display.input.setUneditable(a);e.content.appendChild(a)}e.pos+=c;e.trailingSpace=false}function lK(d,A,e){var o=d.markedSpans,h=d.text,C=0;if(!o){for(var l=1;lq||B.collapsed&&y.to==q&&y.from==q)){if(y.to!=null&&y.to!=q&&k>y.to){k=y.to;m=""}if(B.className){v+=" "+B.className}if(B.css){c=(c?c+";":"")+B.css}if(B.startStyle&&y.from==q){D+=" "+B.startStyle}if(B.endStyle&&y.to==k){(f||(f=[])).push(B.endStyle,y.to)}if(B.title&&!g){g=B.title}if(B.collapsed&&(!t||lW(t.marker,B)<0)){t=y}}else{if(y.from>q&&k>y.from){k=y.from}}}}if(f){for(var n=0;n=w){break}var b=Math.min(w,k);while(true){if(a){var u=q+a.length;if(!t){var r=u>b?a.slice(0,b-q):a;A.addToken(A,r,s?s+v:v,D,q+r.length==k?m:"",g,c)}if(u>=b){a=a.slice(b-q);q=b;break}q=u;D=""}a=h.slice(C,C=e[x++]);s=hO(e[x++],A.cm.options)}}}function lk(b,a,c){this.line=a;this.rest=kW(a);this.size=this.rest?m5(ji(this.rest))-c+1:1;this.node=this.text=null;this.hidden=il(b,a)}function hQ(e,a,b){var c=[],f;for(var d=a;d2){e.push((b.bottom+j.top)/2-d.top)}}}e.push(d.bottom-d.top)}}function jT(c,e,b){if(c.line==e){return{map:c.measure.map,cache:c.measure.cache}}for(var d=0;db){return{map:c.measure.maps[a],cache:c.measure.caches[a],before:true}}}}function mP(c,d){d=jV(d);var a=m5(d);var e=c.display.externalMeasured=new lk(c.doc,d,a);e.lineN=a;var b=e.built=j0(c,e);e.text=b.pre;mR(c.display.lineMeasure,b.pre);return e}function ic(b,d,a,c){return mB(b,gP(b,d),a,c)}function hp(a,b){if(b>=a.display.viewFrom&&b=c.lineN&&bk){f=b-g;j=f-1;if(k>=b){c="right"}}}}if(j!=null){h=a[e+2];if(g==b&&d==(h.insertLeft?"left":"right")){c=d}if(d=="left"&&j==0){while(e&&a[e-2]==a[e-3]&&a[e-1].insertLeft){h=a[(e-=3)+2];c="left"}}if(d=="right"&&j==b-g){while(e=0;a--){if((b=d[a]).left!=b.right){break}}}return b}function kL(g,s,d,k){var f=n3(s.map,d,k);var u=f.node,l=f.start,m=f.end,p=f.collapse;var o;if(u.nodeType==3){for(var j=0;j<4;j++){while(l&&iB(s.line.text.charAt(f.coverStart+l))){--l}while(f.coverStart+m0){p=k="right"}var n;if(g.options.lineWrapping&&(n=u.getClientRects()).length>1){o=n[k=="right"?n.length-1:0]}else{o=u.getBoundingClientRect()}}if(kj&&kH<9&&!l&&(!o||!o.left&&!o.right)){var h=u.parentNode.getClientRects()[0];if(h){o={left:h.left,right:h.left+kJ(g.display),top:h.top,bottom:h.bottom}}else{o=jk}}var a=o.top-s.rect.top,c=o.bottom-s.rect.top;var q=(a+c)/2;var r=s.view.measure.heights;var t=0;for(;tp.from){return j(n-1)}return j(n,o)}var h=ld(g),c=e.ch;if(!h){return j(c)}var m=n6(h,c);var k=b(c,m);if(hz!=null){k.other=b(c,hz)}return k}function kw(c,a){var b=0;a=i3(c.doc,a);if(!c.options.lineWrapping){b=kJ(c.display)*a.ch}var e=hm(c.doc,a.line);var d=m7(e)+hs(c.display);return{left:b,right:b,top:d,bottom:d+e.height}}function g1(c,e,d,a){var b=lA(c,e);b.xRel=a;if(d){b.outside=true}return b}function hg(d,g,h){var e=d.doc;h+=d.display.viewOffset;if(h<0){return g1(e.first,0,true,-1)}var j=nj(e,h),c=e.first+e.size-1;if(j>c){return g1(e.first+e.size-1,hm(e,c).text.length,true,1)}if(g<0){g=0}var k=hm(e,j);for(;;){var b=mX(d,k,j,g,h);var f=jy(k);var a=f&&f.find(0,true);if(f&&(b.ch>a.from.ch||b.ch==a.from.ch&&b.xRel>0)){j=m5(k=a.to.line)}else{return b}}}function mX(e,r,m,c,d){var f=d-m7(r);var k=false,y=2*e.display.wrapper.clientWidth;var B=gP(e,r);function q(C){var D=lL(e,lA(m,C),"line",r,B);k=true;if(f>D.bottom){return D.left-y}else{if(fs){return g1(m,p,l,1)}for(;;){if(a?p==x||p==ka(r,x,1):p-x<=1){var b=c0&&b1){var w=mB(e,B,b,"right");if(f<=w.bottom&&f>=w.top&&Math.abs(c-w.right)1?1:0);return g}var h=Math.ceil(z/2),j=x+h;if(a){j=x;for(var v=0;vc){p=j;s=n;if(l=k){s+=1000}z=h}else{x=j;A=n;t=k;z-=h}}}var n7;function nF(a){if(a.cachedTextHeight!=null){return a.cachedTextHeight}if(n7==null){n7=gZ("pre");for(var b=0;b<49;++b){n7.appendChild(document.createTextNode("x"));n7.appendChild(gZ("br"))}n7.appendChild(document.createTextNode("x"))}mR(a.measure,n7);var c=n7.offsetHeight/50;if(c>3){a.cachedTextHeight=c}iN(a.measure);return c||1}function kJ(a){if(a.cachedCharWidth!=null){return a.cachedCharWidth}var c=gZ("span","xxxxxxxxxx");var b=gZ("pre",[c]);mR(a.measure,b);var d=c.getBoundingClientRect(),e=(d.right-d.left)/10;if(e>2){a.cachedCharWidth=e}return e||10}function ho(g){var b=g.display,d={},e={};var c=b.gutters.clientLeft;for(var a=b.gutters.firstChild,f=0;a;a=a.nextSibling,++f){d[g.options.gutters[f]]=a.offsetLeft+a.clientLeft+c;e[g.options.gutters[f]]=a.clientWidth}return{fixedPos:lw(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:d,gutterWidth:e,wrapperWidth:b.wrapper.clientWidth}}function lw(a){return a.scroller.getBoundingClientRect().left-a.sizer.getBoundingClientRect().left}function mp(b){var c=nF(b.display),d=b.options.lineWrapping;var a=d&&Math.max(5,b.display.scroller.clientWidth/kJ(b.display)-3);return function(f){if(il(b.doc,f)){return 0}var g=0;if(f.widgets){for(var e=0;e=d.display.viewTo){return null}a-=d.display.viewFrom;if(a<0){return null}var c=d.display.view;for(var b=0;b=c.display.viewTo||b.to().line3){e(D,F.top,null,F.bottom);D=n;if(F.bottomz.bottom||E.bottom==z.bottom&&E.right>z.right){z=E}if(D0){b.blinker=setInterval(function(){return b.cursorDiv.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate)}else{if(a.options.cursorBlinkRate<0){b.cursorDiv.style.visibility="hidden"}}}function kh(a){if(!a.state.focused){a.display.input.focus();mm(a)}}function nk(a){a.state.delayingBlurEvent=true;setTimeout(function(){if(a.state.delayingBlurEvent){a.state.delayingBlurEvent=false;nL(a)}},100)}function mm(a,b){if(a.state.delayingBlurEvent){a.state.delayingBlurEvent=false}if(a.options.readOnly=="nocursor"){return}if(!a.state.focused){n9(a,"focus",a,b);a.state.focused=true;h6(a.display.wrapper,"CodeMirror-focused");if(!a.curOp&&a.display.selForContextMenu!=a.doc.sel){a.display.input.reset();if(mU){setTimeout(function(){return a.display.input.reset(true)},20)}}a.display.input.receivedFocus()}ku(a)}function nL(a,b){if(a.state.delayingBlurEvent){return}if(a.state.focused){n9(a,"blur",a,b);a.state.focused=false;kS(a.display.wrapper,"CodeMirror-focused")}clearInterval(a.display.blinker);setTimeout(function(){if(!a.state.focused){a.display.shift=false}},150)}function ja(a){var c=a.display,b=c.view;if(!c.alignWidgets&&(!c.gutters.firstChild||!a.options.fixedGutter)){return}var e=lw(c)-c.scroller.scrollLeft+a.doc.scrollLeft;var j=c.gutters.offsetWidth,h=e+"px";for(var f=0;f0.001||d<-0.001){gV(b.line,a);kX(b.line);if(b.rest){for(var k=0;k=d){e=nj(c,m7(hm(c,b))-g.wrapper.clientHeight);d=b}}}return{from:e,to:Math.max(d,e+1)}}function l4(a,b){if(Math.abs(a.doc.scrollTop-b)<2){return}a.doc.scrollTop=b;if(!kc){lN(a,{top:b})}if(a.display.scroller.scrollTop!=b){a.display.scroller.scrollTop=b}a.display.scrollbars.setScrollTop(b);if(kc){lN(a)}ij(a,100)}function nq(a,b,c){if(c?b==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-b)<2){return}b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth);a.doc.scrollLeft=b;ja(a);if(a.display.scroller.scrollLeft!=b){a.display.scroller.scrollLeft=b}a.display.scrollbars.setScrollLeft(b)}var iF=0;var kG=null;if(kj){kG=-0.53}else{if(kc){kG=15}else{if(ju){kG=-0.7}else{if(ob){kG=-1/3}}}}function ls(b){var c=b.wheelDeltaX,a=b.wheelDeltaY;if(c==null&&b.detail&&b.axis==b.HORIZONTAL_AXIS){c=b.detail}if(a==null&&b.detail&&b.axis==b.VERTICAL_AXIS){a=b.detail}else{if(a==null){a=b.wheelDelta}}return{x:c,y:a}}function mF(a){var b=ls(a);b.x*=kG;b.y*=kG;return b}function k8(e,l){var c=ls(l),a=c.x,b=c.y;var j=e.display,f=j.scroller;var m=f.scrollWidth>f.clientWidth;var n=f.scrollHeight>f.clientHeight;if(!(a&&m||b&&n)){return}if(b&&k9&&mU){outer:for(var d=l.target,g=j.view;d!=f;d=d.parentNode){for(var o=0;od.clientWidth+1;var e=d.scrollHeight>d.clientHeight+1;var a=d.nativeBarWidth;if(e){this.vert.style.display="block";this.vert.style.bottom=b?a+"px":"0";var f=d.viewHeight-(b?a:0);this.vert.firstChild.style.height=Math.max(0,d.scrollHeight-d.clientHeight+f)+"px"}else{this.vert.style.display="";this.vert.firstChild.style.height="0"}if(b){this.horiz.style.display="block";this.horiz.style.right=e?a+"px":"0";this.horiz.style.left=d.barLeft+"px";var c=d.viewWidth-d.barLeft-(e?a:0);this.horiz.firstChild.style.width=(d.scrollWidth-d.clientWidth+c)+"px"}else{this.horiz.style.display="";this.horiz.firstChild.style.width="0"}if(!this.checkedZeroWidth&&d.clientHeight>0){if(a==0){this.zeroWidthHack()}this.checkedZeroWidth=true}return{right:e?a:0,bottom:b?a:0}},setScrollLeft:function(a){if(this.horiz.scrollLeft!=a){this.horiz.scrollLeft=a}if(this.disableHoriz){this.enableZeroWidthBar(this.horiz,this.disableHoriz)}},setScrollTop:function(a){if(this.vert.scrollTop!=a){this.vert.scrollTop=a}if(this.disableVert){this.enableZeroWidthBar(this.vert,this.disableVert)}},zeroWidthHack:function(){var a=k9&&!jI?"12px":"18px";this.horiz.style.height=this.vert.style.width=a;this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none";this.disableHoriz=new hA;this.disableVert=new hA},enableZeroWidthBar:function(c,a){c.style.pointerEvents="auto";function b(){var d=c.getBoundingClientRect();var e=document.elementFromPoint(d.left+1,d.bottom-1);if(e!=c){c.style.pointerEvents="none"}else{a.set(1000,b)}}a.set(1000,b)},clear:function(){var a=this.horiz.parentNode;a.removeChild(this.horiz);a.removeChild(this.vert)}},i7.prototype);function hy(){}hy.prototype=n0({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},hy.prototype);function hK(c,a){if(!a){a=kR(c)}var d=c.display.barWidth,e=c.display.barHeight;nN(c,a);for(var b=0;b<4&&d!=c.display.barWidth||e!=c.display.barHeight;b++){if(d!=c.display.barWidth&&c.options.lineWrapping){i(c)}nN(c,kR(c));d=c.display.barWidth;e=c.display.barHeight}}function nN(b,d){var a=b.display;var c=a.scrollbars.update(d);a.sizer.style.paddingRight=(a.barWidth=c.right)+"px";a.sizer.style.paddingBottom=(a.barHeight=c.bottom)+"px";a.heightForcer.style.borderBottom=c.bottom+"px solid transparent";if(c.right&&c.bottom){a.scrollbarFiller.style.display="block";a.scrollbarFiller.style.height=c.bottom+"px";a.scrollbarFiller.style.width=c.right+"px"}else{a.scrollbarFiller.style.display=""}if(c.bottom&&b.options.coverGutterNextToScrollbar&&b.options.fixedGutter){a.gutterFiller.style.display="block";a.gutterFiller.style.height=c.bottom+"px";a.gutterFiller.style.width=d.gutterWidth+"px"}else{a.gutterFiller.style.display=""}}var lX={"native":i7,"null":hy};function oa(a){if(a.display.scrollbars){a.display.scrollbars.clear();if(a.display.scrollbars.addClass){kS(a.display.wrapper,a.display.scrollbars.addClass)}}a.display.scrollbars=new lX[a.options.scrollbarStyle](function(b){a.display.wrapper.insertBefore(b,a.display.scrollbarFiller);nY(b,"mousedown",function(){if(a.state.focused){setTimeout(function(){return a.display.input.focus()},0)}});b.setAttribute("cm-not-content","true")},function(b,c){if(c=="horizontal"){nq(a,b)}else{l4(a,b)}},a);if(a.display.scrollbars.addClass){h6(a.display.wrapper,a.display.scrollbars.addClass)}}function iD(f,b){if(nT(f,"scrollCursorIntoView")){return}var a=f.display,e=a.sizer.getBoundingClientRect(),d=null;if(b.top+e.top<0){d=true}else{if(b.bottom+e.top>(window.innerHeight||document.documentElement.clientHeight)){d=false}}if(d!=null&&!iq){var c=gZ("div","\u200b",null,("position: absolute;\n top: "+(b.top-a.viewOffset-hs(f.display))+"px;\n height: "+(b.bottom-b.top+lh(f)+a.barHeight)+"px;\n left: "+(b.left)+"px; width: 2px;"));f.display.lineSpace.appendChild(c);c.scrollIntoView(d);f.display.lineSpace.removeChild(c)}}function mx(a,d,h,j){if(j==null){j=0}var b;for(var g=0;g<5;g++){var f=false;b=lL(a,d);var c=!h||h==d?b:lL(a,h);var k=mn(a,Math.min(b.left,c.left),Math.min(b.top,c.top)-j,Math.max(b.left,c.left),Math.max(b.bottom,c.bottom)+j);var e=a.doc.scrollTop,l=a.doc.scrollLeft;if(k.scrollTop!=null){l4(a,k.scrollTop);if(Math.abs(a.doc.scrollTop-e)>1){f=true}}if(k.scrollLeft!=null){nq(a,k.scrollLeft);if(Math.abs(a.doc.scrollLeft-l)>1){f=true}}if(!f){break}}return b}function mt(d,e,b,f,c){var a=mn(d,e,b,f,c);if(a.scrollTop!=null){l4(d,a.scrollTop)}if(a.scrollLeft!=null){nq(d,a.scrollLeft)}}function mn(d,o,e,q,f){var j=d.display,l=nF(d.display);if(e<0){e=0}var n=d.curOp&&d.curOp.scrollTop!=null?d.curOp.scrollTop:j.scroller.scrollTop;var b=m8(d),r={};if(f-e>b){f=e+b}var p=d.doc.height+ni(j);var h=ep-l;if(en+b){var g=Math.min(e,(k?p:f)-b);if(g!=n){r.scrollTop=g}}}var a=d.curOp&&d.curOp.scrollLeft!=null?d.curOp.scrollLeft:j.scroller.scrollLeft;var c=i4(d)-(d.options.fixedGutter?j.gutters.offsetWidth:0);var m=q-o>c;if(m){q=o+c}if(o<10){r.scrollLeft=0}else{if(oc+a-3){r.scrollLeft=q+(m?0:10)-c}}}return r}function lM(a,b,c){if(b!=null||c!=null){h2(a)}if(b!=null){a.curOp.scrollLeft=(a.curOp.scrollLeft==null?a.doc.scrollLeft:a.curOp.scrollLeft)+b}if(c!=null){a.curOp.scrollTop=(a.curOp.scrollTop==null?a.doc.scrollTop:a.curOp.scrollTop)+c}}function jl(b){h2(b);var d=b.getCursor(),a=d,c=d;if(!b.options.lineWrapping){a=d.ch?lA(d.line,d.ch-1):d;c=lA(d.line,d.ch+1)}b.curOp.scrollToPos={from:a,to:c,margin:b.options.cursorScrollMargin,isCursor:true}}function h2(c){var d=c.curOp.scrollToPos;if(d){c.curOp.scrollToPos=null;var a=kw(c,d.from),b=kw(c,d.to);var e=mn(c,Math.min(a.left,b.left),Math.min(a.top,b.top)-d.margin,Math.max(a.right,b.right),Math.max(a.bottom,b.bottom)+d.margin);c.scrollTo(e.scrollLeft,e.scrollTop)}}var iv=0;function lY(a){a.curOp={cm:a,viewChanged:false,startHeight:a.doc.height,forceUpdate:false,updateInput:null,typing:false,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:false,updateMaxLine:false,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:false,id:++iv};js(a.curOp)}function ng(a){var b=a.curOp;nX(b,function(c){for(var d=0;d=c.viewTo)||c.maxLineChanged&&a.options.lineWrapping;b.update=b.mustUpdate&&new n4(a,b.mustUpdate&&{top:b.scrollTop,ensure:b.scrollToPos},b.forceUpdate)}function m6(a){a.updatedDisplay=a.mustUpdate&&mC(a.cm,a.update)}function nP(b){var a=b.cm,c=a.display;if(b.updatedDisplay){i(a)}b.barMeasure=kR(a);if(c.maxLineChanged&&!a.options.lineWrapping){b.adjustWidthTo=ic(a,c.maxLine,c.maxLine.text.length).left+3;a.display.sizerWidth=b.adjustWidthTo;b.barMeasure.scrollWidth=Math.max(c.scroller.clientWidth,c.sizer.offsetLeft+b.adjustWidthTo+lh(a)+a.display.barWidth);b.maxScrollLeft=Math.max(0,c.sizer.offsetLeft+b.adjustWidthTo-i4(a))}if(b.updatedDisplay||b.selectionChanged){b.preparedSelection=c.input.prepareSelection(b.focus)}}function m9(b){var a=b.cm;if(b.adjustWidthTo!=null){a.display.sizer.style.minWidth=b.adjustWidthTo+"px";if(b.maxScrollLefte)){h.updateLineNumbers=e}c.curOp.viewChanged=true;if(e>=h.viewTo){if(gN&&nJ(c.doc,e)h.viewFrom){jw(c)}else{h.viewFrom+=b;h.viewTo+=b}}else{if(e<=h.viewFrom&&d>=h.viewTo){jw(c)}else{if(e<=h.viewFrom){var f=jq(c,d,d+b,1);if(f){h.view=h.view.slice(f.index);h.viewFrom=f.lineN;h.viewTo+=b}else{jw(c)}}else{if(d>=h.viewTo){var k=jq(c,e,e,-1);if(k){h.view=h.view.slice(0,k.index);h.viewTo=k.lineN}else{jw(c)}}else{var g=jq(c,e,e,-1);var j=jq(c,d,d+b,1);if(g&&j){h.view=h.view.slice(0,g.index).concat(hQ(c,g.lineN,j.lineN)).concat(h.view.slice(j.index));h.viewTo+=b}else{jw(c)}}}}}}var a=h.externalMeasured;if(a){if(d=c.lineN&&f=a.viewTo){return}var e=a.view[iR(g,f)];if(e.node==null){return}var d=e.changes||(e.changes=[]);if(jb(d,b)==-1){d.push(b)}}function jw(a){a.display.viewFrom=a.display.viewTo=a.doc.first;a.display.view=[];a.display.viewOffset=0}function jq(a,g,e,h){var d=iR(a,g),b,c=a.display.view;if(!gN||e==a.doc.first+a.doc.size){return{index:d,lineN:e}}var j=a.display.viewFrom;for(var f=0;f0){if(d==c.length-1){return null}b=(j+c[d].size)-g;d++}else{b=j-g}g+=b;e+=b}while(nJ(a.doc,e)!=e){if(d==(h<0?0:c.length-1)){return null}e+=h*c[d-(h<0?1:0)].size;d+=h}return{index:d,lineN:e}}function lm(c,a,b){var d=c.display,e=d.view;if(e.length==0||a>=d.viewTo||b<=d.viewFrom){d.view=hQ(c,a,b);d.viewFrom=a}else{if(d.viewFrom>a){d.view=hQ(c,a,d.viewFrom).concat(d.view)}else{if(d.viewFromb){d.view=d.view.slice(0,iR(c,b))}}}d.viewTo=b}function jv(e){var d=e.display.view,a=0;for(var b=0;b=c.display.viewTo){return}var d=+new Date+c.options.workTime;var b=nK(a.mode,kM(c,a.frontier));var e=[];a.iter(a.frontier,Math.min(a.first+a.size,c.display.viewTo+500),function(h){if(a.frontier>=c.display.viewFrom){var n=h.styles,j=h.text.length>c.options.maxHighlightLength;var l=ib(c,h,j?nK(a.mode,b):b,true);h.styles=l.styles;var f=h.styleClasses,m=l.classes;if(m){h.styleClasses=m}else{if(f){h.styleClasses=null}}var k=!n||n.length!=h.styles.length||f!=m&&(!f||!m||f.bgClass!=m.bgClass||f.textClass!=m.textClass);for(var g=0;!k&&gd){ij(c,c.options.workDelay);return true}});if(e.length){lI(c,function(){for(var f=0;f=g.viewFrom&&h.visible.to<=g.viewTo&&(g.updateLineNumbers==null||g.updateLineNumbers>=g.viewTo)&&g.renderedView==g.view&&jv(b)==0){return false}if(iE(b)){jw(b);h.dims=ho(b)}var j=c.first+c.size;var e=Math.max(h.visible.from-b.options.viewportMargin,c.first);var d=Math.min(j,h.visible.to+b.options.viewportMargin);if(g.viewFromd&&g.viewTo-d<20){d=Math.min(j,g.viewTo)}if(gN){e=nJ(b.doc,e);d=iJ(b.doc,d)}var k=e!=g.viewFrom||d!=g.viewTo||g.lastWrapHeight!=h.wrapperHeight||g.lastWrapWidth!=h.wrapperWidth;lm(b,e,d);g.viewOffset=m7(hm(b.doc,g.viewFrom));b.display.mover.style.top=g.viewOffset+"px";var a=jv(b);if(!k&&a==0&&!h.force&&g.renderedView==g.view&&(g.updateLineNumbers==null||g.updateLineNumbers>=g.viewTo)){return false}var f=j3();if(a>4){g.lineDiv.style.display="none"}km(b,g.updateLineNumbers,h.dims);if(a>4){g.lineDiv.style.display=""}g.renderedView=g.view;if(f&&j3()!=f&&f.offsetHeight){f.focus()}iN(g.cursorDiv);iN(g.selectionDiv);g.gutters.style.height=g.sizer.style.minHeight=0;if(k){g.lastWrapHeight=h.wrapperHeight;g.lastWrapWidth=h.wrapperWidth;ij(b,400)}g.updateLineNumbers=null;return true}function kt(e,a){var c=a.viewport;for(var b=true;;b=false){if(!b||!e.options.lineWrapping||a.oldDisplayWidth==i4(e)){if(c&&c.top!=null){c={top:Math.min(e.doc.height+ni(e.display)-m8(e),c.top)}}a.visible=lc(e.display,e.doc,c);if(a.visible.from>=e.display.viewFrom&&a.visible.to<=e.display.viewTo){break}}if(!mC(e,a)){break}i(e);var d=kR(e);nu(e);hK(e,d);kV(e,d)}a.signal(e,"update",e);if(e.display.viewFrom!=e.display.reportedViewFrom||e.display.viewTo!=e.display.reportedViewTo){a.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo);e.display.reportedViewFrom=e.display.viewFrom;e.display.reportedViewTo=e.display.viewTo}}function lN(d,b){var a=new n4(d,b);if(mC(d,a)){i(d);kt(d,a);var c=kR(d);nu(d);hK(d,c);kV(d,c);a.finish()}}function km(c,m,d){var g=c.display,a=c.options.lineNumbers;var o=g.lineDiv,b=o.firstChild;function h(p){var q=p.nextSibling;if(mU&&k9&&c.display.currentWheelTarget==p){p.style.display="none"}else{p.parentNode.removeChild(p)}return q}var f=g.view,j=g.viewFrom;for(var l=0;l-1){e=false}nC(c,k,j,d)}if(e){iN(k.lineNumber);k.lineNumber.appendChild(document.createTextNode(jF(c.options,j)))}b=k.node.nextSibling}}j+=k.size}while(b){b=h(b)}}function jO(a){var b=a.display.gutters.offsetWidth;a.display.sizer.style.marginLeft=b+"px"}function kV(a,b){a.display.sizer.style.minHeight=b.docHeight+"px";a.display.heightForcer.style.top=b.docHeight+"px";a.display.gutters.style.height=(b.docHeight+a.display.barHeight+lh(a))+"px"}function io(f){var e=f.display.gutters,a=f.options.gutters;iN(e);var d=0;for(;d-1&&!a.lineNumbers){a.gutters=a.gutters.slice(0);a.gutters.splice(b,1)}}}function g0(a,b){this.ranges=a;this.primIndex=b}g0.prototype={primary:function(){return this.ranges[this.primIndex]},equals:function(e){var a=this;if(e==this){return true}if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length){return false}for(var c=0;c=0&&kI(a,d.to())<=0){return c}}return -1}};function lz(a,b){this.anchor=a;this.head=b}lz.prototype={from:function(){return m3(this.anchor,this.head)},to:function(){return nD(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};function mA(j,b){var g=j[b];j.sort(function(l,k){return kI(l.from(),k.from())});b=jb(j,g);for(var e=1;e=0){var d=m3(h.from(),a.from()),c=nD(h.to(),a.to());var f=h.empty()?a.from()==a.head:h.from()==h.head;if(e<=b){--b}j.splice(--e,2,new lz(f?c:d,f?d:c))}}return new g0(j,b)}function j1(a,b){return new g0([new lz(a,b||a)],0)}function m1(a){if(!a.text){return a.to}return lA(a.from.line+a.text.length-1,ji(a.text).length+(a.text.length==1?a.from.ch:0))}function nS(b,c){if(kI(b,c.from)<0){return b}if(kI(b,c.to)<=0){return m1(c)}var a=b.line+c.text.length-(c.to.line-c.from.line)-1,d=b.ch;if(b.line==c.to.line){d+=m1(c).ch-c.to.ch}return lA(a,d)}function iK(b,a){var d=[];for(var c=0;c1){r.remove(a.line+1,c-1)}r.insert(a.line+1,l)}}}}nw(r,"change",r,f)}function iA(b,c,d){function a(j,e,g){if(j.linked){for(var f=0;f1&&!b.done[b.done.length-2].ranges){b.done.pop();return ji(b.done)}}}}function iX(d,f,a,g){var h=d.history;h.undone.length=0;var j=+new Date,c;var b;if((h.lastOp==g||h.lastOrigin==f.origin&&f.origin&&((f.origin.charAt(0)=="+"&&d.cm&&h.lastModTime>j-d.cm.options.historyEventDelay)||f.origin.charAt(0)=="*"))&&(c=kl(h,h.lastOp==g))){b=ji(c.changes);if(kI(f.from,f.to)==0&&kI(f.from,b.to)==0){b.to=m1(f)}else{c.changes.push(k6(d,f))}}else{var e=ji(h.done);if(!e||!e.ranges){lx(d.sel,h.done)}c={changes:[k6(d,f)],generation:h.generation};h.done.push(c);while(h.done.length>h.undoDepth){h.done.shift();if(!h.done[0].ranges){h.done.shift()}}}h.done.push(a);h.generation=++h.maxGeneration;h.lastModTime=h.lastSelTime=j;h.lastOp=h.lastSelOp=g;h.lastOrigin=h.lastSelOrigin=f.origin;if(!b){n9(d,"historyAdded")}}function nx(a,c,d,b){var e=c.charAt(0);return e=="*"||e=="+"&&d.ranges.length==b.ranges.length&&d.somethingSelected()==b.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}function hN(a,d,c,e){var b=a.history,f=e&&e.origin;if(c==b.lastSelOp||(f&&b.lastSelOrigin==f&&(b.lastModTime==b.lastSelTime&&b.lastOrigin==f||nx(a,f,ji(b.done),d)))){b.done[b.done.length-1]=d}else{lx(d,b.done)}b.lastSelTime=+new Date;b.lastSelOrigin=f;b.lastSelOp=c;if(e&&e.clearRedo!==false){h3(b.undone)}}function lx(c,a){var b=ji(a);if(!(b&&b.ranges&&b.equals(c))){a.push(c)}}function nU(f,a,b,d){var c=a["spans_"+f.id],e=0;f.iter(Math.max(f.first,b),Math.min(f.first+f.size,d),function(g){if(g.markedSpans){(c||(c=a["spans_"+f.id]={}))[e]=g.markedSpans}++e})}function l3(a){if(!a){return null}var c;for(var b=0;b-1){ji(c)[m]=e[m];delete e[m]}}}}}}return l}function im(a,f,b,d){if(a.cm&&a.cm.display.shift||a.extend){var c=f.anchor;if(d){var e=kI(b,c)<0;if(e!=(kI(d,c)<0)){c=b;b=d}else{if(e!=(kI(b,d)<0)){b=d}}}return new lz(c,b)}else{return new lz(d||b,b)}}function g5(b,c,a,d){mL(b,new g0([im(b,b.sel.primary(),c,a)],0),d)}function mN(a,b,d){var e=[];for(var c=0;c=d.ch:m.to>d.ch))){if(f){n9(l,"beforeCursorEnter");if(l.explicitlyCleared){if(!a.markedSpans){break}else{--h;continue}}}if(!l.atomic){continue}if(j){var e=l.find(k<0?1:-1),c=void 0;if(k<0?l.inclusiveRight:l.inclusiveLeft){e=hF(b,e,-k,e&&e.line==d.line?a:null)}if(e&&e.line==d.line&&(c=kI(e,j))&&(k<0?c<0:c>0)){return iS(b,e,d,k,f)}}var g=l.find(k<0?-1:1);if(k<0?l.inclusiveLeft:l.inclusiveRight){g=hF(b,g,k,g.line==d.line?a:null)}return g?iS(b,g,d,k,f):null}}}return d}function mJ(b,a,e,g,d){var f=g||1;var c=iS(b,a,e,f,d)||(!d&&iS(b,a,e,f,true))||iS(b,a,e,-f,d)||(!d&&iS(b,a,e,-f,true));if(!c){b.cantEdit=true;return lA(b.first,0)}return c}function hF(c,b,d,a){if(d<0&&b.ch==0){if(b.line>c.first){return i3(c,lA(b.line-1))}else{return null}}else{if(d>0&&b.ch==(a||hm(c,b.line)).text.length){if(b.line=0;--e){mf(b,{from:d[e].from,to:d[e].to,text:e?[""]:a.text})}}else{mf(b,a)}}function mf(c,b){if(b.text.length==1&&b.text[0]==""&&kI(b.from,b.to)==0){return}var d=iK(c,b);iX(c,b,d,c.cm?c.cm.curOp.id:NaN);ik(c,b,d,h5(c,b));var a=[];iA(c,function(e,f){if(!f&&jb(a,e.history)==-1){kF(e.history,b);a.push(e.history)}ik(e,b,null,h5(e,b))})}function k5(c,d,a){if(c.cm&&c.cm.state.suppressEdits&&!a){return}var e=c.history,n,l=c.sel;var o=d=="undo"?e.done:e.undone,b=d=="undo"?e.undone:e.done;var h=0;for(;h=0;--k){var j=g(k);if(j){return j.v}}}function iC(d,b){if(b==0){return}d.first+=b;d.sel=new g0(mO(d.sel.ranges,function(e){return new lz(lA(e.anchor.line+b,e.anchor.ch),lA(e.head.line+b,e.head.ch))}),d.sel.primIndex);if(d.cm){np(d.cm,d.first,d.first-b,b);for(var c=d.cm.display,a=c.viewFrom;ab.lastLine()){return}if(a.from.linee){a={from:a.from,to:lA(e,hm(b,e).text.length),text:[a.text[0]],origin:a.origin}}a.removed=gY(b,a.from,a.to);if(!d){d=iK(b,a)}if(b.cm){n5(b.cm,a,f)}else{id(b,a,f)}jN(b,d,ln)}function n5(b,g,j){var c=b.doc,h=b.display,f=g.from,d=g.to;var e=false,k=f.line;if(!b.options.lineWrapping){k=m5(jV(hm(c,f.line)));c.iter(k,d.line+1,function(o){if(o==h.maxLine){e=true;return true}})}if(c.sel.contains(g.from,g.to)>-1){lD(b)}id(c,g,j,mp(b));if(!b.options.lineWrapping){c.iter(k,f.line+g.text.length,function(o){var p=hZ(o);if(p>h.maxLineLength){h.maxLine=o;h.maxLineLength=p;h.maxLineChanged=true;e=false}});if(e){b.curOp.updateMaxLine=true}}c.frontier=Math.min(c.frontier,f.line);ij(b,400);var a=g.text.length-(d.line-f.line)-1;if(g.full){np(b)}else{if(f.line==d.line&&g.text.length==1&&!lR(b.doc,g)){lS(b,f.line,"text")}else{np(b,f.line,d.line+1,a)}}var m=iI(b,"changes"),l=iI(b,"change");if(l||m){var n={from:f,to:d,text:g.text,removed:g.removed,origin:g.origin};if(l){nw(b,"change",b,n)}if(m){(b.curOp.changeObjs||(b.curOp.changeObjs=[])).push(n)}}b.display.selForContextMenu=null}function gT(d,e,a,b,c){if(!b){b=a}if(kI(b,a)<0){var f=b;b=a;a=f}if(typeof e=="string"){e=d.splitLines(e)}mi(d,{from:a,to:b,text:e,origin:c})}function ml(b,c,d,a){if(d1||!(this.children[0] instanceof hH))){var a=[];this.collapse(a);this.children=[new hH(a)];this.children[0].parent=this}},collapse:function(c){var a=this;for(var b=0;b50){var h=k.lines.length%25+25;for(var c=h;c10);c.parent.maybeSpill()},iterN:function(g,h,a){var b=this;for(var f=0;fc.display.maxLineLength){c.display.maxLine=m;c.display.maxLineLength=f;c.display.maxLineChanged=true}}}if(j!=null&&c&&this.collapsed){np(c,j,e+1)}this.lines.length=0;this.explicitlyCleared=true;if(this.atomic&&this.doc.cantEdit){this.doc.cantEdit=false;if(c){jt(c.doc)}}if(c){nw(c,"markerCleared",c,this)}if(k){ng(c)}if(this.parent){this.parent.clear()}};lV.prototype.find=function(d,f){var h=this;if(d==null&&this.type=="bookmark"){d=1}var a,b;for(var e=0;e0||b==0&&h.clearWhenEmpty!==false){return h}if(h.replacedWith){h.collapsed=true;h.widgetNode=gZ("span",[h.replacedWith],"CodeMirror-widget");if(!a.handleMouseEvents){h.widgetNode.setAttribute("cm-ignore-events","true")}if(a.insertLeft){h.widgetNode.insertLeft=true}}if(h.collapsed){if(jS(c,e.line,e,d,h)||e.line!=d.line&&jS(c,d.line,e,d,h)){throw new Error("Inserting collapsed marker partially overlapping an existing one")}lf()}if(h.addToHistory){iX(c,{from:e,to:d,origin:"markText"},c.sel,NaN)}var k=e.line,f=c.cm,l;c.iter(k,d.line+1,function(m){if(f&&h.collapsed&&!f.options.lineWrapping&&jV(m)==f.display.maxLine){l=true}if(h.collapsed&&k!=e.line){gV(m,0)}kP(m,new h7(h,k==e.line?e.ch:null,k==d.line?d.ch:null));++k});if(h.collapsed){c.iter(e.line,d.line+1,function(m){if(il(c,m)){gV(m,0)}})}if(h.clearOnEnter){nY(h,"beforeCursorEnter",function(){return h.clear()})}if(h.readOnly){ia();if(c.history.done.length||c.history.undone.length){c.clearHistory()}}if(h.collapsed){h.id=++gQ;h.atomic=true}if(f){if(l){f.curOp.updateMaxLine=true}if(h.collapsed){np(f,e.line,d.line+1)}else{if(h.className||h.title||h.startStyle||h.endStyle||h.css){for(var j=e.line;j<=d.line;j++){lS(f,j,"text")}}}if(h.atomic){jt(f.doc)}nw(f,"markerAdded",f,h)}return h}function jZ(b,c){var a=this;this.markers=b;this.primary=c;for(var d=0;d=0;h--){mi(e,c[h])}if(k){ht(this,k)}else{if(this.cm){jl(this.cm)}}}),undo:mg(function(){k5(this,"undo")}),redo:mg(function(){k5(this,"redo")}),undoSelection:mg(function(){k5(this,"undo",true)}),redoSelection:mg(function(){k5(this,"redo",true)}),setExtending:function(a){this.extend=a},getExtending:function(){return this.extend},historySize:function(){var b=this.history,e=0,c=0;for(var d=0;d=a.ch)){b.push(c.marker.parent||c.marker)}}}return b},findMarks:function(a,c,e){a=i3(this,a);c=i3(this,c);var d=[],b=a.line;this.iter(a.line,c.line+1,function(h){var f=h.markedSpans;if(f){for(var g=0;g=j.to||j.from==null&&b!=a.line||j.from!=null&&b==c.line&&j.from>=c.ch)&&(!e||e(j.marker))){d.push(j.marker.parent||j.marker)}}}++b});return d},getAllMarks:function(){var a=[];this.iter(function(c){var d=c.markedSpans;if(d){for(var b=0;bb){d=b;return true}b-=e;++a});return i3(this,lA(a,d))},indexFromPos:function(b){b=i3(this,b);var a=b.ch;if(b.linea){a=b.from}if(b.to!=null&&b.to-1){b.state.draggingText(d);setTimeout(function(){return b.display.input.focus()},20);return}try{var m=d.dataTransfer.getData("Text");if(m){var g;if(b.state.draggingText&&!b.state.draggingText.copy){g=b.listSelections()}jN(b.doc,j1(c,c));if(g){for(var j=0;j=0;h--){gT(g.doc,"",c[h].from,c[h].to,"+delete")}jl(g)})}var jg={selectAll:nh,singleSelection:function(a){return a.setSelection(a.getCursor("anchor"),a.getCursor("head"),ln)},killLine:function(a){return hL(a,function(b){if(b.empty()){var c=hm(a.doc,b.head.line).text.length;if(b.head.ch==c&&b.head.line0){b=new lA(b.line,b.ch+1);a.replaceRange(g.charAt(b.ch-1)+g.charAt(b.ch-2),lA(b.line,b.ch-2),b,"+transpose")}else{if(b.line>a.doc.first){var c=hm(a.doc,b.line-1).text;if(c){b=new lA(b.line,1);a.replaceRange(g.charAt(0)+a.doc.lineSeparator()+c.charAt(c.length-1),lA(b.line-1,c.length-1),b,"+transpose")}}}}f.push(new lz(b,b))}a.setSelections(f)})},newlineAndIndent:function(a){return lI(a,function(){var d=a.listSelections();for(var c=d.length-1;c>=0;c--){a.replaceRange(a.doc.lineSeparator(),d[c].anchor,d[c].head,"+input")}d=a.listSelections();for(var b=0;bg-400&&kI(jr.pos,a)==0){d="triple"}else{if(i1&&i1.time>g-400&&kI(i1.pos,a)==0){d="double";jr={time:g,pos:a}}else{d="single";i1={time:g,pos:a}}}var c=h.doc.sel,f=k9?b.metaKey:b.ctrlKey,e;if(h.options.dragDrop&&kr&&!h.isReadOnly()&&d=="single"&&(e=c.contains(a))>-1&&(kI((e=c.ranges[e]).from(),a)<0||a.xRel>0)&&(kI(e.to(),a)>0||a.xRel<0)){gR(h,b,a,f)}else{kB(h,b,a,d,f)}}function gR(f,b,a,g){var c=f.display,e=+new Date;var d=mQ(f,function(h){if(mU){c.scroller.draggable=false}f.state.draggingText=false;ih(document,"mouseup",d);ih(c.scroller,"drop",d);if(Math.abs(b.clientX-h.clientX)+Math.abs(b.clientY-h.clientY)<10){l7(h);if(!g&&+new Date-200-1){o=q[s]}else{o=new lz(n,n)}}else{o=r.sel.primary();s=r.sel.primIndex}if(i6?t.shiftKey&&t.metaKey:t.altKey){p="rect";if(!k){o=new lz(n,n)}n=kg(m,t,true,true);s=-1}else{if(p=="double"){var v=m.findWordAt(n);if(m.display.shift||r.extend){o=im(r,o,v.anchor,v.head)}else{o=v}}else{if(p=="triple"){var g=new lz(lA(n.line,0),i3(r,lA(n.line+1,0)));if(m.display.shift||r.extend){o=im(r,o,g.anchor,g.head)}else{o=g}}else{o=im(r,o,n)}}}if(!k){s=0;mL(r,new g0([o],0),l9);l=r.sel}else{if(s==-1){s=q.length;mL(r,mA(q.concat([o]),s),{scroll:false,origin:"*mouse"})}else{if(q.length>1&&q[s].empty()&&p=="single"&&!t.shiftKey){mL(r,mA(q.slice(0,s).concat(q.slice(s+1)),0),{scroll:false,origin:"*mouse"});l=r.sel}else{k2(r,s,o,l9)}}}var b=n;function c(B){if(kI(b,B)==0){return}b=B;if(p=="rect"){var J=[],E=m.options.tabSize;var K=mV(hm(r,n.line).text,n.ch,E);var x=mV(hm(r,B.line).text,B.ch,E);var I=Math.min(K,x),z=Math.max(K,x);for(var w=Math.min(n.line,B.line),G=Math.min(m.lastLine(),Math.max(n.line,B.line));w<=G;w++){var y=hm(r,w).text,H=jM(y,I,E);if(I==z){J.push(new lz(lA(w,H),lA(w,H)))}else{if(y.length>H){J.push(new lz(lA(w,H),lA(w,jM(y,z,E))))}}}if(!J.length){J.push(new lz(n,n))}mL(r,mA(l.ranges.slice(0,s).concat(J),s),{origin:"*mouse",scroll:false});m.scrollIntoView(B)}else{var D=o;var F=D.anchor,C=B;if(p!="single"){var A;if(p=="double"){A=m.findWordAt(B)}else{A=new lz(lA(B.line,0),i3(r,lA(B.line+1,0)))}if(kI(A.anchor,F)>0){C=A.head;F=m3(D.from(),A.anchor)}else{C=A.anchor;F=nD(D.to(),A.head)}}var L=l.ranges.slice(0);L[s]=new lz(i3(r,F),C);mL(r,mA(L,s),l9)}}var e=a.wrapper.getBoundingClientRect();var j=0;function u(x){var z=++j;var A=kg(m,x,true,p=="rect");if(!A){return}if(kI(A,b)!=0){m.curOp.focus=j3();c(A);var w=lc(a,r);if(A.line>=w.to||A.linee.bottom?20:0;if(y){setTimeout(mQ(m,function(){if(j!=z){return}a.scroller.scrollTop+=y;u(x)}),50)}}}function f(w){m.state.selectingText=false;j=Infinity;l7(w);a.input.focus();ih(document,"mousemove",d);ih(document,"mouseup",h);r.history.lastSelOrigin=null}var d=mQ(m,function(w){if(!hi(w)){f(w)}else{u(w)}});var h=mQ(m,f);m.state.selectingText=h;nY(document,"mousemove",d);nY(document,"mouseup",h)}function hC(b,f,d,c){var l,m;try{l=f.clientX;m=f.clientY}catch(f){return false}if(l>=Math.floor(b.display.gutters.getBoundingClientRect().right)){return false}if(c){l7(f)}var e=b.display;var g=e.lineDiv.getBoundingClientRect();if(m>g.bottom||!iI(b,d)){return na(f)}m-=g.top-e.viewOffset;for(var j=0;j=l){var a=nj(b.doc,m);var k=b.options.gutters[j];n9(b,d,b,a,k,f);return na(f)}}}function kE(a,b){return hC(a,b,"gutterClick",true)}function mI(a,b){if(my(a.display,b)||jh(a,b)){return}if(nT(a,b,"contextmenu")){return}a.display.input.onContextMenu(b)}function jh(a,b){if(!iI(a,"gutterContextMenu")){return false}return hC(a,b,"gutterContextMenu",false)}function lC(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-");nm(a)}var kQ={toString:function(){return"CodeMirror.Init"}};var hB={};var mk={};function i0(a){var b=a.optionHandlers;function c(g,d,e,f){a.defaults[g]=d;if(e){b[g]=f?function(h,j,k){if(k!=kQ){e(h,j,k)}}:e}}a.defineOption=c;a.Init=kQ;c("value","",function(e,d){return e.setValue(d)},true);c("mode",null,function(e,d){e.doc.modeOption=d;ly(e)},true);c("indentUnit",2,ly,true);c("indentWithTabs",false);c("smartIndent",true);c("tabSize",4,function(d){h1(d);nm(d);np(d)},true);c("lineSeparator",null,function(h,e){h.doc.lineSep=e;if(!e){return}var f=[],d=h.doc.first;h.doc.iter(function(l){for(var j=0;;){var k=l.text.indexOf(e,j);if(k==-1){break}j=k+e.length;f.push(lA(d,k))}d++});for(var g=f.length-1;g>=0;g--){gT(h.doc,e,f[g],lA(f[g].line,f[g].ch+e.length))}});c("specialChars",/[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(f,d,e){f.state.specialChars=new RegExp(d.source+(d.test("\t")?"":"|\t"),"g");if(e!=kQ){f.refresh()}});c("specialCharPlaceholder",hn,function(d){return d.refresh()},true);c("electricChars",true);c("inputStyle",ie?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},true);c("spellcheck",false,function(e,d){return e.getInputField().spellcheck=d},true);c("rtlMoveVisually",!nW);c("wholeLineUpdateBefore",true);c("theme","default",function(d){lC(d);k1(d)},true);c("keyMap","default",function(h,d,g){var f=g6(d);var e=g!=kQ&&g6(g);if(e&&e.detach){e.detach(h,f)}if(f.attach){f.attach(h,e||null)}});c("extraKeys",null);c("lineWrapping",false,i2,true);c("gutters",[],function(d){kK(d.options);k1(d)},true);c("fixedGutter",true,function(e,d){e.display.gutters.style.left=d?lw(e.display)+"px":"0";e.refresh()},true);c("coverGutterNextToScrollbar",false,function(d){return hK(d)},true);c("scrollbarStyle","native",function(d){oa(d);hK(d);d.display.scrollbars.setScrollTop(d.doc.scrollTop);d.display.scrollbars.setScrollLeft(d.doc.scrollLeft)},true);c("lineNumbers",false,function(d){kK(d.options);k1(d)},true);c("firstLineNumber",1,k1,true);c("lineNumberFormatter",function(d){return d},k1,true);c("showCursorWhenSelecting",false,nu,true);c("resetSelectionOnContextMenu",true);c("lineWiseCopyCut",true);c("readOnly",false,function(e,d){if(d=="nocursor"){nL(e);e.display.input.blur();e.display.disabled=true}else{e.display.disabled=false}e.display.input.readOnlyChanged(d)});c("disableInput",false,function(e,d){if(!d){e.display.input.reset()}},true);c("dragDrop",true,g2);c("allowDropFileTypes",null);c("cursorBlinkRate",530);c("cursorScrollMargin",0);c("cursorHeight",1,nu,true);c("singleCursorHeightPerLine",true,nu,true);c("workTime",100);c("workDelay",100);c("flattenSpans",true,h1,true);c("addModeClass",false,h1,true);c("pollInterval",100);c("undoDepth",200,function(e,d){return e.doc.history.undoDepth=d});c("historyEventDelay",1250);c("viewportMargin",10,function(d){return d.refresh()},true);c("maxHighlightLength",10000,h1,true);c("moveInputWithCursor",true,function(e,d){if(!d){e.display.input.resetPosition()}});c("tabindex",null,function(e,d){return e.display.input.getField().tabIndex=d||""});c("autofocus",null)}function k1(a){io(a);np(a);setTimeout(function(){return ja(a)},20)}function g2(f,b,e){var a=e&&e!=kQ;if(!b!=!a){var d=f.display.dragFunctions;var c=b?nY:ih;c(f.display.scroller,"dragstart",d.start);c(f.display.scroller,"dragenter",d.enter);c(f.display.scroller,"dragover",d.over);c(f.display.scroller,"dragleave",d.leave);c(f.display.scroller,"drop",d.drop)}}function i2(a){if(a.options.lineWrapping){h6(a.display.wrapper,"CodeMirror-wrap");a.display.sizer.style.minWidth="";a.display.sizerWidth=null}else{kS(a.display.wrapper,"CodeMirror-wrap");kY(a)}lr(a);np(a);nm(a);setTimeout(function(){return hK(a)},100)}function hx(g,e){var h=this;if(!(this instanceof hx)){return new hx(g,e)}this.options=e=e?n0(e):{};n0(hB,e,false);kK(e);var a=e.value;if(typeof a=="string"){a=new mT(a,e.mode,null,e.lineSeparator)}this.doc=a;var f=new hx.inputStyles[e.inputStyle](this);var b=this.display=new iU(g,a,f);b.wrapper.CodeMirror=this;io(this);lC(this);if(e.lineWrapping){this.display.wrapper.className+=" CodeMirror-wrap"}if(e.autofocus&&!ie){b.input.focus()}oa(this);this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:false,delayingBlurEvent:false,focused:false,suppressEdits:false,pasteIncoming:false,cutIncoming:false,selectingText:false,draggingText:false,highlight:new hA(),keySeq:null,specialChars:null};if(kj&&kH<11){setTimeout(function(){return h.display.input.reset(true)},20)}hf(this);l8();lY(this);this.curOp.forceUpdate=true;ip(this,a);if((e.autofocus&&!ie)||this.hasFocus()){setTimeout(mD(mm,this),20)}else{nL(this)}for(var c in mk){if(mk.hasOwnProperty(c)){mk[c](h,e[c],kQ)}}iE(this);if(e.finishInit){e.finishInit(this)}for(var d=0;d20*20}nY(c.scroller,"touchstart",function(j){if(!nT(h,j)&&!e(j)){c.input.ensurePolled();clearTimeout(a);var k=+new Date;c.activeTouch={start:k,moved:false,prev:k-f.end<=300?f:null};if(j.touches.length==1){c.activeTouch.left=j.touches[0].pageX;c.activeTouch.top=j.touches[0].pageY}}});nY(c.scroller,"touchmove",function(){if(c.activeTouch){c.activeTouch.moved=true}});nY(c.scroller,"touchend",function(l){var j=c.activeTouch;if(j&&!my(c,l)&&j.left!=null&&!j.moved&&new Date-j.start<300){var k=h.coordsChar(c.activeTouch,"page"),m;if(!j.prev||g(j,j.prev)){m=new lz(k,k)}else{if(!j.prev.prev||g(j,j.prev.prev)){m=h.findWordAt(k)}else{m=new lz(lA(k.line,0),i3(h.doc,lA(k.line+1,0)))}}h.setSelection(m.anchor,m.head);h.focus();l7(l)}b()});nY(c.scroller,"touchcancel",b);nY(c.scroller,"scroll",function(){if(c.scroller.clientHeight){l4(h,c.scroller.scrollTop);nq(h,c.scroller.scrollLeft,true);n9(h,"scroll",h)}});nY(c.scroller,"mousewheel",function(j){return k8(h,j)});nY(c.scroller,"DOMMouseScroll",function(j){return k8(h,j)});nY(c.wrapper,"scroll",function(){return c.wrapper.scrollTop=c.wrapper.scrollLeft=0});c.dragFunctions={enter:function(j){if(!nT(h,j)){jK(j)}},over:function(j){if(!nT(h,j)){hD(h,j);jK(j)}},start:function(j){return l0(h,j)},drop:mQ(h,l5),leave:function(j){if(!nT(h,j)){jx(h)}}};var d=c.input.getField();nY(d,"keyup",function(j){return me.call(h,j)});nY(d,"keydown",mQ(h,kp));nY(d,"keypress",mQ(h,mw));nY(d,"focus",function(j){return mm(h,j)});nY(d,"blur",function(j){return nL(h,j)})}var a9=[];hx.defineInitHook=function(a){return a9.push(a)};function nz(r,l,a,n){var b=r.doc,o;if(a==null){a="add"}if(a=="smart"){if(!b.mode.indent){a="prev"}else{o=kM(r,l)}}var g=r.options.tabSize;var q=hm(b,l),h=mV(q.text,null,g);if(q.stateAfter){q.stateAfter=null}var p=q.text.match(/^\s*/)[0],d;if(!n&&!/\S/.test(q.text)){d=0;a="not"}else{if(a=="smart"){d=b.mode.indent(o,q.text.slice(p.length),q.text);if(d==kU||d>150){if(!n){return}a="prev"}}}if(a=="prev"){if(l>b.first){d=mV(hm(b,l-1).text,null,g)}else{d=0}}else{if(a=="add"){d=h+r.options.indentUnit}else{if(a=="subtract"){d=h-r.options.indentUnit}else{if(typeof a=="number"){d=h+a}}}}d=Math.max(0,d);var c="",e=0;if(r.options.indentWithTabs){for(var k=Math.floor(d/g);k;--k){e+=g;c+="\t"}}if(e1){if(lZ&&lZ.text.join("\n")==k){if(n.ranges.length%lZ.text.length==0){p=[];for(var j=0;j=0;o--){var q=n.ranges[o];var d=q.from(),e=q.to();if(q.empty()){if(m&&m>0){d=lA(d.line,d.ch-m)}else{if(a.state.overwrite&&!l){e=lA(e.line,Math.min(hm(c,e.line).text.length,e.ch+ji(h).length))}else{if(lZ&&lZ.lineWise&&lZ.text.join("\n")==k){d=e=lA(d.line,0)}}}}g=a.curOp.updateInput;var f={from:d,to:e,text:p?p[o%p.length]:h,origin:b||(l?"paste":a.state.cutIncoming?"cut":"+input")};mi(a.doc,f);nw(a,"inputRead",a,f)}if(k&&!l){g7(a,k)}jl(a);a.curOp.updateInput=g;a.curOp.typing=true;a.state.pasteIncoming=a.state.cutIncoming=false}function mz(b,a){var c=b.clipboardData&&b.clipboardData.getData("Text");if(c){b.preventDefault();if(!a.isReadOnly()&&!a.options.disableInput){lI(a,function(){return g4(a,c,0,null,"paste")})}return true}}function g7(g,d){if(!g.options.electricChars||!g.options.smartIndent){return}var c=g.doc.sel;for(var e=c.ranges.length-1;e>=0;e--){var a=c.ranges[e];if(a.head.ch>100||(e&&c.ranges[e-1].head.line==a.head.line)){continue}var b=g.getModeAt(a.head);var h=false;if(b.electricChars){for(var f=0;f-1){h=nz(g,a.head.line,"smart");break}}}else{if(b.electricInput){if(b.electricInput.test(hm(g.doc,a.head.line).text.slice(0,a.head.ch))){h=nz(g,a.head.line,"smart")}}}if(h){nw(g,"electricInput",g,a.head.line)}}}function jf(f){var a=[],d=[];for(var c=0;c0){k2(h.doc,j,new lz(g,m[j].to()),ln)}}else{if(d.head.line>l){nz(h,d.head.line,e,true);l=d.head.line;if(j==h.doc.sel.primIndex){jl(h)}}}}}),getTokenAt:function(d,e){return j4(this,d,e)},getLineTokens:function(d,e){return j4(this,lA(d),e,true)},getTokenTypeAt:function(j){j=i3(this.doc,j);var e=jG(this,hm(this.doc,j.line));var l=0,k=(e.length-1)/2,f=j.ch;var g;if(f==0){g=e[2]}else{for(;;){var h=(l+k)>>1;if((h?e[h*2-1]:0)>=f){k=h}else{if(e[h*2+1]e){g=e;h=true}}f=hm(this.doc,g)}else{f=g}return j8(this,f,{top:0,left:0},j||"page",d).top+(h?this.doc.height-m7(f):0)},defaultTextHeight:function(){return nF(this.display)},defaultCharWidth:function(){return kJ(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(h,l,f,k,d){var j=this.display;h=lL(this,i3(this.doc,h));var g=h.bottom,m=h.left;l.style.position="absolute";l.setAttribute("cm-ignore-events","true");this.display.input.setUneditable(l);j.sizer.appendChild(l);if(k=="over"){g=h.top}else{if(k=="above"||k=="near"){var n=Math.max(j.wrapper.clientHeight,this.doc.height),e=Math.max(j.sizer.clientWidth,j.lineSpace.clientWidth);if((k=="above"||h.bottom+l.offsetHeight>n)&&h.top>l.offsetHeight){g=h.top-l.offsetHeight}else{if(h.bottom+l.offsetHeight<=n){g=h.bottom}}if(m+l.offsetWidth>e){m=e-l.offsetWidth}}}l.style.top=g+"px";l.style.left=l.style.right="";if(d=="right"){m=j.sizer.clientWidth-l.offsetWidth;l.style.right="0px"}else{if(d=="left"){m=0}else{if(d=="middle"){m=(j.sizer.clientWidth-l.offsetWidth)/2}}l.style.left=m+"px"}if(f){mt(this,m,g,m+l.offsetWidth,g+l.offsetHeight)}},triggerOnKeyDown:jC(kp),triggerOnKeyPress:jC(mw),triggerOnKeyUp:me,execCommand:function(d){if(jg.hasOwnProperty(d)){return jg[d].call(null,this)}},triggerElectric:jC(function(d){g7(this,d)}),findPosH:function(j,e,d,g){var k=this;var h=1;if(e<0){h=-1;e=-e}var l=i3(this.doc,j);for(var f=0;f0&&h(e.charAt(k-1))){--k}while(f0.5){lr(this)}n9(this,"refresh",this)}),swapDoc:jC(function(d){var e=this.doc;e.cm=null;ip(this,d);nm(this);this.display.input.reset();this.scrollTo(d.scrollLeft,d.scrollTop);this.curOp.forceScroll=true;nw(this,"swapDoc",this,e);return e}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}};nA(a);a.registerHelper=function(e,f,d){if(!b.hasOwnProperty(e)){b[e]=a[e]={_global:[]}}b[e][f]=d};a.registerGlobalHelper=function(e,f,g,d){a.registerHelper(e,f,d);b[e]._global.push({pred:g,val:d})}};function lg(r,m,d,e,k){var g=m.line,f=m.ch,s=d;var p=hm(r,g);function a(){var t=g+d;if(t=r.first+r.size){return false}g=t;return p=hm(r,t)}function b(t){var u=(k?ka:nn)(p,f,d,true);if(u==null){if(!t&&a()){if(k){f=(d<0?lj:md)(p)}else{f=d<0?p.text.length:0}}else{return false}}else{f=u}return true}if(e=="char"){b()}else{if(e=="column"){b(true)}else{if(e=="word"||e=="group"){var c=null,j=e=="group";var q=r.cm&&r.cm.getHelper(m,"wordChars");for(var l=true;;l=false){if(d<0&&!b(!l)){break}var o=p.text.charAt(f)||"\n";var n=mo(o,q)?"w":j&&o=="\n"?"n":!j||/\s/.test(o)?null:"p";if(j&&!l&&!n){n="s"}if(c&&c!=n){if(d<0){d=1;b()}break}if(n){c=n}if(d>0&&!b(!l)){break}}}}}var h=mJ(r,lA(g,f),m,s,true);if(!kI(m,h)){h.hitSide=true}return h}function lB(b,g,k,c){var d=b.doc,e=g.left,f;if(c=="page"){var h=Math.min(b.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);var a=Math.max(h-0.5*nF(b.display),3);f=(k>0?g.bottom:g.top)+k*a}else{if(c=="line"){f=k>0?g.bottom+3:g.top-3}}var j;for(;;){j=hg(b,e,f);if(!j.outside){break}if(k<0?f<=0:f>=d.height){j.hitSide=true;break}f+=k*5}return j}function k7(a){this.cm=a;this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null;this.polling=new hA();this.composing=null;this.gracePeriod=false;this.readDOMTimeout=null}k7.prototype=n0({init:function(d){var a=this;var e=this,c=e.cm;var b=e.div=d.lineDiv;hh(b,c.options.spellcheck);nY(b,"paste",function(g){if(nT(c,g)||mz(g,c)){return}if(kH<=11){setTimeout(mQ(c,function(){if(!e.pollContent()){np(c)}}),20)}});nY(b,"compositionstart",function(g){a.composing={data:g.data}});nY(b,"compositionupdate",function(g){if(!a.composing){a.composing={data:g.data}}});nY(b,"compositionend",function(g){if(a.composing){if(g.data!=a.composing.data){a.readFromDOMSoon()}a.composing=null}});nY(b,"touchstart",function(){return e.forceCompositionEnd()});nY(b,"input",function(){if(!a.composing){a.readFromDOMSoon()}});function f(k){if(nT(c,k)){return}if(c.somethingSelected()){jJ({lineWise:false,text:c.getSelections()});if(k.type=="cut"){c.replaceSelection("",null,"cut")}}else{if(!c.options.lineWiseCopyCut){return}else{var g=jf(c);jJ({lineWise:true,text:g.text});if(k.type=="cut"){c.operation(function(){c.setSelections(g.ranges,0,ln);c.replaceSelection("",null,"cut")})}}}if(k.clipboardData){k.clipboardData.clearData();var l=lZ.text.join("\n");k.clipboardData.setData("Text",l);if(k.clipboardData.getData("Text")==l){k.preventDefault();return}}var m=nG(),j=m.firstChild;c.display.lineSpace.insertBefore(m,c.display.lineSpace.firstChild);j.value=lZ.text.join("\n");var h=document.activeElement;kf(j);setTimeout(function(){c.display.lineSpace.removeChild(m);h.focus();if(h==b){e.showPrimarySelection()}},50)}nY(b,"copy",f);nY(b,"cut",f)},prepareSelection:function(){var a=i9(this.cm,false);a.focus=this.cm.state.focused;return a},showSelection:function(b,a){if(!b||!this.cm.display.view.length){return}if(b.focus||a){this.showPrimarySelection()}this.showMultipleSelections(b)},showPrimarySelection:function(){var k=window.getSelection(),g=this.cm.doc.sel.primary();var j=mG(this.cm,k.anchorNode,k.anchorOffset);var e=mG(this.cm,k.focusNode,k.focusOffset);if(j&&!j.bad&&e&&!e.bad&&kI(m3(j,e),g.from())==0&&kI(nD(j,e),g.to())==0){return}var l=mq(this.cm,g.from());var f=mq(this.cm,g.to());if(!l&&!f){return}var b=this.cm.display.view;var h=k.rangeCount&&k.getRangeAt(0);if(!l){l={node:b[0].measure.map[2],offset:0}}else{if(!f){var m=b[b.length-1].measure;var a=m.maps?m.maps[m.maps.length-1]:m.map;f={node:a[a.length-1],offset:a[a.length-2]-a[a.length-3]}}}var d;try{d=ki(l.node,l.offset,f.offset,f.node)}catch(c){}if(d){if(!kc&&this.cm.state.focused){k.collapse(l.node,l.offset);if(!d.collapsed){k.removeAllRanges();k.addRange(d)}}else{k.removeAllRanges();k.addRange(d)}if(h&&k.anchorNode==null){k.addRange(h)}else{if(kc){this.startGracePeriod()}}}this.rememberSelection()},startGracePeriod:function(){var a=this;clearTimeout(this.gracePeriod);this.gracePeriod=setTimeout(function(){a.gracePeriod=false;if(a.selectionChanged()){a.cm.operation(function(){return a.cm.curOp.selectionChanged=true})}},20)},showMultipleSelections:function(a){mR(this.cm.display.cursorDiv,a.cursors);mR(this.cm.display.selectionDiv,a.selection)},rememberSelection:function(){var a=window.getSelection();this.lastAnchorNode=a.anchorNode;this.lastAnchorOffset=a.anchorOffset;this.lastFocusNode=a.focusNode;this.lastFocusOffset=a.focusOffset},selectionInEditor:function(){var b=window.getSelection();if(!b.rangeCount){return false}var a=b.getRangeAt(0).commonAncestorContainer;return hR(this.div,a)},focus:function(){if(this.cm.options.readOnly!="nocursor"){if(!this.selectionInEditor()){this.showSelection(this.prepareSelection(),true)}this.div.focus()}},blur:function(){this.div.blur()},getField:function(){return this.div},supportsTouch:function(){return true},receivedFocus:function(){var a=this;if(this.selectionInEditor()){this.pollSelection()}else{lI(this.cm,function(){return a.cm.curOp.selectionChanged=true})}function b(){if(a.cm.state.focused){a.pollSelection();a.polling.set(a.cm.options.pollInterval,b)}}this.polling.set(this.cm.options.pollInterval,b)},selectionChanged:function(){var a=window.getSelection();return a.anchorNode!=this.lastAnchorNode||a.anchorOffset!=this.lastAnchorOffset||a.focusNode!=this.lastFocusNode||a.focusOffset!=this.lastFocusOffset},pollSelection:function(){if(!this.composing&&this.readDOMTimeout==null&&!this.gracePeriod&&this.selectionChanged()){var b=window.getSelection(),a=this.cm;this.rememberSelection();var d=mG(a,b.anchorNode,b.anchorOffset);var c=mG(a,b.focusNode,b.focusOffset);if(d&&c){lI(a,function(){mL(a.doc,j1(d,c),ln);if(d.bad||c.bad){a.curOp.selectionChanged=true}})}}},pollContent:function(){if(this.readDOMTimeout!=null){clearTimeout(this.readDOMTimeout);this.readDOMTimeout=null}var f=this.cm,t=f.display,v=f.doc.sel.primary();var u=v.from(),m=v.to();if(u.ch==0&&u.line>f.firstLine()){u=lA(u.line-1,hm(f.doc,u.line-1).length)}if(m.ch==hm(f.doc,m.line).text.length&&m.linet.viewTo-1){return false}var j,l,g;if(u.line==t.viewFrom||(j=iR(f,u.line))==0){l=m5(t.view[0].line);g=t.view[0].node}else{l=m5(t.view[j].line);g=t.view[j-1].node.nextSibling}var w=iR(f,m.line);var d,a;if(w==t.view.length-1){d=t.viewTo-1;a=t.lineDiv.lastChild}else{d=m5(t.view[w+1].line)-1;a=t.view[w+1].node.previousSibling}if(!g){return false}var s=f.doc.splitLines(g3(f,g,a,l,d));var b=gY(f.doc,lA(l,0),lA(d,hm(f.doc,d).text.length));while(s.length>1&&b.length>1){if(ji(s)==ji(b)){s.pop();b.pop();d--}else{if(s[0]==b[0]){s.shift();b.shift();l++}else{break}}}var x=0,o=0;var e=s[0],p=b[0],q=Math.min(e.length,p.length);while(x1||s[0]||kI(k,c)){gT(f.doc,s,k,c,"+input");return true}},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){if(!this.composing){return}this.composing=null;if(!this.pollContent()){np(this.cm)}this.div.blur();this.div.focus()},readFromDOMSoon:function(){var a=this;if(this.readDOMTimeout!=null){return}this.readDOMTimeout=setTimeout(function(){a.readDOMTimeout=null;if(a.composing){return}if(a.cm.isReadOnly()||!a.pollContent()){lI(a.cm,function(){return np(a.cm)})}},80)},setUneditable:function(a){a.contentEditable="false"},onKeyPress:function(a){a.preventDefault();if(!this.cm.isReadOnly()){mQ(this.cm,g4)(this.cm,String.fromCharCode(a.charCode==null?a.keyCode:a.charCode),0)}},readOnlyChanged:function(a){this.div.contentEditable=String(a!="nocursor")},onContextMenu:g8,resetPosition:g8,needsContentAttribute:true},k7.prototype);function mq(d,f){var e=hp(d,f.line);if(!e||e.hidden){return null}var b=hm(d.doc,f.line);var j=jT(e,b,f.line);var h=ld(b),g="left";if(h){var a=n6(h,f.ch);g=a%2?"right":"left"}var c=n3(j.map,f.ch,g);c.offset=c.collapse=="right"?c.end:c.start;return c}function jH(b,a){if(a){b.bad=true}return b}function g3(c,e,d,h,k){var a="",j=false,b=c.doc.lineSeparator();function g(l){return function(m){return m.id==l}}function f(o){if(o.nodeType==1){var r=o.getAttribute("cm-text");if(r!=null){if(r==""){a+=o.textContent.replace(/\u200b/g,"")}else{a+=r}return}var p=o.getAttribute("cm-marker"),l;if(p){var n=c.findMarks(lA(h,0),lA(k+1,0),g(+p));if(n.length&&(l=n[0].find())){a+=gY(c.doc,l.from,l.to).join(b)}return}if(o.getAttribute("contenteditable")=="false"){return}for(var q=0;q=9&&a.hasSelection){a.hasSelection=null}g.poll()});nY(d,"paste",function(h){if(nT(e,h)||mz(h,e)){return}e.state.pasteIncoming=true;g.fastPoll()});function c(j){if(nT(e,j)){return}if(e.somethingSelected()){jJ({lineWise:false,text:e.getSelections()});if(g.inaccurateSelection){g.prevInput="";g.inaccurateSelection=false;d.value=lZ.text.join("\n");kf(d)}}else{if(!e.options.lineWiseCopyCut){return}else{var h=jf(e);jJ({lineWise:true,text:h.text});if(j.type=="cut"){e.setSelections(h.ranges,null,ln)}else{g.prevInput="";d.value=h.text.join("\n");kf(d)}}}if(j.type=="cut"){e.state.cutIncoming=true}}nY(d,"cut",c);nY(d,"copy",c);nY(f.scroller,"paste",function(h){if(my(f,h)||nT(e,h)){return}e.state.pasteIncoming=true;g.focus()});nY(f.lineSpace,"selectstart",function(h){if(!my(f,h)){l7(h)}});nY(d,"compositionstart",function(){var h=e.getCursor("from");if(g.composing){g.composing.range.clear()}g.composing={start:h,range:e.markText(h,e.getCursor("to"),{className:"CodeMirror-composing"})}});nY(d,"compositionend",function(){if(g.composing){g.poll();g.composing.range.clear();g.composing=null}})},prepareSelection:function(){var g=this.cm,b=g.display,c=g.doc;var e=i9(g);if(g.options.moveInputWithCursor){var a=lL(g,c.sel.primary().head,"div");var f=b.wrapper.getBoundingClientRect(),d=b.lineDiv.getBoundingClientRect();e.teTop=Math.max(0,Math.min(b.wrapper.clientHeight-10,a.top+d.top-f.top));e.teLeft=Math.max(0,Math.min(b.wrapper.clientWidth-10,a.left+d.left-f.left))}return e},showSelection:function(b){var a=this.cm,c=a.display;mR(c.cursorDiv,b.cursors);mR(c.selectionDiv,b.selection);if(b.teTop!=null){this.wrapper.style.top=b.teTop+"px";this.wrapper.style.left=b.teLeft+"px"}},reset:function(e){if(this.contextMenuPending){return}var g,f,d=this.cm,b=d.doc;if(d.somethingSelected()){this.prevInput="";var a=b.sel.primary();g=jz&&(a.to().line-a.from().line>100||(f=d.getSelection()).length>1000);var c=g?"-":f||d.getSelection();this.textarea.value=c;if(d.state.focused){kf(this.textarea)}if(kj&&kH>=9){this.hasSelection=c}}else{if(!e){this.prevInput=this.textarea.value="";if(kj&&kH>=9){this.hasSelection=null}}}this.inaccurateSelection=g},getField:function(){return this.textarea},supportsTouch:function(){return false},focus:function(){if(this.cm.options.readOnly!="nocursor"&&(!ie||j3()!=this.textarea)){try{this.textarea.focus()}catch(a){}}},blur:function(){this.textarea.blur()},resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var a=this;if(this.pollingFast){return}this.polling.set(this.cm.options.pollInterval,function(){a.poll();if(a.cm.state.focused){a.slowPoll()}})},fastPoll:function(){var c=false,a=this;a.pollingFast=true;function b(){var d=a.poll();if(!d&&!c){c=true;a.polling.set(60,b)}else{a.pollingFast=false;a.slowPoll()}}a.polling.set(20,b)},poll:function(){var a=this;var f=this.cm,g=this.textarea,e=this.prevInput;if(this.contextMenuPending||!f.state.focused||(lv(g)&&!e&&!this.composing)||f.isReadOnly()||f.options.disableInput||f.state.keySeq){return false}var c=g.value;if(c==e&&!f.somethingSelected()){return false}if(kj&&kH>=9&&this.hasSelection===c||k9&&/[\uf700-\uf7ff]/.test(c)){f.display.input.reset();return false}if(f.doc.sel==f.display.selForContextMenu){var d=c.charCodeAt(0);if(d==8203&&!e){e="\u200b"}if(d==8666){this.reset();return this.cm.execCommand("undo")}}var b=0,h=Math.min(e.length,c.length);while(b1000||c.indexOf("\n")>-1){g.value=a.prevInput=""}else{a.prevInput=c}if(a.composing){a.composing.range.clear();a.composing.range=f.markText(a.composing.start,f.getCursor("to"),{className:"CodeMirror-composing"})}});return true},ensurePolled:function(){if(this.pollingFast&&this.poll()){this.pollingFast=false}},onKeyPress:function(){if(kj&&kH>=9){this.hasSelection=null}this.fastPoll()},onContextMenu:function(l){var e=this,d=e.cm,j=d.display,p=e.textarea;var f=kg(d,l),g=j.scroller.scrollTop;if(!f||iL){return}var m=d.options.resetSelectionOnContextMenu;if(m&&d.doc.sel.contains(f)==-1){mQ(d,mL)(d.doc,j1(f),ln)}var k=p.style.cssText,a=e.wrapper.style.cssText;e.wrapper.style.cssText="position: absolute";var b=e.wrapper.getBoundingClientRect();p.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(l.clientY-b.top-5)+"px; left: "+(l.clientX-b.left-5)+"px;\n z-index: 1000; background: "+(kj?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var c;if(mU){c=window.scrollY}j.input.focus();if(mU){window.scrollTo(null,c)}j.input.reset();if(!d.somethingSelected()){p.value=e.prevInput=" "}e.contextMenuPending=true;j.selForContextMenu=d.doc.sel;clearTimeout(j.detectingSelectAll);function n(){if(p.selectionStart!=null){var r=d.somethingSelected();var q="\u200b"+(r?p.value:"");p.value="\u21da";p.value=q;e.prevInput=r?"":"\u200b";p.selectionStart=1;p.selectionEnd=q.length;j.selForContextMenu=d.doc.sel}}function h(){e.contextMenuPending=false;e.wrapper.style.cssText=a;p.style.cssText=k;if(kj&&kH<9){j.scrollbars.setScrollTop(j.scroller.scrollTop=g)}if(p.selectionStart!=null){if(!kj||(kj&&kH<9)){n()}var r=0,q=function(){if(j.selForContextMenu==d.doc.sel&&p.selectionStart==0&&p.selectionEnd>0&&e.prevInput=="\u200b"){mQ(d,nh)(d)}else{if(r++<10){j.detectingSelectAll=setTimeout(q,500)}else{j.input.reset()}}};j.detectingSelectAll=setTimeout(q,200)}}if(kj&&kH>=9){n()}if(hT){jK(l);var o=function(){ih(window,"mouseup",o);setTimeout(h,20)};nY(window,"mouseup",o)}else{setTimeout(h,50)}},readOnlyChanged:function(a){if(!a){this.reset()}},setUneditable:g8,needsContentAttribute:false},lt.prototype);function je(c,b){b=b?n0(b):{};b.value=c.value;if(!b.tabindex&&c.tabIndex){b.tabindex=c.tabIndex}if(!b.placeholder&&c.placeholder){b.placeholder=c.placeholder}if(b.autofocus==null){var a=j3();b.autofocus=a==c||c.getAttribute("autofocus")!=null&&a==document.body}function f(){c.value=d.getValue()}var e;if(c.form){nY(c.form,"submit",f);if(!b.leaveSubmitMethodAlone){var j=c.form;e=j.submit;try{var g=j.submit=function(){f();j.submit=e;j.submit();j.submit=g}}catch(h){}}}b.finishInit=function(k){k.save=f;k.getTextArea=function(){return c};k.toTextArea=function(){k.toTextArea=isNaN;f();c.parentNode.removeChild(k.getWrapperElement());c.style.display="";if(c.form){ih(c.form,"submit",f);if(typeof c.form.submit=="function"){c.form.submit=e}}}};c.style.display="none";var d=hx(function(k){return c.parentNode.insertBefore(k,c.nextSibling)},b);return d}function iZ(a){a.off=ih;a.on=nY;a.wheelEventPixels=mF;a.Doc=mT;a.splitLines=hd;a.countColumn=mV;a.findColumn=jM;a.isWordChar=h0;a.Pass=kU;a.signal=n9;a.Line=gW;a.changeEnd=m1;a.scrollbarModel=lX;a.Pos=lA;a.cmpPos=kI;a.modes=le;a.mimeModes=nQ;a.resolveMode=hP;a.getMode=h8;a.modeExtensions=iV;a.extendMode=jc;a.copyState=nK;a.startState=nR;a.innerMode=hX;a.commands=jg;a.keyMap=hq;a.keyName=iw;a.isModifierKey=jm;a.lookupKey=kN;a.normalizeKeyMap=l2;a.StringStream=hU;a.SharedTextMarker=jZ;a.TextMarker=lV;a.LineWidget=kO;a.e_preventDefault=l7;a.e_stopPropagation=iT;a.e_stop=jK;a.addClass=h6;a.contains=hR;a.rmClass=kS;a.keyNames=iQ}i0(hx);jX(hx);var k4="iter insert remove copy getEditor constructor".split(" ");for(var nd in mT.prototype){if(mT.prototype.hasOwnProperty(nd)&&jb(k4,nd)<0){hx.prototype[nd]=(function(a){return function(){return a.apply(this.doc,arguments)}})(mT.prototype[nd])}}nA(mT);hx.inputStyles={textarea:lt,contenteditable:k7};hx.defineMode=function(a){if(!hx.defaults.mode&&a!="null"){hx.defaults.mode=a}jE.apply(this,arguments)};hx.defineMIME=lT;hx.defineMode("null",function(){return({token:function(a){return a.skipToEnd()}})});hx.defineMIME("text/plain","null");hx.defineExtension=function(a,b){hx.prototype[a]=b};hx.defineDocExtension=function(a,b){mT.prototype[a]=b};hx.fromTextArea=je;iZ(hx);hx.version="5.21.0";return hx}))); \ No newline at end of file diff --git a/BTPanel/static/codemirror/lib/index.html b/BTPanel/static/codemirror/lib/index.html new file mode 100644 index 00000000..35c63e8b --- /dev/null +++ b/BTPanel/static/codemirror/lib/index.html @@ -0,0 +1,13 @@ +
            +

            目标URL

            +

            发送域名

            +

            内容替换

            +
            +
              +
            • 目标Url必需是可以访问的,否则将直接502
            • +
            • 默认本站点所有域名访问将被传递到目标服务器,请确保目标服务器已绑定域名
            • +
            • 若您是被动代理,请在发送域名处填写上目标站点的域名
            • +
            • 若您不需要内容替换功能,请直接留空
            • +
            • 可通过purge清理指定URL的缓存,示例:http://test.com/purge/test.png
            • +
            +
            \ No newline at end of file diff --git a/BTPanel/static/js/database.js b/BTPanel/static/js/database.js index 714c60a3..93c346fd 100644 --- a/BTPanel/static/js/database.js +++ b/BTPanel/static/js/database.js @@ -105,7 +105,7 @@ var database = { shadeClose: false, content: '
            \ \ diff --git a/BTPanel/static/js/files.js b/BTPanel/static/js/files.js index 2ff41371..df4d180d 100644 --- a/BTPanel/static/js/files.js +++ b/BTPanel/static/js/files.js @@ -773,7 +773,7 @@ function php_file_webshell(file) { } function auto_table_width() { - var oldTable = $(window).height() - $('#tipTools')[0].getBoundingClientRect().height - $('#filePage')[0].getBoundingClientRect().height - $('.footer')[0].getBoundingClientRect().height - 111; + var oldTable = $(window).height() - $('#tipTools')[0].getBoundingClientRect().height - $('#filePage')[0].getBoundingClientRect().height - $('.footer')[0].getBoundingClientRect().height - 121; var oldTable_heigth = $('.oldTable table').height(); $('.oldTable thead th').each(function (index, el) { var table_th = $('.oldTable thead th').length; diff --git a/BTPanel/static/js/public.js b/BTPanel/static/js/public.js index bc18a01a..132156d6 100644 --- a/BTPanel/static/js/public.js +++ b/BTPanel/static/js/public.js @@ -479,7 +479,7 @@ var aceEditor = { var _html = '', _arry = ['White', 'Black']; for (var i = 0; i < _this.themeList.length; i++) { - if (_this.themeList[i] != _this.editorTheme) { + if (_this.aceConfig.themeList[i] != _this.aceConfig.aceEditor.editorTheme) { _html += '
          • ' + _this.themeList[i] + '【' + _arry[i] + '】
          • '; } else { _html += '
          • ' + _this.themeList[i] + '【' + _arry[i] + '】' + _icon + '
          • '; @@ -906,6 +906,26 @@ var aceEditor = { this.setEditorView(); this.reader_file_dir_menu(); }, + // 设置本地存储,设置类型type:session或local + setStorage:function(type,key,val){ + if(type != "local" && type != "session") val = key,key = type,type = 'session'; + window[type+'Storage'].setItem(key,val); + }, + //获取指定本地存储,设置类型type:session或local + getStorage:function(type,key){ + if(type != "local" && type != "session") key = type,type = 'session'; + return window[type+'Storage'].getItem(key); + }, + //删除指定本地存储,设置类型type:session或local + removeStorage:function(type,key){ + if(type != "local" && type != "session") key = type,type = 'session'; + window[type+'Storage'].removeItem(key); + }, + // 删除指定类型的所有存储信息 + clearStorage:function(type){ + if(type != "local" && type != "session") key = type,type = 'session'; + window[type+'Storage'].clear(); + }, // 新建文件类型 newly_file_type: function(that) { var _type = parseInt($(that).attr('data-type')), @@ -1480,7 +1500,7 @@ var aceEditor = { if (this.editor == null) this.editor = {}; this.editor['ace_editor_' + obj.id] = { ace: ace.edit("ace_editor_" + obj.id, { - theme: "ace/theme/" + _this.editorTheme, //主题 + theme: "ace/theme/" + _this.aceConfig.aceEditor.editorTheme, //主题 mode: "ace/mode/" + (obj.fileName != undefined ? obj.mode : 'text'), // 语言类型 wrap: _this.aceConfig.aceEditor.wrap, showInvisibles: _this.aceConfig.aceEditor.showInvisibles, @@ -1717,7 +1737,7 @@ var aceEditor = { tips:true, },function(rdata){ layer.close(loadT); - setCookie('aceConfig',JSON.stringify(data)); + _this.setStorage('aceConfig',JSON.stringify(data)); if(callback) callback(rdata); }); }, @@ -1726,7 +1746,7 @@ var aceEditor = { var loadT = layer.msg(lan.public.get_ace_config,{time: 0,icon: 16,shade: [0.3, '#000']}),_this = this; this.getFileBody({path:'/www/server/panel/BTPanel/static/ace/ace.editor.config.json'},function(rdata){ layer.close(loadT); - setCookie('aceConfig',JSON.stringify(rdata.data)); + _this.setStorage('aceConfig',JSON.stringify(rdata.data)); if(callback) callback(JSON.parse(rdata.data)); }); }, @@ -1734,7 +1754,7 @@ var aceEditor = { var loadT = layer.msg(lan.public.get_ace_config,{time: 0,icon: 16,shade: [0.3, '#000']}),_this = this; this.getFileBody({path:'/www/server/panel/BTPanel/static/ace/ace.editor.config.json'},function(rdata){ layer.close(loadT); - setCookie('aceConfig',JSON.stringify(rdata.data)); + _this.setStorage('aceConfig',JSON.stringify(rdata.data)); if(callback) callback(JSON.parse(rdata.data)); }); }, @@ -1818,7 +1838,7 @@ function openEditorView(type, path) { aceEditor.setEditorView(); }); } - var aceConfig = getCookie('aceConfig'); + var aceConfig = aceEditor.getStorage('aceConfig'); if(aceConfig == null){ // 获取编辑器配置 aceEditor.getAceConfig(function(res){ @@ -2905,6 +2925,7 @@ function setSelectChecked(c, d) { GetTaskCount(); function RecInstall() { + $.getScript('jquery.fly.min.js.js'); $.post("/ajax?action=GetSoftList", "", function(l) { var c = ""; var g = ""; diff --git a/BTPanel/static/js/site.js b/BTPanel/static/js/site.js index de5a1da9..4fef6343 100644 --- a/BTPanel/static/js/site.js +++ b/BTPanel/static/js/site.js @@ -1459,12 +1459,11 @@ var site = { }, get_rewrite_list: function(web) { var filename = '/www/server/panel/vhost/rewrite/' + web.name + '.conf'; - bt.site.get_rewrite_list(web.name, function(rdata) { - if (bt.get_cookie('serverType') == 'apache' || bt.get_cookie('serverType') == 'openlitespeed') filename = rdata.sitePath + '/.htaccess'; - var arrs = []; + var arrs = [], webserver = bt.get_cookie('serverType'); + if (webserver == 'apache' || webserver == 'openlitespeed') filename = rdata.sitePath + '/.htaccess'; + if (webserver == 'openlitespeed') webserver = 'apache'; for (var i = 0; i < rdata.rewrite.length; i++) arrs.push({ title: rdata.rewrite[i], value: rdata.rewrite[i] }); - var datas = [{ name: 'rewrite', type: 'select', @@ -1473,7 +1472,7 @@ var site = { callback: function(obj) { if (bt.os == 'Linux') { var spath = filename; - if (obj.val() != lan.site.rewritename) spath = '/www/server/panel/rewrite/' + bt.get_cookie('serverType') + '/' + obj.val() + '.conf'; + if (obj.val() != lan.site.rewritename) spath = '/www/server/panel/rewrite/' + webserver + '/' + obj.val() + '.conf'; bt.files.get_file_body(spath, function(ret) { editor.setValue(ret.data); }) diff --git a/class/ajax.py b/class/ajax.py index a8976e0d..6ffbb287 100644 --- a/class/ajax.py +++ b/class/ajax.py @@ -561,6 +561,7 @@ def GetPHPConfig(self,get): phplib = json.loads(public.readFile('data/phplib.conf')) libs = [] tasks = public.M('tasks').where("status!=?",('1',)).field('status,name').select() + phpini_ols = None for lib in phplib: lib['task'] = '1' for task in tasks: @@ -574,9 +575,10 @@ def GetPHPConfig(self,get): if public.get_webserver() == 'openlitespeed': lib['status'] = False get.php_version = "{}.{}".format(get.version[0],get.version[1]) - phpini = self.php_info(get)['phpinfo']['modules'].lower() - phpini = phpini.split() - for i in phpini: + if not phpini_ols: + phpini_ols = self.php_info(get)['phpinfo']['modules'].lower() + phpini_ols = phpini_ols.split() + for i in phpini_ols: if lib['check'][:-3].lower() == i : lib['status'] = True break @@ -596,20 +598,37 @@ def GetPHPConfig(self,get): #获取PHP扩展 def getCloudPHPExt(self,get): - import json try: + self._process_chinese_ext_description() if 'php_ext' in session: return True - if not session.get('download_url'): session['download_url'] = 'http://download.bt.cn' - download_url = session['download_url'] + '/install/lib/phplib_en.json' - tstr = public.httpGet(download_url) - data = json.loads(tstr) - if not data: return False - public.writeFile('data/phplib.conf',json.dumps(data)) + if not self._get_cloud_phplib(): + return False session['php_ext'] = True return True except: return False - + + # 处理PHP插件变描述中文 + def _process_chinese_ext_description(self): + chinese = None + phplib = json.loads(public.readFile('data/phplib.conf')) + for p in phplib: + if "缓存器" in p['type']: + chinese = True + break + if chinese: + self._get_cloud_phplib() + + # 下载云端php扩展配置 + def _get_cloud_phplib(self): + if not session.get('download_url'): session['download_url'] = 'http://download.bt.cn' + download_url = session['download_url'] + '/install/lib/phplib_en.json' + tstr = public.httpGet(download_url) + data = json.loads(tstr) + if not data: return False + public.writeFile('data/phplib.conf', json.dumps(data)) + return True + #取PHPINFO信息 def GetPHPInfo(self,get): if public.get_webserver() == "openlitespeed": diff --git a/class/common.py b/class/common.py index 31a3e0f4..91487102 100644 --- a/class/common.py +++ b/class/common.py @@ -34,7 +34,7 @@ def init(self): ua = ua.lower() if ua.find('spider') != -1 or ua.find('bot') != -1: return redirect('https://www.google.com') - g.version = '6.6.7' + g.version = '6.6.9' g.title = public.GetConfigValue('title') g.uri = request.path if not os.path.exists('data/debug.pl'): diff --git a/class/config.py b/class/config.py index 444e4bae..eb363abf 100644 --- a/class/config.py +++ b/class/config.py @@ -892,6 +892,7 @@ def GetSessionConf(self,get): # 设置Session缓存方式 def SetSessionConf(self, get): + import glob g = get.save_handler ip = get.ip port = get.port @@ -910,22 +911,29 @@ def SetSessionConf(self, get): if re.search(prep, passwd): return public.returnMsg(False, 'SPECIAL_CHARACTRES', ('" ~ ` / = "')) filename = '/www/server/php/' + get.version + '/etc/php.ini' - filename_ols = '/usr/local/lsws/lsphp{}/etc/php/{}.{}/litespeed/php.ini'.format(get.version, get.version[0], - get.version[1]) - if os.path.exists('/etc/redhat-release'): - filename_ols = '/usr/local/lsws/lsphp' + get.version + '/etc/php.ini' - ols_php_os_path = "/usr/local/lsws/lsphp{}/lib/php/20*/".format(get.version) - if os.path.exists("/etc/redhat-release"): - ols_php_os_path = '/usr/local/lsws/lsphp{}/lib64/php/modules/'.format(get.version) - ols_so_list = os.listdir(ols_php_os_path) + filename_ols = None + if os.path.exists("/usr/local/lsws"): + filename_ols = '/usr/local/lsws/lsphp{}/etc/php/{}.{}/litespeed/php.ini'.format(get.version, get.version[0], + get.version[1]) + if os.path.exists('/etc/redhat-release'): + filename_ols = '/usr/local/lsws/lsphp' + get.version + '/etc/php.ini' + try: + ols_php_os_path = glob.glob("/usr/local/lsws/lsphp{}/lib/php/20*".format(get.version))[0] + except: + ols_php_os_path = None + if os.path.exists("/etc/redhat-release"): + ols_php_os_path = '/usr/local/lsws/lsphp{}/lib64/php/modules/'.format(get.version) + ols_so_list = os.listdir(ols_php_os_path) for f in [filename,filename_ols]: + if not f: + continue phpini = public.readFile(f) rep = r'session.save_handler\s*=\s*(.+)\r?\n' val = r'session.save_handler = ' + g + '\n' phpini = re.sub(rep, val, phpini) if g == "memcached": if not re.search("memcached.so", phpini) and "memcached.so" not in ols_so_list: - return public.returnMsg(False, 'INSTALL_EXTEND_FIRST', (g)) + return public.returnMsg(False, 'INSTALL_EXTEND_FIRST', (g,)) rep = r'\nsession.save_path\s*=\s*(.+)\r?\n' val = r'\nsession.save_path = "%s:%s" \n' % (ip,port) if re.search(rep, phpini): @@ -934,7 +942,7 @@ def SetSessionConf(self, get): phpini = re.sub('\n;session.save_path = "/tmp"', '\n;session.save_path = "/tmp"' + val, phpini) if g == "memcache": if not re.search("memcache.so", phpini) and "memcache.so" not in ols_so_list: - return public.returnMsg(False, 'INSTALL_EXTEND_FIRST', (g)) + return public.returnMsg(False, 'INSTALL_EXTEND_FIRST', (g,)) rep = r'\nsession.save_path\s*=\s*(.+)\r?\n' val = r'\nsession.save_path = "tcp://%s:%s"\n' % (ip, port) if re.search(rep, phpini): @@ -943,7 +951,7 @@ def SetSessionConf(self, get): phpini = re.sub('\n;session.save_path = "/tmp"', '\n;session.save_path = "/tmp"' + val, phpini) if g == "redis": if not re.search("redis.so", phpini) and "redis.so" not in ols_so_list: - return public.returnMsg(False, 'INSTALL_EXTEND_FIRST', (g)) + return public.returnMsg(False, 'INSTALL_EXTEND_FIRST', (g,)) if passwd: passwd = "?auth=" + passwd else: diff --git a/class/files.py b/class/files.py index aaae2978..273bfe45 100644 --- a/class/files.py +++ b/class/files.py @@ -785,6 +785,7 @@ def CopyFile(self, get): public.WriteLog('TYPE_FILE', 'FILE_COPY_SUCCESS', (get.sfile, get.dfile)) stat = os.stat(get.sfile) + os.chmod(get.dfile,stat.st_mode) os.chown(get.dfile, stat.st_uid, stat.st_gid) return public.returnMsg(True, 'FILE_COPY_SUCCESS') except: @@ -807,6 +808,7 @@ def CopyDir(self, get): try: self.copytree(get.sfile, get.dfile) stat = os.stat(get.sfile) + os.chmod(get.dfile,stat.st_mode) os.chown(get.dfile, stat.st_uid, stat.st_gid) public.WriteLog('TYPE_FILE', 'DIR_COPY_SUCCESS', (get.sfile, get.dfile)) @@ -825,8 +827,11 @@ def MvFile(self, get): if get.sfile == '/www/Recycle_bin': return public.returnMsg(False,'You cannot directly operate the recycle bin directory, please press the [Recycle Bin] button in the upper right corner to open') if not os.path.exists(get.sfile): - return public.returnMsg(False,'FILE_NOT_EXISTS') - + return public.returnMsg(False, 'FILE_NOT_EXISTS') + + if get.dfile[-1] == '/': + get.dfile = get.dfile[:-1] + if get.dfile == get.sfile: return public.returnMsg(False,'Meaningless operation') @@ -1331,6 +1336,11 @@ def move(self, sfile, dfile): os.remove(sfile) return True + + #创建软链 + def create_link(self,args): + pass + # 复制目录 def copytree(self, sfile, dfile): if sfile == dfile: diff --git a/class/panelBackup.py b/class/panelBackup.py index a969a559..0937a09a 100644 --- a/class/panelBackup.py +++ b/class/panelBackup.py @@ -28,6 +28,7 @@ class backup: _inode_min = 10 _db_mysql = None _cloud = None + _local_backdir = None _is_save_local = not os.path.exists('data/is_save_local_backup.pl') def __init__(self,cloud_object = None): ''' @@ -194,6 +195,7 @@ def delete_old(self,backups,save,data_type = None): self.echo_info('Keep the latest number of backups: {} copies'.format(save)) num = len(backups) - int(save) if num > 0: + self._get_local_backdir() self.echo_info('-' * 90) for backup in backups: #处理目录备份到远程的情况 @@ -203,7 +205,10 @@ def delete_old(self,backups,save,data_type = None): backup['name'] = tmp[-1] #尝试删除本地文件 if os.path.exists(backup['filename']): - os.remove(backup['filename']) + try: + os.remove(self._local_backdir + '/'+ data_type +'/' + backup['name']) + except: + pass self.echo_info("Expired backup files have been cleaned from disk:" + backup['filename']) #尝试删除远程文件 if self._cloud: @@ -215,6 +220,10 @@ def delete_old(self,backups,save,data_type = None): num -= 1 if num < 1: break + # 获取本地备份目录 + def _get_local_backdir(self): + self._local_backdir = public.M('config').field('backup_path').find()['backup_path'] + #压缩目录 def backup_path_to(self,spath,dfile,exclude = [],siteName = None): if not os.path.exists(spath): @@ -445,7 +454,7 @@ def backup_database(self,db_name,dfile = None,save=3): else: backups = public.M('backup').where('type=? and pid=? and filename=?',('1',pid,filename)).field('id,name,filename').select() - + self.echo_info(str(backups)) self.delete_old(backups,save,'database') self.echo_end() return dfile diff --git a/class/php_info.php b/class/php_info.php index 4ea1d1ca..663e6db9 100644 --- a/class/php_info.php +++ b/class/php_info.php @@ -75,6 +75,6 @@ function get_info(){ return $data; } $result = get_info(); -exit(json_encode($result,1)); +exit(json_encode($result)); diff --git a/task.py b/task.py index 3829be3f..9adbeec8 100644 --- a/task.py +++ b/task.py @@ -45,6 +45,7 @@ def ExecShell(cmdstring, cwd=None, timeout=None, shell=True): import datetime import subprocess import time + subprocess.Popen('echo > ' + logPath, cwd=cwd, stdin=subprocess.PIPE, shell=shell, bufsize=4096) sub = subprocess.Popen(cmdstring+' &> '+logPath, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096) while sub.poll() is None: From a45bd007e6717081f9ef9746db658e3652cbf0ee Mon Sep 17 00:00:00 2001 From: jose Date: Fri, 22 May 2020 18:27:17 +0800 Subject: [PATCH 10/21] aaPanel 6.6.9 Optimize PHP Manager Optimize file manager move file logic Optimize online editor --- README.md | 45 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5749e6b7..0e0269a9 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -Introduction: +**Introduction:** aaPanel is the International version for BAOTA panel(www.bt.cn) There have millions servers had installed BAOTA panel since 2014 in China. aaPanel, a simple but powerful control panel, can manage the web server through web-based GUI(Graphical User Interface). aaPanel provides the one-click function such as one-click install LNMP/LAMP developing environment and software. Our main goal is helping users to save the time of deploying, thus users just focus on their own project that is fine. -History: +**History:** The founding R & D team of BaoTa has 5 people, all of whom have 5 to 10 years of experience in idc related industries. When everyone discusses together and works in the schedule or their own use, they find that there is no such thing in the field of servers. The company specializes in developing relevant software for ordinary users, especially those who do not know much about technology. We found that for many users, operating the server is not easy, it is necessary to consult others, take time to search for answers, and even pay for simple questions. There will be many pits involved in the cost. Some auxiliary software itself is more difficult than using the server. Even this kind of painful point is itchiness. With the development of cloud servers, the number of server users has increased by several orders of magnitude. The preparatory work for the establishment of the pagoda began at the end of 2014, and began to develop and test software in the first half of 2015. At this stage, the pagoda brand was officially launched in 2016 and bt.cn was used as the official website. @@ -13,7 +13,7 @@ In 2017, BaoTa tried to enter the overseas market, but because the number of peo In 2019, due to the gradual growth of BaoTa users, which has become the hosting control panel used by the most webmasters in China, it is decided to enter the overseas market and develop related plug-ins that are suitable for foreign friends -What can it do: +**What can it do:** aaPanel is a server management software that supports the Linux system. It can easily manage the server through the Web terminal, improving the operation and maintenance efficiency. For example: create and manage websites, FTP, and databases, with visual file manager, visual software manager, visual CPU, memory, flow monitoring chart, scheduled tasks and other functions. aaPanel has extremely fast and convenient one-key configuration and management, one-click configuration of server environment (LAMP / LNMP / Tomcat / Node.js /OpenLiteSpeed), one-click deployment of SSL, remote backup; provide SSH open and close services, SSH port changes, ping prohibited , Firewall port release and operation log viewing; CPU, memory, disk IO, network IO data monitoring, you can set the number of days to record and save and view the data of a certain day; scheduled tasks can be added and executed periodically, support SHELL script, provide website, database backup And log cutting, and support one-click backup to another cloud storage space, or other cloud storage space; through the web interface, you can easily manage the server software used for installation, as well as practical extension plug-ins; convenient and efficient file manager integration , Support uploading, downloading, packaging, decompression and file editing and viewing. @@ -22,6 +22,45 @@ aaPanel has extremely fast and convenient one-key configuration and management, Over 2,100,000 servers have installed aaPanel in Asia +**HomePage:** + +![blockchain](https://www.aapanel.com/images/linux-home.png "HomePage") + +**WebSite Manager:** + +![blockchain](http://www.aapanel.com/images/linux-web.png "WebSite") + +**FTP Manager** + +![blockchain](http://www.aapanel.com/images/linux-ftp.png "WebSite") + +**DataBase Manager** + +![blockchain](http://www.aapanel.com/images/linux-db.png "DBManager") + +**File Manager** + +![blockchain](http://www.aapanel.com/images/linux-file.png "FileManager") + +**Cron Manager** + +![blockchain](http://www.aapanel.com/images/linux-cron.png "CronManager") + +**Monitory** + +![blockchain](http://www.aapanel.com/images/linux-monitory.png "Monitory") + +**Security** + +![blockchain](http://www.aapanel.com/images/linux-security.png "Security") + +**Software** + +![blockchain](http://www.aapanel.com/images/linux-software.png "Software") + +**Online editor** + +![blockchain](http://www.aapanel.com/images/online_editor.png "Onlineeditor") ##### Home Page:https://www.aapanel.com/ ##### Forum Page:https://forum.aapanel.com/ From f5c24ccfc117672e1996cb8259ee074e49fcf846 Mon Sep 17 00:00:00 2001 From: jose Date: Fri, 22 May 2020 18:35:11 +0800 Subject: [PATCH 11/21] aaPanel 6.6.9 Optimize PHP Manager Optimize file manager move file logic Optimize online editor --- README.md | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0e0269a9..b75f57cc 100644 --- a/README.md +++ b/README.md @@ -7,20 +7,48 @@ Our main goal is helping users to save the time of deploying, thus users just fo **History:** -The founding R & D team of BaoTa has 5 people, all of whom have 5 to 10 years of experience in idc related industries. When everyone discusses together and works in the schedule or their own use, they find that there is no such thing in the field of servers. The company specializes in developing relevant software for ordinary users, especially those who do not know much about technology. We found that for many users, operating the server is not easy, it is necessary to consult others, take time to search for answers, and even pay for simple questions. There will be many pits involved in the cost. Some auxiliary software itself is more difficult than using the server. Even this kind of painful point is itchiness. With the development of cloud servers, the number of server users has increased by several orders of magnitude. The preparatory work for the establishment of the pagoda began at the end of 2014, and began to develop and test software in the first half of 2015. At this stage, the pagoda brand was officially launched in 2016 and bt.cn was used as the official website. +_The founding R & D team of BaoTa has 5 people, all of whom have 5 to 10 years of experience in idc related industries._ -In 2017, BaoTa tried to enter the overseas market, but because the number of people could not keep up, he decided to temporarily abandon the overseas market and focus on China. +_When everyone discusses together and works in the schedule or their own use, they find that there is no such thing in the field of servers._ -In 2019, due to the gradual growth of BaoTa users, which has become the hosting control panel used by the most webmasters in China, it is decided to enter the overseas market and develop related plug-ins that are suitable for foreign friends +_The company specializes in developing relevant software for ordinary users, especially those who do not know much about technology._ + +_We found that for many users, operating the server is not easy, it is necessary to consult others, take time to search for answers, and even pay for simple questions._ + +_There will be many pits involved in the cost. Some auxiliary software itself is more difficult than using the server._ + +_Even this kind of painful point is itchiness. With the development of cloud servers, the number of server users has increased by several orders of magnitude._ + +_The preparatory work for the establishment of the pagoda began at the end of 2014, and began to develop and test software in the first half of 2015._ + +_At this stage, the pagoda brand was officially launched in 2016 and bt.cn was used as the official website._ + +_In 2017, BaoTa tried to enter the overseas market, but because the number of people could not keep up, he decided to temporarily abandon the overseas market and focus on China._ + +_In 2019, due to the gradual growth of BaoTa users, which has become the hosting control panel used by the most webmasters in China, it is decided to enter the overseas market and develop related plug-ins that are suitable for foreign friends___ **What can it do:** -aaPanel is a server management software that supports the Linux system. It can easily manage the server through the Web terminal, improving the operation and maintenance efficiency. For example: create and manage websites, FTP, and databases, with visual file manager, visual software manager, visual CPU, memory, flow monitoring chart, scheduled tasks and other functions. -aaPanel has extremely fast and convenient one-key configuration and management, one-click configuration of server environment (LAMP / LNMP / Tomcat / Node.js /OpenLiteSpeed), one-click deployment of SSL, remote backup; provide SSH open and close services, SSH port changes, ping prohibited , Firewall port release and operation log viewing; CPU, memory, disk IO, network IO data monitoring, you can set the number of days to record and save and view the data of a certain day; scheduled tasks can be added and executed periodically, support SHELL script, provide website, database backup And log cutting, and support one-click backup to another cloud storage space, or other cloud storage space; through the web interface, you can easily manage the server software used for installation, as well as practical extension plug-ins; convenient and efficient file manager integration , Support uploading, downloading, packaging, decompression and file editing and viewing. +_aaPanel is a server management software that supports the Linux system._ + +_It can easily manage the server through the Web terminal, improving the operation and maintenance efficiency._ + +**For example:** + + +_create and manage websites, FTP, and databases, with visual file manager, visual software manager, visual CPU, memory, flow monitoring chart, scheduled tasks and other functions._ + +_aaPanel has extremely fast and convenient one-key configuration and management, one-click configuration of server environment (LAMP / LNMP / Tomcat / Node.js /OpenLiteSpeed), one-click deployment of SSL, remote backup;_ + +_provide SSH open and close services, SSH port changes, ping prohibited , Firewall port release and operation log viewing; CPU, memory, disk IO, network IO data monitoring, you can set the number of days to record and save and view the data of a certain day;_ + +_scheduled tasks can be added and executed periodically, support SHELL script, provide website, database backup And log cutting, and support one-click backup to another cloud storage space, or other cloud storage space; through the web interface, you can easily manage the server software used for installation, as well as practical extension plug-ins;_ + +_convenient and efficient file manager integration , Support uploading, downloading, packaging, decompression and file editing and viewing._ -Over 2,100,000 servers have installed aaPanel in Asia +**Over 2,100,000 servers have installed aaPanel in Asia** **HomePage:** From 930b8a230bca01bdb8e220108a66aa11a58163d9 Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 23 May 2020 09:41:25 +0800 Subject: [PATCH 12/21] aaPanel 6.6.9 Optimize PHP Manager Optimize file manager move file logic Optimize online editor --- data/o.pl | 1 + 1 file changed, 1 insertion(+) create mode 100644 data/o.pl diff --git a/data/o.pl b/data/o.pl new file mode 100644 index 00000000..8ba7e15f --- /dev/null +++ b/data/o.pl @@ -0,0 +1 @@ +github \ No newline at end of file From ce695101409701a354271ea305c84738caf27508 Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 23 May 2020 10:41:48 +0800 Subject: [PATCH 13/21] Update images --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index b75f57cc..d1015ba9 100644 --- a/README.md +++ b/README.md @@ -52,43 +52,43 @@ _convenient and efficient file manager integration , Support uploading, download **HomePage:** -![blockchain](https://www.aapanel.com/images/linux-home.png "HomePage") +![blockchain](https://www.aapanel.com/images/linux-home.png?v=1 "HomePage") **WebSite Manager:** -![blockchain](http://www.aapanel.com/images/linux-web.png "WebSite") +![blockchain](https://www.aapanel.com/images/linux-web.png?v=1 "WebSite") **FTP Manager** -![blockchain](http://www.aapanel.com/images/linux-ftp.png "WebSite") +![blockchain](https://www.aapanel.com/images/linux-ftp.png?v=1 "WebSite") **DataBase Manager** -![blockchain](http://www.aapanel.com/images/linux-db.png "DBManager") +![blockchain](https://www.aapanel.com/images/linux-db.png?v=1 "DBManager") **File Manager** -![blockchain](http://www.aapanel.com/images/linux-file.png "FileManager") +![blockchain](https://www.aapanel.com/images/linux-files.png?v=1 "FileManager") **Cron Manager** -![blockchain](http://www.aapanel.com/images/linux-cron.png "CronManager") +![blockchain](https://www.aapanel.com/images/linux-cron.png?v=1 "CronManager") **Monitory** -![blockchain](http://www.aapanel.com/images/linux-monitory.png "Monitory") +![blockchain](https://www.aapanel.com/images/linux-monitory.png?v=1 "Monitory") **Security** -![blockchain](http://www.aapanel.com/images/linux-security.png "Security") +![blockchain](https://www.aapanel.com/images/linux-security.png?v=1 "Security") **Software** -![blockchain](http://www.aapanel.com/images/linux-software.png "Software") +![blockchain](https://www.aapanel.com/images/linux-software.png?v=1 "Software") **Online editor** -![blockchain](http://www.aapanel.com/images/online_editor.png "Onlineeditor") +![blockchain](https://www.aapanel.com/images/online_editor.png?v=1 "Onlineeditor") ##### Home Page:https://www.aapanel.com/ ##### Forum Page:https://forum.aapanel.com/ From ce7bd5d106f883121ad18ba7c6fea7191cb1372d Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 30 May 2020 10:30:36 +0800 Subject: [PATCH 14/21] File management adds video playback File sharing adds directory sharing and video playback functions Optimize file sharing UI Publish system firewall plugin Release Amazon storage plugin Other details adjustment --- BTPanel/__init__.py | 138 ++- BTPanel/static/css/site.css | 41 +- BTPanel/static/js/files.js | 121 ++- BTPanel/static/js/public.js | 2 +- BTPanel/static/js/soft.js | 2 +- BTPanel/templates/default/down.html | 1256 ++++++++++++++++++++++++++- BTPanel/templates/default/lan.js | 1042 ---------------------- class/ajax.py | 29 +- class/common.py | 2 +- class/db.py | 8 +- class/files.py | 41 +- class/jobs.py | 12 + class/panelBackup.py | 17 +- class/panelMessage.py | 134 +++ class/panelPlugin.py | 90 +- class/panelSite.py | 2 + class/panelVideo.py | 68 ++ class/panelWaf.py | 188 +--- class/php_info.php | 2 +- class/public.py | 21 +- class/setPanelLets.py | 4 +- 21 files changed, 1897 insertions(+), 1323 deletions(-) delete mode 100644 BTPanel/templates/default/lan.js create mode 100644 class/panelMessage.py create mode 100644 class/panelVideo.py diff --git a/BTPanel/__init__.py b/BTPanel/__init__.py index c3976ebf..590d6c18 100644 --- a/BTPanel/__init__.py +++ b/BTPanel/__init__.py @@ -144,7 +144,9 @@ '/panel', '/acme', '/down', - '/api' + '/api', + '/tips', + '/message' ] if admin_path in admin_path_checks: admin_path = '/bt' @@ -210,7 +212,7 @@ def reload_mod(): @app.before_request def request_check(): - if not public.path_safe_check(request.path): return abort(404) + #if not public.path_safe_check(request.path): return abort(404) if request.path in ['/service_status']: return if not request.path in ['/safe','/hook','/public','/mail_sys','/down']: @@ -218,7 +220,7 @@ def request_check(): if ip_check: return ip_check if request.path.find('/static/') != -1 or request.path == '/code': - if not 'login' in session and not 'admin_auth' in session: + if not 'login' in session and not 'admin_auth' in session and not 'down' in session: session.clear() return abort(401) domain_check = public.check_domain_panel() @@ -272,6 +274,11 @@ def close(): data['lan'] = public.getLan('close') return render_template('close.html',data=data) +@app.route('/tips',methods=method_get) +def tips(): + return render_template('tips.html') + + route_path = os.path.join(admin_path,'') if route_path[-1] == '/': route_path = route_path[:-1] if route_path[0] != '/': route_path = '/' + route_path @@ -395,7 +402,7 @@ def FtpPort(): try: file = public.GetConfigValue('setup_path')+'/pure-ftpd/etc/pure-ftpd.conf' conf = public.readFile(file) - rep = "\n#?\s*Bind\s+[0-9]+\.[0-9]+\.[0-9]+\.+[0-9]+,([0-9]+)" + rep = r"\n#?\s*Bind\s+[0-9]+\.[0-9]+\.[0-9]+\.+[0-9]+,([0-9]+)" port = re.search(rep,conf).groups()[0] except: port='21' @@ -466,6 +473,15 @@ def acme(pdata = None): 'get_auths','auth_domain','check_auth_status','download_cert','apply_cert','renew_cert','apply_cert_api','apply_dns_auth') return publicObject(acme_v2_object,defs,None,pdata) +@app.route('/message/',methods=method_all) +def message(action = None): + comReturn = comm.local() + if comReturn: return comReturn + import panelMessage + message_object = panelMessage.panelMessage() + defs = ('get_messages','get_message_find','create_message','status_message','remove_message','get_messages_all') + return publicObject(message_object,defs,action,None) + @app.route('/api',methods=method_all) def api(pdata = None): comReturn = comm.local() @@ -520,8 +536,8 @@ def ssh_security(pdata = None): return render_template( 'firewall.html',data=data) import ssh_security firewallObject = ssh_security.ssh_security() - defs = ('get_logs','san_ssh_security','set_password','set_sshkey','stop_key','get_config', - 'stop_password','get_key','return_ip','add_return_ip','del_return_ip','start_jian','stop_jian','get_jian') + defs = ('san_ssh_security','set_password','set_sshkey','stop_key','get_config', + 'stop_password','get_key','return_ip','add_return_ip','del_return_ip','start_jian','stop_jian','get_jian','get_logs') return publicObject(firewallObject,defs,None,pdata) @@ -612,7 +628,7 @@ def files(pdata = None): 'CheckExistsFiles','GetExecLog','GetSearch','ExecShell','GetExecShellMsg','exec_git','exec_composer','create_download_url', 'UploadFile','GetDir','CreateFile','CreateDir','DeleteDir','DeleteFile','get_download_url_list','remove_download_url','modify_download_url', 'CopyFile','CopyDir','MvFile','GetFileBody','SaveFileBody','Zip','UnZip','get_download_url_find', - 'SearchFiles','upload','read_history','re_history','auto_save_temp','get_auto_save_body', + 'SearchFiles','upload','read_history','re_history','auto_save_temp','get_auto_save_body','get_videos', 'GetFileAccess','SetFileAccess','GetDirSize','SetBatchData','BatchPaste','install_rar','get_path_size', 'DownloadFile','GetTaskSpeed','CloseLogs','InstallSoft','UninstallSoft','SaveTmpFile','get_composer_version','exec_composer','update_composer', 'GetTmpFile','del_files_store','add_files_store','get_files_store','del_files_store_types','add_files_store_types','exec_git', @@ -807,6 +823,13 @@ def plugin(pdata = None): @app.route('/public',methods=method_all) def panel_public(): get = get_input() + try: + import panelWaf + panelWaf_data = panelWaf.panelWaf() + if panelWaf_data.is_sql(get.__dict__):return 'ERROR' + if panelWaf_data.is_xss(get.__dict__):return 'ERROR' + except: + pass get.client_ip = public.GetClientIp() if not hasattr(get,'name'): get.name = '' if not hasattr(get,'fun'): return abort(404) @@ -1064,50 +1087,109 @@ def download(): if filename in ['alioss','qiniu','upyun','txcos','ftp']: return panel_cloud() if filename in ['gdrive','gcloud_storage']: return "Google storage products do not currently support downloads" if not os.path.exists(filename): return public.ReturnJson(False,"FILE_NOT_EXISTS"),json_header - mimetype = "application/octet-stream" - extName = filename.split('.')[-1] - if extName in ['png','gif','jpeg','jpg']: mimetype = None - return send_file(filename,mimetype=mimetype, - as_attachment=True, - attachment_filename=os.path.basename(filename), - cache_timeout=0) + + if request.args.get('play') == 'true': + import panelVideo + start, end = panelVideo.get_range(request) + return panelVideo.partial_response(filename, start, end) + else: + mimetype = "application/octet-stream" + extName = filename.split('.')[-1] + if extName in ['png','gif','jpeg','jpg']: mimetype = None + return send_file(filename,mimetype=mimetype, + as_attachment=True, + attachment_filename=os.path.basename(filename), + cache_timeout=0) + +def get_dir_down(filename,token,find): + import files + args = public.dict_obj() + args.path = filename + to_path = filename.replace(find['filename'],'').strip('/') + + if request.args.get('play') == 'true': + pdata = files.files().get_videos(args) + return public.GetJson(pdata),json_header + else: + pdata = files.files().GetDir(args) + pdata['token'] = token + pdata['src_path'] = find['filename'] + pdata['to_path'] = to_path + pdata['expire'] = public.format_date(times=find['expire']) + pdata['filename'] = (find['filename'].split('/')[-1] + '/' + to_path).strip('/') + return render_template('down.html',data = pdata,to_size=public.to_size) @app.route('/down/',methods=method_all) -def down(token=None,mdown=None): +def down(token=None,fname=None): try: + fname = request.args.get('fname') + if fname: + if(len(fname) > 256): return abort(404) + if fname: fname = fname.strip('/') if not token: return abort(404) if len(token) != 12: return abort(404) + if not request.args.get('play') in ['true',None,'']: + return abort(404) + if not re.match(r"^\w+$",token): return abort(404) find = public.M('download_token').where('token=?',(token,)).find() + if not find: return abort(404) if time.time() > int(find['expire']): return abort(404) + if not os.path.exists(find['filename']): return abort(404) - if find['password']: + if find['password'] and not token in session: args = get_input() if 'file_password' in args: if not re.match(r"^\w+$",args.file_password): - return public.ReturnJson(False,'wrong password!'),json_header - if not args.file_password == find['password']: - return public.ReturnJson(False,'wrong password!'),json_header + return public.ReturnJson(False,'Wrong password!'),json_header + if re.match(r"^\d+$",args.file_password): + args.file_password += '.0' + if args.file_password != str(find['password']): + return public.ReturnJson(False,'Wrong password!'),json_header + session[token] = 1 + session['down'] = True else: pdata = { + "to_path":"", + "src_path": find['filename'], "password":True, "filename":find['filename'].split('/')[-1], "total":find['total'], "token":find['token'], - "expire":find['expire'] + "expire":public.format_date(times=find['expire']) } return render_template('down.html',data = pdata) + if not find['password']: + session[token] = 1 + + if session[token] != 1: + return abort(404) filename = find['filename'] - mimetype = "application/octet-stream" - extName = filename.split('.')[-1] - if extName in ['png','gif','jpeg','jpg']: mimetype = None - return send_file(filename,mimetype=mimetype, - as_attachment=True, - attachment_filename=os.path.basename(filename), - cache_timeout=0) - except: return abort(404) + if fname: + filename = os.path.join(filename,fname) + if not public.path_safe_check(fname,False): return abort(404) + if os.path.isdir(filename): + return get_dir_down(filename,token,find) + else: + if os.path.isdir(filename): + return get_dir_down(filename,token,find) + + if request.args.get('play') == 'true': + import panelVideo + start, end = panelVideo.get_range(request) + return panelVideo.partial_response(filename, start, end) + else: + mimetype = "application/octet-stream" + extName = filename.split('.')[-1] + if extName in ['png','gif','jpeg','jpg']: mimetype = None + return send_file(filename,mimetype=mimetype, + as_attachment=True, + attachment_filename=os.path.basename(filename), + cache_timeout=0) + except: + return abort(404) @app.route('/cloud',methods=method_get) diff --git a/BTPanel/static/css/site.css b/BTPanel/static/css/site.css index 598616ea..ce26d958 100644 --- a/BTPanel/static/css/site.css +++ b/BTPanel/static/css/site.css @@ -1137,10 +1137,8 @@ html .menu .menu_exit:hover { border-bottom: 1px solid #e6e6e6; color: #666; font-weight: normal; - padding: 5px 10px; - height: 35px; + padding: 8px; font-size: 12.5px; - box-sizing: content-box; } .divtable .table_toolbar{ left: 8px; @@ -6697,4 +6695,41 @@ select[disabled]{ } .php_info_group:last-child{ margin-bottom: 15px; +} + +#btvideo{ + display: inline-block; + height: 360px; +} +.video-list{ + display: inline-block; + width: 250px; + height: 360px; + overflow: auto; +} +.video-list .video-avt{ + background-color: #e8e8e8; +} +.movie_pay .layui-layer-content{ + overflow: hidden !important; +} +.video-list .video-avt td a, +.video-list .video-avt td{ + color: #20a53a; +} +.video-list tr td{ + border-top: 0px; + border-bottom: 1px solid #ddd; +} +.video-list tr:hover{ + cursor: pointer; +} +#btvideo video{ + outline: none; + padding: 0; + display: block; + background-color: #000; +} +.minText{ + white-space: nowrap; } \ No newline at end of file diff --git a/BTPanel/static/js/files.js b/BTPanel/static/js/files.js index df4d180d..6737f5c0 100644 --- a/BTPanel/static/js/files.js +++ b/BTPanel/static/js/files.js @@ -473,7 +473,8 @@ function GetFiles(Path, sort) { if (getCookie("rank") == "a") { $("#set_list").addClass("active"); $("#set_icon").removeClass("active"); - Body += "
            \ + if (rdata.PATH=='/') rdata.PATH = ''; + Body += "\ \ \ \ @@ -491,7 +492,7 @@ function GetFiles(Path, sort) { } else { $("#set_icon").addClass("active"); $("#set_list").removeClass("active"); - Body += ""; } else { - Body += "\ \ \ - \ - \ - \ - \ - \ + \ + \ + \ + \ + \ \ \ ' + Body + '\ @@ -639,7 +643,7 @@ function GetFiles(Path, sort) { ' @@ -723,8 +727,12 @@ function GetFiles(Path, sort) { if (e.which == 3) { if (count <= 1) { var a = $(this); - a.contextify(RClick(a.attr("filetype"), a.attr("data-path"), a.find("input").val(), rdata, a.attr('fileshare'),a.attr('data-composer'))); - } else { + a.contextify(RClick(a.attr("filetype"), a.attr("data-path"), a.find("input").val(), rdata,a.attr('fileshare'),a.attr('data-composer'))); + $(this).find('input').prop("checked", true); + $(this).addClass('ui-selected'); + $(this).siblings().removeClass('ui-selected').find('input').prop("checked", false); + } + else { RClickAll(e); } } @@ -773,7 +781,7 @@ function php_file_webshell(file) { } function auto_table_width() { - var oldTable = $(window).height() - $('#tipTools')[0].getBoundingClientRect().height - $('#filePage')[0].getBoundingClientRect().height - $('.footer')[0].getBoundingClientRect().height - 121; + var oldTable = $(window).height() - $('#tipTools')[0].getBoundingClientRect().height - $('#filePage')[0].getBoundingClientRect().height - $('.footer')[0].getBoundingClientRect().height - 111; var oldTable_heigth = $('.oldTable table').height(); $('.oldTable thead th').each(function (index, el) { var table_th = $('.oldTable thead th').length; @@ -1655,21 +1663,63 @@ function GetImage(fileName) { $(".layui-layer").css("top", "30%"); } +// function GetPlay(fileName) { +// var imgUrl = '/download?filename=' + fileName; +// layer.open({ +// type: 1, +// closeBtn: 2, +// title: 'Play [' + fileName + ']', +// area: '500px', +// shadeClose: false, +// content: '
            ' +// }); +// $(".layui-layer").css("top", "30%"); +// } +function play_file(obj,filename) { + console.log($('#btvideo video').attr('data-filename'),filename) + if($('#btvideo video').attr('data-filename')== filename) return false; + var imgUrl = '/download?filename=' + filename + '&play=true'; + var v = '' + $("#btvideo").html(v); + var p_tmp = filename.split('/') + $(".btvideo-title").html(p_tmp[p_tmp.length-1]); + $(".video-avt").removeClass('video-avt'); + $(obj).parents('tr').addClass('video-avt'); +} function GetPlay(fileName) { + var old_filename = fileName; var imgUrl = '/download?filename=' + fileName; + var p_tmp = fileName.split('/') + var path = p_tmp.slice(0, p_tmp.length - 1).join('/') layer.open({ type: 1, closeBtn: 2, - title: 'Play [' + fileName + ']', - area: '500px', + // maxmin:true, + title: 'Playing [' + p_tmp[p_tmp.length-1] + ']', + area: ["890px","402px"], shadeClose: false, - content: '
            ' + skin:'movie_pay', + content: '
            ', + success: function () { + $.post('/files?action=get_videos', { path: path }, function (rdata) { + var video_list = '
            " + cnametext + fileMsg + "" + lan.files.calc_click + "
            ' + lan.files.file_name + ((data['sort'] === 'name' || !data['sort']) ? sort_icon : '') + '' + lan.files.file_size + ((data['sort'] === 'size') ? sort_icon : '') + '' + lan.files.file_etime + ((data['sort'] === 'mtime') ? sort_icon : '') + '' + lan.files.file_auth + ((data['sort'] === 'accept') ? sort_icon : '') + '' + lan.files.file_own + ((data['sort'] === 'user') ? sort_icon : '') + '' + lan.files.file_act + '' + lan.files.file_size + ((data['sort'] === 'size') ? sort_icon : '') + '' + lan.files.file_etime + ((data['sort'] === 'mtime') ? sort_icon : '') + '' + lan.files.file_auth + ((data['sort'] === 'accept') ? sort_icon : '') + '' + lan.files.file_own + ((data['sort'] === 'user') ? sort_icon : '') + '' + lan.files.file_act + '
            '; + for (var i = 0; i < rdata.length; i++) { + var filename = path + '/' + rdata[i].name + video_list += ''; + } + video_list += '
            File nameSize
            ' + + rdata[i].name + '' + ToSize(rdata[i].size) + '
            '; + $('.video-list').html(video_list); + }); + } }); - $(".layui-layer").css("top", "30%"); } - function GetFileBytes(fileName, fileSize) { window.open('/download?filename=' + encodeURIComponent(fileName)); } @@ -2648,9 +2698,9 @@ function RClick(type, path, name, file_store, file_share,data_composer) { } }) } - //else if (isVideo(type)) { - // options.items.push({ text: '播放', onclick: function () { GetPlay(path) } }, { text: lan.files.file_menu_down, onclick: function () { GetFileBytes(path) } }, { text: lan.files.file_menu_del, onclick: function () { DeleteFile(path) } }); - //} + else if (isVideo(type)) { + options.items.push({ text: 'Play', onclick: function () { GetPlay(path) } }, { text: lan.files.file_menu_down, onclick: function () { GetFileBytes(path) } }, { text: lan.files.file_menu_del, onclick: function () { DeleteFile(path) } }); + } else if (isText(type)) { options.items.push({ text: lan.files.file_menu_edit, @@ -2715,15 +2765,21 @@ function RClick(type, path, name, file_store, file_share,data_composer) { } }); } - if (type !== 'dir') { - options.items.push({ - text: 'Share', - onclick: function () { - create_download_url(name, path, file_share) - } - }); - } - + // if (type !== 'dir') { + // options.items.push({ + // text: 'Share', + // onclick: function () { + // create_download_url(name, path, file_share) + // } + // }); + // } + // if(type !== 'dir'){ + // options.items.push({ text: 'Share', onclick: function () { create_download_url(name,path,file_share) } }); + // } + + options.items.push({ text: 'Share', onclick: function () { + create_download_url(name,path,file_share) } }); + if( type === 'dir' && data_composer === '1'){ options.items.push({ text: 'Composer', onclick: function () { exec_composer(name,path) } }); } @@ -2839,9 +2895,10 @@ function show_composer_log(){ }); } + function create_download_url(fileName, path, fileShare) { fileShare = parseInt(fileShare); - if (fileShare != 0) { + if(fileShare != 0) { $.post('/files?action=get_download_url_find', { id: fileShare }, function (rdata) { diff --git a/BTPanel/static/js/public.js b/BTPanel/static/js/public.js index 132156d6..3c79c1c8 100644 --- a/BTPanel/static/js/public.js +++ b/BTPanel/static/js/public.js @@ -1175,7 +1175,7 @@ var aceEditor = { _this = this; var loadT = layer.open({ type: 1, - area: ['400px', '180px'], + area: ['400px', '200px'], title: lan.public.restore_history_files, content: '
            \
            \ diff --git a/BTPanel/static/js/soft.js b/BTPanel/static/js/soft.js index 6d5f5e3e..bc32c964 100644 --- a/BTPanel/static/js/soft.js +++ b/BTPanel/static/js/soft.js @@ -2016,7 +2016,7 @@ var soft = { { field: 'opt', title: lan.public.action, - width: 50, + width: 60, templet: function(item) { var opt = '' + lan.soft.install + '' if (item['task'] == '-1' && item.phpversions.indexOf(version) != -1) { diff --git a/BTPanel/templates/default/down.html b/BTPanel/templates/default/down.html index 28f9190d..41b01dc9 100644 --- a/BTPanel/templates/default/down.html +++ b/BTPanel/templates/default/down.html @@ -7,6 +7,22 @@ Extracting files - {{data.filename}} + + + +
            -

            - -

            - - -
            -

            +
            +
            Share file【 {{data.filename}}
            +
            Term of validity:{{data.expire}}
            +
            + {% if not data['PATH'] %} + +
            +
            + Enter the extraction password: +
            + + +
            +
            +
            + {% else %} + + + +
            + +
            + + + + + + + + + + {% for d in data['DIR'] %} + {% set d = d.split(';') %} + + + + + + {% endfor %} + {% for d in data['FILES'] %} + {% set d = d.split(';') %} + + + + + + {% endfor %} + +
            File nameSiteopt
            {{d[0]}}{{to_size(d[1])}}Open
            {{d[0]}}{{to_size(d[1])}} + {% if d[0].split('.')[-1].lower() in ['avi','mp4','mkv','mpeg','webm','3gp'] %} + Play | + {% elif d[0].split('.')[-1].lower() in ['jpg', 'jpeg', 'png', 'bmp', 'gif', 'tiff', 'ico'] %} + Preview | + {% endif %} + Download +
            +
            + +
            + {% endif %}
            + \ No newline at end of file diff --git a/BTPanel/templates/default/lan.js b/BTPanel/templates/default/lan.js deleted file mode 100644 index 6072bab2..00000000 --- a/BTPanel/templates/default/lan.js +++ /dev/null @@ -1,1042 +0,0 @@ -var lan = { - "get":function(key,args){ - var msgs = { - "diskinfo_span_1":"磁盘分区[{1}]的可用容量小于1GB,这可能会导致MySQL自动停止,面板无法访问等问题,请及时清理!", - "process_kill_confirm":"结束进程名[{1}],PID[{2}]后可能会影响服务器的正常运行,继续吗?", - "del":"删除[{1}]", - "del_all_task":"您共选择了[{1}]个任务,删除后将无法恢复,真的要删除吗?", - "del_all_task_ok":"成功删除[{1}]个任务!", - "del_all_task_the":"正在删除[{1}],请稍候...", - "add_all_task_ok":"成功添加[{1}]个计划任务!", - "add":"正在添加[{1}],请稍候...", - "confirm_del":"您真的要删除[{1}]吗?", - "update_num":"一次只能选择{1}个文件上传,剩下的不作处理!", - "service_confirm":"您真的要{1}{2}服务吗?", - "service_the":"正在{1}{2}服务,请稍候...", - "service_ok":"{1}服务已{2}", - "service_err":"{1}服务{2}失败!", - "recycle_bin_confirm":"您确实要把此文件[{1}]放入回收站吗?", - "recycle_bin_confirm_dir":"您确实要把此目录[{1}]放入回收站吗?", - "del_all_ftp":"您共选择了[{1}]个FTP,删除后将无法恢复,真的要删除吗?", - "del_all_ftp_ok":"成功删除{1}个FTP帐户", - "del_all_database":"您共选择了[{1}]个数据库,删除后将无法恢复,真的要删除吗?", - "del_all_database_ok":"成功删除[{1}]个数据库!", - "config_edit_ps":"此处为{1}主配置文件,若您不了解配置规则,请勿随意修改。", - "install_confirm":"您真的要安装{1}-{2}吗?", - "del_all_site":"您共选择了[{1}]个站点,删除后将无法恢复,真的要删除吗?", - "del_all_site_ok":"成功删除[{1}]个站点!", - "ssl_enable":"您已启用[{1}]证书,如需关闭,请点击\"关闭SSL\"按钮。", - "lack_param":"缺少必要参数[{1}]", - "del_ftp":'是否删除[{1}]该FTP账号?', - } - - if(!msgs[key]) return ''; - msg = msgs[key]; - for(var i=0;i注意,开启广告拦截会导致无法快捷登录。", - "task_time":"时间", - "task_name":"名称", - "task_msg_title":"消息提醒", - "task_title":"消息盒子", - "task_tip_read":"标记已读", - "task_tip_all":"全部已读", - "no_data" : "当前没有数据" - }, - - "files":{ - "recycle_bin_re":"恢复", - "recycle_bin_del":"永久删除", - "recycle_bin_on":"文件回收站", - "recycle_bin_on_db":"数据库回收站", - "recycle_bin_ps":"注意:关闭回收站,删除的文件无法恢复!", - "recycle_bin_close":"清空回收站", - "recycle_bin_type1":"全部", - "recycle_bin_type2":"文件夹", - "recycle_bin_type3":"文件", - "recycle_bin_type4":"图片", - "recycle_bin_type5":"文档", - "recycle_bin_type6":"数据库", - "recycle_bin_th1":"文件名", - "recycle_bin_th2":"原位置", - "recycle_bin_th3":"大小", - "recycle_bin_th4":"删除时间", - "recycle_bin_th5":"操作", - "recycle_bin_title":"回收站", - "recycle_bin_re_title":"恢复文件", - "recycle_bin_re_msg":"若您的原位置已有同名文件或目录,将被覆盖,继续吗?", - "recycle_bin_re_the":"正在恢复,请稍候...", - "recycle_bin_del_title":"删除文件", - "recycle_bin_del_msg":"删除操作不可逆,继续吗?", - "recycle_bin_del_the":"正在删除,请稍候...", - "recycle_bin_close_msg":"清空回收站操作会永久删除回收站中的文件,继续吗?", - "recycle_bin_close_the":"正在删除,请稍候...", - "file_menu_copy":"复制", - "file_menu_mv":"剪切", - "file_menu_rename":"重命名", - "file_menu_auth":"权限", - "file_menu_zip":"压缩", - "file_menu_unzip":"解压", - "file_menu_edit":"编辑", - "file_menu_img":"预览", - "file_menu_down":"下载", - "file_menu_del":"删除", - "file_name":"文件名", - "file_size":"大小", - "file_etime":"修改时间", - "file_auth":"权限", - "file_own":"所有者", - "file_read":"读取", - "file_write":"写入", - "file_exec":"执行", - "file_public":"公共", - "file_group":"用户组", - "file_act":"操作", - "get_size":"共{1}个目录与{2}个文件,大小:", - "get":"获取", - "new":"新建", - "new_empty_file":"新建空白文件", - "new_dir":"新建目录", - "dir_name":"目录名称", - "return":"返回上一级", - "shell":"终端", - "paste":"粘贴", - "paste_all":"粘贴所有", - "path_root":"根目录", - "all":"批量", - "set_auth":"设置权限", - "up_title":"上传文件", - "up_add":"添加文件", - "up_start":"开始上传", - "up_coding":"文件编码", - "up_bin":"二进制", - "unzip_title":"解压文件", - "unzip_name":"文件名", - "unzip_name_title":"压缩文件名", - "unzip_to":"解压到", - "unzip_coding":"编码", - "unzip_the":"正在解压,请稍候...", - "zip_title":"压缩文件", - "zip_to":"压缩到", - "zip_the":"正在压缩,请稍候...", - "zip_ok":"服务器正在后台压缩文件,请稍候刷新文件列表查看进度!", - "zip_pass_title":"解压密码", - "zip_pass_msg":"不需要请留空", - "mv_the":"正在移动,请稍候...", - "copy_the":"正在复制,请稍候...", - "copy_ok":"已复制", - "mv_ok":"已剪切", - "shell_title":"执行SHELL (仅支持非交互命令)", - "shell_go":"发送", - "shell_ps":"shell命令", - "down_title":"下载文件", - "down_url":"URL地址", - "down_to":"下载到", - "down_save":"保存文件名", - "down_task":"正在添加到队列,请稍候..", - "del_file":"删除文件", - "del_dir":"删除目录", - "del_all_file":"批量删除文件", - "del_all_msg":"您确实要把这些文件放入回收站吗?", - "file_conver_msg":"即将覆盖以下文件,是否确定?" - }, - - "ftp":{ - "empty":"当前没有FTP数据", - "stop_title":"停用这个帐号", - "start_title":"启用这个帐号", - "stop":"已停用", - "start":"已启用", - "copy":"复制密码", - "open_path":"打开目录", - "edit_pass":"改密", - "ps":"备注信息", - "add_title":"添加FTP帐户", - "add_user":"用户名", - "add_user_tips":'请输入FTP用户名', - "add_pass":"密码", - "add_pass_tips":'请输入FTP密码', - "add_pass_rep":"随机密码", - "add_path":"根目录", - "add_path_tips":'请输入或选择FTP目录', - "add_path_rep":'选择文件目录', - "add_path_title":"帐户根目录,会自动创建同名目录", - "add_path_ps":"FTP所指向的目录", - "add_ps":"备注", - "add_ps_title":"备注信息(小于255个字符)", - "del_all":"是否批量删除选中的FTP账号?", - "del_all_err":"以下FTP帐户删除失败:", - "stop_confirm":"您真的要停止{1}的FTP吗?", - "stop_title":"FTP帐户", - "pass_title":"修改FTP用户密码", - "pass_user":"用户名", - "pass_new":"新密码", - "pass_confirm":"您确定要修改该FTP帐户密码吗?", - "port_title":"修改FTP端口", - "port_name":'端口', - "port_tips":'请填写端口', - "del_ftp_title":'删除FTP', - "del_ftp_all_title":'删除选中FTP' - }, - - "database":{ - "empty":"当前没有数据库数据", - "backup_empty":"无备份", - "backup_ok":"有备份", - "copy_pass":"复制密码", - "input":"导入", - "input_title":"导入数据库", - "admin":"管理", - "admin_title":"数据库管理", - "auth":"权限", - "auth_title":"设置访问权限", - "edit_pass":"改密", - "edit_pass_title":"修改数据库密码", - "del_title":"删除数据库", - "ps":"备注信息", - "add_title":"添加数据库", - "add_name":"数据库名", - "add_name_title":"新的数据库名称", - "add_pass":"密码", - "add_pass_title":"数据库密码", - "add_pass_rep":"随机密码", - "add_auth":"访问权限", - "add_auth_local":"本地服务器", - "add_auth_all":"所有人", - "add_auth_ip":"指定IP", - "add_auth_ip_title":"请输允许访问此数据库的IP地址", - "add_ps":"备注", - "edit_root":"root密码", - "user":"用户名", - "edit_pass_new":"新密码", - "edit_pass_new_title":"新的数据库密码", - "edit_pass_confirm":"您确定要修改数据库密码吗?", - "backup_re":"恢复", - "backup_name":"文件名称", - "backup_size":"文件大小", - "backup_time":"备份时间", - "backup_title":"数据库备份详情", - "backup":"备份", - "input_confirm":"数据库将被覆盖,继续吗?", - "input_the":"正在导入,请稍候...", - "backup_the":"正在备份,请稍候...", - "backup_del_title":"删除备份文件", - "backup_del_confirm":"您真的要删除备份文件吗?", - "del_all_title":"批量删除数据库", - "del_all_err":"以下数据库删除失败:", - "input_title_file":"从文件导入数据库", - "input_local_up":"从本地上传", - "input_ps1":"仅支持sql、zip、(tar.gz|gz|tgz)", - "input_ps2":"zip、tar.gz压缩包结构:test.zip或test.tar.gz压缩包内,必需包含test.sql", - "input_ps3":"若文件过大,您还可以使用SFTP工具,将数据库文件上传到/www/backup/database", - "input_up_type":"请上传sql或zip或tar.gz压缩包", - "auth_err":"此数据库不能修改访问权限", - "auth_title":"设置数据库权限", - "auth_name":"访问权限", - "sync_the":"正在同步,请稍候...", - "phpmyadmin_err":"请先安装phpMyAdmin", - "phpmyadmin":"正在打开phpMyAdmin" - }, - - "soft":{ - "php_main1":"php服务", - "php_main2":"上传限制", - "php_main3":"超时限制", - "php_main4":"配置文件", - "php_main5":"安装扩展", - "php_main6":"禁用函数", - "php_main7":"性能调整", - "php_main8":"负载状态", - "php_main9":"Session配置", - "php_menu_ext":"扩展配置", - "admin":"管理", - "off":"关闭", - "on":"开启", - "stop":"停止", - "start":"启动", - "status":"当前状态", - "restart":"重启", - "reload":"重载配置", - "mysql_mem_err":"机器内存小于1G,不建议使用mysql5.5以上版本
          • 如果数据库经常自动停止,请尝试使用linux工具箱增加SWAP或者升级服务器内存", - "concurrency_m":"自定义", - "concurrency":"并发", - "concurrency_type":"并发方案", - "php_fpm_model":"运行模式", - "php_fpm_ps1":"PHP-FPM运行模式", - "php_fpm_ps2":"允许创建的最大子进程数", - "php_fpm_ps3":"起始进程数(服务启动后初始进程数量)", - "php_fpm_ps4":"最小空闲进程数(清理空闲进程后的保留数量)", - "php_fpm_ps5":"最大空闲进程数(当空闲进程达到此值时清理)", - "php_fpm_err1":"max_spare_servers 不能大于 max_children", - "php_fpm_err2":"min_spare_servers 不能大于 start_servers", - "php_fpm_err3":"min_spare_servers 不能大于 max_spare_servers", - "php_fpm_err4":"start_servers 不能大于 max_children", - "php_fpm_err5":"配置值不能小于1", - "phpinfo":"查看phpinfo()", - "get":"正在获取...", - "get_list":"正在获取列表...", - "the_save":"正在保存数据...", - "config_edit":"配置修改", - "edit_empty":"不修改请留空", - "php_upload_size":"上传大小限制不能小于2M", - "mvc_ps":"MVC架构的程序需要开启,如typecho", - "the_install":"正在安装...", - "the_uninstall":"正在卸载...", - "install_the":"安装中...", - "sleep_install":"等待安装...", - "install":"安装", - "uninstall":"卸载", - "php_ext_name":"名称", - "php_ext_type":"类型", - "php_ext_ps":"说明", - "php_ext_status":"状态", - "php_ext_install_confirm":"您真的要安装{1}吗?", - "php_ext_uninstall_confirm":"您真的要卸载{1}吗?", - "add_install":"正在添加到安装器...", - "install_title":"软件安装", - "insatll_type":"安装方式", - "install_version":"安装版本", - "type_title":"选择安装方式", - "err_install1":"请先卸载Apache", - "err_install2":"请先卸载Nginx", - "err_install3":"请先安装php", - "err_install4":"请先安装MySQL", - "setup":"设置", - "apache22":"警告:当前为php-fpm模式,将不被Apache2.2支持,请重新安装此PHP版本!", - "apache24":"警告:当前为php5_module模式,将不被nginx/apache2.4支持,请重新安装此PHP版本!", - "apache22_err":"Apache2.2不支持多PHP版本共存,请先卸载已安装PHP版本,再安装此版本!", - "mysql_f":"注意: 安装新的MySQL版本,会覆盖数据库数据,请先备份数据库!", - "mysql_d":"抱歉,出于安全考虑,请先到[数据库]管理备份数据库,并中删除所有数据库!", - "fun_ps1":"添加要被禁止的函数名,如: exec", - "fun_ps2":"在此处可以禁用指定函数的调用,以增强环境安全性!", - "fun_ps3":"强烈建议禁用如exec,system等危险函数!", - "fun_msg":"您输入的函数已被禁用!", - "nginx_status":"负载状态", - "nginx_version":"切换版本", - "waf_title":"过滤器", - "web_service":"Web服务", - "waf_not":"您当前Nginx版本不支持waf模块,请安装Nginx1.12,重装Nginx不会丢失您的网站配置!", - "waf_edit":"编辑规则", - "waf_up":"上传限制", - "waf_input1":"URL过滤", - "waf_input2":"Cookie过滤", - "waf_input3":"POST过滤", - "waf_input4":"防CC攻击", - "waf_input5":"记录防御信息", - "waf_input6":"CC攻击触发频率(次)", - "waf_input7":"CC攻击触发周期", - "waf_input8":"IP白名单", - "waf_input9":"IP黑名单", - "waf_ip":"IP地址", - "waf_up_title":"文件上传后缀黑名单", - "waf_up_from1":"添加禁止上传的扩展名,如: zip", - "waf_up_from2":"扩展名", - "waf_url_white":"URL白名单", - "waf_index":"警告内容", - "waf_cloud":"从云端更新", - "waf_update":"正在更新规则文件,请稍候..", - "waf_cc_err":"CC防御配置值超出可用值 (频率1-3000|周期1-1800)", - "php_version":"php版本", - "save_path":"存储位置", - "service":"服务", - "safe":"安全设置", - "log":"日志", - "mysql_to_msg":"迁移数据库文件过程中将会停止数据库运行,继续吗?", - "mysql_to_msg1":"正在迁移文件,请稍候...", - "mysql_to":"迁移", - "mysql_log_close":"清空", - "mysql_log_bin":"二进制日志", - "mysql_log_err":"错误日志", - "mysql_log_ps1":"当前没有日志内容!", - "mysql_port_title":"修改数据库端口可能会导致您的站点无法连接数据库,确定要修改吗?", - "select_version":"选择版本", - "version_to":"切换", - "pma_port":"访问端口", - "pma_port_title":"phpmyadmin访问端口", - "pma_pass":"密码访问", - "pma_user":"授权账号", - "pma_pass1":"访问密码", - "pma_pass2":"重复密码", - "pma_ps":"为phpmyadmin增加一道访问安全锁", - "pma_pass_close":"您真的要关闭访问认证吗?", - "pma_pass_empty":"授权用户或密码不能为空!", - "menu_temp":"正在获取模板...", - "menu_phpsafe":"php守护已启动,无需设置", - "qiniu_lise":"正在从云端获取...", - "qiniu_file_title":"文件列表", - "qiniu_th1":"名称", - "qiniu_th2":"类型", - "qiniu_th3":"大小", - "qiniu_th4":"更新时间", - "mysql_del_err":"抱歉,为安全考虑,请先到[数据库]管理备份数据库并中删除所有数据库!", - "uninstall_confirm":"您真的要卸载[{1}-{2}]吗?", - "from_err":"表单错误!", - "lib_the":"正在提交配置,请稍候...", - "lib_config":"配置", - "lib_insatll_confirm":"您真的要安装[{1}]插件吗?", - "lib_uninsatll_confirm":"您真的要卸载[{1}]插件吗?", - "lib_install":"安装插件", - "lib_uninstall":"卸载插件", - "lib_install_the":"正在安装,请稍候...", - "lib_uninstall_the":"正在卸载,请稍候...", - "mysql_set_msg":"优化方案", - "mysql_set_select":"请选择", - "mysql_set_maxmem":"最大使用内存", - "mysql_set_key_buffer_size":"用于索引的缓冲区大小", - "mysql_set_query_cache_size":"查询缓存,不开启请设为0", - "mysql_set_tmp_table_size":"临时表缓存大小", - "mysql_set_innodb_buffer_pool_size":"Innodb缓冲区大小", - "mysql_set_innodb_log_buffer_size":"Innodb日志缓冲区大小", - "mysql_set_sort_buffer_size":"每个线程排序的缓冲大小", - "mysql_set_read_buffer_size":"读入缓冲区大小", - "mysql_set_read_rnd_buffer_size":"随机读取缓冲区大小", - "mysql_set_join_buffer_size":"关联表缓存大小", - "mysql_set_thread_stack":"每个线程的堆栈大小", - "mysql_set_binlog_cache_size":"二进制日志缓存大小(4096的倍数)", - "mysql_set_thread_cache_size":"线程池大小", - "mysql_set_table_open_cache":"表缓存(最大不要超过2048)", - "mysql_set_max_connections":"最大连接数", - "mysql_set_restart":"重启数据库", - "mysql_set_conn":"连接数", - "mysql_set_err":"错误,内存分配过高!

            物理内存: {1}MB
            最大使用内存: {2}MB
            可能造成的后果: 导致数据库不稳定,甚至无法启动MySQLd服务!

            ", - "mysql_status_title1":"启动时间", - "mysql_status_title2":"总连接次数", - "mysql_status_title3":"发送", - "mysql_status_title4":"接收", - "mysql_status_title5":"每秒查询", - "mysql_status_title6":"每秒事务", - "mysql_status_title7":"File", - "mysql_status_title8":"Position", - "mysql_status_title9":"活动/峰值连接数", - "mysql_status_title10":"线程缓存命中率", - "mysql_status_title11":"索引命中率", - "mysql_status_title12":"Innodb索引命中率", - "mysql_status_title13":"查询缓存命中率", - "mysql_status_title14":"创建临时表到磁盘", - "mysql_status_title15":"已打开的表", - "mysql_status_title16":"没有使用索引的量", - "mysql_status_title17":"没有索引的JOIN量", - "mysql_status_title18":"排序后的合并次数", - "mysql_status_title19":"锁表次数", - "mysql_status_ps1":"若值过大,增加max_connections", - "mysql_status_ps2":"若过低,增加thread_cache_size", - "mysql_status_ps3":"若过低,增加key_buffer_size", - "mysql_status_ps4":"若过低,增加innodb_buffer_pool_size", - "mysql_status_ps5":"若过低,增加query_cache_size", - "mysql_status_ps6":"若过大,尝试增加tmp_table_size", - "mysql_status_ps7":"若过大,增加table_cache_size", - "mysql_status_ps8":"若不为0,请检查数据表的索引是否合理", - "mysql_status_ps9":"若不为0,请检查数据表的索引是否合理", - "mysql_status_ps10":"若值过大,增加sort_buffer_size", - "mysql_status_ps11":"若值过大,请考虑增加您的数据库性能" - }, - - "site":{ - "running":"正在运行", - "running_title":"停用这个站点", - "running_text":"运行中", - "stopped":"已停止", - "stopped_title":"启用这个站点", - "backup_yes":"有备份", - "backup_no":"无备份", - "web_end_time":"永久", - "open_path_txt":"打开目录", - "set":"设置", - "site_del_title":"删除站点", - "site_no_data":"当前没有站点数据", - "site_null":"null", - "site_bak":"备注信息", - "saving_txt":"正在保存...", - "domain_err_txt":"域名格式不正确,请重新输入!", - "ftp":"FTP账号资料", - "ftp_tips":"只要将网站上传至以上FTP即可访问!", - "user":"用户", - "password":"密码", - "database_txt":"数据库账号资料", - "database":"数据库", - "database_name":"数据库名", - "database_set":"数据库设置", - "success_txt":"成功创建站点", - "php_ver":"PHP版本", - "site_add":"添加网站", - "domain":"域名", - "port":"端口", - "note":"备注", - "note_ph":"网站备注", - "web_root_dir":"网站根目录", - "web_dir":"网站目录", - "root_dir":"根目录", - "yes":"创建", - "no":"不创建", - "ftp_set":"FTP设置", - "ftp_help":"创建站点的同时,为站点创建一个对应FTP帐户,并且FTP目录指向站点所在目录。", - "database_help":"创建站点的同时,为站点创建一个对应的数据库帐户,方便不同站点使用不同数据库。", - "domain_help":"每行填写一个域名,默认为80端口
            泛解析添加方法 *.domain.com
            如另加端口格式为 www.domain.com:88", - "domain_len_msg":"不要超出20个字符", - "anti_XSS_attack":"防跨站攻击", - "write_access_log":"写访问日志", - "run_dir":"运行目录", - "site_help_1":"部分程序需要指定二级目录作为运行目录,如ThinkPHP5,Laravel", - "site_help_2":"选择您的运行目录,点保存即可", - "default_doc_help":"默认文档,每行一个,优先级由上至下。", - "site_stop_txt":"站点停用后将无法访问,您真的要停用这个站点吗?", - "site_start_txt":"即将启动站点,您真的要启用这个站点吗?", - "site_del_info":"是否要删除同名的FTP、数据库、根目录", - "all_del_info":"同时删除站点根目录", - "all_del_site":"批量删除站点", - "del_err":"以下站点删除失败", - "click_access":"点击访问", - "operate":"操作", - "domain_man":"域名管理", - "unresolved":"未解析", - "parsed":"已解析", - "this_domain_un":"该域名未解析", - "analytic_ip":"域名解析IP为", - "current_server_ip":"当前服务器IP", - "parsed_info":"仅供参考,使用CDN的用户请无视", - "domain_empty":"域名不能为空!", - "domain_last_cannot":"最后一个域名不能删除", - "domain_del_confirm":"您真的要从站点中删除这个域名吗?", - "webback_del_confirm":"真的要删除备份包吗?", - "del_bak_file":"删除备份文件", - "filename":"文件名称", - "filesize":"文件大小", - "backuptime":"打包时间", - "backup_title":"打包备份", - "public_set":"全局设置", - "local_site":"本站", - "setindex":"设置网站默认文档", - "default_doc":"默认文档", - "default_site":"默认站点", - "default_site_yes":"设置默认站点", - "default_site_no":"未设置默认站点", - "default_site_help_1":"设置默认站点后,所有未绑定的域名和IP都被定向到默认站点", - "default_site_help_2":"可有效防止恶意解析", - "site_menu_1":"子目录绑定", - "site_menu_2":"网站目录", - "site_menu_3":"流量限制", - "site_menu_4":"伪静态", - "site_menu_5":"默认文档", - "site_menu_6":"配置文件", - "site_menu_7":"SSL", - "site_menu_8":"PHP版本", - "site_menu_9":"Tomcat", - "site_menu_10":"301重定向", - "site_menu_11":"反向代理", - "site_menu_12":"防盗链", - "website_change":"站点修改", - "addtime":"添加时间", - "the_msg":"正在提交任务...", - "start_scan":"开始扫描", - "update_lib":"更新特征库", - "scanned":"已扫描", - "risk_quantity":"风险数量", - "danger_fun":"危险函数", - "danger_fun_no":"未禁用危险函数", - "danger":"危险", - "file":"文件", - "ssh_port":"SSH端口", - "high_risk":"高危", - "sshd_tampering":"sshd文件被篡改", - "xss_attack":"跨站攻击", - "site_xss_attack":"站点未开启防跨站攻击!", - "mod_time":"修改时间", - "code":"代码", - "behavior":"行为", - "risk":"风险", - "details":"详情", - "to_update":"正在更新,请稍候...", - "limit_net_1":"论坛/博客", - "limit_net_2":"图片站", - "limit_net_3":"下载站", - "limit_net_4":"商城", - "limit_net_5":"门户", - "limit_net_6":"企业站", - "limit_net_7":"视频站", - "limit_net_8":"启用流量控制", - "limit_net_9":"限制方案", - "limit_net_10":"并发限制", - "limit_net_11":"限制当前站点最大并发数", - "limit_net_12":"单IP限制", - "limit_net_13":"限制单个IP访问最大并发数", - "limit_net_14":"流量限制", - "limit_net_15":"限制每个请求的流量上限(单位:KB)", - "subdirectories":"子目录", - "url_rewrite_alter":"你真的要为这个子目录创建独立的伪静态规则吗?", - "rule_cov_tool":"规则转换工具", - "a_c_n":"Apache转Nginx", - "save_as_template":"另存为模板", - "url_rw_help_1":"请选择您的应用,若设置伪静态后,网站无法正常访问,请尝试设置回default", - "url_rw_help_2":"您可以对伪静态规则进行修改,修改完后保存即可。", - "config_url":"配置伪静态规则", - "d_s_empty":"域名和子目录名称不能为空", - "s_bin_del":"您真的要删除这个子目录绑定吗?", - "proxy_url":"目标URL", - "proxy_url_info":"请填写完整URL,例:http://www.test.com", - "proxy_domain":"发送域名", - "proxy_domian_info":"发送到目标服务器的域名,例:www.test.com", - "proxy_cache":"开启缓存", - "con_rep":"内容替换", - "con_rep_info":"被替换的文本,可留空", - "to_con":"替换为,可留空", - "proxy_enable":"启用反向代理", - "proxy_help_1":"目标Url必需是可以访问的,否则将直接502", - "proxy_help_2":"默认本站点所有域名访问将被传递到目标服务器,请确保目标服务器已绑定域名", - "proxy_help_3":"若您是被动代理,请在发送域名处填写上目标站点的域名", - "proxy_help_4":"若您不需要内容替换功能,请直接留空", - "proxy_help_5":"可通过purge清理指定URL的缓存,示例:http://test.com/purge/test.png", - "access_domain":"访问域名", - "all_site":"整站", - "target_url":"目标URL", - "eg_url":"请填写完整URL,例:http://www.test.com", - "enable_301":"启用301", - "to301_help_1":"选择[整站]时请不要将目标URL设为同一站点下的域名.", - "to301_help_2":"取消301重定向后,需清空浏览器缓存才能看到生效结果.", - "bt_ssl":"宝塔SSL", - "lets_ssl":"Let\'s Encrypt免费证书", - "other":"其它", - "other_ssl":"其他证书", - "use_other_ssl":"使用其他证书", - "ssl_help_1":"本站点未设置SSL,如需设置SSL,请选择切换类目申请开启SSL

            关闭SSL以后,请务必清除浏览器缓存再访问站点

            ", - "ssl_help_2":"已为您自动生成Let\'s Encrypt免费证书;", - "ssl_help_3":"如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容,然后保存即可。", - "ssl_key":"密钥(KEY)", - "ssl_crt":"证书(PEM格式)", - "ssl_close":"关闭SSL", - "bt_bind_no":"未绑定宝塔账号,请注册绑定,绑定宝塔账号(非论坛账号)可实现一键部署SSL", - "bt_user":"宝塔账号", - "login":"登录", - "bt_reg":"注册宝塔账号", - "bt_ssl_help_1":"宝塔SSL证书为亚洲诚信证书,需要实名认证才能申请使用", - "bt_ssl_help_2":"已有宝塔账号请登录绑定", - "bt_ssl_help_3":"宝塔SSL申请的是TrustAsia DV SSL CA - G5 原价:1900元/1年,宝塔用户免费!", - "bt_ssl_help_4":"一年满期后免费颁发。", - "btapply":"申请", - "endtime":"到期时间", - "status":"状态", - "bt_ssl_help_5":"申请之前,请确保域名已解析,如未解析会导致审核失败", - "bt_ssl_help_6":"宝塔SSL申请的是免费版TrustAsia DV SSL CA - G5证书,仅支持单个域名申请", - "bt_ssl_help_7":"有效期1年,不支持续签,到期后需要重新申请", - "bt_ssl_help_8":"Let\'s Encrypt免费证书,有效期3个月,支持多域名。默认会自动续签", - "bt_ssl_help_9":"若您的站点使用了CDN或301重定向会导致续签失败", - "bt_ssl_help_10":"粘贴您的*.key以及*.pem内容,然后保存即可[帮助]。", - "phone_input":"请输入手机号码", - "ssl_apply_1":"正在提交订单,请稍后..", - "ssl_apply_2":"正在校验域名,请稍后..", - "ssl_apply_3":"正在部署证书,请稍后..", - "ssl_apply_4":"正在更新证书,请稍后..", - "lets_help_1":"不用实名认证,浏览器兼容较低,申请存在一定失败率", - "lets_help_2":"let's Encrypt证书有效期为3个月", - "lets_help_3":"3个月有效期后自动续签", - "get_ssl_list":"正在获取证书列表,请稍后..", - "order_success":"订单完成", - "deploy":"部署", - "deployed":"已部署", - "domain_wait":"待域名确认", - "domain_validate":"验证域名", - "domain_check":"请检查域名是否解析到本服务器", - "update_ssl":"更新证书", - "get_ssl_err":"证书获取失败", - "get_ssl_err1":"证书获取失败,返回如下错误信息", - "err_type":"错误类型", - "ssl_close_info":"已关闭SSL,请务必清除浏览器缓存后再访问站点!", - "switch":"切换", - "switch_php_help1":"请根据您的程序需求选择版本", - "switch_php_help2":"若非必要,请尽量不要使用PHP5.2,这会降低您的服务器安全性;", - "switch_php_help3":"PHP7不支持mysql扩展,默认安装mysqli以及mysql-pdo。", - "enable_nodejs":"启用Node.js", - "nodejs_help1":"当前版本为Node.js", - "nodejs_help2":"Node.js可以与PHP共存,但无法与Tomcat共存;", - "nodejs_help3":"若您的Node.js应用中有php脚本,访问时请添加.php扩展名", - "a_n_n":"apache2.2暂不支持Tomcat!", - "enable_tomcat":"启用Tomcat", - "tomcat_help1":"当前版本为Tomcat", - "tomcat_help2":"若您需要其它版本,请到软件管理 - 所有软件 中切换;", - "tomcat_help3":"部署顺序: 安装Tomcat >> 创建站点 >> 上传并配置项目 >> 启用Tomcat", - "tomcat_help4":"若您的tomcat应用中有php脚本,访问时请添加.php扩展名", - "tomcat_help5":"开启成功后,大概需要1-5分钟时间生效!", - "tomcat_err_msg":"您没有安装Tomcat,请先安装!", - "tomcat_err_msg1":"请先安装Tomcat!", - "web_config_help":"此处为站点主配置文件,若您不了解配置规则,请勿随意修改.", - "rewritename":"0.当前", - "template_empty":"模板名称不能为空", - "save_rewrite_temp":"保存为Rewrite模板", - "template_name":"模板名称", - "change_defalut_page":"修改默认页", - "err_404":"404错误页", - "empty_page":"空白页", - "default_page_stop":"默认站点停止页" - }, - - "public":{ - "success":"操作成功!", - "error":"操作失败!", - "add_success":"添加成功!", - "del_success":"删除成功", - "save":"保存", - "edit":"修改", - "edit_ok":"修改成功!", - "edit_err":"修改失败!", - "know":"知道了", - "close":"关闭", - "cancel":"取消", - "ok":"确定", - "empty":"清空", - "submit":"提交", - "exec":"执行", - "script":"脚本", - "log":"日志", - "slow_log":"慢日志", - "del":"删除", - "add":"添加", - "the_get":"正在获取,请稍候...", - "fresh":"刷新", - "config":"正在设置...", - "config_ok":"设置成功!", - "the":"正在处理,请稍候...", - "user":"帐号", - "pass":"密码", - "read":"正在读取,请稍候...", - "pre":"百分比", - "num":"次数", - "byte":"字节", - "input_err":"表单不合法,请重新输入!", - "the_add":"正在添加,请稍候...", - "the_del":"正在删除,请稍候...", - "msg":"提示", - "list_empty":"列表为空!", - "all":"所有", - "upload":"上传", - "download":"下载", - "action":"操作", - "warning":"警告", - "return":"返回", - "help":"帮助", - "list":"列表", - "off":"关闭", - "on":"开启" - } -} diff --git a/class/ajax.py b/class/ajax.py index 6ffbb287..385a9aea 100644 --- a/class/ajax.py +++ b/class/ajax.py @@ -666,9 +666,6 @@ def get_phpmyadmin_conf(self): else: conf_file = "/www/server/panel/vhost/apache/phpmyadmin.conf" rep = "Listen\s*(\d+)" - # else: - # conf_file = "/www/server/panel/vhost/openlitespeed/listen/888.conf" - # rep = "address\s+\*:(\d+)" return {"conf_file":conf_file,"rep":rep} # 设置phpmyadmin路径 @@ -1063,15 +1060,29 @@ def GetRedisStatus(self,get): #取PHP-FPM日志 def GetFpmLogs(self,get): - path = '/www/server/php/' + get.version + '/var/log/php-fpm.log' - if not os.path.exists(path): return public.returnMsg(False,'AJAX_LOG_FILR_NOT_EXISTS') - return public.returnMsg(True,public.GetNumLines(path,1000)) + import re + fpm_path = '/www/server/php/' + get.version + '/etc/php-fpm.conf' + if not os.path.exists(fpm_path): return public.returnMsg(False,'AJAX_LOG_FILR_NOT_EXISTS') + fpm_conf = public.readFile(fpm_path) + log_tmp = re.findall(r"error_log\s*=\s*(.+)",fpm_conf) + if not log_tmp: return public.returnMsg(False,'AJAX_LOG_FILR_NOT_EXISTS') + log_file = log_tmp[0].strip() + if log_file.find('var/log') == 0: + log_file = '/www/server/php/' +get.version + '/'+ log_file + return public.returnMsg(True,public.GetNumLines(log_file,1000)) #取PHP慢日志 def GetFpmSlowLogs(self,get): - path = '/www/server/php/' + get.version + '/var/log/slow.log' - if not os.path.exists(path): return public.returnMsg(False,'AJAX_LOG_FILR_NOT_EXISTS') - return public.returnMsg(True,public.GetNumLines(path,1000)) + import re + fpm_path = '/www/server/php/' + get.version + '/etc/php-fpm.conf' + if not os.path.exists(fpm_path): return public.returnMsg(False,'AJAX_LOG_FILR_NOT_EXISTS') + fpm_conf = public.readFile(fpm_path) + log_tmp = re.findall(r"slowlog\s*=\s*(.+)",fpm_conf) + if not log_tmp: return public.returnMsg(False,'AJAX_LOG_FILR_NOT_EXISTS') + log_file = log_tmp[0].strip() + if log_file.find('var/log') == 0: + log_file = '/www/server/php/' +get.version + '/'+ log_file + return public.returnMsg(True,public.GetNumLines(log_file,1000)) #取指定日志 def GetOpeLogs(self,get): diff --git a/class/common.py b/class/common.py index 91487102..888c3922 100644 --- a/class/common.py +++ b/class/common.py @@ -34,7 +34,7 @@ def init(self): ua = ua.lower() if ua.find('spider') != -1 or ua.find('bot') != -1: return redirect('https://www.google.com') - g.version = '6.6.9' + g.version = '6.7.0' g.title = public.GetConfigValue('title') g.uri = request.path if not os.path.exists('data/debug.pl'): diff --git a/class/db.py b/class/db.py index 3a333b3f..65a1c83b 100644 --- a/class/db.py +++ b/class/db.py @@ -103,7 +103,7 @@ def select(self): i=0 tmp1 = {} for key in fields: - tmp1[key] = row[i] + tmp1[key.strip('`')] = row[i] i += 1 tmp.append(tmp1) del(tmp1) @@ -127,7 +127,7 @@ def __format_field(self,field): import re fields = [] for key in field: - s_as = re.search('\s+as\s+',key,flags=re.IGNORECASE) + s_as = re.search(r'\s+as\s+',key,flags=re.IGNORECASE) if s_as: as_tip = s_as.group() key = key.split(as_tip)[1] @@ -139,13 +139,13 @@ def __get_columns(self): tmp_cols = self.query('PRAGMA table_info('+self.__DB_TABLE+')',()) cols = [] for col in tmp_cols: - if len(col) > 2: cols.append(col[1]) + if len(col) > 2: cols.append('`' + col[1] + '`') if len(cols) > 0: self.__OPT_FIELD = ','.join(cols) def getField(self,keyName): #取回指定字段 try: - result = self.field(keyName).select(); + result = self.field(keyName).select() if len(result) != 0: return result[0][keyName] return result diff --git a/class/files.py b/class/files.py index 273bfe45..7fee576e 100644 --- a/class/files.py +++ b/class/files.py @@ -353,7 +353,7 @@ def GetDir(self, get): size = str(stat.st_size) if os.path.isdir(filePath): dirnames.append(filename+';'+size+';' + - mtime+';'+accept+';'+user+';'+link + ';0;' + self.is_composer_json(filePath)) + mtime+';'+accept+';'+user+';'+link + ';' +self.get_download_id(filePath)+';'+ self.is_composer_json(filePath)) else: filenames.append(filename+';'+size+';'+mtime+';'+accept+';'+user+';'+link+';'+self.get_download_id(filePath)) n += 1 @@ -502,6 +502,27 @@ def __get_stat(self, filename, path=None): filename = filename.replace(tmp_path, '') return filename + ';' + size + ';' + mtime + ';' + accept + ';' + user + ';' + link+';'+ down_url + #获取指定目录下的所有视频或音频文件 + def get_videos(self,args): + path = args.path.strip() + v_data = [] + if not os.path.exists(path): return v_data + import mimetypes + for fname in os.listdir(path): + try: + filename = os.path.join(path,fname) + if not os.path.exists(filename): continue + if not os.path.isfile(filename): continue + v_tmp = {} + v_tmp['name'] = fname + v_tmp['type'] = mimetypes.guess_type(filename)[0] + v_tmp['size'] = os.path.getsize(filename) + if not v_tmp['type'].split('/')[0] in ['video']: + continue + v_data.append(v_tmp) + except:continue + return sorted(v_data,key=lambda x:x['name']) + # 计算文件数量 def GetFilesCount(self, path, search): if os.path.isfile(path): @@ -1814,19 +1835,17 @@ def modify_download_url(self, get): # 生成下载地址 def create_download_url(self, get): if not os.path.exists(get.filename): - return public.returnMsg(False, 'The specified file does not exist!') - if not os.path.isfile(get.filename): - return public.returnMsg(False, 'Cannot generate download address for directory!') + return public.returnMsg(False,'The specified file does not exist!') my_table = 'download_token' mtime = int(time.time()) pdata = { - "filename": get.filename, # 文件名 - "token": public.GetRandomString(12), # 12位随机密钥,用于URL - "expire": mtime + (int(get.expire) * 3600), # 过期时间 - "ps": get.ps, # 备注 - "total": 0, # 下载计数 - "password": get.password, # 提取密码 - "addtime": mtime # 添加时间 + "filename": get.filename, #文件名 + "token": public.GetRandomString(12), #12位随机密钥,用于URL + "expire": mtime + (int(get.expire) * 3600), #过期时间 + "ps":get.ps, #备注 + "total":0, #下载计数 + "password":str(get.password), #提取密码 + "addtime": mtime #添加时间 } # 更新 or 插入 token = public.M(my_table).where('filename=?', (get.filename,)).getField('token') diff --git a/class/jobs.py b/class/jobs.py index ce9d796a..88929074 100644 --- a/class/jobs.py +++ b/class/jobs.py @@ -46,6 +46,18 @@ def control_init(): `password` REAL, `ps` REAL, `addtime` INTEGER +)''' + sql.execute(csql,()) + + + if not sql.table('sqlite_master').where('type=? AND name=?', ('table', 'messages')).count(): + csql = '''CREATE TABLE IF NOT EXISTS `messages` ( +`id` INTEGER PRIMARY KEY AUTOINCREMENT, +`level` TEXT, +`msg` TEXT, +`state` INTEGER DEFAULT 0, +`expire` INTEGER, +`addtime` INTEGER )''' sql.execute(csql,()) diff --git a/class/panelBackup.py b/class/panelBackup.py index 0937a09a..570cfa49 100644 --- a/class/panelBackup.py +++ b/class/panelBackup.py @@ -19,7 +19,7 @@ os.chdir('/www/server/panel') sys.path.insert(0,'class/') import public -_VERSION = 1.3 +_VERSION = 1.4 class backup: _path = None @@ -28,8 +28,7 @@ class backup: _inode_min = 10 _db_mysql = None _cloud = None - _local_backdir = None - _is_save_local = not os.path.exists('data/is_save_local_backup.pl') + _is_save_local = os.path.exists('data/is_save_local_backup.pl') def __init__(self,cloud_object = None): ''' @name 数据备份对象 @@ -196,7 +195,7 @@ def delete_old(self,backups,save,data_type = None): num = len(backups) - int(save) if num > 0: self._get_local_backdir() - self.echo_info('-' * 90) + self.echo_info('-' * 88) for backup in backups: #处理目录备份到远程的情况 if backup['filename'].find('|') != -1: @@ -305,7 +304,7 @@ def backup_site(self,siteName,save = 3 ,exclude = []): filename = dfile if self._cloud: - filename = self._cloud._name + filename = dfile + '|' + self._cloud._name + '|' + fname pdata = { 'type': 0, @@ -326,7 +325,7 @@ def backup_site(self,siteName,save = 3 ,exclude = []): if not self._cloud: backups = public.M('backup').where("type=? and pid=? and filename LIKE '%/%'",('0',pid)).field('id,name,filename').select() else: - backups = public.M('backup').where('type=? and pid=? and filename=?',('0',pid,filename)).field('id,name,filename').select() + backups = public.M('backup').where('type=? and pid=? and filename LIKE "%{}%"'.format(self._cloud._name),('0',pid)).field('id,name,filename').select() self.delete_old(backups,save,'site') self.echo_end() @@ -425,7 +424,7 @@ def backup_database(self,db_name,dfile = None,save=3): filename = dfile if self._cloud: - filename = self._cloud._name + filename = dfile + '|' + self._cloud._name + '|' + fname self.echo_info("Database has been backed up to: {}".format(dfile)) if os.path.exists(self._err_log): os.remove(self._err_log) @@ -452,9 +451,7 @@ def backup_database(self,db_name,dfile = None,save=3): if not self._cloud: backups = public.M('backup').where("type=? and pid=? and filename LIKE '%/%'",('1',pid)).field('id,name,filename').select() else: - backups = public.M('backup').where('type=? and pid=? and filename=?',('1',pid,filename)).field('id,name,filename').select() - - self.echo_info(str(backups)) + backups = public.M('backup').where('type=? and pid=? and filename LIKE "%{}%"'.format(self._cloud._name),('1',pid)).field('id,name,filename').select() self.delete_old(backups,save,'database') self.echo_end() return dfile diff --git a/class/panelMessage.py b/class/panelMessage.py new file mode 100644 index 00000000..882a7d28 --- /dev/null +++ b/class/panelMessage.py @@ -0,0 +1,134 @@ +#coding: utf-8 +# +------------------------------------------------------------------- +# | 宝塔Linux面板 +# +------------------------------------------------------------------- +# | Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved. +# +------------------------------------------------------------------- +# | Author: 黄文良 <2020-05-18> +# +------------------------------------------------------------------- + +# +------------------------------------------------------------------- +# | 消息提醒 +# +------------------------------------------------------------------- +import os,sys,time +import public +class panelMessage: + + + def __init__(self): + pass + + def get_messages(self,args = None): + ''' + @name 获取消息列表 + @author 黄文良 <2020-05-18> + @return list + ''' + data = public.M('messages').where('state=? and expire>?',(1,int(time.time()))).order("id desc").select() + return data + + def get_messages_all(self,args = None): + ''' + @name 获取所有消息列表 + @author 黄文良 <2020-05-18> + @return list + ''' + data = public.M('messages').order("id desc").select() + return data + + def get_message_find(self,args = None,id = None): + ''' + @name 获取指定消息 + @author 黄文良 <2020-05-18> + @param args dict_obj{ + id: 消息标识 + } + @return dict + ''' + if args: + id = int(args.id) + data = public.M('messages').where('id=?',id).find() + return data + + + def create_message(self,args = None,level=None,msg=None,expire=None): + ''' + @name 创建新的消息 + @author 黄文良 <2020-05-18> + @param args dict_obj{ + level: 消息级别(info/warning/danger/error), + msg: 消息内容 + expire: 过期时间 + } + @return dict + ''' + if args: + level = args.level + msg = args.msg + expire = args.expire + pdata = { + "level":level, + "msg":msg, + "state":1, + "expire":int(time.time()) + (int(expire) * 86400), + "addtime": int(time.time()) + } + + public.M('messages').insert(pdata) + return public.returnMsg(True,'Created successfully!') + + def status_message(self,args = None,id = None,state = None): + ''' + @name 设置消息状态 + @author 黄文良 <2020-05-18> + @param args dict_obj{ + id: 消息标识, + state: 消息状态(0.已忽略, 1.正常) + } + @return dict + ''' + if args: + id = int(args.id) + state = int(args.state) + public.M('messages').where('id=?',id).setField('state',state) + return public.returnMsg(True,'Set up successfully!') + + + def remove_message(self,args = None,id = None): + ''' + @name 删除指定消息 + @author 黄文良 <2020-05-18> + @param args dict_obj{ + id: 消息标识 + } + @return dict + ''' + if args: + id = int(args.id) + public.M('messages').where('id=?',id).delete() + return public.returnMsg(True,'Successfully deleted!') + + def remove_message_level(self,level): + ''' + @name 删除指定消息 + @author 黄文良 <2020-05-18> + @param level string(指定级别或标识) + @return bool + ''' + public.M('messages').where('(level=? or level=? or level=? or level=?) and state=?',(level,level+'15',level+'7',level+'3',1)).delete() + return True + + def is_level(self,level): + ''' + @name 指定消息是否忽略 + @author 黄文良 <2020-05-18> + @param level string(指定级别或标识) + @return bool + ''' + if public.M('messages').where('level=? and state=?',(level,0)).count(): + return False + else: + return True + + + diff --git a/class/panelPlugin.py b/class/panelPlugin.py index 3a71de32..91b8ddd5 100644 --- a/class/panelPlugin.py +++ b/class/panelPlugin.py @@ -82,6 +82,7 @@ def check_dependnet(self,dependnet): names = dep.split('|') for name in names: pluginInfo = self.get_soft_find(name) + if not pluginInfo: return True if pluginInfo['setup'] == True: status = True break @@ -330,6 +331,7 @@ def get_cloud_list(self,get=None): if softList: public.writeFile(lcoalTmp,json.dumps(softList)) public.ExecShell('rm -f /tmp/bmac_*') self.getCloudPHPExt(get) + self.expire_msg(softList) try: public.writeFile("/tmp/" + cache.get('p_token'),str(softList['pro'])) except:pass @@ -353,6 +355,78 @@ def get_cloud_list(self,get=None): softList['list'] = tmpList return softList + #取提醒标记 + def get_level_msg(self,level,s_time,endtime): + ''' + level 提醒标记 + s_time 当前时间戳 + endtime 到期时间戳 + ''' + expire_day = (endtime - s_time) / 86400 + if expire_day < 15 and expire_day > 7: + level = level + '15' + elif expire_day < 7 and expire_day > 3: + level = level + '7' + elif expire_day < 3 and expire_day > 0: + level = level + '3' + return level,expire_day + + #添加到期提醒 + def add_expire_msg(self,title,level,name,expire_day,pid,endtime): + ''' + title 软件标题 + level 提醒标记 + name 软件名称 + expire_day 剩余天数 + ''' + import panelMessage #引用消息提醒模块 + pm = panelMessage.panelMessage() + pm.remove_message_level(level) #删除旧的提醒 + if expire_day > 15: return False + if pm.is_level(level): #是否忽略 + if level != name: #到期还是即将到期 + msg_last = '您的【{}】授权还有{}天到期'.format(title,int(expire_day)) + else: + msg_last = '您的【{}】授权已到期'.format(title) + pl_msg = 'true' + if name in ['pro','ltd']: + pl_msg = 'false' + renew_msg = '立即续费' % (title,pid,name,pl_msg,endtime) + pm.create_message(level=level,expire=7,msg="{},为了不影响您正常使用【{}】功能,请及时续费,{}".format(msg_last,title,renew_msg)) + return True + return False + + #到期提醒 + def expire_msg(self,data): + ''' + data 插件列表 + ''' + s_time = time.time() + is_plugin = True + #企业版到期提醒 + if not data['ltd'] in [-1]: + level,expire_day = self.get_level_msg('ltd',s_time,data['ltd']) + self.add_expire_msg('企业版',level,'ltd',expire_day,100000032,data['ltd']) + return True + + #专业版到期提醒 + if not data['pro'] in [-1,0]: + level,expire_day = self.get_level_msg('pro',s_time,data['pro']) + self.add_expire_msg('专业版',level,'pro',expire_day,100000011,data['pro']) + is_plugin = False + + #单独购买的插件到期提醒 + for p in data['list']: + #跳过非企业版或专业版插件 + if not p['type'] in [8,12]: continue + #已经是专业版的情况下跳过专业版插件 + if not is_plugin and p['type'] == 8: continue + if not p['endtime'] in [-1,0]: + level,expire_day = self.get_level_msg(p['name'],s_time,p['endtime']) + self.add_expire_msg(p['title'],level,p['name'],expire_day,p['pid'],p['endtime']) + return True + + #提交用户评分 def set_score(self,args): try: @@ -1484,7 +1558,7 @@ def getPHPMyAdminStatus(self): phpport = '888' if os.path.exists(configFile): conf = public.readFile(configFile) - rep = "listen\s+([0-9]+)\s*;" + rep = r"listen\s+([0-9]+)\s*;" rtmp = re.search(rep,conf) if rtmp: phpport = rtmp.groups()[0] @@ -1494,23 +1568,23 @@ def getPHPMyAdminStatus(self): configFile = setupPath + '/nginx/conf/enable-php.conf' if not os.path.exists(configFile): public.writeFile(configFile,public.readFile(setupPath + '/nginx/conf/enable-php-54.conf')) conf = public.readFile(configFile) - rep = "php-cgi-([0-9]+)\.sock" + rep = r"php-cgi-([0-9]+)\.sock" rtmp = re.search(rep,conf) if rtmp: phpversion = rtmp.groups()[0] else: - rep = "php-cgi.*\.sock" + rep = r"php-cgi.*\.sock" public.writeFile(configFile,conf) phpversion = '54' configFile = setupPath + '/apache/conf/extra/httpd-vhosts.conf' if os.path.exists(configFile): conf = public.readFile(configFile) - rep = "php-cgi-([0-9]+)\.sock" + rep = r"php-cgi-([0-9]+)\.sock" rtmp = re.search(rep,conf) if rtmp: phpversion = rtmp.groups()[0] - rep = "Listen\s+([0-9]+)\s*\n" + rep = r"Listen\s+([0-9]+)\s*\n" rtmp = re.search(rep,conf) if rtmp: phpport = rtmp.groups()[0] @@ -1572,20 +1646,20 @@ def GetPHPConfig(self,version): phpfpm = public.readFile(file) data = {} try: - rep = "upload_max_filesize\s*=\s*([0-9]+)M" + rep = r"upload_max_filesize\s*=\s*([0-9]+)M" tmp = re.search(rep,phpini).groups() data['max'] = tmp[0] except: data['max'] = '50' try: - rep = "request_terminate_timeout\s*=\s*([0-9]+)\n" + rep = r"request_terminate_timeout\s*=\s*([0-9]+)\n" tmp = re.search(rep,phpfpm).groups() data['maxTime'] = tmp[0] except: data['maxTime'] = 0 try: - rep = u"\n;*\s*cgi\.fix_pathinfo\s*=\s*([0-9]+)\s*\n" + rep = r"\n;*\s*cgi\.fix_pathinfo\s*=\s*([0-9]+)\s*\n" tmp = re.search(rep,phpini).groups() if tmp[0] == '1': diff --git a/class/panelSite.py b/class/panelSite.py index efc16f14..56f84896 100644 --- a/class/panelSite.py +++ b/class/panelSite.py @@ -226,6 +226,8 @@ def nginxAdd(self): urlrewriteFile = urlrewritePath+'/'+self.siteName+'.conf' if not os.path.exists(urlrewritePath): os.makedirs(urlrewritePath) open(urlrewriteFile,'w+').close() + if not os.path.exists(urlrewritePath): + public.writeFile(urlrewritePath,'') return True #重新生成nginx配置文件 diff --git a/class/panelVideo.py b/class/panelVideo.py new file mode 100644 index 00000000..fb730dcf --- /dev/null +++ b/class/panelVideo.py @@ -0,0 +1,68 @@ +#coding: utf-8 +# +------------------------------------------------------------------- +# | 宝塔Linux面板 +# +------------------------------------------------------------------- +# | Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved. +# +------------------------------------------------------------------- +# | Author: 黄文良 <2020-05-18> +# +------------------------------------------------------------------- + +# +------------------------------------------------------------------- +# | 流媒体模块 +# +------------------------------------------------------------------- + +import os,sys,re +import mimetypes +import public +from BTPanel import Response + +def get_buff_size(file_size): + buff_size = 2097152 + if file_size < 104857600: + buff_size = 2097152 + elif file_size < 524288000: + buff_size = 4194304 + elif file_size < 1073741824: + buff_size = 8388608 + else: + buff_size = 10485760 + return buff_size + +def partial_response(path, start, end=None): + if not os.path.exists(path): + return Response("file not fount!",404) + file_size = os.path.getsize(path) + buff_size = get_buff_size(file_size) + + if end is None: + end = start + buff_size - 1 + end = min(end, file_size - 1) + end = min(end, start + buff_size - 1) + length = end - start + 1 + + with open(path, 'rb') as fd: + fd.seek(start) + bytes = fd.read(length) + assert len(bytes) == length + + response = Response(bytes,206,mimetype=mimetypes.guess_type(path)[0],direct_passthrough=True,) + response.headers.add('Content-Range', 'bytes {0}-{1}/{2}'.format(start, end, file_size,),) + response.headers.add('Accept-Ranges', 'bytes') + return response + +def get_range(request): + range = request.headers.get('Range') + m = None + if range: + m = re.match(r'bytes=(?P\d+)-(?P\d+)?', range) + if m: + start = m.group('start') + end = m.group('end') + start = int(start) + if end is not None: + end = int(end) + return start, end + else: + return 0, None + + diff --git a/class/panelWaf.py b/class/panelWaf.py index 902d2d43..37fa019a 100644 --- a/class/panelWaf.py +++ b/class/panelWaf.py @@ -1,151 +1,49 @@ #!/usr/bin/python #coding: utf-8 +# Author: <梁凯强>1249648969@qq.com +# panelWaf.py +# code: 面板基础安全类 # +------------------------------------------------------------------- -# | 宝塔Linux面板 -# +------------------------------------------------------------------- -# | Copyright (c) 2015-2017 宝塔软件(http:#bt.cn) All rights reserved. -# +------------------------------------------------------------------- -# | Author: 黄文良 <287962566@qq.com> -# +------------------------------------------------------------------- - import re,json,sys,public,os +flag_file='/www/server/panel/data/tmp1.json' + +try: + import libinjection +except: + if not os.path.exists(flag_file): + public.WriteFile(flag_file,'1') + else: + count_size=public.ReadFile(flag_file) + if count_size.strip().isdigit(): + if int(count_size.strip())>= 5: + exit(False) + else: + public.WriteFile(flag_file, str(int(count_size.strip())+1)) + else:public.WriteFile(flag_file,'1') + if os.path.exists('/www/server/panel/pyenv/bin/python3'): + public.ExecShell('/www/server/panel/pyenv/bin/pip install Cython') + public.ExecShell('/www/server/panel/pyenv/bin/pip install libinjection-python') + else: + public.ExecShell('pip install Cython') + public.ExecShell('pip install libinjection-python') + class panelWaf: - __ConfigFile = '/www/server/nginx/waf/config.lua' - __WafConfigPath = '/www/server/panel/vhost/wafconf' - #获取配置项 - def GetConfig(self,get): - data = {} - try: - conf = public.readFile(self.__ConfigFile); - configs = ["attacklog","UrlDeny","Redirect","CookieMatch","postMatch","whiteModule","CCDeny","CCrate"]; - #遍历单一配置 - for key in configs: - rep = key + "\s*=\s*\"([\w\/]+)\"\s*\n" - data[key] = re.search(rep,conf).groups()[0] - #遍历列表 - configs = ["black_fileExt","ipWhitelist","ipBlocklist"]; - for key in configs: - rep = key + "\s*=\s*(.+)\n"; - data[key] = json.loads(re.search(rep,conf).groups()[0].replace("{","[").replace("}","]")); - - get.name = 'whiteurl'; - data['uriWhite'] = self.GetWafConf(get); - except: - pass; - data['status'] = self.GetStatus(); - return data; - - #取状态 - def GetStatus(self): - path = "/www/server/nginx/conf/nginx.conf"; - if not os.path.exists(path): return public.returnMsg(False,'WAF_NOT_NGINX'); - conf = public.readFile(path); - status = 1; - if conf.find("#include luawaf.conf;") != -1: status = 0; - if conf.find("luawaf.conf;") == -1: status = -1; - return status; - - #更新规则 - def updateWaf(self,get): - names = ['args','cookie','post','url','user-agent']; - furl = 'http://download.bt.cn/install/waf/wafconf' - fpath = '/www/server/panel/vhost/wafconf' - for name in names: - public.downloadFile(furl + '/' + name,fpath + '/' + name); - public.serviceReload(); - return public.returnMsg(True,'WAF_UPDATE') - - #设置状态 - def SetStatus(self,get): - path = "/www/server/nginx/conf/nginx.conf"; - if not os.path.exists(path): return public.returnMsg(False,'WAF_NOT_NGINX'); - conf = public.readFile(path); - status = self.GetStatus() - if status == -1: return public.returnMsg(False,'WAF_NOT_NGINX_VERSION'); - if status == 0: - conf = conf.replace('#include luawaf.conf;',"include luawaf.conf;"); - else: - conf = conf.replace('include luawaf.conf;',"#include luawaf.conf;"); - - public.writeFile(path,conf); - public.serviceReload(); - return public.returnMsg(True,"SET_SUCCESS"); - - - - #设置配置项 - def SetConfigString(self,get): - conf = public.readFile(self.__ConfigFile); - rep = get.name + "\s*=\s*\"[\w\/]+\"\s*\n" - conf = re.sub(rep,get.name + '="' + get.value.strip() + '"\n',conf) - public.writeFile(self.__ConfigFile,conf); - public.serviceReload(); - return public.returnMsg(True,"SET_SUCCESS"); - - #设置配置项列表 - def SetConfigList(self,get): - conf = public.readFile(self.__ConfigFile); - rep = get.name + "\s*=\s*(.+)\n"; - keyList = json.loads(re.search(rep,conf).groups()[0].replace("{","[").replace("}","]")); - if get.name != 'black_fileExt': - rep2 = "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"; - if not re.search(rep2,get.value): return public.returnMsg(False,"WAF_CONF_ERR"); - if get.act == 'del': - if not get.value in keyList: return public.returnMsg(False,"WAF_CONF_NOT_EXISTS"); - tmp = [] - for t in keyList: - if t == get.value: continue; - tmp.append(t); - keyList = tmp; - else: - if get.value in keyList:return public.returnMsg(False,"WAF_CONF_EXISTS"); - keyList.append(get.value.strip()); - keyStr = json.dumps(keyList).replace("[","{").replace("]","}"); - conf = re.sub(rep,get.name + "=" + keyStr + "\n",conf); - public.writeFile(self.__ConfigFile,conf); - public.serviceReload(); - return public.returnMsg(True,"SUCCESS"); - - #获取指定规则列表 - def GetWafConf(self,get): - path = self.__WafConfigPath + '/' + get.name; - if not os.path.exists(path): return public.returnMsg(False,"WAF_CONF_NOT_EXISTS"); - data = public.readFile(path).split("\n") - return data; - - #设置指定规则列表 - def SetWafConf(self,get): - path = self.__WafConfigPath + '/' + get.name; - if not os.path.exists(path): return public.returnMsg(False,"WAF_CONF_NOT_EXISTS"); - data = public.readFile(path).split("\n") - if get.act == "del": - if not get.value in data: return public.returnMsg(False,"WAF_CONF_NOT_EXISTS"); - tmp = [] - for t in data: - if get.value == t: continue; - tmp.append(t); - data = tmp; - else: - if get.value in data: return public.returnMsg(False,"WAF_CONF_EXISTS"); - data.append(get.value); - conf = "" - - for v in data: - conf += v + "\n"; - - public.writeFile(path,conf[:-1]); - public.serviceReload(); - return public.returnMsg(True,"SUCCESS"); - - #取日志 - - + ##json_data => {"username":"admin","password":"123456!@#$%%^"} + def is_sql(self,json_data): + for i in json_data: + try: + if type(json_data[i])==str: + if libinjection.is_sql_injection(json_data[i])['is_sqli']: + return True + except:continue + else:return False -if __name__ == "__main__": - if len(sys.argv) > 1: - p = panelWaf(); - if sys.argv[1] == 'add' or sys.argv[1] == 'del': - print p.SetConfigList(sys.argv[2],sys.argv[3],sys.argv[1]); - else: - print p.SetConfigString(sys.argv[1],sys.argv[2]); - print GetConfig(); \ No newline at end of file + ##json_data => {"username":"admin","password":"123456!@#$%%^"} + def is_xss(self,json_data): + for i in json_data: + try: + if type(json_data[i]) == str: + if libinjection.is_xss(json_data[i])['is_xss']: + return True + except:continue + else:return False \ No newline at end of file diff --git a/class/php_info.php b/class/php_info.php index 663e6db9..bf20f4c6 100644 --- a/class/php_info.php +++ b/class/php_info.php @@ -40,7 +40,7 @@ function get_info(){ //文件与字符串处理库 $data['5io_string'] = array(); $data['5io_string']['Xmlrpc'] = get_extension_funcs('xmlrpc')?true:false; - $data['5io_string']['FileInfo'] = get_extension_funcs('fileinfo')?true:false; + $data['5io_string']['FileInfo'] = in_array('fileinfo',$data['modules'])?true:false; $data['5io_string']['Ftp'] = get_extension_funcs('ftp')?true:false; $data['5io_string']['Mbstring'] = get_extension_funcs('mbstring')?true:false; $data['5io_string']['bz2'] = in_array('bz2',$data['modules']); diff --git a/class/public.py b/class/public.py index ac936960..5a396e46 100644 --- a/class/public.py +++ b/class/public.py @@ -239,7 +239,7 @@ def GetJson(data): from json import dumps if data == bytes: data = data.decode('utf-8') try: - return dumps(data) + return dumps(data,ensure_ascii=False) except: return dumps(returnMsg(False,"Wrong response: %s" % str(data))) @@ -665,6 +665,7 @@ def getPanelAddr(): # 字节单位转换 def to_size(size): + if not size: return '0.00 b' size = float(size) d = ('b','KB','MB','GB','TB') s = d[0] @@ -1307,12 +1308,13 @@ def set_own(filename, user, group=None): return True #校验路径安全 -def path_safe_check(path): - checks = ['..', './', '\\', '%', '$', '^', '&', '*', '~', '@', '#'] +def path_safe_check(path,force=True): + checks = ['..','./','\\','%','$','^','&','*','~','#','"',"'",';','|','{','}','`'] for c in checks: if path.find(c) != -1: return False - rep = r"^[\w\s\.\/-]+$" - if not re.match(rep,path): return False + if force: + rep = r"^[\w\s\.\/-]+$" + if not re.match(rep,path): return False return True #取数据库字符集 @@ -1629,9 +1631,12 @@ def import_cdn_plugin(): def get_cdn_hosts(): - if import_cdn_plugin(): return [] - import static_cdn_main - return static_cdn_main.static_cdn_main().get_hosts(None) + try: + if import_cdn_plugin(): return [] + import static_cdn_main + return static_cdn_main.static_cdn_main().get_hosts(None) + except: + return [] def get_cdn_url(): try: diff --git a/class/setPanelLets.py b/class/setPanelLets.py index e2d60a08..f133262f 100644 --- a/class/setPanelLets.py +++ b/class/setPanelLets.py @@ -203,6 +203,6 @@ def set_lets(self,get): self.__save_cert_source(domain, get.email) return public.returnMsg(True, 'Panel lets set successfully') else: - return create_lets + return public.returnMsg(False, create_lets) else: - return create_site + return public.returnMsg(False, create_site) From 62381539cca22cf7a70de1f844bf26d9305dd49c Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 30 May 2020 10:35:24 +0800 Subject: [PATCH 15/21] UPDATE README.md --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index d1015ba9..26f368b6 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,18 @@ _convenient and efficient file manager integration , Support uploading, download ![blockchain](https://www.aapanel.com/images/online_editor.png?v=1 "Onlineeditor") +**Share files with your friends** + +![blockchain](https://forum.aapanel.com/assets/files/2020-05-29/1590749878-802908-tmp.png?v=1 "Onlineeditor") + +**Send link password or QR code to your friends** + +![blockchain](https://forum.aapanel.com/assets/files/2020-05-29/1590750125-428227-tmp.png?v=1 "Onlineeditor") + +**Your friend opens the link effect you shared** + +![blockchain](https://forum.aapanel.com/assets/files/2020-05-29/1590750281-633474-tmp.png?v=1 "Onlineeditor") + ##### Home Page:https://www.aapanel.com/ ##### Forum Page:https://forum.aapanel.com/ ##### Feedback: https://forum.aapanel.com/ From f7b8c3b151acdf169561196b37b8e9b7c305e223 Mon Sep 17 00:00:00 2001 From: jose Date: Tue, 2 Jun 2020 17:37:06 +0800 Subject: [PATCH 16/21] UPDATE README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 26f368b6..5f93dbdb 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,10 @@ _convenient and efficient file manager integration , Support uploading, download ![blockchain](https://forum.aapanel.com/assets/files/2020-05-29/1590750281-633474-tmp.png?v=1 "Onlineeditor") + +[User Manual](https://doc.aapanel.com/web/#/3?page_id=117 "User Manual") + + ##### Home Page:https://www.aapanel.com/ ##### Forum Page:https://forum.aapanel.com/ ##### Feedback: https://forum.aapanel.com/ From f1746060ed1f53eb930e7e17860c60031f0f0180 Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 13 Jun 2020 10:56:49 +0800 Subject: [PATCH 17/21] File manager add drag and drop upload folder Add website list to show SSL certificate expiration time Optimization of other functions --- BTPanel/__init__.py | 17 +- BTPanel/static/css/site.css | 255 +++++++++++++- BTPanel/static/js/control.js | 2 +- BTPanel/static/js/files.js | 460 +++++++++++++++++++++++++- BTPanel/static/js/index.js | 20 +- BTPanel/static/js/polyfill.js | 324 ++++++++++++++++++ BTPanel/static/js/public.js | 292 ++++++++++------ BTPanel/static/js/site.js | 46 ++- BTPanel/static/js/soft.js | 4 + BTPanel/templates/default/down.html | 2 - BTPanel/templates/default/files.html | 11 +- BTPanel/templates/default/layout.html | 2 +- BTPanel/templates/default/soft.html | 1 + class/acme_v2.py | 2 +- class/ajax.py | 19 +- class/apache.py | 2 +- class/common.py | 10 +- class/config.py | 7 +- class/crontab.py | 2 +- class/data.py | 43 ++- class/database.py | 20 +- class/db.py | 2 +- class/downloadFile.py | 2 +- class/files.py | 9 +- class/firewalls.py | 2 +- class/ftp.py | 2 +- class/http_requests.py | 2 +- class/jobs.py | 8 +- class/monitor.py | 2 +- class/nginx.py | 2 +- class/ols.py | 2 +- class/page.py | 2 +- class/panelApi.py | 2 +- class/panelAuth.py | 2 +- class/panelBackup.py | 6 +- class/panelDnsapi.py | 2 +- class/panelLets.py | 7 +- class/panelMessage.py | 22 +- class/panelMysql.py | 2 +- class/panelPHP.py | 2 +- class/panelPlugin.py | 69 ++-- class/panelRedirect.py | 2 +- class/panelSSL.py | 2 +- class/panelSite.py | 2 +- class/panelTask.py | 2 +- class/panelVideo.py | 2 +- class/panelWaf.py | 2 +- class/password.py | 2 +- class/pay.py | 2 +- class/plugin_deployment.py | 2 +- class/public.py | 43 ++- class/send_mail.py | 2 +- class/setPanelLets.py | 2 +- class/site_dir_auth.py | 2 +- class/sites.py | 2 +- class/ssh_security.py | 38 ++- class/ssh_terminal.py | 2 +- class/system.py | 11 +- class/test.py | 2 +- class/tomcat.py | 2 +- class/tools.py | 2 +- class/userlogin.py | 2 +- class/vilidate.py | 2 +- class/webshell_check.py | 2 +- class/wxapp.py | 2 +- runserver.py | 2 +- task.py | 2 +- tools.py | 2 +- 68 files changed, 1583 insertions(+), 247 deletions(-) create mode 100644 BTPanel/static/js/polyfill.js diff --git a/BTPanel/__init__.py b/BTPanel/__init__.py index 590d6c18..ebbc1faf 100644 --- a/BTPanel/__init__.py +++ b/BTPanel/__init__.py @@ -4,7 +4,7 @@ # +------------------------------------------------------------------- # | Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved. # +------------------------------------------------------------------- -# | Author: 黄文良 <287962566@qq.com> +# | Author: hwliang # +------------------------------------------------------------------- import sys import json @@ -1159,8 +1159,11 @@ def down(token=None,fname=None): "token":find['token'], "expire":public.format_date(times=find['expire']) } + session['down'] = True return render_template('down.html',data = pdata) + if not find['password']: + session['down'] = True session[token] = 1 if session[token] != 1: @@ -1277,7 +1280,17 @@ def get_pd(): if tmp: tmp = int(tmp) if ltd < 1: - if tmp == -1: + if ltd == -2: + tmp3 = public.to_string([60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, 61, 34, 98, 116, 108, 116, 100, + 45, 103, 114, 97, 121, 34, 62, 60, 115, 112, 97, 110, 32, 115, 116, 121, 108, 101, + 61, 34, 99, 111, 108, 111, 114, 58, 32, 35, 102, 99, 54, 100, 50, 54, 59, 102, 111, + 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 32, 98, 111, 108, 100, 59, 109, 97, + 114, 103, 105, 110, 45, 114, 105, 103, 104, 116, 58, 53, 112, 120, 34, 62, 24050, 36807, + 26399, 60, 47, 115, 112, 97, 110, 62, 60, 97, 32, 99, 108, 97, 115, 115, 61, 34, 98, 116, + 108, 105, 110, 107, 34, 32, 111, 110, 99, 108, 105, 99, 107, 61, 34, 98, 116, 46, 115, 111, + 102, 116, 46, 117, 112, 100, 97, 116, 97, 95, 108, 116, 100, 40, 41, 34, 62, 32493, + 36153, 60, 47, 97, 62, 60, 47, 115, 112, 97, 110, 62]) + elif tmp == -1: tmp3 = public.to_string([60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, 61, 34, 98, 116, 112, 114, 111, 45, 102, 114, 101, 101, 34, 32, 111, 110, 99, 108, 105, 99, 107, 61, 34, 98, 116, 46, 115, 111, 102, 116, 46, 117, 112, 100, 97, 116, 97, 95, 99, diff --git a/BTPanel/static/css/site.css b/BTPanel/static/css/site.css index ce26d958..18c3ac80 100644 --- a/BTPanel/static/css/site.css +++ b/BTPanel/static/css/site.css @@ -5787,10 +5787,8 @@ select[disabled]{ } /* 取消按钮组 */ .ace-clear-btn { - padding: 8px 20px 15px; + padding: 15px 20px; text-align: right; - position: absolute; - bottom: 0; width: 100%; } .ace-clear-btn .btn-default:hover { @@ -6732,4 +6730,255 @@ select[disabled]{ } .minText{ white-space: nowrap; +} +.upload_tips_mask{ + position: absolute; + z-index: 999; + background-color: #fff; + width: 100%; + left: 0; + top: 0; + height: 445px; + border: 2px dashed #e0e0e0; + text-align: center; +} +.upload_file_body{ + position: relative; +} +.upload_file_body.active{ + height: 445px; + border: 2px dashed #e0e0e0; + text-align: center; +} +.upload_tips_mask span, +.upload_file_body.active span{ + font-size: 35px; + color: #999; + position: absolute; + width: 100%; + left: 0; + top: 50%; + margin-top: -40px; +} +.dropUpLoadFile{ + position: relative; + overflow: auto; + height: 410px; + padding-top:0; +} +.dropUpLoadFile::-webkit-scrollbar { + /*滚动条整体样式*/ + width : 15px; /*高宽分别对应横竖滚动条的尺寸*/ + height: 1px; +} +.dropUpLoadFile::-webkit-scrollbar-thumb { + /*滚动条里面小方块*/ + border-radius: 0; + box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); + background : #bbb; +} +.dropUpLoadFile::-webkit-scrollbar-track { + /*滚动条里面轨道*/ + box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); + border-radius: 0; + background : #ededed; +} +.dropUpLoadFile li{ + height: 40px; + line-height: 40px; + border-bottom: 1px solid #ececec; + position: relative; +} +.dropUpLoadFileHead{ + border-bottom: 1px solid #dedede; +} +.dropUpLoadFileHead li.fileTitle{ + border-color: #ccc; +} +.upload_btn_groud .file_upload_info{ + height: 40px; + line-height: 40px; + font-size: 12px; + color: #fff; + padding-left: 5px; + font-weight: 400; + color: #3c763d; + background-color: #dff0d8; + border: 1px solid #d6e9c6; + border-radius: 2px; + position: relative; +} +.upload_btn_groud .file_upload_info .ico-tips-close{ + height: 22px; + width: 22px; + background: #90bb81; + display: inline-block; + border-radius: 50%; + position: absolute; + right: 10px; + top: 50%; + margin-top: -11px; + cursor: pointer; + transition: all 500ms; +} +.upload_btn_groud .file_upload_info .ico-tips-close:hover{ + background: #658859; +} + + +.upload_btn_groud .file_upload_info .ico-tips-close:after{ + transform: rotate(45deg); +} +.upload_btn_groud .file_upload_info .ico-tips-close:before{ + transform: rotate(-45deg); +} +.upload_btn_groud .file_upload_info .ico-tips-close:after, +.upload_btn_groud .file_upload_info .ico-tips-close:before{ + content:''; + display: inline-block; + height: 12px; + width: 2px; + background:#ececec; + border-radius: 5px; + position: absolute; + left: 50%; + top: 50%; + margin-top: -6px; + margin-left: -1px; +} +.upload_btn_groud .file_upload_info i{ + font-style: initial; +} +.upload_btn_groud .file_upload_info span{ + margin-right: 10px; + font-size: 13px; + display: inline-block; + height: 38px; + line-height: 38px; + margin-right: 0; + padding-left: 10px; +} +.dropUpLoadFile li .fileItem{ + position: relative; + z-index: 999; +} +.dropUpLoadFile li .fileLoading{ + content: ''; + width: 0%; + height: 40px; + background: #6fb9d621; + position: absolute; + left: 0; + top: 0; + transition: width 100ms; + z-index: 998; +} +.dropUpLoadFile li:hover{ + cursor: pointer; +} +.upload_btn_groud .dropdown-menu{ + width: 100%; + min-width: 120%; + font-size: 13px; +} + +.upload_btn_groud .btn-group:hover .dropdown-menu{ + display: block; +} +.dropdown-menu:before{ + content: ''; + width: 100%; + position: absolute; + top: -5px; + height: 5px; +} +.upload_btn_groud{ + margin-bottom: 5px; + height: 40px; + line-height: 40px; +} +.upload_btn_groud .dropdown-toggle{ + border-left-color: #3f51b5; +} +.upload_btn_groud .btn-primary{ + background-color: #4592f0; + border-color: #367fa9; +} +.dropUpLoadFileHead li.fileTitle span{ + color: #666; + font-size: 13px; + display: inline-block; + height: 35px; + line-height: 35px; + margin-right: 0; + padding-left: 10px; + font-weight: 500; +} +.dropUpLoadFileHead li.fileTitle span:nth-child(1){ + width: 50%; + padding-left: 15px; +} +.dropUpLoadFileHead li.fileTitle span:nth-child(2){ + width: 25%; +} +.dropUpLoadFileHead li.fileTitle span:nth-child(3){ + width: 25%; +} +.dropUpLoadFile .fileItem > span{ + color: #666; + font-size: 12px; + vertical-align: top; + padding-left: 10px; + height: 40px; + line-height: 40px; + display: inline-block; +} +.dropUpLoadFile li .filename{ + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 50%; + padding-left: 15px; +} +.dropUpLoadFile li .filename .ico { + height: 27px; + line-height: 27px; + background-size: 27px; + width: 25px; + vertical-align: middle; + margin-right: 10px; + float: initial; +} +.dropUpLoadFile li .filesize{ + color: #999; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 25%; +} +.dropUpLoadFile li .fileStatus{ + width: 25%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.dropUpLoadFile li em{ + font-style: normal; + color: #06F; + float: right; + margin-right: 10px; +} +.upload_success{ + color:#20a53a !important; +} +.upload_error{ + color:#F56C6C !important; +} +.upload_primary{ + color:#409EFF !important; +} +.upload_warning{ + color:#409EFF !important; } \ No newline at end of file diff --git a/BTPanel/static/js/control.js b/BTPanel/static/js/control.js index eeeb7701..90d7ce58 100644 --- a/BTPanel/static/js/control.js +++ b/BTPanel/static/js/control.js @@ -303,7 +303,7 @@ $.get('/ajax?action=GetCpuIo&start='+b+'&end='+e,function(rdata){ for(var i = 0; i < rdata.length; i++){ xData.push(rdata[i].addtime); //yData.push(rdata[i].pro); - zData.push(rdata[i].mem); + zData.push(rdata[i].mem.toFixed(2)); } option = { tooltip: { diff --git a/BTPanel/static/js/files.js b/BTPanel/static/js/files.js index 6737f5c0..f043cb71 100644 --- a/BTPanel/static/js/files.js +++ b/BTPanel/static/js/files.js @@ -1,3 +1,460 @@ +var fileDrop = { + startTime: 0, + endTime:0, + uploadLength:0, //上传数量 + splitSize: 1024 * 1024 * 2, //文件上传分片大小 + filesList:[], // 文件列表数组 + errorLength:0, //上传失败文件数量 + isUpload:true, //上传状态,是否可以上传 + uploadSuspend:[], //上传暂停参数 + isUploadNumber:800,//限制单次上传数量 + uploadAllSize:0, // 上传文件总大小 + uploadedSize:0, // 已上传文件大小 + topUploadedSize:0, // 上一次文件上传大小 + uploadExpectTime:0, // 预计上传时间 + initTimer:0, // 初始化计时 + speedInterval:null, //平局速度定时器 + timerSpeed:0, //速度 + isLayuiDrop:false, //是否是小窗口拖拽 + uploading:false, + init:function(){ + if($('#mask_layer').length == 0) { + window.UploadFiles = function(){ fileDrop.dialog_view()}; + $("body").append($('')); + this.event_relation(document.querySelector('#container'),document,document.querySelector('#mask_layer')); + } + }, + // 事件关联 (进入,离开,放下) + event_relation:function(enter,leave,drop){ + var that = this,obj = Object.keys(arguments); + for(var item in arguments){ + if(typeof arguments[item] == "object" && typeof arguments[item].nodeType != 'undefined'){ + arguments[item] = { + el:arguments[item], + callback:null + } + } + } + leave.el.addEventListener("dragleave",(leave.callback != null)?leave.callback:function(e){ + e.preventDefault(); + if(e.x == 0 && e.y == 0) $('#mask_layer').hide(); + },false); + enter.el.addEventListener("dragenter", (enter.callback != null)?enter.callback:function(e){ + if(e.dataTransfer.items[0].kind == 'string') return false + $('#mask_layer').show(); + that.isLayuiDrop = false; + e.preventDefault(); + },false); + drop.el.addEventListener("dragover",function(e){ e.preventDefault() }, false); + drop.el.addEventListener("drop",(enter.callback != null)?drop.callback:that.ev_drop, false); + }, + // 事件触发 + ev_drop:function(e){ + e.preventDefault(); + if(fileDrop.uploading){ + layer.msg('Uploading, please wait...'); + return false; + } + var items = e.dataTransfer.items,time,num = 0; + loadT = layer.msg('Getting upload file information, please wait...',{icon:16,time:0,shade:.3}); + fileDrop.isUpload = true; + if(items && items.length && items[0].webkitGetAsEntry != null) { + if(items[0].kind != 'file') return false; + } + if(fileDrop.filesList == null) fileDrop.filesList = [] + for(var i = fileDrop.filesList.length -1; i >= 0 ; i--){ + if(fileDrop.filesList[i].is_upload) fileDrop.filesList.splice(-i,1) + } + $('#mask_layer').hide(); + function update_sync(s){ + s.getFilesAndDirectories().then(function(subFilesAndDirs) { + return iterateFilesAndDirs(subFilesAndDirs, s.path); + }); + } + var iterateFilesAndDirs = function(filesAndDirs, path) { + if(!fileDrop.isUpload) return false + for (var i = 0; i < filesAndDirs.length; i++) { + if (typeof(filesAndDirs[i].getFilesAndDirectories) == 'function') { + update_sync(filesAndDirs[i]) + // var path = filesAndDirs[i].path; + // filesAndDirs[i].getFilesAndDirectories().then(function(subFilesAndDirs) { + // iterateFilesAndDirs(subFilesAndDirs, path); + // }); + } else { + if(num > fileDrop.isUploadNumber){ + fileDrop.isUpload = false; + layer.msg(' '+ fileDrop.isUploadNumber +'file. Unable to upload, please upload after compression!',{icon:2,area:'405px'}); + clearTimeout(time); + return false; + } + if(/^\.\w*/.test(filesAndDirs[i].name) ||/\/\.\w*/g.test(path)) continue; //排查隐藏文件目录和文件 + fileDrop.filesList.push({ + file:filesAndDirs[i], + path:bt.get_file_path(path +'/'+ filesAndDirs[i].name).replace('//','/'), + name:filesAndDirs[i].name.replace('//','/'), + icon:GetExtName(filesAndDirs[i].name), + size:fileDrop.to_size(filesAndDirs[i].size), + upload:0, //上传状态,未上传:0、上传中:1,已上传:2,上传失败:-1 + is_upload:false + }); + fileDrop.uploadAllSize += filesAndDirs[i].size + clearTimeout(time); + time = setTimeout(function(){ + layer.close(loadT); + fileDrop.dialog_view(); + },100); + num ++; + } + } + } + if('getFilesAndDirectories' in e.dataTransfer){ + e.dataTransfer.getFilesAndDirectories().then(function(filesAndDirs) { + return iterateFilesAndDirs(filesAndDirs, '/'); + }); + } + + }, + // 获取上传速度 + get_timer_speed:function(speed){ + var that = this,num = 0; + if(speed == undefined) speed = 1000 + that.speedInterval = setInterval(function(){ + if(that.uploadedSize - that.topUploadedSize === 0){ + that.timerSpeed = that.timerSpeed == 0 ? 0:(parseInt(that.timerSpeed / num)); + num += 1; + }else{ + that.timerSpeed = that.uploadedSize - that.topUploadedSize; + num = 0; + } + that.topUploadedSize = that.uploadedSize; + $('.file_upload_info .uploadSpeed').text(that.to_size(isNaN(that.timerSpeed)?0:that.timerSpeed)+'/s'); + var estimateTime = that.time(parseInt(((that.uploadAllSize - that.uploadedSize) / that.timerSpeed) * 1000)) + if(!isNaN(that.timerSpeed)) $('.file_upload_info .uploadEstimate').text(estimateTime.indexOf('NaN') == -1?estimateTime:'0sec'); + },speed); + }, + // 上传视图 + dialog_view:function(config){ + var that = this,html = ''; + if(!$('.file_dir_uploads').length > 0){ + if(that.filesList == null) that.filesList = [] + for(var i =0; i'+ (item.path + '/' + item.name).replace('//','/') +''+ item.size +''+ that.is_upload_status(item.upload) +'
          • '; + } + var is_show = that.filesList.length > 11; + layer.open({ + type: 1, + closeBtn: 1, + maxmin:true, + area: ['640px','609px'], + btn:['Start upload','Cancel upload'], + title: 'Upload files to【'+ bt.get_cookie('Path') +'】--- Support breakpoint renewal', + skin:'file_dir_uploads', + content:'
            '+ (html!=''?('
            • File nameFile sizeFile status
              '+ html +'
            '):'Please drag the file here') +'
            ', + success:function(){ + $('#mask_layer').hide(); + $('.file_dir_uploads .layui-layer-max').hide(); + $('.upload_btn_groud .upload_file_btn').click(function(){$('.upload_btn_groud .dropdown-menu [data-type=file]').click()}); + $('.upload_btn_groud .dropdown-menu a').click(function(){ + var type = $(this).attr('data-type'); + $('').change(function(e){ + var files = e.target.files,arry = []; + for(var i=0;i
          • File nameFile sizeUpload status
            • ').removeClass('active'); + if(Array.isArray(config)){ + for(var i =0; i'+ (item.path + '/' + item.name).replace('//','/') +''+ item.size +''+ that.is_upload_status(item.upload) +'
              '; + } + $('.dropUpLoadFile').append(html); + }else{ + $('.dropUpLoadFile').append('
            • '+ config.name +''+ config.size +''+ that.is_upload_status(config.upload) +'
            • '); + } + + } + }, + // 上传单文件状态 + is_upload_status:function(status,val){ + if(val === undefined) val = '' + switch(status){ + case -1: + return 'Upload failed'+ (val != ''?','+val:'') +''; + break; + case 0: + return 'Waiting to upload'; + break; + case 1: + return 'Uploaded'; + break; + case 2: + return 'Uploading'+ val+''; + break; + case 3: + return 'Paused'; + break; + } + }, + // 设置上传实时反馈视图 + set_upload_view:function(index,config){ + var item = $('.dropUpLoadFile li:eq('+ index +')'),that = this; + var file_info = $('.file_upload_info'); + if($('.file_upload_info .uploadProgress').length == 0){ + $('.file_upload_info').html('Total progress , Uploading Upload failed Upload speed GettingExpect time Getting'); + } + file_info.show().prev().hide().parent().css('paddingRight',0); + if(that.errorLength > 0) file_info.find('.uploadError').text('('+ that.errorLength +'file)').parent().show(); + file_info.find('.uploadNumber').html('('+ that.uploadLength +'/'+ that.filesList.length +')'); + file_info.find('.uploadProgress').html( ((that.uploadedSize / that.uploadAllSize) * 100).toFixed(2) +'%'); + if(config.upload === 1 || config.upload === -1){ + that.filesList[index].is_upload = true; + that.uploadLength += 1; + item.find('.fileLoading').css({'width':'100%','opacity':'.5','background': config.upload == -1?'#ffadad':'#20a53a21'}); + item.find('.filesize').text(config.size); + item.find('.fileStatus').html(that.is_upload_status(config.upload,(config.upload === 1?('(耗时:'+ that.diff_time(that.startTime,that.endTime) +')'):config.errorMsg))); + item.find('.fileLoading').fadeOut(500,function(){ + $(this).remove(); + var uploadHeight = $('.dropUpLoadFile'); + if(uploadHeight.length == 0) return false; + if(uploadHeight[0].scrollHeight > uploadHeight.height()){ + uploadHeight.scrollTop(uploadHeight.scrollTop()+40); + } + }); + }else{ + item.find('.fileLoading').css('width',config.percent); + item.find('.filesize').text(config.upload_size +'/'+ config.size); + item.find('.fileStatus').html(that.is_upload_status(config.upload,'('+ config.percent +')')); + } + }, + // 清除上传状态 + clear_drop_stauts:function(status){ + var time = new Date(),that = this; + if(!status){ + try { + var s_peed = fileDrop.to_size(fileDrop.uploadedSize / ((time.getTime() - fileDrop.initTimer.getTime()) / 1000)) + $('.file_upload_info').html('Uploaded : '+ this.uploadLength +' files,  '+ (this.errorLength>0?('Upload failed '+ this.errorLength +' files, '):'') +'Time consuming : '+ this.diff_time(this.initTimer,time) + ',  average speed : '+ s_peed +'/s').append($('').click(function(){ + $('.file_upload_info').hide().prev().show(); + })); + } catch (e) { + + } + } + $('.layui-layer-btn0').removeAttr('style data-upload').text('Start upload'); + $.extend(fileDrop,{ + startTime: 0, + endTime:0, + uploadLength:0, //上传数量 + splitSize: 1024 * 1024 * 2, //文件上传分片大小 + filesList:[], // 文件列表数组 + errorLength:0, //上传失败文件数量 + isUpload:false, //上传状态,是否可以上传 + isUploadNumber:800,//限制单次上传数量 + uploadAllSize:0, // 上传文件总大小 + uploadedSize:0, // 已上传文件大小 + topUploadedSize:0, // 上一次文件上传大小 + uploadExpectTime:0, // 预计上传时间 + initTimer:0, // 初始化计时 + speedInterval:null, //平局速度定时器 + timerSpeed:0, //速度 + uploading:false + }); + clearInterval(that.speedInterval); + }, + // 上传文件,文件开始字段,文件编号 + upload_file:function(fileStart,index){ + if(fileStart == undefined && this.uploadSuspend.length == 0) fileStart = 0,index = 0; + if(this.filesList.length === index){ + clearInterval(this.speedInterval); + this.clear_drop_stauts(); + GetFiles(bt.get_cookie('Path')); + return false; + } + var that = this; + var item = this.filesList[index],fileEnd = ''; + if(item == undefined) return false; + fileEnd = Math.min(item.file.size, fileStart + this.splitSize), + form = new FormData(); + if(fileStart == 0){ + that.startTime = new Date(); + item = $.extend(item,{percent:'0%',upload:2,upload_size:'0B'}); + } + form.append("f_path", bt.get_cookie('Path') + item.path); + form.append("f_name", item.name); + form.append("f_size", item.file.size); + form.append("f_start", fileStart); + form.append("blob", item.file.slice(fileStart, fileEnd)); + that.set_upload_view(index,item); + $.ajax({ + url:'/files?action=upload', + type: "POST", + data: form, + async: true, + processData: false, + contentType: false, + success:function(data){ + if(typeof(data) === "number"){ + that.set_upload_view(index,$.extend(item,{percent:(((data / item.file.size)* 100).toFixed(2) +'%'),upload:2,upload_size:that.to_size(data)})); + if(fileEnd != data){ + that.uploadedSize += data; + }else{ + that.uploadedSize += parseInt(fileEnd - fileStart); + } + that.upload_file(data,index); + }else{ + if(data.status){ + that.endTime = new Date(); + that.uploadedSize += parseInt(fileEnd - fileStart); + that.set_upload_view(index,$.extend(item,{upload:1,upload_size:item.size})); + that.upload_file(0,index += 1); + }else{ + that.set_upload_view(index,$.extend(item,{upload:-1,errorMsg:data.msg})); + that.errorLength ++; + } + } + }, + error:function(e){ + if(that.filesList[index].req_error === undefined) that.filesList[index].req_error = 1 + if(that.filesList[index].req_error > 2){ + that.set_upload_view(index,$.extend(that.filesList[index],{upload:-1,errorMsg:e.statusText == 'error'?'Network interruption':e.statusText })); + that.errorLength ++; + that.upload_file(fileStart,index += 1) + return false; + } + that.filesList[index].req_error += 1; + that.upload_file(fileStart,index) + } + }); + }, + time:function(date){ + var hours = Math.floor(date / (60 * 60 * 1000)); + var minutes = Math.floor(date / (60 * 1000)); + var seconds = parseInt((date % (60 * 1000)) / 1000); + var result = seconds + ' sec'; + if(minutes > 0) { + result = minutes + " min" + seconds + ' sec'; + } + if(hours > 0){ + result = hours + ' hour' + Math.floor((date - (hours * (60 * 60 * 1000))) / (60 * 1000)) + " min"; + } + return result + }, + diff_time: function (start_date, end_date) { + var diff = end_date.getTime() - start_date.getTime(); + var minutes = Math.floor(diff / (60 * 1000)); + var leave3 = diff % (60 * 1000); + var seconds = leave3 / 1000 + var result = seconds.toFixed(minutes > 0?0:2) + ' sec'; + if (minutes > 0) { + result = minutes + "min" + seconds.toFixed(0) + ' sec' + } + return result + }, + + to_size: function (a) { + var d = [" B", " KB", " MB", " GB", " TB", " PB"]; + var e = 1024; + for (var b = 0; b < d.length; b += 1) { + if (a < e) { + var num = (b === 0 ? a : a.toFixed(2)) + d[b]; + return (!isNaN((b === 0 ? a : a.toFixed(2))) && typeof num != 'undefined')?num:'0B'; + } + a /= e + } + } +} function IsDiskWidth() { var comlistWidth = $("#comlist").width(); var bodyWidth = $(".file-box").width(); @@ -354,8 +811,6 @@ function get_path_size(path) { }, function (rdata) { layer.close(loadT); var myclass = '.' + rdata.path.replace(/[^\w]/g, '-'); - console.log(myclass) - console.log($(myclass).text()) $(myclass).text(ToSize(rdata.size)); }); } @@ -620,6 +1075,7 @@ function GetFiles(Path, sort) { $("#tipTools").width($("#fileCon")[0].clientWidth - 30); } $("#DirPathPlace input").val(rdata.PATH); + fileDrop.init(); var BarTools = '
              \ ' + + '' + + '
              ' + + '' + + '
              ' + + '' + + '' + + '
              '; + + shadow.querySelector('#button1').onclick = function(e) { + e.preventDefault(); + + shadow.querySelector('#input1').click(); + }; + + shadow.querySelector('#button2').onclick = function(e) { + e.preventDefault(); + + shadow.querySelector('#input2').click(); + }; + + var toggleView = function(defaultView, filesLength) { + shadow.querySelector('#fileButtons').style.display = defaultView ? 'block' : 'none'; + shadow.querySelector('#filesChosen').style.display = defaultView ? 'none' : 'block'; + + if (!defaultView) { + shadow.querySelector('#filesChosenText').innerText = filesLength + ' file' + (filesLength > 1 ? 's' : '') + ' selected...'; + } + }; + + var changeHandler = function(e) { + node.dispatchEvent(new Event('change')); + + toggleView(false, getFiles().length); + }; + + shadow.querySelector('#input1').onchange = shadow.querySelector('#input2').onchange = changeHandler; + + var clear = function (e) { + toggleView(true); + + var form = document.createElement('form'); + node.parentNode.insertBefore(form, node); + node.parentNode.removeChild(node); + form.appendChild(node); + form.reset(); + + form.parentNode.insertBefore(node, form); + form.parentNode.removeChild(form); + + // reset does not instantly occur, need to give it some time + setTimeout(function() { + node.dispatchEvent(new Event('change')); + }, 1); + }; + + shadow.querySelector('#clear').onclick = clear; + } + + node.addEventListener('change', function() { + var dir = new Directory(); + + var files = getFiles(); + + if (files.length > 0) { + if (node.hasAttribute(allowdirsAttr)) { + toggleView(false, files.length); + } + + // from file input drag and drop (webkitEntries) + if (files[0].isFile || files[0].isDirectory) { + dir._items = files; + } else { + for (var j = 0; j < files.length; j++) { + var file = files[j]; + var path = file.webkitRelativePath; + var fullPath = path.substring(0, path.lastIndexOf(separator)); + + recurse(dir, path, fullPath, file); + } + } + } else if (node.hasAttribute(allowdirsAttr)) { + toggleView(true, files.length); + } + + this[getFilesMethod] = function() { + return dir[getFilesMethod](); + }; + }); + } + } + }; + + // polyfill file inputs when the DOM loads + document.addEventListener('DOMContentLoaded', function(event) { + convertInputs(document.getElementsByTagName('input')); + }); + + // polyfill file inputs that are created dynamically and inserted into the body + var observer = new MutationObserver(function(mutations, observer) { + for (var i = 0; i < mutations.length; i++) { + if (mutations[i].addedNodes.length > 0) { + convertInputs(mutations[i].addedNodes); + } + } + }); + + observer.observe(document.body, {childList: true, subtree: true}); + + /*********************** + **** Drag and drop **** + ***********************/ + // keep a reference to the original method + var _addEventListener = EventTarget.prototype.addEventListener; + + DataTransfer.prototype[getFilesMethod] = function() { + return Promise.resolve([]); + }; + + EventTarget.prototype.addEventListener = function(type, listener, useCapture) { + if (type === 'drop') { + var _listener = listener; + + listener = function(e) { + var dir = new Directory(); + dir._items = e.dataTransfer.items; + + e.dataTransfer[getFilesMethod] = function() { + return dir[getFilesMethod](); + }; + + _listener(e); + }; + } + + // call the original method + return _addEventListener.apply(this, arguments); + }; +}()); diff --git a/BTPanel/static/js/public.js b/BTPanel/static/js/public.js index 3c79c1c8..ebaf3610 100644 --- a/BTPanel/static/js/public.js +++ b/BTPanel/static/js/public.js @@ -138,8 +138,8 @@ var aceEditor = { $('.ace_conter_menu').on('click', '.item .icon-tool', function(e) { var file_type = $(this).attr('data-file-state'); var file_title = $(this).attr('data-title'); - var _path = $(this).parent().attr('title'); - var _id = $(this).parent().attr('data-id'); + var _path = $(this).parent().parent().attr('title'); + var _id = $(this).parent().parent().attr('data-id'); switch (file_type) { // 直接关闭 case '0': @@ -206,6 +206,7 @@ var aceEditor = { switch (_type) { case 'cursor': $('.ace_toolbar_menu').hide(); + $('.ace_header .jumpLine').click(); break; case 'history': $('.ace_toolbar_menu').hide(); @@ -379,7 +380,7 @@ var aceEditor = { } var loadT = layer.open({ type: 1, - area: ['350px', '180px'], + //area: ['350px', '180px'], title: 'Tips', content: '
              \
              \ @@ -476,10 +477,9 @@ var aceEditor = { //主题 case 'themes': $('.ace_toolbar_menu').show().find('.menu-themes').show().siblings().hide(); - var _html = '', - _arry = ['White', 'Black']; + var _html = '',_arry = ['White', 'Black']; for (var i = 0; i < _this.themeList.length; i++) { - if (_this.aceConfig.themeList[i] != _this.aceConfig.aceEditor.editorTheme) { + if (_this.themeList[i] != _this.aceConfig.aceEditor.editorTheme) { _html += '
            • ' + _this.themeList[i] + '【' + _arry[i] + '】
            • '; } else { _html += '
            • ' + _this.themeList[i] + '【' + _arry[i] + '】' + _icon + '
            • '; @@ -489,7 +489,7 @@ var aceEditor = { $('.menu-themes ul li').click(function(){ var _theme = $(this).attr('data-value'); $(this).addClass('active').append(_icon).siblings().removeClass('active').find('.icon').remove(); - _this.aceConfig.aceEditor.editorTheme = _theme; + _this.aceConfig.aceEditor.editorTheme = _theme; _this.saveAceConfig(_this.aceConfig,function(res){ for(var item in _this.editor){ _this.editor[item].ace.setTheme("ace/theme/"+_theme); @@ -850,7 +850,6 @@ var aceEditor = { } else if ($(this).prev().attr('data-type') === 0) { return false; } - console.log(_type) switch (_type) { case 0: //新建文件夹 _this.event_create_dir({ path: _path + '/' + _file_or_dir }); @@ -1175,7 +1174,7 @@ var aceEditor = { _this = this; var loadT = layer.open({ type: 1, - area: ['400px', '200px'], + //area: ['400px', '180px'], title: lan.public.restore_history_files, content: '
              \
              \ @@ -1483,6 +1482,28 @@ var aceEditor = { } _editor.ace.resize(); }, + // currentStatusBar: function(id) { + // var _item = this.editor['ace_editor_' + id]; + // if(_item == undefined){ + // this.removerStatusBar(); + // return false; + // } + // $('.ace_conter_toolbar [data-type="cursor"]').html(lan.public.row + '1,'+ lan.public.column +'0'); + // $('.ace_conter_toolbar [data-type="history"]').html(lan.public.history_v + ': ' + (_item.historys.length === 0 ? lan.public.empty : _item.historys.length) + ''); + // $('.ace_conter_toolbar [data-type="path"]').html(lan.public.dir + ': ' + _item.path + ''); + // $('.ace_conter_toolbar [data-type="tab"]').html(_item.softTabs ? lan.public.space + ': ' + _item.tabSize + '' : lan.public.tab_length + ': ' + _item.tabSize + ''); + // $('.ace_conter_toolbar [data-type="encoding"]').html(lan.public.encoding + ': ' + _item.encoding.toUpperCase() + ''); + // $('.ace_conter_toolbar [data-type="lang"]').html(lan.public.lan + ': ' + _item.type + ''); + // $('.ace_conter_toolbar span').attr('data-id', id); + // $('.file_fold').removeClass('bg'); + // $('[data-menu-path="' + (_item.path) + '"]').find('.file_fold').addClass('bg'); + // if (_item.historys_file) { + // $('.ace_conter_toolbar [data-type="history"]').hide(); + // } else { + // $('.ace_conter_toolbar [data-type="history"]').show(); + // } + // _item.ace.resize(); + // }, // 清除状态栏 removerStatusBar: function() { $('.ace_conter_toolbar [data-type="history"]').html(''); @@ -1588,53 +1609,74 @@ var aceEditor = { return { name: 'Text', mode: 'text' }; }, // 新建编辑器视图-方法 - addEditorView: function() { - var _index = this.editorLength, - _id = bt.get_random(8); - $('.ace_conter_menu .item').removeClass('active'); - $('.ace_conter_editor .ace_editors').removeClass('active'); - $('.ace_conter_menu .ace_editor_add').before('
              \ - \ - Untitled-' + _index + '\ - \ -
              '); - $('.ace_conter_editor').append('
              '); - $('#ace_editor_' + _id).siblings().removeClass('active'); - this.creationEditor({ id: _id }); - this.editorLength = this.editorLength + 1; - }, + // addEditorView: function() { + // var _index = this.editorLength, + // _id = bt.get_random(8); + // $('.ace_conter_menu .item').removeClass('active'); + // $('.ace_conter_editor .ace_editors').removeClass('active'); + // $('.ace_conter_menu .ace_editor_add').before('
              \ + // \ + // Untitled-' + _index + '\ + // \ + //
              '); + // $('.ace_conter_editor').append('
              '); + // $('#ace_editor_' + _id).siblings().removeClass('active'); + // this.creationEditor({ id: _id }); + // this.editorLength = this.editorLength + 1; + // }, + addEditorView: function (type,conifg) { + if(type == undefined) type = 0 + var _index = this.editorLength,_id = bt.get_random(8); + $('.ace_conter_menu .item').removeClass('active'); + $('.ace_conter_editor .ace_editors').removeClass('active'); + $('.ace_conter_menu').append('
            • \ +
              \ + \ + '+ (type?conifg.title:('Untitled-'+ _index)) +'\ + \ +
              \ +
            • '); + $('#ace_editor_' + _id).siblings().removeClass('active'); + $('.ace_conter_editor').append('
              '+ (type?aceShortcutKeys.innerHTML:'') +'
              '); + switch(type){ + case 0: + this.creationEditor({ id: _id }); + this.editorLength = this.editorLength + 1; + break; + case 1: + this.removerStatusBar(); + this.editorLength = this.editorLength + 1; + break; + } + }, // 删除编辑器视图-方法 - removeEditor: function(id) { - if ($('.item_tab_' + id).next('.item').length == 0) { - $('.item_tab_' + id).prev('.item').addClass('active'); - $('#ace_editor_' + id).prev('.ace_editor').addClass('active'); - this.ace_active = $('.item_tab_' + id).prev('.item').attr('data-id'); - } else { - $('.item_tab_' + id).next('.item').addClass('active'); - $('#ace_editor_' + id).next('.ace_editor').addClass('active'); - this.ace_active = $('.item_tab_' + id).next('.item').attr('data-id'); - } - $('.item_tab_' + id).remove(); - $('#ace_editor_' + id).remove(); - for (var i = 0; i < this.pathAarry.length; i++) { - if (this.pathAarry[i] == this.editor['ace_editor_' + id].path) { - this.pathAarry.splice(i, 1); - } + removeEditor: function (id) { + if(id == undefined) id = this.ace_active; + if ($('.item_tab_' + id).next('.item').length != 0 && this.editorLength != 1) { + $('.item_tab_' + id).next('.item').click(); + } else if($('.item_tab_' + id).prev('.item').length != 0 && this.editorLength != 1){ + $('.item_tab_' + id).prev('.item').click(); } - if (!aceEditor.editor['ace_editor_' + id].historys_file) $('[data-menu-path="' + (aceEditor.editor['ace_editor_' + id].path) + '"]').find('.file_fold').removeClass('active bg'); - delete this.editor['ace_editor_' + id]; - this.editorLength--; - if (this.editorLength === 0) { - this.ace_active = ''; - this.pathAarry = []; - this.removerStatusBar(); - } else { - this.currentStatusBar(this.ace_active); - } - if (this.ace_active != '') { - this.is_file_history(this.editor['ace_editor_' + this.ace_active]); + $('.item_tab_' + id).remove(); + $('#ace_editor_' + id).remove(); + this.editorLength --; + if(this.editor['ace_editor_'+id] == undefined) return false; + for(var i=0;i\ - ' + _fileName + '\ - \ -
              '); - $('.ace_conter_editor').append('
              '); - $('[data-menu-path="' + path + '"]').find('.file_fold').addClass('active bg'); - _this.ace_active = _id; - _this.editorLength = _this.editorLength + 1; - _this.creationEditor({ id: _id, fileName: _fileName, path: path, mode: _mode, encoding: res.encoding, data: res.data, type: _type, historys: res.historys }); - if (callback) callback(res); - }); - } - }); - $('.ace_toolbar_menu').hide(); - }, + // openEditorView: function(path, callback) { + // if (path == undefined) return false; + // // 文件类型(type,列如:JavaScript) 、文件模型(mode,列如:text)、文件标识(id,列如:x8AmsnYn)、文件编号(index,列如:0)、文件路径 (path,列如:/www/root/) + // var _this = this, + // paths = path.split('/'), + // _fileName = paths[paths.length - 1], + // _fileType = this.getFileType(_fileName), + // _type = _fileType.name, + // _mode = _fileType.mode, + // _id = bt.get_random(8), + // _index = this.editorLength; + // _this.is_file_open(path, function(is_state) { + // if (is_state) { + // $('.ace_conter_menu').find('[title="' + path + '"]').click(); + // } else { + // _this.getFileBody({ path: path }, function(res) { + // _this.pathAarry.push(path); + // $('.ace_conter_menu .item').removeClass('active'); + // $('.ace_conter_editor .ace_editors').removeClass('active'); + // $('.ace_conter_menu .ace_editor_add').before('
              \ + // ' + _fileName + '\ + // \ + //
              '); + // $('.ace_conter_editor').append('
              '); + // $('[data-menu-path="' + path + '"]').find('.file_fold').addClass('active bg'); + // _this.ace_active = _id; + // _this.editorLength = _this.editorLength + 1; + // _this.creationEditor({ id: _id, fileName: _fileName, path: path, mode: _mode, encoding: res.encoding, data: res.data, type: _type, historys: res.historys }); + // if (callback) callback(res); + // }); + // } + // }); + // $('.ace_toolbar_menu').hide(); + // }, + openEditorView: function (path,callback) { + if(path == undefined) return false; + // 文件类型(type,列如:JavaScript) 、文件模型(mode,列如:text)、文件标识(id,列如:x8AmsnYn)、文件编号(index,列如:0)、文件路径 (path,列如:/www/root/) + var _this = this,paths = path.split('/'),_fileName = paths[paths.length - 1],_fileType = this.getFileType(_fileName),_type = _fileType.name,_mode = _fileType.mode,_id = bt.get_random(8),_index = this.editorLength; + _this.is_file_open(path,function(is_state){ + if(is_state){ + $('.ace_conter_menu').find('[title="'+ path +'"]').click(); + }else{ + _this.getFileBody({path: path}, function (res) { + _this.pathAarry.push(path); + $('.ace_conter_menu .item').removeClass('active'); + $('.ace_conter_editor .ace_editors').removeClass('active'); + $('.ace_conter_menu').append('
            • '+ + '
              '+ + '' + _fileName + ''+ + ''+ + '
              '+ + '
            • '); + $('.ace_conter_editor').append('
              '); + $('[data-menu-path="'+ path +'"]').find('.file_fold').addClass('active bg'); + _this.ace_active = _id; + _this.editorLength = _this.editorLength + 1; + _this.creationEditor({id: _id,fileName: _fileName,path: path,mode:_mode,encoding: res.encoding,data: res.data,type:_type,historys:res.historys}); + if(callback) callback(res); + }); + } + }); + $('.ace_toolbar_menu').hide(); + }, // 获取收藏夹列表-方法 getFavoriteList: function() {}, // 获取文件列表-请求 @@ -1717,17 +1788,42 @@ var aceEditor = { }); }, // 保存文件内容-请求 - saveFileBody: function(obj, callback) { - var loadT = layer.msg(lan.public.save_file_content, { time: 0, icon: 16, shade: [0.3, '#000'] }); - $.post("/files?action=SaveFileBody", { - data:obj.data, - encoding:obj.encoding.toLowerCase(), - path:obj.path - }, function(res) { - layer.close(loadT); - if (callback) callback(res) - }); - }, + // saveFileBody: function(obj, callback) { + // var loadT = layer.msg(lan.public.save_file_content, { time: 0, icon: 16, shade: [0.3, '#000'] }); + // $.post("/files?action=SaveFileBody", { + // data:obj.data, + // encoding:obj.encoding.toLowerCase(), + // path:obj.path + // }, function(res) { + // layer.close(loadT); + // if (callback) callback(res) + // }); + // }, + saveFileBody: function (obj,success,error) { + $.ajax({ + type:'post', + url:'/files?action=SaveFileBody', + timeout: 7000, //设置保存超时时间 + data:{ + data:obj.data, + encoding:obj.encoding.toLowerCase(), + path:obj.path + }, + complete:function(res,status){ + if(res.status != 200){ + if(error) error(res.responseJSON) + }else if(res.status == 200){ + var rdata = res.responseJSON; + if(rdata.status){ + if(success) success(rdata) + }else{ + if(error) error(rdata) + } + if(!obj.tips) layer.msg(rdata.msg,{icon:rdata.status?1:2}); + } + } + }); + }, saveAceConfig: function(data,callback){ var loadT = layer.msg(lan.public.save_ace_config,{time: 0,icon: 16,shade: [0.3, '#000']}),_this = this; this.saveFileBody({ diff --git a/BTPanel/static/js/site.js b/BTPanel/static/js/site.js index 4fef6343..43d9ea94 100644 --- a/BTPanel/static/js/site.js +++ b/BTPanel/static/js/site.js @@ -77,7 +77,26 @@ var site = { return "" + item.ps + ""; } }, - + { + field: 'ssl', title: 'SSL certificate', width: 110, templet: function (item) { + var _ssl = ''; + if (item.ssl == -1) + { + _ssl = 'Not deployed'; + }else{ + var ssl_info = "Certificate: "+item.ssl.issuer+"
              Due date: " + item.ssl.notAfter+"
              Application date: " + item.ssl.notBefore +"
              Domain name: " + item.ssl.dns.join("/"); + if(item.ssl.endtime < 0){ + _ssl = 'Expired'; + + }else if(item.ssl.endtime < 20){ + _ssl = 'Expire: '+(item.ssl.endtime+' days')+''; + }else{ + _ssl = 'Expire: '+item.ssl.endtime+' days'; + } + } + return _ssl; + } + }, { field: 'opt', width: 260, @@ -96,7 +115,30 @@ var site = { ], data: data }) - + var outTime = ''; + $('.ssl_tips').hover(function(){ + var that = this,tips = $(that).attr('data-tips'); + if(!tips) return false; + outTime = setTimeout(function(){ + layer.tips(tips, $(that), { + tips: [2, '#20a53a'], //还可配置颜色 + time:0 + }); + },500); + },function(){ + outTime != ''?clearTimeout(outTime):''; + layer.closeAll('tips'); + }) + $('.ssl_tips').click(function(){ + site.web_edit(this); + var timeVal = setInterval(function(){ + var content = $('#webedit-con').html(); + if(content != ''){ + $('.site-menu p:eq(9)').click(); + clearInterval(timeVal); + } + },100); + }); //设置到期时间 $('a.setTimes').each(function() { var _this = $(this); diff --git a/BTPanel/static/js/soft.js b/BTPanel/static/js/soft.js index bc32c964..2af2ff51 100644 --- a/BTPanel/static/js/soft.js +++ b/BTPanel/static/js/soft.js @@ -254,6 +254,7 @@ var soft = { var is_php = item.name.indexOf('php-') >= 0, is_php5 = item.name.indexOf('php-5') >= 0, webcache = bt.get_cookie('serverType') == 'openlitespeed' ? true : false, + distribution = bt.get_cookie('distribution'), redhat = rdata.Redhat; if (rdata.apache22 && is_php && $.inArray(item.name, phps) == -1) { if (item.setup) { @@ -317,6 +318,9 @@ var soft = { option = '' + lan.soft.not_comp + ''; } } + if (distribution=='centos8' && item.name == 'php-7.0') { + option = '' + lan.soft.not_comp + ''; + } return option; } } diff --git a/BTPanel/templates/default/down.html b/BTPanel/templates/default/down.html index 41b01dc9..cec123ae 100644 --- a/BTPanel/templates/default/down.html +++ b/BTPanel/templates/default/down.html @@ -1145,7 +1145,6 @@ window.location.href = text.attr('href'); } }); - function submit_pass(){ var file_password = document.getElementById("file_password").value, url = $(this).parent().attr('data-url'); @@ -1153,7 +1152,6 @@ alert("Incorrect password length!"); return false; } - $('.file_password').val('test'); $.post(url, {file_password:file_password},function (res) { if (res.status==false){ alert(res.msg); diff --git a/BTPanel/templates/default/files.html b/BTPanel/templates/default/files.html index 4e0ea2a7..20401674 100644 --- a/BTPanel/templates/default/files.html +++ b/BTPanel/templates/default/files.html @@ -212,14 +212,15 @@ {% endblock %} {% block scripts %} - - - - + + + + - + + diff --git a/BTPanel/templates/default/soft.html b/BTPanel/templates/default/soft.html index e7ab8a8d..222fbe78 100644 --- a/BTPanel/templates/default/soft.html +++ b/BTPanel/templates/default/soft.html @@ -55,6 +55,7 @@
              @@ -30,6 +70,14 @@
              + {% if data['hosts'] != '[]' %} + + Acceleration node + + + {% endif %} {{data['lan']['N13']}}
              @@ -59,7 +107,7 @@
              - + + \ No newline at end of file diff --git a/class/acme_v2.py b/class/acme_v2.py index 7c3b5bdd..0b0f533a 100644 --- a/class/acme_v2.py +++ b/class/acme_v2.py @@ -403,6 +403,9 @@ def claer_auth_file(self,index): write_log("|-Verify the dir:{}".format(acme_path)) if not os.path.exists(acme_path): return True public.ExecShell("rm -f {}/*".format(acme_path)) + acme_path = '/www/server/stop/.well-known/acme-challenge' + if os.path.exists(acme_path): + public.ExecShell("rm -f {}/*".format(acme_path)) # 写验证文件 def write_auth_file(self, auth_to, token, acme_keyauthorization): @@ -414,9 +417,19 @@ def write_auth_file(self, auth_to, token, acme_keyauthorization): wellknown_path = '{}/{}'.format(acme_path, token) public.writeFile(wellknown_path, acme_keyauthorization) public.set_own(wellknown_path, 'www') + + acme_path = '/www/server/stop/.well-known/acme-challenge' + if not os.path.exists(acme_path): + os.makedirs(acme_path) + public.set_own(acme_path, 'www') + wellknown_path = '{}/{}'.format(acme_path,token) + public.writeFile(wellknown_path,acme_keyauthorization) + public.set_own(wellknown_path, 'www') return True except: - raise Exception("Writing verification file failed: {}".format(public.get_error_info())) + err = public.get_error_info() + print(err) + raise Exception("Writing verification file failed: {}".format(err)) # 解析域名 def create_dns_record(self, auth_to, domain, dns_value): @@ -574,6 +587,8 @@ def get_error(self, error): return "The verification timed out. Please check if the domain name is resolved correctly. If it is resolved correctly, the connection between the server and Let'sEncrypt may be abnormal. Please try again later!" elif error.find('Cannot issue for') != -1: return "Cannot issue a certificate for {}, cannot apply for a wildcard certificate with a domain name suffix directly!".format(re.findall(r'for\s+"(.+)"',error)) + elif error.find('too many failed authorizations recently'): + return 'The account has more than 5 failed orders within 1 hour, please wait 1 hour and try again!' elif error.find("Error creating new order") != -1: return "Order creation failed, please try again later!" elif error.find("Too Many Requests") != -1: @@ -1257,12 +1272,25 @@ def check_auth_env(self,args): import panelSite s = panelSite.panelSite() if args.auth_type in ['http','tls']: - if not 'siteName' in args: - args.siteName = public.M('sites').where('id=?',(args.id,)).getField('name') - args.sitename = args.siteName - if s.GetRedirectList(args): return public.returnMsg(False, 'SITE_SSL_ERR_301') - if s.GetProxyList(args): return public.returnMsg(False,'Sites with reverse proxy turned on cannot apply for SSL!') - + try: + if not 'siteName' in args: + args.siteName = public.M('sites').where('id=?',(args.id,)).getField('name') + args.sitename = args.siteName + data = s.GetRedirectList(args) + if type(data) == list: + for x in data: + if x['type']: return public.returnMsg(False, 'SITE_SSL_ERR_301') + data = s.GetProxyList(args) + if type(data) == list: + for x in data: + if s.GetProxyList(args): return public.returnMsg(False, + 'Sites with reverse proxy turned on cannot apply for SSL!') + + #判断是否强制HTTPS + if s.IsToHttps(args.siteName): + return public.returnMsg(False, 'After configuring Force HTTPS, you cannot use [File Verification] to apply for a certificate!') + except: + return False else: if args.auth_to.find('Dns_com') != -1: if not os.path.exists('plugin/dns/dns_main.py'): @@ -1317,10 +1345,9 @@ def renew_cert(self, index): if 'cert' in self._config['orders'][i]: self._config['orders'][i]['cert_timeout'] = self._config['orders'][i]['cert']['cert_timeout'] if not 'cert_timeout' in self._config['orders'][i]: - continue + self._config['orders'][i]['cert_timeout'] = int(time.time()) if self._config['orders'][i]['cert_timeout'] > s_time or self._config['orders'][i]['auth_to'] == 'dns': continue - write_log(self._config['orders'][i]['cert_timeout']) order_index.append(i) if not order_index: @@ -1335,26 +1362,30 @@ def renew_cert(self, index): write_log("|-Renewing certificate number of {},domain: {}..".format(n, self._config['orders'][index]['domains'])) write_log("|-Creating order...") - index = self.create_order( - self._config['orders'][index]['domains'], - self._config['orders'][index]['auth_type'], - self._config['orders'][index]['auth_to'], - index - ) - write_log("|-Getting verification information..") - self.get_auths(index) - write_log("|-Verifying domain name..") - self.auth_domain(index) - write_log("|-Sending CSR..") - self.remove_dns_record() - self.send_csr(index) - write_log("|-Downloading certificate..") - cert = self.download_cert(index) - self._config['orders'][index]['renew_time'] = int(time.time()) - self.save_config() - cert['status'] = True - cert['msg'] = 'Renewed successfully!' - write_log("|-Renewed successfully!") + try: + index = self.create_order( + self._config['orders'][index]['domains'], + self._config['orders'][index]['auth_type'], + self._config['orders'][index]['auth_to'], + index + ) + write_log("|-Getting verification information..") + self.get_auths(index) + write_log("|-Verifying domain name..") + self.auth_domain(index) + write_log("|-Sending CSR..") + self.remove_dns_record() + self.send_csr(index) + write_log("|-Downloading certificate..") + cert = self.download_cert(index) + self._config['orders'][index]['renew_time'] = int(time.time()) + self.save_config() + cert['status'] = True + cert['msg'] = 'Renewed successfully!' + write_log("|-Renewed successfully!") + except Exception as e: + write_log("|-" + str(e).split('>>>>')[0]) + write_log("-" * 70) return cert except Exception as ex: self.remove_dns_record() diff --git a/class/common.py b/class/common.py index c2269524..85927a28 100644 --- a/class/common.py +++ b/class/common.py @@ -34,7 +34,7 @@ def init(self): ua = ua.lower() if ua.find('spider') != -1 or ua.find('bot') != -1: return redirect('https://www.google.com') - g.version = '6.7.5' + g.version = '6.7.6' g.title = public.GetConfigValue('title') g.uri = request.path if not os.path.exists('data/debug.pl'): diff --git a/class/config.py b/class/config.py index 04f563e9..349d7305 100644 --- a/class/config.py +++ b/class/config.py @@ -59,7 +59,7 @@ def del_mail_list(self, get): #添加接受邮件地址 def add_mail_address(self, get): if not hasattr(get, 'email'): return public.returnMsg(False, 'Please input your email') - emailformat = re.compile('[a-zA-Z0-9.-_+%]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+') + emailformat = re.compile(r'[a-zA-Z0-9.-_+%]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+') if not emailformat.search(get.email): return public.returnMsg(False, 'Please enter your vaild email') # 测试发送邮件 if get.email.strip() in self.__mail_list: return public.returnMsg(True, 'Email already exists') @@ -96,7 +96,7 @@ def get_user_mail(self, get): # 用户自定义邮件发送 def user_stmp_mail_send(self, get): if not (hasattr(get, 'email')): return public.returnMsg(False, 'Please fill in the email address') - emailformat = re.compile('[a-zA-Z0-9.-_+%]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+') + emailformat = re.compile(r'[a-zA-Z0-9.-_+%]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+') if not emailformat.search(get.email): return public.returnMsg(False, 'Please enter your vaild email') # 测试发送邮件 if not get.email.strip() in self.__mail_list: return public.returnMsg(True, 'The mailbox does not exist, please add it to the mailbox list') @@ -173,7 +173,7 @@ def reload_session(self): def setPassword(self,get): if get.password1 != get.password2: return public.returnMsg(False,'USER_PASSWORD_CHECK') if len(get.password1) < 5: return public.returnMsg(False,'USER_PASSWORD_LEN') - public.M('users').where("username=?",(session['username'],)).setField('password',public.md5(get.password1.strip())) + public.M('users').where("username=?",(session['username'],)).setField('password',public.password_salt(public.md5(get.password1.strip()),username=session['username'])) public.WriteLog('TYPE_PANEL','USER_PASSWORD_SUCCESS',(session['username'],)) self.reload_session() return public.returnMsg(True,'USER_PASSWORD_SUCCESS') @@ -189,7 +189,7 @@ def setUsername(self,get): #取用户列表 def get_users(self,args): - data = public.M('users').field('username').select() + data = public.M('users').field('id,username').select() return data # 创建新用户 @@ -199,7 +199,7 @@ def create_user(self,args): if len(args.password) < 8: return public.returnMsg(False,'Password must be at least 8 characters') pdata = { "username": args.username.strip(), - "password": public.md5(args.password.strip()) + "password": public.password_salt(public.md5(args.password.strip()),username=args.username.strip()) } if(public.M('users').where('username=?',(pdata['username'],)).count()): @@ -233,7 +233,7 @@ def modify_user(self,args): if 'password' in args: if args.password: if len(args.password) < 8: return public.returnMsg(False,'Password must be at least 8 characters') - pdata['password'] = public.md5(args.password.strip()) + pdata['password'] = public.password_salt(public.md5(args.password.strip()),username=username) if(public.M('users').where('id=?',(args.id,)).update(pdata)): public.WriteLog('User Management',"Edit user{}".format(username)) @@ -651,8 +651,8 @@ def SetTemplates(self,get): #设置面板SSL def SetPanelSSL(self,get): if hasattr(get,"email"): - # rep_mail = "^[a-zA-Z0-9_-\.]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$" - rep_mail = "[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?" + #rep_mail = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$" + rep_mail = r"[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?" if not re.search(rep_mail,get.email): return public.returnMsg(False,'The E-Mail format is illegal') import setPanelLets diff --git a/class/database.py b/class/database.py index 81246b14..4be7bf51 100644 --- a/class/database.py +++ b/class/database.py @@ -827,13 +827,15 @@ def GetRunStatus(self,get): try: if data[0] == 1045: return public.returnMsg(False,'MYSQL_PASS_ERR') - except:pass - for d in data: - for g in gets: - try: - if d[0] == g: result[g] = d[1] - except: - pass + for d in data: + for g in gets: + try: + if d[0] == g: result[g] = d[1] + except: + pass + except: + return public.returnMsg(False,str(data)) + if not 'Run' in result and result: result['Run'] = int(time.time()) - int(result['Uptime']) tmp = panelMysql.panelMysql().query('show master status') diff --git a/class/files.py b/class/files.py index 87550610..ebf0b6df 100644 --- a/class/files.py +++ b/class/files.py @@ -693,6 +693,10 @@ def Get_Recycle_bin(self, get): try: tmp = {} fname = rPath + file + if sys.version_info[0] == 2: + fname = fname.encode('utf-8') + else: + fname.encode('utf-8') tmp1 = file.split('_bt_') tmp2 = tmp1[len(tmp1)-1].split('_t_') tmp['rname'] = file diff --git a/class/jobs.py b/class/jobs.py index bfb81f28..f2ed271f 100644 --- a/class/jobs.py +++ b/class/jobs.py @@ -74,9 +74,14 @@ def control_init(): public.M('crontab').execute("ALTER TABLE 'crontab' ADD 'sType' TEXT",()) public.M('crontab').execute("ALTER TABLE 'crontab' ADD 'urladdress' TEXT",()) - public.M('users').where('email=? or email=?',('287962566@qq.com','amw_287962566@qq.com')).setField('email','test@message.com') + if not public.M('sqlite_master').where('type=? AND name=? AND sql LIKE ?', ('table', 'users','%salt%')).count(): + public.M('users').execute("ALTER TABLE 'users' ADD 'salt' TEXT",()) + + public.chdck_salt() + + filename = '/www/server/nginx/off' if os.path.exists(filename): os.remove(filename) diff --git a/class/panelBackup.py b/class/panelBackup.py index fe161269..d65c8b4f 100644 --- a/class/panelBackup.py +++ b/class/panelBackup.py @@ -19,7 +19,7 @@ os.chdir('/www/server/panel') sys.path.insert(0,'class/') import public -_VERSION = 1.4 +_VERSION = 1.5 class backup: _path = None @@ -323,7 +323,7 @@ def backup_site(self,siteName,save = 3 ,exclude = []): #清理多余备份 if not self._cloud: - backups = public.M('backup').where("type=? and pid=? and filename LIKE '%/%'",('0',pid)).field('id,name,filename').select() + backups = public.M('backup').where("type=? and pid=? and filename NOT LIKE '%|%'",('0',pid)).field('id,name,filename').select() else: backups = public.M('backup').where('type=? and pid=? and filename LIKE "%{}%"'.format(self._cloud._name),('0',pid)).field('id,name,filename').select() @@ -449,7 +449,7 @@ def backup_database(self,db_name,dfile = None,save=3): #清理多余备份 if not self._cloud: - backups = public.M('backup').where("type=? and pid=? and filename LIKE '%/%'",('1',pid)).field('id,name,filename').select() + backups = public.M('backup').where("type=? and pid=? and filename NOT LIKE '%|%'",('1',pid)).field('id,name,filename').select() else: backups = public.M('backup').where('type=? and pid=? and filename LIKE "%{}%"'.format(self._cloud._name),('1',pid)).field('id,name,filename').select() self.delete_old(backups,save,'database') diff --git a/class/panelPlugin.py b/class/panelPlugin.py index 7aaadb65..fcefe855 100644 --- a/class/panelPlugin.py +++ b/class/panelPlugin.py @@ -128,8 +128,9 @@ def check_install_limit(self,get): if os.path.exists(p_node): if len(public.readFile(p_node)) < 100: os.remove(p_node) if not pluginInfo: return public.returnMsg(False, 'INIT_PLUGIN_NOT_EXISTS') + self.mutex_title = pluginInfo['mutex'] if not self.check_mutex(pluginInfo['mutex']): return public.returnMsg(False, 'UNINSTALL_FIRST', - (pluginInfo['mutex'],)) + (self.mutex_title,)) if not hasattr(get, 'id'): if not self.check_dependnet(pluginInfo['dependnet']): return public.returnMsg(False, 'DEP_PAGE', (pluginInfo['dependnet'],)) @@ -143,7 +144,15 @@ def check_install_limit(self,get): return public.returnMsg(False,'At least [{0}] CPU cores are required to install'.format(versionInfo['cpu_limit'])) if not self.check_mem_limit(versionInfo['mem_limit']): return public.returnMsg(False,'At least [{0} MB] memory is required to install'.format(versionInfo['mem_limit'])) - + if not self.check_os_limit(versionInfo['os_limit']): + m_ps = {0: "All", 1: "Centos", 2: "Ubuntu/Debian"} + return public.returnMsg(False, '仅支持[%s]系统' % m_ps[int(versionInfo['os_limit'])]) + if not hasattr(get, 'id'): + if not self.check_dependnet(versionInfo['dependnet']): return public.returnMsg(False, + 'Depend on the following software, please install first [%s]' % + versionInfo[ + 'dependnet']) + #安装插件 def install_plugin(self,get): if not self.check_sys_write(): return public.returnMsg(False,'CANT_WRITE_SYS_DIR') @@ -368,7 +377,7 @@ def add_expire_msg(self,title,level,name,expire_day,pid,endtime): if expire_day > 15: return False if pm.is_level(level): #是否忽略 if level != name: #到期还是即将到期 - msg_last = '您的【{}】授权还有{}天到期'.format(title,int(expire_day)) + msg_last = '您的【{}】授权还有{}天到期'.format(title,int(expire_day) + 1) else: msg_last = '您的【{}】授权已到期'.format(title) pl_msg = 'true' @@ -1119,14 +1128,17 @@ def get_icon(self,name,downFile = None): #下载图标 def download_icon(self,name,iconFile,downFile): srcIcon = 'plugin/' + name + '/icon.png' + skey = name+'_icon' + if cache.get(skey): return None if os.path.exists(srcIcon): - public.ExecShell("\cp -a -r " + srcIcon + " " + iconFile) + public.ExecShell(r"\cp -a -r " + srcIcon + " " + iconFile) else: if downFile: public.ExecShell('wget -O ' + iconFile + ' ' + public.GetConfigValue('home') + downFile + '&') else: public.ExecShell('wget -O ' + iconFile + ' ' + public.get_url() + '/install/plugin/' + name + '/icon.png &') - + cache.set(skey,1,86400) + #取分页 def GetPage(self,data,get): diff --git a/class/panelSite.py b/class/panelSite.py index 32d59768..e5c34de9 100644 --- a/class/panelSite.py +++ b/class/panelSite.py @@ -409,7 +409,7 @@ def AddSite(self,get): #表单验证 if not files.files().CheckDir(self.sitePath) or not self.__check_site_path(self.sitePath): return public.returnMsg(False,'PATH_ERROR') if len(self.phpVersion) < 2: return public.returnMsg(False,'SITE_ADD_ERR_PHPEMPTY') - reg = "^([\w\-\*]{1,100}\.){1,4}([\w\-]{1,24}|[\w\-]{1,24}\.[\w\-]{1,24})$" + reg = r"^([\w\-\*]{1,100}\.){1,4}([\w\-]{1,24}|[\w\-]{1,24}\.[\w\-]{1,24})$" if not re.match(reg, self.siteName): return public.returnMsg(False,'SITE_ADD_ERR_DOMAIN') if self.siteName.find('*') != -1: return public.returnMsg(False,'SITE_ADD_ERR_DOMAIN_TOW') @@ -2501,7 +2501,7 @@ def SetPath(self,get): #创建basedir userIni = Path + '/.user.ini' if os.path.exists(userIni): public.ExecShell("chattr -i "+userIni) - public.writeFile(userIni, 'open_basedir='+Path+'/:/tmp/:/proc/') + public.writeFile(userIni, 'open_basedir='+Path+'/:/tmp/') public.ExecShell('chmod 644 ' + userIni) public.ExecShell('chown root:root ' + userIni) public.ExecShell('chattr +i '+userIni) @@ -2677,6 +2677,7 @@ def _set_ols_open_basedir(self,get): # sitename = path.split('/')[-1] f = "/www/server/panel/vhost/openlitespeed/detail/{}.conf".format(sitename) c = public.readFile(f) + if not c: return False if f: rep = '\nphp_admin_value\s*open_basedir.*' result = re.search(rep, c) diff --git a/class/public.py b/class/public.py index 17fb4720..31c4f43a 100644 --- a/class/public.py +++ b/class/public.py @@ -21,16 +21,25 @@ sys.setdefaultencoding('utf8') def M(table): + """ + @name 访问面板数据库 + @author hwliang + @table 被访问的表名(必需) + @return db.Sql object + + ps: 默认访问data/default.db + """ import db sql = db.Sql() return sql.table(table) def HttpGet(url,timeout = 6,headers = {}): """ - 发送GET请求 - @url 被请求的URL地址(必需) - @timeout 超时时间默认60秒 - return string + @name 发送GET请求 + @author hwliang + @url 被请求的URL地址(必需) + @timeout 超时时间默认60秒 + @return string """ if is_local(): return False home = 'www.bt.cn' @@ -53,6 +62,16 @@ def HttpGet(url,timeout = 6,headers = {}): return s_body def http_get_home(url,timeout,ex): + """ + @name Get方式使用优选节点访问官网 + @author hwliang + @param url 当前官网URL地址 + @param timeout 用于测试超时时间 + @param ex 上一次错误的响应内容 + @return string 响应内容 + + 如果已经是优选节点,将直接返回ex + """ try: home = 'www.bt.cn' if url.find(home) == -1: return ex @@ -72,6 +91,12 @@ def http_get_home(url,timeout,ex): def set_home_host(host): + """ + @name 设置官网hosts + @author hwliang + @param host IP地址 + @return void + """ ExecShell('sed -i "/www.bt.cn/d" /etc/hosts') ExecShell("echo '' >> /etc/hosts") ExecShell("echo '%s www.bt.cn' >> /etc/hosts" % host) @@ -82,11 +107,11 @@ def httpGet(url,timeout=6): def HttpPost(url,data,timeout = 6,headers = {}): """ - 发送POST请求 - @url 被请求的URL地址(必需) - @data POST参数,可以是字符串或字典(必需) - @timeout 超时时间默认60秒 - return string + 发送POST请求 + @url 被请求的URL地址(必需) + @data POST参数,可以是字符串或字典(必需) + @timeout 超时时间默认60秒 + return string """ if is_local(): return False home = 'www.bt.cn' @@ -110,7 +135,18 @@ def HttpPost(url,data,timeout = 6,headers = {}): return s_body -def http_post_home(url, data, timeout, ex): +def http_post_home(url,data,timeout,ex): + """ + @name POST方式使用优选节点访问官网 + @author hwliang + @param url(string) 当前官网URL地址 + @param data(dict) POST数据 + @param timeout(int) 用于测试超时时间 + @param ex(string) 上一次错误的响应内容 + @return string 响应内容 + + 如果已经是优选节点,将直接返回ex + """ try: home = 'www.bt.cn' if url.find(home) == -1: return ex @@ -128,17 +164,26 @@ def http_post_home(url, data, timeout, ex): return ex except: return ex -def httpPost(url, data, timeout=6): - return HttpPost(url, data, timeout) +def httpPost(url,data,timeout=6): + """ + @name 发送POST请求 + @author hwliang + @param url 被请求的URL地址(必需) + @param data POST参数,可以是字符串或字典(必需) + @param timeout 超时时间默认60秒 + @return string + """ + return HttpPost(url,data,timeout) def check_home(): return True def Md5(strings): """ - 生成MD5 - @strings 要被处理的字符串 - return string(32) + @name 生成MD5 + @author hwliang + @param strings 要被处理的字符串 + @return string(32) """ if type(strings) == str: strings = strings.encode() @@ -152,9 +197,10 @@ def md5(strings): def FileMd5(filename): """ - 生成文件的MD5 - @filename 文件名 - return string(32) or False + @name 生成文件的MD5 + @author hwliang + @param filename 文件名 + @return string(32) or False """ if not os.path.isfile(filename): return False import hashlib @@ -171,9 +217,10 @@ def FileMd5(filename): def GetRandomString(length): """ - 取随机字符串 - @length 要获取的长度 - return string(length) + @name 取随机字符串 + @author hwliang + @param length 要获取的长度 + @return string(length) """ from random import Random strings = '' @@ -186,17 +233,32 @@ def GetRandomString(length): def ReturnJson(status,msg,args=()): """ - 取通用Json返回 - @status 返回状态 - @msg 返回消息 - return string(json) + @name 取通用Json返回 + @author hwliang + @param status 返回状态 + @param msg 返回消息 + @return string(json) """ return GetJson(ReturnMsg(status, msg, args)) def returnJson(status,msg,args=()): + """ + @name 取通用Json返回 + @author hwliang + @param status 返回状态 + @param msg 返回消息 + @return string(json) + """ return ReturnJson(status,msg,args) def ReturnMsg(status,msg,args = ()): + """ + @name 取通用dict返回 + @author hwliang + @param status 返回状态 + @param msg 返回消息 + @return dict {"status":bool,"msg":string} + """ log_message = json.loads(ReadFile('BTPanel/static/language/' + GetLanguage() + '/public.json')) keys = log_message.keys() if type(msg) == str: @@ -208,11 +270,23 @@ def ReturnMsg(status,msg,args = ()): return {'status':status,'msg':msg} def returnMsg(status,msg,args = ()): + """ + @name 取通用dict返回 + @author hwliang + @param status 返回状态 + @param msg 返回消息 + @return dict {"status":bool,"msg":string} + """ return ReturnMsg(status,msg,args) def GetFileMode(filename): - '''取文件权限''' + """ + @name 取文件权限字符串 + @author hwliang + @param filename 文件全路径 + @return string 如:644/777/755 + """ stat = os.stat(filename) accept = str(oct(stat.st_mode)[-3:]) return accept @@ -1332,7 +1406,8 @@ def set_own(filename, user, group=None): #校验路径安全 def path_safe_check(path,force=True): - checks = ['..','./','\\','%','$','^','&','*','~','#','"',"'",';','|','{','}','`'] + if len(path) > 256: return False + checks = ['..','./','\\','%','$','^','&','*','~','"',"'",';','|','{','}','`'] for c in checks: if path.find(c) != -1: return False if force: @@ -1573,22 +1648,22 @@ def en_hexb(data): if type(result) != str: result = result.decode('utf-8') return result -def upload_file_url(filename): - try: - if os.path.exists(filename): - data = ExecShell('/usr/bin/curl https://scanner.baidu.com/enqueue -F archive=@%s' % filename) - data = json.loads(data[0]) - time.sleep(1) - import requests - default_headers = { - 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' - } - data_list = requests.get(url=data['url'], headers=default_headers, verify=False) - return (data_list.json()) - else: - return False - except: - return False +# def upload_file_url(filename): +# try: +# if os.path.exists(filename): +# data = ExecShell('/usr/bin/curl https://scanner.baidu.com/enqueue -F archive=@%s' % filename) +# data = json.loads(data[0]) +# time.sleep(1) +# import requests +# default_headers = { +# 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' +# } +# data_list = requests.get(url=data['url'], headers=default_headers, verify=False) +# return (data_list.json()) +# else: +# return False +# except: +# return False #直接请求到PHP-FPM #version php版本 @@ -1764,6 +1839,46 @@ def ip2long(ip): iplong = 2 ** 24 * int(ips[0]) + 2 ** 16 * int(ips[1]) + 2 ** 8 * int(ips[2]) + int(ips[3]) return iplong +#获取sessionid +def get_session_id(): + from BTPanel import request + return request.cookies.get('BT_PANEL_6') + +def chdck_salt(): + ''' + @name 检查所有用户密码是否加盐,若没有则自动加上 + @author hwliang<2020-07-08> + @return void + ''' + + if not M('sqlite_master').where('type=? AND name=? AND sql LIKE ?', ('table', 'users','%salt%')).count(): + M('users').execute("ALTER TABLE 'users' ADD 'salt' TEXT",()) + u_list = M('users').where('salt is NULL',()).field('id,username,password,salt').select() + for u_info in u_list: + salt = GetRandomString(12) #12位随机 + pdata = {} + pdata['password'] = md5(md5(u_info['password']+'_bt.cn') + salt) + pdata['salt'] = salt + M('users').where('id=?',(u_info['id'],)).update(pdata) + + +def password_salt(password,username=None,uid=None): + ''' + @name 为指定密码加盐 + @author hwliang<2020-07-08> + @param password string(被md5加密一次的密码) + @param username string(用户名) 可选 + @param uid int(uid) 可选 + @return string + ''' + chdck_salt() + if not uid: + if not username: + raise Exception('username或uid必需传一项') + uid = M('users').where('username=?',(username,)).getField('id') + salt = M('users').where('id=?',(uid,)).getField('salt') + return md5(md5(password+'_bt.cn')+salt) + #取通用对象 class dict_obj: def __contains__(self, key): diff --git a/class/system.py b/class/system.py index 9106ad3f..a2a73bc0 100644 --- a/class/system.py +++ b/class/system.py @@ -50,54 +50,74 @@ def GetConcifInfo(self,get=None): serviceName = 'nginx' tmp['setup'] = False phpversion = "54" - phpport = '888'; - pstatus = False; - pauth = False; + phpport = '888' + pstatus = False + pauth = False if os.path.exists(self.setupPath+'/nginx'): data['webserver'] = 'nginx' serviceName = 'nginx' - tmp['setup'] = os.path.exists(self.setupPath +'/nginx/sbin/nginx'); - configFile = self.setupPath + '/nginx/conf/nginx.conf'; + tmp['setup'] = os.path.exists(self.setupPath +'/nginx/sbin/nginx') + configFile = self.setupPath + '/nginx/conf/nginx.conf' try: if os.path.exists(configFile): - conf = public.readFile(configFile); - rep = "listen\s+([0-9]+)\s*;"; - rtmp = re.search(rep,conf); + conf = public.readFile(configFile) + rep = "listen\s+([0-9]+)\s*;" + rtmp = re.search(rep,conf) if rtmp: - phpport = rtmp.groups()[0]; + phpport = rtmp.groups()[0] if conf.find('AUTH_START') != -1: pauth = True; if conf.find(self.setupPath + '/stop') == -1: pstatus = True; - configFile = self.setupPath + '/nginx/conf/enable-php.conf'; - conf = public.readFile(configFile); - rep = "php-cgi-([0-9]+)\.sock"; - rtmp = re.search(rep,conf); + configFile = self.setupPath + '/nginx/conf/enable-php.conf' + conf = public.readFile(configFile) + rep = "php-cgi-([0-9]+)\.sock" + rtmp = re.search(rep,conf) if rtmp: - phpversion = rtmp.groups()[0]; + phpversion = rtmp.groups()[0] except: pass; elif os.path.exists(self.setupPath+'/apache'): data['webserver'] = 'apache' serviceName = 'httpd' - tmp['setup'] = os.path.exists(self.setupPath +'/apache/bin/httpd'); - configFile = self.setupPath + '/apache/conf/extra/httpd-vhosts.conf'; + tmp['setup'] = os.path.exists(self.setupPath +'/apache/bin/httpd') + configFile = self.setupPath + '/apache/conf/extra/httpd-vhosts.conf' try: if os.path.exists(configFile): - conf = public.readFile(configFile); - rep = "php-cgi-([0-9]+)\.sock"; - rtmp = re.search(rep,conf); + conf = public.readFile(configFile) + rep = "php-cgi-([0-9]+)\.sock" + rtmp = re.search(rep,conf) if rtmp: - phpversion = rtmp.groups()[0]; - rep = "Listen\s+([0-9]+)\s*\n"; - rtmp = re.search(rep,conf); + phpversion = rtmp.groups()[0] + rep = "Listen\s+([0-9]+)\s*\n" + rtmp = re.search(rep,conf) if rtmp: - phpport = rtmp.groups()[0]; + phpport = rtmp.groups()[0] if conf.find('AUTH_START') != -1: pauth = True; if conf.find(self.setupPath + '/stop') == -1: pstatus = True; except: pass - + elif os.path.exists('/usr/local/lsws/bin/lswsctrl'): + data['webserver'] = 'openlitespeed' + serviceName = 'openlitespeed' + tmp['setup'] = os.path.exists(self.setupPath +'/apache/bin/httpd') + configFile = '/usr/local/lsws/bin/lswsctrl' + try: + if os.path.exists(configFile): + conf = public.readFile('/www/server/panel/vhost/openlitespeed/detail/phpmyadmin.conf') + rep = "/usr/local/lsws/lsphp(\d+)/bin/lsphp" + rtmp = re.search(rep,conf) + if rtmp: + phpversion = rtmp.groups()[0] + conf = public.readFile('/www/server/panel/vhost/openlitespeed/listen/888.conf') + rep = "address\s+\*\:(\d+)" + rtmp = re.search(rep,conf) + if rtmp: + phpport = rtmp.groups()[0] + if conf.find('AUTH_START') != -1: pauth = True + if conf.find(self.setupPath + '/stop') == -1: pstatus = True + except: + pass tmp['type'] = data['webserver'] tmp['version'] = public.readFile(self.setupPath + '/'+data['webserver']+'/version.pl'); diff --git a/class/userlogin.py b/class/userlogin.py index 2ad2154e..2af3a70d 100644 --- a/class/userlogin.py +++ b/class/userlogin.py @@ -7,7 +7,7 @@ # | Author: hwliang # +------------------------------------------------------------------- -import public,os,sys,db,time,json +import public,os,sys,db,time,json,re from BTPanel import session,cache,json_header from flask import request,redirect,g @@ -19,14 +19,13 @@ def request_post(self,post): self.error_num(False) if self.limit_address('?') < 1: return public.returnJson(False,'LOGIN_ERR_LIMIT'),json_header - post.username = post.username.strip() - password = public.md5(post.password.strip()) + sql = db.Sql() - user_list = sql.table('users').field('id,username,password').select() + user_list = sql.table('users').field('id,username,password,salt').select() userInfo = None for u_info in user_list: - if u_info['username'] == post.username: + if public.md5(u_info['username']) == post.username: userInfo = u_info if 'code' in session: if session['code'] and not 'is_verify_password' in session: @@ -35,14 +34,18 @@ def request_post(self,post): public.WriteLog('TYPE_LOGIN','LOGIN_ERR_CODE',('****','****',public.GetClientIp())) return public.returnJson(False,'CODE_ERR'),json_header try: - s_pass = public.md5(public.md5(userInfo['password'] + '_bt.cn')) - if userInfo['username'] != post.username or s_pass != password: + if not userInfo['salt']: + public.chdck_salt() + userInfo = sql.table('users').where('id=?',(userInfo['id'],)).field('id,username,password,salt').find() + + password = public.md5(post.password.strip() + userInfo['salt']) + if public.md5(userInfo['username']) != post.username or userInfo['password'] != password: public.WriteLog('TYPE_LOGIN','LOGIN_ERR_PASS',('****','******',public.GetClientIp())) num = self.limit_address('+') return public.returnJson(False,'LOGIN_USER_ERR',(str(num),)),json_header _key_file = "/www/server/panel/data/two_step_auth.txt" if hasattr(post,'vcode'): - if self.limit_address('?',v="vcode") < 1: return public.returnJson(False,'您多次验证失败,禁止10分钟'),json_header + if self.limit_address('?',v="vcode") < 1: return public.returnJson(False,'You have failed verification many times, forbidden for 10 minutes'),json_header import pyotp secret_key = public.readFile(_key_file) if not secret_key: @@ -82,6 +85,8 @@ def request_post(self,post): def request_tmp(self,get): try: if not hasattr(get,'tmp_token'): return public.returnJson(False,'INIT_ARGS_ERR'),json_header + if len(get.tmp_token) != 64: return public.returnJson(False,'INIT_ARGS_ERR'),json_header + if not re.match(r"^\w+$",get.tmp_token):return public.returnJson(False,'INIT_ARGS_ERR'),json_header save_path = '/www/server/panel/config/api.json' data = json.loads(public.ReadFile(save_path)) if not 'tmp_token' in data or not 'tmp_time' in data: return public.returnJson(False,'VERIFICATION_FAILED'),json_header @@ -91,7 +96,7 @@ def request_tmp(self,get): session['login'] = True session['username'] = userInfo['username'] session['tmp_login'] = True - public.WriteLog('TYPE_LOGIN','LOGIN_SUCCESS',(userInfo['username'],public.GetClientIp())) + public.WriteLog('TYPE_LOGIN','LOGIN_SUCCESS',(userInfo['username'],public.GetClientIp()+ ":" + str(request.environ.get('REMOTE_PORT')))) self.limit_address('-') cache.delete('panelNum') cache.delete('dologin') diff --git a/task.py b/task.py index d61f2fbc..bd584552 100644 --- a/task.py +++ b/task.py @@ -45,7 +45,6 @@ def ExecShell(cmdstring, cwd=None, timeout=None, shell=True): import datetime import subprocess import time - subprocess.Popen('echo > ' + logPath, cwd=cwd, stdin=subprocess.PIPE, shell=shell, bufsize=4096) sub = subprocess.Popen(cmdstring+' &> '+logPath, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096) while sub.poll() is None: @@ -434,7 +433,6 @@ def check502Task(): # 检查面板证书是否有更新 def check_panel_ssl(): - # info_file="" try: while True: lets_info = public.readFile("/www/server/panel/ssl/lets.info") diff --git a/tools.py b/tools.py index 2b41470b..b4f80977 100644 --- a/tools.py +++ b/tools.py @@ -67,7 +67,7 @@ def set_mysql_root(password): def set_panel_pwd(password,ncli = False): import db sql = db.Sql() - result = sql.table('users').where('id=?',(1,)).setField('password',public.md5(password)) + result = sql.table('users').where('id=?',(1,)).setField('password',public.password_salt(public.md5(password),uid=1)) username = sql.table('users').where('id=?',(1,)).getField('username') if ncli: print("|-%s: " % public.GetMsg("USER_NAME") + username) @@ -159,12 +159,30 @@ def PackagePanel(): ''' os.system(command) print('\t\033[1;32m[done]\033[0m') - public.writeFile('/www/server/panel/install.pl',"True") + + + print("|-Please select user initialization method:") + print("="*50) + print(" (1) Display the initialization page when accessing the panel page") + print(" (2) A new account password is automatically generated randomly when first started") + print("="*50) + p_input = input("Please select the initialization method (default: 1):") + print(p_input) + if p_input in [2,'2']: + public.writeFile('/www/server/panel/aliyun.pl',"True") + s_file = '/www/server/panel/install.pl' + if os.path.exists(s_file): os.remove(s_file) + public.M('config').where("id=?",('1',)).setField('status',1) + else: + public.writeFile('/www/server/panel/install.pl',"True") + public.M('config').where("id=?",('1',)).setField('status',0) port = public.readFile('data/port.pl').strip() - public.M('config').where("id=?",('1',)).setField('status',0) print('========================================================') - print('\033[1;32m|-'+public.GetMsg("PANEL_TIPS")+'\033[0m') - print('\033[1;41m|-'+public.GetMsg("PANEL_INIT_ADD")+': http://{SERVERIP}:'+port+'/install\033[0m') + print('\033[1;32m|-The panel packaging is successful, please do not log in to the panel to do any other operations!\033[0m') + if not p_input in [2,'2']: + print('\033[1;41m|-Panel initialization address:http://{SERVERIP}:'+port+'/install\033[0m') + else: + print('\033[1;41m|-Get the initial account password command:bt default \033[0m') #清空正在执行的任务 def CloseTask(): From 32cc87c132835cd5a2f09a93547846a4c63b7bef Mon Sep 17 00:00:00 2001 From: jose Date: Sat, 15 Aug 2020 18:02:15 +0800 Subject: [PATCH 20/21] v6.8.2 --- BTPanel/__init__.py | 206 ++- BTPanel/static/ace/ace.editor.config.json | 2 +- BTPanel/static/css/site.css | 284 ++++- BTPanel/static/js/aes.js | 13 + BTPanel/static/js/control.js | 71 +- BTPanel/static/js/files.js | 2 +- BTPanel/static/js/index.js | 264 +++- BTPanel/static/js/public.js | 125 +- BTPanel/static/js/public_backup.js | 112 +- BTPanel/static/js/site.js | 100 +- BTPanel/static/js/soft.js | 42 +- BTPanel/static/language/English/log.json | 9 +- BTPanel/static/language/English/public.json | 129 +- BTPanel/static/language/English/template.json | 1 + BTPanel/templates/default/control.html | 10 +- BTPanel/templates/default/database.html | 8 +- BTPanel/templates/default/index.html | 13 +- BTPanel/templates/default/layout.html | 70 +- class/acme_v2.py | 252 ++-- class/ajax.py | 164 ++- class/common.py | 14 +- class/config.py | 37 +- class/crontab.py | 6 +- class/data.py | 3 - class/database.py | 2 + class/fastcgiClient.py | 399 ++++++ class/files.py | 118 +- class/http_requests.py | 14 +- class/jobs.py | 59 +- class/panelPHP.py | 544 +++++++- class/panelPlugin.py | 38 +- class/panelPmd.py | 189 +++ class/panelRedirect.py | 2 +- class/panelSite.py | 63 +- class/panelTask.py | 10 +- class/panelWarning.py | 174 +++ class/panel_restore.py | 184 +++ class/public.py | 171 ++- class/safe_warning/sw_database_backup.py | 56 + class/safe_warning/sw_debug_mode.py | 40 + class/safe_warning/sw_dir_mode.py | 82 ++ class/safe_warning/sw_files_recycle_bin.py | 39 + class/safe_warning/sw_firewall_open.py | 50 + class/safe_warning/sw_login_message.py | 43 + class/safe_warning/sw_login_user.py | 67 + class/safe_warning/sw_memcached_port.py | 50 + class/safe_warning/sw_mysql_port.py | 58 + class/safe_warning/sw_panel_pass.py | 1117 +++++++++++++++++ class/safe_warning/sw_panel_path.py | 65 + class/safe_warning/sw_panel_port.py | 43 + class/safe_warning/sw_ping.py | 47 + class/safe_warning/sw_redis_port.py | 1097 ++++++++++++++++ class/safe_warning/sw_site_spath.py | 93 ++ class/safe_warning/sw_site_ssl.py | 52 + class/safe_warning/sw_site_ssl_expire.py | 77 ++ class/safe_warning/sw_ssh_port.py | 91 ++ class/system.py | 2 +- class/wxapp.py | 10 + 58 files changed, 6519 insertions(+), 564 deletions(-) create mode 100644 BTPanel/static/js/aes.js create mode 100644 class/fastcgiClient.py create mode 100644 class/panelPmd.py create mode 100644 class/panelWarning.py create mode 100644 class/panel_restore.py create mode 100644 class/safe_warning/sw_database_backup.py create mode 100644 class/safe_warning/sw_debug_mode.py create mode 100644 class/safe_warning/sw_dir_mode.py create mode 100644 class/safe_warning/sw_files_recycle_bin.py create mode 100644 class/safe_warning/sw_firewall_open.py create mode 100644 class/safe_warning/sw_login_message.py create mode 100644 class/safe_warning/sw_login_user.py create mode 100644 class/safe_warning/sw_memcached_port.py create mode 100644 class/safe_warning/sw_mysql_port.py create mode 100644 class/safe_warning/sw_panel_pass.py create mode 100644 class/safe_warning/sw_panel_path.py create mode 100644 class/safe_warning/sw_panel_port.py create mode 100644 class/safe_warning/sw_ping.py create mode 100644 class/safe_warning/sw_redis_port.py create mode 100644 class/safe_warning/sw_site_spath.py create mode 100644 class/safe_warning/sw_site_ssl.py create mode 100644 class/safe_warning/sw_site_ssl_expire.py create mode 100644 class/safe_warning/sw_ssh_port.py diff --git a/BTPanel/__init__.py b/BTPanel/__init__.py index ba6686fc..d484b008 100644 --- a/BTPanel/__init__.py +++ b/BTPanel/__init__.py @@ -13,10 +13,11 @@ import re import uuid import threading +import socket os.chdir('/www/server/panel/') sys.path.insert(0,'class/') import public -from flask import Flask,current_app,session,render_template,send_file,request,redirect,g,url_for,make_response,render_template_string,abort +from flask import Flask,current_app,session,render_template,send_file,request,redirect,g,url_for,make_response,render_template_string,abort,stream_with_context,Response as Resp from flask_session import Session try: from werkzeug.contrib.cache import SimpleCache @@ -79,7 +80,7 @@ app.config['SESSION_PERMANENT'] = True app.config['SESSION_USE_SIGNER'] = True app.config['SESSION_KEY_PREFIX'] = 'BT_:' -app.config['SESSION_COOKIE_NAME'] = "BT_PANEL_6" +app.config['SESSION_COOKIE_NAME'] = "SESSIONID" app.config['PERMANENT_SESSION_LIFETIME'] = 86400 Session(app) @@ -144,19 +145,60 @@ '/down', '/api', '/tips', - '/message' + '/message', + '/warning' ] if admin_path in admin_path_checks: admin_path = '/bt' -@app.route('/service_status',methods = method_all) +@app.route('/service_status',methods = method_get) def service_status(): return 'True' +@app.route('/phpmyadmin',methods = method_all) +@app.route('/phpmyadmin/',methods = method_all) +@app.route('/phpmyadmin/',methods = method_all) +def phpmyadmin(puri = None): + comReturn = comm.local() + if comReturn: return comReturn + import panelPHP + p = panelPHP.panelPHP() + document_root = '/www/server/phpmyadmin/pma/' + sock = p.start(puri,document_root,'/phpmyadmin/') + + #如果是响应体则直接返回 + if isinstance(sock,Resp): + return sock + + headers_data = p.get_header_data(sock) + status,headers,bdata = p.format_header_data(headers_data) + return Response(p.resp_sock(sock,bdata),headers=headers,status=status) + + +@app.route('/adminer',methods = method_all) +@app.route('/adminer/',methods = method_all) +@app.route('/adminer/',methods = method_all) +def adminer(puri = None): + comReturn = comm.local() + if comReturn: return comReturn + import panelPHP + p = panelPHP.panelPHP() + document_root = '/www/server/adminer/' + + sock = p.start(puri,document_root,'/adminer/') + + #如果是响应体则直接返回 + if isinstance(sock,Resp):return sock + + headers_data = p.get_header_data(sock) + status,headers,bdata = p.format_header_data(headers_data) + return Response(p.resp_sock(sock,bdata),headers=headers,status=status) + + @sockets.route('/webssh') def webssh(ws): if not check_login(): session.clear() - ws.send('server_response',"Panel session is lost, please re-login panel!") + ws.send('server_response',"SSH_ERROR") return None if not 'ssh_obj' in session: import ssh_terminal @@ -174,7 +216,7 @@ def webssh(ws): session['ssh_obj'].run(ws,session['ssh_info']) -@app.route('/term_open',methods=method_get) +@app.route('/term_open',methods=method_all) def term_open(): comReturn = comm.local() if comReturn: return comReturn @@ -183,7 +225,7 @@ def term_open(): key = 'ssh_' + args['host'] if key in session: return public.getJson(session[key]),json_header - return public.returnMsg(False,'Acquisition failed!') + return public.returnMsg(False,'SSH_INFO_ERROR') session['ssh_info'] = json.loads(args.data) key = 'ssh_' + session['ssh_info']['host'] session[key] = session['ssh_info'] @@ -194,7 +236,7 @@ def term_open(): else: if os.path.exists(s_file): os.remove(s_file) if 'ssh_obj' in session: session['ssh_obj']._ssh_info = session['ssh_info'] - return public.returnJson(True,'Successful setup!') + return public.returnJson(True,'SET_SUCCESS') @app.route('/reload_mod',methods=method_all) def reload_mod(): @@ -206,21 +248,28 @@ def reload_mod(): mod_name = args.mod_name result = public.reload_mod(mod_name) if result: return public.returnJson(True,result),json_header - return public.returnJson(False,'Reload failure!'),json_header + return public.returnJson(False,'INIT_RELOAD_ERR'),json_header + @app.before_request def request_check(): #路由和URI长度过滤 - if len(request.path) > 64: return abort(403) - if len(request.url) > 256: return abort(403) + if request.path.find('/adminer/') != -1: + return + if request.path.find('/phpmyadmin/') == -1: + if len(request.path) > 128: return abort(403) + if len(request.url) > 1024: return abort(403) + else: + if len(request.path) > 512: return abort(403) + return if request.path in ['/service_status']: return #POST参数过滤 if request.path in ['/login','/safe','/hook','/public','/down','/get_app_bind_status','/check_bind']: pdata = request.form.to_dict() for k in pdata.keys(): - if len(k) > 32: return abort(403) - if len(pdata[k]) > 128: return abort(403) + if len(k) > 48: return abort(403) + if len(pdata[k]) > 256: return abort(403) if not request.path in ['/safe','/hook','/public','/mail_sys','/down']: ip_check = public.check_ip_panel() @@ -235,7 +284,7 @@ def request_check(): if public.is_local(): not_networks = ['uninstall_plugin','install_plugin','UpdatePanel'] if request.args.get('action') in not_networks: - return public.returnJson(False,'This feature is not available in offline mode!'),json_header + return public.returnJson(False,'INIT_REQUEST_CHECK_LOCAL_ERR'),json_header if app.config['BASIC_AUTH_OPEN']: if request.path in ['/public','/download','/mail_sys','/hook','/down','/check_bind','/get_app_bind_status']: return @@ -270,7 +319,6 @@ def home(): data['ftpCount'] = public.M('ftps').count() data['databaseCount'] = public.M('databases').count() data['lan'] = public.GetLan('index') - data['724'] = public.format_date("%m%d") == '0724' public.auto_backup_panel() return render_template( 'index.html',data = data) @@ -305,7 +353,8 @@ def login(): for v in v_list: pv = request.form.get(v,'').strip() if v == 'cdn_url': - if len(pv) > 32: return public.returnMsg(False,'Wrong parameter length!') + if len(pv) > 32: return public.returnMsg(False,'INPUT_ARGS_ERR'),json_header + if not re.match(r"^[\w\.-]+$",pv): public.returnJson(False,'INPUT_ARGS_ERR'),json_header continue if not pv: continue @@ -313,13 +362,14 @@ def login(): if v == 'code': p_len = 4 if v == 'vcode': p_len = 6 if len(pv) != p_len: - return public.returnJson(False,'Wrong parameter length'),json_header + if v == 'code': return public.returnJson(False,'V_CODE_LEN_ERR'),json_header + return public.returnJson(False,'INPUT_ARGS_ERR'),json_header if not re.match(r"^\w+$",pv): - return public.returnJson(False,'Wrong parameter format'),json_header + return public.returnJson(False,'INPUT_ARGS_ERR'),json_header for n in request.form.keys(): if not n in v_list: - return public.returnJson(False,'You cannot have extra parameters in the login parameters'),json_header + return public.returnJson(False,'EXTRA_PARAMETER'),json_header get = get_input() import userlogin @@ -334,10 +384,16 @@ def login(): if session['login'] != False: session['login'] = False cache.set('dologin',True) - public.WriteLog('User LogOut','Client: {}, has manually exited the panel'.format(public.GetClientIp()+ ":" + str(request.environ.get('REMOTE_PORT')))) + public.WriteLog('TYPE_LOGOUT','MANUALLY_LOGOUT', (format(public.GetClientIp()+ ":" + str(request.environ.get('REMOTE_PORT'))),)) session.clear() session_path = r'/dev/shm/session_py' + str(sys.version_info[0]) if os.path.exists(session_path): public.ExecShell("rm -f " + session_path + '/*') + sess_file = 'data/sess_files/' + public.get_sess_key() + if os.path.exists(sess_file): + try: + os.remove(sess_file) + except: + pass return redirect(login_path) if is_auth_path: @@ -351,8 +407,6 @@ def login(): if request.method == method_post[0]: result = userlogin.userlogin().request_post(get) - if result == "1": - return result return is_login(result) if request.method == method_get[0]: @@ -474,14 +528,14 @@ def get_phpmyadmin_dir(): if session['webserver'] == 'nginx': filename =public.GetConfigValue('setup_path') + '/nginx/conf/nginx.conf' conf = public.readFile(filename) - rep = "listen\s+([0-9]+)\s*;" + rep = r"listen\s+([0-9]+)\s*;" rtmp = re.search(rep,conf) if rtmp: phpport = rtmp.groups()[0] if session['webserver'] == 'apache': filename = public.GetConfigValue('setup_path') + '/apache/conf/extra/httpd-vhosts.conf' conf = public.readFile(filename) - rep = "Listen\s+([0-9]+)\s*\n" + rep = r"Listen\s+([0-9]+)\s*\n" rtmp = re.search(rep,conf) if rtmp: phpport = rtmp.groups()[0] @@ -489,7 +543,7 @@ def get_phpmyadmin_dir(): filename = public.GetConfigValue('setup_path') + '/panel/vhost/openlitespeed/listen/888.conf' public.writeFile('/tmp/2',filename) conf = public.readFile(filename) - rep = "address\s*\*\:\s*(\d+)" + rep = r"address\s*\*\:\s*(\d+)" rtmp = re.search(rep,conf) if rtmp: phpport = rtmp.groups()[0] @@ -630,6 +684,16 @@ def panel_password(pdata=None): return publicObject(dataObject, defs, None, pdata) +@app.route('/warning', methods=method_all) +def panel_warning(pdata=None): + comReturn = comm.local() + if comReturn: return comReturn + import panelWarning + dataObject = panelWarning.panelWarning() + defs = ('get_list', 'set_ignore', 'check_find') + return publicObject(dataObject, defs, None, pdata) + + @app.route('/bak', methods=method_all) def backup_bak(pdata=None): comReturn = comm.local() @@ -664,7 +728,7 @@ def files(pdata = None): return render_template('files.html',data=data) import files filesObject = files.files() - defs = ('fix_permissions','get_all_back','restore_path_permissions','del_path_premissions','get_path_premissions','back_path_permissions', + defs = ('get_progress','restore_website','fix_permissions','get_all_back','restore_path_permissions','del_path_premissions','get_path_premissions','back_path_permissions', 'CheckExistsFiles','GetExecLog','GetSearch','ExecShell','GetExecShellMsg','exec_git','exec_composer','create_download_url', 'UploadFile','GetDir','CreateFile','CreateDir','DeleteDir','DeleteFile','get_download_url_list','remove_download_url','modify_download_url', 'CopyFile','CopyDir','MvFile','GetFileBody','SaveFileBody','Zip','UnZip','get_download_url_find', @@ -727,8 +791,8 @@ def config(pdata = None): if c_obj.get_ipv6_listen(None): data['ipv6'] = 'checked' if c_obj.get_token(None)['open']: data['api'] = 'checked' data['basic_auth'] = c_obj.get_basic_auth_stat(None) - data['basic_auth']['value'] = public.GetMsg("CLOSE") - if data['basic_auth']['open']: data['basic_auth']['value'] = public.GetMsg("OPEN") + data['basic_auth']['value'] = public.getMsg('CLOSED') + if data['basic_auth']['open']: data['basic_auth']['value'] = public.getMsg('OPENED') data['debug'] = '' if app.config['DEBUG']: data['debug'] = 'checked' data['is_local'] = '' @@ -898,7 +962,7 @@ def panel_public(): if type(checks) != bool or not checks: return public.getJson(checks),json_header data = public.getJson(eval('pluwx.'+get.fun+'(get)')) return data,json_header - + if get.name != 'app': return abort(404) import panelPlugin plu = panelPlugin.panelPlugin() @@ -941,9 +1005,9 @@ def panel_other(name=None,fun = None,stype=None): if not name: name = 'coll' if not public.path_safe_check("%s/%s/%s" % (name,fun,stype)): return abort(404) - if name.find('./') != -1 or not re.match("^[\w-]+$",name): return abort(404) - if not name: return public.returnJson(False,public.GetMsg("PLUGIN_INPUT_A")),json_header - p_path = '/www/server/panel/plugin/' + name + if name.find('./') != -1 or not re.match(r"^[\w-]+$",name): return abort(404) + if not name: return public.returnJson(False,'PLUGIN_INPUT_ERR'),json_header + p_path = os.path.join('/www/server/panel/plugin/', name) if not os.path.exists(p_path): return abort(404) #是否响插件应静态文件 @@ -951,7 +1015,7 @@ def panel_other(name=None,fun = None,stype=None): if stype.find('./') != -1 or not os.path.exists(p_path + '/static'): return abort(404) s_file = p_path + '/static/' + stype if s_file.find('..') != -1: return abort(404) - if not re.match("^[\w\./-]+$",s_file): return abort(404) + if not re.match(r"^[\w\./-]+$",s_file): return abort(404) if not public.path_safe_check(s_file): return abort(404) if not os.path.exists(s_file): return abort(404) return send_file(s_file,conditional=True,add_etags=True) @@ -1067,12 +1131,16 @@ def install(): elif request.method == method_post[0]: if not os.path.exists('install.pl'): return redirect(ret_login) get = get_input() - if not hasattr(get,'bt_username'): return public.GetMsg("LOGIN_USER_EMPTY") - if not get.bt_username: return public.GetMsg("LOGIN_USER_EMPTY") - if not hasattr(get,'bt_password1'): return public.GetMsg("LOGIN_USER_EMPTY") - if not get.bt_password1: return public.GetMsg("LOGIN_USER_EMPTY") - if get.bt_password1 != get.bt_password2: return public.GetMsg("USER_PASSWORD_CHECK") - public.M('users').where("id=?",(1,)).save('username,password',(get.bt_username,public.md5(get.bt_password1.strip()))) + if not hasattr(get,'bt_username'): return public.getMsg('INSTALL_USER_EMPTY') + if not get.bt_username: return public.getMsg('INSTALL_USER_EMPTY') + if not hasattr(get,'bt_password1'): return public.getMsg('INSTALL_PASS_EMPTY') + if not get.bt_password1: return public.getMsg('INSTALL_PASS_EMPTY') + if get.bt_password1 != get.bt_password2: return public.getMsg('INSTALL_PASS_CHECK') + public.M('users').where("id=?",(1,)).save('username,password', + (get.bt_username, + public.password_salt(public.md5(get.bt_password1.strip()),uid=1) + ) + ) os.remove('install.pl') public.M('config').where("id=?",('1',)).setField('status',1) data = {} @@ -1161,7 +1229,10 @@ def get_dir_down(filename,token,find): pdata['token'] = token pdata['src_path'] = find['filename'] pdata['to_path'] = to_path - pdata['expire'] = public.format_date(times=find['expire']) + if find['expire'] > (time.time() + (86400 * 365 * 10)): + pdata['expire'] = public.format_date(times=find['expire']) + else: + pdata['expire'] = public.getMsg('NEVER_EXPIRES') pdata['filename'] = (find['filename'].split('/')[-1] + '/' + to_path).strip('/') return render_template('down.html',data = pdata,to_size=public.to_size) @@ -1188,11 +1259,11 @@ def down(token=None,fname=None): args = get_input() if 'file_password' in args: if not re.match(r"^\w+$",args.file_password): - return public.ReturnJson(False,'Wrong password!'),json_header + return public.ReturnJson(False,'WRONG_PASSWD'),json_header if re.match(r"^\d+$",args.file_password): args.file_password += '.0' if args.file_password != str(find['password']): - return public.ReturnJson(False,'Wrong password!'),json_header + return public.ReturnJson(False,'WRONG_PASSWD'),json_header session[token] = 1 session['down'] = True else: @@ -1280,7 +1351,7 @@ def check_csrf(): def publicObject(toObject,defs,action=None,get = None): if 'request_token' in session and 'login' in session: - if not check_csrf(): return public.ReturnJson(False,'Csrf-Token error.'),json_header + if not check_csrf(): return public.ReturnJson(False,'INIT_CSRF_ERR'),json_header if not get: get = get_input() if action: get.action = action @@ -1296,8 +1367,7 @@ def publicObject(toObject,defs,action=None,get = None): get.dfile = get.dfile.replace('//','/').replace('\\','/') if hasattr(toObject,'site_path_check'): - if not toObject.site_path_check(get): return public.ReturnJson(False,'Excessive operation!'),json_header - + if not toObject.site_path_check(get): return public.ReturnJson(False,'INIT_ACCEPT_NOT'),json_header p = run_exec() result = p.run(toObject,defs,get) del p @@ -1317,7 +1387,9 @@ def get_pd(): tmp = -1 try: import panelPlugin - tmp1 = panelPlugin.panelPlugin().get_cloud_list() + get = public.dict_obj() + get.init = 1 + tmp1 = panelPlugin.panelPlugin().get_cloud_list(get) except: tmp1 = None if tmp1: @@ -1409,17 +1481,19 @@ def get_pd(): @app.errorhandler(404) def notfound(e): - errorStr = public.ReadFile('./BTPanel/templates/' + public.GetConfigValue('template') + '/error.html') - try: - errorStr = errorStr.format(public.getMsg('PAGE_ERR_404_TITLE'), - public.getMsg('PAGE_ERR_404_H1'), - public.getMsg('PAGE_ERR_404_P1'), - public.getMsg('NAME'), - public.getMsg('PAGE_ERR_HELP')) - except IndexError: pass - return errorStr,404 + errorStr = ''' +404 Not Found + +

              404 Not Found

              +
              server
              + +''' + headers={ + "Content-Type":"text/html" + } + return Response(errorStr,status=404,headers=headers) -@app.errorhandler(500) +#@app.errorhandler(500) def internalerror(e): #if str(e).find('Permanent Redirect') != -1: return e errorStr = public.ReadFile('./BTPanel/templates/' + public.GetConfigValue('template') + '/error.html') @@ -1431,7 +1505,10 @@ def internalerror(e): public.getMsg('NAME'), public.getMsg('PAGE_ERR_HELP')) else: - errorStr = errorStr.format(public.getMsg('PAGE_ERR_500_TITLE'),str(e),'
              '+public.get_error_info() + '
              ','The above debugging information is only displayed in developer mode','Version: ' + public.version()) + errorStr = errorStr.format(public.getMsg('PAGE_ERR_500_TITLE'), + str(e), + '
              '+public.get_error_info() + '
              ', + public.getMsg('INIT_DEBUG_INFO'),public.getMsg('INIT_VERSION_LAST') + public.version()) except IndexError:pass return errorStr,500 @@ -1443,9 +1520,17 @@ def get_input(): for key in request.args.keys(): data[key] = str(request.args.get(key,'')) try: + x_token = request.headers.get('x-http-token') + if x_token: + aes_pwd = x_token[:8] + x_token[40:48] + for key in request.form.keys(): if key in exludes: continue data[key] = str(request.form.get(key,'')) + if x_token: + if len(data[key]) > 5: + if data[key][:6] == 'BT-CRT': + data[key] = public.aes_decrypt(data[key][6:],aes_pwd) except: try: post = request.form.to_dict() @@ -1484,4 +1569,11 @@ def run(self,toObject,defs,get): result = public.ReturnJson(False,'ARGS_ERR'),json_header if g.is_aes: result = public.aes_encrypt(result[0],g.aes_key),json_header + else: + if os.path.exists('pyenv/bin/python'): + if not os.path.exists('data/debug.pl'): + x_token = request.headers.get('x-http-token') + if x_token: + aes_pwd = x_token[:8] + x_token[40:48] + result = "BT-CRT"+public.aes_encrypt(result[0],aes_pwd),{'Content-Type':'text/plain; charset=utf-8'} return result \ No newline at end of file diff --git a/BTPanel/static/ace/ace.editor.config.json b/BTPanel/static/ace/ace.editor.config.json index 3bd23379..22623a1d 100644 --- a/BTPanel/static/ace/ace.editor.config.json +++ b/BTPanel/static/ace/ace.editor.config.json @@ -1 +1 @@ -{"supportedModes":{"Apache_Conf":["^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd"],"BatchFile":["bat|cmd"],"C_Cpp":["cpp|c|cc|cxx|h|hh|hpp|ino"],"CSharp":["cs"],"CSS":["css"],"Dockerfile":["^Dockerfile"],"golang":["go"],"HTML":["html|htm|xhtml|vue|we|wpy"],"Java":["java"],"JavaScript":["js|jsm|jsx"],"JSON":["json"],"JSP":["jsp"],"LESS":["less"],"Lua":["lua"],"Makefile":["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"],"Markdown":["md|markdown"],"MySQL":["mysql"],"Nginx":["nginx|conf"],"INI":["ini|conf|cfg|prefs"],"ObjectiveC":["m|mm"],"Perl":["pl|pm"],"Perl6":["p6|pl6|pm6"],"pgSQL":["pgsql"],"PHP_Laravel_blade":["blade.php"],"PHP":["php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module"],"Powershell":["ps1"],"Python":["py"],"R":["r"],"Ruby":["rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile"],"Rust":["rs"],"SASS":["sass"],"SCSS":["scss"],"SH":["sh|bash|^.bashrc"],"SQL":["sql"],"SQLServer":["sqlserver"],"Swift":["swift"],"Text":["txt"],"Typescript":["ts|typescript|str"],"VBScript":["vbs|vb"],"Verilog":["v|vh|sv|svh"],"XML":["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml"],"YAML":["yaml|yml"],"Compress":["tar|zip|7z|rar|gz|arj|z"],"images":["icon|jpg|jpeg|png|bmp|gif|tif|emf"]},"nameOverrides":{"ObjectiveC":"Objective-C","CSharp":"C#","golang":"Go","C_Cpp":"C and C++","PHP_Laravel_blade":"PHP (Blade Template)","Perl6":"Perl 6"},"encodingList":["ASCII","UTF-8","GBK","GB2312","BIG5"],"themeList":["chrome","monokai"],"aceEditor":{"editorTheme":"monokai","fontSize":13,"softLabel":false,"useSoftTabs":false,"tabSize":4,"wrap":true,"enableSnippets":true,"enableLiveAutocompletion":true,"highlightActiveLine":true,"highlightSelectedWord":true,"animatedScroll":false,"showInvisibles":false,"showFoldWidgets":true,"showLineNumbers":true,"showGutter":true,"displayIndentGuides":false},"showUpdate":true} \ No newline at end of file +{"supportedModes":{"Apache_Conf":["^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd"],"BatchFile":["bat|cmd"],"C_Cpp":["cpp|c|cc|cxx|h|hh|hpp|ino"],"CSharp":["cs"],"CSS":["css"],"Dockerfile":["^Dockerfile"],"golang":["go"],"HTML":["html|htm|xhtml|vue|we|wpy"],"Java":["java"],"JavaScript":["js|jsm|jsx"],"JSON":["json"],"JSP":["jsp"],"LESS":["less"],"Lua":["lua"],"Makefile":["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"],"Markdown":["md|markdown"],"MySQL":["mysql"],"Nginx":["nginx|conf"],"INI":["ini|conf|cfg|prefs"],"ObjectiveC":["m|mm"],"Perl":["pl|pm"],"Perl6":["p6|pl6|pm6"],"pgSQL":["pgsql"],"PHP_Laravel_blade":["blade.php"],"PHP":["php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module"],"Powershell":["ps1"],"Python":["py"],"R":["r"],"Ruby":["rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile"],"Rust":["rs"],"SASS":["sass"],"SCSS":["scss"],"SH":["sh|bash|^.bashrc"],"SQL":["sql"],"SQLServer":["sqlserver"],"Swift":["swift"],"Text":["txt"],"Typescript":["ts|typescript|str"],"VBScript":["vbs|vb"],"Verilog":["v|vh|sv|svh"],"XML":["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml"],"YAML":["yaml|yml"],"Compress":["tar|zip|7z|rar|gz|arj|z"],"images":["icon|jpg|jpeg|png|bmp|gif|tif|emf"]},"nameOverrides":{"ObjectiveC":"Objective-C","CSharp":"C#","golang":"Go","C_Cpp":"C and C++","PHP_Laravel_blade":"PHP (Blade Template)","Perl6":"Perl 6"},"encodingList":["ASCII","UTF-8","GBK","GB2312","BIG5"],"themeList":["chrome","monokai"],"aceEditor":{"editorTheme":"monokai","fontSize":13,"softLabel":false,"useSoftTabs":true,"tabSize":"4","wrap":true,"enableSnippets":true,"enableLiveAutocompletion":true,"highlightActiveLine":true,"highlightSelectedWord":true,"animatedScroll":false,"showInvisibles":false,"showFoldWidgets":true,"showLineNumbers":true,"showGutter":true,"displayIndentGuides":false},"showUpdate":true} \ No newline at end of file diff --git a/BTPanel/static/css/site.css b/BTPanel/static/css/site.css index 6ae062e5..38030024 100644 --- a/BTPanel/static/css/site.css +++ b/BTPanel/static/css/site.css @@ -2130,22 +2130,18 @@ html .menu .menu_exit:hover { .soft-man-con .user_pw_tit .tit { float: left; - line-height: 22px + line-height: 22px; + padding-right: 20px; } .soft-man-con .user_pw span, .soft-man-con .user_pw_tit span { - width: 165px; + width: 135px; display: inline-block; - text-align: left; -} - -.soft-man-con .user_pw span { - margin-right: 10px + text-align: right; } - -.btswitch-p { - margin-left: 10px +.soft-man-con .user_pw .btn_password_get{ + margin-left: 135px; } .soft-man-con .user_pw input { @@ -4925,7 +4921,7 @@ select[disabled]{ ::-webkit-scrollbar { /*滚动条整体样式*/ width : 10px; /*高宽分别对应横竖滚动条的尺寸*/ - height: 5px; + height: 10px; } ::-webkit-scrollbar-thumb { /*滚动条里面小方块*/ @@ -5382,7 +5378,7 @@ select[disabled]{ .ace_catalogue_list::-webkit-scrollbar { /*滚动条整体样式*/ width: 9px; /*高宽分别对应横竖滚动条的尺寸*/ - height: 1px; + height: 10px; } .ace_catalogue_list::-webkit-scrollbar-thumb { /*滚动条里面小方块*/ @@ -5465,7 +5461,7 @@ select[disabled]{ } .ace_scrollbar::-webkit-scrollbar { /*滚动条整体样式*/ - width : 15px; /*高宽分别对应横竖滚动条的尺寸*/ + width : 10px; /*高宽分别对应横竖滚动条的尺寸*/ height: 10px; } .ace_scrollbar::-webkit-scrollbar-thumb { @@ -5478,7 +5474,7 @@ select[disabled]{ /*滚动条里面轨道*/ box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); background: #333; - border-radius: 0; + border-radius: 10px; } .ace_editors.active { display: block; @@ -6651,6 +6647,24 @@ select[disabled]{ background-size: auto !important; background-repeat: no-repeat; } +.ace_config_editor_scroll ::-webkit-scrollbar { + /*滚动条整体样式*/ + width : 10px; /*高宽分别对应横竖滚动条的尺寸*/ + height: 10px; +} +.ace_config_editor_scroll ::-webkit-scrollbar-thumb { + /*滚动条里面小方块*/ + border-radius: 10px; + box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); + background : #999; +} +.ace_config_editor_scroll ::-webkit-scrollbar-track { + /*滚动条里面轨道*/ + box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); + border-radius: 10px; + background : #ededed; + border-radius: 5px; +} /*外链分享 */ .checkbox_grourd input { margin-right: 2px; @@ -6769,7 +6783,7 @@ select[disabled]{ .dropUpLoadFile::-webkit-scrollbar { /*滚动条整体样式*/ width : 15px; /*高宽分别对应横竖滚动条的尺寸*/ - height: 1px; + height: 10px; } .dropUpLoadFile::-webkit-scrollbar-thumb { /*滚动条里面小方块*/ @@ -6981,4 +6995,242 @@ select[disabled]{ } .upload_warning{ color:#409EFF !important; -} \ No newline at end of file +} +/*安全风险*/ +.warning_scan_view{ + padding: 20px; + position: relative; + color: #666; +} +.warning_scan_head { + padding: 15px 10px 20px 10px; +} +.warning_scan_head span{ + display: inline-block; + width: 450px; + font-size: 18px; + margin-bottom: 5px; +} +.warning_scan_head button{ + position: absolute; + right: 40px; + top: 35px; + border: none; + background: #20a53a; + border-radius: 20px; + height: 38px; + line-height: 38px; + font-size: 15px; + width: 110px; + color: #fff; + transition: all 500ms; +} +.warning_scan_head button:hover{ + background:#10952a; +} +.warning_scan_head button:focus, +.warning_scan_head button:active{ + outline: none; +} +.warning_scan_ps i{ + font-style: inherit; + color: red; + margin: 0 5px; +} +.warning_scan_time{ + font-size: 15px !important; +} +.warning_scan_body .module_head{ + height: 42px; + line-height: 42px; + padding-left: 15px; + color: #555; + background: #f5f5f5; + font-size: 13px; + border-top: 1px solid #e8e8e8; +} +.module_details_list{ + display: none; +} +.module_details_list.active{ + display: block; + height: 400px; + overflow: auto; + transition: height 500ms; +} +.module_details_list::-webkit-scrollbar { + /*滚动条整体样式*/ + width: 10px; + height: 5px; +} +.module_details_list::-webkit-scrollbar-thumb { + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + background: #999; +} +.module_details_list ::-webkit-scrollbar-track { + /*滚动条里面轨道*/ + box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.2); + background:#ededed; +} +.module_details_item{ + position:relative; + border-bottom: 1px solid #ececec; +} +.module_details_item:hover .module_details_head{ + background: #effffa; +} +.module_details_item:hover .module_details_body{ + background: #f8fffd; +} +.module_details_item:before{ + /*content:'';*/ + display: block; + width: 100%; + height: 6px; + position: absolute; + bottom: 0; + background: -webkit-linear-gradient(top,rgba(255, 255, 255, 0),rgba(220, 220, 220, .3)); + background: -moz-linear-gradient(top,rgba(255, 255, 255, 0),rgba(220, 220, 220, .3)); + background: -o-linear-gradient(top,rgba(255, 255, 255, 0),rgba(220, 220, 220, .3)); + background: linear-gradient(top,rgba(255, 255, 255, 0),rgba(220, 220, 220, .3)); + clear: both; +} +.module_details_item:after{ + content:''; + display: block; + width: 100%; + height: 6px; + top: 40px; + position: absolute; + background: -webkit-linear-gradient(top,rgba(220, 220, 220, .3),rgba(255, 255, 255, 0)); + background: -moz-linear-gradient(top,rgba(220, 220, 220, .3),rgba(255, 255, 255, 0)); + background: -o-linear-gradient(top,rgba(220, 220, 220, .3),rgba(255, 255, 255, 0)); + background: linear-gradient(top,rgba(220, 220, 220, .3),rgba(255, 255, 255, 0)); + clear: both; +} +.warning_scan_body .module_head:last-child{ + border-top: none; +} +.module_item .module_head{ + cursor: pointer; +} +.module_title{ + font-size: 14px; +} +.risk .module_num, +.security .module_num, +.ignore .module_num{ + display: inline-block; + height: 20px; + line-height: 21px; + width: 20px; + text-align: center; + margin-left: 5px; + border-radius: 3px; + color: #fff; +} +.risk .module_num{ + background:red; +} +.security .module_num{ + background:#20A53A; +} +.ignore .module_num{ + background:#FFBA66; +} +.module_cut_show{ + float: right; + padding-right: 10px; + height: 40px; + line-height: 40px; +} +.module_cut_show i{ + color: #bbb; + font-style: initial; + margin-right: 5px; +} +.module_cut_show .glyphicon{ + color: #20a53a; +} +.module_details_item{ + +} +.module_details_head{ + height: 40px; + line-height: 40px; + font-size: 13px; + padding-left: 15px; + position: relative; + background: #fbfbfb; + clear: both; + /*border-top: 1px solid #ececec;*/ +} +.module_details_head:before{ + content: ''; + display: inline-block; + height: 5px; + width: 5px; + border-radius: 2.5px; + position: absolute; + /* background-color: #666; */ + top: 50%; + margin-top: -3.5px; + left: 15px; +} +.operate_tools{ + float: right; + padding-right: 15px; + font-size: 12.5px; +} +.operate_tools a{ + color: #9a9a9a; +} +.operate_tools a.btlink{ + color: #20a53a; +} +.module_details_title{ + font-weight: 500; +} +.module_details_title i{ + color: #bbb; + font-style: initial; + font-weight: 400; +} +.module_details_body{ + padding: 10px 15px; + display: none; +} +.module_details_body .module_details_line{ + line-height: 25px; + margin-bottom: 5px; + clear: both; +} +.module_details_body .line_content, +.module_details_body .line_title{ + display: inline-block; + font-size: 12.5px; +} +.module_details_body .line_title{ + height: 100%; + width: 75px; + vertical-align: top; + color: #999; + text-align: right; + padding-right: 5px; +} +.module_details_body .line_content i{ + font-style:initial; +} +.module_details_body .line_content{ + width: 580px; + word-wrap:break-word; +} +.module_details_block{ + display: inline-block; +} +.module_details_block .line_content{ + width:250px; + +} +/*END*/ + diff --git a/BTPanel/static/js/aes.js b/BTPanel/static/js/aes.js new file mode 100644 index 00000000..724114c1 --- /dev/null +++ b/BTPanel/static/js/aes.js @@ -0,0 +1,13 @@ +var CryptoJS=CryptoJS||(function(Math,undefined){var crypto;if(typeof window!=="undefined"&&window.crypto){crypto=window.crypto}if(!crypto&&typeof window!=="undefined"&&window.msCrypto){crypto=window.msCrypto}if(!crypto&&typeof global!=="undefined"&&global.crypto){crypto=global.crypto}if(!crypto&&typeof require==="function"){try{crypto=require("crypto")}catch(err){}}var cryptoSecureRandomInt=function(){if(crypto){if(typeof crypto.getRandomValues==="function"){try{return crypto.getRandomValues(new Uint32Array(1))[0]}catch(err){}}if(typeof crypto.randomBytes==="function"){try{return crypto.randomBytes(4).readInt32LE()}catch(err){}}}throw new Error("Native crypto module could not be used to get secure random number.")};var create=Object.create||(function(){function F(){}return function(obj){var subtype;F.prototype=obj;subtype=new F();F.prototype=null;return subtype}}());var C={};var C_lib=C.lib={};var Base=C_lib.Base=(function(){return{extend:function(overrides){var subtype=create(this);if(overrides){subtype.mixIn(overrides)}if(!subtype.hasOwnProperty("init")||this.init===subtype.init){subtype.init=function(){subtype.$super.init.apply(this,arguments)}}subtype.init.prototype=subtype;subtype.$super=this;return subtype},create:function(){var instance=this.extend();instance.init.apply(instance,arguments);return instance},init:function(){},mixIn:function(properties){for(var propertyName in properties){if(properties.hasOwnProperty(propertyName)){this[propertyName]=properties[propertyName]}}if(properties.hasOwnProperty("toString")){this.toString=properties.toString}},clone:function(){return this.init.prototype.extend(this)}}}());var WordArray=C_lib.WordArray=Base.extend({init:function(words,sigBytes){words=this.words=words||[];if(sigBytes!=undefined){this.sigBytes=sigBytes}else{this.sigBytes=words.length*4}},toString:function(encoder){return(encoder||Hex).stringify(this)},concat:function(wordArray){var thisWords=this.words;var thatWords=wordArray.words;var thisSigBytes=this.sigBytes; + var thatSigBytes=wordArray.sigBytes;this.clamp();if(thisSigBytes%4){for(var i=0;i>>2]>>>(24-(i%4)*8))&255;thisWords[(thisSigBytes+i)>>>2]|=thatByte<<(24-((thisSigBytes+i)%4)*8)}}else{for(var i=0;i>>2]=thatWords[i>>>2]}}this.sigBytes+=thatSigBytes;return this},clamp:function(){var words=this.words;var sigBytes=this.sigBytes;words[sigBytes>>>2]&=4294967295<<(32-(sigBytes%4)*8);words.length=Math.ceil(sigBytes/4)},clone:function(){var clone=Base.clone.call(this);clone.words=this.words.slice(0);return clone},random:function(nBytes){var words=[];for(var i=0;i>>2]>>>(24-(i%4)*8))&255;hexChars.push((bite>>>4).toString(16));hexChars.push((bite&15).toString(16))}return hexChars.join("")},parse:function(hexStr){var hexStrLength=hexStr.length;var words=[];for(var i=0;i>>3]|=parseInt(hexStr.substr(i,2),16)<<(24-(i%8)*4)}return new WordArray.init(words,hexStrLength/2)}};var Latin1=C_enc.Latin1={stringify:function(wordArray){var words=wordArray.words;var sigBytes=wordArray.sigBytes;var latin1Chars=[];for(var i=0;i>>2]>>>(24-(i%4)*8))&255;latin1Chars.push(String.fromCharCode(bite))}return latin1Chars.join("")},parse:function(latin1Str){var latin1StrLength=latin1Str.length;var words=[];for(var i=0;i>>2]|=(latin1Str.charCodeAt(i)&255)<<(24-(i%4)*8)}return new WordArray.init(words,latin1StrLength)}};var Utf8=C_enc.Utf8={stringify:function(wordArray){try{return decodeURIComponent(escape(Latin1.stringify(wordArray)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(utf8Str){return Latin1.parse(unescape(encodeURIComponent(utf8Str))) + }};var BufferedBlockAlgorithm=C_lib.BufferedBlockAlgorithm=Base.extend({reset:function(){this._data=new WordArray.init();this._nDataBytes=0},_append:function(data){if(typeof data=="string"){data=Utf8.parse(data)}this._data.concat(data);this._nDataBytes+=data.sigBytes},_process:function(doFlush){var processedWords;var data=this._data;var dataWords=data.words;var dataSigBytes=data.sigBytes;var blockSize=this.blockSize;var blockSizeBytes=blockSize*4;var nBlocksReady=dataSigBytes/blockSizeBytes;if(doFlush){nBlocksReady=Math.ceil(nBlocksReady)}else{nBlocksReady=Math.max((nBlocksReady|0)-this._minBufferSize,0)}var nWordsReady=nBlocksReady*blockSize;var nBytesReady=Math.min(nWordsReady*4,dataSigBytes);if(nWordsReady){for(var offset=0;offset>>2]>>>(24-(i%4)*8))&255;var byte2=(words[(i+1)>>>2]>>>(24-((i+1)%4)*8))&255;var byte3=(words[(i+2)>>>2]>>>(24-((i+2)%4)*8))&255;var triplet=(byte1<<16)|(byte2<<8)|byte3;for(var j=0;(j<4)&&(i+j*0.75>>(6*(3-j)))&63))}}var paddingChar=map.charAt(64);if(paddingChar){while(base64Chars.length%4){base64Chars.push(paddingChar)}}return base64Chars.join("")},parse:function(base64Str){var base64StrLength=base64Str.length;var map=this._map;var reverseMap=this._reverseMap;if(!reverseMap){reverseMap=this._reverseMap=[];for(var j=0;j>>(6-(i%4)*2);var bitsCombined=bits1|bits2;words[nBytes>>>2]|=bitsCombined<<(24-(nBytes%4)*8);nBytes++}}return WordArray.create(words,nBytes)}}());CryptoJS.lib.Cipher||(function(undefined){var C=CryptoJS;var C_lib=C.lib;var Base=C_lib.Base;var WordArray=C_lib.WordArray;var BufferedBlockAlgorithm=C_lib.BufferedBlockAlgorithm;var C_enc=C.enc;var Utf8=C_enc.Utf8;var Base64=C_enc.Base64;var C_algo=C.algo;var EvpKDF=C_algo.EvpKDF;var Cipher=C_lib.Cipher=BufferedBlockAlgorithm.extend({cfg:Base.extend(),createEncryptor:function(key,cfg){return this.create(this._ENC_XFORM_MODE,key,cfg)},createDecryptor:function(key,cfg){return this.create(this._DEC_XFORM_MODE,key,cfg)},init:function(xformMode,key,cfg){this.cfg=this.cfg.extend(cfg);this._xformMode=xformMode;this._key=key;this.reset()},reset:function(){BufferedBlockAlgorithm.reset.call(this); + this._doReset()},process:function(dataUpdate){this._append(dataUpdate);return this._process()},finalize:function(dataUpdate){if(dataUpdate){this._append(dataUpdate)}var finalProcessedData=this._doFinalize();return finalProcessedData},keySize:128/32,ivSize:128/32,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:(function(){function selectCipherStrategy(key){if(typeof key=="string"){return PasswordBasedCipher}else{return SerializableCipher}}return function(cipher){return{encrypt:function(message,key,cfg){return selectCipherStrategy(key).encrypt(cipher,message,key,cfg)},decrypt:function(ciphertext,key,cfg){return selectCipherStrategy(key).decrypt(cipher,ciphertext,key,cfg)}}}}())});var StreamCipher=C_lib.StreamCipher=Cipher.extend({_doFinalize:function(){var finalProcessedBlocks=this._process(!!"flush");return finalProcessedBlocks},blockSize:1});var C_mode=C.mode={};var BlockCipherMode=C_lib.BlockCipherMode=Base.extend({createEncryptor:function(cipher,iv){return this.Encryptor.create(cipher,iv)},createDecryptor:function(cipher,iv){return this.Decryptor.create(cipher,iv)},init:function(cipher,iv){this._cipher=cipher;this._iv=iv}});var CBC=C_mode.CBC=(function(){var CBC=BlockCipherMode.extend();CBC.Encryptor=CBC.extend({processBlock:function(words,offset){var cipher=this._cipher;var blockSize=cipher.blockSize;xorBlock.call(this,words,offset,blockSize);cipher.encryptBlock(words,offset);this._prevBlock=words.slice(offset,offset+blockSize)}});CBC.Decryptor=CBC.extend({processBlock:function(words,offset){var cipher=this._cipher;var blockSize=cipher.blockSize;var thisBlock=words.slice(offset,offset+blockSize);cipher.decryptBlock(words,offset);xorBlock.call(this,words,offset,blockSize);this._prevBlock=thisBlock}});function xorBlock(words,offset,blockSize){var block;var iv=this._iv;if(iv){block=iv;this._iv=undefined}else{block=this._prevBlock}for(var i=0;i>>2]&255;data.sigBytes-=nPaddingBytes}};var BlockCipher=C_lib.BlockCipher=Cipher.extend({cfg:Cipher.cfg.extend({mode:CBC,padding:Pkcs7}),reset:function(){var modeCreator;Cipher.reset.call(this);var cfg=this.cfg;var iv=cfg.iv;var mode=cfg.mode;if(this._xformMode==this._ENC_XFORM_MODE){modeCreator=mode.createEncryptor}else{modeCreator=mode.createDecryptor;this._minBufferSize=1}if(this._mode&&this._mode.__creator==modeCreator){this._mode.init(this,iv&&iv.words)}else{this._mode=modeCreator.call(mode,this,iv&&iv.words);this._mode.__creator=modeCreator}},_doProcessBlock:function(words,offset){this._mode.processBlock(words,offset)},_doFinalize:function(){var finalProcessedBlocks;var padding=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){padding.pad(this._data,this.blockSize);finalProcessedBlocks=this._process(!!"flush")}else{finalProcessedBlocks=this._process(!!"flush");padding.unpad(finalProcessedBlocks)}return finalProcessedBlocks},blockSize:128/32});var CipherParams=C_lib.CipherParams=Base.extend({init:function(cipherParams){this.mixIn(cipherParams)},toString:function(formatter){return(formatter||this.formatter).stringify(this)}});var C_format=C.format={};var OpenSSLFormatter=C_format.OpenSSL={stringify:function(cipherParams){var wordArray;var ciphertext=cipherParams.ciphertext;var salt=cipherParams.salt;if(salt){wordArray=WordArray.create([1398893684,1701076831]).concat(salt).concat(ciphertext)}else{wordArray=ciphertext}return wordArray.toString(Base64)},parse:function(openSSLStr){var salt;var ciphertext=Base64.parse(openSSLStr);var ciphertextWords=ciphertext.words;if(ciphertextWords[0]==1398893684&&ciphertextWords[1]==1701076831){salt=WordArray.create(ciphertextWords.slice(2,4)); + ciphertextWords.splice(0,4);ciphertext.sigBytes-=16}return CipherParams.create({ciphertext:ciphertext,salt:salt})}};var SerializableCipher=C_lib.SerializableCipher=Base.extend({cfg:Base.extend({format:OpenSSLFormatter}),encrypt:function(cipher,message,key,cfg){cfg=this.cfg.extend(cfg);var encryptor=cipher.createEncryptor(key,cfg);var ciphertext=encryptor.finalize(message);var cipherCfg=encryptor.cfg;return CipherParams.create({ciphertext:ciphertext,key:key,iv:cipherCfg.iv,algorithm:cipher,mode:cipherCfg.mode,padding:cipherCfg.padding,blockSize:cipher.blockSize,formatter:cfg.format})},decrypt:function(cipher,ciphertext,key,cfg){cfg=this.cfg.extend(cfg);ciphertext=this._parse(ciphertext,cfg.format);var plaintext=cipher.createDecryptor(key,cfg).finalize(ciphertext.ciphertext);return plaintext},_parse:function(ciphertext,format){if(typeof ciphertext=="string"){return format.parse(ciphertext,this)}else{return ciphertext}}});var C_kdf=C.kdf={};var OpenSSLKdf=C_kdf.OpenSSL={execute:function(password,keySize,ivSize,salt){if(!salt){salt=WordArray.random(64/8)}var key=EvpKDF.create({keySize:keySize+ivSize}).compute(password,salt);var iv=WordArray.create(key.words.slice(keySize),ivSize*4);key.sigBytes=keySize*4;return CipherParams.create({key:key,iv:iv,salt:salt})}};var PasswordBasedCipher=C_lib.PasswordBasedCipher=SerializableCipher.extend({cfg:SerializableCipher.cfg.extend({kdf:OpenSSLKdf}),encrypt:function(cipher,message,password,cfg){cfg=this.cfg.extend(cfg);var derivedParams=cfg.kdf.execute(password,cipher.keySize,cipher.ivSize);cfg.iv=derivedParams.iv;var ciphertext=SerializableCipher.encrypt.call(this,cipher,message,derivedParams.key,cfg);ciphertext.mixIn(derivedParams);return ciphertext},decrypt:function(cipher,ciphertext,password,cfg){cfg=this.cfg.extend(cfg);ciphertext=this._parse(ciphertext,cfg.format);var derivedParams=cfg.kdf.execute(password,cipher.keySize,cipher.ivSize,ciphertext.salt);cfg.iv=derivedParams.iv;var plaintext=SerializableCipher.decrypt.call(this,cipher,ciphertext,derivedParams.key,cfg); + return plaintext}})}());(function(){var C=CryptoJS;var C_lib=C.lib;var BlockCipher=C_lib.BlockCipher;var C_algo=C.algo;var SBOX=[];var INV_SBOX=[];var SUB_MIX_0=[];var SUB_MIX_1=[];var SUB_MIX_2=[];var SUB_MIX_3=[];var INV_SUB_MIX_0=[];var INV_SUB_MIX_1=[];var INV_SUB_MIX_2=[];var INV_SUB_MIX_3=[];(function(){var d=[];for(var i=0;i<256;i++){if(i<128){d[i]=i<<1}else{d[i]=(i<<1)^283}}var x=0;var xi=0;for(var i=0;i<256;i++){var sx=xi^(xi<<1)^(xi<<2)^(xi<<3)^(xi<<4);sx=(sx>>>8)^(sx&255)^99;SBOX[x]=sx;INV_SBOX[sx]=x;var x2=d[x];var x4=d[x2];var x8=d[x4];var t=(d[sx]*257)^(sx*16843008);SUB_MIX_0[x]=(t<<24)|(t>>>8);SUB_MIX_1[x]=(t<<16)|(t>>>16);SUB_MIX_2[x]=(t<<8)|(t>>>24);SUB_MIX_3[x]=t;var t=(x8*16843009)^(x4*65537)^(x2*257)^(x*16843008);INV_SUB_MIX_0[sx]=(t<<24)|(t>>>8);INV_SUB_MIX_1[sx]=(t<<16)|(t>>>16);INV_SUB_MIX_2[sx]=(t<<8)|(t>>>24);INV_SUB_MIX_3[sx]=t;if(!x){x=xi=1}else{x=x2^d[d[d[x8^x2]]];xi^=d[d[xi]]}}}());var RCON=[0,1,2,4,8,16,32,64,128,27,54];var AES=C_algo.AES=BlockCipher.extend({_doReset:function(){var t;if(this._nRounds&&this._keyPriorReset===this._key){return}var key=this._keyPriorReset=this._key;var keyWords=key.words;var keySize=key.sigBytes/4;var nRounds=this._nRounds=keySize+6;var ksRows=(nRounds+1)*4;var keySchedule=this._keySchedule=[];for(var ksRow=0;ksRow>>24);t=(SBOX[t>>>24]<<24)|(SBOX[(t>>>16)&255]<<16)|(SBOX[(t>>>8)&255]<<8)|SBOX[t&255];t^=RCON[(ksRow/keySize)|0]<<24}else{if(keySize>6&&ksRow%keySize==4){t=(SBOX[t>>>24]<<24)|(SBOX[(t>>>16)&255]<<16)|(SBOX[(t>>>8)&255]<<8)|SBOX[t&255]}}keySchedule[ksRow]=keySchedule[ksRow-keySize]^t}}var invKeySchedule=this._invKeySchedule=[];for(var invKsRow=0;invKsRow>>24]]^INV_SUB_MIX_1[SBOX[(t>>>16)&255]]^INV_SUB_MIX_2[SBOX[(t>>>8)&255]]^INV_SUB_MIX_3[SBOX[t&255]] + }}},encryptBlock:function(M,offset){this._doCryptBlock(M,offset,this._keySchedule,SUB_MIX_0,SUB_MIX_1,SUB_MIX_2,SUB_MIX_3,SBOX)},decryptBlock:function(M,offset){var t=M[offset+1];M[offset+1]=M[offset+3];M[offset+3]=t;this._doCryptBlock(M,offset,this._invKeySchedule,INV_SUB_MIX_0,INV_SUB_MIX_1,INV_SUB_MIX_2,INV_SUB_MIX_3,INV_SBOX);var t=M[offset+1];M[offset+1]=M[offset+3];M[offset+3]=t},_doCryptBlock:function(M,offset,keySchedule,SUB_MIX_0,SUB_MIX_1,SUB_MIX_2,SUB_MIX_3,SBOX){var nRounds=this._nRounds;var s0=M[offset]^keySchedule[0];var s1=M[offset+1]^keySchedule[1];var s2=M[offset+2]^keySchedule[2];var s3=M[offset+3]^keySchedule[3];var ksRow=4;for(var round=1;round>>24]^SUB_MIX_1[(s1>>>16)&255]^SUB_MIX_2[(s2>>>8)&255]^SUB_MIX_3[s3&255]^keySchedule[ksRow++];var t1=SUB_MIX_0[s1>>>24]^SUB_MIX_1[(s2>>>16)&255]^SUB_MIX_2[(s3>>>8)&255]^SUB_MIX_3[s0&255]^keySchedule[ksRow++];var t2=SUB_MIX_0[s2>>>24]^SUB_MIX_1[(s3>>>16)&255]^SUB_MIX_2[(s0>>>8)&255]^SUB_MIX_3[s1&255]^keySchedule[ksRow++];var t3=SUB_MIX_0[s3>>>24]^SUB_MIX_1[(s0>>>16)&255]^SUB_MIX_2[(s1>>>8)&255]^SUB_MIX_3[s2&255]^keySchedule[ksRow++];s0=t0;s1=t1;s2=t2;s3=t3}var t0=((SBOX[s0>>>24]<<24)|(SBOX[(s1>>>16)&255]<<16)|(SBOX[(s2>>>8)&255]<<8)|SBOX[s3&255])^keySchedule[ksRow++];var t1=((SBOX[s1>>>24]<<24)|(SBOX[(s2>>>16)&255]<<16)|(SBOX[(s3>>>8)&255]<<8)|SBOX[s0&255])^keySchedule[ksRow++];var t2=((SBOX[s2>>>24]<<24)|(SBOX[(s3>>>16)&255]<<16)|(SBOX[(s0>>>8)&255]<<8)|SBOX[s1&255])^keySchedule[ksRow++];var t3=((SBOX[s3>>>24]<<24)|(SBOX[(s0>>>16)&255]<<16)|(SBOX[(s1>>>8)&255]<<8)|SBOX[s2&255])^keySchedule[ksRow++];M[offset]=t0;M[offset+1]=t1;M[offset+2]=t2;M[offset+3]=t3},keySize:256/32});C.AES=BlockCipher._createHelper(AES)}());CryptoJS.pad.ZeroPadding={pad:function(data,blockSize){var blockSizeBytes=blockSize*4;data.clamp();data.sigBytes+=blockSizeBytes-((data.sigBytes%blockSizeBytes)||blockSizeBytes)},unpad:function(data){var dataWords=data.words;var i=data.sigBytes-1;for(var i=data.sigBytes-1; + i>=0;i--){if(((dataWords[i>>>2]>>>(24-(i%4)*8))&255)){data.sigBytes=i+1;break}}}};CryptoJS.mode.ECB=(function(){var ECB=CryptoJS.lib.BlockCipherMode.extend();ECB.Encryptor=ECB.extend({processBlock:function(words,offset){this._cipher.encryptBlock(words,offset)}});ECB.Decryptor=ECB.extend({processBlock:function(words,offset){this._cipher.decryptBlock(words,offset)}});return ECB}());CryptoJS.mode.CFB=(function(){var CFB=CryptoJS.lib.BlockCipherMode.extend();CFB.Encryptor=CFB.extend({processBlock:function(words,offset){var cipher=this._cipher;var blockSize=cipher.blockSize;generateKeystreamAndEncrypt.call(this,words,offset,blockSize,cipher);this._prevBlock=words.slice(offset,offset+blockSize)}});CFB.Decryptor=CFB.extend({processBlock:function(words,offset){var cipher=this._cipher;var blockSize=cipher.blockSize;var thisBlock=words.slice(offset,offset+blockSize);generateKeystreamAndEncrypt.call(this,words,offset,blockSize,cipher);this._prevBlock=thisBlock}});function generateKeystreamAndEncrypt(words,offset,blockSize,cipher){var keystream;var iv=this._iv;if(iv){keystream=iv.slice(0);this._iv=undefined}else{keystream=this._prevBlock}cipher.encryptBlock(keystream,0);for(var i=0;i>24)&255)===255){var b1=(word>>16)&255;var b2=(word>>8)&255;var b3=word&255;if(b1===255){b1=0;if(b2===255){b2=0; + if(b3===255){b3=0}else{++b3}}else{++b2}}else{++b1}word=0;word+=(b1<<16);word+=(b2<<8);word+=b3}else{word+=(1<<24)}return word}function incCounter(counter){if((counter[0]=incWord(counter[0]))===0){counter[1]=incWord(counter[1])}return counter}var Encryptor=CTRGladman.Encryptor=CTRGladman.extend({processBlock:function(words,offset){var cipher=this._cipher;var blockSize=cipher.blockSize;var iv=this._iv;var counter=this._counter;if(iv){counter=this._counter=iv.slice(0);this._iv=undefined}incCounter(counter);var keystream=counter.slice(0);cipher.encryptBlock(keystream,0);for(var i=0;i>>2]|=nPaddingBytes<<(24-(lastBytePos%4)*8);data.sigBytes+=nPaddingBytes},unpad:function(data){var nPaddingBytes=data.words[(data.sigBytes-1)>>>2]&255;data.sigBytes-=nPaddingBytes}};CryptoJS.pad.Iso10126={pad:function(data,blockSize){var blockSizeBytes=blockSize*4;var nPaddingBytes=blockSizeBytes-data.sigBytes%blockSizeBytes;data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes-1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes<<24],1))},unpad:function(data){var nPaddingBytes=data.words[(data.sigBytes-1)>>>2]&255;data.sigBytes-=nPaddingBytes}};CryptoJS.pad.Iso97971={pad:function(data,blockSize){data.concat(CryptoJS.lib.WordArray.create([2147483648],1)); + CryptoJS.pad.ZeroPadding.pad(data,blockSize)},unpad:function(data){CryptoJS.pad.ZeroPadding.unpad(data);data.sigBytes--}};CryptoJS.pad.NoPadding={pad:function(){},unpad:function(){}}; + \ No newline at end of file diff --git a/BTPanel/static/js/control.js b/BTPanel/static/js/control.js index 90d7ce58..2f28703b 100644 --- a/BTPanel/static/js/control.js +++ b/BTPanel/static/js/control.js @@ -27,51 +27,32 @@ $(".st").hover(function(){ $(".searcTime .gt").click(function(){ $(this).addClass("on").siblings().removeClass("on"); }) -$(".loadbtn").click(function(){ - $(this).parents(".searcTime").find("span").removeClass("on"); +$('.time_range_submit').click(function(){ + $(this).parents(".searcTime").find("span").removeClass("on"); $(this).parents(".searcTime").find(".st").addClass("on"); var b = (new Date($(this).parent().find(".btime").val()).getTime())/1000; var e = (new Date($(this).parent().find(".etime").val()).getTime())/1000; b = Math.round(b); e = Math.round(e); - getload(b,e) -}) -$(".cpubtn").click(function(){ - $(this).parents(".searcTime").find("span").removeClass("on"); - $(this).parents(".searcTime").find(".st").addClass("on"); - var b = (new Date($(this).parent().find(".btime").val()).getTime())/1000; - var e = (new Date($(this).parent().find(".etime").val()).getTime())/1000; - b = Math.round(b); - e = Math.round(e); - cpu(b,e) -}) -$(".membtn").click(function(){ - $(this).parents(".searcTime").find("span").removeClass("on"); - $(this).parents(".searcTime").find(".st").addClass("on"); - var b = (new Date($(this).parent().find(".btime").val()).getTime())/1000; - var e = (new Date($(this).parent().find(".etime").val()).getTime())/1000; - b = Math.round(b); - e = Math.round(e); - mem(b,e) -}) -$(".diskbtn").click(function(){ - $(this).parents(".searcTime").find("span").removeClass("on"); - $(this).parents(".searcTime").find(".st").addClass("on"); - var b = (new Date($(this).parent().find(".btime").val()).getTime())/1000; - var e = (new Date($(this).parent().find(".etime").val()).getTime())/1000; - b = Math.round(b); - e = Math.round(e); - disk(b,e) -}) -$(".networkbtn").click(function(){ - $(this).parents(".searcTime").find("span").removeClass("on"); - $(this).parents(".searcTime").find(".st").addClass("on"); - var b = (new Date($(this).parent().find(".btime").val()).getTime())/1000; - var e = (new Date($(this).parent().find(".etime").val()).getTime())/1000; - b = Math.round(b); - e = Math.round(e); - network(b,e) -}) + console.log(b,e); + switch ($(this).attr('data-type')) { + case 'getload': + getload(b,e); + break; + case 'cpu': + cpu(b,e); + break; + case 'mem': + mem(b,e); + break; + case 'disk': + disk(b,e); + break; + case 'network': + network(b,e); + break; + } +}); //指定天数 function Wday(day,name){ var now = (new Date().getTime())/1000; @@ -392,8 +373,8 @@ function disk(b, e) { //var zData = []; for (var i = 0; i < rdata.length; i++) { - rData.push((rdata[i].read_bytes / 1024 / 60).toFixed(3)); - wData.push((rdata[i].write_bytes / 1024 / 60).toFixed(3)); + rData.push((rdata[i].read_bytes / 1024 / 60).toFixed(2)); + wData.push((rdata[i].write_bytes / 1024 / 60).toFixed(2)); xData.push(rdata[i].addtime); //yData.push(rdata[i].read_count); //zData.push(rdata[i].write_count); @@ -404,7 +385,7 @@ function disk(b, e) { axisPointer: { type: 'cross' }, - formatter: lan.control.time+":{b0}
              {a0}: {c0} Kb/s
              {a1}: {c1} Kb/s", + //formatter: lan.control.time+":{b0}
              {a0}: {c0} Kb/s
              {a1}: {c1} Kb/s", }, legend: { data: [lan.control.disk_read_bytes, lan.control.disk_write_bytes] @@ -506,8 +487,8 @@ $.get('/ajax?action=GetNetWorkIo&start='+b+'&end='+e,function(rdata){ cData.push(rdata[i].down_packets); dData.push(rdata[i].up_packets); xData.push(rdata[i].addtime); - yData.push(rdata[i].up); - zData.push(rdata[i].down); + yData.push(rdata[i].up.toFixed(2)); + zData.push(rdata[i].down.toFixed(2)); } option = { tooltip: { diff --git a/BTPanel/static/js/files.js b/BTPanel/static/js/files.js index 16cf739f..5bcf796d 100644 --- a/BTPanel/static/js/files.js +++ b/BTPanel/static/js/files.js @@ -671,7 +671,7 @@ function Recycle_bin(type) { ' + lan.files.recycle_bin_th2 + '\ ' + lan.files.recycle_bin_th3 + '\ ' + lan.files.recycle_bin_th4 + '\ - ' + lan.files.recycle_bin_th5 + '\ + ' + lan.files.recycle_bin_th5 + '\ \ \ ' + body + '\ diff --git a/BTPanel/static/js/index.js b/BTPanel/static/js/index.js index bb3178df..491610ed 100644 --- a/BTPanel/static/js/index.js +++ b/BTPanel/static/js/index.js @@ -3,6 +3,8 @@ bt.pub.check_install(function (rdata) { }) var interval_stop = false; var index = { + warning_list:[], + warning_num:0, interval: { limit: 10, count: 0, @@ -91,9 +93,9 @@ var index = { }, get_init: function () { var _this = this; - setTimeout(function () { _this.get_disk_list(); }, 500) - setTimeout(function () { _this.get_server_info(); }, 1000) - + setTimeout(function () { _this.get_disk_list(); }, 10); + setTimeout(function () { _this.get_warning_list(); }, 20); + setTimeout(function () { _this.get_server_info(); }, 30); bt.pub.get_user_info(function (rdata) { if (rdata.status) { @@ -200,13 +202,13 @@ var index = { }) }) }); - setTimeout(function () { _this.interval.start(); }, 1600) - setTimeout(function () { index.get_index_list(); }, 1200) + setTimeout(function () { _this.interval.start(); }, 40) + setTimeout(function () { index.get_index_list(); }, 50) setTimeout(function () { _this.net.init(); - }, 200); + }, 60); setTimeout(function () { bt.system.check_update(function (rdata) { @@ -222,7 +224,7 @@ var index = { // } }, false) - }, 1500) + }, 70) }, get_data_info: function (callback) { var _this = $(this); @@ -236,7 +238,7 @@ var index = { index.set_val(_membox, { usage: (net.mem.memRealUsed * 100 / net.mem.memTotal).toFixed(1), items: pub_arr, title: net.mem.memRealUsed + '/' + net.mem.memTotal + '(MB)' }) bt.set_cookie('memSize', net.mem.memTotal) for (var i = 0; i < _diskbox.length; i++) { - index.set_val(_diskbox.eq(i), { usage: net.disk[i].size[3].split('%')[0], title: net.disk[i].size[1]+'/'+net.disk[0].size[0], items: pub_arr }) + index.set_val(_diskbox.eq(i), { usage: net.disk[i].size[3].split('%')[0], title: net.disk[i].size[1]+'/'+net.disk[i].size[0], items: pub_arr }) } var _lval = Math.round((net.load.one / net.load.max) * 100); @@ -366,6 +368,7 @@ var index = { color = '#dd2f00' break; } + index.set_val(_li, { usage: item.rate, color: color }) _tab.append(_li); } @@ -468,28 +471,34 @@ var index = { bt.msg(rdata); return; } - var loading = bt.open({ + var result = rdata, + is_beta = rdata.msg.is_beta, + loading = bt.open({ type: 1, title: '[Linux' + (rdata.msg.is_beta == 1 ? lan.index.test_version : lan.index.final_version) + ']-'+lan.index.update_log, - area: '520px', + area: '550px', shadeClose: false, skin: 'layui-layer-dialog', closeBtn: 2, content: '
              \
              '+lan.index.last_version_now+'
              \ -
              '+lan.index.this_version+''+lan.index.bt_linux+ (rdata.msg.is_beta == 1 ? lan.index.test_version+' ' + rdata.msg.beta.version : lan.index.final_version+' ' + rdata.msg.version) + ' &n'+ lan.index.release_time + (rdata.msg.is_beta == 1 ? rdata.msg.beta.uptime : rdata.msg.uptime) + '
              \ +
              '+lan.index.this_version+''+lan.index.bt_linux+ (rdata.msg.is_beta == 1 ? lan.index.test_version+' ' + rdata.msg.beta.version : lan.index.final_version+' ' + rdata.msg.version) + '  '+ lan.index.release_time + (rdata.msg.is_beta == 1 ? rdata.msg.beta.uptime : rdata.msg.uptime) + '
              \ +
              \ +
              '+ (is_beta != 1 ? lan.index.test_version : lan.index.final_version) + lan.index.last_version_is + (result.msg.is_beta != 1 ? result.msg.beta.version : result.msg.version) + '       '+lan.index.update_time+'  ' + (is_beta != 1 ? result.msg.beta.uptime : result.msg.uptime) + '
              \ + '+ (is_beta !== 1 ? ''+lan.index.update_verison_click+''+lan.index.check_detail+'' : ''+lan.index.change_final_click+''+lan.index.change_final+'') + '\ +
              \
              \ \ \
              \
              \