tao-test/app/taoClientDiagnostic/views/js/loader/taoClientDiagnostic.min.js

2 lines
109 KiB
JavaScript

function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}(function(){'use strict';var loaderScript=document.getElementById("amd-loader"),configUrl=loaderScript.getAttribute("data-config"),bundle=loaderScript.getAttribute("data-bundle"),loadController=function(){var controllerOptions={},controllerPath=loaderScript.getAttribute("data-controller"),params=loaderScript.getAttribute("data-params");try{controllerOptions=JSON.parse(params)}catch(err){controllerOptions={}}window.require([controllerPath],function(controller){var startController=function(){window.started||(window.started=!0,controller.start(controllerOptions))};document.addEventListener("readystatechange",startController,!1),"complete"===document.readyState&&startController()})};window.require([configUrl],function(){window.loadBundles||(window.loaded={},window.loadBundles=function(bundles){bundles=bundles||[],bundles=bundles.concat(window.bundles),bundles=bundles.filter(function(item,index){return item&&bundles.indexOf(item)===index&&!0!==window.loaded[item]}),require(bundles,function(){bundles.forEach(function(item){window.loaded[item]=!0}),loadController()})}),bundle||window.bundles&&window.bundles.length?window.loadBundles([bundle]):loadController()})})(),define("loader/bootstrap",function(){}),define("taoClientDiagnostic/tools/message",["jquery","ui/feedback"],function($,feedback){'use strict';return function(container){var $feedbackBox=$(container);$feedbackBox.data("error")&&feedback().error($feedbackBox.data("error")),$feedbackBox.data("message")&&feedback().error($feedbackBox.data("message"))}}),define("taoClientDiagnostic/controller/Authenticator/login",["taoClientDiagnostic/tools/message"],function(showMessage){'use strict';return{start:function start(){showMessage("#feedback-box")}}}),define("tpl!taoClientDiagnostic/component/diagnostic/tpl/component",["handlebars"],function(hb){return hb.template(function(Handlebars,depth0,helpers,partials,data){this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var helper,options,buffer="",helperMissing=helpers.helperMissing,escapeExpression=this.escapeExpression;return buffer+="<div class=\"diagnostics-content-area\">\n <h1>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Diagnostic Tool",options):helperMissing.call(depth0,"__","Diagnostic Tool",options)))+"</h1>\n</div>",buffer})}),define("taoClientDiagnostic/component/diagnostic/diagnosticLoader",["lodash","ui/component","core/moduleLoader","context","module","tpl!taoClientDiagnostic/component/diagnostic/tpl/component","layout/loading-bar"],function(_,componentFactory,moduleLoader,context,module,componentTpl,loadingBar){'use strict';return function(container,config){var component=componentFactory().setTemplate(componentTpl).on("init",function(){this.render(container)}).on("render",function(){var _this=this,moduleConfig=module.config(),identifiers=Object.keys(moduleConfig.diagnostics);moduleLoader({},_.isFunction).addList(moduleConfig.diagnostics).load(context.bundle).then(function(factories){var componentConfig=_this.getConfig();factories.forEach(function(factory,index){var factoryName=identifiers[index],factoryConfig=componentConfig[factoryName];factoryConfig.controller=componentConfig.controller,factory(_this.getElement(),factoryConfig).on("render",function(){factoryConfig.autoStart&&this.run()}).on("start",function(){return loadingBar.start()}).on("end",function(){return loadingBar.stop()})}),_this.trigger("ready")})});return _.defer(function(){return component.init(config)}),component}}),define("taoClientDiagnostic/controller/CompatibilityChecker/diagnostics",["jquery","taoClientDiagnostic/tools/message","taoClientDiagnostic/component/diagnostic/diagnosticLoader"],function($,showMessage,diagnosticFactory){'use strict';return{start:function start(config){var $contentArea=$(".content");showMessage("#feedback-box"),diagnosticFactory($contentArea,config)}}}),define("taoClientDiagnostic/tools/fixedDecimals",[],function(){'use strict';return function(value,decimals){var shift=Math.pow(10,Math.abs(decimals||1));return Math.round(+value*shift)/shift||0}}),define("taoClientDiagnostic/tools/stats",["lodash","taoClientDiagnostic/tools/fixedDecimals"],function(_,fixedDecimals){'use strict';var _Mathfloor=Math.floor,_Mathmax=Math.max,_Mathmin=Math.min;function valueGetter(name){return"function"==typeof name?name:function(item){return item&&item[name]||0}}return function(list,fieldName,decimals){var _Mathceil=Math.ceil,_Mathsqrt=Math.sqrt,_NumberMAX_VALUE=Number.MAX_VALUE,getValue=valueGetter(fieldName),values=[],min=_NumberMAX_VALUE,max=0,count=0,sum=_.reduce(list,function(sum,item){if("undefined"!=typeof item){var value=getValue(item);return values.push(value),min=_Mathmin(min,value),max=_Mathmax(max,value),sum+=value,count++,sum}},0),average=sum/(count||1),sum2=values.reduce(function(sum,value){var diff=value-average;return sum+=diff*diff,sum},0),variance=1<count?_Mathsqrt(sum2/(count-1)):0;values.sort();var middle=count/2,median=(values[_Mathfloor(middle)]+values[_Mathceil(middle)])/2,results={min:min,max:max,sum:sum,count:count,average:average,median:median,variance:variance};return decimals&&_.forEach(results,function(value,key){results[key]=fixedDecimals(value,decimals)}),results.values=list,results}}),define("taoClientDiagnostic/tools/getConfig",["lodash"],function(_){'use strict';return function(config,defaults){return _(config||{}).omit(function(value){return null===value||"undefined"==typeof value}).defaults(defaults||{}).value()}}),define("taoClientDiagnostic/tools/getLabels",[],function(){'use strict';var _Mathmax2=Math.max,_Mathmin2=Math.min;return function(messages,level){return messages=messages||{},Array.isArray(messages)||(messages=[messages]),level=_Mathmin2(_Mathmax2(parseInt(level,10)||0,1),messages.length||1)-1,messages[level]||{}}}),define("taoClientDiagnostic/tools/getStatus",["lodash"],function(_){'use strict';var _Mathmax3=Math.max;return function(percentage,thresholds,opts){var options=opts||{},testPercentage=_Mathmax3(0,Math.min(100,Math.round(parseInt(percentage,10)||0))),globalPercentage=options.minimumGlobalPercentage?_Mathmax3(testPercentage,options.minimumGlobalPercentage):testPercentage,status={percentage:testPercentage,globalPercentage:globalPercentage,quality:{}};if(thresholds){Array.isArray(thresholds)||(thresholds=[thresholds]);for(var feedback,step,len=thresholds.length,i=0;i<len&&(step=thresholds[i],step&&(!step.threshold||status.percentage>=step.threshold));i++)feedback=step;feedback&&(status.feedback=_.clone(feedback))}return status}}),define("taoClientDiagnostic/tools/performances/tester",["jquery","lodash","i18n","async","context","helpers","taoClientDiagnostic/tools/stats","taoQtiItem/qtiItem/core/Loader","taoQtiItem/qtiCommonRenderer/renderers/Renderer","taoClientDiagnostic/tools/getConfig","taoClientDiagnostic/tools/getLabels","taoClientDiagnostic/tools/getStatus"],function($,_,__,async,context,helpers,stats,Loader,Renderer,getConfig,getLabels,getStatus){'use strict';var _Mathabs=Math.abs;function loadItem(data,done){var qtiJsonFile="".concat(data.url,"qti.json"),urlTokens=data.url.split("/"),extension=urlTokens[0],fullpath=require.s.contexts._.config.paths[extension],baseUrl=data.url.replace(extension,fullpath),loader=new Loader,renderer=new Renderer({baseUrl:baseUrl});renderer.getAssetManager&&renderer.getAssetManager().setData("baseUrl",baseUrl),require(["json!".concat(qtiJsonFile)],function(itemData){loader.loadItemData(itemData,function(item){renderer.load(function(){var start=window.performance.now();item.setRenderer(this);var $container=$("<div>").appendTo("body");$container.append(item.render()),item.postRender(),$container.remove();var end=window.performance.now(),result={id:data.id,url:data.url,duration:(end-start)/1000};done(null,result)},this.getLoadedClasses())})})}var _defaultSamples=["taoClientDiagnostic/tools/performances/data/sample1/","taoClientDiagnostic/tools/performances/data/sample2/","taoClientDiagnostic/tools/performances/data/sample3/"],_defaults={id:"performances",optimal:.025,threshold:.25},_thresholds=[{threshold:0,message:__("Very slow performances"),type:"error"},{threshold:33,message:__("Average performances"),type:"warning"},{threshold:66,message:__("Good performances"),type:"success"}],_messages=[{title:__("Workstation performances"),status:__("Checking the performances..."),performancesMin:__("Minimum rendering time"),performancesMax:__("Maximum rendering time"),performancesAverage:__("Average rendering time")}];return function(config){var initConfig=getConfig(config,_defaults),labels=getLabels(_messages,initConfig.level),idx=0,_samples=_.map(!_.isEmpty(initConfig.samples)&&initConfig.samples||_defaultSamples,function(sample){return idx++,{id:"sample"+idx,url:sample,timeout:1e3*initConfig.timeout||30000,nb:initConfig.occurrences||10}});return _samples[0].nb++,{start:function start(done){var _this2=this,tests=[];_.forEach(_samples,function(data){for(var cb=_.partial(loadItem,data),iterations=data.nb||1;iterations--;)tests.push(cb)}),async.series(tests,function(err,measures){if(err&&!measures.length)throw err;measures.shift();var results=stats(measures,"duration",2),status=_this2.getFeedback(results.average),summary=_this2.getSummary(results);done(status,summary,results)})},get labels(){return labels},getSummary:function getSummary(results){return{performancesMin:{message:labels.performancesMin,value:"".concat(results.min," s")},performancesMax:{message:labels.performancesMax,value:"".concat(results.max," s")},performancesAverage:{message:labels.performancesAverage,value:"".concat(results.average," s")}}},getFeedback:function getFeedback(result){var optimal=initConfig.optimal,range=_Mathabs(optimal-initConfig.threshold),status=getStatus(100*((range+optimal-result)/range),_thresholds);return status.title=labels.title,status.id=initConfig.id,status}}}}),define("taoClientDiagnostic/tools/bandwidth/tester",["lodash","i18n","async","context","taoClientDiagnostic/tools/getConfig","taoClientDiagnostic/tools/getLabels","taoClientDiagnostic/tools/stats","taoClientDiagnostic/tools/fixedDecimals","taoClientDiagnostic/tools/getStatus"],function(_,__,async,context,getConfig,getLabels,stats,fixedDecimals,getStatus){'use strict';var _Mathfloor2=Math.floor,_Mathmax4=Math.max;function download(data,cb){var _this3=this;if(data.threshold&&this.bandwidth<data.threshold)return cb("threshold");var start=window.performance.now(),url="".concat(context.root_url,"taoClientDiagnostic/views/js/tools/bandwidth/").concat(data.file,"?").concat(Date.now()),timeoutId=window.setTimeout(cb,data.timeout,"timeout"),request=new XMLHttpRequest;request.open("GET",url,!0),request.setRequestHeader("Accept","application/octet-stream"),request.onload=function(){var end=window.performance.now();clearTimeout(timeoutId);var duration=end-start,bytes=data.size,speed=8*bytes/(duration/1000)/1048576;return _this3.bandwidth=_Mathmax4(_this3.bandwidth,speed),cb(null,{id:data.id,file:data.file,size:data.size,duration:duration,speed:speed})},request.onerror=function(err){clearTimeout(timeoutId),cb(err)},request.onreadystatechange=function(){4===request.readyState&&200!==request.status&&(clearTimeout(timeoutId),cb(request.status))},request.send()}var _second=1e3,_thresholds=[{threshold:0,message:__("Low bandwidth"),type:"error"},{threshold:33,message:__("Average bandwidth"),type:"warning"},{threshold:66,message:__("Good bandwidth"),type:"success"}],_defaults={id:"bandwidth",unit:.16,ideal:45,max:100,minimumGlobalPercentage:!1,feedbackThresholds:_thresholds,fallbackThreshold:.2},_downloadData={"10KB":{id:"10KB",file:"data/bin10KB.data",size:10240,timeout:_second,threshold:0,nb:10},"100KB":{id:"100KB",file:"data/bin100KB.data",size:102400,timeout:2*_second,threshold:0,nb:5},"1MB":{id:"1MB",file:"data/bin1MB.data",size:1048576,timeout:20*_second,threshold:0,nb:3}},_messages=[{title:__("Bandwidth"),status:__("Checking the bandwidth..."),legend:__("Number of simultaneous test takers the connection can handle"),bandwidthMin:__("Minimum bandwidth"),bandwidthMax:__("Maximum bandwidth"),bandwidthAverage:__("Average bandwidth")},{title:__("Media intensive bandwidth"),status:__("Checking the media intensive bandwidth..."),legend:__("Number of simultaneous test takers the connection can handle with media intensive"),bandwidthMin:__("Minimum intensive bandwidth"),bandwidthMax:__("Maximum intensive bandwidth"),bandwidthAverage:__("Average intensive bandwidth")}];return function(config){var initConfig=getConfig(config,_defaults),labels=getLabels(_messages,initConfig.level);return _.isArray(initConfig.feedbackThresholds)&&!initConfig.feedbackThresholds.length&&(initConfig.feedbackThresholds=_thresholds),{start:function start(done){var _this4=this,tests=[];_.forEach(_downloadData,function(data){for(var cb=download.bind(_this4,data),iterations=data.nb||1;iterations--;)tests.push(cb)}),this.bandwidth=0,async.series(tests,function(err,measures){function getValue(value){var speed=0;return value&&(duration+=value.duration,size+=value.size,speed=value.speed,value.speed=fixedDecimals(speed,2)),speed}var duration=0,size=0,decimals=2,resultsBySize={};if(err&&!measures.length)throw err;var results=stats(measures,getValue,decimals);_.forEach(_downloadData,function(data,key){resultsBySize[key]=stats(_.filter(measures,function(o){return o.id===key}),getValue,decimals)}),results.duration=fixedDecimals(duration/_second,decimals),results.size=size;var summary=_this4.getSummary(results),status=_this4.getFeedback(results,resultsBySize);done(status,summary,results)})},get labels(){return labels},getSummary:function getSummary(results){return{bandwidthMin:{message:labels.bandwidthMin,value:results.min+" Mbps"},bandwidthMax:{message:labels.bandwidthMax,value:results.max+" Mbps"},bandwidthAverage:{message:labels.bandwidthAverage,value:results.average+" Mbps"}}},getFeedback:function getFeedback(result,resultsBySize){var avgResult=result.average,bandwidthUnit=initConfig.unit,threshold=initConfig.ideal,maxTestTakers=initConfig.max,getStatusOptions=initConfig.minimumGlobalPercentage?{minimumGlobalPercentage:initConfig.minimumGlobalPercentage}:{},baseBandwidth=avgResult,stable=!0;_.forEach(resultsBySize,function(resultBySize){resultBySize.min/resultBySize.average<initConfig.fallbackThreshold&&(stable=!1)});var status=getStatus(100*(baseBandwidth/(threshold*bandwidthUnit)),initConfig.feedbackThresholds,getStatusOptions),nb=_Mathfloor2(baseBandwidth/bandwidthUnit);return nb>maxTestTakers&&(nb=">"+maxTestTakers),status.id=initConfig.id,status.title=labels.title,status.feedback.legend=labels.legend,status.quality.label=nb,stable||(status.feedback.type="warning",status.feedback.message=__("Unstable bandwidth, temporary fluctuations in connection speed may affect test taker experience."),status.feedback.legend=__("Simultaneous test takers under normal connection conditions.")),2<nb.toString().length&&(status.quality.wide=!0),status}}}}),define("taoClientDiagnostic/tools/upload/tester",["jquery","lodash","i18n","async","util/url","taoClientDiagnostic/tools/getConfig","taoClientDiagnostic/tools/getLabels","taoClientDiagnostic/tools/getStatus"],function($,_,__,async,urlHelper,getConfig,getLabels,getStatus){'use strict';var _Mathround=Math.round;function generateStr(length){for(var text="",possible="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",i=0;i<length;i++)text+=possible.charAt(Math.floor(Math.random()*possible.length));return text}function upload(size){var url=urlHelper.route("upload","CompatibilityChecker","taoClientDiagnostic",{cache:Date.now()}),str=generateStr(size);return data=[],$.ajax({url:url,type:"POST",data:{upload:str},xhr:function(){var xhr=new window.XMLHttpRequest,startTime=Date.now();return xhr.upload.addEventListener("progress",function(evt){if(evt.lengthComputable){var passedTime=Date.now()-startTime;data.push({time:passedTime,loaded:evt.loaded,speed:8*evt.loaded/1048576/(passedTime/1e3)})}},!1),xhr}})}var _mega=1048576,data=[],_defaults={id:"upload",size:_mega,optimal:_mega},_thresholds=[{threshold:0,message:__("Low upload speed"),type:"error"},{threshold:33,message:__("Average upload speed"),type:"warning"},{threshold:66,message:__("Good upload speed"),type:"success"}],_messages=[{title:__("Upload speed"),status:__("Checking upload speed..."),uploadAvg:__("Average upload speed"),uploadMax:__("Max upload speed")}];return function(config){var initConfig=getConfig(config,_defaults),labels=getLabels(_messages,initConfig.level);return{start:function start(done){var _this5=this;upload(parseInt(initConfig.size,10)).then(function(){var totalSpeed=0,maxSpeed=0;_.forEach(data,function(val){totalSpeed+=val.speed,maxSpeed<val.speed&&(maxSpeed=_Mathround(100*val.speed)/100)});var avgSpeed=_Mathround(100*(totalSpeed/data.length))/100,results={max:maxSpeed,avg:avgSpeed,type:"upload"},status=_this5.getFeedback(avgSpeed),summary=_this5.getSummary(results);done(status,summary,results)})},get labels(){return labels},getSummary:function getSummary(results){return{uploadAvg:{message:labels.uploadAvg,value:"".concat(results.avg," Mbps")},uploadMax:{message:labels.uploadMax,value:"".concat(results.max," Mbps")}}},getFeedback:function getFeedback(result){var optimal=initConfig.optimal/_mega,status=getStatus(100/optimal*result,_thresholds);return status.id=initConfig.id,status.title=labels.title,status}}}}),define("taoClientDiagnostic/tools/getPlatformInfo",["core/request","util/url","taoClientDiagnostic/tools/getConfig"],function(request,urlHelper,getConfig){'use strict';function getTesterUrl(win,action,controller,extension){var document=win.document,navigator=win.navigator,screen=win.screen,params={},e=0,f=0;return params.ua=navigator.userAgent,e|=win.ActiveXObject?1:0,e|=win.opera?2:0,e|=win.chrome?4:0,e|="getBoxObjectFor"in document||"mozInnerScreenX"in win?8:0,e|="WebKitCSSMatrix"in win||"WebKitPoint"in win||"webkitStorageInfo"in win||"webkitURL"in win?16:0,e|=16&e&&-1==={}.toString.toString().indexOf("\n")?32:0,params.e=e,f|="sandbox"in document.createElement("iframe")?1:0,f|="WebSocket"in win?2:0,f|=win.Worker?4:0,f|=win.applicationCache?8:0,f|=win.history&&win.history.pushState?16:0,f|=document.documentElement.webkitRequestFullScreen?32:0,f|="FileReader"in win?64:0,params.f=f,params.r=Math.random().toString(36).substring(7),params.w=screen.width,params.h=screen.height,urlHelper.route(action,controller,extension,params)}var defaultConfig={browserVersionAction:"whichBrowser",browserVersionController:"CompatibilityChecker",browserVersionExtension:"taoClientDiagnostic"};return function(win,config){config=getConfig(config,defaultConfig);var url=getTesterUrl(win,config.browserVersionAction,config.browserVersionController,config.browserVersionExtension);return request({url:url,noToken:!0})}}),define("taoClientDiagnostic/tools/browser/tester",["jquery","lodash","i18n","util/url","core/logger","core/request","taoClientDiagnostic/tools/getConfig","taoClientDiagnostic/tools/getLabels","taoClientDiagnostic/tools/getPlatformInfo","taoClientDiagnostic/tools/getStatus"],function($,_,__,urlHelper,loggerFactory,request,getConfig,getLabels,getPlatformInfo,getStatus){'use strict';var logger=loggerFactory("taoClientDiagnostic/browser"),_defaults={id:"browser",browserVersionAction:"whichBrowser",browserVersionController:"CompatibilityChecker",browserVersionExtension:"taoClientDiagnostic",action:"check",controller:"DiagnosticChecker",browserslistUrl:"https://oat-sa.github.io/browserslist-app-tao/api.json"},_placeHolders={CURRENT_BROWSER:"%CURRENT_BROWSER%",CURRENT_OS:"%CURRENT_OS%"},_messages=[{title:__("Operating system and web browser"),status:__("Checking the browser..."),browser:__("Web browser"),os:__("Operating system")}],unknown=__("Unknown");return function(config){function checkBrowserSupport(platformInfo){var currentDevice=platformInfo.isMobile?"mobile":"desktop",currentOS=platformInfo.os.toLowerCase(),currentBrowser=platformInfo.browser.toLowerCase(),currentVersion=platformInfo.browserVersion;return fetchBrowserList().then(function(list){return list.some(function(entry){var browser=entry.browser,device=entry.device,os=entry.os,versions=entry.versions;return!(currentDevice!==device)&&!(os&&os.toLowerCase()!==currentOS)&&!(browser.toLowerCase()!==currentBrowser)&&_(versions).map(function(version){return version.split("-")}).flatten().value().some(function(version){return 0<=currentVersion.localeCompare(version,void 0,{numeric:!0})})},{})})}var initConfig=getConfig(config,_defaults),labels=getLabels(_messages,initConfig.level),fetchBrowserList=function(){return request({url:initConfig.browserslistUrl,noToken:!0}).catch(function(){return[]})};return{start:function start(done){var _this6=this;getPlatformInfo(window,initConfig).catch(function(err){return logger.error(err),{browser:unknown,browserVersion:"",os:unknown,osVersion:"",isMobile:!1}}).then(function(platformInfo){return checkBrowserSupport(platformInfo).then(function(browserSupported){return Object.assign(platformInfo,{browserSupported:browserSupported})})}).then(function(platformInfo){request({url:urlHelper.route(initConfig.action,initConfig.controller,initConfig.extension),data:platformInfo,method:"POST",noToken:!0}).catch(function(){return{success:!1,type:"error",message:__("Unable to validate the data as the server did not respond in time.")}}).then(function(data){var percentage="success"===data.type?100:"warning"===data.type?33:0,status=_this6.getFeedback(percentage,data),summary=_this6.getSummary(platformInfo);status.customMsgRenderer=function(customMsg){return(customMsg||"").replace(_placeHolders.CURRENT_BROWSER,summary.browser.value).replace(_placeHolders.CURRENT_OS,summary.os.value)},done(status,summary,platformInfo)})})},get labels(){return labels},getSummary:function getSummary(results){var currentBrowser="".concat(results.browser," ").concat(results.browserVersion),currentOs="".concat(results.os," ").concat(results.osVersion);return{browser:{message:labels.browser,value:currentBrowser},os:{message:labels.os,value:currentOs}}},getFeedback:function getFeedback(result,data){var status=getStatus(result,data);return status.id=initConfig.id,status.title=labels.title,status}}}}),define("tpl!taoClientDiagnostic/tools/diagnostic/tpl/main",["handlebars"],function(hb){return hb.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var stack1,helper,buffer="";return buffer+="<p>",(helper=helpers.header)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.header,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</p>",buffer}function program3(depth0,data){var stack1,helper,buffer="";return buffer+="<p>",(helper=helpers.info)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.info,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</p>",buffer}function program5(depth0,data){var stack1,helper,buffer="";return buffer+="<p>",(helper=helpers.setup)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.setup,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</p>",buffer}function program7(depth0,data){var helper,options,buffer="";return buffer+="\n <p>\n <label for=\"school_id\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School ID:",options):helperMissing.call(depth0,"__","School ID:",options)))+"</label>\n <input type=\"text\" data-control=\"school_id\" id=\"school_id\" name=\"school_id\" maxlength=\"255\" placeholder=\""+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School ID",options):helperMissing.call(depth0,"__","School ID",options)))+"\" />\n </p>\n <p>\n <label for=\"workstation\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Workstation:",options):helperMissing.call(depth0,"__","Workstation:",options)))+"</label>\n <input type=\"text\" data-control=\"workstation\" id=\"workstation\" name=\"workstation\" maxlength=\"64\" placeholder=\""+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Workstation name",options):helperMissing.call(depth0,"__","Workstation name",options)))+"\" />\n </p>\n ",buffer}function program9(depth0,data){var stack1,buffer="";return buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.validateSchoolName,{hash:{},inverse:self.program(12,program12,data),fn:self.program(10,program10,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",buffer}function program10(depth0,data){var helper,options,buffer="";return buffer+="\n <p>\n <label for=\"school_number\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School number:",options):helperMissing.call(depth0,"__","School number:",options)))+"</label>\n <input type=\"text\" data-control=\"school_number\" id=\"school_number\" name=\"school_number\" maxlength=\"10\" placeholder=\""+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School number",options):helperMissing.call(depth0,"__","School number",options)))+"\" />\n </p>\n <p>\n <label for=\"school_pin\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School PIN:",options):helperMissing.call(depth0,"__","School PIN:",options)))+"</label>\n <input type=\"text\" data-control=\"school_pin\" id=\"school_pin\" name=\"school_pin\" maxlength=\"4\" placeholder=\""+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School PIN code (4 digits)",options):helperMissing.call(depth0,"__","School PIN code (4 digits)",options)))+"\" />\n </p>\n ",buffer}function program12(depth0,data){var helper,options,buffer="";return buffer+="\n <p>\n <label for=\"school_name\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School name:",options):helperMissing.call(depth0,"__","School name:",options)))+"</label>\n <input type=\"text\" data-control=\"school_name\" id=\"school_name\" name=\"school_name\" maxlength=\"255\" placeholder=\""+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School name",options):helperMissing.call(depth0,"__","School name",options)))+"\" />\n </p>\n ",buffer}this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var stack1,helper,buffer="",escapeExpression=this.escapeExpression,helperMissing=helpers.helperMissing,self=this;return buffer+="<div class=\"diagnostics-main-area\">\n\n <h1>",(helper=helpers.title)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.title,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</h1>\n\n <div class=\"intro\">\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.header,{hash:{},inverse:self.noop,fn:self.program(1,program1,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.info,{hash:{},inverse:self.noop,fn:self.program(3,program3,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.setup,{hash:{},inverse:self.noop,fn:self.program(5,program5,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.requireSchoolId,{hash:{},inverse:self.noop,fn:self.program(7,program7,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.requireSchoolName,{hash:{},inverse:self.noop,fn:self.program(9,program9,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n </div>\n\n <div class=\"clearfix\">\n <button data-action=\"test-launcher\" class=\"btn-info small rgt\">",(helper=helpers.button)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.button,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</button>\n </div>\n\n <ul class=\"plain results\"></ul>\n\n <div class=\"status\">\n <h2></h2>\n </div>\n\n</div>",buffer})}),define("tpl!taoClientDiagnostic/tools/diagnostic/tpl/result",["handlebars"],function(hb){return hb.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var helper,options,buffer="";return buffer+="\n <div class=\"clearfix\">\n <button data-action=\"show-details\" class=\"rgt btn-info small\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Show Details",options):helperMissing.call(depth0,"__","Show Details",options)))+"</button>\n <button data-action=\"hide-details\" class=\"rgt btn-info small hidden\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Hide Details",options):helperMissing.call(depth0,"__","Hide Details",options)))+"</button>\n <div class=\"details hidden\"></div>\n </div>\n ",buffer}this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var stack1,helper,buffer="",helperMissing=helpers.helperMissing,escapeExpression=this.escapeExpression,self=this;return buffer+="<li data-result=\"",(helper=helpers.id)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.id,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\">\n <h2>",(helper=helpers.title)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.title,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</h2>\n <div class=\"result\"></div>\n\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.details,{hash:{},inverse:self.noop,fn:self.program(1,program1,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n</li>",buffer})}),define("tpl!taoClientDiagnostic/tools/diagnostic/tpl/details",["handlebars"],function(hb){return hb.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var stack1,helper,buffer="";return buffer+="\n <tr><td>",(helper=helpers.message)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.message,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</td><td>",(helper=helpers.value)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.value,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</td></tr>\n ",buffer}this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var stack1,helper,options,buffer="",escapeExpression=this.escapeExpression,helperMissing=helpers.helperMissing,self=this;return buffer+="<div class=\"details\">\n <h2>"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Details",options):helperMissing.call(depth0,"__","Details",options)))+"</h2>\n <div>\n <table class=\"matrix\">\n <tbody>\n ",stack1=helpers.each.call(depth0,depth0,{hash:{},inverse:self.noop,fn:self.program(1,program1,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n </tbody>\n </table>\n </div>\n</div>",buffer})}),define("tpl!taoClientDiagnostic/tools/diagnostic/tpl/feedback",["handlebars"],function(hb){return hb.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var stack1,helper,buffer="";return buffer+="<div class=\"legend\">",(helper=helpers.legend)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.legend,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</div>",buffer}function program3(depth0,data){var stack1,helper,buffer="";return buffer+="<div class=\"customMsg\">",(helper=helpers.customMsg)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.customMsg,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</div>",buffer}this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var stack1,helper,buffer="",escapeExpression=this.escapeExpression,self=this;return buffer+="<div class=\"small feedback feedback-",(helper=helpers.type)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.type,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\">\n <span class=\"icon icon-",(helper=helpers.type)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.type,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\"></span>\n <span class=\"msg\">",(helper=helpers.message)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.message,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</span>\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.legend,{hash:{},inverse:self.noop,fn:self.program(1,program1,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.customMsg,{hash:{},inverse:self.noop,fn:self.program(3,program3,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n</div>",buffer})}),define("tpl!taoClientDiagnostic/tools/diagnostic/tpl/quality-bar",["handlebars"],function(hb){return hb.template(function(Handlebars,depth0,helpers,partials,data){function program3(depth0,data){var stack1,helper,buffer="";return buffer+=" title=\"",(helper=helpers.label)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.label,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\"",buffer}this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var stack1,buffer="",escapeExpression=this.escapeExpression,self=this;return buffer+="<div class=\"quality-bar\">\n <div class=\"quality-indicator",stack1=helpers["if"].call(depth0,depth0&&depth0.wide,{hash:{},inverse:self.noop,fn:self.program(1,function(){return" wide"},data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\"",stack1=helpers["if"].call(depth0,depth0&&depth0.label,{hash:{},inverse:self.noop,fn:self.program(3,program3,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="></div>\n</div>",buffer})}),define("css!taoClientDiagnosticCss/diagnostics",[],function(){}),define("taoClientDiagnostic/tools/diagnostic/diagnostic",["jquery","lodash","i18n","async","ui/component","core/logger","core/store","core/request","core/dataProvider/request","ui/dialog/alert","ui/feedback","util/url","taoClientDiagnostic/tools/performances/tester","taoClientDiagnostic/tools/bandwidth/tester","taoClientDiagnostic/tools/upload/tester","taoClientDiagnostic/tools/browser/tester","taoClientDiagnostic/tools/getStatus","taoClientDiagnostic/tools/getConfig","tpl!taoClientDiagnostic/tools/diagnostic/tpl/main","tpl!taoClientDiagnostic/tools/diagnostic/tpl/result","tpl!taoClientDiagnostic/tools/diagnostic/tpl/details","tpl!taoClientDiagnostic/tools/diagnostic/tpl/feedback","tpl!taoClientDiagnostic/tools/diagnostic/tpl/quality-bar","css!taoClientDiagnosticCss/diagnostics"],function($,_,__,async,component,loggerFactory,store,request,requestData,dialogAlert,feedback,urlHelper,performancesTester,bandwidthTester,uploadTester,browserTester,getStatus,getConfig,mainTpl,resultTpl,detailsTpl,feedbackTpl,qualityBarTpl){'use strict';var logger=loggerFactory("taoClientDiagnostic/diagnostic"),_defaults={title:__("System Compatibility"),header:__("This tool will run a number of tests in order to establish how well your current environment is suitable to run the TAO platform."),info:__("Be aware that these tests will take up to several minutes."),button:__("Test system compatibility"),actionStore:"storeData",actionSchool:"schoolName",controller:"DiagnosticChecker",extension:"taoClientDiagnostic",actionDropId:"deleteId",storeAllRuns:!1,configurableText:{}},_thresholds=[{threshold:0,message:__("Your system requires a compatibility update, please contact your system administrator."),type:"error"},{threshold:33,message:__("Your system is not optimal, please contact your system administrator."),type:"warning"},{threshold:66,message:__("Your system is fully compliant."),type:"success"}],diagnostic={changeStatus:function changeStatus(status){return this.is("rendered")&&this.controls.$status.html(status),this},store:function(type,data,done){var config=this.config,url=urlHelper.route(config.actionStore,config.controller,config.extension,config.storeParams);data=_.omit(data,"values"),data.type=type,request({url:url,data:data,method:"POST",noToken:!0}).then(done).catch(function(err){logger.error(err),feedback().error(__("Unable to save the results! Please check your connection.")),done()})},getCustomMsg:function getCustomMsg(key){return this.config.configurableText[key]},addCustomFeedbackMsg:function addCustomFeedbackMsg(status,msg){this.hasFailed(status)&&msg&&(_.isFunction(status.customMsgRenderer)&&(msg=status.customMsgRenderer(msg)),status.feedback=status.feedback||{},status.feedback.customMsg=msg)},hasFailed:function hasFailed(result){return!(result&&result.feedback&&"success"===result.feedback.type)},addResult:function addResult(result){if(this.is("rendered")){result.quality&&result.quality.label&&2<result.quality.label.toString().length&&(result.quality.wide=!0);var $main=$(resultTpl(result)),$result=$main.find(".result");result.feedback&&$result.append($(feedbackTpl(result.feedback))),result.quality&&$result.append($(qualityBarTpl(result.quality))),result.details&&$main.find(".details").append($(detailsTpl(result.details)));var $indicator=$main.find(".quality-indicator");this.controls.$results.append($main),$main.fadeIn(function(){$indicator.length&&$indicator.animate({left:result.percentage*$main.outerWidth()/100-$indicator.outerWidth()/2})})}return this},cleanUp:function cleanUp(){return this.controls.$results.empty(),this},enable:function enable(){return this.controls.$start.removeClass("hidden"),this},disable:function disable(){return this.controls.$start.addClass("hidden"),this},prepare:function prepare(){return this.trigger("start"),this.changeStatus(__("Starting...")),this.setState("running",!0),this.setState("done",!1),this.cleanUp(),this.disable(),this},finish:function finish(){var config=this.config;return this.enable(),config.storeAllRuns&&this.deleteIdentifier(),this.trigger("end"),this.changeStatus(__("Done!")),this.setState("running",!1),this.setState("done",!0),this},deleteIdentifier:function deleteIdentifier(){var url=urlHelper.route(this.config.actionDropId,this.config.controller,this.config.extension);return request({url:url,method:"POST",noToken:!0})},run:function run(){var _this7=this,information=[],scores={},testers=[],customInput=this.getCustomInput(),doRun=function(){var doCheck=function(testerConfig,cb){var testerId=testerConfig.id;_this7.trigger("starttester",testerId),_this7.setState(testerId,!0);require([testerConfig.tester],function processTester(testerFactory){var tester=testerFactory(getConfig(testerConfig,_this7.config),_this7);_this7.changeStatus(tester.labels.status),tester.start(function(status,details,results){if(testerConfig.customMsgKey){var customMsg=_this7.getCustomMsg(testerConfig.customMsgKey);_this7.addCustomFeedbackMsg(status,customMsg)}_.forEach(details,function(info){return information.push(info)}),scores[status.id]=status,_this7.trigger("endtester",testerId,status),_this7.setState(testerId,!1),results=_.mapValues(results,function(value){switch(_typeof(value)){case"boolean":return value?1:0;case"object":return JSON.stringify(value);}return value}),_this7.store(testerId,results,function(){_this7.addResult(status),cb()})})},function processFailure(err){logger.error(err),feedback().error(__("Unable to process with the diagnostic tester %s. The tester module is unreachable.",testerId)),cb()})};_this7.is("rendered")&&(_this7.prepare(),_.forEach(_this7.config.testers,function(testerConfig,testerId){testerConfig.id=testerConfig.id||testerId,testerConfig.enabled&&testers.push(function(cb){return doCheck(testerConfig,cb)})}),async.series(testers,function(){var total=_.min(scores,"globalPercentage"),status=getStatus(total.globalPercentage,_thresholds);status.title=__("Total"),status.id="total",_this7.addCustomFeedbackMsg(status,_this7.config.configurableText.diagTotalCheckResult),status.details=information,_this7.addResult(status),_this7.finish()}))};return 0<_.size(customInput)?this.store("custom_input",customInput,doRun):doRun(),this},getCustomInput:function getCustomInput(){var _this8=this,vars={};return window.location.href.replace(location.hash,"").replace(/[?&]+([^=&]+)=?([^&]*)?/gi,function(m,key,value){_.has(_this8.config.customInput,key)&&(vars[key]="undefined"==typeof value?"":value)}),vars}};return function(container,config){config&&_.forEach(["title","header","footer","info","button"],function(name){config[name]&&(config[name]=__(config[name]))});var diagComponent=component(diagnostic,_defaults).setTemplate(mainTpl).on("destroy",function(){this.controls=null}).on("init",function(){this.render(container)}).on("render",function(){function getInputValue(name){var $control=getControl(name);return($control&&$control.val()||"").trim()}function setInputValue(name,value){var $control=getControl(name);$control&&$control.val(value)}function toggleControl(name,state){var $control=getControl(name);$control&&("undefined"==typeof state&&(state=!$control.is(":enabled")),state?$control.prop("disabled",!1):$control.prop("disabled",!0))}var _this9=this,runDiagnostics=function(data){data&&_.isPlainObject(data)&&(_this9.config.storeParams=_.assign(_this9.config.storeParams||{},data)),_this9.run()},launch=function(){return runDiagnostics()},getControl=function(name){return _this9.controls["$".concat(name)]},manageSchoolProperties=function(fields,validate){function toggleStart(){var allow=_.every(fields,getInputValue);return toggleControl("start",allow),allow}function toggleFields(state){_.forEach(fields,function(fieldName){toggleControl(fieldName,state)})}_.forEach(fields,function(fieldName){_this9.controls["$".concat(fieldName)]=_this9.getElement().find("[data-control=\"".concat(fieldName,"\"]")).on("keypress",function(e){var shouldStart=13===e.which;shouldStart&&e.preventDefault(),_.defer(function(){toggleStart()&&shouldStart&&_this9.controls.$start.click()})})}),toggleStart(),toggleFields(!1),store("client-diagnostic").then(function(storage){return _this9.on("start.school",function(){_.forEach(fields,function(fieldName){storage.setItem(fieldName,getInputValue(fieldName)).catch(function(error){logger.error(error)})})}),Promise.all(_.map(fields,function(fieldName){return storage.getItem(fieldName).then(function(value){setInputValue(fieldName,value)})}))}).catch(function(error){logger.error(error)}).then(function(){toggleFields(!0),toggleStart()}),launch=function(){var values=_.reduce(fields,function(result,fieldName){return result[fieldName]=getInputValue(fieldName),result},{});_this9.changeStatus(__("Getting school name...")).cleanUp().disable(),_.isFunction(validate)?validate(values).then(runDiagnostics).catch(function(error){var response=error.response||{},message=response.errorMsg||response.errorMessage||__("An error occurred! Please verify your input!");dialogAlert(message),logger.error(error),_this9.changeStatus(__("Failed to get school name")).enable()}):runDiagnostics(values)},_this9.on("start.school",function(){toggleFields(!1)}).on("end.school",function(){toggleFields(!0)})};this.controls={$start:this.$component.find("[data-action=\"test-launcher\"]"),$status:this.$component.find(".status h2"),$results:this.$component.find(".results")},this.controls.$start.on("click",function(){_this9.controls.$start.is(":enabled")&&launch()}),this.config.requireSchoolName&&(this.config.validateSchoolName?manageSchoolProperties(["school_number","school_pin"],function requestSchoolName(values){var componentConfig=_this9.config;return requestData(urlHelper.route(componentConfig.actionSchool,componentConfig.controller,componentConfig.extension),values,"POST").then(function(data){return{school_name:data,school_number:values.school_number}})}):manageSchoolProperties(["school_name"])),this.config.requireSchoolId&&manageSchoolProperties(["school_id","workstation"]),this.controls.$results.on("click","button[data-action=\"show-details\"]",function(){var $btn=$(this).closest("button"),$result=$btn.closest("[data-result]"),$details=$result.find(".details");$details.removeClass("hidden"),$btn.addClass("hidden"),$result.find("[data-action=\"hide-details\"]").removeClass("hidden")}),this.controls.$results.on("click","button[data-action=\"hide-details\"]",function(){var $btn=$(this).closest("button"),$result=$btn.closest("[data-result]"),$details=$result.find(".details");$details.addClass("hidden"),$btn.addClass("hidden"),$result.find("[data-action=\"show-details\"]").removeClass("hidden")})});return _.defer(function(){return diagComponent.init(config)}),diagComponent}}),define("tpl!taoClientDiagnostic/templates/diagnostic/main",["handlebars"],function(hb){return hb.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var stack1,buffer="";return buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.diagInstructions,{hash:{},inverse:self.noop,fn:self.program(2,program2,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",buffer}function program2(depth0,data){var stack1,helper,buffer="";return buffer+="<p>",(helper=helpers.diagInstructions)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.diagInstructions,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</p>",buffer}function program4(depth0,data){var stack1,helper,buffer="";return buffer+="<p>",(helper=helpers.header)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.header,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</p>",buffer}function program6(depth0,data){var stack1,helper,buffer="";return buffer+="<p>",(helper=helpers.info)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.info,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</p>",buffer}function program8(depth0,data){var helper,options,buffer="";return buffer+="\n <p>\n <label for=\"school_id\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School ID:",options):helperMissing.call(depth0,"__","School ID:",options)))+"</label>\n <input type=\"text\" data-control=\"school_id\" id=\"school_id\" name=\"school_id\" maxlength=\"255\" placeholder=\""+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School ID",options):helperMissing.call(depth0,"__","School ID",options)))+"\" />\n </p>\n ",buffer}function program10(depth0,data){var stack1,buffer="";return buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.validateSchoolName,{hash:{},inverse:self.program(13,program13,data),fn:self.program(11,program11,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",buffer}function program11(depth0,data){var helper,options,buffer="";return buffer+="\n <p>\n <label for=\"school_number\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School number:",options):helperMissing.call(depth0,"__","School number:",options)))+"</label>\n <input type=\"text\" data-control=\"school_number\" id=\"school_number\" name=\"school_number\" maxlength=\"10\" placeholder=\""+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School number",options):helperMissing.call(depth0,"__","School number",options)))+"\" />\n </p>\n <p>\n <label for=\"school_pin\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School PIN:",options):helperMissing.call(depth0,"__","School PIN:",options)))+"</label>\n <input type=\"text\" data-control=\"school_pin\" id=\"school_pin\" name=\"school_pin\" maxlength=\"4\" placeholder=\""+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School PIN code (4 digits)",options):helperMissing.call(depth0,"__","School PIN code (4 digits)",options)))+"\" />\n </p>\n ",buffer}function program13(depth0,data){var helper,options,buffer="";return buffer+="\n <p>\n <label for=\"school_name\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School name:",options):helperMissing.call(depth0,"__","School name:",options)))+"</label>\n <input type=\"text\" data-control=\"school_name\" id=\"school_name\" name=\"school_name\" maxlength=\"255\" placeholder=\""+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"School name",options):helperMissing.call(depth0,"__","School name",options)))+"\" />\n </p>\n ",buffer}this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var stack1,helper,options,buffer="",escapeExpression=this.escapeExpression,self=this,helperMissing=helpers.helperMissing;return buffer+="<div class=\"diagnostics-main-area\">\n\n <h1>",(helper=helpers.title)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.title,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</h1>\n\n <div class=\"intro\">\n ",stack1=helpers["with"].call(depth0,depth0&&depth0.configurableText,{hash:{},inverse:self.noop,fn:self.program(1,program1,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.header,{hash:{},inverse:self.noop,fn:self.program(4,program4,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.info,{hash:{},inverse:self.noop,fn:self.program(6,program6,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.requireSchoolId,{hash:{},inverse:self.noop,fn:self.program(8,program8,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n ",stack1=helpers["if"].call(depth0,depth0&&depth0.requireSchoolName,{hash:{},inverse:self.noop,fn:self.program(10,program10,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\n <p>\n <label for=\"workstation\">"+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Workstation:",options):helperMissing.call(depth0,"__","Workstation:",options)))+"</label>\n <input type=\"text\" data-control=\"workstation\" id=\"workstation\" name=\"workstation\" maxlength=\"64\" placeholder=\""+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Workstation name",options):helperMissing.call(depth0,"__","Workstation name",options)))+"\" />\n </p>\n </div>\n\n <div class=\"clearfix\">\n <button data-action=\"test-launcher\" class=\"btn-info small rgt\">",(helper=helpers.button)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.button,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"</button>\n </div>\n\n <ul class=\"plain results\"></ul>\n\n <div class=\"status\">\n <h2></h2>\n </div>\n\n</div>",buffer})}),define("taoClientDiagnostic/controller/Diagnostic/diagnostic",["module","jquery","i18n","helpers","core/request","layout/loading-bar","ui/actionbar","ui/feedback","taoClientDiagnostic/tools/diagnostic/diagnostic","tpl!taoClientDiagnostic/templates/diagnostic/main"],function(module,$,__,helpers,request,loadingBar,actionbar,feedback,diagnosticFactory,diagnosticTpl){'use strict';return loadingBar.start(),{start:function start(){function installTester(workstation){diagnosticFactory($list,config).setTemplate(diagnosticTpl).on("render",function(){var _this10=this;this.controls.$workstation=this.getElement().find("[data-control=\"workstation\"]").on("keypress",function(e){13===e.which&&(e.preventDefault(),_this10.run())}).val(workstation),loadingBar.stop(),config.autoStart&&this.run()}).on("start",function(){this.config.storeParams=this.config.storeParams||{},this.config.storeParams.workstation=this.controls.$workstation.val(),this.controls.$workstation.prop("disabled",!0),loadingBar.start()}).on("end",function(){this.controls.$workstation.prop("disabled",!1),loadingBar.stop()})}var $container=$(".diagnostic-runner"),extension=$container.data("extension")||"taoClientDiagnostic",$list=$container.find(".list"),$panel=$(".panel"),extensionConfig=$container.data("config")||{},config=extensionConfig.diagnostic||extensionConfig,indexUrl=helpers._url("index","Diagnostic",extension),buttons=[],moduleConfig=module.config()||{};config.configurableText=moduleConfig.configurableText||{},buttons.push({id:"back",icon:"step-backward",title:__("Return to the list"),label:__("List of readiness checks"),action:function action(){window.location.href=indexUrl}}),window.self===window.top&&buttons.push({id:"exitButton",icon:"close",title:__("Exit"),label:__("Exit"),action:function action(){window.self.close()}}),actionbar({renderTo:$panel,buttons:buttons});var url=helpers._url("workstation","DiagnosticChecker",extension);request({url:url,noToken:!0}).then(function(data){return installTester(data&&data.workstation)}).catch(function(){feedback().error(__("Unable to get the workstation name!")),installTester()})}}}),!function(e,t,i){"use strict";"function"==typeof define&&define.amd?define("taoClientDiagnostic/lib/fingerprint/fingerprint2",i):"undefined"!=typeof module&&module.exports?module.exports=i():t.exports?t.exports=i():t[e]=i()}("Fingerprint2",this,function(){"use strict";var e=function(t){if(!(this instanceof e))return new e(t);this.options=this.extend(t,{swfContainerId:"fingerprintjs2",swfPath:"flash/compiled/FontList.swf",detectScreenOrientation:!0,sortPluginsFor:[/palemoon/i],userDefinedFonts:[]}),this.nativeForEach=Array.prototype.forEach,this.nativeMap=Array.prototype.map};return e.prototype={extend:function extend(e,t){if(null==e)return t;for(var i in e)null!=e[i]&&t[i]!==e[i]&&(t[i]=e[i]);return t},get:function get(e){var t=this,i={data:[],push:function push(e){var i=e.key,a=e.value;"function"==typeof t.options.preprocessor&&(a=t.options.preprocessor(i,a)),this.data.push({key:i,value:a})}};i=this.userAgentKey(i),i=this.languageKey(i),i=this.colorDepthKey(i),i=this.pixelRatioKey(i),i=this.hardwareConcurrencyKey(i),i=this.screenResolutionKey(i),i=this.availableScreenResolutionKey(i),i=this.timezoneOffsetKey(i),i=this.sessionStorageKey(i),i=this.localStorageKey(i),i=this.indexedDbKey(i),i=this.addBehaviorKey(i),i=this.openDatabaseKey(i),i=this.cpuClassKey(i),i=this.platformKey(i),i=this.doNotTrackKey(i),i=this.pluginsKey(i),i=this.canvasKey(i),i=this.webglKey(i),i=this.adBlockKey(i),i=this.hasLiedLanguagesKey(i),i=this.hasLiedResolutionKey(i),i=this.hasLiedOsKey(i),i=this.hasLiedBrowserKey(i),i=this.touchSupportKey(i),i=this.customEntropyFunction(i),this.fontsKey(i,function(i){var a=[];t.each(i.data,function(e){var t=e.value;"undefined"!=typeof e.value.join&&(t=e.value.join(";")),a.push(t)});var r=t.x64hash128(a.join("~~~"),31);return e(r,i.data)})},customEntropyFunction:function customEntropyFunction(e){return"function"==typeof this.options.customFunction&&e.push({key:"custom",value:this.options.customFunction()}),e},userAgentKey:function userAgentKey(e){return this.options.excludeUserAgent||e.push({key:"user_agent",value:this.getUserAgent()}),e},getUserAgent:function getUserAgent(){return navigator.userAgent},languageKey:function languageKey(e){return this.options.excludeLanguage||e.push({key:"language",value:navigator.language||navigator.userLanguage||navigator.browserLanguage||navigator.systemLanguage||""}),e},colorDepthKey:function colorDepthKey(e){return this.options.excludeColorDepth||e.push({key:"color_depth",value:screen.colorDepth||-1}),e},pixelRatioKey:function pixelRatioKey(e){return this.options.excludePixelRatio||e.push({key:"pixel_ratio",value:this.getPixelRatio()}),e},getPixelRatio:function getPixelRatio(){return window.devicePixelRatio||""},screenResolutionKey:function screenResolutionKey(e){return this.options.excludeScreenResolution?e:this.getScreenResolution(e)},getScreenResolution:function getScreenResolution(e){var t;return t=this.options.detectScreenOrientation&&screen.height>screen.width?[screen.height,screen.width]:[screen.width,screen.height],"undefined"!=typeof t&&e.push({key:"resolution",value:t}),e},availableScreenResolutionKey:function availableScreenResolutionKey(e){return this.options.excludeAvailableScreenResolution?e:this.getAvailableScreenResolution(e)},getAvailableScreenResolution:function getAvailableScreenResolution(e){var t;return screen.availWidth&&screen.availHeight&&(t=this.options.detectScreenOrientation?screen.availHeight>screen.availWidth?[screen.availHeight,screen.availWidth]:[screen.availWidth,screen.availHeight]:[screen.availHeight,screen.availWidth]),"undefined"!=typeof t&&e.push({key:"available_resolution",value:t}),e},timezoneOffsetKey:function timezoneOffsetKey(e){return this.options.excludeTimezoneOffset||e.push({key:"timezone_offset",value:new Date().getTimezoneOffset()}),e},sessionStorageKey:function sessionStorageKey(e){return!this.options.excludeSessionStorage&&this.hasSessionStorage()&&e.push({key:"session_storage",value:1}),e},localStorageKey:function localStorageKey(e){return!this.options.excludeSessionStorage&&this.hasLocalStorage()&&e.push({key:"local_storage",value:1}),e},indexedDbKey:function indexedDbKey(e){return!this.options.excludeIndexedDB&&this.hasIndexedDB()&&e.push({key:"indexed_db",value:1}),e},addBehaviorKey:function addBehaviorKey(e){return document.body&&!this.options.excludeAddBehavior&&document.body.addBehavior&&e.push({key:"add_behavior",value:1}),e},openDatabaseKey:function openDatabaseKey(e){return!this.options.excludeOpenDatabase&&window.openDatabase&&e.push({key:"open_database",value:1}),e},cpuClassKey:function cpuClassKey(e){return this.options.excludeCpuClass||e.push({key:"cpu_class",value:this.getNavigatorCpuClass()}),e},platformKey:function platformKey(e){return this.options.excludePlatform||e.push({key:"navigator_platform",value:this.getNavigatorPlatform()}),e},doNotTrackKey:function doNotTrackKey(e){return this.options.excludeDoNotTrack||e.push({key:"do_not_track",value:this.getDoNotTrack()}),e},canvasKey:function canvasKey(e){return!this.options.excludeCanvas&&this.isCanvasSupported()&&e.push({key:"canvas",value:this.getCanvasFp()}),e},webglKey:function webglKey(e){return this.options.excludeWebGL?e:this.isWebGlSupported()?(e.push({key:"webgl",value:this.getWebglFp()}),e):e},adBlockKey:function adBlockKey(e){return this.options.excludeAdBlock||e.push({key:"adblock",value:this.getAdBlock()}),e},hasLiedLanguagesKey:function hasLiedLanguagesKey(e){return this.options.excludeHasLiedLanguages||e.push({key:"has_lied_languages",value:this.getHasLiedLanguages()}),e},hasLiedResolutionKey:function hasLiedResolutionKey(e){return this.options.excludeHasLiedResolution||e.push({key:"has_lied_resolution",value:this.getHasLiedResolution()}),e},hasLiedOsKey:function hasLiedOsKey(e){return this.options.excludeHasLiedOs||e.push({key:"has_lied_os",value:this.getHasLiedOs()}),e},hasLiedBrowserKey:function hasLiedBrowserKey(e){return this.options.excludeHasLiedBrowser||e.push({key:"has_lied_browser",value:this.getHasLiedBrowser()}),e},fontsKey:function fontsKey(e,t){return this.options.excludeJsFonts?this.flashFontsKey(e,t):this.jsFontsKey(e,t)},flashFontsKey:function flashFontsKey(e,t){return this.options.excludeFlashFonts?t(e):this.hasSwfObjectLoaded()&&this.hasMinFlashInstalled()?"undefined"==typeof this.options.swfPath?t(e):void this.loadSwfAndDetectFonts(function(i){e.push({key:"swf_fonts",value:i.join(";")}),t(e)}):t(e)},jsFontsKey:function jsFontsKey(e,t){var i=this;return setTimeout(function(){var a=["monospace","sans-serif","serif"],r=["Andale Mono","Arial","Arial Black","Arial Hebrew","Arial MT","Arial Narrow","Arial Rounded MT Bold","Arial Unicode MS","Bitstream Vera Sans Mono","Book Antiqua","Bookman Old Style","Calibri","Cambria","Cambria Math","Century","Century Gothic","Century Schoolbook","Comic Sans","Comic Sans MS","Consolas","Courier","Courier New","Garamond","Geneva","Georgia","Helvetica","Helvetica Neue","Impact","Lucida Bright","Lucida Calligraphy","Lucida Console","Lucida Fax","LUCIDA GRANDE","Lucida Handwriting","Lucida Sans","Lucida Sans Typewriter","Lucida Sans Unicode","Microsoft Sans Serif","Monaco","Monotype Corsiva","MS Gothic","MS Outlook","MS PGothic","MS Reference Sans Serif","MS Sans Serif","MS Serif","MYRIAD","MYRIAD PRO","Palatino","Palatino Linotype","Segoe Print","Segoe Script","Segoe UI","Segoe UI Light","Segoe UI Semibold","Segoe UI Symbol","Tahoma","Times","Times New Roman","Times New Roman PS","Trebuchet MS","Verdana","Wingdings","Wingdings 2","Wingdings 3"];i.options.extendedJsFonts&&(r=r.concat(["Abadi MT Condensed Light","Academy Engraved LET","ADOBE CASLON PRO","Adobe Garamond","ADOBE GARAMOND PRO","Agency FB","Aharoni","Albertus Extra Bold","Albertus Medium","Algerian","Amazone BT","American Typewriter","American Typewriter Condensed","AmerType Md BT","Andalus","Angsana New","AngsanaUPC","Antique Olive","Aparajita","Apple Chancery","Apple Color Emoji","Apple SD Gothic Neo","Arabic Typesetting","ARCHER","ARNO PRO","Arrus BT","Aurora Cn BT","AvantGarde Bk BT","AvantGarde Md BT","AVENIR","Ayuthaya","Bandy","Bangla Sangam MN","Bank Gothic","BankGothic Md BT","Baskerville","Baskerville Old Face","Batang","BatangChe","Bauer Bodoni","Bauhaus 93","Bazooka","Bell MT","Bembo","Benguiat Bk BT","Berlin Sans FB","Berlin Sans FB Demi","Bernard MT Condensed","BernhardFashion BT","BernhardMod BT","Big Caslon","BinnerD","Blackadder ITC","BlairMdITC TT","Bodoni 72","Bodoni 72 Oldstyle","Bodoni 72 Smallcaps","Bodoni MT","Bodoni MT Black","Bodoni MT Condensed","Bodoni MT Poster Compressed","Bookshelf Symbol 7","Boulder","Bradley Hand","Bradley Hand ITC","Bremen Bd BT","Britannic Bold","Broadway","Browallia New","BrowalliaUPC","Brush Script MT","Californian FB","Calisto MT","Calligrapher","Candara","CaslonOpnface BT","Castellar","Centaur","Cezanne","CG Omega","CG Times","Chalkboard","Chalkboard SE","Chalkduster","Charlesworth","Charter Bd BT","Charter BT","Chaucer","ChelthmITC Bk BT","Chiller","Clarendon","Clarendon Condensed","CloisterBlack BT","Cochin","Colonna MT","Constantia","Cooper Black","Copperplate","Copperplate Gothic","Copperplate Gothic Bold","Copperplate Gothic Light","CopperplGoth Bd BT","Corbel","Cordia New","CordiaUPC","Cornerstone","Coronet","Cuckoo","Curlz MT","DaunPenh","Dauphin","David","DB LCD Temp","DELICIOUS","Denmark","DFKai-SB","Didot","DilleniaUPC","DIN","DokChampa","Dotum","DotumChe","Ebrima","Edwardian Script ITC","Elephant","English 111 Vivace BT","Engravers MT","EngraversGothic BT","Eras Bold ITC","Eras Demi ITC","Eras Light ITC","Eras Medium ITC","EucrosiaUPC","Euphemia","Euphemia UCAS","EUROSTILE","Exotc350 Bd BT","FangSong","Felix Titling","Fixedsys","FONTIN","Footlight MT Light","Forte","FrankRuehl","Fransiscan","Freefrm721 Blk BT","FreesiaUPC","Freestyle Script","French Script MT","FrnkGothITC Bk BT","Fruitger","FRUTIGER","Futura","Futura Bk BT","Futura Lt BT","Futura Md BT","Futura ZBlk BT","FuturaBlack BT","Gabriola","Galliard BT","Gautami","Geeza Pro","Geometr231 BT","Geometr231 Hv BT","Geometr231 Lt BT","GeoSlab 703 Lt BT","GeoSlab 703 XBd BT","Gigi","Gill Sans","Gill Sans MT","Gill Sans MT Condensed","Gill Sans MT Ext Condensed Bold","Gill Sans Ultra Bold","Gill Sans Ultra Bold Condensed","Gisha","Gloucester MT Extra Condensed","GOTHAM","GOTHAM BOLD","Goudy Old Style","Goudy Stout","GoudyHandtooled BT","GoudyOLSt BT","Gujarati Sangam MN","Gulim","GulimChe","Gungsuh","GungsuhChe","Gurmukhi MN","Haettenschweiler","Harlow Solid Italic","Harrington","Heather","Heiti SC","Heiti TC","HELV","Herald","High Tower Text","Hiragino Kaku Gothic ProN","Hiragino Mincho ProN","Hoefler Text","Humanst 521 Cn BT","Humanst521 BT","Humanst521 Lt BT","Imprint MT Shadow","Incised901 Bd BT","Incised901 BT","Incised901 Lt BT","INCONSOLATA","Informal Roman","Informal011 BT","INTERSTATE","IrisUPC","Iskoola Pota","JasmineUPC","Jazz LET","Jenson","Jester","Jokerman","Juice ITC","Kabel Bk BT","Kabel Ult BT","Kailasa","KaiTi","Kalinga","Kannada Sangam MN","Kartika","Kaufmann Bd BT","Kaufmann BT","Khmer UI","KodchiangUPC","Kokila","Korinna BT","Kristen ITC","Krungthep","Kunstler Script","Lao UI","Latha","Leelawadee","Letter Gothic","Levenim MT","LilyUPC","Lithograph","Lithograph Light","Long Island","Lydian BT","Magneto","Maiandra GD","Malayalam Sangam MN","Malgun Gothic","Mangal","Marigold","Marion","Marker Felt","Market","Marlett","Matisse ITC","Matura MT Script Capitals","Meiryo","Meiryo UI","Microsoft Himalaya","Microsoft JhengHei","Microsoft New Tai Lue","Microsoft PhagsPa","Microsoft Tai Le","Microsoft Uighur","Microsoft YaHei","Microsoft Yi Baiti","MingLiU","MingLiU_HKSCS","MingLiU_HKSCS-ExtB","MingLiU-ExtB","Minion","Minion Pro","Miriam","Miriam Fixed","Mistral","Modern","Modern No. 20","Mona Lisa Solid ITC TT","Mongolian Baiti","MONO","MoolBoran","Mrs Eaves","MS LineDraw","MS Mincho","MS PMincho","MS Reference Specialty","MS UI Gothic","MT Extra","MUSEO","MV Boli","Nadeem","Narkisim","NEVIS","News Gothic","News GothicMT","NewsGoth BT","Niagara Engraved","Niagara Solid","Noteworthy","NSimSun","Nyala","OCR A Extended","Old Century","Old English Text MT","Onyx","Onyx BT","OPTIMA","Oriya Sangam MN","OSAKA","OzHandicraft BT","Palace Script MT","Papyrus","Parchment","Party LET","Pegasus","Perpetua","Perpetua Titling MT","PetitaBold","Pickwick","Plantagenet Cherokee","Playbill","PMingLiU","PMingLiU-ExtB","Poor Richard","Poster","PosterBodoni BT","PRINCETOWN LET","Pristina","PTBarnum BT","Pythagoras","Raavi","Rage Italic","Ravie","Ribbon131 Bd BT","Rockwell","Rockwell Condensed","Rockwell Extra Bold","Rod","Roman","Sakkal Majalla","Santa Fe LET","Savoye LET","Sceptre","Script","Script MT Bold","SCRIPTINA","Serifa","Serifa BT","Serifa Th BT","ShelleyVolante BT","Sherwood","Shonar Bangla","Showcard Gothic","Shruti","Signboard","SILKSCREEN","SimHei","Simplified Arabic","Simplified Arabic Fixed","SimSun","SimSun-ExtB","Sinhala Sangam MN","Sketch Rockwell","Skia","Small Fonts","Snap ITC","Snell Roundhand","Socket","Souvenir Lt BT","Staccato222 BT","Steamer","Stencil","Storybook","Styllo","Subway","Swis721 BlkEx BT","Swiss911 XCm BT","Sylfaen","Synchro LET","System","Tamil Sangam MN","Technical","Teletype","Telugu Sangam MN","Tempus Sans ITC","Terminal","Thonburi","Traditional Arabic","Trajan","TRAJAN PRO","Tristan","Tubular","Tunga","Tw Cen MT","Tw Cen MT Condensed","Tw Cen MT Condensed Extra Bold","TypoUpright BT","Unicorn","Univers","Univers CE 55 Medium","Univers Condensed","Utsaah","Vagabond","Vani","Vijaya","Viner Hand ITC","VisualUI","Vivaldi","Vladimir Script","Vrinda","Westminster","WHITNEY","Wide Latin","ZapfEllipt BT","ZapfHumnst BT","ZapfHumnst Dm BT","Zapfino","Zurich BlkEx BT","Zurich Ex BT","ZWAdobeF"])),r=r.concat(i.options.userDefinedFonts);var l=document.getElementsByTagName("body")[0],h=document.createElement("div"),u=document.createElement("div"),c={},d={},g=function(){var e=document.createElement("span");return e.style.position="absolute",e.style.left="-9999px",e.style.fontSize="72px",e.style.lineHeight="normal",e.innerHTML="mmmmmmmmmmlli",e},p=function(e,t){var i=g();return i.style.fontFamily="'"+e+"',"+t,i},f=function(){for(var r,e=[],t=0,i=a.length;t<i;t++)r=g(),r.style.fontFamily=a[t],h.appendChild(r),e.push(r);return e},m=function(){for(var e={},t=0,i=r.length;t<i;t++){for(var l,n=[],o=0,s=a.length;o<s;o++)l=p(r[t],a[o]),u.appendChild(l),n.push(l);e[r[t]]=n}return e},T=function(e){for(var t=!1,i=0;i<a.length;i++)if(t=e[i].offsetWidth!==c[a[i]]||e[i].offsetHeight!==d[a[i]])return t;return t},S=f();l.appendChild(h);for(var x=0,v=a.length;x<v;x++)c[a[x]]=S[x].offsetWidth,d[a[x]]=S[x].offsetHeight;var E=m();l.appendChild(u);for(var M=[],A=0,y=r.length;A<y;A++)T(E[r[A]])&&M.push(r[A]);l.removeChild(u),l.removeChild(h),e.push({key:"js_fonts",value:M}),t(e)},1)},pluginsKey:function pluginsKey(e){return this.options.excludePlugins||(this.isIE()?this.options.excludeIEPlugins||e.push({key:"ie_plugins",value:this.getIEPlugins()}):e.push({key:"regular_plugins",value:this.getRegularPlugins()})),e},getRegularPlugins:function getRegularPlugins(){for(var e=[],t=0,i=navigator.plugins.length;t<i;t++)e.push(navigator.plugins[t]);return this.pluginsShouldBeSorted()&&(e=e.sort(function(e,t){return e.name>t.name?1:e.name<t.name?-1:0})),this.map(e,function(e){var t=this.map(e,function(e){return[e.type,e.suffixes].join("~")}).join(",");return[e.name,e.description,t].join("::")},this)},getIEPlugins:function getIEPlugins(){var e=[];if(Object.getOwnPropertyDescriptor&&Object.getOwnPropertyDescriptor(window,"ActiveXObject")||"ActiveXObject"in window){e=this.map(["AcroPDF.PDF","Adodb.Stream","AgControl.AgControl","DevalVRXCtrl.DevalVRXCtrl.1","MacromediaFlashPaper.MacromediaFlashPaper","Msxml2.DOMDocument","Msxml2.XMLHTTP","PDF.PdfCtrl","QuickTime.QuickTime","QuickTimeCheckObject.QuickTimeCheck.1","RealPlayer","RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)","RealVideo.RealVideo(tm) ActiveX Control (32-bit)","Scripting.Dictionary","SWCtl.SWCtl","Shell.UIHelper","ShockwaveFlash.ShockwaveFlash","Skype.Detection","TDCCtl.TDCCtl","WMPlayer.OCX","rmocx.RealPlayer G2 Control","rmocx.RealPlayer G2 Control.1"],function(e){try{return new ActiveXObject(e),e}catch(t){return null}})}return navigator.plugins&&(e=e.concat(this.getRegularPlugins())),e},pluginsShouldBeSorted:function pluginsShouldBeSorted(){for(var a,e=!1,t=0,i=this.options.sortPluginsFor.length;t<i;t++)if(a=this.options.sortPluginsFor[t],navigator.userAgent.match(a)){e=!0;break}return e},touchSupportKey:function touchSupportKey(e){return this.options.excludeTouchSupport||e.push({key:"touch_support",value:this.getTouchSupport()}),e},hardwareConcurrencyKey:function hardwareConcurrencyKey(e){return this.options.excludeHardwareConcurrency||e.push({key:"hardware_concurrency",value:this.getHardwareConcurrency()}),e},hasSessionStorage:function hasSessionStorage(){try{return!!window.sessionStorage}catch(e){return!0}},hasLocalStorage:function hasLocalStorage(){try{return!!window.localStorage}catch(e){return!0}},hasIndexedDB:function hasIndexedDB(){try{return!!window.indexedDB}catch(e){return!0}},getHardwareConcurrency:function getHardwareConcurrency(){return navigator.hardwareConcurrency?navigator.hardwareConcurrency:"unknown"},getNavigatorCpuClass:function getNavigatorCpuClass(){return navigator.cpuClass?navigator.cpuClass:"unknown"},getNavigatorPlatform:function getNavigatorPlatform(){return navigator.platform?navigator.platform:"unknown"},getDoNotTrack:function getDoNotTrack(){return navigator.doNotTrack?navigator.doNotTrack:navigator.msDoNotTrack?navigator.msDoNotTrack:window.doNotTrack?window.doNotTrack:"unknown"},getTouchSupport:function getTouchSupport(){var e=0,t=!1;"undefined"==typeof navigator.maxTouchPoints?"undefined"!=typeof navigator.msMaxTouchPoints&&(e=navigator.msMaxTouchPoints):e=navigator.maxTouchPoints;try{document.createEvent("TouchEvent"),t=!0}catch(i){}var a=("ontouchstart"in window);return[e,t,a]},getCanvasFp:function getCanvasFp(){var _MathPI=Math.PI,e=[],t=document.createElement("canvas");t.width=2e3,t.height=200,t.style.display="inline";var i=t.getContext("2d");return i.rect(0,0,10,10),i.rect(2,2,6,6),e.push("canvas winding:"+(!1===i.isPointInPath(5,5,"evenodd")?"yes":"no")),i.textBaseline="alphabetic",i.fillStyle="#f60",i.fillRect(125,1,62,20),i.fillStyle="#069",i.font=this.options.dontUseFakeFontInCanvas?"11pt Arial":"11pt no-real-font-123",i.fillText("Cwm fjordbank glyphs vext quiz, \uD83D\uDE03",2,15),i.fillStyle="rgba(102, 204, 0, 0.2)",i.font="18pt Arial",i.fillText("Cwm fjordbank glyphs vext quiz, \uD83D\uDE03",4,45),i.globalCompositeOperation="multiply",i.fillStyle="rgb(255,0,255)",i.beginPath(),i.arc(50,50,50,0,2*_MathPI,!0),i.closePath(),i.fill(),i.fillStyle="rgb(0,255,255)",i.beginPath(),i.arc(100,50,50,0,2*_MathPI,!0),i.closePath(),i.fill(),i.fillStyle="rgb(255,255,0)",i.beginPath(),i.arc(75,100,50,0,2*_MathPI,!0),i.closePath(),i.fill(),i.fillStyle="rgb(255,0,255)",i.arc(75,75,75,0,2*_MathPI,!0),i.arc(75,75,25,0,2*_MathPI,!0),i.fill("evenodd"),e.push("canvas fp:"+t.toDataURL()),e.join("~")},getWebglFp:function getWebglFp(){var e,t=function(_t){return e.clearColor(0,0,0,1),e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),"["+_t[0]+", "+_t[1]+"]"},i=function(e){var t,i=e.getExtension("EXT_texture_filter_anisotropic")||e.getExtension("WEBKIT_EXT_texture_filter_anisotropic")||e.getExtension("MOZ_EXT_texture_filter_anisotropic");return i?(t=e.getParameter(i.MAX_TEXTURE_MAX_ANISOTROPY_EXT),0===t&&(t=2),t):null};if(e=this.getWebglCanvas(),!e)return null;var a=[],o=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,o);var s=new Float32Array([-.2,-.9,0,.4,-.26,0,0,.732134444,0]);e.bufferData(e.ARRAY_BUFFER,s,e.STATIC_DRAW),o.itemSize=3,o.numItems=3;var l=e.createProgram(),h=e.createShader(e.VERTEX_SHADER);e.shaderSource(h,"attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}"),e.compileShader(h);var u=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(u,"precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}"),e.compileShader(u),e.attachShader(l,h),e.attachShader(l,u),e.linkProgram(l),e.useProgram(l),l.vertexPosAttrib=e.getAttribLocation(l,"attrVertex"),l.offsetUniform=e.getUniformLocation(l,"uniformOffset"),e.enableVertexAttribArray(l.vertexPosArray),e.vertexAttribPointer(l.vertexPosAttrib,o.itemSize,e.FLOAT,!1,0,0),e.uniform2f(l.offsetUniform,1,1),e.drawArrays(e.TRIANGLE_STRIP,0,o.numItems),null!=e.canvas&&a.push(e.canvas.toDataURL()),a.push("extensions:"+e.getSupportedExtensions().join(";")),a.push("webgl aliased line width range:"+t(e.getParameter(e.ALIASED_LINE_WIDTH_RANGE))),a.push("webgl aliased point size range:"+t(e.getParameter(e.ALIASED_POINT_SIZE_RANGE))),a.push("webgl alpha bits:"+e.getParameter(e.ALPHA_BITS)),a.push("webgl antialiasing:"+(e.getContextAttributes().antialias?"yes":"no")),a.push("webgl blue bits:"+e.getParameter(e.BLUE_BITS)),a.push("webgl depth bits:"+e.getParameter(e.DEPTH_BITS)),a.push("webgl green bits:"+e.getParameter(e.GREEN_BITS)),a.push("webgl max anisotropy:"+i(e)),a.push("webgl max combined texture image units:"+e.getParameter(e.MAX_COMBINED_TEXTURE_IMAGE_UNITS)),a.push("webgl max cube map texture size:"+e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE)),a.push("webgl max fragment uniform vectors:"+e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS)),a.push("webgl max render buffer size:"+e.getParameter(e.MAX_RENDERBUFFER_SIZE)),a.push("webgl max texture image units:"+e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)),a.push("webgl max texture size:"+e.getParameter(e.MAX_TEXTURE_SIZE)),a.push("webgl max varying vectors:"+e.getParameter(e.MAX_VARYING_VECTORS)),a.push("webgl max vertex attribs:"+e.getParameter(e.MAX_VERTEX_ATTRIBS)),a.push("webgl max vertex texture image units:"+e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS)),a.push("webgl max vertex uniform vectors:"+e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS)),a.push("webgl max viewport dims:"+t(e.getParameter(e.MAX_VIEWPORT_DIMS))),a.push("webgl red bits:"+e.getParameter(e.RED_BITS)),a.push("webgl renderer:"+e.getParameter(e.RENDERER)),a.push("webgl shading language version:"+e.getParameter(e.SHADING_LANGUAGE_VERSION)),a.push("webgl stencil bits:"+e.getParameter(e.STENCIL_BITS)),a.push("webgl vendor:"+e.getParameter(e.VENDOR)),a.push("webgl version:"+e.getParameter(e.VERSION));try{var c=e.getExtension("WEBGL_debug_renderer_info");c&&(a.push("webgl unmasked vendor:"+e.getParameter(c.UNMASKED_VENDOR_WEBGL)),a.push("webgl unmasked renderer:"+e.getParameter(c.UNMASKED_RENDERER_WEBGL)))}catch(d){}return e.getShaderPrecisionFormat?(a.push("webgl vertex shader high float precision:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.HIGH_FLOAT).precision),a.push("webgl vertex shader high float precision rangeMin:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.HIGH_FLOAT).rangeMin),a.push("webgl vertex shader high float precision rangeMax:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.HIGH_FLOAT).rangeMax),a.push("webgl vertex shader medium float precision:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision),a.push("webgl vertex shader medium float precision rangeMin:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).rangeMin),a.push("webgl vertex shader medium float precision rangeMax:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).rangeMax),a.push("webgl vertex shader low float precision:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.LOW_FLOAT).precision),a.push("webgl vertex shader low float precision rangeMin:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.LOW_FLOAT).rangeMin),a.push("webgl vertex shader low float precision rangeMax:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.LOW_FLOAT).rangeMax),a.push("webgl fragment shader high float precision:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision),a.push("webgl fragment shader high float precision rangeMin:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).rangeMin),a.push("webgl fragment shader high float precision rangeMax:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).rangeMax),a.push("webgl fragment shader medium float precision:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision),a.push("webgl fragment shader medium float precision rangeMin:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).rangeMin),a.push("webgl fragment shader medium float precision rangeMax:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).rangeMax),a.push("webgl fragment shader low float precision:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.LOW_FLOAT).precision),a.push("webgl fragment shader low float precision rangeMin:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.LOW_FLOAT).rangeMin),a.push("webgl fragment shader low float precision rangeMax:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.LOW_FLOAT).rangeMax),a.push("webgl vertex shader high int precision:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.HIGH_INT).precision),a.push("webgl vertex shader high int precision rangeMin:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.HIGH_INT).rangeMin),a.push("webgl vertex shader high int precision rangeMax:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.HIGH_INT).rangeMax),a.push("webgl vertex shader medium int precision:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_INT).precision),a.push("webgl vertex shader medium int precision rangeMin:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_INT).rangeMin),a.push("webgl vertex shader medium int precision rangeMax:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_INT).rangeMax),a.push("webgl vertex shader low int precision:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.LOW_INT).precision),a.push("webgl vertex shader low int precision rangeMin:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.LOW_INT).rangeMin),a.push("webgl vertex shader low int precision rangeMax:"+e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.LOW_INT).rangeMax),a.push("webgl fragment shader high int precision:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_INT).precision),a.push("webgl fragment shader high int precision rangeMin:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_INT).rangeMin),a.push("webgl fragment shader high int precision rangeMax:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_INT).rangeMax),a.push("webgl fragment shader medium int precision:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_INT).precision),a.push("webgl fragment shader medium int precision rangeMin:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_INT).rangeMin),a.push("webgl fragment shader medium int precision rangeMax:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_INT).rangeMax),a.push("webgl fragment shader low int precision:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.LOW_INT).precision),a.push("webgl fragment shader low int precision rangeMin:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.LOW_INT).rangeMin),a.push("webgl fragment shader low int precision rangeMax:"+e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.LOW_INT).rangeMax),a.join("~")):a.join("~")},getAdBlock:function getAdBlock(){var e=document.createElement("div");e.innerHTML="&nbsp;",e.className="adsbox";var t=!1;try{document.body.appendChild(e),t=0===document.getElementsByClassName("adsbox")[0].offsetHeight,document.body.removeChild(e)}catch(i){t=!1}return t},getHasLiedLanguages:function getHasLiedLanguages(){if("undefined"!=typeof navigator.languages)try{var e=navigator.languages[0].substr(0,2);if(e!==navigator.language.substr(0,2))return!0}catch(t){return!0}return!1},getHasLiedResolution:function getHasLiedResolution(){return screen.width<screen.availWidth||screen.height<screen.availHeight},getHasLiedOs:function getHasLiedOs(){var e,t=navigator.userAgent.toLowerCase(),i=navigator.oscpu,a=navigator.platform.toLowerCase();e=0<=t.indexOf("windows phone")?"Windows Phone":0<=t.indexOf("win")?"Windows":0<=t.indexOf("android")?"Android":0<=t.indexOf("linux")?"Linux":0<=t.indexOf("iphone")||0<=t.indexOf("ipad")?"iOS":0<=t.indexOf("mac")?"Mac":"Other";var r;if(r="ontouchstart"in window||0<navigator.maxTouchPoints||0<navigator.msMaxTouchPoints,r&&"Windows Phone"!==e&&"Android"!==e&&"iOS"!==e&&"Other"!==e)return!0;if("undefined"!=typeof i){if(i=i.toLowerCase(),0<=i.indexOf("win")&&"Windows"!==e&&"Windows Phone"!==e)return!0;if(0<=i.indexOf("linux")&&"Linux"!==e&&"Android"!==e)return!0;if(0<=i.indexOf("mac")&&"Mac"!==e&&"iOS"!==e)return!0;if(0===i.indexOf("win")&&0===i.indexOf("linux")&&0<=i.indexOf("mac")&&"other"!==e)return!0}return 0<=a.indexOf("win")&&"Windows"!==e&&"Windows Phone"!==e||(0<=a.indexOf("linux")||0<=a.indexOf("android")||0<=a.indexOf("pike"))&&"Linux"!==e&&"Android"!==e||(0<=a.indexOf("mac")||0<=a.indexOf("ipad")||0<=a.indexOf("ipod")||0<=a.indexOf("iphone"))&&"Mac"!==e&&"iOS"!==e||0===a.indexOf("win")&&0===a.indexOf("linux")&&0<=a.indexOf("mac")&&"other"!==e||"undefined"==typeof navigator.plugins&&"Windows"!==e&&"Windows Phone"!==e},getHasLiedBrowser:function getHasLiedBrowser(){var e,t=navigator.userAgent.toLowerCase(),i=navigator.productSub;if(e=0<=t.indexOf("firefox")?"Firefox":0<=t.indexOf("opera")||0<=t.indexOf("opr")?"Opera":0<=t.indexOf("chrome")?"Chrome":0<=t.indexOf("safari")?"Safari":0<=t.indexOf("trident")?"Internet Explorer":"Other",("Chrome"===e||"Safari"===e||"Opera"===e)&&"20030107"!==i)return!0;var a=eval.toString().length;if(37===a&&"Safari"!==e&&"Firefox"!==e&&"Other"!==e)return!0;if(39===a&&"Internet Explorer"!==e&&"Other"!==e)return!0;if(33===a&&"Chrome"!==e&&"Opera"!==e&&"Other"!==e)return!0;var r;try{throw"a"}catch(n){try{n.toSource(),r=!0}catch(o){r=!1}}return r&&"Firefox"!==e&&"Other"!==e},isCanvasSupported:function isCanvasSupported(){var e=document.createElement("canvas");return e.getContext&&e.getContext("2d")},isWebGlSupported:function isWebGlSupported(){if(!this.isCanvasSupported())return!1;var e,t=document.createElement("canvas");try{e=t.getContext&&(t.getContext("webgl")||t.getContext("experimental-webgl"))}catch(i){e=!1}return!!window.WebGLRenderingContext&&!!e},isIE:function isIE(){return"Microsoft Internet Explorer"===navigator.appName||"Netscape"===navigator.appName&&/Trident/.test(navigator.userAgent)},hasSwfObjectLoaded:function hasSwfObjectLoaded(){return"undefined"!=typeof window.swfobject},hasMinFlashInstalled:function hasMinFlashInstalled(){return swfobject.hasFlashPlayerVersion("9.0.0")},addFlashDivNode:function addFlashDivNode(){var e=document.createElement("div");e.setAttribute("id",this.options.swfContainerId),document.body.appendChild(e)},loadSwfAndDetectFonts:function loadSwfAndDetectFonts(e){window.___fp_swf_loaded=function(t){e(t)};var i=this.options.swfContainerId;this.addFlashDivNode();swfobject.embedSWF(this.options.swfPath,i,"1","1","9.0.0",!1,{onReady:"___fp_swf_loaded"},{allowScriptAccess:"always",menu:"false"},{})},getWebglCanvas:function getWebglCanvas(){var e=document.createElement("canvas"),t=null;try{t=e.getContext("webgl")||e.getContext("experimental-webgl")}catch(i){}return t||(t=null),t},each:function each(e,t,i){if(null!==e)if(this.nativeForEach&&e.forEach===this.nativeForEach)e.forEach(t,i);else if(e.length===+e.length){for(var a=0,r=e.length;a<r;a++)if({}===t.call(i,e[a],a,e))return;}else for(var n in e)if(e.hasOwnProperty(n)&&{}===t.call(i,e[n],n,e))return},map:function map(e,t,i){var a=[];return null==e?a:this.nativeMap&&e.map===this.nativeMap?e.map(t,i):(this.each(e,function(e,r,n){a[a.length]=t.call(i,e,r,n)}),a)},x64Add:function x64Add(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var i=[0,0,0,0];return i[3]+=e[3]+t[3],i[2]+=i[3]>>>16,i[3]&=65535,i[2]+=e[2]+t[2],i[1]+=i[2]>>>16,i[2]&=65535,i[1]+=e[1]+t[1],i[0]+=i[1]>>>16,i[1]&=65535,i[0]+=e[0]+t[0],i[0]&=65535,[i[0]<<16|i[1],i[2]<<16|i[3]]},x64Multiply:function x64Multiply(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var i=[0,0,0,0];return i[3]+=e[3]*t[3],i[2]+=i[3]>>>16,i[3]&=65535,i[2]+=e[2]*t[3],i[1]+=i[2]>>>16,i[2]&=65535,i[2]+=e[3]*t[2],i[1]+=i[2]>>>16,i[2]&=65535,i[1]+=e[1]*t[3],i[0]+=i[1]>>>16,i[1]&=65535,i[1]+=e[2]*t[2],i[0]+=i[1]>>>16,i[1]&=65535,i[1]+=e[3]*t[1],i[0]+=i[1]>>>16,i[1]&=65535,i[0]+=e[0]*t[3]+e[1]*t[2]+e[2]*t[1]+e[3]*t[0],i[0]&=65535,[i[0]<<16|i[1],i[2]<<16|i[3]]},x64Rotl:function x64Rotl(e,t){return t%=64,32===t?[e[1],e[0]]:32>t?[e[0]<<t|e[1]>>>32-t,e[1]<<t|e[0]>>>32-t]:(t-=32,[e[1]<<t|e[0]>>>32-t,e[0]<<t|e[1]>>>32-t])},x64LeftShift:function x64LeftShift(e,t){return t%=64,0===t?e:32>t?[e[0]<<t|e[1]>>>32-t,e[1]<<t]:[e[1]<<t-32,0]},x64Xor:function x64Xor(e,t){return[e[0]^t[0],e[1]^t[1]]},x64Fmix:function x64Fmix(e){return e=this.x64Xor(e,[0,e[0]>>>1]),e=this.x64Multiply(e,[4283543511,3981806797]),e=this.x64Xor(e,[0,e[0]>>>1]),e=this.x64Multiply(e,[3301882366,444984403]),e=this.x64Xor(e,[0,e[0]>>>1])},x64hash128:function x64hash128(e,t){e=e||"",t=t||0;for(var i=e.length%16,a=e.length-i,r=[0,t],n=[0,t],o=[0,0],s=[0,0],l=[2277735313,289559509],h=[1291169091,658871167],u=0;u<a;u+=16)o=[255&e.charCodeAt(u+4)|(255&e.charCodeAt(u+5))<<8|(255&e.charCodeAt(u+6))<<16|(255&e.charCodeAt(u+7))<<24,255&e.charCodeAt(u)|(255&e.charCodeAt(u+1))<<8|(255&e.charCodeAt(u+2))<<16|(255&e.charCodeAt(u+3))<<24],s=[255&e.charCodeAt(u+12)|(255&e.charCodeAt(u+13))<<8|(255&e.charCodeAt(u+14))<<16|(255&e.charCodeAt(u+15))<<24,255&e.charCodeAt(u+8)|(255&e.charCodeAt(u+9))<<8|(255&e.charCodeAt(u+10))<<16|(255&e.charCodeAt(u+11))<<24],o=this.x64Multiply(o,l),o=this.x64Rotl(o,31),o=this.x64Multiply(o,h),r=this.x64Xor(r,o),r=this.x64Rotl(r,27),r=this.x64Add(r,n),r=this.x64Add(this.x64Multiply(r,[0,5]),[0,1390208809]),s=this.x64Multiply(s,h),s=this.x64Rotl(s,33),s=this.x64Multiply(s,l),n=this.x64Xor(n,s),n=this.x64Rotl(n,31),n=this.x64Add(n,r),n=this.x64Add(this.x64Multiply(n,[0,5]),[0,944331445]);switch(o=[0,0],s=[0,0],i){case 15:s=this.x64Xor(s,this.x64LeftShift([0,e.charCodeAt(u+14)],48));case 14:s=this.x64Xor(s,this.x64LeftShift([0,e.charCodeAt(u+13)],40));case 13:s=this.x64Xor(s,this.x64LeftShift([0,e.charCodeAt(u+12)],32));case 12:s=this.x64Xor(s,this.x64LeftShift([0,e.charCodeAt(u+11)],24));case 11:s=this.x64Xor(s,this.x64LeftShift([0,e.charCodeAt(u+10)],16));case 10:s=this.x64Xor(s,this.x64LeftShift([0,e.charCodeAt(u+9)],8));case 9:s=this.x64Xor(s,[0,e.charCodeAt(u+8)]),s=this.x64Multiply(s,h),s=this.x64Rotl(s,33),s=this.x64Multiply(s,l),n=this.x64Xor(n,s);case 8:o=this.x64Xor(o,this.x64LeftShift([0,e.charCodeAt(u+7)],56));case 7:o=this.x64Xor(o,this.x64LeftShift([0,e.charCodeAt(u+6)],48));case 6:o=this.x64Xor(o,this.x64LeftShift([0,e.charCodeAt(u+5)],40));case 5:o=this.x64Xor(o,this.x64LeftShift([0,e.charCodeAt(u+4)],32));case 4:o=this.x64Xor(o,this.x64LeftShift([0,e.charCodeAt(u+3)],24));case 3:o=this.x64Xor(o,this.x64LeftShift([0,e.charCodeAt(u+2)],16));case 2:o=this.x64Xor(o,this.x64LeftShift([0,e.charCodeAt(u+1)],8));case 1:o=this.x64Xor(o,[0,e.charCodeAt(u)]),o=this.x64Multiply(o,l),o=this.x64Rotl(o,31),o=this.x64Multiply(o,h),r=this.x64Xor(r,o);}return r=this.x64Xor(r,[0,e.length]),n=this.x64Xor(n,[0,e.length]),r=this.x64Add(r,n),n=this.x64Add(n,r),r=this.x64Fmix(r),n=this.x64Fmix(n),r=this.x64Add(r,n),n=this.x64Add(n,r),("00000000"+(r[0]>>>0).toString(16)).slice(-8)+("00000000"+(r[1]>>>0).toString(16)).slice(-8)+("00000000"+(n[0]>>>0).toString(16)).slice(-8)+("00000000"+(n[1]>>>0).toString(16)).slice(-8)}},e.VERSION="1.5.1",e}),define("taoClientDiagnostic/tools/fingerprint/tester",["jquery","lodash","i18n","util/url","core/logger","core/store","core/format","lib/uuid","taoClientDiagnostic/tools/getConfig","taoClientDiagnostic/tools/getLabels","taoClientDiagnostic/tools/getStatus","taoClientDiagnostic/lib/fingerprint/fingerprint2"],function($,_,__,url,loggerFactory,store,format,uuid,getConfig,getLabels,getStatus,Fingerprint2){'use strict';var logger=loggerFactory("taoClientDiagnostic/fingerprint"),_defaults={id:"fingerprint"},_storageKeys={store:"client-diagnostic",uuid:"uuid",fingerprint:"value",details:"details",errors:"errors",changed:"changed"},_thresholdValues={error:0,storageIssue:50,changedFingerprint:90,success:100},_thresholds=[{threshold:_thresholdValues.error,message:__("Cannot get your fingerprint"),type:"error"},{threshold:_thresholdValues.storageIssue,message:__("Your fingerprint is %s. However we encountered issue while retrieving the data. Maybe your available disk space is too small"),type:"warning"},{threshold:_thresholdValues.changedFingerprint,message:__("Your fingerprint is %s. However it seems it has changed since the last check. It could be related to changes in your system."),type:"success"},{threshold:_thresholdValues.success,message:__("Your fingerprint is %s"),type:"success"}],_messages=[{title:__("Fingerprint"),status:__("Computing the fingerprint..."),fingerprintValue:__("Fingerprint"),fingerprintUUID:__("Dynamic UID"),fingerprintDetails:__("Fingerprint sources"),fingerprintChanged:__("Change since last fingerprint"),fingerprintErrors:__("Fingerprint errors"),fingerprintError:__("Fingerprint error")}];return function(config){var initConfig=getConfig(config,_defaults),labels=getLabels(_messages,initConfig.level);return{start:function start(done){function handleError(error){errors.push({key:"error",value:""+error}),logger.error(error)}function getStorageKey(key){return"".concat(initConfig.id,"-").concat(_storageKeys[key])}var browserStorage,_this11=this,browserId="error",lastFingerprint="error",freshBrowserId=!1,newFingerprint=!1,errors=[];store(_storageKeys.store).then(function(storage){return browserStorage=storage,Promise.all([browserStorage.getItem(getStorageKey("uuid")).then(function(value){browserId=value}),browserStorage.getItem(getStorageKey("fingerprint")).then(function(value){lastFingerprint=value})])}).catch(handleError).then(function(){return new Promise(function(resolve){new Fingerprint2().get(function(result,details){var results={};results[_storageKeys.fingerprint]=(""+result).toUpperCase(),results[_storageKeys.details]=details,resolve(results)})})}).then(function(results){var pendingPromises=[],resultFingerprint=results[_storageKeys.fingerprint];return browserId||(browserId=uuid(32,16),freshBrowserId=!0),newFingerprint=lastFingerprint!==resultFingerprint&&"error"!==lastFingerprint,results[_storageKeys.uuid]=browserId,results[_storageKeys.changed]=newFingerprint&&!freshBrowserId,browserStorage&&(freshBrowserId&&pendingPromises.push(browserStorage.setItem(getStorageKey("uuid"),browserId)),newFingerprint&&pendingPromises.push(browserStorage.setItem(getStorageKey("fingerprint"),resultFingerprint))),Promise.all(pendingPromises).catch(handleError).then(function(){return results})}).catch(handleError).then(function(results){results=results||{},errors.length&&(results[_storageKeys.errors]=errors.length,results[_storageKeys.details]=(results[_storageKeys.details]||[]).concat(errors));var summary=_this11.getSummary(results),status=_this11.getFeedback(results);done(status,summary,results)})},get labels(){return labels},getSummary:function getSummary(results){var sources=_(results[_storageKeys.details]).map("key").pull("error").value(),summary={fingerprintValue:{message:labels.fingerprintValue,value:results[_storageKeys.fingerprint]},fingerprintDetails:{message:labels.fingerprintDetails,value:__("%d sources (%s)",_.size(sources),sources.join(", "))},fingerprintChanged:{message:labels.fingerprintChanged,value:results[_storageKeys.changed]?__("Yes"):__("No")}};return results[_storageKeys.errors]&&(summary.fingerprintErrors={message:labels.fingerprintErrors,value:results[_storageKeys.errors]},_.forEach(results[_storageKeys.details],function(details,idx){"error"===details.key&&(summary["fingerprintError"+idx]={message:labels.fingerprintError,value:details.value})})),summary},getFeedback:function getFeedback(results){var percentage=results&&results[_storageKeys.fingerprint]&&"error"!==results[_storageKeys.fingerprint]?"error"===results[_storageKeys.uuid]?_thresholdValues.storageIssue:results[_storageKeys.changed]?_thresholdValues.changedFingerprint:_thresholdValues.success:_thresholdValues.error;var status=getStatus(percentage,_thresholds);return status.id=initConfig.id,status.title=labels.title,status.feedback.message=format(status.feedback.message,results&&results[_storageKeys.fingerprint]),status}}}}),define("tpl!taoClientDiagnostic/tools/diagnostic/tpl/fingerprint",["handlebars"],function(hb){return hb.template(function(Handlebars,depth0,helpers,partials,data){function program1(depth0,data){var stack1,helper,options,buffer="";return buffer+="\n<span class=\"detailed-value",stack1=helpers["if"].call(depth0,depth0&&depth0.errors,{hash:{},inverse:self.noop,fn:self.program(2,program2,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="\"",stack1=helpers["if"].call(depth0,depth0&&depth0.errors,{hash:{},inverse:self.noop,fn:self.program(4,program4,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+=">\n <span class=\"value\">",(helper=helpers.value)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.value,stack1="function"===_typeof(helper)?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1),stack1=helpers["if"].call(depth0,depth0&&depth0.errors,{hash:{},inverse:self.noop,fn:self.program(6,program6,data),data:data}),(stack1||0===stack1)&&(buffer+=stack1),buffer+="</span>\n <span class=\"details icon-info\" title=\""+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Show fingerprint details",options):helperMissing.call(depth0,"__","Show fingerprint details",options)))+"\"></span>\n </span>\n",buffer}function program2(){return" errors"}function program4(depth0,data){var helper,options,buffer="";return buffer+=" title=\""+escapeExpression((helper=helpers.__||depth0&&depth0.__,options={hash:{},data:data},helper?helper.call(depth0,"Errors occurred! Please see details",options):helperMissing.call(depth0,"__","Errors occurred! Please see details",options)))+"\"",buffer}function program6(){return" <span class=\"icon-warning\"></span>"}this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var stack1,helperMissing=helpers.helperMissing,escapeExpression=this.escapeExpression,self=this;return stack1=helpers["if"].call(depth0,depth0&&depth0.value,{hash:{},inverse:self.noop,fn:self.program(1,program1,data),data:data}),stack1||0===stack1?stack1:""})}),define("taoClientDiagnostic/tools/csvExporter",["jquery","lodash","i18n","core/request","layout/loading-bar","helpers"],function($,_,__,request,loadingBar,helpers){'use strict';return{exportCsv:function exportCsv(model){function mappingDiagnosticsData(diagnostics){return diagnostics.map(function(diagnostic){var result={};return _.forEach(model,function(field){result[field.id]=field.transform?field.transform(diagnostic[field.id],diagnostic):diagnostic[field.id]}),result})}function arrayToCsv(data){var columnDelimiter=1<arguments.length&&void 0!==arguments[1]?arguments[1]:",",lineDelimiter=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"\n",keys=Object.keys(data[0]),result="".concat(keys.join(columnDelimiter)).concat(lineDelimiter);return data.forEach(function(item){var ctr=0;keys.forEach(function(key){0<ctr&&(result+=columnDelimiter),result+="string"==typeof item[key]&&item[key].includes(columnDelimiter)?"\"".concat(item[key],"\""):item[key],ctr++}),result+=lineDelimiter}),result}function downloadFile(content,filename,type){var blob=new Blob([content],{type:type}),url=URL.createObjectURL(blob),link=$("<a></a>");link.attr("download",filename).attr("href",url).get(0).click(),URL.revokeObjectURL(url),link=null}var $container=$(".diagnostic-index"),extension=$container.data("extension")||"taoClientDiagnostic",serviceUrl=helpers._url("diagnosticData","Diagnostic",extension);loadingBar.start(),request({url:serviceUrl,data:{rows:Number.MAX_SAFE_INTEGER},noToken:!0}).then(function(response){var mappedData=mappingDiagnosticsData(response.data),csvContent=arrayToCsv(mappedData);downloadFile(csvContent,__("diagnostics.csv"),"text/csv"),loadingBar.stop()}).catch(function(){loadingBar.stop()})}}}),define("taoClientDiagnostic/controller/Diagnostic/index",["jquery","lodash","i18n","helpers","moment","core/request","layout/loading-bar","util/encode","ui/feedback","ui/dialog","taoClientDiagnostic/tools/getStatus","taoClientDiagnostic/tools/performances/tester","taoClientDiagnostic/tools/fingerprint/tester","tpl!taoClientDiagnostic/tools/diagnostic/tpl/fingerprint","tpl!taoClientDiagnostic/tools/diagnostic/tpl/details","taoClientDiagnostic/tools/csvExporter","ui/datatable","lib/moment-timezone.min"],function($,_,__,helpers,moment,request,loadingBar,encode,feedback,dialog,getStatus,performancesTesterFactory,fingerprintTesterFactory,fingerprintTpl,detailsTpl,csvExporter){'use strict';var _Mathmax5=Math.max,_Mathround2=Math.round,_Mathpow=Math.pow;function formatNumber(value,digits){var nb="undefined"==typeof digits?2:_Mathmax5(0,parseInt(digits,10)),factor=_Mathpow(10,nb)||1;return _Mathround2(value*factor)/factor}function formatBandwidth(value){return 100<value?"> 100":formatNumber(value)}function transformDateToLocal(date){var time;if(_.isFinite(date)){_.isNumber(date)||(date=_.parseInt(date,10));var d=new Date(1e3*date);time=moment.utc(d)}else time=moment.tz(date,"UTC");return time.tz(moment.tz.guess()).format("Y/MM/DD HH:mm:ss")}return loadingBar.start(),{start:function start(){function requestData(url,selection,message){selection&&selection.length&&(loadingBar.start(),request({url:url,data:{id:selection},method:"POST",noToken:!0}).then(function(response){loadingBar.stop(),response&&response.success?(message&&feedback().success(message),$list.datatable("refresh")):feedback().error("".concat(__("Something went wrong ..."),"<br>").concat(encode.html(response.error)),{encodeHtml:!1})}).catch(function(){return loadingBar.stop()}))}function remove(selection){requestData(removeUrl,selection,__("The readiness check result have been removed"))}var $container=$(".diagnostic-index"),extension=$container.data("extension")||"taoClientDiagnostic",$list=$container.find(".list"),dataset=$container.data("set"),extensionConfig=$container.data("config")||{},config=extensionConfig.diagnostic||extensionConfig,installedExtension=$container.data("installedextension")||!1,diagnosticUrl=helpers._url("diagnostic","Diagnostic",extension),removeUrl=helpers._url("remove","Diagnostic",extension),serviceUrl=helpers._url("diagnosticData","Diagnostic",extension),performancesTester=performancesTesterFactory(config.testers.performance||{}),fingerprintTester=fingerprintTesterFactory(config.testers.fingerprint||{}),tools=[],actions=[],model=[];tools.push({id:"refresh",icon:"reset",title:__("Refresh the page"),label:__("Refresh"),action:function action(){$list.datatable("refresh")}}),tools.push({id:"launch",icon:"play",title:__("Launch another readiness check"),label:__("Launch readiness check"),action:function action(){window.location.href=diagnosticUrl}}),config.export&&tools.push({id:"csvExport",icon:"export",title:__("Export CSV"),label:__("Export CSV"),action:function action(){csvExporter.exportCsv(model)}}),installedExtension&&tools.push({id:"lti",icon:"play",title:__("Try a test delivery"),label:__("Try a test delivery"),action:function action(){window.location.href=deliveryUrl}}),tools.push({id:"remove",icon:"remove",title:__("Remove the selected readiness check results"),label:__("Remove"),massAction:!0,action:function action(selection){dialog({message:__("The selected readiness check results will be removed. Continue ?"),autoRender:!0,autoDestroy:!0,onOkBtn:function onOkBtn(){remove(selection)}})}}),window.self===window.top&&tools.push({id:"exitButton",icon:"close",title:__("Exit"),label:__("Exit"),action:function action(){window.self.close()}}),actions.push({id:"remove",icon:"remove",title:__("Remove the readiness check result?"),action:function action(id){dialog({autoRender:!0,autoDestroy:!0,message:__("The readiness check result will be removed. Continue ?"),onOkBtn:function onOkBtn(){remove([id])}})}}),model.push({id:"workstation",label:__("Workstation")}),config.requireSchoolName&&model.push({id:"school_name",label:__("School name")}),config.requireSchoolId&&model.push({id:"school_id",label:__("School id")}),config.validateSchoolName&&model.push({id:"school_number",label:__("School number")}),config.testers.fingerprint&&config.testers.fingerprint.enabled&&(model.push({id:"fingerprint-cell",label:__("Fingerprint"),transform:function transform(v,row){return fingerprintTpl(row.fingerprint)}}),$list.on("click.fingerprint",".fingerprint-cell span.details",function(e){var id=$(e.target).closest("tr").data("itemIdentifier"),row=_.find(dataset.data,{id:id});row&&dialog({content:detailsTpl(fingerprintTester.getSummary(row.fingerprint)),buttons:"ok",autoRender:!0,autoDestroy:!0})})),config.testers.screen&&config.testers.screen.enabled&&model.push({id:"screen_size",label:__("Screen resolution"),transform:function transform(value,row){if(row.screen&&row.screen.width&&row.screen.height)return row.screen.width+"x"+row.screen.height}}),config.testers.browser&&config.testers.browser.enabled&&(model.push({id:"os",label:__("OS")}),model.push({id:"browser",label:__("Browser")})),config.testers.performance&&config.testers.performance.enabled&&model.push({id:"performance",label:__("Performances"),transform:function transform(value){var status=performancesTester.getFeedback(value);return status.feedback&&status.feedback.message}}),config.testers.bandwidth&&config.testers.bandwidth.enabled&&model.push({id:"bandwidth",label:__("Bandwidth"),transform:formatBandwidth}),config.testers.intensive_bandwidth&&config.testers.intensive_bandwidth.enabled&&model.push({id:"intensive_bandwidth",label:__("Intensive bandwidth"),transform:formatBandwidth}),config.testers.upload&&config.testers.upload.enabled&&model.push({id:"upload",label:__("Upload speed"),transform:formatBandwidth}),model.push({id:"date",label:__("Date"),transform:transformDateToLocal}),$list.on("query.datatable",function(){return loadingBar.start()}).on("load.datatable",function(e,data){dataset=data,loadingBar.stop()}).datatable({url:serviceUrl,status:{empty:__("No readiness checks have been done!"),available:__("Readiness checks already done"),loading:__("Loading")},selectable:!0,tools:tools,actions:actions,model:model},dataset)}}}),define("css!taoClientDiagnosticCss/exclusion-list-form",[],function(){}),define("taoClientDiagnostic/controller/ExclusionList/editInstance",["jquery","ui/tooltipster","select2","css!taoClientDiagnosticCss/exclusion-list-form"],function(){'use strict';return{start:function start(){}}}),define("taoClientDiagnostic/controller/routes",{Authenticator:{actions:{login:"controller/Authenticator/login"}},CompatibilityChecker:{actions:{index:"controller/CompatibilityChecker/diagnostics"}},Diagnostic:{actions:{index:"controller/Diagnostic/index",diagnostic:"controller/Diagnostic/diagnostic"}},ExcludedBrowsers:{actions:{editInstance:"controller/ExclusionList/editInstance"}},ExcludedOS:{actions:{editInstance:"controller/ExclusionList/editInstance"}}}),function(c){var d=document,s=d.createElement("style");s.type="text/css",d.getElementsByTagName("head")[0].appendChild(s),s.styleSheet?s.styleSheet.cssText=c:s.appendChild(d.createTextNode(c))}(".diagnostics-content-area{max-width:768px;margin:40px auto 40px auto}.diagnostics-main-area{margin:40px auto 0 auto;background:#f3f1ef;border:1px solid #ddd;border-radius:2px;-webkit-border-radius:2px;padding:20px}.diagnostics-main-area h1,.diagnostics-main-area h2,.diagnostics-main-area h3{font-style:normal;font-family:\"Source Sans Pro\",sans-serif}.diagnostics-main-area h1{margin-bottom:20px;font-size:20px;font-size:2rem}.diagnostics-main-area h2{margin:0;font-size:14px;font-size:1.4rem}.diagnostics-main-area h3{margin-top:10px;margin-bottom:5px;font-size:12px;font-size:1.2rem}.diagnostics-main-area .status h2,.diagnostics-main-area .details h2{margin:1rem 0}.diagnostics-main-area .legend{font-style:italic;font-weight:normal;font-family:\"Source Sans Pro\",sans-serif;font-size:11px;font-size:1.1rem}.diagnostics-main-area .customMsg{margin-top:10px}.diagnostics-main-area .quality-bar{height:15px;background:linear-gradient(to right, #CE1431 0%, #D57915 25%, #D5A215 50%, #D5CB15 75%, #36B111 100%);opacity:.8;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;margin:5px 0 10px;position:relative}.diagnostics-main-area .quality-indicator{position:absolute;border-width:10px 8px;border-style:solid;border-color:#333 transparent transparent;top:-1px;height:25px;width:0}.diagnostics-main-area .quality-indicator[title]:before{font-size:11px;font-size:1.1rem;content:attr(title);position:absolute;top:-36px;left:-12px;text-align:center;width:24px;height:24px;line-height:24px;display:inline-block;background-color:#0e5d91;color:rgba(255,255,255,0.9);-moz-border-radius:12px;-webkit-border-radius:12px;border-radius:12px}.diagnostics-main-area .quality-indicator.wide[title]:before{left:-16px;width:32px}.diagnostics-main-area [data-result],.diagnostics-main-area .bandwidth-box{display:none}.diagnostics-main-area [data-action=bandwidth-launcher]{margin:5px 0 10px}.diagnostics-main-area li{padding-bottom:10px}.diagnostics-main-area .intro{margin-bottom:20px}.diagnostics-main-area .intro label{display:inline-block;width:150px}table.datatable [class^=\"icon-\"]{padding:0}table.datatable td{font-size:90%;font-weight:normal}table.datatable .progress .state:not(:first-child):before{content:' - '}table.datatable .progress .item-time:before{content:' ('}table.datatable .progress .item-time .total:before{content:' / '}table.datatable .progress .item-time:after{content:')'}.details table.matrix{border:1px solid #ddd;border-radius:2px;-webkit-border-radius:2px;margin-top:5px}.details table.matrix td:first-child{min-width:30%}.diagnostic-scope h1{font-family:\"Source Sans Pro\",sans-serif;font-size:22px;font-size:2.2rem;font-weight:normal}.diagnostic-scope h2{font-family:\"Source Sans Pro\",sans-serif;font-size:18px;font-size:1.8rem;margin:30px 0 10px}.diagnostic-scope form.daterange label{padding:0}.diagnostic-scope form.daterange input{margin:0 10px}.diagnostic-scope table.datatable [class^=\"icon-\"]{padding:0}.diagnostic-scope table.datatable td{font-size:90%;font-weight:normal}.diagnostic-scope .content{margin:auto}.diagnostic-scope .diagnostic-index .content,.diagnostic-scope .diagnostic-runner .content{width:100%}.diagnostic-scope .diagnostic-index .message,.diagnostic-scope .diagnostic-runner .message{padding:8px;text-align:center}.diagnostic-scope .panel .action-bar{background:#266d9c;padding:3px;overflow:hidden;color:#e7eff4}.diagnostic-scope .panel .action-bar .btn-info{overflow:hidden;background:transparent;border:1px rgba(255,255,255,0.3) solid}.diagnostic-scope .diagnostics-main-area{margin-top:0px;max-width:800px}.diagnostic-scope .detailed-value{display:flex;justify-content:space-between}.diagnostic-scope .detailed-value.errors{color:#d8ae5b}.diagnostic-scope .detailed-value .details{font-size:2rem;cursor:pointer;color:#3e7da7}.diagnostic-scope .detailed-value .details:hover{color:#03131d}.action-bar .tool-exitButton,.action-bar [data-control=\"exitButton\"]{float:right}\n\n/*# sourceMappingURL=../../../taoClientDiagnostic/views/css/diagnostics.css.map */.exclusion-list-form .xhtml_form input[type=\"text\"],.exclusion-list-form .xhtml_form select{width:60%}.exclusion-list-form .xhtml_form .icon-help.tooltipstered{float:right;line-height:25px}\n\n/*# sourceMappingURL=../../../taoClientDiagnostic/views/css/exclusion-list-form.css.map */"),define("taoClientDiagnostic/loader/taoClientDiagnostic.bundle",function(){}),window.bundles=(window.bundles||[]).concat(["taoQtiItem/loader/taoQtiItem.min","taoItems/loader/taoItems.min"]);
//# sourceMappingURL=taoClientDiagnostic.min.js.map